nikitonsky_pub | Unsorted

Telegram-канал nikitonsky_pub - Стой под стрелой

10710

Ведет @nikitonsky. Рекламы нет

Subscribe to a channel

Стой под стрелой

Вы никогда не задумывались, в какой момент наступает старость? Все мы угараем над старшим поколением, как они верят телевизору, как они не умеют пользоваться техникой, как не понимают новояза.

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

Интересует конкретика. Спасибо.

Читать полностью…

Стой под стрелой

Ваше айти не карго-культ? Как тогда объясните всеобщую любовь к относительным таймстемпам?

Кто-то когда-то решил, что даты, как они хранятся в компьютере ( 2025-02-03T12:20:19.594320Z), не очень человеко-читаемые и надо как-то их облагородить. Было решено сконвертировать их в относительные таймстемпы.

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

(здесь отступление про то, что как только это изобрели, встала другая проблема — надписи типа «пять секунд назад» устаревают каждую секунду, а «пять минут» — каждую минуту. Так что приходится городить jAvAsCrIpT чтобы они имели смысл. Ну да нам не привыкать — программирование оно все про создание проблем и потом героическое их решение)

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

Это довольно естественный переход от относительной ориентации к абсолютной — относительная удобна в непосредственной близости, абсолютная — все остальное время. Скажем, когда я сижу за столом, мне удобно думать о вещах на столе относительно (спереди, справа, слева). Но если я иду по городу, я уже думаю о своем абсолютном положении, где я в городе, а не где город относительно меня.

К проблеме относительности добавляется еще округление, которое никто не умеет делать. 200 дней? Год назад. 366 дней? Два года назад. НИКТО ИЗ ЛЮДЕЙ ТАК НЕ ДУМАЕТ. Даже программисты так не думают. Но продолжают лепить бессмысленные «два года назад» на коммиты из января 2024 (да, у меня есть скриншот) или «день назад» на коммит, сделанный в 23:59, когда смотришь на него в 00:01, и думать, что делают «человеко-читаемые таймстемпы».

Люди не говорят «день назад», люди говорят «вчера». Не «год назад», а «в прошлом году». Но все равно, точность-то теряется, если вы напишете «в прошлом году» на коммите, сделанном в декабре 2024, я вас приду и стукну по голове.

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

Короче, что делать?

- На сегодняшних датах пишите: «сегодня 18:20».
- На вчерашних еще можете «вчера 18:20» (именно вчера, прошлые календарные сутки, а не «когда больше чем 24 часа», блин). Тут, внезапно, помогает язык — слово для «вчера» есть, значит людям удобно думать в терминах «вчера-сегодня-завтра». А для два-три-четыре дня назад-вперед уже неудобно.
- Если дата на этой неделе, то «четверг 18:20». Не неделю назад, а НА ЭТОЙ НЕДЕЛЕ. Нехватало мне еще гадать, прошлый имеется в виду четверг или будущий.
- Дальше уже переходите на абсолют: «30 декабря, 07:00».
- Когда меняется год (не равен текущему), добавляйте и год тоже: «30 декабря 2024, 07:00».

Все, блин. ЭТОГО ДОСТАТОЧНО. ЭТО УЖЕ ДОСТАТОЧНО ЧЕЛОВЕКОЧИТАЕМО. «А может...» НЕТ! НЕ МОЖЕТ. Остановитесь. Возьмите свой «семьдесят семь недель назад». Посмотрите на него. В последний раз. И засуньте себе в жопу. И никогда не доставайте. Я все сказал.

Читать полностью…

Стой под стрелой

А знаете что еще бесит? Что телефонные приложения разучились умещаться на один экран. Куда ни плюнь все скроллятся. Даже часы, блин, скроллятся!

Хотя казалось бы — вот у тебя прямоугольник. Подумай, как его оптимальнее всего использовать, и запихни все что нужно сразу, без скролла. Там пикселей больше, чем на телевизоре! Пользоваться сразу станет в сто раз кайфовее.

