Дима Дорошев

Spense.app v0.2

Приложение находится в стадии активной разработки и не доступно для публичного использования.

Привет! Я закончил работу над очередной версией Spense с кучей улучшений и по традиции делюсь самым интересным.

Страница со счетами и кошельками

В интерфейсе приложения теперь можно управлять своими кошельками и смотреть текущий баланс:


Читать далее

Spense.app "под капотом". Код.

Пока Spense v0.2 в разработке, хочу рассказать о внутренней организации приложения с технической точки зрения. Статья эта в основном для (веб-)разработчиков, и язык у нее соответствующий, поэтому если вы читаете и ничего не понимаете, все в порядке, можно просто не читать.

В двух словах

Бэкенд на Django (Python), фронтенд на Django-шаблонах и Bootstrap, с щепоткой JavaScript и местами htmx.

Почему так скучно?

Звучит совсем не хайпово, да. Но стоит помнить, что Spense в текущем его состоянии - это не полноценный продукт. Это скорее прототип, в котором мне часто нужно что-то менять и проверять идеи. Если идеи сработают, я выкину этот код и напишу другой, а если не сработают, просто оставлю на память.

Так что Django я выбрал не потому что я ее очень люблю (на самом деле я ее ненавижу), а потому что за последний год я успел к ней привыкнуть, и прототипировать приложение мне с ней получается легко и быстро.

Читать далее

Spense.app v0.1

Приложение находится в стадии активной разработки и не доступно для публичного использования.

Выкатил версию 0.1 своего "приложения" для учета денег, решил отчитаться о прогрессе. "Приложения" - потому что это не настоящее приложение, а Progressive Web App - по сути веб-сайт, который можно открыть в телефоне, добавить на Home Screen, и он будет открываться на весь экран, без панелей браузера. Настоящие приложения я пока делать не умею, но и в текущем виде оно уже неплохо работает.

Кстати, даже иконка уже есть, нарисовал в ChatGPT/DALL-E:


Как вы уже поняли, свою поделку я назвал Spense. Это название я придумал когда-то давным давно, подрезав слово "expense", и тогде же купил домен, который вот только сейчас более-менее стал мной использоваться.

Сейчас там из пользователей только я, регистрации нет, и, думаю, как минимум до версии 1.0 всё будет закрыто, но я с удовольствием покажу, как там сейчас обстоят дела и что изменилось.

Читать далее

Чаевые

В США и некоторых других странах чаевые играют большую роль, официанты и прочие работники сферы обслуживания ожидают их по умолчанию и порой могут их даже требовать. Я, правда, пока ни в США, ни в тех других странах не был, но люди рассказывают, что надо прям давать, потому что иначе обижаются.

В "Бешеных псах" есть целый спор на эту тему: все уговаривают Стива Бушеми оставить чаевые, потому что у официантов маленькая зарплата, а он ничего оставлять не хочет.

Вообще, эта тема часто проскакивает в кино. И в конце прошлого года меня насторожило то, как часто ее затрагивают в фильме "Один дома":

  • в первом фильме на первых же минутах доставщик пиццы получает "хорошие чаевые" в нагрузку к 122.50$ за 10 пицц. Типа, сколько ему там могли дать, 140-150$ без сдачи? Неплохец так-то.
  • в другой сцене доставки этот же чувак приносит Кевину пиццу за 11.80$, получает 12$ и обзывает клиента "cheapskate" (скряга). В этот раз чаевые в 20 копеек ему очень не понравились.
  • во втором фильме нам показывают, как работник отеля Седрик с улыбкой пересчитывает купюры, и Тим Карри делает ему замечание;
  • но дальше Седрик до конца фильма получает вместо чаевых либо жвачку, либо жёванную жвачку, либо просто ничего. Казалось бы, намекают на то, что Седрик просто лох, но откуда-то же взялась у него та пачка денег, которую он до этого считал.

И вот я подумал: а что если эта любовь к чаевым растет как раз из кинематографа? Представьте себе, что когда-то там официанты, курьеры и работники отелей получали себе зарплаты и ничего больше от жизни не ждали. А тут - бац - оказывается, кому-то там в фильмах платят "щедрые чаевые", прям таким же людям, как мы. При этом фильмы не абы какие, а семейные и для детей, ну чтобы с молодых ногтей это познавать. Значит, думают работники, и нам их надо требовать!

И наоборот: владельцы ресторанов и отелей когда-то платили работникам сносные деньги, а потом - бац - увидели в кино, что такие же люди, как их работники, могут получать вдобавок 10-20$ за каждый заказ! Поэтому постепенно они решили платить им поменьше, несмотря на то, что на самом деле чаевых не так-то много. И в конечном счете имеем то, что имеем.

Че как думаете, сомнительная гипотеза, или окэй?

Я начал делать приложение для учета денег. Зачем?

Примерно с 2014 года я вел учет денег в Google Spreadsheets. Происходило это всегда так: 2-3 раза в неделю я садился за компьютер, собирал чеки, перебирал историю транзакций в банковских приложениях, восстанавливал траты из памяти и записывал их в табличку.

В табличке было по одной строке на каждый день, а в столбцах были счета, кошельки и парочка вычисляемых полей. Отдельным полем шло "Примечание", где я почти в свободной форме расписывал, что куда ушло.

Пример из 2016 года. Эх, полноценные комплексные обеды по 300 и кофе за 100-150 рублей.

Как видите, денег у меня не то чтобы было много. Наверное, потому что в основном кушал и пил кофе вместо работы, но суть в том, что на этом я экономить совсем не хотел. Экономить на ежедневных вещах и в чем-то ужиматься - это в принципе противоестественные для меня занятия, которых я всегда старался избегать. Поэтому и ответ на вопрос "Куда уходят деньги?" меня в тот момент не волновал, а волновали более интересные вопросы:

  • Сколько у меня всего денег прямо сейчас?
  • Сколько у меня было месяц/полгода/год назад? Стал ли я богаче или беднее?
  • Можно ли прямо сейчас потратиться на отпуск/купить новый телефон/сходить в платную клинику? Не уйду ли я в минус к следующей зарплате?
  • Какой у меня должен быть доход, чтобы при текущих тратах хоть какие-нибудь деньги начали накапливаться?
  • Как скоро я начну голодать, если останусь без работы?
