<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Проекты on Bizibah</title>
		<link>https://bizibah.com/projects/</link>
		<description>Recent content in Проекты on Bizibah</description>
		<generator>Hugo</generator>
		<language>ru-RU</language>
		
		
		
		
			<atom:link href="https://bizibah.com/projects/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Bah Messenger</title>
				<link>https://bizibah.com/projects/bah/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/bah/</guid>
				<description>&lt;p&gt;Обычный мессенджер — это сервер, через который проходит всё, что вы пишете.&#xA;&lt;code&gt;Bah&lt;/code&gt; устроен иначе: страница в браузере сама становится узлом связи, и&#xA;сообщения идут напрямую от одного собеседника к другому.&lt;/p&gt;&#xA;&lt;p&gt;Сервер тут нужен только для знакомства: он помогает двум браузерам найти друг&#xA;друга, а дальше в разговор не вмешивается. Ключи не покидают устройство, история&#xA;никуда не пишется — закрыли вкладку, и разговора больше нет ни у кого.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Air Theremin</title>
				<link>https://bizibah.com/projects/theremin/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/theremin/</guid>
				<description>&lt;p&gt;Терменвокс — инструмент, на котором играют, не касаясь его. Здесь это работает&#xA;двумя способами, и переключаются они прямо в панели.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Гироскоп.&lt;/strong&gt; Телефон заменяет руки: наклон влево-вправо — громкость, наклон&#xA;вперёд-назад — высоту звука.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Руки.&lt;/strong&gt; Камера следит за двумя ладонями: одна ведёт высоту, другая — громкость.&#xA;Никакого оборудования, кроме той камеры, что уже есть.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Так говорил Заратустра</title>
				<link>https://bizibah.com/projects/zarathustra/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/zarathustra/</guid>
				<description>&lt;p&gt;Присылаете боту текст или ссылку на новость — он возвращает разговор о ней от&#xA;лица философов и жителей разных стран. Получается взгляд на одно и то же событие&#xA;с нескольких неожиданных сторон.&lt;/p&gt;&#xA;&lt;p&gt;Каждый такой разбор бот сохраняет как страницу и тут же публикует на сайт&#xA;проекта, так что архив собирается сам. Связь между ботом и сайтом самая простая,&#xA;через файлы: бот пишет Markdown, генератор сайта его подхватывает.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Тарелочница</title>
				<link>https://bizibah.com/projects/tarelocnica/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/tarelocnica/</guid>
				<description>&lt;p&gt;Бот написан по заказу человека, которому надоело вбивать съеденное руками.&#xA;Работает он просто: присылаете фотографию тарелки — в ответ приходит, что на ней&#xA;лежит и сколько в этом калорий.&lt;/p&gt;&#xA;&lt;p&gt;Считать еду глазами модель умеет заметно лучше, чем кажется на первый взгляд:&#xA;она узнаёт блюдо, прикидывает порцию и раскладывает её на белки, жиры и&#xA;углеводы. Точность не аптечная, но для «много или мало я сегодня съел» этого&#xA;хватает с запасом.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Overton Catcher</title>
				<link>https://bizibah.com/projects/overton-catcher/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/overton-catcher/</guid>
				<description>&lt;p&gt;«Окно Овертона» — про то, как идея проходит путь от немыслимой до обыденной.&#xA;Проект ловит такие сдвиги в новостях: собирает упоминания, считает, как часто&#xA;термин появляется у крупнейших медиа, и складывает это в сводки по языкам —&#xA;ежедневные и недельные.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stupid RSS Reader</title>
				<link>https://bizibah.com/projects/stupid-rss-reader/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/stupid-rss-reader/</guid>
				<description>&lt;p&gt;Мне надоели RSS-клиенты, которые лучше меня знают, что мне читать. Этот не знает&#xA;ничего: он показывает ленты в том порядке, в каком они пришли, и больше не&#xA;вмешивается. Философия проекта в одну строку — приложение ничего не навязывает,&#xA;а только выполняет распоряжения.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Curve of Forgetting</title>
				<link>https://bizibah.com/projects/curve-of-forgetting/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/curve-of-forgetting/</guid>
				<description>&lt;p&gt;Я никак не мог запомнить английское слово &lt;em&gt;kind&lt;/em&gt;: каждый раз приходилось учить&#xA;его значение заново. Задачу я решил как программист — написал для запоминания&#xA;программу.&lt;/p&gt;&#xA;&lt;p&gt;Кривая забывания описывает, как быстро из памяти уходит то, что не повторяют.&#xA;Из неё же следует, когда повторять выгоднее всего: не каждый день подряд, а по&#xA;расширяющимся промежуткам. Приложение берёт текст, который нужно выучить, и&#xA;расставляет эти повторения событиями в вашем Google Календаре — дальше&#xA;напоминает уже он.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Список покупок</title>
				<link>https://bizibah.com/projects/shopping-list/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/shopping-list/</guid>
				<description>&lt;p&gt;Обычные продукты списком с галочками и эмодзи, снизу — поле для заметок.&#xA;Отмеченное и написанное сохраняется в браузере, так что список переживает и&#xA;закрытую вкладку, и дорогу до магазина без сети.&lt;/p&gt;&#xA;&lt;p&gt;Отдельная галочка снимает или ставит сразу все — с подтверждением, чтобы не&#xA;обнулить список случайно у полки с молоком. Ставится на телефон как приложение,&#xA;регистрации и аккаунта нет.&lt;/p&gt;</description>
			</item>
			<item>
				<title>WaterMarkIt</title>
				<link>https://bizibah.com/projects/watermarkit/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/watermarkit/</guid>
				<description>&lt;p&gt;Перетаскиваете картинки, сверху — свой знак в PNG, и на выходе получаете архив с&#xA;готовыми файлами. Размер знака настраивается от 5 до 30 процентов ширины, угол&#xA;выбирается любой из четырёх.&lt;/p&gt;&#xA;&lt;p&gt;Заодно всё приводится к JPG: прозрачные места заливаются белым, а форматы вроде&#xA;WEBP и AVIF перестают быть проблемой для тех, кому картинки нужно отправить.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Work Time</title>
				<link>https://bizibah.com/projects/work-time/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/work-time/</guid>
				<description>&lt;p&gt;Расписание работы — вещь, которую в интерфейсах приходится делать снова и снова:&#xA;семь дней, у каждого свои часы, где-то перерыв, где-то выходной. Компонент&#xA;делает это одним тегом и отдаёт результат обычной моделью, как поле формы.&lt;/p&gt;&#xA;&lt;p&gt;Есть режим только для чтения и несколько видов расписания. Ставится из npm,&#xA;живёт на Angular 7 и бутстрапе — с тех пор я его не трогал, поэтому здесь он как&#xA;архив.&lt;/p&gt;</description>
			</item>
			<item>
				<title>eslint-plugin-superstition</title>
				<link>https://bizibah.com/projects/eslint-plugin-superstition/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/eslint-plugin-superstition/</guid>
				<description>&lt;p&gt;Линтеры следят за отступами и неиспользуемыми переменными. Этот следит за&#xA;суевериями: &lt;code&gt;no-number-13&lt;/code&gt;, &lt;code&gt;no-number-666&lt;/code&gt;, &lt;code&gt;no-number-4&lt;/code&gt; (несчастливое в&#xA;Японии и Китае), &lt;code&gt;no-number-39&lt;/code&gt; — и отдельным правилом &lt;code&gt;must-have-8&lt;/code&gt; требует,&#xA;чтобы в файле встретилась восьмёрка.&lt;/p&gt;&#xA;&lt;p&gt;Правила собраны в набор &lt;code&gt;recommended&lt;/code&gt;, так что подключается плагин одной строкой&#xA;в конфиге. Шутка, доведённая до рабочего состояния: ставится из npm и честно&#xA;ругается на сборке.&lt;/p&gt;</description>
			</item>
			<item>
				<title>cache-observable</title>
				<link>https://bizibah.com/projects/cache-observable/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://bizibah.com/projects/cache-observable/</guid>
				<description>&lt;p&gt;Типичная беда фронтенда: несколько компонентов на странице одновременно просят&#xA;одни и те же данные, и в сеть уходит пачка одинаковых запросов. Лечится это&#xA;кешем, но писать его в каждом сервисе руками скучно.&lt;/p&gt;&#xA;&lt;p&gt;Декоратор &lt;code&gt;@CacheObservable(ms)&lt;/code&gt; вешается на метод, который возвращает поток, и&#xA;дальше всё происходит само: первый вызов идёт на сервер, остальные в течение&#xA;указанных миллисекунд получают уже полученный ответ. Внутри — &lt;code&gt;publishReplay&lt;/code&gt;,&#xA;&lt;code&gt;refCount&lt;/code&gt; и &lt;code&gt;take(1)&lt;/code&gt;, то есть ровно та связка, которую иначе пришлось бы&#xA;выписывать в каждом сервисе.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
