ermouth: (Default)
2018-06-04 11:16 pm
Entry tags:

Исследование 6502 методами, принятыми в нейробиологии

Could a Neuroscientist Understand a Microprocessor? http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005268

Я примерно на третьем абзаце отмотал до начала посмотреть дату – не первоапрельская ли шутка, до того круто.
ermouth: (Default)
2018-01-24 02:21 am
Entry tags:

JavaScript 2018

 JS это нынче например вот так:




ermouth: (Default)
2017-12-30 02:28 pm
Entry tags:

Итоги 2017

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

vezdelegko.ru

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

Couchbox

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

Photon

Админка к CouchDB, без ложной скромности на голову круче чем обе уже существующие, с целой пачкой уникальных (и очень удобных) фич. Так как я Photon догфудю (догфужу?) каждый день, он вылизан практически до зеркального блеска с сентября.

CloudWall 2.2

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

Вообще, CloudWall по идеологии сейчас всего ближе, как ни странно, к типичному SmallTalk dev environment (см например Squeak). Интерфейсно это совершенно не прослеживается – CloudWall для JS и заточен под браузер – но идея «GUI + мышка круче CLI» рулит в полный рост.

В силу того, что вместо файловой системы CloudWall использует подключения к удалённым CouchDB (читай: к нескольким разным БД), возникают всякие интересные возможности. Хорошей аналогией будет дом Мартина Силена из «Гипериона», там было 38 комнат на 36 планетах, соединённых нуль-порталами.

---

С наступающим всех немногочисленных читателей ) Обнимаю, удачи в 2018!
ermouth: (Default)
2017-11-18 03:13 am
Entry tags:

CVE-2017-12635

В CouchDB обнаружилась пара дырок, которые вместе дают возможность RCE. Это первая критическая уязвимость за 5 лет кстати, и она очень любопытна.

Я примерно год назад писáл о довольно сложной ситуацией с json-парсерами в разных экосистемах. У меня был период ресёча на предмет «не заморочиться ли написанием координатора json-вебстримов на ином, чем пара erlang+js, зверьке» – потому что пара эта не блещет производительностью.

И дырка в CouchDB возможна только потому, что erlang/jiffy и нативный json-парсер в js ведут себя по-разному. В erlang-е возможно создать два свойства внутри объекта под одним ключом, и при выборке будет отдаваться первое. В js создать такой объект невозможно, и при парсе json-а c повтором ключа всегда берётся последнее вхождение.

В CouchDB есть встроенный механизм аутентификации, и учётные записи в нём – json-документы произвольной структуры с несколькими обязательными полями, лежащие в специальном бакете _users. У пользователей есть поле roles[], в котором задаются группы, и есть специальная hard-coded группа _admins, которая даёт круто больше прав.

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

Но можно, будучи залогиненным, отправить свой профиль с полями roles:["_admin"],roles:[] – и стать админом, потому что валидатор увидит последний массив и разрешит запись профиля, а при контроле прав доступа будет использоваться первый.

Подробный рассказ об уязвимости: justi.cz/security/2017/11/14/couchdb-rce-npm.html, уже выпущено обновление CouchDB в ветках 1.x и 2.x, в котором дырки нет.

---

К счастью, так сложилось, что во всех без исключения системах на CouchDB, которые мы сделали, уязвимость имеет значительно мéньшую тяжесть, а  в некоторых системах закрывается даже без необходимости накатывания новой версии БД.

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

В бакете _users в лучшем случае живут профили пользователей бэкэнда, и ими всегда управляют или администраторы, или специальный сервис на js с кучей дополнительных проверок. 
ermouth: (Default)
2017-09-10 05:06 pm

CouchDB Photon

Написал админку для CouchDB – Photon.

То-есть уже есть две – Futon (исторически первый) и Fauxton (для новых версий). Второй – модный, но совсем неудобный, плюс в угоду моде очень сильно страдает информационная плотность. Первый – существует только для версий до 1.6.1 (актуальная – 2.1), тоже не слишком удобный, но всё прекрасно с информационной плотностью. Плюс у обоих проблемы с обновлением – то-есть поставил CouchDB и живи потом всегда со встроенной админкой в той версии, которая была на момент установки.

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

Первые эскизы нарисовались в конце августа, примерно так:

Photon-1

В результате три эскиза превратились в полное приложение за две с небольшим недели:

Снимок-экрана-2017-09-10-в-17.32

Установка – просто курлом или копипастой засунуть в базу 1 (один) json-документ объёмом 1.5 мега. Обновление потом по одному клику из интерфейса, с AWS S3 CDN, так сейчас очень много кто делает.