Читать далее

Точки опоры

Как-то лет 15 назад ехал я в электричке Москва-Шатура в тамбуре. Все сидячие места были заняты, углы в тамбуре были тоже заняты, поэтому стоял я то ли у двери, то ли у стенки, в общем, не очень удобно. В какой-то момент один из углов тамбура освободился, мужик из него куда-то ушел (поссать между вагонами, скорее всего), и я занял этот угол.

Спустя время мужик вернулся, увидел меня, подошел и попросил освободить место. Я этим был несколько озадачен, но покорно вышел из комфортного угла и встал обратно к своей лоховской стенке. Видимо, по моему выражению лица мужик понял, что я в замешательстве. Он достал пачку сигарет и закурил со словами: "Ну, три точки опоры же лучше, чем две". Я кивнул, подумал про себя, что нихера себе он Архимед, но, в принципе, мысль верная. У стенки тебя шатает гораздо сильнее, чем в углу, где можно упереться ногами в пол и вообще не беспокоиться.

Не знаю почему вспомнил вот эту историю сейчас, спустя год после переезда, но вам, ребята и девчата, желаю вам в новом году побольше точек опоры. Не падайте там!

Немножко из книги Гоггинса

Читаю сейчас первую книгу Дэвида Гоггинса Can't Hurt Me, узнал пару интересных фактов.

💭 "Морские котики" - часто встречающееся определение в русских переводах американских фильмов - это неудачная калька с [US] Navy SEALs. Navy - "военно-морской", а SEAL - акроним от sea, air, land - "море, воздух, земля". Этакие элитные многостаночники, в ряды которых кого попало не берут. Ну а калька фиговая, потому что "морской котик" - это fur seal, а navy seal - это "военно-морской тюлень". И то, и другое одинаково неинформативно при переводе без контекста.

💭 Чернокожим людям тяжелее плавать, чем белым. То ли кости у них плотнее, то ли жировой ткани меньше, то ли и то, и другое - тут уже сложно понять. ChatGPT топит (лол) за то, что все дело в сегрегации и недостаточном доступе к бассейнам. В любом случае, Гоггинсу дорогого стоило подружиться с водой, он эти проблемы очень красноречиво описал.

💭 "Плавучесть" по-английски - buoyancy, очень непривычно, только недавно смог его правильно прочитать ("бо́янси"). По каким-то причинам, это слово популярнее, чем floatability. Появилось, кстати, из испанского глагола boyar - "плавать", и нидерландского boei - буквально "буй".

🎙 Крафтовый Димарик №19 - Нейросети и путешествия

  • Домашние эксперименты с искусственными интеллектами
  • Первые успехи в изучении литовского языка
  • В Ригу за новым паспортом
  • Опять Стамбул
  • Крах любимого спортзала

🎙 Крафтовый Димарик №18 - Опять все хорошо!

  • Поездка в Клайпеду: море, солнце, два бомжа.
  • Качалка теперь официально хобби.
  • Люблю литовское FM-радио поутру.
  • Пора учиться.
  • Псевдо-СДВГ на работе.
  • Юля теперь флорист.

Трагедия Ханса и Нины Райзер

Жила-была Нина Шаранова, проживала она в Санкт-Петербурге и работала акушером-гинекологом. В 1998 году ее попросили побыть переводчиком на свидании одной русской женщины и какого-то американца, которые познакомились через брачное агентство. Американец оказался перспективным программистом по имени Ханс, он владел калифорнийской компанией с командой разработки в России, и получилось так, что на том свидании переводчица Нина понравилась ему гораздо больше. Через год они поженились.

Для Нины этот расклад был очень неплохим: выйти за работящего мужика, переехать из "лихих девяностых" в Калифорнию, родить там детишек и жить припеваючи. Примерно так и получилось: двое детей, домик в Оукленде и, внезапно, место финансового директора в компании Ханса.

Ханс Райзер занимался тем, что разрабатывал новую файловую систему для операционной системы Linux. Назвал он ее незамысловато - ReiserFS. Это была одна из первых журналируемых файловых систем для Linux, что тогда было большим делом: она была и пошустрее, и лучше защищала от сбоев при записи на диск. В 1997 году он открыл компанию Namesys, получил неплохой грант, нанял разработчиков из РФ, и погнал менять мир. В ReiserFS были, конечно, свои нюансы, она требовала доработок, но Ханс был увлеченным, башковитым, и целеустремленным чуваком, так что всё было решаемо.

В какой-то момент что-то пошло не так. Деньги из компании начали потихоньку исчезать, Ханс всё больше времени проводил в России по работе, набрал долгов, чтобы платить людям зарплату. А батя капал ему на мозги, что все из-за жены, что она разваливает компанию, вытягивая из нее деньги.

Нина, со своей стороны, была очень недовольна тем, что Ханс все время где-то шатается за океаном, детей не видит, и подала на развод. Поговаривают, что она решила развестись примерно в то же время, как получила гражданство. По крайней мере, так заявлял сам Ханс, но на слушаниях он вообще много чего заявлял, типа что его жена занимается садо-мазохизмом с его другом, у которого он занял денег, и все они психически неуравновешенные люди, которые хотят его обмануть.

В итоге они развелись, со скрипом и судебными запретами. Ханс уехал к своей маме, дети остались у жены, но они все еще могли видеться. Ханс типа как должен был оплачивать какие-то алименты и медицинские расходы на детей, но платил он их очень неохотно. Мол, мамка придумывает детям болезни, чтобы заиметь с бедолаги еще больше денег.

3 сентября 2006 года Нина завезла к нему детей, и у них в очередной раз случился скандал из-за того, что она опять водила детей по врачам. В какой-то момент скандал вышел из-под контроля, Ханс прописал Нине по вербальнику, задушил насмерть, потихоньку отвез куда-то и закопал. Дети в это время играли то ли на другом этаже дома, то ли в подвале, и они мало что заметили.

Конечно же, Ханс стал главным подозреваемым. Следствие шло почти два года, на адвокатов он потратил все оставшиеся деньги компании, и в 2008 году, когда всем всё стало понятно, он пошел на сделку и показал захоронение тела.