Возьмем погоду. Что нам нужно? Текущая погода, это две цифры условно. Погода на день. И на неделю. Где-то цифр 20, да? Сколько цифр поместится на самый маленький экран самого маленького смартфона? Сто? Двести? А сколько я нашел приложений, которые бы смогли всю эту базовую информацию показать сразу на одном экране, без прокрутки? Примерно ноль.

Хотя казалось бы. Зато с прокруткой находится миллион. А что, палец не казенный, метрики интеракции растут.

А я всего-то хотел увидеть все нужное сразу.

Читать полностью…

Стой под стрелой

Бесит, когда автокомплит включен во время набора. Сидишь, никого не трогаешь, пишешь себе «pri», а оно радостно: «privet»? «pribor»? «prihod»? И твой же код рядом заслоняет. А ты, может, на него смотрел, может, в соседней строчке, которую заслонили, ответ и кроется.

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

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

В конце концов, просто неприятно, когда на экране что-то появляется и исчезает постоянно.

Конечно, нет никакого смысла дописывать сорокабуквенное «priority_interface_factory_adapter», т.е. автокомплит иногда нужен. Но строго по моей команде, на отдельной кнопке, а не автоматом.

Читать полностью…

Стой под стрелой

Последняя вещь про новый Дум и я перестану его мусолить. В трейлере есть момент, когда тебе говорят: «Наконец-то мы дадим тебе поуправлять 30-этажным роботом и мочить 30-этажных демонов. Масштаб просто невероятный». Смотришь видеоряд и никакого масштаба не видишь. Почему?

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

А если вы все пропорционально увеличили, то это не масштаб, а просто Олег сеттинг отмасштабировал.

Читать полностью…

Стой под стрелой

2/2

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

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

А, а еще Думгай в Этернале собирает листочки. Листочки, блин! Из книги! По уровню непопадания в легенду примерно как God of War, который двигает бочки, чтобы решить какой-то там пазл.

Сюжет. В первом было ровно столько сюжета, сколько нужно. Он был функциональным, он был обозначен пунктиром и давал достаточно информации, чтобы объяснить, зачем тебе идти из А в Б, и ни капли больше.

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

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

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

А, ладно, вспомнил. Этернал удивил меня тем, что в нем Думгай бьет стариков. Я честно даже растерялся, что мне думать-то по этому поводу? Прям подходит к пенсионеру беззащитному и отрывает ему голову. Предполагается, что это ээээ... круто?

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

Сравните с 2016, где твоя жопа висит на волоске каждую секунду игры. Это вообще другой уровень включения и ставок.

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

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

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

Ну а Дум Этернал это просто средняя игра.

Читать полностью…

Стой под стрелой

Самое унылое, что вы можете сделать с текстом/подкастом/видосом/продуктом/контентом в интернете — это сгенерить ИИ обложку.

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

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

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

ИИ обложки — очень сильный сигнал «автору пофиг». Это современная версия фоток с фотостоков, только некрасивая.

Читать полностью…

Стой под стрелой

Самый печальный дизайнерский тренд времени — выделения скругленными прямоугольниками.

Началось это с Большого Сюра, версии макОС 2020-го года. Раньше было как? Выпадающее меню, например — это список строчек в прямоугольнике, когда наводишь на строчку — она подкрашивается синим от края до края. А стало как? Стала подкрашиваться не до края, образуя как бы синий прямоугольник внутри большого серого прямоугольника самого меню.

И ЭТО НЕКРАСИВО.

Сорян, логических аргументов не будет. Да, это вкусовщина. Да, миру пофиг, все дружно прыгнули делать как Эпл. Теперь и в списках выбранный элемент выделяется рамочкой вместо того, чтобы подкрасить фон. И табы (UISegmentedControl) теперь живут внутри такой как бы шахты-прямоугольника, внутри которой с отступами живет еще один прямоугольник выделения. Фигма, например, взяла свой минималистичный интерфейс, поместила каждый элемент в дополнительный скругленный прямоугольник и пытается продать это как инновационный UI3. Модно же!

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

Но в целом мой глаз просто кричит: это неправильно, это нелогично, это лениво. Не знаю, что с этим делать. Вот, решил с вами поделиться.

