Книги
Вскрытие покажет. Записки увлеченного судмедэксперта
Прочитал на днях книгу про работу судмедэксперта. Местами хорошо и познавательно (например, про то, как настоящая работа отличается от того, что нам показывают в фильмах), местами противно и хочется поскорее дочитать главу (например, про детали трупного разложения утопленников).
Еще там есть картинки, и они в основном страшные.
Особой морали у книги нет, кроме как того, что жизнь коротка и надо ее ценить. А через частые упоминания того, что множество смертей происходит из-за алкоголя и глупостей, автор пропагандирует трезвость и более внимательное отношение к своему здоровью.
Оценка: 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
Абстракции и наследование в Си - стреляем по ногам красиво
Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимое структуры несколько раз, пишешь везде, как дурак, 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);
}
И будет таки прав! Но что если подобных структур у нас много, а наш мозг испорчен веяниями ООП?
Читать далее