Итог: компания Namesys разорилась и закрылась, русских программистов распустили, Хансу дали "от 15 лет до пожизненного", без всяких компьютеров, и пока по УДО не выпускают. ReiserFS потихоньку протух, и его заменила менее скандальная файловая система ext3, а потом ext4. Детей Ханса и Нины отправили в Россию к бабушке, и они вроде как до сих пор в Питере живут, охреневая от того, что произошло.

Морали нет, думайте сами.

Праиндоевропейский язык

Посмотрел видосик и решил выписать самое интересное со скриншотами.

В школе, а кому-то и в университете, рассказывали про пра-/протоиндоевропейцев, которые жили когда-то очень давно и от которых пошли многие современные языки: английский, русский, итальянский и даже хинди. Все это происходило из-за постоянной миграции этого народа, войн и, что самое главное, отсутствия письменности. У людей не было закрепленных на письме языковых норм, поэтому их легко можно было заменить.

Индоевропейские языки можно разделить на две основные группы: кентум и сатем, в зависимости от того, как они произносят слово "сто": со звуком "k" (лат. centum, гр. κατόν) или "s/š" (рус. сто, лит. šimtas).

Читать далее

Удел барабанщика

Наткнулся на ролик, где барабанщик Арьен ван Весенбек отрабатывает свою партию. Никогда так пристально не следил за ударными, и я прям шокирован объемом работы, которую там надо исполнять.

Во-первых, всю эту установку надо собрать и как-то настроить. Во-вторых, нужно просто дичайшее чувство ритма, чтобы не сбиваться. В-третьих, там еще и обе ноги постоянно участвуют, то есть координация тоже должна быть дай боже. (Я, например, до сих пор не могу себя одновременно одной рукой гладить по голове, а другой хлопать по животу.) В-четвертых, это выглядит физически изнурительно. От одного просмотра у меня уже заболели плечи, а каково вот так два часа на концерте отмачивать?

Ну и самое обидное, наверное, что барабанщика почти не видно за прыгающими по сцене гитаристами, солистами и клавишниками. Поэтому хороших барабанщиков не так много: сочетать в себе такую ответственность, работоспособность и при этом скромность дано не каждому артисту.

Цените барабанщиков.

🎙 Крафтовый Димарик №17 - Viskas Gerai*

  • Поездка в Милан и концерт группы Epica.
  • Поездка в Берлин и концерт Сэма Смита.
  • Веселье с общественным транспортом в Германии.
  • Поездка в Каунас и рыцарский турнир.
  • Литовское здравоохранение.
  • Больше не читаю новости.

* лит. "всё хорошо"

Всегда жалуйтесь

На днях решили заказать на обед грузинской еды в Bolt Food. Нашли неплохой ресторан, понабрали на 40 евро, заказали, ждем. Доставку обещали в течение 40 минут. В какой-то момент Bolt оповестил о том, что курьер уже едет в ресторан, потом еда приготовилась, но курьер исчез. Bolt начал поиск нового курьера, время доставки увеличилось вдвое. Я немного понаблюдал за этим и решил написать в поддержку, потому что что-то явно пошло не так.

В чате поддержки бот сначала автоматически предложил скидку на следующую доставку, но я отказался и вызвал оператора на поговорить. Зачем мне скидка на следующий заказ, когда я еще этот не съел? Оператор проверила заказ, переназначила курьера вручную и сказала, что половину стоимости заказа потом вернут. Смотрю на карту, там действительно появился новый курьер, только поехал он в противоположную сторону от ресторана. Я решил на всякий случай написать и об этом в чатик, на что оператор ответила, что сейчас все порешают.

Спустя время курьер таки приехал и привёз еду, при этом горячую, хотя доставка в конечном счете задержалась на час. Написал в поддержку, что заказ доставлен и все супер, а в ответ получил еще одно извинение и что из-за такой задержки мне вернут теперь полную стоимость заказа, а не половину.

Так что вместо обеда мы получили бесплатный ужин. А если бы не жаловался, получил бы холодную еду непонятно когда и испорченное настроение.

Не люблю хвастаться, но у нас тут праздник борща. На фестивале устроили соревнование, участники одеваются под цвет разных овощей, скатываются по пенной горке в "тарелку с борщом", а Яичко, Кефирчик и Свеколка все это оценивают.

Борщ, конечно, не русский и не украинский, а холодный. По-литовски šaltibarščiai (шалтибарщай) - "холодный борщ".

На видео также можно услышать громкую литовскую речь и оценить, насколько этот язык отличается от всех остальных.

Самое идиотское, что можно было придумать, это виртуальная клавиатура прямоугольной формы в воздухе. Типа, ты можешь очень естественно управлять интерфейсом глазами и пальчиками, но чтобы ввести что-то вручную, надо вытягивать руки вперед и прицеливаться в эти кружочки.

Вот если бы клавиатуру можно было поделить на две половинки и куда угодно их раскидать - был бы кайф. Сидишь на диване, положил руки на колени, на каждой ноге по половинке клавиатуры, настроил удобную раскладку, добавил каких-то еще дополнительных кнопок по бокам, и никаких проблем.

А вот этот вот прямоугольник в воздухе - бред полный.

Бесконечно можно смотреть на три вещи: как горит огонь, как течет вода и как бомбит Вилсаком.

Иногда я открываю Windows и удивляюсь. Центр обновления сокращает выброс углерода 🤦‍♂️

World of Goo

Старая добрая World of Goo заремастерилась (что бы это ни значило) и теперь выпускается под Нетфликсом в App Store и Google Play.

То есть игра бесплатная, но играть в нее можно только тем, у кого есть активная подписка на Нетфликс.

Даже не знаю, как к этому относиться, но игра классная. Залипал на нее в 2008-2009 году вместо подготовки к зачетам.

Курьер Wolt остановился у посольства Беларуси зажечь лампадки и протереть портреты пропавших и убитых белорусов.

Большая комната

Если много лет живешь в двушке, где люди спят в обеих комнатах, у тебя нет "спальни" и "гостиной". Есть "маленькая комната", "большая комната" и кухня.

