Получи случайную криптовалюту за регистрацию!

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

Логотип телеграм канала @nikitonsky_pub — Стой под стрелой С
Логотип телеграм канала @nikitonsky_pub — Стой под стрелой
Адрес канала: @nikitonsky_pub
Категории: Новости и СМИ
Язык: Русский
Количество подписчиков: 9.12K
Описание канала:

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

Рейтинги и Отзывы

2.00

3 отзыва

Оценить канал nikitonsky_pub и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

2


Последние сообщения

2022-09-01 16:12:12 Идеей CRDT я загорелся, когда прочитал фразу «мерж изменений текста становится тривиальным, если каждой букве присвоить уникальный id». Обожаю, когда глубокие идеи с далеко идущими следствиями укладываются в одно предложение!

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

Звучит как магия? Почему все этим не пользуются? Подвох вот в чем. Не для всего есть CRDT То есть там, где такой алгоритм получилось придумать, CRDT есть и им можно пользоваться. А где не получилось — ну сорян, ничем не можем помочь.

Простейший пример CRDT — счетчик. Каждой операции присваивается уникальный id, грубо говоря, , и потом множества таких операций только объединяются. Я добавил 1? Кинь . Вася добавил 2? Добавь . Обменялись ченжами? У обоих получился сет {, }, который дает сумму 3 у нас обоих. Вообще объединение множеств это чуть ли не главный CRDT-прием, так что привыкайте.

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

Кстати, множество без удаления это тоже CRDT, очевидно. Тут любят приводить в пример корзину на Амазоне (а то, что из такой корзины нельзя удалять, так бизнес даже не против).

Еще один дегенератский вид CRDT это Last Write Wins. К каждому значению прикрепляем таймстемп и при мерже оставляем только то значение, у которого таймстемп больше. Ходит как CRDT, крякает как CRDT, значит может им называться. Полезность такого CRDT под большим вопросом, как осмысленно определять время между распределенными узлами не знает никто, но как escape hatch, когда ничего стоящего придумать не получается, а гарантий _хоть чего-нибудь_ хочется, сойдет. В конце концов, большинство систем сегодня так и так это Last Write Wins, только тут он математически формализован, получается.

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

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

Еще мы как-то прикидывали, получится ли сделать на CRDT систему контроля версий. Из интересных свойств — CRDT отслеживает авторство каждой буквы в тексте. Побуквенный blame!

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

Ну и отсутствие конфликтов. Кто не хотел бы Git без конфликтов? Я бы хотел.

Засада только, что для CRDT нужен специальный редактор. Нельзя поредактировать текстовый файлик в Vim-е и потом засунуть его в CRDT. Все это довольно плохо встраивается в сегодняшнюю plain text-ориентированную инфраструктуру.

Так что будущее конечно светлое, ждем, когда же наконец наступит. Может найдут применение когда Линукс завоюет десктопы.
2.4K viewsNikita Prokopov, 13:12
Открыть/Комментировать
2022-08-31 15:56:06 Есть такой классный сериал, Атланта. Он в целом очень милый, но иногда там такую философию выдают, что грузит похлеще Сартра. В одной серии один из персонажей выходит из кухни с кружкой, из которой ест сендвич. «Breakfast cup», — говорит. Ему: «You made that up», типа, нет такого понятия. На что он справедливо замечает: «Everything is made up, nigga. Stay woke».

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

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

Сложно? Вот и я о том же. В конечном итоге важно то, что функция выводит в лог. А считать ее чистой или нет — абсолютно бесполезный спор, который НИЧЕГО не добавляет и НИЧЕГО не проясняет.

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

Другой спор был про то, является ли CRDT алгоритмом консенсуса. Один из оппонентов считал, что да, потому что его определение алгоритма консенсуса включало CRDT. А другой считал, что нет, потому что его определение его не включало. О чем был спор? Поменялись ли свойства CRDT от этого хоть на йоту? Нет, CRDT что делал, ровно это и продолжает делать. Спор даже не притронулся к сути вопроса.

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

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