Читать полностью…

Стой под стрелой

Проклятие современного айти: протухающие сессии.

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

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

Главное, это такой brainworm (как же нужен аналогичный термин на великомогучем), потому что ЗВУЧИТ ЛОГИЧНО. Не является, а именно звучит. Как будто бы лишние проверки точно не повредят? Как будто бы чаще логинишься — больше сесурити. Это же как паспорт на проходной проверять. Это же так работает. Глядишь, и злоумышленника поймаем. От создателей лечения рутью, сверления черепа при головной боли и других практик, казавшихся ОЧЕНЬ ЛОГИЧНЫМИ.

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

«Ну а как же, вдруг твой токен найдут через пять лет на купленном на ебее и восстановленном диске в логах?» Ребят, меняйте и обновляйте свои токены сколько вашей душе угодно. Главное — меня не разлогинивайте. Эти две вещи вообще никак не связаны.

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

«Но публичные компьютеры…» Вы серьезно сейчас? Вы сейчас, блять, серьезно?

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

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

Читать полностью…

Стой под стрелой

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

Обожаю, потому что ну интересно же, как оно там на самом деле.

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

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

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

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

Читать полностью…

Стой под стрелой

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

Поэтому делюсь принципом. Он очень простой, надо ответить всего лишь на один вопрос: хочу я еще такое видеть или не хочу?

Скажем, чел пишет: «ты тупой, иди учись». Задаем себе вопрос: хочу я, чтобы к следующиему посту он написал такой же комментарий? Очевидно, не хочу. Ну и нафиг его тогда.

Тут важно, что это именно какой-то левый чел, который ничего обо мне не знает, и его мнение никак из поста не следует. Скажем, если бы мой наставник сказал мне «тебе надо подучить то-то и то-то», я бы, конечно, послушал. А когда это абсолютно на пустом месте заявление, да еще и мимо — это просто кому-то нужно место, куда можно выплеснуть свое недовольство жизнью. Я таким местом быть не готов.

Или чел пишет что-то про расовую ненависть (в любую сторону), бросается на людей. Хочу я еще видеть такое под следующими постами? Нет, не хочу. Бан.

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

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

Поэтому баню с легким сердцем и всех люблю.

Читать полностью…

Стой под стрелой

Давно не трогал SQL, все больше даталог или вообще просто GUI разработка, а тут пришлось. И я, оказывается, забыл, какой это бредовый язык.

Основной бред это, конечно, текстовые запросы. Понятно, что это удобно (было когда его придумывали) чтобы, как там, бухгалтеры сами себе запросы к базе писали на естественном языке. Но блин, 50 лет уже прошло, весь мир на нем работает, неужели нельзя было за это время что-то более machine-friendly придумать? И самое смешное что запросы руками как раз никто не пишет, все ходят из программ, но обе стороны притворяются, как будто это бухгалтер ручками набил — и программист, и база.

Понятно, SQL-инъекции, которые из этого проистекают — стыд. Подсчет запятых и скобок — стыд. Куча бесполезных ресурсов, которые обе стороны тратят на парсинг «естественного языка» — ебаный стыд.

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


SELECT * FROM users WHERE name = ?


еще куда ни шло. Но вот условный


SELECT * FROM users WHERE role IN (?, ?, ?, ?, ?)


Если тебе надо найти пользователя с одной из трех ролей — это один запрос, из пяти — другой, из двух — третий. Ну бред же, бред, бред, не может так быть (но есть).

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

ДА КАК ВЫ ЭТО ТЕРПИТЕ???

UPD: В моей проблеме были таплы, типа


WITH LOOKUPS (attr, value) IN VALUES (('a', 1), ('b', 2), ...)

Читать полностью…

Стой под стрелой

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

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

Да, если работаешь с вебом, удобно поставить код и браузер рядом. Но это помещается на один (нормальный, не ноутбучный) экран. Ну и все.

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

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

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

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

Читать полностью…

Стой под стрелой