Я уже лет пять пытаюсь привыкнуть называть спальню спальней, но это все равно каждый раз приходится язык ломать. "Гостиная" или "зал" - это вообще что-то из книжек или фильмов, где люди "спали в гостиной на кушетке". В реальной жизни я еще встречал "зала", кажется, бабушки обычно так это называли.

Наверное, кто-то еще называет домашний туалет "уборной", но это где-то совсем в параллельной вселенной.

Братья Марио

Обычного Марио мы всегда знали как просто Марио, как будто это его имя. Луиджи - типа как его брат, а вместе их называют "Братья Марио". Получается, Марио - это еще и их фамилия, то есть Луиджи Марио и Марио Марио?

Оказывается, да.

Необязательные рекомендации

Все рекомендации насчет вашей личной жизни, здоровья, финансов, работы, бизнеса, направленные на широкую аудиторию, по умолчанию являются необязательными. Всякие книжки, публичные выступления убедительно вещающих чуваков (ютубы, тиктоки, инстаграмы), нравоучения в стиле "если будешь делать так, то будет тебе счастье" и прочие курсы собачьего дерьма - ничего из этого нельзя принимать всерьез целиком. Почитать-послушать - окей; присмотреться к чему-то понравившемуся - окей; начинать строго следовать всем рекомендациям - не окей.

Причина простая: рекомендации, направленные на широкую аудиторию, не могут быть применены к каждому в равной мере, насколько бы логично они не звучали. И наоборот, из полученного потока информации каждый имеет право взять только то, что подходит лично ему, или не взять ничего.

Например, кто-то в умной книжке пишет, что курить вредно, надо срочно бросать, и тогда заживешь. Звучит логично? Вроде да. Но как бросать - не написано, поэтому несчастные курильщики, принявшие эту рекомендацию близко к сердцу, повыбрасывают последние сигареты и айкосы, будут неделю страдать, нервничать, принимать из-за этого идиотские решения, и в итоге закурят обратно, но только с усиленным чувством вины.

Или можно услышать рекомендацию о том, что нужно исключить сахар из рациона. Тут каждый вообще по-своему поймет: кто-то съедет на куру с гречей (а может и с катушек), а кто-то просто перестанет сыпать сахар в чай. Кто-то будет потом с эйфорией рассказывать, насколько жизнь стала легче и веселее, а кто-то станет из-за этого самым грустным человеком на свете, потому что конфеты были единственной радостью в жизни.

Или что-нибудь убедительное про финансы. Откладывайте по сто рублей каждый день, инвестируйте в инвестиции, обретайте финансовую независимость, бла-бла-бла. Кто-нибудь делает при этом поправку на то, что ваши отложения сожрет инфляция, рынок денег однажды рухнет, и ваша финансовая независимость превратится в ад, если вы недостаточно стрессоустойчивый? Нет.

А вот индивидуальные рекомендации - дело другое. Сходил к врачу с конкретной проблемой, врач тебя пообследовал, рассказал, что конкретно тебе в текущей ситуации надо делать. Ты пошел исполнять, вернулся через пару недель, рассказал про какие-то новые проблемы, возникшие в процессе, врач подумал и выдал обновленные рекомендации.

То же самое с консультантами. Дал специалисту денег, показал ситуацию, ответил на тонну вопросов, получил какой-то набор инструкций, через неделю еще раз встретился, рассказал, где починилось, а где сломалось, получил новую порцию инструкций, пошел делать. И так до просветления.

Долго, дорого, скучно, но хоть с какой-то гарантией того, что изменения задержатся в жизни надолго и сделают ее чуток получше.

Казахстанский тенге дешевле рубля. 1 рубль по официальному курсу равен 8.19 тенге. По курсу обменников на улице - 7.15-7.20 тенге.

Примерно столько, кстати, стоят венгерские форинты, поэтому и в Венгрии, и в Казахстане все цены огромные, и в первые несколько дней ты без калькулятора вообще не понимаешь, насколько все дорого или дешево.

Например, наелся ты в ресторане от пуза на 5600 тенге, и тебе еще 10% за обслуживание в чеке посчитали (тут так принято). Считаешь на калькуляторе, все вместе выходит на 800 рублей. Вроде очень неплохо по московским меркам.

Но каждый раз вытаскивать калькулятор слишком накладно, а делить на 7 или 8 в уме сложно. Пришлось поднапрячься и придумать грубый, но быстрый способ понять рублевый эквивалент цены в тенге: отбросить последнюю цифру ("копейку"), а к остальному прибавить примерно треть.

Увидел, например, кофе за 990 тенге, убрал ноль, осталось 99, прибавил треть, то есть 33, получилось 132 рубля. Можно брать.

Проблема только в том, что рублевое представление цены не дает понимания об истинной дороговизне. Русские же начинают делиться впечатлениями с местным населением о том, как здесь все дешево, из-за чего у казахов складывается стереотип, что для нас, типа, 500 рублей не деньги. Ну и местами могут тебя слегка на этой почве объегорить.

Поэтому надо научиться смотреть на цены глазами людей с зарплатой 300 000 тенге в месяц. И в одном из чатиков предложили очень простой и действенный способ: делить не на 7-8, а на 5, тогда цены сразу превратятся в околомосковские.

Получается, что поел ты не на 800 рублей, а уже на 1200, и кофе стоит не 132 рубля, а уже 200. Все равно не так дорого, как в Москве, где этим летом стакан "бамбл-кофе" (холодный коктейль из эспрессо с апельсиновым соком) местами стоил 400-450 рублей, но все же.

Кстати, самое мозговыносящее в тенге то, что звуки "т" и "н" в его названии мягкие. Всю жизнь я на автомате говорил [тэнге], а здесь все говорят [т’ин’ге]. Очень непривычно самому такое произносить, ощущение, как будто сюсюкаешь.

Сегодня погуляли по Утрехту, перед выездом в Амстердам решили попить какаушку на вокзале.

Вокзал большой, с магазинчиками и микрокофейнями. Забежали в одно местечко, где можно самому себе налить напиток из кофемашины, подошли, ткнули кнопки, налили какаушко, пошли к девице-продавщице, спрашиваем, можно ли наликом расплатиться (мы же русские, с нами бог, а нормальные карты - не с нами). Сказала, что нельзя, потому что заведение уже формально закрылось, и принимаются только карты. (Забавно, что в России обычно наоборот: если пришел после закрытия, то покупаешь только за нал.)

