flow

Comment to 'Инженеры, хватит бегать от ответственности' by tonsky

Мне кажется, что корректно идентифицируя проблему ты ошибаешься при идентификации причин. Программисты не стали менее мотивированы. Халтурщики - да, напрягаются меньше, потому что "формочки" с ошибками в девяностые падали громко, а повебень на JS тихо и незаметно для пользователя (до какого-то момента), но это тоже не является определяющим фактором.

Прикладное ПО - "лимонный" рынок по Акерлофу. Планку качества на таком рынке повышают акторы с нерыночной мотивацией. Однако, более сложные производственные цепочки (а они содержат и такие внешние артефакты как веб-браузеры, например) нивелируют вклад мотивации индивида. А именно разрастание производственных цепочек в разработке ПО мы и наблюдали в минувшие десятилетия.

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

View the entire thread this comment is a part of

flow

Чтение и личные записи

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

1. Когда мне интересны обновления какого-либо блога, портала или канала на youtube, то всё отправляется в Inoreader. В отличие от решений, которыми пользовался ранее (тоже фид ридеры, но дополнениями к браузеру), здесь удобнее интерфейс и всё автоматически работает на сервере. Появились обновления культурно-развлекательного плана? Посмотрю через недельку под настроения. Новая и интересная статья у кого-то пишущего раз в полгода? Не пропадёт.

Важный момент: никогда не использовать подписки на сайтах, если вместо этого можно подписаться в своём ридере на фид сайта. Ридер показывает обновления как есть, а подписки внутри youtube, например, могут чудить, когда неестественный интеллект гугла ставит свои ошибочные предположения выше явных указаний пользователя. Да и тратить время на дополнительную проверку "а ещё что там на youtube" точно не стоит.

2. Я веду личные записи. До прошлого года для этого использовалась старая (более удобная) версия приложения Evernote, но на новой операционке она даже не запустилась. Об этой истории уже упоминалось в https://justy-tylor.livejournal.com/251595.html и https://justy-tylor.livejournal.com/251769.html

Размышляя о замене я вспомнил, как вёл свои самые первые заметки (ещё в девяностые). В программе Dos Navigator была фишка SmartPad, которая по шорткату открывающала текстовый файл с заметками, ставила курсор в конец и добавляла туда строчку с текущей датой и временем. И я решил попробовать, как пойдёт такой подход сейчас. Накидал небольшой плагин к Sublime Text, который по Ctrl+' отправляет курсор в конец открытого файла и добавляет туда отбивку с датой/временем, позволяя сразу выразить мысли, чувства или справочную информацию для чего-либо.

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

Эффект, которого я не ожидал: качество заметок тоже повысилось. Когда не отвлекаешься на "как эту заметку назвать" или "в какой раздел потом переместить из unsorted", то можешь просто писать как есть, не теряя того, что не вписывается в старые правила. В личном не может быть ограничений и форматов. Да, желательно, чтобы сегодняшние заметки были понятны мне самому завтра, но они могут навсегда оставаться непонятными для кого-либо ещё, и это правильно. Преобразовать что-то личное в читаемый текст для других - отдельный труд. Должна быть понятна цель и аудитория.

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

История повторяется

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

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

Снова изменения. Вебдваноль уходит в тень социальных сетей. Появляется вконтактик, и какое-то варьирующееся разделение. В livejournal идут лонгриды и общение по делу. На вк - фотографии, поздравления, и там вообще получается какой-то "список контактов", вместо старинной почты. А ещё там объявления о событиях, расписания танцевальных классов, расписания тренировок...

А потом ещё и facebook, потому что люди, с которыми общаешься выезжая на международные события, обычно есть там, но не в вк. И linkedin, потому что в нём обсуждение черновиков стандарта, с которым связана работа. Но в целом они запредельно неудобны, и годятся только для связи с теми, кто не представлен где-то ещё.

Но всё меняется. И сейчас основное цифровое общение это чаты. Технически на разных платформах, но снова (как в FIDO) есть и "локалки", и возможность обсудить профессиональные вопросы с людьми не слишком далёкими по inferential distance, и всякое для тела и души.

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

Почему приложения такие медленные

В одном чатике сейчас обсуждаем http://tonsky.me/blog/disenchantment/ и почему пользовательский интерфейс в современных приложениях так тормозит, хотя на в 100 раз менее мощных компьютерах просто летал. Прозвучали разные мнения, про раздутость фреймворков, про неумение разработчиков пользоваться многозадачностью, etc. Это разумеется да. Но в первую очередь криворукость порождает проблемы сталкиваясь с несколько другими аспектами создания UI. Цитирую своё сообщение из чатика.

---