В комментах к посту про Island of Insights скинули ссылку на блог Doredel (Аня играет в игры), и я там подзалип (рекомендую!), а также нашел 14 Minesweeper variants, про которую я даже не слышал и которая ровно то, что я искал — видите, чудеса бывают!

А сегодня решил сделать зеркалочку на пост оттуда «Что не так с Rogue-like играми». Аня их не любит, а я наоборот, в не-rogue-like играть почти не могу. Итак, что ТАК с Rogue-like играми.

Основная проблема с мейнстримными играми в том, что в них есть win condition, но нет lose condition. То есть как бы плохо ты ни играл, через положенные 8-16 часов ты доберешься до задуманной авторами концовки. Каждую ситуацию тебе достаточно пройти _хоть как-то_ один раз, а если не получится — загрузился и попробовал снова. Если ты не игровой журналист, рано или поздно ты пробьешься через любую преграду.

И в какой-то момент меня это стало жутко бесить. Потому что — если игра все равно пройдется, что бы я ни делал, то зачем там я? В чем, так сказать, смысл? Я как-то пытался поиграть в Call of Duty, включил, посмотрел кинцо, мне дали автомат, рядом взвод коллег, я начал разбираться, какая кнопка что делает, а они раз-раз и все зачистили. Прикольно, ребят, я вам не мешаю?

Или вот прямо сейчас прохожу Космическую Марину-2. И там есть задания, когда нужно защищать какие-то колонны от Тиранидов. Они, типа, их облепляют и грызут, и вот нужно не дать сгрызть. Прикол в том, что что бы ты ни делал, это ни на что не влияет — стреляешь по ним, вроде кто-то падает, но меньше их не становится. А потом, по таймеру, видимо, просто все падают разом и задание считается выполненым. Ощущение, что тебе дали подержать автомат с игрушечными пулями. Если бы я был ребенком, я бы, наверное, впечатлился, но я-то не ребенок.

Финансовая мотивация и mass appeal понятны. Было бы странно добровольно отдавать 70 евро, запускать игру, а игра тебе говорит «ты лох» и тут же убедительно это доказывает. То есть, любители, конечно, и на такое найдутся (см. Дарк Соулс), но это явно не может быть массовым, дефолтным состоянием.

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

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

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

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

А так в статье про недостатки все верно написано: рандомная генерация это от дешевизны, конечно, сложность балансировать сложно (запускал как-то Monster Train, прошел его с первого раза, хмыкнул и закрыл), играешь по сто раз в одно и то же.

Но что делать, в обычных играх «на прохождение» смысла еще меньше.

Читать полностью…

Стой под стрелой

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

Читать полностью…

Стой под стрелой

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

Но это бессмысленно! Почему мне должно быть интересно, кто из них прав? Я вижу их в первый и последний раз. Мне _может_ быть интересно, что там по поводу вопроса, который они обсуждают, но точно не их ораторские способности.

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

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

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

Как видите, я не понимаю дебатов.

Читать полностью…

Стой под стрелой

Общение переусложнено.

Пишет знакомый: «давай встретимся, кофейку попьем как-нибудь». Я обрадовался, говорю «давай, может завтра?». Он явно напугался, начал сначала про работу что-то придумывать, а потом и что он вообще уезжает до апреля. То есть я очевидно не понял, что он имел в виду.

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

Второй: можно как-то хотя бы как-то последовательно их использовать? Потому что было бы не так плохо, если «давай встретимся» значило «не давай» в близком к 100 или хотя бы 90% случаев. Но это буквально 50 на 50! В половине случаев люди буквально хотят меня увидеть, а я им в ответ «ха-ха, да, я тоже больше никогда не напишу». Я могу запомнить правила, но как запомнить правила, которых нет?

В общем, вы как хотите, а я в эти ваши социальные ритуалы играть отказываюсь. Буду аутистом. У нас хотя бы логика есть.

Читать полностью…

Стой под стрелой

Никто не умеет логировать правильно. Логировать надо что? Когда что-то пошло не так. А логируют что? Да все подряд!

