Станция Фридберг и поезд до Франкфурта

В рамках интереса к транспорту пофоткал станцию Фридберг и внутри поезда до Франкфурта.

Неожиданная и приятная вёрстка экрана с ближайшим и следующими поездами. Вместо строчек — колонки:

Обычный поезд:

Обожаю бесконечное число всяких обозначений и пометок на вагонах снизу.

Нравятся такие поезда с огроменными окнами:

Традиционное германское расписание отправляющихся (жёлтым) и прибывающих (белым) поездов:

Направление на экранчике:

Схема местных электричек над дверью:

Более общая схема региональных поездов. Дизайн совсем другой:

Общий вид вагона. Дизайн экрана опять совсем другой:

Я люблю ставить ноги на сиденья:

Какая-то местная фридбергская железнодорожная будка в окне:

А это выход со станции, когда уже возвращаешься обратно:

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

Близко к теме:

На интерфейсном курсе: эпицентрический дизайн и понятность с первого раза

Разбираем интерфейс конструктора окон. Сначала я говорю о том, что на экране половина места тратится не на то. А потом о том, нужно ли, чтобы интерфейс был понятен с первого раза. 5 минут:

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

Открыта запись на курс, который пройдёт 13 декабря — 11 января, и сейчас −20%. Сейчас −20% из-за ранней записи.

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

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

Трек, немножко похожий на мой старый трек

Попался мне трек:

Приятный техно-транс, 2024 год. И напомнил мне о другом треке:

Это мой трек. Пситранс, 2006 год.

Альбом Skin Care целиком — на Саундклауде (нужен ВПН чтобы открыться, но потом играет и без).

Отельный бассейновый тупизм

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

Унисим: апдейт за ноябрь 2025 года

Весной я рассказывал, что использую Унисим. Одна е-симка на весь мир, единый баланс счёта, пополнение рублями. Не надо всякие режимы через сим-меню выбирать, приложение выглядит нормально, а самое главное — связь появляется сразу, а не через десять минут непонятных поисков сети, как было в Дримсиме. С сентября я побывал в Лимассоле, Кракове, Варшаве, Гонконге и Бангкоке — везде связь была отличная, так что продолжаю рекомендовать.

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

Хоть что-то в путешествиях становится легче.

Диалог с «Кодексом» ЧатаГПТ при разрабоке Эгеи

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

Вот краткий художественный пересказ сегодняшнего нашего диалога об Эгее:

