- raft убрать отсюда, перенести в другой репозиторий
- общее описание архитектуры, модулей, процессов текстом и картинками
- strategy proj
- player gen_server
- start player under sup from st_tcp_api
- player sessions storage
- keep {socker, player_srv} in storage почему st_player_storage:add_player нужно вызывать в st_player_srv:init? почему call а не cast?
- storage мониторит player_srv и удаляет из storage при завершении процесса
- Проблема хранения ресурсов с ограниченым временем жизни (pid, socket)
- gproc
- API Protocol template
- start/stop player_srv from game_protocol
- player_srv is owner of socket
- API
- ping
- auth: player_srv:auth, protocol:handle_auth
- get players list
- close player session
- battle
- начало уже есть, ff_game, нужно перенести в проекту
- убрать zippers, заменить на map
- реализовать взаимодействие с клиентом по текстовому протоколу через telnet
- match maker
=======
- bit syntax – отдельная тема, и упражнения по ней
- pipeline: формулировка задачи, решение на исключениях, решение на pipeline, как это выглядил на Haskell или OCaml
- не работают тесты для 14, 15 уроков и final_exercise там не хватает ebin/*.app с метаинфой и настройками. видимо, просто не запушил в репозиторий (возможно остались в bitbucket, в упражнениях для hexlet.org)
- #6
- raft
- разбить на этапы для каждого этапа свой код, и описание, какое должно наблюдаться поведение системы на 4х нодах
- презентация
- подготовить черновик
- подготовить презентацию
- отдельной презентацией сделать, какие книги и курсы есть по эрланг
http://learnyousomeerlang.com/relups тут клевая катринка, надо брать в доклад
вложенные case исключения схемы erlmonads и то, как я сделал для отписок в NC
добавить в урок про многопотоность Модель акторов в других языках (akka)
глубже изучить теорию хорошо подготовить практику
- добавить что-то еще из основ языка
- показать фичи консоли. И встроенные функции.
- fun “и даже посылать на другую ноду, чтобы выполнить там.” кажись это не правда. Было в рассылке. Надо проверить
- bit syntax – больше примеров. Упаковка RGB в 2 байта. Потеря точности при попытке упаковать большое число в недостаточное количество байт.
Схема: Var -> Memory, const var, const memory copy on write Схема: переиспользование памяти разными структурами невозможность циклических структур императивные алгоритмы и структуры часто быстрее, а функциональные надежнее, устойчивее к ошибкам
рекурсивные функции с аккумуляторами:
- добавить пример filter + map
- split_by_age, Age передать как аргумент, а не хардкодить
Задание повышеной сложности trim пробелов с обоих сторон строки, с сохранением пробелов внутри строки
- легко: в 4 прохода: drop while, reverse, drop while, reverse)
- сложнее: в 1 проход
Конструкторы списков, добавить пример, когда шаблон матчится не со всеми элементами списка [Cat || {cat, _} = Cat <- [{cat, A}, {user, B}]] V может быть шаблоном, если он не матчится, то этот элемент списка пропускается.
Пифагоровы тройки. Добавить фильтр X < Y, чтобы исключить дубликаты.
добавить объяснение про синтаксис: в конце строки может быть запятая, точка с запятой, точка, ничего в каких случаях что ставится.
русскоязычный термин – “охранное выражение”
Нативные: map (реализация внутри виртуальной машины на С, императивными алгоритмами) Построенные поверх tuple & list: proplist, dict, orddict, gb_trees (интерпретируемый функциональный код)
dict, orddict, gb_trees – устарели proplist – широко используется
CRUD операции 2 вида функций read/update:
- бросающие исключение
- возвращающие монаду {ok, Val} | error
таблица CRUD операций для разных структур показать неконсистентность синтаксиса по именам функций, аргументам, возвращаемым значениям (монады сделаны по-разному) которая характерна и для других мест в стандартных либах
Наличие map, fold, filter
в практическом задании сложности с отладкой объяснить, как это лушче делать. (тестить через консоль, читать сообщения об ошибках)
Вроде бы все ок, но кажется, что можно сделать как-то лучше. Много мелких примеров, в которых я ошибаюсь при live coding. Наверное, поможет, если сделать хорошую презентацию.
картинка-схема, как работает почтовый ящик (нарисую на доске, сфоткаю, нарисую нормально)
добавить про exit(Pid, shutdown)
Подготовить к практике MapReduce. Схема как можно наладить общение между потоками. Должна быть в README.
- схема из 4х квадратов, как в gen_server_2 только для нашей кастомной реализации
схема deadlock прямой и через цепочку вызовов
simple_one_for_one, можно ли остановить/удалить child?
убрать старые версии init, оставить только новые, на мапах
- показывать observer. На примере solution или на каком-нибудь другом примере.
- структуру проекта на примере rebar3 а не rebar2
- показать wgnet либы
- cowboy, cowlib, ranch – пример OTP приложений
- схема – проблема с транзитивными либами
- рассказать про pipeline
- показать, как это выглядит на OCaml (Haskell)