Позднее Ctrl + ↑

Как работают отложенные публикации в Эгее

Смысл «отложенности» с точки зрения веб-программирования

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

Допустим, автор запланировал выход заметки на 15:00. Как добиться, чтобы в 15:00 заметка вышла? Веб-сервер умеет отвечать только на запросы, он не умеет по собственной инициативе просыпаться и что-то начинать делать. И тут почему-то многие разработчики начинают думать в сторону крона — планировщика запуска задач по расписанию.

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

Чтобы заметка вышла в 15:00, в 15:00 ничего не должно произойти, буквально ничего. Потому что что вообще значит «вышла»? Допустим вот сервер может проснуться в 15:00 и начать действовать, что он должен сделать-то? Отправить эту заметку на случайный айпи-адрес?..

Сама фраза «заметка должна выйти в 15:00» означает только одно: на все запросы, сделанные начиная с 15:00 нужно отвечать сайтом, где уже опубликована эта заметка. Если на сайт кто-то зайдёт в 14:54, а потом кто-то в 15:19, то заметку нужно будет показать по второму запросу, вот и всё.

Чтобы это работало, нужно было сделать три вещи. Первая — это дать назначать в качестве даты-времени выхода заметки дату-время из будущего. Вторая — при формировании страниц сайта отображать и вообще учитывать только заметки, время которых уже наступило. Третья — доработать систему кеширования, чтобы в 15:19 сайт не открывался в устаревшем виде из кеша.

Доработка системы кеширования

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

А тут нам нужно сделать, чтобы кеш каким-то чудом в 15:00 удалился несмотря на то, что автор ничего не редактирует. Разумеется, в 15:00 мы ничего делать не будем; решать этот вопрос мы будем в 15:19, когда читатель обратится за заметкой.

Но откуда мы узнаем, что именно запрос в 15:19 потребует пересборки кеша, а на тот, что был в 14:54, можно ещё отвечать из кеша? Ведь время публикации заметки хранится в базе данных, а если мы будем ходить в неё на каждый запрос для проверки, то это обессмыслит само существование кеша!

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

Таким образом фича планирование заметок на будущее фактически сводится к фиче планирования устаревания кеша.

Каш

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

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

Ещё улочка:

Много где вместо улиц — лестницы:

Это вроде парковка в самом центре:

Горизонт очень завален:

Классная тряпка:

Продажа ковров:

Хамам:

Дверь, светильник и знак:

Табличеньки:

Турки любят воткнуть свой флаг везде, и получается красиво. С видом на море:

С видом на гору:

Фотографии из поездки в марте 2022 года. Слетайте в Каш!

На интерфейсном курсе: настраиваем толщины линий

Осмысленно выбранные толщины линий делают иллюстрацию понятнее и красивее. Исправляем на примере окна. 3 минуты с семинара курса:

Также есть на ВК-видео.

Это фрагмент № 148 онлайн-курса «Пользовательский интерфейс и представление информации». Записано на курсе 27 октября 2023 года.

Сегодня — последний день записи на курс, который пройдёт с 31 августа по 29 сентября.

Почитать о курсе

Программа, отзывы, запись

Что послушать — 73

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

Вот что я слушал в последнее время, что мне понравилось:

  1. Сергей Кулинкович на радио Москва-ФМ. Про Николая Иронова и роль нейросетей.
  2. Сэм Харрис о фактах и ценностях. Ещё один его спич про объективность морали. Очень понравилась мысль о том, что разность взглядов на мораль не мешает изучать её объективно точно так же, как разность взглядов на физику не мешает изучать объективно её, и что на конференцию о моральных вопросах можно даже не пускать сторонников людоедских взглядов.
  3. Виленская у Дудя, который иноагент. На 24:33 понравился термин «сложная звуковая вертикаль». Да, это как раз самое интересное в музыке и есть! Но я совершенно несогласен с противопоставлением гармонического и тембрального слуха, как будто это разные, но равноправные аспекты. Мне кажется, это просто разная глубина. Мелодия на поверхности, доступна любому, все могут подпевать; гармония сложнее; тембр — ещё сложнее. Большую часть истории музыки тембр вообще не был предметом целенаправленного сочинения, а был просто следствием физического устройства музыкальных инструментов, так что большинство людей вообще не приучены искать в нём идею и смысл.
  4. Подкаст чудес. Якубович у Серёжи-микрофона. Классный!
  5. Ева Эльфи: самая популярная порно-актриса из РФ. Всегда приятно слушать нормального человека, которому никто не насрал в мозги.