— Изучи мой код внимательно и расскажи, что нужно, чтобы добавить на страницу новой заметки такую-то фичу.
— Изучил. Чтобы добавить фичу на страницу с адресом /@/new/ есть два способа: первый не работает, а второй работает, это всего 30 строчек кода.
— Почему ты пишешь /@/new, ведь адрес страницы просто /new/. И зачем обсуждать первый способ, если он не работает?
— Ах да, я просто посмотрел, что когда-то раньше (коммит такой-то десять лет назад) адрес был /@/new/, поэтому решил упомянуть это, если вдруг ты захочешь его вернуть.
— Нет, не захочу. Ладно, давай свои 30 строчек кода.
— Вот, написал.
— Окей, у меня не работает. Вот что я делаю, вот чего ожидаю, вот что получаю, а вот что вижу в консоли.
— Всё правильно, оно и не должно работать, это ожидаемое поведение, ведь ты не написал ещё другой кусок кода.
— Как понять «я не написал»? Это же ты не написал. Ну напиши.
— Вот, написал.
— Хорошо, теперь работает, но грузится немыслимые пятнадцать секунд или около того. Надо мгновенно.
— Исправил одну строчку, теперь должно быть мгновенно.
— Всё работает как надо. Давай теперь разбираться, что ты понаписал. Для чего вот это? А вот это? А почему тут не использовать вот такой уже имеющийся у меня код?
— Это на такой-то случай. Это в принципе можно убрать. А тут твой код подходит даже лучше, молодец, что заметил!
— Ну так исправь.
— Исправил. Но теперь не будет работать из-за того-то.
— Ёлки, так что ж ты сразу не сказал?
— Прости, я не так тебя понял. Хочешь, верну как было.
— Я хочу, чтобы ты убрал лишнее и переиспользовал имеющийся код, где можно, но чтобы всё работало.
— Хорошо, сделал.
— Теперь я заметил, что ты положил новый файл в такую-то папку, а у меня всё подобное лежит в другой. Давай перенесём.
— Перенёс. Заодно убрал комментарии и поменял стиль кода в случайных местах.
— А об этом-то кто просил? Верни мой нормальный стиль кода и комментарии. Ещё ты добавил в конфиг Вебпака исключение чисто ради нашей новой фичи. Мне не нравится это, потому что я никогда не вспомню, что оно там. Придумай, как локализовать всё про неё в одном месте.
— Готово.
— Я смотрю, ты заодно переписал файл .htaccess, добавил туда какую-то отсебятину, а мои правила убил. Это что такое?
— Чтобы фича работала, нужно отправить определённые хедеры браузеру, вот я и добавил правило в .htaccess. Твои правила случайно удалил, прости, уже вернул.
— Так, а эта функция вообще будет у нас работать, если пользователь установил Эгею не в корень блога, а в подпапку? Я смотрю, ты какие-то пути к файлам там пишешь от корня.
— Не будет, и вот тебе объяснение на три страницы, почему именно.
— Ну так а надо-то, чтобы работало. Напиши так, чтобы работало.
— Готово, я добавил по 2-3 строчки разного кода в десяток файлов, теперь всё будет работать. Файл .htaccess теперь будет генерироваться динамически во время инсталляции и содержать нужный путь, чтобы работало в любой подпапке.
— Боже, ты с ума сошёл? Смотри сколько всего ты нагородил. Надо придумать, как сделать, чтобы работало без этого. Зачем ты вообще этот .htaccess трогать вздумал? Во всех остальных случаях я шлю хедеры просто из кода на ПХП функцией header (). Почему вдруг именно тут ты решил это сделать через .htaccess? Давай сделаем как везде.
— Ты прав. Я написал ПХП-файл и положил его вместо .htaccess, чтобы он слал нужные хедеры. Всё, что нагородил до этого, удалил.
— А почему этот ПХП-файл ты положил туда? У меня в проекте такого нет, у меня весь ПХП-код живёт в одном месте, а не в раскиданных где попало ПХП файлах. Если надо, чтобы этот файл отдавался по определённому урлу, для этого у меня есть роутер. Разберись как он работает и положи свой ПХП-код в логичное место, как у меня принято.
— Сделал. Я ещё написал вспомогательную функцию, которая конкатенирует две строки, и теперь вызываю её в двух местах!
— Жесть. Я удалил твою функцию и просто конкатенирую две строки напрямую. Я ещё переписал твой код так, чтобы он стал вдвое короче, убрал часть проверок. Убедись, что я ничего не сломал.
— Твоё исправление выглядит отлично! Действительно, ничего этого проверять не нужно было! Осталось только убедиться, что значение не заканчивается слешем.
— Не понял. Зачем ты написал, что осталось убедиться? Я ж эту проверку как раз оставил, то есть убеждаюсь.
— Да, убеждаешься, это я так просто написал, разговор поддержать...
— Также я смотрю, ты ещё и часть логики в шаблон дизайна засунул. Где такое видано? Перенеси эту логику в ядро, а в шаблоне дизайна используй уже подготовленную переменную.
— Код из шаблона в ядро перенёс, заодно добавил там других ненужных проверок.
— Убери.
— Убрал.
— Так, а вот эта штука у тебя зачем?
— Это нужно для того-то.
— Но для того-то у меня уже есть вот такая своя штука, давай использовать её.
— Давай. Отличная идея. У тебя тут ещё и такой-то случай учтён, ну надо же! Какой ты молодец!