Мы стартанули. Мы стартанули-2. Используем версию ядра 27-14-88. Проверяем дату. Дата на месте. Проверили конфиг. Конфиг на месте. Прочитали конфиг. Конфиг прочитался! Закрыли файл конфига. Файл закрылся успешно. Первая фаза старта завершилась успешно. Опа, что тут у нас? Запрос пришел. Так, внимание! Система обработки запросов инициализирована. Приступаю к обработке запроса. Нужно в базу. В базу отправлен запрос! Ждем. Дождались. Ответ от базы получен. Идентифицирован пользователь. Первая фаза парсинга запроса завершена. Начинаем КВН...

И так до бесконечности. Ну невозможно же! Зачем? Зачем мне все это видеть? На каждом запросе? Если все хорошо, то и ладно. Значит все работает. Оно и должно работать. Об этом не надо как-то отдельно упоминать. Это под-ра-зу-ме-ва-ет-ся!

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

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

Я уже писал про систему сборки Ninja, которая, если все пошло хорошо, выводит всего одну строчку — «все готово, мастер». Вроде бы Zig пошел дальше, и если все тесты прошли успешно, то он вообще ничего не выводит (я бы одну строчку все-таки оставил, вдруг тесты не подцепились, хотелось бы видеть цифру прогнанных). Учитесь у них. А у джаваскриптеров и джавистов логировать не учитесь.

Вы можете спросить «почему»? Я слышал, что некоторым людям недостаточно только моего авторитета. Что ж, отвечу. Если вы вываливаете кучу говна, то в ней трудно заметить аномалии. А если в лог идут только и исключительно исключительные ситуации, то их и заметить легко.

Ну и проматывать эти полотна устанешь, не без этого.

Читать полностью…

Стой под стрелой

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

Например, битовые маски. Это вроде бы целое число (инт), но для него не имеют смысла операции сложения-вычитания-умножения-деления, зато имеют смысл побитовые И и ИЛИ. Можно сказать, что это хак от бедности, что их запихнули в обычные инты.

Или массивы vs таплы. Вроде и то и то линейная последовательность, индексированная. Но одно произвольной длины, а другое фиксированной, в одном позиция ничего не значит, а в другом значит все. Хотя оба часто представлены одним и тем же типом — массивом, будет ошибкой звать всякие конкатенации, вставку и удаление элементов на таплах, так же, как и хардкодить доступ по фиксированному индексу в массиве. Питон вроде отличился тем, что официально разделил массивы и таплы (зачем — не спрашивайте).

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

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

Недавно мне показали еще одно тонкое различие, которое я не раньше не понимал: закомменченный код и поясняющий комментарий. Понятно, в большинстве языков комментарий один: //. Иногда делают различие для многострочного и однострочного, но семантического различия не делают. А оно есть! Я или хочу что-то пояснить, и тогда коммент должен быть ярко подсвечен (как в моей теме Alabaster), или наоборот, временно выключить какой-то код, и тогда его надо наоборот, засерять (делать сереньким). А если вид комментариев один, то нам придется или подсвечивать нерабочий код, или засерять важные пояснения.

В целом общий тип для разных целей это окей. Я не вижу, например, что Питон что-то выиграл от разделения массивов и таплов. Как говорил Алан Перлис, лучше иметь 100 функций над одним типом данных чем по 10 функций на каждый из 10 типов. Мало ли — ситуации разные бывают, иногда и по полям объекта приходится пробежаться в цикле.

Но что хочу подметить — это когда люди не понимают этой неявной разницы и используют _не те_ операции на _не тех_ объектах. Ну а что, поверхностно они тоже подходят (типы сходятся). Типа как положить мапу user id → user в {} в Джаваскрипте. Или взять второе и третье поле из тапла с помощью .drop(1).

Не надо так.

Читать полностью…

Стой под стрелой

Смотрю сейчас сериал про американаских юристов, года где-то 2010-го. И они там иногда разговаривают по телефону, им поступает второй звонок, и они такие: ща, погоди, у меня другая линия. И переключаются.

И вот этого я не понимаю. Я знаю, что есть такое явление, как putting on hold (в основном из того идиотско сдизайненного экрана айфона, ну и из кино немножко). Но блин: есть два человека, с одним ты уже разговариваешь, а второй только делает попытку контакта. Уделить внимание ты можешь только одному. Кого выберешь?

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

