jamhed: (Default)
Процессы Erlang советуют объединять в деревья при помощи link/1, и вообще использовать OTP. Однако в OTP имеется ровно одна абстракция под названием supervisor, которая умеет перезапускать другие процессы определённое число раз, и затем помирать от огорчения. И на этом всё. Если вдруг кому-то хочется перезапускать процессы не сразу, а через некоторое время, да ещё и менять это время, то стандартных абстракций в OTP нет (пишите сами). Вообще можно придумать много разных стратегий для супервизора, но реализована самая тупая (и бесполезная). Причем как это обычно водится в стандартном supervisor есть отдельная стратегия simple_one_for_one типа для упрощения, но объяснению которой посвящена половина руководства по supervisor вообще. Такая вот простота.
jamhed: (Default)
su - $USER -c '/usr/bin/slock "sudo /usr/sbin/s2ram"'
jamhed: (Default)
Интересно, а корпоративные любители тратить деньги на ОС Windows, антивирусы и отделы "информационной" "безопасности" выводы какие-нибудь сделают из последних событий?
jamhed: (Default)
Вот хорошо известно что наилучшие пароли имеют вид: "уМэрибыл-синийЯгнёнок", то есть фраза из нескольких слов с какими-нибудь нормальными знаками препинания в неожиданном месте. Такие пароли легко запоминаются людьми, и стойки к перебору как по словарям, так и грубой силой.

Тем не менее многие сайты настаивают на том что пароль должен быть вида $#@AJdsd89, что запомнить невозможно в принципе (положим, один еще и можно, но 25?). Поэтому измученные пользователи выбирают себе пароль вида Pa$$w0rd, что подобрать существенно легче.

Такими вот благими намерениями стойкость паролей понижается, а мучения пользователей возрастают. А всё почему? См. subj.

WTF

Jun. 23rd, 2017 02:37 pm
jamhed: (Default)

Qpid = undefined,
lager:info("Qpid for init is ~p", [Qpid]),


Кому то видимо нравилось смотреть на логи.
jamhed: (Default)
Сообщает нам замгендира Postgres Professional Иван Панченко — о переносе петербургского центра Oracle в Индию:

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

Высокие зарплаты осложняют жизнь российским компаниям, поэтому если сотрудникам не платить, то всё будет хорошо в родном отечестве. Ещё видимо стоит границы закрыть чтобы народец не разбегался, и интернет обрезать, чтобы удалённо не работал (впрочем было уже с github).
jamhed: (Default)
Если в коде где-нибудь написано magic, то этот magic как правило гвоздями прибитый один частный случай.
jamhed: (Default)
Вообще интересно Erlang VM и RTEMS на Orange Pi поставить. Перспективненько я бы даже сказал.
jamhed: (Default)
Jonas Boner, author of Akka
----------------------------

Talks a lot about reliability, resiliency but doesn't say how, instead
of it shows nice pictures with meercats, Conway's game of life and so on.
Let us split the system to number of interacting agents, and let them
interact. All states should be known, unknown states should not exist (hard to argue).
How to know all states is unknown though. Converging promises and diverging commands.

Kenneth Lundin, OTP 20 highlights
---------------------------------

A lot of improvements: garbage collector, binary parts, unicode aroms, better maps, ets,
and so on. Failed to split OTP as planned, however work is going on. See the changelog,
release is planned at 21 of June.


Jesper L. Andersen, GraphQL in Erlang
-------------------------------------

https://github.com/shopgun/graphql-erlang

GraphQL allows a client to declare what it wants from sever. What is possible is described
by schema, schema is compiiled and checked server-side. Query interpretation takes microseconds,
most of load is to fetch data from storages. Each schema type is represented by Eralng module
with known API. Types in GraphQL and types theory relation (positive/negative types),
this is not emphasized in GraphQL docs. Author wrote a lenghtly tutorial.


Paweł Antemijczuk и Maarten Faddegon, Anti-Patterns in the Wild
---------------------------------------------------------------

