- PVSM.RU - https://www.pvsm.ru -

Чёрная Лямбда ефрейтора Волкова: новое направление и гранты на летнюю школу

Чёрная Лямбда ефрейтора Волкова: новое направление и гранты на летнюю школу - 1 [1]

Не далее чем в июле прошла очередная школа GoTo. В этот раз мы решили внести некоторое разнообразие в стандартный набор Ардуин, Питонов, и прочих, и случился Хаскелль. Небольшое отделение из 6 юношей (кусочек нашего общего взвода в 60 человек) бодро промаршивало по $lambda$-исчислению, основам синтаксиса, прошло посвящение в ФП написанием факториала, посворачивало списки, научилось словосочетанию "параметрически полиморфная функция высшего порядка" и присущему этому пониманию типов и тайпклассов под предводительством ефрейтора Волкова [2].

А ещё у нас были элементы инфобеза, криптовалюты, React Native, nix, и, конечно, git.

И мы начали писать книгу про Haskell.

В общем, получилось задорно.

(Под катом картинки участников, лямбды, илосос, анонс нового направления и гранты)


Для того, чтобы завлечь детей, мы назвали направление "Прикладное Программирование: Курс Молодого Бойца 2" (как логическое продолжение КМБ1). В уверенности, что их ждёт логическое продолжение Telegram-ботов, они даже не подозревали...

Начали мы с $lambda$-исчисления.
Привет, лямбда!
Через интересные выражения типа $(lambda d.d)(lambda d.dd)(lambda d.ddd)(lambda d.dx)$ мы выяснили, почему $20 / 2=5 * 2$, что сходится, а что расходится, что такое $alpha$ equivalence и parser combinators, только без parser. И узнали, как работает каррирование.

Одной из концепций направления было как бы сочетание в себе других: биоинформатики, прикладного программирования и анализа данных, и задачи были соответствующие: найти комплементарную ДНК-цепочку, закодировав ДНК в типах, сделать HTTP-клиент для школьного банка и определить класс илососа по вектору сэмплов качества его работы.

data AA = A | C | G | T

В конце первой недели участников ждала прогрессивная преподавательская концепция: спортивный зачёт. Узнав свой вопрос, нужно было пробежать ~350м и ответить сразу после; думать во время бега.

Haskell BABY: Не щиплет глазки!

Где-то здесь мы изучили git; я посчитал своим долгом сказать про посылку патчей по почте, но мы всё же использовали GitHub и GitLab. Сделали простые сайты на Pages.

$ git format-patch <...>

Прошли функции высшего порядка и затронули свёртки (folds). Решили задачу про илососов: дана квадратная матрица ilosos_id / sample_id (строки — илососы, столбцы — измерения качества сосания), найти класс (первый, второй, ...) каждого из илососов.

Илосос

[0.2, 0.44, 0.9, 0.3, 0.6] => 0.488 => Ilosos3

Сначала вектор сворачивается в среднее (здесь — арифметическое), а потом преобразуется в конкретный тип: Ilosos3 :: Ilosos.

Ещё мы начали использовать stack: эту задачу можно было сдавать только как stack-проект, и только через git.

Прошёл второй зачёт с устной и письменной частями (в обоих случаях средний балл — 0.6) и лекция по MapReduce tenich [3], и настало время инфобез-интермиссии (спонтанные получасовочки случались и раньше; эта же интермиссия продлилась три пары).

Мы обсудили, как работают криптовалюты from the ground up — от хэшей и до (почти) биткоина, что не так с мессенджерами (централизация коммуникаций, фрагментация, не-secure by default...), и — немножко — в чём вообще важность свобод и почему глобальная слежка — не всегда замечательная идея.

Поколение ЕГЭ

Попутно выяснилось, что антиутопии нынче не в ходу: 80% аудитории не читало ни "1984", ни "Мы", ни "Дивный новый мир".

Происходило это уже не в аудитории, а в открытом λектории.

Аудитория

До: интересные плакаты и иллюстратор книги, Степан Дмитриев

Лекторий

После: слева направо: закатывают глаза, опускают глаза, *тело*

Обнаружилось неожиданное: если что-то услышать, но не сделать на это упражнений (как с Haskell) или не записать, то это легко забыть. Поэтому появилась концепция: писать конспект. Но не просто, а вместе (в Etherpad).

Я здесь уже пишу, функтор ты контравариантный!

Стало понятно, что тимворк — это сложно.

После окончания интермиссии мы разделились: маленькие любители криптографии пошли писать RSA (и прочие MapReduce), а маленькие графоманы — писать книгу по Haskell.

Потому что если во время курса тебе было сложно читать из множества источников теорию на английском — то почему бы не написать свою, хорошую, годную и нестрашную?

Обложка книги

Обложка книги

И написали же! (Пока что только главу, но всё же.) — More on that later.

А ещё были мастерклассы: по React Native (@kulikovpavel) и Scala (@tvorogme).

В общем, получилось задорно.