Треды нужны, чтобы UI в одном треде, а рендеринг и задачи вроде "загрузить документ" в других. Отдельно взятый UI на треды не бьётся (хотя самих UI может быть несколько: "UI приложения", "UI документа", etc), но это и не нужно, там нечему тормозить вообще. Проблемы добавляются кривыми руками:

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

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

3. CSS селекторы сложнее чем "div.myitem:hover div.myitemtext" или любые лишние (из CSS reset или CSS фреймворков). Изначально эта проблема была только в вебе. Но сейчас, учитывая "приложения в браузере" на мобилках и Electron на десктопах, уже не только.
flow

Основы понимания дизайна языков

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

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

Но сейчас, в недавних разговорах, я всё же подобрал хороший рецепт. Последовательность такая:
1. Изучить материалы HOPL ( https://en.wikipedia.org/wiki/History_of_Programming_Languages ).
2. Исследовать языки из свежего Top 20 TIOBE ( https://www.tiobe.com/tiobe-index/ ). Update: Коллега в чатике верно подметил, что картину сегодняшнего дня лучше отражают данные Stack Overflow, так что вместо TIOBE можно брать их ( https://insights.stackoverflow.com/survey/2017#technology ).

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

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

Если что: можно не разбираться в языках программирования, не понимать их как явление, но при этом быть успешным "программистом на знакомых языках и готовых фреймворках". Это не плохо и не хорошо. Разные ситуации требуют разных навыков и интересов.
flow

Идентификация 4D-документов через криптохэши

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

Предыстория.

Вышел тогда летом у vitus_wagner пост с отсылкой к старой теме чеширнета (децентрализованная соцсеть), а у меня тогда мысли витали в близких направлениях (пересылка произвольных документов между личными и корпоративными системами менеджмента данных, с автоматическим встраиванием на корректную позицию, проверками целостности, etc), так что в поисках вдохновения я решил перечитать уже порядком подзабытое из https://vitus-wagner.livejournal.com/tag/cheshirenet

В чеширнете также предполагались некие типы документов и возможность публикации обновлённых версий существующих документов. Но меня смутил предлагаемый способ идентификации самих документов - на основе псевдослучайных UUID (GUID) из RFC 4122. Ещё обдумать не успел, а подсознание уже указывает: "грабли здесь, грабли".

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

Идентификация 4D-сущностей через криптохэши.

Для начала уточним терминологию. Статичный (неизменяемый) документ или отдельно взятое состояние изменяемого документа легко идентифицируются криптохэшем от данных (и иногда - от дополняющих их метаданных). Это используется во множестве современных технологий: системы контроля версий, документориентированные СУБД, magnet-ссылки и прочее. Такие неизменяемые документы или состояния/версии документов это 3D-документы, они не зависят от времени.

В свою очередь, есть 4D-документы, редактируемые. Их содержимое может быть изменено или заменено в разные моменты времени (причём, разным образом в разных возможных мирах, но не будем сейчас углубляться в эту тему). 4D - потому что появляется время как измерение (более подробно про 4D можно прочитать в BORO или ISO 15926). Соответственно 4D-документ имеет свою отдельную идентификацию, а его содержимое представлено множеством 3D-документов (версий), в зависимости от времени и других условий.

Например, обыденными идентификаторами для 4D-документов являются пути в файловое системе и HTTP/HTTPS-ссылки. Но для них необходима централизация для обеспечения уникальности, в первом случае осуществляемая операционной системой, а во втором процедурами DNS. Или альтернатива - те самые псевдослучайные UUID (GUID).

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

Пример: вы написали новую статью и запускаете её в сеть (с датой и подписью). SHA-256 от 3D-документа первой версии будет "NNN...". Затем вы обнаружили несколько опечаток и публикуете вторую версию статьи. В метаданные этой и всех следующих версий также добавляется запись "document_id:sha256:NNN...". Дата, подпись.

Чем это лучше использования псевдослучайных значений? Если идентификация 4D-документа делается по криптохэшу первой версии, то можно проверить:
1. Что некий предлагаемый 3D-документ является первой версией обсуждаемого (так как совпадёт криптохэш).
2. Что некая предлагаемая новая версия документа содержит ту же подпись, что и первая версия документа - для этого достаточно одновременно предоставить первую версию, с нужным криптохэшем.

Чуть отвлечённо.

Вообще, имеет смысл и гибридная идентификация документов, 4D и 3D одновременно. Ситуация: автор написал статью, затем обновил, вы оставили комментарий об оставшихся неточностях, автор обновил ещё раз, и теперь ваш комментарий не соответствует содержимому статьи и выглядит странно. Этого можно избежать, если документ с комментарием содержит как идентификацию 4D-документа статьи, так и идентификацию 3D-документа той версии, на которую вы отвечали: "in_reply_to(document_id:sha256:NNN1..., version_id:sha256:NNN3...)".

В общем, используйте. Возможно вам пригодится. Возможно мне пригодится.
flow

Firefox антиахтунг 2

Пять лет назад я написал пост с полезными настройками для Firefox: https://justy-tylor.livejournal.com/196054.html

Часть из них уже устарела, часть была добавлена позже. А сейчас устарел сам Firefox. Версии до 57 не поддерживаются, версии начиная с 57 это кривая поделка, несовместимая со старыми плагинами, но не предоставляющая API для написания новых с тем же функционалом. Что, увы, связано с желанием разработчиков нового Firefox создавать подобие Chrome, отличающееся лишь внутренним самобытным кодом на эзотерических языках.

Переход на другой браузер это потеря радостей вроде TreeStyleTab или Mozilla Archive Format, так что я решил подождать, возможно, исчезновение классического Firefox сподвигнет разработчиков других браузеров на фичи для профессиональной аудитории. Однако, использование старых версий браузера небезопасно, для них не выходят security patches. К счастью, у Firefox есть ветка 52 ESR (Extended Support Release), которая будет поддерживаться и обновляться до 28 августа 2018.

Свежая на данный момент версия берётся, например, в https://ftp.mozilla.org/pub/firefox/releases/52.6.0esr/win64/en-US/ (англоязычная для x64 винды).

Однако, её установка поверх данных обычного Firefox приводит к потере части данных, включая все истории и иконки к закладкам. Возможно теряются и сохранённые пароли, но у меня таких нет.

Проблему с закладками можно решить через заход в "Bookmarks / Show All Bookmarks" и использование "Import and Backup / Export Bookmarks to HTML". Сохраните в файл, а на новой версии загрузите через "Import Bookmarks from HTML". Если вы ставили ESR версию без удаления старых данных пользователя, то такой импорт создаст дубликаты закладок, но их можно удалить, а иконки на закладках останутся.

Разумеется, перед установкой Firefox ESR желательно забэкапить содержимое "C:\Users\(имя пользователя)\AppData\Roaming\Mozilla\Firefox\", чтобы в случае проблем можно было легко вернуться к той версии браузера, что была установлена ранее (на всякий случай - запишите номер версии и скачайте и её инсталлятор тоже).
flow

Роботы Билайна

Сегодня уже второй раз за последнее время несколько часов не было домашнего инета. Звонил в техподдержку Билайна, где когда-то можно было услышать ответ живого человека. Всё. Людей нет. Теперь там автопосылатель "у некоторых пользователей сейчас есть проблемы, мы их решаем". Какие проблемы? В каком городе? Тем вредителям, что создавали эту "типа поддержку" было не до того, видимо очень хотели премию за экономию на персонале. Зато сразу после попыток пробиться через этот бред перезванивает робот: "Оцените, был ли наш автопосылатель полезен для вас". Вспоминается один из сезонов South Park, с "универсальной техподдержкой", да.

Понятно, что если сдохло их оборудование, то в какой-то момент сами найдут и починят. А если только один порт или провода на лестнице? Так и будут считать, что всё работает, потому что пользователям некуда сообщать?
flow

Ещё про Evernote

( Продолжая http://justy-tylor.livejournal.com/251595.html )

В общем, во вторник я сконвертировал своим скриптом все заметки. Циклы статей с веба - в единые .html с картинками, собственные записи - в .txt по категориям. Перенести из .enx в .enex было бы даже проще, но при таком уровне поддержки продукта (если они сами не могут потратить несколько часов на конвертер) - ну нафиг. Пока решаю, попробую для интеграции заметок Scrivener, а там как пойдёт.
flow

Evernote

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

Но на винде-десятке не пашет Evernote 2, который у меня с 2007 года и с тысячей нужных заметок, включая постоянно используемые. За эти годы произошло многое, сначала удобная программка преобразовалась в монструозный облачный сервис с "offline будет, но потом и за отдельные деньги", затем этот сервис многократно видоизменялся, и на данный момент там всё же есть десктопный клиент, декларирующий возможность "local notebook", что смотрелось приемлемой заменой.

Однако, ни формат старых баз Evernote 2, ни формат XML-экспорта .enx (созданный специально "для совместимости" между версиями) новый Evernote не понимает. А "для совместимости" там теперь несовместимый с предыдущим формат XML-экспорта .enex.



Набросать скриптик для извлечения заметок из .enx я могу. А вот куда их потом - вопрос.

Чем вы пользуетесь из notetaking software?

Update: Также интересно, какие софтинки могут одновременно отображать несколько панелей с разными заметками? Есть Scrivener, но я не знаю, насколько удобно он совместится с моим привычным workflow (всё же основное его предназначение - CAD для писателей).