Окей, ладно, у нас есть Union Pay, который иногда где-то может сработать. Вставили - не работает. А какаушка уже у обоих налита, и стоит она 5-6 евро, такое на дороге не валяется.

И тут девица говорит, что все в порядке, забирайте так. Я в недоумении, предлагаю дать ей все-таки немножко денег, потому что ну неудобно же. Не, говорит, берите на здоровье, а то если оставите, я все равно все вылью. Нам оставалось только поблагодарить за такое великодушие и поспешить на поезд.

А еще говорят, что русских туристов в Европе не любят. Нормально там всё с этим, все всех любят. Правда, если кто-то начнет регулярно пользоваться этим "лайфхаком" и эксплуатировать доброту европейцев, станет похуже. Так что эксплуатируйте в меру.

Colon

В английском языке слово colon используется и для обозначения знака "двоеточие" :, и для обозначения толстого кишечника.

Казалось бы, что может быть общего у этих двух слов? Ничего, на самом деле. Оба вышли из древнегреческого, и с последним значением все понятно: κόλον - это однозначное обозначение толстой кишки.

А есть еще слово κῶλον, которое произносится примерно так же, но обозначает уже часть тела (рука, нога) или часть предложения. Соль в том, что в древнегреческом языке символ : был аналогом нашей точки и обозначал окончание фразы. И вот сама эта фраза называлась κῶλον.

Гораздо позже в английском языке двоеточие превратилось в разновидность запятой, а название не менялось со времен царя гороха, оставив почву для каламбуров.

Например, некоторые бедолаги, которым удалили кусок кишечника из-за рака, болезни Крона или еще каких проблем, угорают над тем, что у них теперь semicolon ;, то есть полукишечник (погуглите "semicolon cancer").

Давно последний раз делали колоноскопию?

Вскрытие покажет. Записки увлеченного судмедэксперта

Прочитал на днях книгу про работу судмедэксперта. Местами хорошо и познавательно (например, про то, как настоящая работа отличается от того, что нам показывают в фильмах), местами противно и хочется поскорее дочитать главу (например, про детали трупного разложения утопленников).

Еще там есть картинки, и они в основном страшные.

Особой морали у книги нет, кроме как того, что жизнь коротка и надо ее ценить. А через частые упоминания того, что множество смертей происходит из-за алкоголя и глупостей, автор пропагандирует трезвость и более внимательное отношение к своему здоровью.

Оценка: 3 из 5.

Telegram Premium

Если кто-то раздумывает над покупкой Telegram Premium, рассчитывая получить что-нибудь полезное - ничего такого там нет. Вчера позарился на то, что при оплате через бот цена упала до 299 рублей, решил раскошелиться, и получил какую-то херню на постном масле. То есть получил я ровно то, что рекламируется: свистелки и перделки, которыми вряд ли буду пользоваться. Единственная полезная фича - расшифровка голосовых сообщений - работает медленно и очень плохо, по сравнению с тем же @voicybot. При этом Voicy еще и "кружочки" умеет расшифровывать, поэтому продолжу пользоваться им.

Самым приятным моментом была оплата подписки картой через бота, это прям кайфец.

А так, Telegram Premium - ерунда для детей. Разве что вам хочется поддержать разработчиков, но тогда можно просто мне сотку на карту закинуть. Я-то вам всяко ближе какого-то телеграма буду, и тоже разработчик как-никак.

Dev

Как же хорошо, что у всех интервалы времени измеряются в одинаковых единицах и фразу "через 15 минут" понимают одинаково во всем цивилизованном мире.

Нет такого, что у одного минута длится дольше, чем у другого. Или что в США вместо секунды используют какой-нибудь "тик", который равен 1.672 секунды, и день состоит не из 24 часов, а из 4 "квартосуток".

Если бы еще и такое было, программисты бы вообще свихнулись. Им и так хватает високосных секунд и часовых поясов.

Dev

Go: Отложенная обработка событий файловой системы

Допустим, вам нужно что-то сделать при возникновении какого-то события файловой системы. Например, перезапустить веб-сервер при изменении файлов. Довольно частая практика при разработке: повесить "слушателя" файловой системы, запустить приложение, сразу же после редактирования файлов "на лету" перекомпилировать проект и заново запустить его.

Этот сайт написан на Go, и недавно я решил добавить в него подобный hot-reload для markdown-файлов с постами: кладешь новый файл в папку, веб-сервер это замечает и переналивает внутренний in-memory-storage с публикациями без перезапуска самого себя. При этом мне хотелось именно "слушать" файловую систему, а не сканировать ее раз в несколько секунд.

Читать далее
Dev

Абстракции и наследование в Си - стреляем по ногам красиво

TL;DR https://github.com/ddoroshev/c-inheritance

Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимое структуры несколько раз, пишешь везде, как дурак, printf("%s %d %f\n", foo->bar, foo->baz, foo->boom), и интуитивно кажется, что есть способ сделать foo->print(foo), и так вообще со всеми структурами, не только с foo.

Возьмем пример: есть некий чувак с именем и фамилией, и есть птица, у которой есть имя и владелец.

typedef struct Person Person;
struct Person {
    char *first_name;
    char *last_name;
};

typedef struct Bird Bird;
struct Bird {
    char *name;
    Person *owner;
};

Чтобы вывести информацию про этих животных, кондовый сишник напишет просто две функции:

void Person_Print(Person *p) {
    printf("%s %s\n", p->first_name, p->last_name);
}

void Bird_Print(Bird *b) {
    printf("%s of %s %s\n", b->name, b->owner->first_name, b->owner->last_name);
}

И будет таки прав! Но что если подобных структур у нас много, а наш мозг испорчен веяниями ООП?

Читать далее

Стейкхолдеры

Всю дорогу думал, что термин "стейкхолдер" как-то относится к мясу. Типа, существуют обычные додики на зарплате, а есть основные бойцы, владеющие бизнесом, как кусками стейка. И вот они от этого стейка "отрезают" и "едят", будучи заинтересованными в том, чтобы стейк рос большим и жирным.