Ну и так далее. Это всё ужасно бесит, но с другой стороны за пару часов я сделал с ним то, что без него не сделал бы примерно никогда.

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

Преодолеваем телеграмный запрет на войсы

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

Полагаться на телеграмовское распознавание речи не стоит. Если наговорить полторы минуты, а Телеграм превратит это в одну простыню, читать будет невозможно. А ЧатГПТ умеет разбить текст на абзацы и убрать чисто голосовые особенности.

Кстати, эту заметку я тоже наговорил голосом, пока шёл по городу, а ЧатГПТ её привёл в порядок.

На что я смотрю, когда фотографирую

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

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

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

Сначала получилось мимо из-за въехавшей в кадр машины, потом она проехала и стало нормально:

Разница между кадрами — 4 секунды

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

Разница между кадрами — 7 секунд

С автобусом нормально, но не супер; с двумя тук-туками намного аутентичнее:

Разница между кадрами — 3 секунды

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

Разница между кадрами — 3 секунды

Ну при чём тут белый мерседес? Вот мусоровоз — другое дело:

Разница между кадрами — 7 секунд

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

Разница между кадрами — меньше секунды

Чел слева ваще не вписывается в картину. Подождём пока он свалит... О, какой автобус! Берём:

Разница между кадрами — 4 секунды

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

Последняя фотка даже удостоилась публикации, вот в таком виде:

Исходные кадры я бы удалил в обычном случае, но тут они стали материалом для заметки.

Листание информации на табло

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

Разберём экстремально плохой пример из аэропорта Гонконга. Сейчас 13:22, но мне показывают примерно часовую порцию рейсов начиная с 17:30 (как видим в углу, это страница 5):

Раз в десять секунд экран переключается на следующий, но там не следующая порция рейсов, а те же на китайском:

И только ещё через десять секунд включается следующая порция.

Листание продолжается вплоть до рейсов, отправляющихся глубокой ночью. Последний экран имеет номер 16, то есть на полный цикл уходит больше пяти минут! Я ждал своего экрана почти три минуты. Это недопустимо долго для аэропорта, где каждая минута может быть решающей. При этом на большей части экранов о рейсах нет вообще никакой информации, даже гейт не назначен; они просто перечислены. Даже на нашем пятом экране уже осталось только две рейса с гейтом.

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

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

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

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


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

С удовольствием переделаю навигацию и все табло в вашем аэропорту.

Думаем дальше № 49 — «В недовкусии чувствуется щавель»

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

Все выпуски подкаста:
Эпл · Ютюб · Я.Музыка · Мейв · РСС для подкастного приложения

0:00 Интро про монологические выпуски
3:29 Я думал, что кофе пить нельзя, но потом случилось Коворкафе (лате, капучино, флетвайт; горечь и кислость)
12:50 Кривая качества кофе
17:48 Я пью «флетвайт, поменьше молока». Две опасности слова «Кортадо»
24:06 Бодрящесть кофе, чай, «бодрящий» и «ароматный» кофе
27:46 Внешние признаки хорошей кофейни (остров, вода, мерч, оборудование, бочки, мешки)
34:42 Как искать в Интернете и почему отзывам верить нельзя
40:13 Сначала поговорить с баристой («сбалансированный» и «100% арабика»; ещё раз про кислость)
48:24 История про Ориджем (и порошок), Италию и кофе, США и бургеры
55:02 Ещё про разговоры а баристой (хаус-бленд и сингл-ориджин; когда не соглашаются делать по-твоему)
1:05:20 Здесь или с собой, стекло или фарфор, заказ через официанта
1:10:36 Нахат, Тим Вендельбо и Торнквист
1:13:16 Светлая обжарка, фильтр-шот, альтернатива
1:16:43 Дрипы
Ранее Ctrl + ↓