- пройтись по разным источникам, в т.ч. по моим старым выступлениям про эрланг, собрать самое интересное
- подготовить черновик
- подготовить презентацию
- добавить что-то еще из основ языка
- показать фичи консоли. И встроенные функции.
- 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}]]
Пифагоровы тройки. Добавить фильтр 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. Наверное, поможет, если сделать хорошую презентацию.
убрать сложный пример кода с почтовым ящиком заменить на картинку – схему как он работает:
- FIFO
- receive, patterns, after
добавить про exit(Pid, shutdown)
пример loop-receive-echo-loop показать уже здесь
Подготовить к практике MapReduce. Схема как можно наладить общение между потоками. Должна быть в README.
- схема из 4х квадратов, как в gen_server_2 только для нашей кастомной реализации
схема deadlock прямой и через цепочку вызовов
simple_one_for_one, можно ли остановить/удалить child?
- показывать observer. На примере solution или на каком-нибудь другом примере.
- структуру проекта на примере rebar3 а не rebar2
- показать wgnet либы
- cowboy, cowlib, ranch – пример OTP приложений
- схема – проблема с транзитивными либами
- рассказать про pipeline
- показать, как это выглядит на OCaml (Haskell)
- должен быть к каждому уроку
- переделать в pdf, сделать нормальной презентацией возможно есть смысл разбивать один урок на несколько презентаций. Например, тему 01 можно разбрить.
- все картинки вставить туда
- ff_game
- list_zipper:find + tests
- matrix_zipper:find + tests
- move (unit tests for each step)
- find player on field (x,y)
- move player to direction
- fall previous cell
- check is new cell stable, don’t allow move if not
- fall neighbour cells recursivelly
- telnet-client, TCP-socket
- game protocol
- login, join game
- game for each pair of players
- game field for each game
- step by step moves
- game over
- functional tests tcp-client and game protocol
- память потока и сборщик мусора
- bit syntax