А сегодня до меня дошло, что стейк, который мясо, - это steak, а стейк, который у тех холдеров, - stake. И означает это "долю" или "ставку". Или "кол". Или "сожжение заживо". Нужное подчернуть.

Век живи!

Легкие деньги

Однажды в апреле 2013 года я уронил айфон в унитаз. То был 4s, работал для того времени сносно, а тут такое. Ну я его сразу сунул в контейнер с рисом, как люди советовали. Вроде рис может втянуть в себя воду и предотвратить серьезные повреждения в устройстве. Так он у меня пролежал сутки, и потом даже начал функционировать. Только грелся и быстро опустошал батарею, поэтому пришлось договориться о ремонте со своим знакомым с Савеловского рынка после выходных.

В то время Вася Стрельников помимо регулярных выпусков The Big Podcast! проводил по выходным стримы, читал чат, крутил музыку и всячески развлекал публику. И как раз в этот день был стрим с розыгрышем 1000 рублей на Яндекс.Деньги за правильное угадывание песни, при этом "шазамить" не запрещалось.

Читать далее

Хорошо там, где нас нет

Иногда хочется поменять что-то в своей жизни: переехать в другой город, страну, сменить работу, род занятий, увлечение, религию. И в этот момент возникает кто-то, кто возражает против подобных изменений, приводя довод "хорошо там, где нас нет".

То есть тебе сейчас по какой-то причине плохо в той точке, в которой ты сейчас находишься, а если перейдешь в другую точку, которая кажется лучше, то и там в конечном счете будешь чувствовать себя плохо, и снова захочешь изменений. Либо вернешься туда, где был до этого, потому что вроде нормально было.

В этом, безусловно, есть истина. Человек - существо нестатичное, а долгое пребывание в одном и том же состоянии делает его грустным и уязвимым, поэтому время от времени хочется что-то изменить.

Посыл же вышеуказанных советчиков в том, что радикальные изменения не нужны, а то, что ты себе надумал - это блажь. Сиди, где обосновался, занимайся тем, чем занимался последние *дцать лет, и все будет хорошо. Все ведь уже хорошо, а ты что-то грустишь. Смирись. Не надо тебе никуда переезжать. Там тоже плохо. От своих проблем не убежишь. К чему вообще эти напряги?

Читать далее

Яндекс.Лавка

До сих пор не могу привыкнуть к тому, насколько быстрой стала доставка Лавки у нас на районе. Буквально сегодняшний случай: Юля просит заказать сыр, потому что закончился, а на завтрак хочется, уходит в душ, я набираю заказ из шести позиций в разном количестве (ну чтобы курьер не только с пачкой сыра к нам мотался), в 9:25 нажимаю "Оплатить", в 9:31 уже забираю пакет с продуктами у курьера, а спустя пару минут Юля выходит из душа. Сыр к завтраку уже на столе!

Окей, склад Лавки расположен довольно близко к нам, где-то в 500 метрах от дома. Но 6 минут - это то, что я ожидаю, если бы еду доставляли из соседней квартиры на моем этаже!

Совершенно не представляю, как там оптимизирована сборка заказа, насколько "бесшовно" все это передается курьеру и насколько быстро он крутит педали. В моем представлении это выглядит так: все курьеры уже сидят на велосипедах с открытыми рюкзаками, к рюкзакам подносят специальную трубу, которая выплевывает им автоматически собранные пакеты, и курьеры тут же стартуют по адресу. Другого объяснения этой магии мне сложно придумать.

Я другой такой страны не знаю,
Где так шустро хавку привезут.

Идея для стартапа

Недавно беседовал с приятелем о способах хранения сбережений. Один из неплохих - покупка недвижимости. Например, коммерческой. Покупаешь помещение, сдаешь его, получаешь доход раз в месяц. Надоело - продал подороже. Проблема, правда, в том, что хорошее помещение в Москве стоит дорого, не каждый может приземлить "в бетоне" 40-50 миллионов.

Что если позволить людям покупать нежвижку частями? Типа как во всяких современных инвестиционных приложениях. Листаешь каталог объектов, выбираешь понравившийся и покупаешь от него чуток. Либо находишь других чуваков, вы кооперируетесь и покупаете все помещение целиком. Допустим, вас набралось 40 человек, готовых скинуться по 1 миллиону, и каждому после сдачи помещения ежемесячно капает копеечка. Ну или не капает, если не нашел арендатора, зато деньги в сохранности. Захочешь их обратно - продашь свою долю по текущей рыночной цене.

Скорее всего, будут дополнительные расходы: комиссия риэлторам, зарплата бухгалтерам, юристы еще какие-нибудь понадобятся. Каждый из них может работать над несколькими сделками, поэтому платить им всю зарплату из своего кармана. Только чуток.

Не знаю, насколько это реализуемо с правовой точки зрения, но идея показалась мне забавной. Возможно, кто-то где-то такое уже пытался сделать, но я не нашел.

Что думаете?

Web

Старомодный сайт

Хочу, чтобы все сайты были такими. Классические три колонки, табличная верстка, подчеркнутые ссылки, никаких развесистых шрифтов и картинок, открывается моментально. Все как в старые добрые времена.

Виджет подписки через Subscribe.ru - вишенка на торте.

Кому интересно - https://www.linuxrsp.ru/.

Chippendales

Однажды в детстве я наткнулся на передачу про нечто под названием Chippendales. Я тогда особо не вникал, просто сразу захотел ее посмотреть, потому что был полностью уверен в том, что это так или иначе связано с мультфильмом "Чип и Дейл".

Я очень долго ждал, когда там наконец закончится блок про гастролирующих полуголых мужиков и начнется что-нибудь про мультики.

Так и не дождался.

Безопасность персональных данных

Вчерашнее событие с публикацией слитых с Яндекс.Еды персональных данных напомнило о базовых правилах предоставления информации онлайн-сервисам (особенно тем, что связаны с офлайном):

1. Никогда не сообщать свое настоящее имя. Лучше для каждого сервиса завести свое имя, в этом случае можно будет опознать, откуда случился слив, когда вам позвонят из службы безопасности Сбербанка со словами "Здравствуйте, Аристарх Акакиевич".