Смотрите на суть, а не на терминологию, короче. Потому что терминологию со временем меняют, а суть остается. Stay woke.
4.1K viewsNikita Prokopov, 12:56
Открыть/Комментировать
2022-08-29 16:44:30 Послушал подкаст The Talk Show про историю мужика, который сфотал сыпь на гениталиях своего ребенка по просьбе его доктора, а Гугл ему за это аккаунт закрыл. История дошла до Нью-Йорк Таймса быстрее, чем до Гугл саппорта (до которого она, кажется, вообще не дошла, да его может и не существует вовсе).

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

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

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

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

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

Да здравствует конец приватности, добро пожаловать в дивный новый мир дефолтной паранойи. Чуваки в подкасте, обсуждая, могли бы они сами попасть в такую ловушку, пришли к выводу, что с высокой вероятностью у них что-то бы екнуло перед фотографированием. То есть они уже живут в предположении, что все, что они делают, говорят и фотографируют, независимо от их собственных целей и намерений, увидит и будет судить кто-то посторонний. Это их дефолтный модус мышления, и они даже не замечают, что возможно это довольно хуево, жить в таком постоянном страхе и оглядываться на неизвестного дядю перед каждым действием. И что вообще-то могло бы быть и иначе.
4.6K viewsNikita Prokopov, 13:44
Открыть/Комментировать
2022-08-26 19:57:09 На днях пришла знакомая и попросила файлик открыть на айпаде. Где исходник, говорю? Да вот, на моем планшете. Планшет Самсунг.

Почесал я репу и говорю: легко. Скопировали по шнуру с Самсунга на ее виндовый ноут. С ее ноута на мою флешку. Через переходник на USB-C вставил флешку в Макбук. Ну и с макбука уже эйрдропом на айпад. Там поставили приложение и вуаля, файл открылся.

Как здорово, что есть современные технологии и такая простая задача решается всего лишь с помощью пятью устройств (если переходник не считать). А могла ведь и о чем-нибудь сложном попросить, например что-нибудь распечатать.
6.4K viewsNikita Prokopov, 16:57
Открыть/Комментировать
2022-08-25 16:58:18 Твит Кена Кочиенды, одного из ключевых разработчиков оригинального айФона, заставил задуматься:

Things I need to develop apps:

- view system
- imperative layout
- pixel & vector graphics
- animations
- gestures
- colors
- text & fonts
- events
- timers
- sound
- settings
- files
- networking
- a few data structures & algos

Things I don’t need:

- new language
- declarative layout
- strong types
- generics

А именно часть про declarative layout. Если кто не знает, это парадигма, которую придумали в Реакте 9 лет назад и которая с тех пор крепко захватила умы всего UI сообщества. По ее шаблону сделаны Флаттер, Компоуз, Свифт ЮАй, ну и, конечно, все возможные формы Реакта — веб, натив, ви ар, натив веб и т.п.

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

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

Ну а теперь меня терзают сомнения — а так ли уж это хорошо на самом деле? То есть с одной стороны мы экономим, да. А с другой?

Во-первых, performance impact. Да, diff по всему дереву в большинстве случаев дается почти бесплатно, то сам рендеринг может стоить довольно дорого. Скажем, если в каких-то компонентах, чтобы сгенерить VDom, вы ходите в базу, то вы будете ходить в базу по всему дереву на каждый чих и пук даже при изменении где-то в глубине глубин какого-нибудь чекбокса.

Значит, наверное, надо кешировать? Вот уже ваша «чистая» функция рендеринга превратилась в обычный такой мутабельный объект, да?

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

Как декларативно описать подстраивающуюся под объем текста текстарию? Или двухпанельный редактор маркдаун-превью, в котором обе панели должны скроллиться синхронно? Или ряд кнопок, скажем, “Ok”, “Preview”, “Cancel”, чтобы они все были одной ширины, причем ширина выбирается по самой длинной надписи?