Конечно же, приложение никогда не существовало в виде исходных файлов на файловой системе, вся разработка – в браузере, в CloudWall. Выглядит это примерно так:

Снимок экрана 2017-09-10 в 18.00.10

На картинке Photon запущен в окошке в среде разработки и просматривает сам себя: функция слева – исходник в IDE, функция открытая в окошке – она же, но в коде уже собранного Photon-а. Рефлект рефлекта, редкий зверёк.

Оч здорово получилось в целом, кто юзает CouchDB – рекомендую.

ermouth: (Default)
2017-07-27 03:52 am

Couchbox

Месяц назад мы запустили публичную бету vezdelegko.ru, сервиса бронирования экскурсий, отелей и транспорта. Сервисы бронирования – сами по себе штука сложная, это как магазин, по которому надо вести учёт ассортимента на каждый день, причём ассортимент день ото дня меняется и цены зависят от дня и количества. Причём в магазине куча отделов, и партнёры сами управляют своим ассортиментом.

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

Снимок экрана 2017-07-27 в 2.26.24

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

Code follows data

Нативная CouchDB хранит в базах не только данные, но и код для predefined map/reduce запросов, по которым строятся высокоэффективные persistent индексы. Этот код, на JS или Erlang, хранится в документах рядом с данными и может распространятся между узлами в тех же потоках репликации, что и сами данные.

Couchbox, наша платформа, расширяет это всё механикой хуков, реагирующих на изменения документов в базе, и эндпоинтов – REST–концов, обрабатывающих входящие запросы через https. То-есть в те же специальные документы, где в обычной CouchDB живёт код функций индексов, для Couchbox-а можно добавить ещё и код функций хуков и внешних REST API эндпоинтов. Получается распределённая платформа приложений.

Особо примечателен факт, что с точки зрения установленного софта узлы не различаются вообще.

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

Файлы – это очень скучно

Важный момент, как именно код функций попадает в БД.

Код лямбд вообще не существует в виде исходных файлов. Он создаётся в специализированной среде разработки, основанной на CloudWall и Ddoc Lab. Выглядит это примерно так:

Снимок экрана 2017-07-27 в 3.52.11

То-есть, сорцы, из которых собираются лямбды, хранятся в PouchDB в браузерах разработчиков, реплицируются в CouchDB на какой-то из узлов, собираются, а затем распространяются по остальным узлам.

Деплой обновлений и скорость разработки

Такая архитектура расслаивается на три части по критерию обслуживания:

  1. Убунта, CouchDB, Redis, node.js и nginx – фундамент со временем между рестартами в месяцы. Для обновления или рестарта фундамента нужен доступ к каждому узлу через терминал.
  2. Couchbox – платформа приложений с временем между обновлениями сейчас в недели, скоро станет в месяцы. Разрабатывается на файловой системе в обычных IDE, для обновления на узлах нужен доступ через терминал.
  3. Код приложений, очень гибкий, может обновляться и дополняться с высокой частотой. Для разработки и отладки как клиентской (UI), так и серверной части (REST API) приложений не нужно ничего, кроме браузера. Код деплоится по узлам автоматом.

Общий объём кода, написанного в браузере для этой системы, перевалил за 100К SLOC и пока всё просто прекрасно. Стартскрин бэкэнда выглядит сейчас вот так:

Снимок-экрана-2017-07-27-в-4.29

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

И да, Couchbox is MIT licensed. Опенсорц наше всё.

ermouth: (Default)
2017-05-02 12:58 am
Entry tags:

Тестовая запись с картинкой

Пробую прикрутить LiveWriter к DreamWidth.

aerofly-FS-f18-suisse-01-20131222-061820

UPD. Проба обновления записи и простановки тегов прямо в LiveWriter (с ЖЖ не работало).

UPD2. В общем, у кого на хозяйстве есть WinXP (как у меня, под Parallels), тот может поставить себе LiveWriter первой версии и наслаждаться лучшим из существующих клиентов под сервисы типа ЖЖ и DreamWidth. С выгрузкой картинок на FTP, созданием превьюшек, подкруткой яркости-контрастности, автопростановкой подписей и пр.

Прямо сейчас, в процессе написания поста, на Маке это выглядит так:

Снимок-экрана-2017-05-02-в-2.10

То-есть выглядит всё как нативное окно Макоси, хоть и WinXP. Драг-н-дроп картинок в текст работает, Маковская раскладка и шорткаты – в общем, полная лафа.

