Дима Дорошев

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

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

Окей, ладно, у нас есть 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/pomidoroshev/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;

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