2. Все заказы оформлять на отдельный номер телефона. Вообще, очень удобно иметь разные номера "для своих" и для всего остального. Лучший пример - регистрация ИП. С первого же дня на каждого новоявленного ИПшника в РФ обрушивается шквал звонков от всех банков с предложениями обслуживания счета. В идеале, конечно, можно иметь разные номера для разных случаев, но звонилок не напасёшься.

3. Не использовать платежные карты без лимита на баланс для онлайн-заказов.

Читать далее

Рублевые банкноты 1995 года

Оказывается, банкноты в том виде, к которому мы привыкли, выпустили еще в 1995 году. Но то было до обесценивания рубля в 1998 году, поэтому на всех купюрах было три дополнительных нуля. Купюры в 5 000 000 рублей тогда еще не было (современный "хабарыч" нарисовали только в 2006 году), зато приятно посмотреть на те 5000 рублей, сопоставимые по номиналу с более поздними 5 рублями.

Я таких денег совсем не помню. Зато хорошо помню купюры 1993 года, они были в ходу, и за синие 100 рублей можно было купить коробок спичек.

Эх, были времена.

Dev

Docker Buildkit: Правильное использование --mount=type=cache

TL;DR Содержимое каталогов, смонтированных через --mount=type=cache, не сохраняется в docker-образе, поэтому кэшировать надо не целевые каталоги, а промежуточные.

В dockerfile:1.3 появилась возможность монтировать файловые системы во время построения образа, в том числе и в целях кэширования: можно кэшировать скачанные пакеты или промежуточные артефакты компиляции.

Например, пакет uwsgi каждый раз компилируется при установке, и это время хочется сократить, закэшировав весь каталог с пакетами:

# syntax=docker/dockerfile:1.3
FROM python:3.10

RUN mkdir /pip-packages

RUN --mount=type=cache,target=/pip-packages \
      pip install --target=/pip-packages uwsgi
> docker build -t pip-cache -f Dockerfile.pip .
# ...
[+] Building 14.6s (7/7) FINISHED

Выглядит, что все прошло успешно, но целевой каталог пуст:

> docker run -it --rm pip-cache ls -l /pip-packages
total 0

Что-то явно пошло не так.

Читать далее

​​В прошлое за долларами

"А лучше в 1995-й вернуться и купить долларов по пять рублей, вот богатая бы стала, да?" - крикнула одна продавщица другой в продуктовом магазине, когда мы туда зашли. Диалог у них был из серии "если бы да кабы", но давайте предположим, что такая возможность есть: существует машина времени (и пространства, чтобы не умереть по дороге), которая может тебя отправить в 1995 год и вернуть обратно.

Весь такой радостный, ты набираешь кредитов, занимаешь у родственников, друзей, врагов, сгребаешь свои последние сбережения, и вот у тебя на руках 100 миллионов рублей. На них ты сможешь там купить 20 миллионов долларов и продать сегодня за 1,5 миллиарда рублей. Неплохо? Неплохо.

Садишься в машину, высаживаешься летом 1995 года в центре Москвы, оглядываешься вокруг и начинаешь понимать, что доллар стоит не 5 рублей, а 5000 рублей (на самом деле, около 4500), и не тех, что у тебя в чемодане, а вообще других. Твои сто миллионов, конечно, могли бы здесь стать сотней миллиардов, но поменять их негде.

Читать далее

Учим немецкий

Герц (Гц) - это единица измерения частоты, сколько раз в секунду происходит какое-то событие. Названа в честь Генриха Герца (Heinrich Hertz). В спокойном состоянии сердце бьется примерно 60 раз в минуту, то есть с частотой 1 Гц. Сердце по-немецки - herz.

Подарок по-английски - gift. Gift на немецком означает яд.

Название буквы ß, "эсцет", буквально можно перевести как SZ (es-zett). На вид очень похожа на B или β (бета), но на самом деле это склейка двух букв: ſ (одно из древних начертаний s) и ʒ, которые не имеют к B никакого отношения (ſʒ → ß, красиво). При этом буква всегда была маленькая, а несколько лет назад появилась большая - ẞ.

Язык живет!

Медовый месяц в Беларуси: Дорога и первый день в Минске

До Жуковского аэропорта от Москвы можно доехать на Рутакси за косарь и час-полтора.

Жуковский аэропорт - маленький, тихий, спокойный. Есть в зоне вылета нечего, там одна Шоколадница, в которой остались только кофе, пиво, холодные супы, куча народу и замученные официантки.

Перелет тоже шустрый, полтора часа, прямо как дорога из дома до аэропорта. Belavia - норм, дают вкусные сэндвичи.

На выходе из аэропорта можно купить местную симку МТС. Я взял ту, что с 2 Гб предоплаченного трафика, она стоит 14 белорусских рублей (~400₽) и действительна в течение месяца. Хотя можно было купить семидневную за семь рублей, где включен 1 Гб, а потом докупить трафика. А можно было использовать Drimsim, но я ее дома потерял.

Таксисты, окучивающие аэропорт, напористы, но отходчивы. То есть ты сам куда-то должен отойти, и они больше не пристают.

Читать далее

В болезни будешь рожать детей

Размышлял пару дней назад на тему этого фрагмента из Бытия, когда Бог изгонял людей из рая

Жене сказал: умножая умножу скорбь твою в беременности твоей; в болезни будешь рождать детей...

Быт. 3:16

Интересно, а были до этого какие-то другие варианты? Организм у женщины до изгнания был устроен иначе? Проходы что ли пошире были, и планировалось, что ребенок сам бы оттуда выскакивал?

Или Бог после изгнания добавил нервных окончаний, чтобы больнее было? Рвоту там, живот потяжелее, отекшие ноги и прочие скорби.

Как физиологически могло бы быть по-другому, если строение тела человека не менялось?

Дилемма об отношении к курьерам

Курьерам Деливери клаба, Яндекс.Еды, Яндекс.Лавки, Самоката и прочим пешевелосипедным трудягам зимой объективно тяжело работать (по крайней мере в Москве). Заказов много, на улице мороз. Смотришь, как он пробирается на велосипеде по льду, грязи или через сугробы, скользя колесами, и сердце кровью обливается от осознания того, что он так весь день мотается за гроши.

И не понимаешь, жалеть его, хвалить, завидовать или оставаться равнодушным. С последним у меня проблемы, поэтому надо определиться.