ermouth: (Default)
2017-04-29 01:01 am
Entry tags:

binwalk

Стал собирать на Маке binwalk, чтобы устроить тотальную вивисекцию Билайновской прошивки с бэкдорами – и прифигел.

Собирается уже 3-й час, и пока не видно конца. Плюс оно не может собраться без gcc, clang не катит. А gcc сам по себе собирался час со скачиванием. Сейчас вот qt собирается, подозреваю это ещё с часик.

Я сначала было подумал что binwalk – это такой консервный нож навороченный, а там похоже целое хирургическое отделение о_О

--- 

В результате не собралось, потому что Homebrew внезапно незалюбил Macports о_О

---

Обошёлся без binwalk-а. В прошивке, в одном из конфигов, нашлось вот такое:

manufacturer="RON-Telecom"
manufacturerURL="http://www.rontel.ru/"
modelURL="http://www.rontel.ru/"
model_name="RFT620"
model_num="1000"
modelDescription="WLAN Access Point"
device_name="RFT620"

Это очень любопытно, особенно если посмотреть где ещё проявляется этот RFT620, и как его инкарнации выглядят (по-разному), а также на каких условиях попадают к абонентам (обычно льготных). А ещё сходить на сайт этого РОН-телекома и очень удивиться. Тут явно вырисовывается что-то интересное. 

Сама прошивка – линух, по-моему, неряшливый, хотя я не спец. Кажется, при старте монтируется довольно большой RAM-диск (32Мб), не понимаю, зачем.

И – ура – к линуху, если подкрутить конфиг через веб-интерфейс, оказалось можно подключиться по ssh – что сильно облегчает дальнейшие шаги. To be continued.
ermouth: (Default)
2017-04-27 12:41 am
Entry tags:

Саппорт-франкенштейн

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

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

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

В самом деле куда более тяжёлая проблема там – бюрократическая организация.

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

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

---

Мне совсем скоро нужно будет сконструировать саппорт на заказ – не чудовищно-массовый, но ситуационно очень сложный. Скорее всего, без этих наблюдений я бы тоже сделал франкенштейна. Думаю, что с учётом нового опыта я буду делать всё таки осьминога.
ermouth: (Default)
2017-04-26 12:53 am
Entry tags:

Beeline Smart Box One, раутер с руткитом

Билайн чрезвычайно агрессивно и настойчиво продвигает свой «интернет за рубль». Мне не так давно пришлось предпринимать специальные усилия, чтобы гопьё, разносящее от Билайна рекламу, не ломилось ко мне по выходным со своими листовками.

В самом деле этот «интернет за рубль» означает только раутер, который вам формально продают за рубль, но вы подписываетесь под тем, что если расторгнете контракт на инет раньше чем через два года – покупаете раутер за 2500=. Маленький такой нюанс, о котором вы и не узнаете, если не прочитаете бумаги полностью. Я прочитал.

За этот самый рубль вам дадут Smart Box One, двухдиапазонный раутер с фирменно кривоватым интерфейсом Билайна внутри. Раутер этот интересен тем, что у него внутри руткит, оставленных Билайном для удалённого управления.

Иллюзия контроля

Я сначала было подумал, что удалённое управление это не страшно – и был дурак. Ущербен сам дизайн интеграционного решения, требующий удалённого управления оконечными устройствами. Просто наличие каналов удалённого управления говорит о том, что продукт невысокого качества и, вероятно, потребует самого разностороннего низкоуровневого вмешательства.

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

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

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

TR-069

Билайновские Smart Box One имеют по умолчанию включенную механику TR-069. Это протокол для удалённого управления, слива данных и обновления. Билайн использует его скрытно, и вы не сможете отключить его с помощью обычного пароля к раутеру. Вы даже не будете знать, что такой функционал в вашем раутере есть – он показывается только под суперпользователем с правами производителя.

Замечу, что Билайн знает пароль суперпользователя вашего раутера, а вот вы – нет. Конечно, я поменял у себя этот пароль.

TR-069 я тоже отключил – и сегодня инженер техподдержки несколько удивлённо констатировал, что не может попасть в мою железяку. Забавно, что до этого, когда я ему сказал, что повырубал руткиты, он только усмехнулся.

Прошивки и автоообновления

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

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

Ещё конечно при таком обновлении прерываются все соединения.

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

Так что TR-069 не стóит включать обратно даже на короткое время. Мне это обошлось в полною недоступность моего IP из внешних сетей и невозможность применить хоть как-то работавшие до этого настройки.

Ещё всякое по мелочи

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