Ну нельзя их описать декларативно. То есть можно, конечно, если конкретно эти случаи поддержать в системе лайаута. Но поддержать можно конечное количество вещей, а случаев выходит бесконечное. Ну и неохота учить специально какой-нибудь flex-basis: max-content, когда я могу нужную мне ситуацию запрограммировать в сто раз быстрее и понятнее на нормальном языке программирования.

Плюс вопросы качества. Редизайн System Settings на маке и уродливая погода в Maps (а до них — Shortcuts, Podcasts, Books) заставили усомниться в подходе. Они не особо быстры (хотя казалось бы, вы мучаете себя статически типизированным компилируемым языком, ну это ради чего-то должно быть, хотя бы ради перформанса?) и не блещут «качеством». Особенно на фоне классических альтернатив, написаных по-старинке.

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

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

Может быть, и правда, по-старому писать интерфейсы тоже не так уж и плохо? Как минимум результат, как будто, чуть лучше получался?
7.4K viewsNikita Prokopov, 13:58
Открыть/Комментировать
2022-08-25 02:32:00 Вдогонку: у невидимых контролов есть большая проблема: их очень сложно критиковать.

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

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

Так и живем.
6.1K viewsNikita Prokopov, 23:32
Открыть/Комментировать
2022-08-24 17:23:21 Кстати, в посте про дергающуюся погоду на Яндекс^W Эпл Картах был еще один показательный момент. Чтобы эту погоду посмотреть, надо нажать на иконку и ПОДЕРЖАТЬ. При том, что все остальные кнопки работают от обычного тапа. Собственно, изначально это штука и разлетелась как открытие — смотрите, как, оказывается, можно.

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

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

Чемпион в этом виде спорта — приложение Procreate. Даже мне, видевшему многое, пришлось-таки гуглить, как делаются некоторые вещи (свайп тремя пальцами, перетаскивание какого-нибудь индикатора куда-нибудь, ожидание после начала рисования). Особенно кайфово было, когда они в какой-то версии поменяли один невидимый жест на другой и пришлось гуглить снова! Это при том, что у них на панели большая часть места пустует.

Вроде бы очевидно, что в интерфейсостроении спрятанная, скрытая функциональность — зло. Что если человеку не подсказать, то он про функцию, может, никогда и не узнает. Но почему-то мобильные дизайнеры решили, что им можно. И мы оказались в мире, где новые функции открываются случайно, а Ютуб заполнен видео «20 функций вашего телефона, о которых вы не знали».

Не надо так.
6.4K viewsNikita Prokopov, 14:23
Открыть/Комментировать
2022-08-23 20:12:04 Короче. История.

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

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

Вторая — может, адблок? И действительно, захожу в консоль, вижу заблокированный client_event.json, отключаю адблок и все снова работает. Сам себе злобный папа Карло, получается? Почему загрузка какого-то там JSON-а блокирует видео — ну, видимо, фронтенд фреймворк так сделан, нельзя требовать, чтобы они еще и с адблоком работу сайта проверяли.

Ладно. А почему видео ставится на паузу при скролле? Так вот потому что этот client_event.json при каждом скролле и отправляется. При каждом, Карл! Даже на миллиметр. Более того, он еще отправляется при каждом ховере. То есть навел на любую кнопку (не нажал!) — получи двадцать килобайт исходящего трафика. Ага, двадцать.

Что такого важного он там отправляет, что видео не может продолжить играть? Ну, например строчку "debug": "true" (да, значение тоже именно строкой), или "element": "users_liked_mention_of_you", "client_event_sequence_start_timestamp":1661273470663, "client_event_sequence_number": 152 (уверен, названия специально выбраны самые короткие чтобы экономить ваш и без того нерезиновый трафик), или 800 байт непрозрачной метадаты, которая, кажется, закодирована в base64 и декодируется примерно в то же самое (!!) сообщение. Или высоту вашего экрана "percent_screen_height_100k": 15936 (а вдруг при ховере поменяется?), или вот этот вот супер-важный бит информации: "video_type":"video", или id видео, повторенное пять раз (да, пять).