Синхронизация — это сложно (на примере заметок Эпла)

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

  • помидоры
  • сыр
  • молоко
  • колбаса
  • орехи

Вы приходите в магазин. Помидоры так себе, нужных орехов нет, остальное покупаете и удаляете из списка, остаётся:

  • помидоры
  • орехи

После магазина заезжаете на кофе, открываете ноутбук, там ещё старый список:

  • помидоры
  • сыр
  • молоко
  • колбаса
  • орехи

Вспоминаете, что ещё надо купить сметану, дописываете её рядом с молочкой:

  • помидоры
  • сыр
  • молоко
  • сметана
  • колбаса
  • орехи

Тут ноутбук ловит местный вайфай и синхронизируется. Вхуж:

  • помидоры
  • орехи

Куда делась сметана? А просто просралась! Видимо у Эпла так устроена логическая модель этих списков, что я удалил «диапазон элементов» и тот факт, что в него позже добавилась сметана, ни на что ни повлиял, диапазон удалился вместе со сметаной? Ну или я добавил сметану в как бы уже удалённый диапазон? Фиг знает, но такую лажу я ловлю уже второй раз.

Кроль и вольный стиль

Есть разные способы плавать: брасс, кроль, баттерфляй. А ещё есть плавание «вольным стилем» — это когда плывёшь как хочешь. Спортсмены всегда хотят кролем, потому что так быстрее всего, но в результате многие думают, что «вольный стиль» — это некое альтернативное названия кроля. На бытовом уровне ошибка несущественная, но в случае с Эплом это тупняк на ровном месте:

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

Кстати, по поводу слова «кроль» к русскому языку тоже есть вопросы. Вот что мешало назвать это «ползком», почему понадобилось иностранное слово, ещё и похожее на какого-то кролика? Удивительно, что русский язык постоянно стесняется собственных слов, они ему все кажутся какими-то неуместными и неудачными всё время, и он пытается взять иностранные слова ровно с тем же значением и как-то подкрутить-изуродовать под себя.

Кладь и убор

Каждый раз, когда слышу «ручная кладь», думаю над словом «кладь»: откуда его взяли? Как происходил процесс сочинения этого термина? Или он возник достаточно давно, когда кладь была какая-то ещё?

«Головной убор» — похоже, из той же серии. Какой ещё бывает «убор»?

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

Форма мыла

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

Метро Будапешта: линии 3 и 4

В этой заметке отчасти повторяются фотографии из первой заметки о Будапеште. См. также предыдущую заметку про линии 1 и 2.

Третья линия. Ближайшее к аэропорту метро встречает советскими поездами в ужасном состоянии:

Ближайшее к аэропорту метро встречает советскими поездами в ужасном состоянии

Но фронтальная горизонтальная фотография делает конфетку почти из чего угодно:

Ближайшее к аэропорту метро встречает советскими поездами в ужасном состоянии

Элемент навигации:

Гениальная находка будапештского метрополитена — название станции одновременно является указателем выхода. Станции называются по объектам, находящимся над землёй; на выход — это к ним.

Пёттёш утца — там:

Гениальная находка будапештского метрополитена

Ныплигет — там:

Гениальная находка будапештского метрополитена

Клиникак — там:

Гениальная находка будапештского метрополитена

Калвин тыр — там:

Гениальная находка будапештского метрополитена

Просто название станции, без стрелки:

Ну и сиденья:

Выход:

Указатель направления при выходе на платформу:

Красота между путями:

Красота на конце платформы:

Переход между третьей и четвёртой линией:

Четвёртая линия — с современными станциями:

Четвёртая линия метро Будапешта

И поездами:

Четвёртая линия метро Будапешта

Фотографии из поездок в ноябре 2015, апреле 2016 года и сентябре 2021. Слетайте в Будапешт!

Ещё про Будапешт:

Что делать в Токио в середине сентября?

Пришло время для традиционного вопроса.

Что делать в Токио в середине сентября? Куда сходить, на что посмотреть, с кем встретиться, где попить кофе? Где кайфово работать? Буду там первый раз, ничё не знаю.

Ранее Ctrl + ↓