Но мало. Так, внимательный читатель заметит, что слова на букву "м" выше нет. И про криптовалюты мы только поговорили, а свою не сделали. И даже распределённый чатик на libp2p [4] не успели.

Поэтому хочется повторить, и с размахом.

Поэтому мы вводим новое направление: Чёрная Лямбда.

Чёрная Лямбда

Обычно прикладные программисты живут на этаком среднем уровне абстракции: не зная, что происходит в виртуальной машине / компиляторе их языка (и тем более в железе) в особенных подробностях, но и не погружаясь в механизмы абстрагирования более вовлечённые, чем классы и функции — типа макросов или шаблонов. Или математики.

Это не плохо, но несколько ограничивает.

Поэтому на Лямбде мы будем двигаться в две стороны: в одну — абстракции срывая, и в другую — абстракции вводя. Вниз и вверх, в железо и в математику соответственно. Напишем hello world на Питоне — и расковыряем его интерпретатор. Напишем свой $mu$питон. Поковыряем байткод и структуры данных. Клавиатуру и её прошивку и merkle-деревья. Таки сделаем свою криптовалюту. На Rust'е. Попишем на C, чтобы понять, зачем Rust нужен. Изучим моноиды, и поймём, почему полугруппа — это как группа, только чуть меньше.

В планах — пары на улице, прогулочный семинар, странные плакаты и светодиоды в волосах. И ботать.

Приходите [5]. Будет приятно, вдвойне. Следующая смена — с 16 по 29 августа [6].

А если поботать — можно получить скидку или даже грант на приход. Вот таски:

Скрытый текст

Код можно писать на произвольном языке, компилировать в Brainfuck-подобные нельзя.

Блокчейн

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

Криптовалюта должна быть основана на блокчейне (один сервер с одной базой данных обычно этому не удовлетворяет).

Криптографически умный замок

Часто СКУД-системы и прочие хипстерские NFC-замки уязвимы к простым в реализации атакам типа копирования карты.
Задача: сделать замок для хакспейса, которым сможет пользоваться бабушка, и который будет максимально безопасен и при этом дешёв. Чем более массово доступные компоненты используются — тем лучше.
Требования (сортировка по важности):

  • устойчивость к копированию ключа и replay-атакам
  • возможность открыть дверь удалённо
  • разные привилегии для разных пользователей
  • расширяемость до нескольких дверей (или понимание, как это возможно было бы сделать)
  • возможность дать временный доступ произвольному человеку

Результат — это софт + список компонентов с прайсами и ссылками для закупки. Техническая документация приветствуется, и при должном уровне даже в отдельности от кода может принести вам плюшку (т.е. если вы весь таск хорошо продумаете, но код не напишите — это тоже неплохо).

Делать непосредственно физический замок необязательно, достаточно софта, который смог бы дёргать условные функции open :: Door -> IO () и close :: Door -> IO (). В целях демонстрации можно просто писать в консоль.

Вставить в Telegram-клиент Matrix.org

Взять Telegram Web / Desktop / Android и вставить в него поддержку протокола Matrix.org.

Сделать прототип нового CLI для Nix [7]

Консолидировать дискуссию в https://github.com/NixOS/nix/issues/779 [8] и, согласно этому, сделать прототип CLI.

Вопросы по таскам можно задавать ефрейтору по адресу [9].

Алгебра вдвойне вкусней, если это lambda way!

Веселитесь.

К участию мы приглашаем юных программистов с 13 до 18 лет включительно, подробности о школе здесь [10]. Для участия необходимо пройти небольшой диагностический тест, также есть возможность получить гранты и скидки, выполнив одно из заданий наиболее выдающимся макаром.
Если вам уже есть 18, возможно, вам было бы интересно быть ментором или спикером — пишите [11].

Автор: Школа GoTo

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/260995

Ссылки в тексте:

[1] Image: https://habrahabr.ru/company/goto/blog/333828/

[2] ефрейтора Волкова: https://habrahabr.ru/users/wldhx

[3] tenich: https://habrahabr.ru/users/tenich/

[4] libp2p: https://libp2p.io/

[5] Приходите: https://docs.google.com/forms/d/e/1FAIpQLSfJ5i2JdwfeoeIYHA2gC6V_hAofXdnlEx682_19y9qOAZIPRQ/viewform

[6] с 16 по 29 августа: https://goto.msk.ru/camp_summer/

[7] Nix: https://nixos.org/nix

[8] https://github.com/NixOS/nix/issues/779: https://github.com/NixOS/nix/issues/779

[9] по адресу: http://wldhx+3bff3c705d5160992ae0ab5b0dd6e282d7239b3433a2b8c858240d5eb44dd17bc25156899b1a9494a0aae042129399bc4c59d2e0d20a4edeaa46b4e6f1e4f557@wldhx.me

[10] здесь: https://goto.msk.ru/camp_summer

[11] пишите: mailto:school@goto.msk.ru

[12] Источник: https://habrahabr.ru/post/333828/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best