В общем, сломал ли я сам себе Твиттер и теперь на него жалуюсь? В известном смысле — да. Но с другой, разве не нужно быть сумасшедшим, чтобы позволить такой вот ерунде есть вашу батарейку, трафик, CPU и нервные клетки? Разве не большее безумие НЕ блокировать client_event.json? Разве не безумно следить за каждым вздохом, пуком и размером зрачка каждого человека, зашедшего на твой сайт?

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

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

Но какой во всем этом СМЫСЛ?
6.6K viewsNikita Prokopov, 17:12
Открыть/Комментировать
2022-08-22 18:32:33 Как и любой программист, я одновременно и мечтаю, и страшно боюсь момента, когда начну писать свой язык программирования. Но язык — не библиотека, спешки не любит, поэтому идеи для него я собираю неспеша. Вот некоторые из них.

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

Почти наверняка этот язык не будет соревноваться с C или Rust, потому что — а смысл? Эти языки уже есть и задачи свои решают. Хочется пробовать то, чего еще нет.

Во-вторых, он будет интернет-ready. То есть каждая функция будет иметь уникальный во всем мире идентификатор и зависимости будут тоже per function. Как js-пакет из одной функции типа is-color-red, только без вот этого вот кошмарного оверхеда на деплой и обслуживание. Написал import tonsky/str-concat; и у тебя сразу эта функция доступна.

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

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

Самое простое — CRDT-based версионирование. На плоских файлах тупо не делается, а выгоды сулит огромные. Посимвольный blame, например, гарантированный автоматический мерж (и анмерж), ну и понятно Google Docs-лайк коллаборация.

Другая моя давняя мечта — картинки в комментариях. Многие вещи ГОРАЗДО проще нарисовать, чем описать словами, однако текстовость файлов мешает. Как минимум редактор диаграмм надо будет точно встроить. Прикиньте — рисовать нормально, а не ASCII-графикой?

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

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

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

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

Ну и REPL, конечно, куда без него. «Редактирование наживую». Перезапускать программу, чтобы тупо посмотреть, правильно ли ты там что-то поменял — ну, такое. Удовольствие для терпеливых.

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

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

А, ну и массивы будут индексироваться с единицы, конечно же. Или нет. Пока не решил.

Короче, как видите, работы много, так что я пойду и дальше мечтать. Привет.
6.5K viewsNikita Prokopov, edited  15:32
Открыть/Комментировать
2022-08-19 18:43:49 Илья Бирман нашел в Эпл картах кнопку погоды, которая раскрывается в попап, и пока раскрывается, два раза ресайзится. Нехорошо, говорит. Если все размеры заранее известны, ну нарисуй ты сразу окно нужного размера, а потом грузи свои данные в фоне потихоньку, и показывай по мере загрузки их сразу в том месте, где они в итоге окажутся.

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

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

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

Я все хочу снять как-нибудь видос, как я работаю на компьютере и открываю всякие повседневные штуки типа Идеи/Фигмы/Фотошопа, только вырезать все моменты ожидания загрузки. Ну или сократить до, скажем, 100 мс. Наглядно проиллюстрировать, как мы могли бы жить при сегоняшнем-то уровне развития железа. Потому что мы как-то привыкли, что вот ты вбиваешь адрес и секунду-две ждешь, прежде чем что-то появится. А ВЕДЬ ТАК БЫТЬ НЕ ДОЛЖНО.

Технически ничего вообще не мешает ни одной программе открыться за 16 миллисекунд, диски позволяют за это время сколько, мегабайт 50 прочитать? Но это надо программировать аккуратно, конечно. Если неаккуратно, то я на 100 мс согласен.
8.4K viewsNikita Prokopov, 15:43
Открыть/Комментировать