Я примерно на третьем абзаце отмотал до начала посмотреть дату – не первоапрельская ли шутка, до того круто.
Иконка лжи
Apr. 23rd, 2017 08:08 pmПервой ассоциацией проявился символ 𝓛 ) Icon of Lie.
Сразу ещё вспомнился один прекрасный момент про ложь, и Гугл мне даже видео подсунул:
Zoom shortcuts
Apr. 16th, 2017 07:52 amCmd + и Cmd - родом из Фотошопа. На Маке они работают в адобовских продуктах, Chrome, Safari, Opera, FF, Sublime, Fraise, Atom, Terminal и iTerm, Postman, iBooks, iMovie, Skype и во всём, что связано с графикой. Ещё выпадайка с иконками программ из дока понимает Cmd+/Cmd-, при том, что Finder – не понимает.
Хром так просто образец реализации, запоминает зум отдельно для каждого домена. Скажем, вКонтакт я просто физически не могу смотреть при 100%, там нужно 125. Хром об этом помнит.
Приложения, сделанные на Electron или подобиях вообще работают как в браузере – зумится весь интерфейс, кнопки там, менюшки-всплывайки и пр. Это очень круто и полезно, потому что представления о соразмерности у авторов софта сущестенно разные.
Чтобы жизнь не казалась сахаром, нативные эпловские Pages, Numbers и Keynote эти шорткаты понимают не как зум, а как увеличение-уменьшение кегля шрифта в выделенном фрагменте. В Вордах-Экселях, естессно, вообще не работает.
На Винде в Хроме зум – Ctrl+/Ctrl- если кто не знал. Тоже как в Фотошопе сделано.
Разумный консерватизм и изобилие
Apr. 10th, 2017 04:42 amНо самый стресс, конечно, от безнадеги. Если на сервере ты работаешь на технологии и страдаешь, то ты знаешь, что рядом есть компании, который пишут на чем-то хорошем, и когда-нибудь ты там окажешься. <…> А на фронте не так. Логики нет, и надежды никакой нет.Я понимаю, но мнение не разделяю. Конечно, когда впервые в полный рост сталкиваешься со всем набором прелестей около-яваскриптной экосистемы, становится грустно. Кажется, что везде бардак, анархия и вообще «куда катится этот веб».
В самом деле это не бардак и не анархия. Так выглядит изобилие.
Замечу, что изобилие – нисколько не менее хищный зверь, чем аскеза. Изобилие порождает удивительно привлекательные, захватывающие – и при этом очень расточительные артефакты. Обычно они прекрасны снаружи, но очень капризны изнутри. Причём капризность, как и в реальном мире, мало зависит от простоты или сложности артефакта. Пока не попробуешь – не узнаешь.
Скажем, мне лично несколько раз крупно не везло с синтаксисом «код внутри разметки». Вот php там, angular, handlebars и всё такое. Да, xslt ещё. Сначала просто и красиво, но чуть отвернёшься – и кровавое месиво с костылями.
Чтобы не попадать постоянно на такие артефакты, достаточно соблюдать разумный консерватизм и умеренность. На пёстрый хайп интересно посмотреть с балкона – но не обязательно же в него вливаться. Ну не прямо же сразу, как минимум. Тем более, у изобилия есть два приятнейших момента:
А) Полно стабильных и проверенных артефактов. Хочешь rich controls, нормальные event-ы и ajax, работающие на чём угодно всегда – юзай jquery. Хочешь pub/sub и не париться про сокеты, лонгполлы и пр – юзай сокетио. Хочешь нормальную локальную базу – юзай localforage или pouchdb. То-есть, по аналогии с HAL (hardware abstraction layer) эти артефакты можно назвать BAL – browser abstraction layer.
Фуллстэк инженер – это не когда ты все комбинации всех чудес попробовал, а когда можешь этот самый фуллстэк средних масштабов собрать снизу до верху. И чтобы было дёшево, не ломалось, а если ломалось – легко чинилось, без необходимости продираться через слои транспайлеров, полифиллов и пр.
Б) Под вновь открытую проблему быстро появляется простое и эффективное лекарство. То-есть потом, когда-нибудь, эта новая проблема может и будет побеждена и искоренена во всей экосистеме – но можно не ждать светлого будущего, а жить в реальном мире.
Прямо как в жизни: новая болезнь – новая прививка, но если есть секта, которая прививки не делает по религиозным принципам – ну жаль очень. Нет большой разницы между прозелитством чисто функционального подхода и отказом от прививок потому что не благославляется, или там надеванием шапочки из станиоля. Это всё глупости, и не всегда безвредные.
В общем, изобилие – комфортнейшее состояние экосистемы, если быть консервативным и избирательным, но прощать хорошим вещам небольшие несовершенства.
Я когда-то нашёл занятный концепт “Программа как осьминог” – и так на всю голову впечатлился, что мы примерно такое сейчас и делаем.
Архитектура нервной системы осьминога:
Архитектура федерации узлов и данных, которую мы сейчас сочиняем:
Забавно, что наш осьминог, как и всамделишный, может целиком вытечь через один канал. Без остановки сервисов, включая обновления кода и состояния, которые происходят во время “перетекания”.
Только в нашем осьминоге не обязательно 8 щупалец. И можно отращивать новые или соединять имеющиеся в одно ничего не останавливая.
Это всё гон, конечно, но аналогия показалась любопытной, осьминогов я вообще люблю. Если б мамаши-осьминоги не морили себя голодом после вымётывания икры, а учили потомство уму-разуму, мы были бы вторыми разумными существами на планете, а не первыми.
И да, во избежание возникновения конкурирующей расы сетевых октопоидов 🐙, функции вымётывания икры у нашей системы на всякий случай не предусмотрено )
Time Machine
Feb. 9th, 2017 05:24 pmСовершенно случайно сегодня обнаружил, что автобэкап на основной боевой машине не работает почти месяц. Я в январе её выключал и обтирал пыль со всех разъёмов – и вставил USB от внешнего диска не до конца.
При этом значок TimeMachine в менюбаре ни разу даже виду не подал, что давно не видит диска.
Забавно, что на макбуке ТаймМашин напоминает, если давно не делался бэкап, при каждом открытии крышки. Но стационарная-то машина почти никогда не засыпает, потому видимо и сообщений на ней нет.
Непорядок. Любопытный, кста, интерфейсный кейс.
Жемчужина в мусоре
Jan. 18th, 2017 05:31 pmТрюк простой – надо сделать так, чтобы в спам приходило что-то интересное, но не важное и не срочное. Не вообще интересное, а именно для вас.
У меня в спам приходят дайджесты Quora – там что раз в несколько дней я в спам заглядываю, квору почитать )
Мобильная версия в широком смысле
Nov. 12th, 2016 01:35 amУ меня были всякие предыдущие соображения в картинках, но не вырисовывалось всё целиком. В чём именно главное UX-отличие от десктопа, как это сформулировать?
Попробовал проговорить командами, речевыми, что бы я хотел от интерфейсов на десктопе и на мобиле, представив себе вссякие ситуации. Подход этот я недавно обрисовал, главное всё аккуратно записывать и потом разобрать на части.
Получился очень простой вывод: мобильная версия должна быть в первую очередь заточена под обслуживание активного заказа (если такой есть), и в гораздо меньшей степени под покупку нового. С десктопом всё ровно наоборот.
Попахивает «уникальной революционной методикой» ггг 😜. В следующий раз на чём-нибудь безобидном запишу процесс, выложу.
Аудиоинтерфейс
Oct. 27th, 2016 03:29 amЛид статьи:
After only a few days with Apple’s wireless AirPod headphones, it’s clear that there will be a huge platform business based on the reliable, persistent availability of a contextual artificial intelligence that can talk to you and receive commands.
Я вообще так о них не думал. Очень любопытно, с учётом того, что встроен акселерометр – и странно, что он так небогато используется, судя по видео в материале.
Задумался о том, как бы я строил голосовой интерфейс навигации по жэжэшечке – и внезапно понял, что задача шира и интереснее. Мне пришло в голову, что анализ воображаемых команд абстрактному голосовому интерфейсу может здорово подсказать, как делать интерфейс визуальный.
Если выписать список команд в повелительном наклонении, и пособирать у них общие части, кажется, получается самое естественное из возможных дерево навигации. Голосовая команда предполагает недвусмысленность, сфокусированность и возможность заинлайнить довольно небольшое число параметров/вариаций.
То-есть я попробовал себе представить, какие бы я хотел команды, если бы считал слушающий меня компьютер более-менее сообразительным (что бы это ни значило). А потом попробовал этот несколько шизофренический диалог с вариациями представить картинками.
После некоторых размышлений у меня получилось, что стартовым экраном жэжэшечки мне хочется видеть фигурно выпиленный фид и набор карточек-кнопок, которые я сам могу определить (ссылки на них повесить). Дополнительно придумался фильтр «только новые», который бы помнил по каждому фиду, где я его закончил читать.
Попробую такой метод на реальном чём-нибудь.
Два кратких содержания
Oct. 2nd, 2016 07:57 am№2. Генерал спецслужб, упоровшись препаратами, пытается порешать проблемы России – во сне договариваясь с масонами из порноромана. Попутно уничтожается агрессивная раса вагиноидов.
Вы ознакомились с кратким содержанием последнего просмотренного сериала и последней прочитанной книжки.
Дивные новые медиа дивного нового мира 😝
Типичные русские интеллигенты
Sep. 1st, 2016 11:01 pmВ последнем посте встретилось прекрасное: «И Преображенский и Персиков типичные русские интеллигенты, то есть умные и легкомысленные живодёры».
Слово «живoдёp», особенно в переносном смысле, вообще редкое и выразительное, а когда по нему классификация вводится – становится совсем интересно. Я даже задумался, кого можно считать подходящим под определение и какие они вообще бывают, помимо умных и легкомысленных.
Сочетания с некоторыми прилагательными мне ошеломительные картинки в воображении нарисовали. ‘Счастливые’, например, или ‘взлетающий’.
Ещё вот отличное же ругательство, да.
Windows 95 на javascript
Feb. 1st, 2016 05:32 pmВ самом конце 2013 я с уверенностью предположил, что в 2014, максимум в 2015 мы увидим порт Win 95 под браузер.
Я ошибся на месяц, да.
https://win95.ajf.me/win95.html, я пробовал в Хроме. Время от времени сайт лежит – туда сегодня куча народу ломанулось.
Оно вообще довольно долго стартует – потому что выкачивает под 100Мб с черепашьей скоростью. Причём кэшируется примерно треть, остальные 2/3 выкачиваются на каждой перезагрузке страницы, ой вэй. Ну это легко поправить – и, я думаю, поправят.
Потом винда стартует, не сказал бы что бойко. После этого компилятор ещё с полминуты оптимизирует код, а потом всё реально начинает просто летать.
То-есть “летать” – это значит никаких лагов вообще ни в чём интерфейсном. Звук на месте, приложения как надо работают, вот только на IE3 у меня упал, написал Uncaught SimulateInfiniteLoop.
19-летний чувак сделал. Я фигею.
Компоновка
Jan. 28th, 2016 05:23 amДело в том, что хороший интерфейс – это система, в которой основную роль играет качество компоновки, а не качество реализации внутренних подсистем как таковых. В отличие от, скажем, программ командной строки или серверных решений, экспортирующих API.
В UI компоновка не просто определяет качество решения, компоновка и есть решение. Причём ограничения на компоновку весьма жесткие, не в пример суровей типипчных ограничений на компоновку программ без графического UI. Я думаю, тут уместна будет аналогия с компоновкой летательных аппаратов, там тоже внешние обводы и диапазон центровки – непреодолимые ограничение, любые подвижки в которых очень тяжело даются.
Типичная программа редко приближается к ограничениям окружения – обычно имеется существенный резерв, нередко на порядки. Да и самих ограничений рантайма не так и много: CPU, IO, RAM, overall response time.
С UI всё совсем не так – ограничения на время отклика отдельных частей, геометрию, да просто количество элементов, на связность и сгруппированность их, очень жесткие, никаких «туда-сюда на порядок» там нет в помине. Плюс целевые системы могут очень отличаться по производительности и, например, размерам экрана.
Задачи на связность и группировки, если их решать в лоб, моментально дают комбинаторный взрыв – а компоновка как раз такая задача.
Наилучший способ решения таких задач – это использовать мозги для того, что они (нейронные сети) умеют лучше всего, и это совсем не логическое мышление. Это навигация по ландшафту. В этом случае, ландшафту вариантов решений, образованных этим самым комбинаторным взрывом.
Сначала выбирается стратегия, а затем итеративно строится путь, причём возврат «назад», к началу, стóит существенно дороже, чем движение вперёд. Примерно так мы играем в шахматы. Примерно так выглядит процесс обучения, когда мы учимся самостоятельно.
Компоновка – это игра, а программисты нередко слишком серьёзные )
Уровень жизни
Jan. 26th, 2016 01:25 pm[Poll #2034674]
Опрос намеренно субъективный, тем не менее, под уровнем жизни я в первую очередь понимаю уровень потребления. Не столько в деньгах, сколько в общем объёме и качестве приобретённых услуг.
Про Чакру, Грааль и апикальный рост
Jan. 14th, 2016 01:38 amГод начался по-високосному.
Для начала, у меня посреди зимы в зверскую сушь и морозяку (на улице –25, дома +25) зазеленела моя новогодняя ёлка, с верхушки. И, похоже, собирается цвести дальше вниз. Это вот называется “апикальный рост”:
Ёлка у меня в горшке, примерно по пояс, Picea glauca conica, живая. Что зацвела – странно, эти ёлки очень капризные и не любят ни тепло, ни сухой воздух.
Два года назад у меня была такая же, правда, совсем маленькая, на подоконнике стояла – и засохла за пару месяцев. Интересно, что будет с этой.
Яваскриптовое опенсорц комьюнити внезапно тоже зимой “расцвело”. Я ожидал примерно чего-то такого в 2016, но не подряд, и не таких масштабов:
- Oracle выпустил JS-рантайм для JVM, причём по заявлениям довольно шустрый. Назвали Грааль (Graal).
- Microsoft заопенсорцила Chakra Core – JS-engine из IE11 и WinJS.
Эзотерические названия вполне закономерны, приличные JS-компиляторы уже давно ворочают минимум двумя уровнями intermedite representation и некоторые механики, скромно рисуемые вот на таких схемках как Bailout – чистый хак и магия.
То, что MSFT выложила свой JS-энджин в опенсорц для меня полная неожиданность. Там у них какой-то совсем тектонический сдвиг.
А вот то, что Oracle сделает в какой-то момент нормальную JS-машину я предполагал, но совершенно из сторонних соображений. Дело в том, что HotSpot вырос из компилятора Smalltalk’а под названием Strongtalk. Который придумал чувак по имени Ларс Бак 20 лет назад.
Он же, неожиданно, придумал Google V8 – самый быстрый JS-компилятор до недавнего времени. Все основные идеи в V8 – родом из Strongtalk’а. Раз эти идеи породили отличный JS-компилятор в одном месте, странно было бы, если б они не выросли во что-то похожее где-то ещё.
Конвергентная эволюция, да. Нисколько не удивлюсь, если найду в Чакре в том месте, что изображено загнутой стрелкой Bailout, те же идеи, кстати.
Апикальный рост начинается примерно одновременно сразу в нескольких местах, ога )
Echopraxia
Oct. 18th, 2015 11:39 am( Read more... )
Итого
Читать, без всякого сомнения. Очень круто, хотя концовка, конечно, несколько обескураживает.