How write a bad code in Erlang. Same old story: don't write huge functions, don't
use huge state, don't nest case clauses. They fear to use Erlando in production
due to maintenance concerns, they tried and failed Wrangler (steep learning curve,
unclear results, don't like Emacs). To sum up: it is impossible to refactor
Erlang code automatically and semi-automaticcally at the moment and nearest future.
Write tests instead.


Mark Allen, Sagas in Erlang: Distributed Transactions Without Locks
-------------------------------------------------------------------

For the reason unknown declared a left fold operation a transaction (it is not),
distributed in fact not so distributed, and so on. Why to talk about this
is unclear.

Peer Stritzinger, Fixing Erlang’s Distribution Protocol
-------------------------------------------------------

They tried to use Erlang on microcomputers for industrial automation
and then discovered that Erlang distribution protocol is broken by design:
1. full-mesh networking model
2. messages are processed sequentally, and one huge can block whole queue
3. primitive security model
Because of that they want to fix the protocol, however how he described
the fix looks more or less like TCP/IP stack itself but over the node links
(which are TCP already). Weird.


Peter Van Roy, Ditching the Data Center: How to Stop Worrying and Love the Edge
-------------------------------------------------------------------------------

This time truly distributed computations over unreliable network. Nodes know
about each other with Gossip family of protocols, all calculations should be
with CRDT. At the moment CRDT have limited use, but where they could be used
then use cases are good. They are doing research, have funding till 2020,
and plans till 2050. Impressive. The idea is to write programs as expressions
over CRDT, sort of map: A -> B, and there is a special language lasp.


Kostis Sagonas, Adventures in Corfu: Testing and Verifying Chain Repair Protocols using Concuerror
--------------------------------------------------------------------------------------------------

Started with some Greece advertisement, however continued: they have a tool to test
concurrency in Erlang by building all possible message sequence combinations, and
trying all of them. If a program fails under this test then there is certainly a
bug, and if program doesn't fail, then there are no bugs (with high probability).
All possible cases could be tried, but it takes time. There are some ways to
speed up process, and plans how to make it parallel. One unexpected use case:
Scott Lystig Fritchie who works on CorfuDB discovered a bug in distribution protocol,
but concuerror discovered a bug in suggested fix to previous bug. This was
achieved by modelling protocol with Erlang entities (processes, messages).
Very interesting.

Justin Schneck, Keynote: The Demarcation of the Edge of Innovation
------------------------------------------------------------------

Talks about dependencies, food recepies, all are doing something,
everything depends on everything, and so on. They took Linux kernel,
and Erlang, and made it run on Raspberri Pi, and then called it a platform.
Was unable to stand this marketing bullshit and left.


Andrea Leopardi, Update from the Elixir Core Team
-------------------------------------------------

Elixir is stable and evolving, planned release is 1.5, good
interaction with OTP team, built-in property tester, and so on.


Clara Benac Earle, Building Distributed and Robust Multi-Agent Systems (MAS)
----------------------------------------------------------------------------

Talks about agents with beliefs, goals and logic. Some people describe those
agents using special language Jason, JVM targeted. Speakers were able to
translate this language to BEAM and are very happy. Robustness and distribution
are inherited from BEAM, sort of.

Loïc Hoguin, A Tale of 2.0 Cowboys
-----------------------------------

Soon Cowboy 2.0 will be released with HTTP/2 support and better architecture.
Used maps everywhere, better process management, gen_statem. Handlers
could return list of commands. Rewrote whole documentation in php-style
(one function per page), wrote a lot of tests for specs, a lot of work.
Cowboy 1.x is a part of RabbitMQ, and other his projects. Has plans
to write REST framework, nobody are doing REST correctly. Much sponsors
left past two years, has no money because of that.


Claudia Doppioslash, Building Single Page Web Applications with Purescript and Erlang
-------------------------------------------------------------------------------------

Rewrote the app from Elm to Purescript (last year talk was about Elm). Elm is not good
enough (simple types, one true architecture). Purescript has rich type system,
and could be compiled to Erlang. They are using BERT between client and server
due to encoding/decoding server-side is much quickier than JSON. How Erlang is related
to this project is completely unclear.

Adam Lindberg, Robotics and Sensors Using Erlang on Embedded Systems with GRiSP
-------------------------------------------------------------------------------

Developed a custom atmel-based board with rich periphery (wifi, usb, gpio, i2c, spi, uart, 1-wire),
and managed to run RTEMS with BEAM on it. This allows to use Erlang to manage and program
the device. Erlang used is outdated (16.x), they have plans to update it alongside with
build process. Selling price is 180 euro, intended use case is industrial automation.
Unclear though why is this better than Orange Pi ($10 with delivery) with Armbian and Erlang.

Joe Armstrong и Sam Aaron, Distributed Jamming and Composition with Sonic Pi and Erlang
---------------------------------------------------------------------------------------

A stand-up comedy show. Joe Armstrong discovered MIDI, and is eager to share this knowledge
with broad audience. Suddenly MIDI has messages, and you can exchange them over network.
Sam Aaron demonstrated how his Sonic Pi works. Here we have a program to generate sounds,
how cool it is. Also you can have effects. Logic Pro is written by idiots.
How Erlang is related, again?
jamhed: (Default)
Вообще слушать про рецепты пиццы, midi-сообщения, называть левый fold транзакциями, а так же что всё от всего зависит, и все что-то делают можно и в других местах. Предполагалось что на Erlang User Conference будут говорить о языке Erlang и способах его применения, однако вот же ж. Erlang рекламируется как средство создания надёжных распределённых систем, однакось встроенная в Erlang распределённость сильно преувеличена, и пользователей это явно беспокоит. Очевидно что так же есть потребность в типах, выводе типов, категориях (erlando поминали раза 3) и прочих средствах повысить предсказуемость программ, однако никаких движений на эту тему нет и не предвидится (про пиццу рассказать важнее, да), разве что в Elixir. Категории поминались один раз со словами вам это не того, с ума сойдете и убежите. Ну-ну.
jamhed: (Default)
Выступает Justin Schneck, Keynote: The Demarcation of the Edge of Innovation
----------------------------------------------------------------------------

Нёс какую-то околесицу про зависимости, рецепты еды, что все что-то делают, и прочее. Из достижений типа взяли ядро Linux и Erlang, и запустили это на устройствах типа Raspberry Pi, и назвали это платформой. Не вынес этого маркетингового бреда и ушёл.

Выступает Andrea Leopardi, Update from the Elixir Core Team
-----------------------------------------------------------

Elixir стабилен и развивается, будет релиз 1.5, взаимодействие с OTP team, встроенный в testing framework property tester (типа для потоков данных), и пр.

Выступает Clara Benac Earle, Building Distributed and Robust Multi-Agent Systems (MAS)
--------------------------------------------------------------------------------------

Внезапно оказывается что есть такие агенты, у которых предпосылки, цели и логика, и какие-то люди этих агентов описывают при помощи специального языка Jason для JVM. Рассказчики запустили этот язык на BEAM, и много радуются. Вся распределенность и отказоустойчивость вытекает из свойств BEAM, типа.

Выступает Loïc Hoguin, A Tale of 2.0 Cowboys
--------------------------------------------

Скоро вот-вот уже будет Cowboy 2.0, в котором поддержка HTTP/2 и переделанная архитектура. Всё переписали для maps, более лучше управление процессами. gen_state_m. Обработчики могут возвращать списки команд. Переписал всю документацию в php-стиле (одна страница на функцию, с примерами), написал кучу тестов по спецификациям, но не до конца, куча работы. Cowboy 1.0 теперь в RabbitMQ, и другие его проекты. В планах написать REST framework, который никто не делает правильно. Спонсоры за последние два года потерялись, денег нет.

Выступает Claudia Doppioslash, Building Single Page Web Applications with Purescript and Erlang
-----------------------------------------------------------------------------------------------

Переписали интерфейс с Elm на Purescript (в прошлом году было аналогичное выступление про Elm). У Elm обнаружились недостатки (примитивная система типов, гвоздями прибитая архитектура), тогда как у Purescript таких недостатков нет, да и вообще в Erlang компилируется. Между клиентом и сервером гоняют BERT потому что BERT encoding/decoding на сервере существенно быстрее чем в JSON. Каким местом тут Erlang совершенно непонятно.

Выступает Adam Lindberg, Robotics and Sensors Using Erlang on Embedded Systems with GRiSP
-----------------------------------------------------------------------------------------

Сделали железку на базе процессора Atmel с разнообразным обвесом (wifi, usb, gpio, i2c, spi, uart, 1-wire) и светодиодами и впилили на нее RTEMS вместе с Erlang VM чтобы приложения писать на Erlang и загружать в том числе и динамически. Erlang там версии 16, планируют догнать до 20 и начать использовать rebar3. Продавать собираются по 180 евро штука, типа для промышленной автоматики. Не совсем понятно чем это отличается от Orange Pi который можно купить за $10 с доставкой, поставить на него Armbian + Erlang любой версии, gpio в комплекте.

Выступают Joe Armstrong и Sam Aaron, Distributed Jamming and Composition with Sonic Pi and Erlang
-------------------------------------------------------------------------------------------------

Выступление в жанре stand-up comedy show. Joe Armstrong открыл для себя MIDI, и делился этим знанием с широкой публикой, причем довольно долго. Оказывается MIDI это сообщения, и ими можно обмениваться, в том числе и по сети. Sam Aaron демонстрировал как работает его Sonic Pi написаный на Ruby. Типа вот написали программу, и она звуки генерирует. А еще эффекты можно. Причем тут Erlang тоже совершенно непонятно. Из достижений дружественный интерфейс, в отличие от Logic Pro, который написали неучи.
jamhed: (Default)
Выступает Jonas Boner, автор Akka.
----------------------------------

Много и не структурировано рассказывает о том что все хотят писать надежные
самовосстанавливающиеся (resilient) программы, однако не говорит как.
Вместо этого показывает слайды с сурикатами, Conway's game of life, и прочее.
Типа давайте разобъем систему на взаимодействующих агентов, и пусть они взаимодействуют, все состояния должны быть известны, неизвестных состояний (failures) быть не должно (кто бы спорил). Сходящиеся promises и расходящиеся commands.

Выступает Kenneth Lundin, OTP 20 highlights
-------------------------------------------

Многочсленные улучшения: gc и часть binary, юникод в атомах, улучшенные maps, ets и прочее.Разбить OTP как планировалось не получилось, однако работы продолжаются. См. changelog, релиз будет 21 июня.

Выступает Jesper L. Andersen, GraphQL in Erlang
-----------------------------------------------

https://github.com/shopgun/graphql-erlang

GraphQL позволяет клиенту сочинять что именно он хочет от сервера декларативно. Что именно можно присылать описывается схемой, схема компилируется и проверяется на стороне сервера. Сама интерпретация запроса занимает в Erlang микросекунды, основная нагрузка ложится на выборку из баз данных. Каждый тип представлен модулем с некоторым стандартным api. Типы в GraphQL и теория типов
(positive/negative types, что-то еще?) о которых не говорят, но стоило бы.

Написал длинный tutorial которым горд: https://shopgun.github.io/graphql-erlang-tutorial/

Выступают Paweł Antemijczuk и Maarten Faddegon, Anti-Patterns in the Wild
-------------------------------------------------------------------------

Рассказывают как не надо писать на Erlang. Те же яйца вид сбоку: не пишите длинных функций, не имейте монструозных state, не делайте вложенных case. Erlando им в production тащить страшно, wrangler (инструмент для рефакторинга) сложный и непонятный, к тому же неизвестно как работает. To sum up: средств для автоматического и полуавтоматического рефакторинга для Erlang нет,
и не предвидится. Пишите тесты, в общем. Unit tests, property tests, functional tests.

Выступает Mark Allen, Sagas in Erlang: Distributed Transactions Without Locks
-----------------------------------------------------------------------------

С уверенным видом нёс какую-то пургу про левый fold по парам фунций (одна в одну сторону, другая для отката). Транзакции у него там не транзакции, распределенность не распределенность, и так далее. Зачем выступал не совсем понятно.

Выступает Peer Stritzinger, Fixing Erlang’s Distribution Protocol
-----------------------------------------------------------------

Рассказчик впилил Erlang на микроконтроллеры для промышленной автоматизации,
и обнаружил что встроенная в Erlang распределённость не совсем распределенность,
и имеет ряд неустранимых проблем в дизайне:
1. связи типа все со всеми
2. сообщения от ноды к ноде обрабатываются по порядку (одно большое может забить всю очередь)
3. рудиментарная безопасность в виде общего для всех нод cookie

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

Выступает Peter Van Roy, Ditching the Data Center: How to Stop Worrying and Love the Edge
------------------------------------------------------------------------------------------

Рассказывает про распределенные вычисления поверх крайне неустойчивой сети. Устройства в сети знают друг о друге при помощи gossip протоколов, а вычисления надо делать при помощи crdt. В настоящий момент crdt имеют ограниченное применение, но если уж применяются, то хорошо. Исследования исследуются, финансирование есть до 2020 года, а планы до 2050. Масштабно мыслит,
ничего не скажешь. Идея в том чтобы писать программы как выражения с crdt, типа A -> map -> B, и под это дело есть специальный язык lasp.

Выступает Kostis Sagonas, Adventures in Corfu: Testing and Verifying Chain Repair Protocols using Concuerror
------------------------------------------------------------------------------------------------------------

Костис начал с рекламы красот Греции, однако вскорости весьма бодро продолжил: они там написали инструмент для тестирования concurrency в Erlang путем построения всех возможных комбинаций сообщений которые ходят между процессами, и перебором поведения. Если упало, то баг есть, если не упало, то скорее всего нет (но можно перебрать и все состояния, только долго). Есть некоторые эвристики для ускорения перебора, есть планы как сделать эти вычисления параллельными.
У инструмента оказались неожиданные применения: некий Scott Lystig Fritchie который занимается проектированием распределенного протокола CorfuDB обнаружил в протоколе баг, а concuerror обнаружил баг предложенном исправлении протокола. Делалось это путём моделирования участников протокола при помощи erlang-процессов. Весьма любопытно.
jamhed: (Default)
А вот кто придумал что запросы писать в виде json или упаси-боже xml -- это хорошо и круто?

Erlang WTF

May. 15th, 2017 03:59 pm
jamhed: (Default)
{error,{error,{error,{error,normal}}}}

orly?

QA

May. 11th, 2017 12:05 pm
jamhed: (Default)
Отличная между прочим работа -- quality assurance. Если тестов нет, то можно говорить что все проблемы потому что тестов нет. Если тесты есть, то можно можно говорить что все проблемы потому что тестов слишком много и тестируют ненужное.
jamhed: (Default)
Для Erlang существует pretty printer написанный по заветам John Hughes (весь из себя монадичный и функциональный), однакось у него есть дефект -- отформатированный таким образом код не всегда компилируется. Поэтому предлагают пользоваться другим форматтером -- т.н. Emacs Erlang mode, который написан на emacs-lisp, и весьма крив (в прямом смысле), не говоря уже о том, что он требует наличия emacs. Я так понимаю в монадичном prettypr никто разобраться не может?
jamhed: (Default)
Писали значится одни товарищи аналитику для звонков типа в реальном времени чтобы работала, и сделано это у них так: когда звонок начинается каждые 5 секунд в базу (mongodb) записывается значение вида {timestamp, key}, где key еще и разные агрегации (типа клиент, очередь, и прочее). Потом когда надо получить "статистику" за период делается много запросов к бд вида просуммировать это всё за 15 секунд, за минуту, за 15 минут, за час и так выдать. Это таким способом сделали то что известно как time-series database.

Потрясающе, на самом деле.

P.S. Мне тут видится ряд напрашивающихся улучшений: значения надо писать раз в секунду (для большей точности), а агрегации надо выбирать по большему числу интервалов.
jamhed: (Default)
Известная гипотеза Сепира-Уорфа утверждает что язык определяет мышление, и в случае языков программирования это действительно так. Дийкстра утверждал что знакомство с бейсиком необратимо разрушает мышление программиста неспроста: разнообразные уклоны языков программирования неизбежно влияют на то как именно описываются и решаются практические задачи программистами, и никто не начинает изучение программирования с освоения сразу нескольких языков. А если уж в руках оказался молоток, то всё вокруг начинает быть похожим на гвоздь (иерархии классов).

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

Erlang wat

Mar. 24th, 2017 12:02 pm
jamhed: (Default)
Посмотрел вот видео горячего аргентинского парня который пытался искромётно шутить про Erlang в стиле известного wat (и прямыми отсылками). Шутил он как и обещал плохо, и большая часть из его wat мне лично видятся вполне логичными (с опр. точки зрения), однако пару полезных моментов (из получасового выступления) подсмотреть удалось:

1. При объявлении gen_server в документации видим:

start_link() -> gen_server:start_link({local, ch3}, ch3, [] = _Args, []).
init([] = _Args) -> {ok, channels()}.

Весьма часто можно видеть (сам так делал) Args = [arg1, arg2], т.е. списком. Однакось суровая правда Erlang в том что _Args из gen_server:start_link/4 передается в init/1 как есть, то есть не обязано быть списком. Можно сделать так:

init(wat) -> ...
init({Arg1, Arg2}) -> ...
и т.д.

2. В том же gen_server в любой момент можно вызывать throw/1 или exit/1 с аргументом типа {reply,Reply,NewState} (см. объявление Result), и это приведет к нормальному завершению обработчика handle_call/handle_cast, т.е. без останова сервера. Вообще throw/1 это не throw, а non-local return.
jamhed: (Default)
В языке Erlang всё что имеет состояние становится процессом при помощи посылки сообщений и тасованию контекста внутри процесса как дополнительного аргумента (что в точности делается при объявлении gen_server). Таким образом правильная система на языке Erlang должна иметь много таких процессов-серверов, что весьма легко проверить. Если процессов мало (и/или контексты весьма объемны), то такая система написана скорее всего неправильно, и причин тому несколько:

1. Далеко не всем очевидно вот так вот сразу что gen_server (и аналоги) это состояние (а не сервер типа apache), и другого способа работать с состоянием в Erlang нет.
2. Объявление gen_server весьма многословно (с другой стороны всегда можно наклепать свою light-версию)
3. Декомпозиция предметной области на процессы-сообщения требует некоторого размышления.

Отдельно стоит упомянуть что таким же способом (применением процессов) достигается устойчивость к ошибкам: возможные ошибки изолируются в процессе, который дохнет и перезапускается в работоспособном виде. И если вместо этого в коде наличествуют try/catch, case Term of, и прочая ересь -- см. выше.

То есть все эти рекламируемые свойства Erlang-системы (отказоустойчивость, распределённость, и пр.) достигаются только тогда, когда система написана так, как того язык подсказывает, а не переложением Java/Python/PHP на Erlang. По счастью писать на Erlang в другом стиле жутко неудобно, но с другой стороны упорные и неленивые программисты тоже никуда не деваются.
Page generated Jul. 22nd, 2017 08:45 pm
Powered by Dreamwidth Studios