Но юристы всегда выбирают ответить на второй звонок. В чем смысл? Не понимаю.

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

Читать полностью…

Стой под стрелой

Анонс нового Дума (Темные Века) хороший повод поговорить про века светлые (2016) и пестрые (Eternal).

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

Дизайн уровней. Смотрел интервью с создателями 2016, где они говорят: «У нас было правило: если рисуешь на стене в коридоре трубу, она должна что-нибудь соединять». То есть декорации как-то правдоподобно продумывались, зачем они тут и почему. И это чувствуется! Даже несмотря на всю абсурдность происходящего (демоны, марс, сайфай база) оно все логично соединялось: корпусы, двери, мостики, все это можно представить что было зачем-то нужно. Что ты попадаешь в какое-то помещение, у которого раньше был один смысл: например, лаборатория, вот тут люди исследовали что-то, или раскопки, вот тут кран, он копал, а вот машина, которая грунт отвозила. А потом пришли демоны и это помещение, кхм, переосмыслили.

Вот. А в Этернале подход сменился. Трудно, говорят, было все продумывать, и мы забили. Теперь уровни просто делаются по «чтобы было круто» или «чтобы было удобно играть». Платформы в рандомных местах, лестницы шириной в футбольное поле, двери, которые никуда не ведут. Дошло до парадоксального: действие перенесли на Землю, но это не дало эффекта узнавания! Родной земной город выглядит менее правдоподобно, чем космическая станция на Марсе! Поезда не похожи на поезда, небоскребы на небоскребы, храмы строят из железа, грузовые поезда нефункциональны, торговые районы включают энергетическую подстанцию и токсичное подземелье, а у демонов есть фабрики.

Кто-нибудь скажет: да чего ты, это же Дум! Не парься, это и не должно иметь смысла. Главное чтобы стрелять было весело! А я парюсь. Почему, собственно, не должно? Мне жаль этих людей.

Тут же можно сделать колбек на ИИ: Этернал это то, что сгенерила бы нейросеть на основе Дума 2016. All style, no substance, внешние признаки есть, внутренней логики нет.

Тактильность. Первый Дум был супер тактильный. Все, что ты делаешь, происходило в реальном мире: оружие ты подбирал с пола (да, прям анимацией, из рук мертвого товарища вырывал), двери раздвигал руками, кнопки нажимал пальцем, черепа раскалывал одной левой. Все это реально происходило, а не как обычно в играх, где ты подходишь, нажимаешь E и дверь сама открывается, «как будто нажал». Это именно что было анимировано, мега-кайфово выглядело и ощущалось. Сверху это все щедро присыпано environmental storytelling.

В Этернале это все заменили на обычные Quake-3 style иконки: просто проходишь через цветное голографическое изображение повер-апа и у тебя в инвентаре бампается циферка. Абстрактно, бездушно. Иконка секрета — это светящийся в воздухе знак вопроса. Как будто модель не прогрузилась. Печалька.

Враги. Отдельно хочу отметить Импов из 2016: пока все остальные враги как бы просто расположены по уровню и немного перемещаются, Импы уровнем по-настоящему пользуются: лазят везде, позиционируют себя, как бы «ощущают» уровень и пользуются им. Это чуть более глубокий уровень интеграции, и помещение перестает ощущаться просто декорацией.

Визуальный дизайн в Этернале all over the place. Пестрит, не сочетается, не пугает. Если визуально 2016 это Диабла 2, то Этернал — это Диабла 3.

Камера. Первый Дум был сделан на 100% без склеек и от первого лица. И это решение, это стиль, это работало на погружение. Ты буквально сливался с персонажем. А уж какие там были смерти от первого лица! Они даже в трейлер, если я правильно помню, вставили, как тебя потихоньку ест Revenant, а ты на это смотришь из шлема. Умирает не персонаж на экране, умираешь ты сам. Вот уж шок контент так шок контент! В хорошем смысле.

1/2

Читать полностью…