С одной стороны, жалко, потому что автоматически сравниваешь со своим положением в обществе. Хочется взять и освободить его от рабства квадратного рюкзачка. Но если их всех освободить, то мне больше никто не принесет домой курочку КФС или продукты из магазина, придется самому ходить.

То есть, с другой стороны, курьеры молодцы, потому что помогают мне сэкономить время и потратить его на свою работу или другие клевые дела. Значит, их стоит жалеть ровно так же, как работодатель жалеет работника за его труд: никак.

С третьей стороны, они постоянно двигаются и тратят калории, а я за подобными активностями должен ехать в специальное место и платить деньги. Курьеры делают это на (относительно) свежем воздухе и получают зарплату, а я весь день сижу на стуле и света белого не вижу. Выходит, можно им и позавидовать.

Сложная ситуация. Мне их все равно жалко, ничего не могу поделать.

Машина времени и пространства

Возможно, вы не задумывались, но машина времени должна перемещать человека не только во времени, но и в пространстве, учитывая положение Земли.

Потому что если ты вернешься на пару месяцев назад в ту же самую точку вселенной, то просто умрешь, повиснув в космосе.

А если вселенная тоже не стоит на месте и двигается внутри другого пространства, о котором мы не знаем, то умереть можно примерно в 100% случаев перемещения, что бы ты там не рассчитал.

Приятного вам дня!

Я написал программу, которая сделала меня здоровее

Периодически из-за тонзиллита мне надо посещать лора примерно два раза в год: осмотреться, подлечиться, и всякое по мелочи.

Проблема в том, что лор в районной поликлинике один, и расписание к нему всегда забито на две недели вперед.

То есть если захочешь записаться через ЕМИАС, ничего не выйдет. Нужно постоянно перепроверять расписание и "ловить окошки".

Пару недель назад я как раз и поймал одно окошко, явился на прием, мне прописали курс поцедур, что означало еще 4-5 посещений, а следующая запись только через 10 дней.

Что ж делать, записался.

Но на следующее утро я случайно обнаружил, что сегодня "окошко" освободилось, и сразу же его занял. В итоге у меня получилось посетить лора два дня подряд по записи, что в среднем невозможно.

Читать далее
Dev

Быстрый коммит и пуш

Хочу поделиться shell-функцией gacp (Git Add, Commit and Push), которую я придумал несколько месяцев назад и с тех пор использую ее примерно каждый час:

# fish
function gacp
    git add .
    git commit -m "$argv"
    git push origin HEAD
end
# bash/zsh
function gacp() {
    git add .
    git commit -m "$*"
    git push origin HEAD
}

Пример использования:

> gacp add some new crazy stuff
[master fb8dcc9] add some new crazy stuff
 <...>
Enumerating objects: 12, done.
 <...>
To github.com:foo/bar.git
   912c95d..fb9dcc9  master -> master

Наконец-то больше не придется городить цепочки с && и вставлять кавычки, когда надо написать в сообщении больше одного слова!

Мне позвонил мошенник, и я ему надоел

Позвонил чувак, представился следователем МВД по экономическим преступлениям. Затирал про то, что вчера какая-то дама ("племянница") хотела снять все мои деньги с нотариально заверенной доверенностью, потому что я в больнице. Я не в курсе такой схемы развода (и этот звонок у меня первый), поэтому решил поговорить, чтобы понять, куда оно вырулит.

Пришлось дать чуток информации о себе. Например, о том, что я не в больнице и племянницы у меня нет. После нескольких ответов "следователь" разъяснил, что эту гражданку уже опознали, и она мошенница. Вроде как хэппи-энд, но нет.

Дальше разговор пошел в сторону, видимо, самого "расследования", и он спросил, бывал ли я у нотариуса. Я ответил "нет", тем самым предоставив еще немножко информации.

Но вот на последнем вопросе разговор совсем перестал клеиться: "Когда и кому я в последний раз показывал паспорт?" А я не помню, прям совсем, поэтому решил потупить и повспоминать. Чувака это очень злило, он давил фразами "вы тратите мое время", "вам что, смешно?", "вы будете отвечать?"

Читать далее

Не прокатило

Звонок программисту (П) от рекрутера (HR).

HR: Ало, привет, я Маша из агентства "Олег и таланты", у меня есть классная вакансия в международную компанию! Ищешь работу?

П: Ну так, чуток поглядываю. А расскажите вкратце, чем компания занимается?

HR: читает текст вакансии через строчку

Хм, ну хз.

Давай попробуем! Сколько денег хочешь?

350.

На руки?

Да.

Окей. Мне с тобой надо познакомиться поближе, я расскажу о вакансии, а ты расскажешь о себе.

Хорошо.

Читать далее
Dev

Ж К П

В любом текстовом процессоре (Microsoft Word, Google Docs, LibreOffice) кнопки "полужирный", "курсив" и "подчеркнутый" находятся рядом:

Десятилетиями в голове устаканивался паттерн о том, что это свойства одного порядка. Хочешь сделать полужирный курсив, нажимаешь две кнопки рядом:

Хочешь жирный и подчеркнутый:

Про подчеркнутый курсив не буду - это для особенных людей.

В HTML-тегах с этим тоже просто. Есть три тега: b, i и u. Можно вкладывать их друг в друга и получать желаемую комбинацию:

<b><i>полужирный курсив</i></b>
<b><u>полужирный подчеркнутый</u></b>
<i><u>пожалуйста, не надо</u></i>

А в CSS это совершенно разные свойства:

{
/* полужирный */
font-weight: bold;

/* курсив */
font-style: italic;

/* подчеркнутый */
text-decoration: underline;
}

Про font-weight еще более-менее понятно, но правила применения двух остальных свойств я уже 13 лет не могу запомнить. Если нужно сделать подчеркнутый текст, а подсказок взять негде, я могу просто перебрать все варианты, пока не заработает:

text-style: underline;
font-style: underline;
font-decoration: underline;
text-underline: true;

Очень бесит. Хочется либо так:

font-style: bold;
font-style: bold, italic;
font-style: italic, underline;

Либо так:

font-bold: true;
font-underline: true;
font-italic: true;

Большего мне и не надо.