Из последних 5-6 последних виденных мной раутеров у этого интерфейс наихудший – глючный и некрасивый, но в целом терпимый.

---

При всех негативных сторонах, экспириенс позитивный. Как минимум я пересмотрел свою железную уверенность, что удалённое управление – это добро. Само по себе – возможно, однако оно побочным эффектом порождает культуру безответственности и читерства. Особенно когда такое удалённое управление – скрытое и пользователем не отключаемое.
ermouth: (Default)
2017-04-24 03:58 pm
Entry tags:

ZX Spectrum

Спектруму 35 лет! У меня была Дельта-С, мод на компонентах производства СССР.

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

Более того, Z80 мотивировал изучать ассемблер глубоко

Первое, для чего мне захотелось учить асм – Game of Life Конвея. На Бейсике оно, конечно, еле ворочалось. Что интересно, прирост скорости после первого переписывания на асме меня тоже не устроил, и я стал копаться дальше.

И обнаружил, что, как сейчас помню, индексная адресация кратно медленнее просто сложения и выборки. Типа, 20 тактов против 6. 

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

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

Почему это не айс для асма, я и сам понял довольно быстро – ужé когда писал программу для решения кубика-рубика. Я затрудняюсь точно подобрать определение для отладки самомодифицирующихся программ, даже «адский мозговзрывающий кошмар» довольно мягко, по-моему )

Думаю, не преувеличу, если скажу что целое поколение инженеров началось со Спектрума.
ermouth: (Default)
2017-04-23 08:08 pm
Entry tags:

Иконка лжи

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

Первой ассоциацией проявился символ 𝓛 ) Icon of Lie.

Сразу ещё вспомнился один прекрасный момент про ложь, и Гугл мне даже видео подсунул:


ermouth: (Default)
2017-04-22 11:38 am
Entry tags:

Многомоторный электролёт – IV

Чуть больше полугода назад писáл про Lilium, аккуратный такой электролёт необычной компоновки. Так вот, эта штука полетела в прототипе:


Что интересно, у Lilium похоже и правда есть незначительная проблема со стабильностью – похожая на ту, что я в прошлом посте предположил. В ролике видно, смотреть примерно с 1:27 – эта штука явно роняет нос при крене и вынуждена немного проседать, чтобы выровняться. Особенно хорошо заметно, если поставить замедление вдвое.

Но всё равно очень круто, хочу-хочу )

ermouth: (Default)
2017-04-19 11:12 pm
Entry tags:

HTTPS

Интересно, что власти РФ, принимая законы, которые приводят к блокировке доступа к ресурсам по https, сами активно этим самым https-ом прикрываются.

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

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

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

---

Проконсультировался со знатным юристом по поводу предъявления претензий о подмене оплачиваемого статического IP интернет-провайдером. Судебных претензий.

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

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


ermouth: (ang)
2017-04-17 02:39 am
Entry tags:

Тормоза и Хром

Хром, когда-то бывший на фоне конкурентов просто таки blazing fast, уже не торт. Удивительно, но по некоторым характеристикам нынешний Хром медленнее Хрома 2014 года, например.

Я скажу больше: overall responsiveness у Хрома среди всех современных браузеров наихудшая. Это как-то плавно и незаметно произошло.

Когда-то давно (2014) я делал виджет для представления бюджета Архангельской области в виде интерактивного многоуровневого бублика, смотреть на https://dvinaland.ru/budget. Задача была сделать так, чтобы 500+ SVG-секторов не тормозили при анимации, в результате там jquerymy-виджет и подкрученный d3.js с пачкой довольно tricky кода поверх. Для анимации надо кликать на сектора есчо.

Так вот, в 2014 оно не тормозило только в Хроме и Сафари, а во всех остальных браузерах подлагивало. Теперь, в 2017, оно не тормозит вообще во всех новых браузерах (даже в IE Edge), кроме Хрома. Зато в Хроме просто адово лагает.

У меня есть ещё несколько тестов подобной сложности, релевантных моему workflow. В некоторых тестах Сафари уделывает Хром вдвое – а всего года два назад было почти наоборот. Даже FF стал Хром уделывать.

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

Что такое случилось с Хромом?
ermouth: (ang)
2017-04-16 07:52 am
Entry tags:

Zoom shortcuts

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

Cmd + и 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- если кто не знал. Тоже как в Фотошопе сделано.
ermouth: (ang)
2017-04-14 02:00 am
Entry tags:

Большой брат, Dreamwidth и всякое такое