Прекрасный подход, никакого жульничества типа сторонних библиотек и тп. При этом анонимные функции высшего порядка, GC, eval и все такие прелести.
GC, правда, родом из 1970 (оригинал публикации CJ Cheney) и его по нынешним временам никак эффективным не назовёшь – зато он очень простой.
Окончание истории с PouchDB
Jun. 16th, 2015 04:14 pmАпофеоз истории вот тут https://github.com/pouchdb/pouchdb/issues/3961. В результате я написал тест, который имитирует, что происходит в cloudwall без запуска cloudwall – но оказалось, что этот тест никто кроме меня не может воспроизвести. А у меня он железно воспроизводился на двух моих Маках в 100% случаев – но только для двух доменов, для остальных доменов всё было ок. Я даже стал подозревать в какой-то момент, что зелёные человечки – не выдумка (шучу :)
Ключик в решению проблемы увиделся, когда я слил свои файлы IndexedDB из Хрома разработчику PouchDB, и он не смог воспроизвести баг даже с ними. Просто ничего больше не осталось, как грешить на файловую систему – всё остальное было к тому моменту тщательнейшим образом проверено и отброшено.
Так и оказалось – на обоих Маках у меня были сбои на FS. На эйре, видимо, деградировал SSD, а на iMac – HDD, который часть Fusion Drive. Именно поэтому баг и не проявлялся, пока не закроешь вкладку в Хроме – браузер закрывал файл, а файловая система его обнуляла из-за ошибок в бинарном дереве каталога.
Любопытно, что проверка при запущенных ОС не показывала мне никаких проблем с дисками. Для обнаружения проблем надо было перезагрузить обе машины и запустить проверку диска по-холодному. После исправления дисков и удаления вручную каталогов с базами данных баг перестал воспроизводиться.
Из этого надо вынести несколько уроков:
- БД ни при каких обстоятельствах не должна считать нижележащую технологию надёжной. А так считают и PouchDB, и IndexedDB и, увы мне, CloudWall.
- При обнаружении багов с потерей данных идти надо начинать снизу вверх, а не сверху вниз. Это тот-же ровно принцип, как и в случае с проверкой розетки, питания и предохранителей в первую очередь, когда «компьютер сломался». Я как-то не соотносил эту народную мудрость с высокими технологиями, а напрасно.
- Баг – лучший учитель. Я за последнюю неделю досконально разобрался, как устроен PouchDB в части репликации, внешних ajаx-запросов и взаимодействия с IndexedDB. Попутно разобрался со схемой запросов к IDB по-хорошему (ну и гадость, доложу я вам), с производительностью IDB, с тем, как устроены файлы каталогов в HFS+, и много ещё чего попутного по мелочи.