?

Log in

No account? Create an account
Electric Café

> Recent Entries
> Archive
> Friends
> Profile
> previous 10 entries

August 30th, 2018


03:22 am - Основы понимания дизайна языков
За последние 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. Если при прочтении у вас возникнет ощущение "сложно, но интересно" - продолжайте. Если же это будет ощущение отторжения - ок, стоп, значит не ваша тема. Вообще, или на данном этапе жизни.

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

(14 comments | Leave a comment)

March 26th, 2018


11:30 pm - Идентификация 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...)".

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

(6 comments | Leave a comment)

March 5th, 2018


12:59 pm - 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\", чтобы в случае проблем можно было легко вернуться к той версии браузера, что была установлена ранее (на всякий случай - запишите номер версии и скачайте и её инсталлятор тоже).

(9 comments | Leave a comment)

December 25th, 2017


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

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

(1 comment | Leave a comment)

April 27th, 2017


01:54 am - Ещё про Evernote
( Продолжая http://justy-tylor.livejournal.com/251595.html )

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

(1 comment | Leave a comment)

April 24th, 2017


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

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

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



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

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

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

(8 comments | Leave a comment)

April 6th, 2017


05:48 pm - Лайфхак
В марте я неудачно двинул шею, обратился к спецам, процедуры, все дела, сейчас нормально. Но врач запретил спать на животе. И, в общем, правильно - так оно просто вредно, а при травмах ещё вреднее.

Однако, во сне я постоянно утыкался носом в подушку при "на улице стало чуть светлее". Не просыпался, а просто поворачивался. Но даже полчаса в таком положении вели к неприятным ощущениям после.

Внезапное решение - sleep mask (маска для сна). Причём, я и раньше пользовался маской, но только в путешествиях и в белые ночи, в остальное время не применял. И использование "чтобы спать на спине" было как-то неочевидно. Зато теперь комфортнее и лучше высыпаюсь в маске.

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

(9 comments | Leave a comment)

March 2nd, 2017


05:01 pm - От Капитана Очевидности
Люди работают. За деньги. Если они работают не за деньги, то это называется не работа, а волонтёрство.

Так вот. "Хорошо работать" и "плохо зарабатывать" - понятия несовместимые. Потому что хорошая работа это востребованная работа. И платят за неё тоже прилично. Так что, хорошо работая вы либо хорошо зарабатываете себе на жизнь, либо хорошо зарабатываете кому-то на новое шубохранилище. И отговорки, что "в таких-то областях науки/культуры принято довольствоваться малым", это и есть основная опора существующей ситуации. "Лох не мамонт, лох не вымрет".

(18 comments | Leave a comment)

January 15th, 2017


04:02 pm - дыбр
За пять минут до "направиться к празднованию старого нового года" сделал прототипчик очень ценной вещи. Вспомнил один свой экспериментальный REPL для Sublime Text и применил его идеи в области юнит-тестов, что позволяет выводить эти самые тесты, вместо бессмысленной деятельности по ручному их написанию. Причём, не требуя REPL в разрабатываемом продукте или дополнений к IDE, в котором он разрабатывается. Мелочь, а приятно. А если про сберегаемое время, то вовсе и не мелочь.

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

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

Что вместо жж? dreamwidth с трансляциями? Возможно. Такой жж из прошлого, которым занимаются люди, умеющие интеграцию HTTPS и "не ломать работающее". Вконтактик не очень удобен для обсуждений, фейсбук максимально неудобен для всего. Появление современных сервисов, позволяющих удобно работать с крупными текстами и древовидными комментариями, мне кажется возможным только в варианте B2B+B2C, но не чисто B2C, ибо широкие народные массы хотят попроще.

(19 comments | Leave a comment)

November 24th, 2016


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

1. Процессор - что-то шустрое из i7.
2. Память - 32Gb, ибо по нынешней работе есть вероятность data science.
3. Материнка, чтобы SATA-контроллер держал >2TB диски и было хорошо с портами.
4. Корпус. Какой-то.
5. SSD системным диском, один или два HDD под остальное.
6. Видяха, не премиум-геймерская, но чётко под современный графониум.
7. Операционкой видимо поставлю Windows Server 2016, если не найдётся блокирующих глюков.

Подскажите чего-нибудь хорошего по пунктам. :)

(23 comments | Leave a comment)

> previous 10 entries
> Go to Top
LiveJournal.com