Сегодня с удивлением обнаружил, что мои комменты в ЖЖ примерно за последнюю неделю написаны не с моего IP. В подсети моего провайдера, но IP другой.

Затрэйсил для сравнения маршрут до ЖЖ...

traceroute to livejournal.com (81.19.74.1), 64 hops max, 52 byte packets

1  192.168.---.--- (192.168.---.---)  1.809 ms  1.248 ms  1.747 ms
2  lo1.10k8-1.atknet.ru (62.192.224.24)  4.000 ms  1.833 ms  1.795 ms
192.168.8.90 (192.168.8.90)  2.318 ms  2.286 ms  2.346 ms
>4  62.192.224.234 (62.192.224.234)  2.240 ms  2.186 ms  4.136 ms
5  62.192.224.233 (62.192.224.233)  3.531 ms  3.394 ms  6.815 ms
6  vlan2901.asr9k1-b.atknet.ru (62.192.224.4)  3.463 ms  3.677 ms  5.570 ms
7  78.25.79.101 (78.25.79.101)  3.194 ms
37.29.17.97 (37.29.17.97)  10.002 ms  4.084 ms
8  livejournal.com (81.19.74.1)  51.924 ms  48.413 ms *


и до Яндекса:

traceroute to yandex.ru (5.255.255.77), 64 hops max, 52 byte packets

1  192.168.---.--- (192.168.---.---)  1.752 ms  1.356 ms  1.445 ms
2  lo1.10k8-1.atknet.ru (62.192.224.24)  2.017 ms  1.947 ms  2.851 ms
3  62.192.253.92 (62.192.253.92)  3.229 ms  2.722 ms  2.898 ms
4  vlan2901.asr9k1-b.atknet.ru (62.192.224.4)  2.868 ms  2.782 ms  2.900 ms
5  78.25.79.101 (78.25.79.101)  85.184 ms
37.29.17.97 (37.29.17.97)  2.493 ms  2.406 ms
6  * * yandex.ru (5.255.255.77)  34.135 ms


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

Даже интересно, что мне будет гнать про это саппорт в понедельник – поделюсь непременно.

Переезд на Dreamwidth мне уже не кажется совсем бессмысленным делом.
ermouth: (ang)
2017-04-10 04:42 am

Разумный консерватизм и изобилие

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

В самом деле это не бардак и не анархия. Так выглядит изобилие.

Замечу, что изобилие – нисколько не менее хищный зверь, чем аскеза. Изобилие порождает удивительно привлекательные, захватывающие – и при этом очень расточительные артефакты. Обычно они прекрасны снаружи, но очень капризны изнутри. Причём капризность, как и в реальном мире, мало зависит от простоты или сложности артефакта. Пока не попробуешь – не узнаешь.

Скажем, мне лично несколько раз крупно не везло с синтаксисом «код внутри разметки». Вот php там, angular, handlebars и всё такое. Да, xslt ещё. Сначала просто и красиво, но чуть отвернёшься – и кровавое месиво с костылями.

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

А) Полно стабильных и проверенных артефактов. Хочешь rich controls, нормальные event-ы и ajax, работающие на чём угодно всегда – юзай jquery. Хочешь pub/sub и не париться про сокеты, лонгполлы и пр – юзай сокетио. Хочешь нормальную локальную базу – юзай localforage или pouchdb. То-есть, по аналогии с HAL (hardware abstraction layer) эти артефакты можно назвать BAL – browser abstraction layer.

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

Б) Под вновь открытую проблему быстро появляется простое и эффективное лекарство. То-есть потом, когда-нибудь, эта новая проблема может и будет побеждена и искоренена во всей экосистеме – но можно не ждать светлого будущего, а жить в реальном мире.

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

В общем, изобилие – комфортнейшее состояние экосистемы, если быть консервативным и избирательным, но прощать хорошим вещам небольшие несовершенства.
ermouth: (Default)
2017-04-08 11:57 pm

Турникет заглючил

Только что вместо страницы фленты увидел вот такое:

Снимок экрана 2017-04-08 в 23.35.40

Повторный клик показал фленту, турникет самопочинился. Есчо, ICAP – это Internet content adaptation protocol. Цензурные турникеты по этому протоколу общаются с главной башней ПБЗ, ога.

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

ermouth: (ang)
2017-04-06 04:33 pm
Entry tags:

Расстрельные списки

К моему недавнему посту про Медведева, Павлика Морозова и комментам к нему.

Прошу полюбоваться, как ничего не производящий резонёр предлагает составлять списки врагов народа, «патентованной сволочи». Большой сторонник протеста и Навального, разумеется.

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