Ох как меня бесят люди, использующие слово «крайний» вместо «последний». Типа, если сказать «последний», то завтра умрешь, не меньше.
И не то чтобы я не слышу этой коннотации. Слышу конечно. Бесит меня не это, а то, что у слова крайний коннотации все те же. Крайний — с краю — находящийся на краю — все, завтра уже ничего не будет. То есть поменяли последнее шило на крайнее мыло.
Ну и слово само неприятное.
(да, теперь это лингвистический канал)
В 2007-м Imran Ghory написал статью, как он просил кандидатов на должность программиста запрограммировать следующее:
Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.
Написать метод, который принимает список транзакций и баланс пользователя
type Transaction = {
id: number;
orderId: number;
amount: number;
txType: 'Bet' | 'Win';
}
Вернуть произвольную структуру, где каждая транзакция помечена как валидная или невалидная.
Транзакции обрабатываются от меньшего id к большему.
Bet уменьшает баланс на сумму в amount, Win увеличивает.
Если баланс ушел в минус, транзакция считается невалидной.
Если транзакция не валидна, последующие транзакции с тем же orderId тоже считаются невалидными.
Если id транзакции повторяется, такая транзакция тоже не валидна, но остальные с тем же orderId должны быть обработаны.
У Эпла вышел шлем (ну как шлем? Очки, скорее) виртуально-дополненной реальности «Яблоко Зрение Профессионал», а у Никитонского пост об нем. Пост:
В целом все получилось ровно так, как я и ожидал. Всю современную культуру Эпла засунули в новое окружение. То есть: максимальная анальная огороженность, отсуствие игр, попапы «что нового» и «как хотите смотреть на рекламу», DRM-ы во все дыры, в общем, не продохнуть. Ничто не греет мое сердце так же сильно, как очередная картинка идиотского куки-попапа или модального диалога новомодной виртуальной реальности. Да, компьютеры все еще говно, и никто менять это не собирается.
Все это громко называется «пространственные вычисления», противный маркетингово-приторный термин, на деле означающий, что те же самые двумерные окна теперь висят в 3Д-пространстве. В чем здесь «пространственность» непонятно.
Смелый ход выпустить шлем, единственный понятный людям смысл которого это игры, без игр. Знаю, хотели создать ощущение «больше, чем игрушка», а получилось в итоге «один потенциальный юз-кейс» → «ноль».
Можно, конечно, сказать: там чувак двигатель самолета разбирает у себя в комнате, но давайте, положа руку на процессор, вы тоже планируете двигатели разбирать? Или вообще хоть что-то делать, что в 3D имеет больше смысла, чем на экране (к 3D-художникам вопросов нет).
Ну кстати если это как-то 3Д-художникам жизнь облегчит, то может займет хотя бы одну нишу, как айпад нашел себе иллюстраторов и больше по большому счету ни для чего не нужен. Но пока что-то 3Д-художники не спешат обвешаться условными Окулусами.
Многие программисты, наверное, мечтают, что сделают себе огромный виртуальный экран. Это можно! Но, во-первых, Эпл не помогает (на очках нет серьезных приложений, максимум браузер), а во-вторых, кажется, не все понимают, что просто в большом экране смысла немного. Он перестает помещаться в поле зрения, ты его отодвигаешь подальше, и хоба, он снова маленький. Угловой размер-то не изменился!
Развесить окна вокруг себя и вертеть головой? Ну вы быстро обнаружите, что вертеть головой не очень-то удобно! Но это моя давняя борьба, мне никогда не понять людей с больше чем одним монитором.
А еще может видели несколько лет назад клевую анимацию, как комп на рабочем столе в офисе постепенно пожирал устройства: сначала ящики для почты, часы, потом телефон, календарь, книжечку для заметок, глобус, и так далее. И в итоге оставался пустой стол просто с ноутом. Выглядело эффектно. Но теперь что же, получается, мы обратно хотим все это разложить на столе, только теперь виртуальном? Какой тут long game? Пятачок, определись!
Ну и сорян, я никогда не поверю, что мыльная, фильтрованная 3D-текстура рабочего стола может хотя бы теоретически сравняться с настоящим 4K экраном. Вот не верю и все. Не может быть. Тут на маке-то включаешь дробное масштабирование и сразу тошнить начинает, а там оно еще хуже в пиксели попадает.
Прозрачные глаза снаружи это просто ор. Оно еще на бумаге выглядело тупо, а в реальности оказалось еще хуже. Что там случилось непонятно, но такого очевидного промаха я у Эпла не припомню.
Таймеры на кухне это какой-то coping. Решение в поисках проблемы. Хотелось бы чтобы айти-гиганты уже перестали помогать улучшать нам процесс приготовления еды, в ним все в порядке уже много веков, если не тысячелетий.
А вот «фокус, куда смотрю» как будто неплохо? Я бы попробовал на компе. Потому что часто я вижу например поле ввода, но попасть туда нетривиально: несколько альт-табов и потом просто табов. Мышь решает проблему, но за ней надо тянуться. А тут лучшее от обоих миров: и показываешь сразу куда нужно, и руки с клавы убирать не нужно. Понятно, что трекинг должен быть хороший.
Ну и в общем цель «дать людям работать из еще большего количества мест, которые раньше казались неудобными» мне кажется сомнительной. Может, дать людям меньше работать? Или дать работать из удобных мест, но лучше? Как будто было бы полезнее.
В твиттере на днях обсуждали чувака, который нашел девушку через ChatGPT. Он там нагородил целую систему: как-то автоматизированно ходит в Тиндер, одна нейросеть отсматривает фотки, другая пишет/знакомится/поддерживает общение, третья палит слоты в календаре и договаривается о свиданиях, четвертая постепенно раскрывает факты личной жизни, пятая выдает ему советы что делать (кажется, как я понял), все это с системой мониторинга и реакции через телеграм-ботов. Короче, красота (ну, кроме этической части, конечно).
Ну вот. А обсуждение в основном про то, а не пиздит ли он часом. Начиная от заявленного количества матчей (больше пяти тысяч), временного интервала (вроде между выходом ChatGPT 4 и результатом три месяца прошло), общей сложности системы, проблем с интеграцией, опытом самого чувка (20 лет, гуманитарий), кастомизацией нейросетей.
Я в общем-то согласен, что звучит подозрительно, но в принципе могу жить с мыслью, что всей правды мы не узнаем. Но!
Штука в том, что я целом хотел бы жить в мире, где такое возможно. В смысле что пришел из гум. вуза, взял пару нейронок, соединил питончиком, телеграм прикрутил, интегрировался с чем нужно и погнали. И все это за пару вечеров. Я хочу в это верить, понимаете, что это возможно. Что компьютеры станут _настолько_ доступны.
Но то, как он их использует, я не одобряю, конечно. Хотелось бы, чтобы компьютеры использовались для чего-то хорошего, для отсеивания и уменьшения булшита, а не для умножения его.
Всякие движения типа «минималистичный блог-движок, который просто показывает текст» это круто, конечно, но это скорее реакция на сложность самого программирования, когда хочется дать мозгу отдохнуть.
А уже отдохнувший полностью мозг мог бы заняться каким-нибудь месивом из миллиона систем, каждая из которых плохо написана и плохо работает, но зато все вместе складываются во что-то веселое и автоматизируют жизнь как-то осмысленно для человека, а не для программиста.
И не надо писать, что мне никто не мешает. Я знаю. Перфекционизм мешает. И корпорации, которые очень не любят делиться АПИ. Так что дайте порефлексировать. И помечтать.
Когда-то у меня был доклад, «Обретение навыков». Суть такая: рост внутри любой профессии проходит через разные фазы (четыре или пять) и они сменяются качественным переходом. Но главное, людям с разных этапов сложно разговаривать друг с другом. Когда это понимаешь, начинаешь видеть эту проблему везде.
Самое очевидная (и бесячая) это такая картинка где два стола, к одному огромная очередь и написано «простые советы», а к другому никого и написано «думай сам».
Если бы люди могли думать сами, они были бы экспертами. Но они не могут, и им нужны простые советы. Это нормальная ситуация. Нельзя требовать от новичка, чтобы он полагался на собственную интуицию или здравый смысл. Их у него нет, потому что нет опыта, и именно поэтому ему нужны простые советы: чтобы двигаться дальше.
Советы для новичков часто пугают опытных, но это не значит, что они плохие. Они ровно такие, какие и нужны на данном этапе. Покрой код 100% тестами. Что? Бред! — Скажет опытный программист. А новичок скажет: понял, сейчас попробую. Он видит цифру, видит цель, и понимает как может двигаться дальше. Скорее всего он никуда не придет, но это и не нужно. Важно набраться опыта, любого, и чем быстрее, тем лучше.
Или условный Clean Code, который никакой критики не выдерживает, но — это конкретные советы, и именно этим она полезна. Новичок не знает, сколько функций нужно, насколько большими их делать, как назвать переменную, что выносить. И когда перед тобой чистый лист Вээскода, а ты до этого ни разу ничего подобного не писал, ответы вообще не очевидны.
Опытный скажет: одного правильного ответа нет. Вы наверное видели мем, где сеньора-программиста спрашивают «скажи фразу», он вздыхает и выдает: «it depends». Вот это оно. И оно так и есть. Но это не помогает начать.
Кстати, по стримам Дяди Боба видно, что если следовать только его советам, то код или хоть что-то работающее получаться в итоге не будет. Это тоже нормально. Главное этот этап проскочить и сделать правильный вывод. «Постарайся проиграть свои первые 50 игр в Го как можно быстрее» (это не про язык Го, а про игру Го). А не «играй как новичок до седых волос».
Или трагедия книжки «банды четырех». Она писалась с высоты огромного опыта, но получилась сформулирована в такой простой форме, что новички восприняли ее как руководство к действию. Предполагалось, что паттерны нужны пару раз на проекте, чтобы выкрутиться из сложной ситуации, а оказалось, что новички строку из эстэдэина не могут прочитать без фабрики и адаптера.
Даже языки, так-то, под разные уровни программистов получаются. Кложа, например, для «старых уставших программистов», потому что минимум концептов и максимум свободы. Ты должен сам знать, что и как хочешь сделать. Язык тебе не поможет.
Сравните с условной Джавой (Котлином, Растом, С++), где все за тебя придумано, упаковано, подписано, миллион правил, везде держат за ручку, помогают, синтаксис есть. Гораздо легче начать, потому что гораздо меньше свободы. Эти языки учать тебя думать на себе.
Рост переусложненных фреймворков это тоже реакция на приток новичков. Кто угодно может научиться Кубернетису, потому что там не надо ничего думать или планировать, нужно просто следовать шаблонам, не принимая никаких сложных решений.
Еще одно интересное следствие. Эксперты не умеют коммуницировать. У них все ситуации и весь опыт сливается в подкорке в одну большую шаль (паутину, если угодно), и они все делают правильно и получается у них хорошо, но когда их спрашивают: а почему? Почему вот тут так сделал, почему вот тут так нарисовал, почему так назвал, и т.д., они просто разводят руками. Потому что так показалось правильно.
Еще раз: они не «не хотят» объяснять, они именно что не могут. Даже если бы и хотели. Так что менторы из них так себе. Опыт для обучения нужен, главное чтобы его было не слишком много.
Ну и запрещать новичкам делать хуйню не нужно, но и результатов в смысле именно хорошего баланса кол-во усилий на бизнес-велью не стоит.
Главное, что это временно.
Компьютеры такие непредсказуемые.
У меня в голове есть отдельная полочка для случаев, когда компьютеры ведут себя непредсказуемо. То есть меняют поведение без видимой на то причины. Типа, всегда делал одно и то же, ничего не трогал, а оно иногда работает так, а иногда — этак. Почему? Никто не знает.
Например, Share menu в iOS показывает сколько-то «быстрых» контактов. Как они туда попадают? Да хрен его знает. Часто свою жену я найти вообще не могу, зато есть какие-то люди, с которыми я может перебросился парой слов десять лет назад.
Или (раньше было) когда ноут просыпается, подключенный к монитору, он может его или узнать, или не узнать. В зависимости от этого главный экран будет либо на мониторе, или на ноуте, и угадать невозможно.
Или сейчас внешняя клавиатура, иногда она работает после сна, и иногда нет! Почему? Потому.
Ну про блютус, я думаю, не надо? Устройства то работают-работают, то перестают, или забываются. А ты ничего не менял! Буквально на днях блютус-клава к писюку, которая обычно работает, решила один раз из ста для разнообразия не включиться.
Про куки и разлогины на сайтах, я думаю, уже давно никому не смешно?
Или кнопка назад в условном Твиттере. Иногда, действительно, возвращает на то же место в ленте. А иногда нет, и листай снова.
1Password на Айфоне иногда разрешает войти по Face ID, а иногда нет. И это явно не с таймаутом связано, потому что бывает введешь пароль, зайдешь, попробуешь один, не подошел, заходишь сразу за вторым, а там опять пароль вводи!
Или Amazon Alexa, была у меня когда-то, когда я еще умным домом баловался. Говоришь ей: включи Радиохед. А она включает что угодно, но не Радиохед! Хотя не, это другое, эта хуйня не работала стабильно как раз.
А, во, на Ютуб заходишь, и там в углу попапчик такой, продолжи смотреть видео, типа. Он вообще меня бесит неимоверно (когда ты суешь свой контент поверх своего же контента, ты явно где-то по жизни проебался), но иногда я действительно захожу что-то досмотреть. И что вы думаете? Когда он нужен, его нет. Зато когда ненужен, то есть.
Еще как-то фотки из iPhotos скидывал, все в один день одним телефоном сняты. Часть экспортнулась как HEIC, а часть как JPEG. Ну вот как можно было так напрограммировать?
Ну и всякое классическое типа раскладка может не переключиться. Потому что компьютер что, спал? Просто забил? Как это объясняется вообще?
Это говно даже в язык прокралось. Знаете эти «Возможно, произошла ошибка». Что значит возможно? Ты компьютер или кто? Соберись, сопли вытри, посмотри там у себя и скажи: произошла или не произошла. «Возможно, понадобится залогиниться». Так понадобится или нет? Это ты же и просишь. КАК ТЫ МОЖЕШЬ ЭТОГО НЕ ЗНАТЬ??? «Some results may not be displayed». Ага, если бы был какой-то способ это узнать, да?
(UPD: The disk wasn't ejected because one or more programs may be using it.)
В общем, удивительно, как можно начать с «абсолютно предсказуемая машина со строгой логикой, педантично следующая указаниям» и закончить на «some results may have been filtered» и наушниках, которые работают через раз.
Хорошо что скоро AI.
А ну вот кстати, про Enshittification. Вот допустим условный Evernote или там Dropbox скурвился на инвесторских деньгах и перешел от фазы «нам надо впарить это юзерам, поэтому делаем хорошо» к фазе «пора стричь юзеров и выводить бабки».
Понятно, что нормальные люди с этого слезут. А на что? Почему бы не нарисоваться стартапу «Дропбокс как вначале» или «Евернот как вначале». Схема проверенная, люди должны пойти, конкурентов по удобству нет.
Почему так не делают? Или делают?
Тут в Твиттере гуляет мега-попсовый чеклист сериалов, чтобы народ делился, кто что смотрел. Но попсовый неинтересно, поэтому я составил свой.
The Fall – Скалли ловит маньяка. В каждой серии пара сцен, от которых кровь стынет в жилах. Условно, какая-нибудь сцена, где чувака принимают в больничку, понапряженнее многих триллеров.
Goliath — харизматичный Билли Боб Торнтон сражается в суде, фиг знает почему, но это одна из самых развлекательных вещей, которые я смотрел.
Bored to Death — пара распиздяев занимается непоянтно чем и еще слегка пытается какие-то дела распутывать. Просто очень смешно.
Patriot — красиво-смешно про грустненького шпиона, но очень много находок.
Easy — лучший сериал про отношения, эпизодический, мамблкор, но единственный не занудный мамблкор, который можно смотреть, в котором есть смысл.
Get Shorty — мелкие лос-анжелеские бандиты решают пойти в кинобизнес, мило, карикатурно, но при этом офигенно снято! Уровнем условно как Barry, только тема может чуть менее мейнстримная, ну или может повезло меньше.
Mr Inbetween — добрый сериал про австралийского киллера/отца, сердце в правильном месте, шикарнейшая фактура, находки, обаяние ГГ.
The Thick of It — старый-добрый (почти) документальный сериал про британскую политику, в котором хуесосят со скоростью 140 слов в минуту.
Veep — то же самое, но про Америку и без Малькольма. Что теперь, отказываться что ли?
Colin from Accounts — хороший романтический сериал, такое бывает вообще?
How To with John Wilson — смешные зарисовки о жизни американцев, обезоруживают своей фактурой.
Mrs Davis — довольно безумный абсурд с великой Бетти Гилпин и очень кайфовым моментом, когда все загадки таки довольно интересно складываются.
Studio 60 on the Sunset Strip — У Соркина можно в принципе все смотреть, ну вот этот тоже. Про задворки условного «Saturday Night Live», шуток особо нет, драма есть, диалоги бомбические.
Poker Face — небольшая детективная анталогия с парой смешных райан-джонсовских твистов в каждой серии, три серии он даже поставил.
The Trip — два актера играют самих себя, едут в тур по мишленовским ресторанам Англии (потом Италии, Испании, Греции), жрут и кривляются. Довольно сложно объяснить, но выглядит очень обаятельно.
Primal — что случается, когда создатель мультика _действительно_ умеет рисовать.
Из короткого (мини-сериалы):
Midnight Mass — по мне так самый лучший Фланаган, потому что разрешил себе быть немножечко смешным (но в целом ужастик, крепкая интрига, все как обычно).
The Take — молодой Том Харди играет британского гопника и объясняет, за что его очень скоро полюбит весь мир.
Horace and Pete's — Луи Си Кей упражняется в минимализме и нон-конформизме, но он хороший драматург, так что.
The Staircase — взрослый сериал про убийство/разлады в большой семье средне-верхнего класса, каких в принципе много, но этот сделан прям глубоко и серьезно, по-большому.
Giri / Haji — детектив из Японии приезжает в Лондон искать брата-якудзу. Тут сложно объяснить в чем кайф: много находок, необычно снято, и серьезно, и смешно, и в ноты попадает легко.
The Little Drummer Girl — Парк Чак-вук снял сериал! По роману Ле Карре! Я даже не представляю, какие тут еще могут быть варианты, кроме как смотреть. Ну и ждем The Sympathiser в этом году.
Irma Vep – Оливье Ассаяс снял сериал! Какие тут еще могут быть варианты, кроме как смотреть?
Unbelievable — вы не поверите :) Две детектившы расследуют изнасилование девочки, у всех великие актерские работы.
The Romanoffs — мини-сериал от создателя Mad Men с очень странной идеей (8 разных историй о якобы потомках царской семьи) и смешными твистами в каждой серии.
Wolf Hall — Марк Райланс, Клэр Фой, ну и рыжий из Homeland-а.
Generation Kill — Дэвид Саймон сделал сериал! (Хотя ладно, он только сериалы и делает) Но в целом кайфец, Прослушка только про войну в Ираке.
Ну все, буквы закончились, на первое время хватит.
Вчера открыли исходники редакторая Zed, а я даже не знал, что мы его ждем. Приятно видеть, что люди устали от VSCode, но ребят, Sublime Text всегда тут был, вы чего?
Одновременно с анонсом они опубликовали пост, как переписывали свой GUI-фреймворк с модели а-ля Flutter на модель Flexbox. Я, понятно, тоже вдохновлялся Флаттером, у меня похожая модель и меня все устраивает.
(здесь и далее «Флаттером» мы называем модель, когда сверху спускают «констрейнты», или сколько есть места, а снизу вверх ты отдаешь размер, сколько по факту займешь. НЕ буквально Флаттер. Вроде в Swift UI такая же как минимум)
С моей точки зрения, переход от Флаттер-модели к Флексбоксу это регресс.
Во-первых, главная идея Флаттера — ты не ограничен дефолтными компонентами и можешь написать любую функцию, которая посчитает размер. И это не хак, а одна из основных возможностей. Все те дефолтные лайауты, которые там сделаны, довольно тривиально реализованы через тот же механизм. А флексбокс — ну, что дали, то дали, ни больше, ни меньше.
Знаете в винде во многих диалогах внизу было три кнопки: «Ок», «Отмена», «Применить». Вот как сделать, чтобы они были одинаковой ширины по ширине самой широкой? На Флексбоксе? А на Флаттере тривиально.
Во-вторых, у меня есть проблема с уровнем абстрактности Флексбокса. Когда я верстаю страницу, я не думаю в терминах «начало контейнера по основной оси», «конец контейнера по перпендикулярной оси», ну просто чтооООО... Понятно, что это сделано, чтобы при переходе от десктопа к мобилке твои горизонтальные блоки переставились вертикально и тебе надо было для этого всего одно свойство поменять, но блин, ребят, вы не там оптимизируете.
Когда верстаю я, я думаю в терминах «колонка», «ряд», «выровнять по левому краю». Я понимаю что это слишком просто, слишком по-колхозному, но для смены лайаута один фиг миллион всего придется поменять, так что и ряды на колонки я уж как-нибудь осилю.
(тут мне сейчас напишут что это на самом деле для Bidi, чтобы кнопки шли справа налево в арабских странах, но опять же, мыслить в терминах «слева-справа» проще и нам и арабам, потому что это термины, ну, абсолютные, культурно-независимые, а точить интерфейс под RTL все равно придется отдельно, это в любом случае не одно свойство поменять)
В-третьих, флексбокс соединяет в себе сразу три лайаута: тот, который распределяет элементы в прямоугольнике, тот который переносит на несколько строк, и тот, который выравнивает один элемент. Это настолько разные вещи, что когда пытаешься их впихнуть в одну модель, неизбежно получаются очень абстрактные названия.
Ну и центрирование — слишком частая операция, чтобы всю эту машинерию чисто для нее разворачивать. Из пушки по воробьям.
В-четвертых, имена. Align/justify, items/content — камон, это полные синонимы, почему они делают разное и, главное, как мне это запомнить?
В-пятых, это не критика именно флексбокса, скорее критика идеи тырить идеи из веба: margin не нужен. Понимаю, звучит подозрительно, но подумайте (или погуглите), про это уже писали.
Кстати, интересно, сохранили ли они фишечку, что если вертикальные паддинги/маржины считаются в процентах от ширины, а не от высоты?
В-шестых, неортогональность. Понятно что им надо было строить на всем, что уже накопилось в CSS к тому моменту, но если делаешь новый фреймворк, наверное, этого можно избежать? Например, размер элемента может указываться через flex-basis, а может через width. Зачем? А уж когда min/max-width вступают в игру...
В-седьмых, flex-grow и flex-shrink вообще кто-то осмысленно использует? Я что-то придумать не могу, зачем они нужны.
В общем, конечно я инвестирован в успех кастомных фреймворков. Но я уходил из веба не для того, чтобы вы в мои кастомные фреймворки тащили веб обратно!
То, что флексбокс был лучше, чем то что было в вебе, не значит, что это лучшее, что вообще возможно, особенно когда не нужно обратно совмещаться.
Я уходил из веба за более простой, прямой, понятной и ортогональной моделью.
И чего?
Некоторые вещи меня в принципе устраивают, но хочется допилить в них одну-две фичи, чтобы стало совсем хорошо. Вот неполный список, в случайном порядке:
- Браузер, который на стороне пользователя. Запрещает всякие темные паттерны вроде «прозрачный оверлей, чтобы нельзя было скопировать картинку», «нельзя выделить текст», «при копировании добавляется копирайт», «попапы на выделение текста», «перехватывать поиск», «кастомное меню по правой кнопке», «откывать окна джаваскриптом». Ну и адблок встроенный, ага.
UPD: вспомнил еще: возможность отключить сервис-воркера! И не проебывать куки (сейчас вроде пошла мода проебывать и это вроде как частично из-за бразуера?)
- Телеграм-клиент, у которого есть табы, сплит-вью и чаты в отдельные окна можно оторвать (UPD: в Telegram Desktop можно оторвать). А то бывает читаешь какую-то длинную ветку комментов, или канал интересный нашел и назад далеко отскроллил, и тут тебе пишут что-то и вроде как надо посмотреть/ответить, но терять позицию не хочется.
- Гитхаб-фронтенд, который отвечает быстро. Да, это всего одна хотелка :) Ну ладно, вторая это чтобы lines of code показывал, хотя это уже больше к бэкенду вопросики.
- Твиттер-клиент. Просто чтобы был оффлайновый, сохранял твои твиты и группировал пользователей по каналам, как в Телеграме. Хорошая идея или нет, не знаю, но попробовать хочется. Ну и мусора всякого подчистить из интерфейса. Кнопка Ретвит чтобы выпадающее меню не показывала, например.
UPD: И чтобы не кропал картинки!!!
UPD: И не показывал Read more для постов короче 280 символов!!!!!!111
- Youtube-клиент НОРМАЛЬНЫЙ. Чтобы качество ставил какое мне нужно. Чтобы позицию не терял. Чтобы по истории искал. Чтобы грузился быстрее 10 секунд. Чтобы идиотские картинки не показывал пока видео еще не закончилось. И чтобы когда закончилось тоже не показывал. И чтобы UI не перекрывал контент. И ЧТОБЫ ПРОБЕЛ РАБОТАЛ СУКА
Есть и пара идей с нуля, у которых есть шанс быть написанными:
- Оконный менеджер для большого монитора. Rectangle и аналоги поставляются со странными действиями «разверни окно на полэкрана/две трети/одну треть слева», но на очень большом мониторе это бессмысленно: слишком высокое окно получается. Есть всякие действия типа «top right quarter»/«top right sixth», но у них какие-то пропорции неудобные. У make larger/make smaller просто идиотски маленький инкремент. Короче я не знаю точно, чего хочу, но как будто как минимум «задать размер» и «переместить окно» должны быть разными действиями? Тайловые не предлагать.
- Переключатель микрофонов. Дефолтный был бы окей, но у Эпла есть идиотская привычка переключать микрофон на Аирподсы когда ты их подключаешь. То есть ты мог настраивать все полчаса, подключить свой дорогущий микрофон, а потом воткнуть Аирподсы _после_ этого и абсолютно незаметно все твои настройки улетят в пизду. Ни писка нигде, ни окошечка, ни иконки даже. А так как ты сам себя не мониторишь (как вы это себе представляете, на аирподсах-то?), то ты об этом никогда и не узнаешь. Вторая фича это показывать текущий микрофон в статус-баре.
- Подкаст-клиент который умеет тырить видосы с Ютуба и превращать в аудио
И есть пара совсем безумных «проектов на сто человеко-лет»:
- Графический редактор с переменными. Чтобы где-то создал x=1, а потом ширину можно было указать как (x*5+7) px. И чтобы шрифты, шрифты можно из него экспортировать было :)
- Текстовый/код редактор с нормальной типографикой. Чтобы вариативные шрифты, все open-type фичи, все это настраивалось на уровне Фигмы хотя бы, а то и больше. Профили разные чтобы под разные языки. Псевдографика не через шрифт чтобы. Базовые вещи.
Проблема в том, что обычно просто так доделать приложение нельзя, а писать с нуля это целый проект. Так что это все мечты на пенсию.
А у вас какие мечты?
Ребята, у меня теперь есть теоретическая база! Слово Эдсгеру Доувичу Дейкстре:
“We should do our utmost to shorten the conceptual gap between the static program and the dynamic process, to make the correspondence between the program and the process as trivial as possible.”
То есть что? В коде написано одно, а в рантайме другое. И чем больше расхождение, тем больше в голове держать.
Пример из прошлого поста ровно про это: он создает итоговый список в рантайме, а можно было его захардкодить, и тогда его сразу видно было бы.
Поэтому же я так не люблю всякие функции второго порядка и каррирования: мой паттерн-матчинг ломается и приходится абстрактное мышление включать. Ну что это такое, как это читать?
(mapcat (comp (partial map str) vals val) exposes)
Мысль может быть неочевидная, но вещи со временем необязательно становятся лучше.
Слушал подкаст Software Unscripted и там чуваки вспоминали Visual Basic дебаггер, мол, современные ему в подметки не годятся. Ничего не могу сказать, но верю.
Мой собственный пример — фронтенд стек. Раньше ты просто писал js-файл и все работало. Сейчас же народ понапридумывал компиляции какой-то, минификации, и в итоге ты сидишь ждешь как дурак после каждого сохранения непонятно чего, а потом ошибка, а весь стек минифицирован. И чего? Кому лучше стало?
(inb4: но современный фронтенд решает гораздо больше задач, например uNiCoDe)
Или взять печальный пример Ruby on Rails. Когда он появился, он был противовесом большим и сложным стекам, которые надо было полдня сетапить, чтобы Hello world получить. Казалось бы — вот пруф, сейчас его все украдут и сделают так же. И что? Никто не укралн, не сделал, так и сидим, днями настраиваем hello world и ждем компиляции.
Или то, как интернет коллективно разучился различать чекбоксы и радиокнопки. Казалось бы, их специально придумали максимально разными: чекбоксы квадратные и с галочкой, радиокнопки круглые. И чего? Сегодня чего только не встретишь: и круглые чекбоксы бывают, и квадратные радиокнопки, и радиокнопки с галочками. Была последовательность, да пропала.
Или то, как в первых айфонах приложения умели восстанавливать свое состояние после перезапуска, а теперь не умеют.
Или то, как телефоны проебали кнопку Анду, хотя десятилетия компьютеров научили нас ее важности.
Или то, что раньше на сайт можно было зайти и начать сразу читать, а теперь надо с десяток попапов закрыть.
Короче, некоторые вещи конечно становятся лучше. Но некоторые хуже. Раз на раз не приходится. И подразумевать, что все что новее обязательно лучше — курам на смех.
По моему микроблогу может показаться, что я периодически жалуюсь на всякие штуки, и значит они со мной периодически происходят. Но не очень ясен масштаб. А масштаб такой: ~два десятка косяков в день.
Чтобы не быть голословным, я периодически записываю их. Вот список за один (!) никак специально не выбранный день:
Preview:
- Вместо проматывания страницы скролл переключает на следующую
- Там же, скролл в конце страницы перелистывает на конец следующей (а не начало)
Apple Notes:
- Показал Welcome screen
- Автокорректор заменяет слова на похожие
- Не удаляются маркеры списка
- Показал белый экран после запуска
- Курсор может уйти за границы окна
Software Update:
- Окошко пароля не говорит зачем пароль (просто введи, жалко что ли?)
- Вопрос «Когда обновлять» появился через день (!) после ввода пароля для обновления
- Окошко с вопросом «обновить сейчас или ночью» без кнопок
- Обновить ночью традиционно не работает
- Нотификация на System Settings пропала, хотя апдейт не поставился
Apple Photos:
- Кроп рандомно прыгает
- Элементы управления исчезают во время кропа, но не освобождают место
- Экспорт в разные форматы в зависимости от способа перетаскивания
iPhone:
- телефон завис на минуту и не реагировал
- менял громкость и повернул телефон и верстку попердолило
- когда кладешь заблокированный (!) телефон в карман, нажимается какая-то кнопка. Например, может включиться следующий подкаст или набраться буква Z или Ф в заметку
Overcast:
- не нашел и не показал подкаст, потому что я раньше уже слушал другие выпуски
- проебал play position
YouTube:
- Пробел стал работать еще реже
- Темная тема не включается, когда меняешь системную
- Кнопка watch later может исчезнуть, если перейти по ссылке внутри Ютуба
- Проебывает позицию воспроизведения (КАК???)
Разное:
- Apple Music открывается сам когда снимаю наушники
- Микрофон в Google Meet начинает шуметь через 10 минут после начала звонка
- Твит отправился со второго раза
- Два скроллбара в твиттере
- Эйртег рандомно забыл кто он и определился как чужой
- Телеграм скопировал только половину выделенного o_O
Еще раз, это не список, который я год собирал. Это один случайный день! Один!
И так каждый день, только косяки все время разные. Да, каждый по-отдельности незначителен, но все вместе они создают некую картину развала и упадка цивилизации, конечно. А вы спрашиваете, чего я такой злой. Да потому что оно все вот такое!
Молодые, наверное, подумают — дед ворчит. Ну а как тут не ворчать? Когда каждая программа практически разваливается под тобой каждый день. Думаете, это нормально? Нет, не нормально! Думаете, лучше нельзя? Да можно, легко! Нужно только хоть чуть-чуть этого хотеть.
Я конечно тут в пустоту кричу, но если хотя бы помогу нормализовать понимание, что так быть не должно, то уже свою задачу выполню.
А дальше сами. Делайте нормально, все в ваших руках.
Пипец, package-lock.json это новые табы против пробелов. 500 комментов насрали, я, кажется, раз пять одно и то же по кругу объяснил, пока не сдался.
Главное, это не теория какая-то, говоришь людям — вот есть Java, есть Go, они именно так и работают, никаких лок-файлов, оба успешные проекты. Не верят! То есть буквально говорят: нет, не может такого быть, не будет это работать.
Я даже теряюсь в таких случаях. По-моему доказательство примером это самое сильное, что вообще может быть. А на тебя смотрят, как будто ты им не кошку обыкновенную показываешь, которых в каждом дворе пяток, а дракона какого-то или единорога.
Говоришь: вот так вот можно все то же самое делать. А тебе — конечно нельзя, или конечно не то же самое. Ведь если я меняю версии в лок-файле, то они качественные, хорошие, звучат хорошо, на новый год радуют, критические уязвимости закрывают. А если ты в своем pom.xml версии меняешь, то это убогие, плохие версии, там обязательно кто-нибудь аргументы в функциях местами переставит, все развалится, сгниет, урожая три года не будет и волосы выпадут. Хотя казалось бы.
Но главное — люди, кажется, во все это верят. И что хеши от злоумышленников защищают. И что ренжи авторы как-то осмысленно пишут. И что на диффы лок-файлов кто-то смотрит. И что билд с лок-файлом надежнее получается, бинарник более крепкий выходит. И что наличие лок-файла помогает апгрейдить версии, и даже лучше соблюдать semver. В смысле серьезно, без иронии, услышали где-то и повторяют, как будто это правда. Если компютеры на чем-то еще и работают, так это на вере, что все так, как оно должно быть.
Удивительная, конечно, индустрия. Другой такой нет. Всех люблю.
Мой любимый момент, где Unix-модель дала трещину:
shutdown --reboot
pip install --update
apt add-repository --remove
helm upgrade --install
[notice] A new release of pip is available: 23.2.1 -> 23.3.2
[notice] To update, run: python3.11 -m pip install --upgrade pip
shutdown —reboot
это чисто стилистический выбор
Читать полностью…
В русском языке 33 буквы. Ъ и Ë выкидываем как ненужные, остается 31. 31 некруглое число, надо 30. Какую еще выкинем?
Читать полностью…Удивительно, что мы, как человечество, так и не решили проблему центирования объектов на компьютере.
«Это какая-то старая шутка со времен, когда Прометей еще не принес нам флексбокс», — скажете вы! «Давно уже все центрируется вот этими простыми шестью аттрибутами». И это правда.
Но! Если бы это решение работало, я бы не видел на каждом углу плохо отцентрированное все: кнопки, текстбоксы, надписи, иконки. Причем не только в вебе, но и в нативе. Как это объяснить?
Я думал сделать пост про это с картинками, и собрал 42 примера за полчаса. То есть я даже не искал! Да что далеко ходить: в Telegram for macOS, в котором я это сейчас пишу, надпись Write a Message стоит на пару пикселей выше, чем нужно, а текст в больших синих кнопках на пару пикселей ниже, чем нужно.
Так что, ребят. Решение, может, и есть, а вот проблема все еще не решена.
Самая сложная проблема в компьютер сайнс.
Как сейчас помню, в 2007-м сидел я в своем занюханом НИИ, писал сервлеты на Java Struts, пока в Америке Стив Джобс презентовал айфоны. Мы-то, конечно, ничего такого не знали, у нас даже мобильники не у всех были, а айпод так вообще один наверное на весь Академгородок.
И вот прибегает коллега, который эту презентацию посмотрел, и с восторгом рассказывает: представляешь, телефон, огромный экран, но главное, знаешь, сколько у него кнопок? Знаешь? ОДНА!
И мы все: ваааау. Потом набрали воздуха и снова: ваууууу. Но когда кнопка одна, значит и действие одно, и если все делается через экран, что же такое важное, что вынесено на отдельную хардварную кнопку? Угадать было невозможно, оказалось, что это выход из приложения.
Не, ход с кнопкой клевый. Каноничный даже. Продающий. То, что функция единственной кнопки должна быть именно выход это мне неочевидно, но в целом там могло быть что угодно.
Но пост не об этом. Когда показали первый айфон, одна кнопка была одной кнопкой. Все честно.
А потом оказалось, что кнопки стало маловато. Ну, реальность такова. На нее повесили двойной клик, тройной, долгий тап, тап с усилием, короче, перегрузили. Вроде и выглядит просто, а пользоваться уже надо учиться, как комбам в мортал комбате.
То есть эта простота — кажущаяся, ненастоящая. С точки зрения человека добавить дополнительное двойное нажатие к кнопке со специальным смыслом — всё равно что сделать две кнопки. Это точно так же займет две отдельные полочки в мозгу, сформирует две отдельные привычки и т.д. То есть иллюзия того, что система не усложнилась — всего лишь иллюзия. Не усложнилась она только на фотках. Перегруженная кнопка даже немножко хуже, потому что узнать о ее скрытых талантах нет никакой возможности. Если кнопки разнесены, ты хотя бы видишь сам факт существования кнопки.
Но еще больше досталось скроллу. Вот к чему надо бы отнестись более нежно. Надо бы! Но feature creep не отступал, постепенно появились скролл снизу (control center), скролл сверху (нотификации) и с середины экрана (самая жесть, с середины (!) экрана — поиск).
Потом кнопку убрали, control center переехал наверх, и свайпа сверху стало три: в левой половине, в правой, и посередине. Каждый раз, когда я кому-то это объясняю, мне невыразимо стыдно за то, как глупо это звучит: тащи пальцем сверху, да не, не оттуда, вот отсюда, блин, не, это слишком близко к центру.
Свайпов снизу тоже стало несколько: короткий, длинный (который ну оооочень длинный, у меня даже специально его вызвать далеко не каждый раз получается) и горизонтальный. Настоящее кунг-фу, как будто во Fruit Ninja играешь, ей богу.
Ну и до кучи большинство приложений еще перегружают скролл сбоку (или назад, или панель слева).
И что в итоге? Ощущение что тебя обложили, а кругом враги. Если ты захотел поскроллить внутри приложения, не дай бог твой палец попадет в ту волшебную зону, где система засчитает его за системный жест — а зоны эти оккупировали три из четырёх сторон экрана!
Представьте, что на ПК ваша мышь касалась бы одной из сторон экрана и немедленно вылазила бы какая-нибудь системная хрень. Бред? Бред.
Как результат — неуверенность, страх, чувство ненадежности и ошибки, ошибки, ошибки в самом базовом из способов взаимодействия, способе, который фактически «сделал» айфон — скролле.
Важное уточнение. Некоторые поняли слово «эксперт» в бытовом смысле, типа, «работаю в этой области уже пять лет, есть экспертиза».
На самом деле модель растянута на гораздо более широкий спектр возможностей и достижений, от ребенка до Энштейна.
Большинство людей, если не бросают, доходят до третьего уровня (опытный). Это происходит почти автоматически. Это дефолтное состояние, это нормально.
Четвертый и пятый уровни это что-то типа Principal engineer и гений. Люди, которые существенно изменили статус кво. Обычно они известны и так или иначе повлияли на индустрию, хотя (хотя!) речь в модели чисто об устройстве их личного мозга. Просто на практике так получается, что не бывает, чтобы ты был таким умным, но никто об этом не знает и ты ничего с этим не делаешь.
Штука в том, что чтобы продвинуться до этих уровней, должно сильно повезти: и с ситуацией, и с возможностями.
Думайте о именах типа Кармарка, Торвальдса и Пайка. То, что не все дорастают после десяти лет опыта, это нормально, не переживайте.
Вот в этом смысле используется слово эксперт в предыдущем посте. Замените на «гений», если так понятнее, или гроссмейстер, или Principal Engineer.
А про невозможность объяснить — ну вспомните, как коммуницирует Линус. Все понимает, сказать не может. То есть сказать, конечно, может, а вот знание при этом передать — нет.
Кстати, главный пример забыл! У меня по некоторому стечению обстоятельств есть Эпл-часы. И я в них отмечаю, когда долго куда-то иду. Типа эксерсайз.
Ну и вот. Чтобы включить режим «Пешая прогулка», иногда нужно пройти два экрана, иногда три, а иногда четыре. Кнопка всегда одна и та же. Приложение одно и то же. Ситуация одна и та же. А экранов разное количество. Почему?
Потому
Мы все смеемся над Бренданом Эйхом (Айком?), мол Джаваскрипт сделал за одну неделю всего, но если подумать, коммерческая разработка вся про это: в сжатые сроки, с непроработанными требованиями, без подготовки, без ресерча, без долгосрочного плана, первая итерация и сразу в продакшн, и потом живи-мучайся с этим до конца жизни, потому что бюджета на рефакторинг нет, а пользователи уже есть.
Мы все в позиции Эйха каждый день, пять дней в неделю, так что вопрос только: хотя бы на том же уровне сможете выступить?
Нет? Ну и не надо тут.
Попробовал вторую Зельду, и ух. Ох. Как же меня бесит их... интерфейс! Когда этим занимаешься 15 лет, трудно не замечать совершенно детских косяков.
Начнем с моего любимого. Непропускаемые анимации. Какое-нибудь окошко с наградой плавно fade-in-ится на экран в течение двух секунд, пропустить анимацию нельзя, пропустить окошко тоже нельзя, пока не закончится анимация. Принудительный мультик, чувствую себя как в концовке Заводного апельсина.
Частный случай это появление текста. Мало того, что большая часть диалогов и NPC выполняют чисто декоративную роль, так еще и текст появляется медленнее, чем я читаю, а пропустить реплику можно только тогда, когда она полностью анимируется. Поубивав бы.
Отдельно поубивав бы за магазины, попасть в которые можно только через диагог. Здравствуйте — как дела — что продаете — хочу магазин. Оно приколько в первый раз, но уже в пятый надоедает, в десятый бесит, а в пятидесятый хочется разбить телевизор нахуй.
Но не все так плохо! В Нинтенде тоже заметили, что одна и та же анимация, проигранная в 100500 раз, бесит даже выросших на JRGP японцев, и выборочно добавили Press X to skip.
Например, приготовление еды. Да, анимацию можно скипнуть, но сам скип анимируется через fade in и fade out такой скорости, что в итоге времени тратится столько же!
Или когда заходишь в храм. Ты подошел, нажал «войти», врубилась длинная анимация. Нажал Skip. Вроде хорошо? Но нет, после анимации ты все еще снаружи, и тебе нужно одтельно «войти» (полсекундое чисто механическое действие), после чего последует еще одна анимация, загрузки. Бред? Бред.
А иногда анимации стыкуются! Когда шрайн пройден, тебе дают награду: подходишь, нажимаешь завершить. Анимация. Скип. Анимация. Смена ракурса. Всплывающее окошко. Анимация. Смена ракурса. Анимация. Скип. Зачем, люди, зачем? И это одно из главных занятий в игре.
Загрузка игры. Ну тут вообще красиво. Жмешь «Загрузить» в меню. Показывается список сохрениний. Выбираешь последний. Жмешь кнопку «Загрузить».
Вроде все норм? В чем подвох? А в том, что ничего не загружается. Ты приходишь с кухни в полной увернности, что сейчас будешь играть, а там диалоговое окно «Точно загрузить?» Ну девочка, ну еб твою мать.
Отдельная история это приготовление еды. Еда готовится в котелке. Нормальный человек подумал бы: подходишь, нажимаешь A (основная кнопка), появляется интерфейс для выбора ингридиентов, готовишь.
Но это нормальный! В Зельде же, когда подходишь к котелку, появляется интерфейс «сколько хотите поспать». Что? Да.
Пришлось гуглить. Что нужно сделать: зайти в инвентарь. Найти продукт. Нажать «Hold». Но это еще не все. Если нажать _на предмете_ Hold, он не попадет в руки. Вместо этого интерфейс переключится в «режим держания». Нужно нажать Hold еще раз, и тогда ты начнешь держать предмет.
После этого инвентарь надо закрыть кнопкой отмены. Эта кнопка не отменит «держание», что тоже, такое. Ну и вот уже тогда у котелка появится функция Cook. И анимация...
Лошадь. В большинстве игр лошадь вводится, чтобы помогать пересекать большие пространства. Для удобства, то есть.
Но не в Зельде. Тут, во-первых, лошади специальные и не едут куда скажешь. То есть в среднем едут, конечно, но с вариациями — может сама решить, что хочет забрать влево, и начать поворачивать. Короче, лошадей здесь надо уговаривать. В итоге если это и напоминает вождение, то пьяное. Зато аТмОсФеРа.
Во-вторых, лошадь тут постоянно проебывается. Уехал куда-то? Слез и пошел что-то там проходить? Потом пердоль назад за лошадью пешком. Хочешь использовать fast travel? А лошадь не хочет.
Нет, свисток, конечно, не работает. Он должен подзыват лошадь, но это было бы слишком просто. Вместо этого она или не слышит, или далеко, или не может, блин, пройти.
Так что половину времени лошадь возит тебя, а половину ты бегаешь за ней пешком.
Ну и бег. Любая игра, в которой бег ограничен каким-то ресурсом без всякой на то причины, просто ебет вам мозги. Без исключений.
Зельда ебет. И не в хорошем смысле.
Как вы знаете (или не знаете), я потихоньку пилю свой UI-framework для десктопов. Ну а поскольку он ни в каком месте не нативный, меня остро волнует тема хуевости не-нативных приложний.
Возьмем, например, Телеграм. Так получилось, что под маком у него есть два разных клиента: кросс-платформенный QT-шный (здесь и далее Telegram Desktop) и mac-only «нативный» на Swift и AppKit (здесь и далее Telegram Swift). Консенсус более-менее такой, что нативный по-приятнее, а qt-шный какой-то кондовый.
Натив победил? Но за счет чего? Это мне очень хотелось понять.
Начнем с того, что откроем Telegram Swift. Сколько нативных компонентов мы видим? А нисколько! Даже если порыться в настройках, в лучшем случае мы обнаружим, что:
- Тогглы и слайдеры выглядят похоже, но взаимодействия попроще нативных
- Кнопки, таббар и drill-down навигация прямиком из iOS (на маке!)
- Табы вообще ни на что не похожи
- Выпадающее меню полностью кастомное
То есть это маковское приложение, которое пытается прикидываться телефонным, но реализует компоненты все равно само.
Получается, что нативный лук-энд-фил тут ни при чем? И оно могло бы быть написано на любом, в общем-то, фреймворке?
Получается.
Но тогда в чем же дело?
Не смейтесь, мне правда важно это понять. Я хочу свой UI-фреймворк, и хочу делать на нем охуенные приложения. Если сейчас вдруг выяснится, что это невозможно и он обязательно будет таким же неприятным, как QT-клиент, то можно сразу закрывать лавочку.
Ну в общем думал я, думал, неделю попользовался QT-ным клиентом, пытался найти конкретные какие-то причины, и в общем-то нашел их.
Дело в том, что QT-ный клиент просто некрасивый.
Ну да. Все просто. Фреймворк ни при чем. И нативность ни при чем (в конце концов, в маковском хоть один нативный компонент надо еще поискать).
Просто команда Telegram Desktop выбрала неправильный ориентир. Они смотрели на Андроид, а Андроид это такой себе ориентир. У материальных дизайнеров вкус слабоват. Например:
- баблы более уродливые (в Telegram Swift они спижжены из iMessage, а там их рисовали дизайнеры Эпла),
- типографика часто мимо (например, время сообщения крупнее самого текста сообщения),
- фон нельзя белый поставить,
- менюшки и иконки в эстетике Андроида,
- скругления маловаты,
- иконки жирнее чем надо,
- очень страшные тогглы,
- текст жирным КАПСЛОКОМ,
- ховеры и смена курсора на кнопках.
То есть Telegram Swift ощущается приятнее не потому что он нативный, а потому что он просто графически лучше нарисован. Вот и вся магия. А реализован он мог быть на чем угодно, хоть на Tcl/Tk.
Посмотрел я на это все и успокоился. Кастомные UI-фреймворки в порядке. Сделать хорошо можно.
Нужно только выбирать правильные ориентиры.
Ну что ж, пришла пора раскрыть тайну, почему в этом канале нет ссылок и картинок. Накидал длинное объяснение, ссылка в первом комментарии ↓
Читать полностью…Непопулярное мнение: JavaScript единственный язык, который сделал правильные числа. 64 бита, которые одновременно и целое до 53-х бит, и с плавающей точкой если больше.
Ну просто подумайте: в какой жизненной ситуации вам нужны целые больше 53-х бит? Это 9*10^15, девять ебучих квадриллионов, девять тыщ триллионов то есть. Чтобы представлять что? Вокруг нас просто нет предметов в таком количестве (кроме размера node_modules). Девять тыщ терабайт, если в байтах.
То есть 53 бита достаточно каждому. Даже в указателях только 48 используется (хаха, а вы что, думали 64? Щас).
Ну а иметь один числовой тип вместо двух как будто тоже гениально? Все в выигрыше, никто не пострадал.
Почему же тогда подход JS не нравится «настоящим программистам»? Да потому что все остальные наловчились в 64 бита рассовывать разное, нужно им это или не нужно.
То есть по сути единственная причина, почему это неудобно, это другие языки, которые пришли раньше и у которых конвенция другая. Они может все 64 бита и не используют, но _потенциально_ могут, и в итоге приходится под них подстраиваться.
А нужно наоборот, чтобы все подстраивались под JavaScript (который на самом деле IEEE 754 double-precision float, если вам так больше нравится).
Но как же битовые операции, скажете вы? Как мне всякие там сдвиги считать? Ну чувак, битовые операции на числах это страшный хак, раз уж мы о типах заговорили. Они должны на байтах делаться, а не на числах.
А всякие int64/uint64 это от лукавого. Должен быть только number64.
Вчера видел самый «переусложненный без какой-либо необходимости» код в своей жизни:
(def ns-clause-head-names
#{"use" "require" "require-macros"})
(def ns-clause-heads
(set
(mapcat
(fn [name]
(list
(keyword name)
(symbol name)))
ns-clause-head-names)))
(def ns-clause-heads
#{'use 'require 'require-macros
:use :require :require-macros})
В комментах запостили картинку, как Айфон, прекрасно работавший с Карплеем несколько месяцев, вдруг в один день ни с того ни с сего перестал подключаться. Ну и показывает окошко, мол, можешь попробовать снова, только САМ.
И тут я подумал: а представляете как круто бы было, если бы в компьютере была такая функция, чтобы одну операцию попробовать несколько раз? Назовем, это, например, ЦИКЛ. И был способ считать попытки, чтобы не зациклиться навечно, скажем, попробовать 10 раз. Назовем это ПЕРЕМЕННАЯ. Ну круто было бы, а? Жалко компьютеры так не умеют :(
Казалось бы, ну блин. Компьютеры _созданы_, чтобы запоминать информацию. Просто это основная их цель. Но при этом они ежедневно умудряются проебывать: куки, сессии, логины, позицию воспроизведения, открытые файлы, позицию скролла, данные из форм, идентификаторы устройств, позиции окон.
У меня был период, когда ноут забывал монитор, к которому я его подключал каждый день, и каждый день как новый: о! Давай-ка я тебе все сброшу, что ты настраивал. Или у меня есть аиртег, который иногда _забывает_, что он мой, и определяется как чужой. Ну вот КАК? Причем речь не о гиганстких количествах информации, в большинстве случаев речь идет о трехзначных цифрах^WW одном-двух числах, десятке байт.
Печально, насколько компьютеры приучили нас к тому, что они могут сломаться просто так, на ровном месте, и ничем кроме фазы луны и плохой кармы это не объяснить.
Вдвойне печально, что они также приучили нас к тому, что они сами с этим сделать ничего не могут. Мне там в комментах отвечали, что мол если телефон начнет пытаться починить коннект, то что-нибудь уже работающее может сломаться.
Казалось бы, с какой стати? Компьютер может вполне две вещи держать в памяти, два коннекшна открытыми, работать в двух потоках. Это давно решенные проблемы, их любой ребенок, изучающий программирование, учится делать на третьем уроке в языке Лого. Однако почему-то, когда речь заходит о «серьезных системах» и «взрослых проблемах», доступные ребенку вещи вдруг становятся невозможными.
Хотя компьютер вроде бы один и тот же.
Мы какое-то время назад зарубались здесь на тему Vim-а, и звучали аргументы, мол, терминальные приложения быстрые.
И вот это заблуждение меня расстраивает. Да, _кажется_, что терминальные приложения быстрее. Но на самом деле никаких объективных причин им быть быстрыми нет.
Интерфейс быстрее рисовать? Ну может маргинально. Дело в том, что то количество текста, которое есть в современном редакторе, шейпится не знаю, за миллисекунду? В худшем случае. Копейки, короче. Всякие градиенты с тенюшками, если что, вообще вашему GPU ничего не стоят. А терминалу еще escape-сиквенсы парсить. Так что я бы сказал что силы равны.
А все остально абсолютно идентично. Оба (условный терминальный редактор и условный графический) исполняют один и тот же код, оба написаны на примерно одном и том же языке, обоим нужно проделать одинаковое количество работы, чтобы получить одинаковый результат. Терминальные редакторы не получают каких-то бонусов от процессора и не исполняются быстрее из-за того, что не инициализируют графику.
То есть когда у вас тормозит какое-то графическое приложение, то это не потому что оно графическое, а потому что его авторы не смогли. Или не захотели. Или оно стало настолько популярным, что в него понапихали всего чего можно и все несчатны.
В общем, терминальные приложение не быстрее графических. На каждый Vim и Emacs у нас есть 10x и Sublime Text.
Почему же тогда _кажется_, что терминальные приложения быстрее?
Да потому что у вас нет больших тормозящих приложений. И опять же, не потому что они там невозможны, а просто потому, что не нашлось сумасшедших, чтобы их сделать. Хотя, скажем, какой-нибудь пайплайн сборки современного фронтенда вполне себе тормозит, в худших традициях кнопок Rebuild из каких-нибудь Visual Studio или Idea.
Чего я не понимаю, так это концепции лок-файлов.
Смотрите. Я пишу приложение. Хочу взять версии пакетов A 1.0, B 1.1 и C 2.0. Ну окей. У этих пакетов есть транзитивные зависимости. То есть если мы пойдем и скачаем A версии 1.0, у него будет написано: хочу X версии 7.7 и Y версии 8.8. Окей. Это все еще конкретные версии. Можно продолжить транзитивно.
Может получиться, что один пакет встречается несколько раз с разными версиями. Например, кто-то хочет C версии 1.0, а кто-то 2.0. Ну ок, берем какую-то (самую большую, или самую близкую к корню), или еще как-то ДЕТЕРМЕНИРОВАНО.
Теперь внимание. Весь этот алгоритм абсолютно детерменирован. Ни в какой момент времени мы не бросали кости, не зависели от чего-то, что может поменяться (мы считаем, что версию нельзя перезалить, да же?), не полагались на какие-то абсурдные метрики вроде «кто первый скачается» и не выбирали «последнее на данный момент». В любой момент времени, если мы запустим этот алгоритм, в любой точке вселенной, мы всегда получим один и тот же список абсолютно идентичных версий всего транзитивного дерева зависимостей.
А теперь внимание вопрос. Нафига тогда нужны лок-файлы?
UPD. Многие пишут: потому что range. Очевидно. Но нафига нужны ренжи? Смотри, ты написал range версий. Запустил билд. Он обновил лок-файл. В нем написана конкретная версия. В итоге мы пришли к тому же, с чего начинали: версия все равно конкретная, она все равно зафиксирована (не обновляется с выходом новых версий, например), только with extra steps
Не отвлекайтесь сильно, я просто мимо проходил.
Бесит, что в Телеграме скачать что-то можно только тогда, когда он сам это скачает. Есть например аудиофайл, думаешь: о! скачаю. Нажимаешь правой кнопкой, а там ничего. Зато если включить его послушать и какое-то время подождать, он куда-то там во внутренности телеграма скачается и появится пункт меню «Скачать». Но это уже никакой не «Скачать» получается. И с видосами, и с картинками так же.
Второе, что бесит, это что нет поиска по Cmd + F.
Казалось бы, обе концепции уже сто лет как отработаны примерно везде. Казалось бы. Но нет.
Все, извините, если разбудил. Владимиру WDeath привет.
UPD: Сегодня поиск по Cmd + F работает! А вчера еще не работал. Думаю завести новую рубрику, будет называться «Недетерменированные компьютеры». Тогда вот вам на подумать: Cmd + Shift + F ведет в поле, подписанное как ⌘K, а ⌘K в это поле не ведет
UPD2: У меня Esc переключает между списком чатов и списком контактов. Это наверное самое странное использование Esc, которое я видел