Skip to content

Latest commit

 

History

History
159 lines (108 loc) · 6.54 KB

TODO.org

File metadata and controls

159 lines (108 loc) · 6.54 KB

00. Intro.

  • пройтись по разным источникам, в т.ч. по моим старым выступлениям про эрланг, собрать самое интересное
  • подготовить черновик
  • подготовить презентацию

01. типы данных

  • добавить что-то еще из основ языка
  • показать фичи консоли. И встроенные функции.
  • fun “и даже посылать на другую ноду, чтобы выполнить там.” кажись это не правда. Было в рассылке. Надо проверить
  • bit syntax – больше примеров. Упаковка RGB в 2 байта. Потеря точности при попытке упаковать большое число в недостаточное количество байт.

02. ссылочная прозрачность, устройство списков

Схема: Var -> Memory, const var, const memory copy on write Схема: переиспользование памяти разными структурами невозможность циклических структур императивные алгоритмы и структуры часто быстрее, а функциональные надежнее, устойчивее к ошибкам

рекурсивные функции с аккумуляторами:

  • добавить пример filter + map
  • split_by_age, Age передать как аргумент, а не хардкодить

Задание повышеной сложности trim пробелов с обоих сторон строки, с сохранением пробелов внутри строки

  • легко: в 4 прохода: drop while, reverse, drop while, reverse)
  • сложнее: в 1 проход

03. функции высшего порядка

Конструкторы списков, добавить пример, когда шаблон матчится не со всеми элементами списка [Cat || {cat, _} = Cat <- [{cat, A}, {user, B}]]

Пифагоровы тройки. Добавить фильтр X < Y, чтобы исключить дубликаты.

04. pattern matching

добавить объяснение про синтаксис: в конце строки может быть запятая, точка с запятой, точка, ничего в каких случаях что ставится.

05. kv структуры

Нативные: map (реализация внутри виртуальной машины на С, императивными алгоритмами) Построенные поверх tuple & list: proplist, dict, orddict, gb_trees (интерпретируемый функциональный код)

dict, orddict, gb_trees – устарели proplist – широко используется

CRUD операции 2 вида функций read/update:

  • бросающие исключение
  • возвращающие монаду {ok, Val} | error

таблица CRUD операций для разных структур показать неконсистентность синтаксиса по именам функций, аргументам, возвращаемым значениям (монады сделаны по-разному) которая характерна и для других мест в стандартных либах

Наличие map, fold, filter

06. ets

в практическом задании сложности с отладкой объяснить, как это лушче делать. (тестить через консоль, читать сообщения об ошибках)

07. строки

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

08. concurrency

убрать сложный пример кода с почтовым ящиком заменить на картинку – схему как он работает:

  • FIFO
  • receive, patterns, after

добавить про exit(Pid, shutdown)

пример loop-receive-echo-loop показать уже здесь

Подготовить к практике MapReduce. Схема как можно наладить общение между потоками. Должна быть в README.

09. gen_server_1

  • схема из 4х квадратов, как в gen_server_2 только для нашей кастомной реализации

10. gen_server_2

схема deadlock прямой и через цепочку вызовов

12. supervisor

simple_one_for_one, можно ли остановить/удалить child?

13. Application

  • показывать observer. На примере solution или на каком-нибудь другом примере.

14. OTP

  • структуру проекта на примере rebar3 а не rebar2
  • показать wgnet либы
  • cowboy, cowlib, ranch – пример OTP приложений
  • схема – проблема с транзитивными либами

15. обработка ошибок

  • рассказать про pipeline
  • показать, как это выглядит на OCaml (Haskell)

outline (presentation)

  • должен быть к каждому уроку
  • переделать в 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