Стой под стрелой

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

Читать полностью…

Стой под стрелой

Телеграм сделал, что смахивание видео не закрывает его, а переводит в режим картинка-в-картинке, и это повод поговорить про режим картинка-в-картинке.

Во-первых, что с названием? Оно раздражает какой-то своей особой дебильностью. Давайте тогда пульт от телевизора называть «кнопки на палке», редактор кода — «буквы в окошке», а ноутбук — «книга на коленках».

Во-вторых, я всегда думал, что PiP какая-то бумерская штука со времен, когда телек был один на всю квартиру, и папа хотел смотреть футбол, а остальная семья — мультики. То есть для нескольких людей я еще могу понять, но зачем это может быть нужно на телефоне, в который по определению смотришь ты один? К тому же видос закрывает добрую половину экрана, так что делать что-то еще проблематично. Получается, PiP на телефоне эта такая непрактичная вещь для тех, кто хочет не просто тупить в телефон, а ТУПИТЬ БЫСТРЕЕ.

Но он есть также и на десктопе. Какое-то время назад PiP добавили в Safari, а чуть позже и в Firefox. Теперь любой видос можно открыть в специальном маленьком окошечке, которое будет показываться поверх остальных.

Что тут не так? Я слышал, что есть люди, которые любят во время работы включить какой-нибудь бубнеж в фоне, так вот это как раз для них?

Тут мне не нравится реализация. Во-первых, нафига отдельный режим? Вроде бы у нас уже есть абстракция, чтобы вынести какой-то кусок информации в прямоугольник и поставить его в нужное место экрана. Это окна. Это ровно то, зачем они изначально придумывались. Это БУКВАЛЬНО идея многооконного интерфейса.

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

Да, оно зависает поверх других окон, и это удобно (для этой фичи), но тут у меня другой вопрос, я им мучаюсь уже лет десять. Почему я не могу на уровне оконного менеджера закрепить произвольное окно поверх других? Вроде бы удобная и логичная фича, АПИ для этого есть (и всегда было). Почему это можно сделать программно, но нельзя сделать из интерфейса? В конце концов, это же МОЙ компьютер.

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

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

Кстати, в Ютубе на десктопе есть еще понятие «мини-плеера». Это как бы тоже «PiP», только на джаваскрипте. Поэтому переходить на другие сайты нельзя, вынести окно нельзя, в общем, классическое современное «мы сделали то же самое, но хуже». Зачем это может быть нужно людям, которые умеют открывать больше одной вкладки, я ума не приложу. Но хэй, программистам в Гугле надо что-то делать, не сайт же оптимизировать, в конце концов.

Читать полностью…

Стой под стрелой

Я уже писал, что программировать сложно (и что я внутренне с этим не согласен). Чтобы вывести Hello World, достаточно пяти строк на C, одного файла и блокнота. Чтобы вывести графическое окошко с кнопкой «Hello World» нужен Xcode, пять минут на запуск, десять экранов визарда, психологическая устойчивость и КМС по поиску пропертей в панельках. Файлов тоже будет минимум десяток. Просто чтобы начать!

Та же история с веб-страничкой. Клиент, сервер, база, DNS, хостинг, nginx, мониторинг процессов, HTML, JS, CSS. По-моему это абсолютно абсурдный прыжок в сложности.

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

Пример: Электрон. Он схлопнул разработку под винду-мак-линукс. Было три разных платформы, стала одна общая. Или серверный Джаваскрипт: было два языка, два окружения — сервер и клиент. Стал один общий. Или пресловутый Tailwind — он схлопнул JS и CSS во фронтенд-стеке. Реакт схлопнул HTML и JS, понятно. Firebase/GraphQL схлопнули сервер и базу. Докер схлопнул дев/прод окружения (да, тот факт, что ты сначала пишешь у себя в одних условиях, а потом тебе надо это где-то запустить в других условиях — это тоже источник сложности). Что еще? Наверняка тоже куда-то в эту схему укладывается.

