jamhed: (Default)
Вот в этом вашем ФП где состояние эмулируется передачей параметра в набор функций (см. gen_server, gen_statem, и пр.) каждая такая конструкция по факту является [finite] state machine, а взаимодействие таких state machine через сообщения образует комбинаторный взрыв, и это еще без учёта развёртки по времени.

В этой связи идея повсеместного внедрения микросервисов (которые де-факто и есть такие state machines обменивающиеся сообщениями) представляется довольно дикой: вместо одного приложения придется отлаживать n с разными состояниями. Т.е. отладка перемещается в production, и вылавливать придется последовательноси сообщений. С другой стороны эти самые микросервисы прекрасно эмулируются эрланг-процессами, а по ним можно гонять Concuerror. Вообще богатое поле для деятельности как мне кажется.
jamhed: (Default)
https://gist.github.com/jamhed/cd46f45d745085d698754ea3c258c8f5

Бывает порой что надо команду выполнить на ноде, и посмотреть чем дело кончилось. Можно это делать через erl -eval, а можно и через такой escript.

Пример: ./rpc.erl rpc@127.0.0.1 MyNodeCookie myapp@127.0.0.1 c ls

В предположении что у нас есть Erlang-нода на 127.0.0.1, которая называется myapp, и имеет ключ MyNodeCookie. Скрипт запустит ещё одну ноду, поставит ей имя rpc@127.0.0.1, поставит ключ MyNodeCookie и выполнит rpc:call('myapp@127.0.0.1', c, ls, []).

Аргументам можно указать тип, вида a:atom_parameter, b:binary_parameter и i:1. Если тип не указан, то будет строка.

Пример: ./rpc.erl rpc@127.0.0.1 MyNodeCookie myapp@127.0.0.1 c ls a:log
jamhed: (Default)
$ chrome --headless --disable-gpu --repl https://www.chromestatus.com/

The dawn and inevitable death of phantomjs.
jamhed: (Default)
https://www.youtube.com/watch?v=2u0sNRO-QKQ

Erik Meijer отжигает рассказывая про agile и scrum. Краткое содержание: этот ваш scrum исключительно для менеджеров, болтунов и лентяев. Нет никаких доказательств что 10-минутное ежедневное собрание (daily stand up meeting) эффективно. Вместо того чтобы говорить о коде надо писать код. Вместо того чтобы писать тесты надо писать код и выкатывать потребителям (они типа сами найдут ошибки и сообщат об этом, хе-хе). Хорошие инженерные практики (цикл требования-разработка-обратная связь) хороши для всего, в том числе и для управления предприятиями (потому что software eats the world, всё постепенно превращается в программы). Менеджеры любят консенсус и subtle control, тогда как у евреев есть правило: если 9 согласны, то десятый обязан возражать. tdd бесполезно, потому что надо писать код вместо тестов. Программисты должны ценить свою работу и получать зарплату как футбольные звёзды. Писать код лучше поможет математика (которую игнорируют). В профессии очень много дураков и любителей (вида освой java за 24 часа), хотя программирование per se довольно сложная область деятельности.

--

Ну что я могу сказать. Про scrum и agile я думаю точно так же: совершенно бессмысленное занятие, иллюзия контроля для менеджеров. Про тесты не всё так однозначно. Unit tests безусловно вредны (морозят код, удваивают работу), тогда как functional tests безусловно полезны, вида эта функция для конечного потребителя работает вот так. Прежде чем выкатывать результаты заказчикам иметь набор тестов функциональности просто необходимо, так как в противном случае можно чиня одно ломать другое, и так до тех пор пока клиентам не надоест и они не свалят вместе с деньгами на зарплату футболистам.

И в дополнение (кучно пошло я смотрю):
http://cartmendum.livejournal.com/227151.html

Вокруг программирования образовалась целая паразитическая отрасль со своей литературой, учебными курсами, компаниями, конференциями и консультантами. Можно сделать себе карьеру в разработке не написав ни строчки кода, все эти scrum masters, product owners и scrum testers. Я бы даже сказал вероятнее всего сделать себе карьеру начиная со scrum master (т.к. именно они будут общаться с теми кто платит трубачам, и имеют внутреннюю мотивацию страхом разоблачения, если сообразительные).
jamhed: (Default)
Вот один программист на просьбу делать pull request и не делать commit в master прислал длинное письмо следующего содержания:

Thank you for your consideration. Please let me explain, so that we are on the same page. I have 15 years' experience as Software Engineer, Tester, Team Leader, and Technical Architect working for a dozen or so companies, all between startups and Fortune 500 corporations, using a wide variety of development methodologies and tools. I have been configuring and maintaining testing environments, continuous integration servers, development frameworks, source control systems. I know very well benefits of code reviews when done properly. In my other project I am a team leader spending at least 2 hours every day to review, together with other leads, pull requests from a team of fifteen or so developers to ensure that the quality of the code meets our standards and client expectations.

Далее выясняется (на этапе QA), что коммиты этого уважаемого человека с 15-летним опытом работы в разных компаниях содержат в том числе и опечатки вида [Value,Rest] вместо [Value|Rest]. Что эффективным образом означает что код им не запускался вообще ни разу (иначе оно бы грохнулось).

Собственно как эффективный менеджер в состоянии отличить такого уважаемого человека с 15-летним опытом работы от другого уважаемого человека с 15-летним опытом работы, который так делать не будет?
jamhed: (Default)
Было:
SLOC Directory SLOC-by-Language (Sorted)
20854 src_top_dir erlang=20854

Стало:
SLOC Directory SLOC-by-Language (Sorted)
1200 src_top_dir erlang=1200

Если дятел-программист не долбит, то это плохой, негодный дятел.
jamhed: (Default)
> В программировании же каждые 10 лет происходит кардинальное изменение. Некоторые навыки алгоритмирования остаются, но большая часть навыков идет на свалку.

Действительно, есть и такие программисты для которых за пару лет меняется всё. Но есть другие, для которых и за 40 лет ничего не поменялось.
jamhed: (Default)
Erlang в силу своих особенностей оказался прекрасный язык для написания функциональных тестов: достаточно просто выписывать что должно быть. Если что-то пошло не так, то всё просто рухнет как и задумывалось. Никаких там assert и прочей ереси. Пример:
-module(t_transfer_to_same_queue).
-export([main/0]).

main() ->
	Queue = admin:new_queue(#{
		skills => #{ english => true },
		recipe => []
	}),

	Agent = test_lib:available(admin:new_agent(#{ skills => #{ english => true }})),
	{ok, InQueueCall} = call_sup:originate(Queue),
	UUID = test_lib:answer(Agent),
	test_lib:ensureTalking(UUID, InQueueCall),

	agent:rpc_call(Agent, <<"transfer_to_queue">>, [<<"ch1">>, Queue, #{ skills => [ <<"english">> ]}]),

	Agent1 = test_lib:available(admin:new_agent(#{ skills => #{} })),
	{'EXIT', {timeout, _}} = (catch agent:wait_for_call(Agent1)),

	agent:rpc_call(Agent, <<"end_wrapup">>, [<<"ch1">>]),

	UUID2 = test_lib:answer(Agent, <<"ch2">>),
	test_lib:ensureTalking(UUID2, InQueueCall).


Собственно весь тест. Из мозговыносящего здесь отсутствие понятия строки, binary() вместо неё, взаимозаменяемость в некоторых местах binary() и atom(), ну и отсутствие переменных (что только к лучшему).
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-процессов. Весьма любопытно.
Page generated Sep. 21st, 2017 08:46 am
Powered by Dreamwidth Studios