Skip to content

Instantly share code, notes, and snippets.

@Dosant
Dosant / README.md
Last active March 14, 2024 01:39
AWS S3 to OpenAI Whisper via Node.js stream

Current (2023-03-01) OpenAI Whisper API expects a file uploaded as part of multipart/form-data in POST request. I initially struggled to use this API inside Node.js with an audio file stored inside an AWS s3 bucket, so I decided to share this snippet:

The API usage example from the OpenAI docs:

curl --request POST \
  --url https://api.openai.com/v1/audio/transcriptions \
  --header 'Authorization: Bearer TOKEN' \
 --header 'Content-Type: multipart/form-data' \
git branch | grep -v "master" | xargs git branch -D
@Dosant
Dosant / Chat scroll
Created June 16, 2018 20:53
Chat scroll
const scrollToBottom = (el, smooth) => {
el.scroll({
top: el.scrollHeight,
behavior: smooth ? 'smooth' : 'instant'
});
};
const vChatScroll = {
bind: (el, binding) => {
let scrolled = false;
@Dosant
Dosant / Mac - kill process on port
Last active February 24, 2018 15:50
Mac - kill process on port
lsof -i tcp:3000
var articleModel = (function () {
var GLOBAL_ARTICLES = [{
"id": "news/2017/02/28/rossiya-snimet-zapret-na-import-moldavskih-vin",
"title": "Россия снимет запрет на импорт молдавских вин",
"author": "Meduza",
"createdAt": new Date("2017-02-28T05:24:23.856Z"),
"content": "Content of post",
"summary": "Summary of post"
}];
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<div class="header">
var articles = [{
"id": "news/2017/02/28/rossiya-snimet-zapret-na-import-moldavskih-vin",
"title": "Россия снимет запрет на импорт молдавских вин",
"author": "sports",
"createdAt": "2017-02-28T05:24:23.856Z",
"content": "Content of post",
"summary": "Summary of post"
}];
// Сериализуем его
{
"id": "news/2017/02/28/rossiya-snimet-zapret-na-import-moldavskih-vin",
"title": "Россия снимет запрет на импорт молдавских вин",
"author": "sports",
"createdAt": "2017-02-28T05:24:23.856Z",
"content": "Content of post",
"summary": "Summary of post"
}
<form name="filter">
<div class="filter-item filter-date">Фильтр по дате: от: <input name="date-from" type="date" /> до: <input name="date-to" type="date" /></div>
<div class="filter-item filter-author">Фильтр по автору:
<!-- Тут хардкод. По заданию вам надо из javascript наполнять <select> Пример: http://learn.javascript.ru/form-elements#добавьте-опцию-к-селекту -->
<select name="author">
<option value="all" selected>Все</option>
<option value="meduza">Meduza</option>
<option value="ria">Риа Новости</option>
<option value="sports">Sports.ru</option>
</select>
<select id="tags-select" multiple>
<option value="политика" selected>Политика</option>
<option value="музыка" selected>Музыка</option>
<option value="спорт">Спорт</option>
</select>
<p id="tags-text"><p>