Ну вот. Представляете, насколько грустна и неоправданно сложна наша программистская жизнь, если кто-то приходит, смотрит на нашу схему из десяти компонентов, говорит: «могу схлопнуть вам два узла, надо»? И программисты уже дуреют с этой прикормки.

Что будет, если схлопнуть все до одной ноды, даже представить страшно. Точно без работы останемся.

Читать полностью…

Стой под стрелой

Пятерка моих любимых фильмов Тарковского:

1. Ностальгия
2. Зеркало
3. Гнев
4. Торг
5. Жертвоприношение

Читать полностью…

Стой под стрелой

Не понимаю феномена игры Astro Bot. К выходу PlayStation 5 Сони сделала технодемку про маленького робота, который бегает по внутренностям приставки и знакомит тебя с контроллерами. Демка всем понравилась, и они через пару лет доделали ее до полноценной игры. И она на удивление всем очень хорошо заходит. Кроме меня.

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

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

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

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

Так и живем.

Читать полностью…

Стой под стрелой

У Вани Гришаева (канал igrishaev) заметка про то, как в Телеграме съезжает разметка. Тоже это видел, воспроизводил, и вроде даже кто-то пересылал это разработчикам.

Конкретно эта проблема в том, что регионы хранятся отдельно от текста, оффсетами. Соответственно, когда ты редактируешь текст, регионы могут неправильно пересчитаться и съехать. Понимаем, бывает.

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

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

На заре приложения Sketch у них был баг, когда в каких-то случаях cmd+z делал undo не совсем правильно и ты попадал не в то место, с которого начал. Опять же, наверняка они делали что-то умное и сложное вроде вычисления дельт, а надо было делать что-то простое и железобетонное.

Да, звучит как читерство. Писать тупой код? Для этого что ли я так долго учился? Проявить себя и свой ум негде (на самом деле есть где, конечно — придумать хорошее простое решение часто сложнее, чем придумать сложное).

Зато работает, есть не просит, и пользователи счастливы. Мы же ради пользователей программируем, да? Да ведь?

Читать полностью…

Стой под стрелой

Реальному миру часто не хватает RSS.

Например, вчера LG анонсировала 6K монитор, который поступит в продажу позже в этом году. Ну и как мне узнать, когда это произойдет? Единственное, что приходит в голову, это подписаться на какой-то сайт с новостями о хардваре, но это же целый год придется нерелевантные новости читать ради одной когда-нибудь релевантной.

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

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

Короче, миру нужен RSS ко всему.

UPD: ребята, не зацикливайтесь на протоколе. Может быть RSS, email, телеграм, мне пофиг. Главное — уведомления об объекте с точечным фильтром

Читать полностью…

Стой под стрелой

К мему с семвером пришли люди и начали предлагать CalVer — это когда версия это Год.Месяц.День или типа того.

Но это самая бестолковая схема эва!

Во-первых, она предполагает, что новое всегда лучше старого. Типа, Вася написал библиотеку в 2025-м, а Петя в 2024-м. Оба потратили на них по три часа. Но у Васи версия больше! Почему? А нипочему.

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

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

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

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

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

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

Хуже только когда после 3.9 решают бампнуть до 4.0 просто для красоты.

Читать полностью…

Стой под стрелой

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


public char[] readBuf; 22 usages
public char[] accumulator; 14 usages
public int accumulatorLength; 20 usages


Вопрос: а зачем?

У меня, конечно, есть версия. Моя версия — потому что может.

В какой-то момент разработка ИДЕ уперлась в стену — вроде бы все что смогли придумать сделали, все сравнялись по фичам, а продавать продукт как-то надо. То есть надо пользователя как-то убедить, что а) ему нужны фичи, и б) у нас их больше чем у других. Делать что-то, неважно что, лишь бы у других этого не было. И началась гонка фичей. В этой гонке никто не задавался вопросом «а надо ли». Больше — значит лучше. Тогда же возникла мантра «не нужно? не пользуйся, тебя же не заставляют».

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

Шансы, конечно, невелики, но я готов это признать при наличии убедительных доказательств.

Давайте попробуем. Объясните мне, какая польза от этих аннотаций.

Читать полностью…
Subscribe to a channel