brain_dump_etc
637 subscribers
99 photos
4 videos
3 files
383 links
Дампы мыслей, свалка ссылок, программизмы, вот это всё (ВНИМАНИЕ: много вкусовщины!)

Автор надампленых мыслей: @astynax

Чат к каналу: https://t.me/brain_dump_chat
Плейлист трансляций: https://youtube.com/playlist?list=PLUFoWyWge7mrg4GqHLMZV62gGC912PCGq
Download Telegram
(Что-то давно не писал сюда - запал пропал, как обычно :( Попробую исправиться)

Facebook открыл исходники ещё одного инструмента на #haskell: https://github.com/facebookincubator/duckling

Как говорит описание, это Language, engine, and tooling for expressing, testing, and evaluating composable language rules on input strings..
Если кратко, то с помощью этой штуки можно брать строки вида
"the first Tuesday of October"

и получать
{"value":"2017-10-03T00:00:00.000-07:00","grain":"day"}

Подобным же образом разбираются меры объема ("3 cups of sugar") и прочие числительные ("eighty eight").

Кмк, такая штука отлично себя покажет в связке с STT и ботами вообще. Скажем, можно написать бота, кторый сможет разобрать человекописанный рецепт пирога и составить список покупок, соответствующий ингридиентам! Или можно просто сделать напоминалку, понимающую фразы типа "завтра в три пятнадцать напомни купить пару лампочек" :)

Важно, что движок подразумевает расширение и на первый взгляд расширяемость сделана довольно удобно.
Наткнулся на "релизацию" matplotlib на #haskell: https://github.com/abarbu/matplotlib-haskell

Оказалось, что оная просто запускает #python под капотом :) И я лично считаю такое решение имеющим смысл - сил в matplotlib вложено столько, что реализовать аналог мало кто отважится. И да, для Haskell есть diagram и надстройки над оным. Но matplotlib а) сразу умеет очень многое "из коробки" б) синтаксически приближен к MatLab (в части работы с визуализацией), что делает matplotlib отличным инструментом для прикладников, привыкших использовать упомянутый проприетарный продукт.

Эта библиотека - ещё один шажок, приближающий Haskell к "победе над python" в нише ML и прочей "прикладухи" :)
Интересный прокет: Hackett (https://github.com/lexi-lambda/hackett)
Представьте себе, это реализация #haskell ('98) на #racket! Да, статическая типизация с выводом типов, алгебраические типы данных, сопоставление с образцом, даже классы типов! И при этом вся мощь макросистемы Racket!
Конечно же, проект не претендует на роль ещё одной полноценной реализации языка Haskell, но "привнести любимые фишки в Racket" вполне способен - тем Racket и славен, что всячески поощряет написание и встраивание своих языков :)
Тем интереснее будет, когда будет готов REMIX (см. https://www.youtube.com/watch?v=r1kE3R26dK0), а вместе с ним и возможность вставлять куски кода на одном языке в код на другом, имея полную поддержку со стороны IDE для обоих языков (да, хаскелевы quasi quotes, это камень в ваш огород!)
Внезапно обнаружил, что есть #elm'like либа для GUI-строения на F#. Компилируется в JS силами Fable. Лежит тут: https://fable-elmish.github.io/elmish/ Надо будет попробовать для интересу :)

#fsharp
Шикарная интерактивная обучалка #git'у: http://learngitbranching.js.org/ Учит и азам (коммиты, бранчинг), "пост-азам" (rebase и cherrypicking) и даже идет немного дальше :)
Livecoding на Twitch добрался и до #rust: https://www.twitch.tv/tsoding - тут пишут электронную музыку на сабже.

Что же, начинание, бесспорно, полезное, хоть и не каждому подходит такой формат "развлечений" 😉

Зато сделана трансляция качественно, "диктора" слышно хорошо, да и тематика не самая "попсовая". Автор даже разместил ссылку на свои dotfiles: редактором у него #emacs работает, что лично меня радует 👍, а операционкой - #nixos!
Хорошее руководство по QuickCheck https://begriffs.com/posts/2017-01-14-design-use-quickcheck.html Объясняет саму концепцию property based testing и учит описывать генераторы и свойства. Даже учит оценивать, как распределяются генерируемые аргументы и как покрывают область допустимых значений (!) - такое нечасто встретишь в статейках про PBT (обычно авторы ограничиваются примером про разворот списка).

#haskell #tdd
"Всю жизнь" думал, что знаю регулярные выражения достаточно хорошо, уж по крайней мере PCRE. Знал, что в Perl можно внутрь выражений вставлять код на Perl (не пользовался ни разу, но был в курсе).

Оказалось, что не только в Perl, но и вообще в PCRE есть условные выражения и рекурсия! Более того, в условии можно узнать, например, что сейчас осуществляется непервый проход, и тем самым управлять рекурсией!

С подобными фичами можно писать выражения типа такого
^(?:A(?=A*+[^AB]*+((?(1)\1)B)))++[^B]*+\1$,
а оное, оказывается, в .Net ещё и "улучшить" можно:
^(?>(?<Count_A>A)+)(?>[^AB]*)(?>(?<-Count_A>B)+)(?(Count_A)(?!))$

Использовать я это всё, конечно, не буду. Приспичит - на комбинаторах парсер напишу!

Но если вдруг кому-то будет интересно, сходите сюда: http://www.rexegg.com/regex-conditionals.html

#pcre #regex
🔥1
Ну вот, эта регулярка проверяет баланс скобок в произвольном S-выражении:
(?(R)|^)\([^()]*((?R)[^()]*)*\)(?(R)|$)

Когда-то (ещё вчера) я думал, что такое на #regex не сделать...
Люблю процедурную генерацию контента, особенно графического. Вот интересный образчик "прямо в браузере": http://alastor.instant-adventures.net/

Генерируются планеты Кластера Аластор - автор вдохновлялся творчеством Джека Вэнса. Обратите внимание: ландшафты - живые (луны двигаются)!

Надо будет что-то подобное накодить на elm/purecsript :)

#procedural_generation
Пример
Делать реализации The Elm Architecture (#tea) для своих языков, это, похоже, довольно популярное занятие! Выше я уже писал про TEA для F#. Теперь, вот, делюсь TEA для #swift: https://github.com/chriseidhof/tea-in-swift
Relm (http://relm.ml/relm-intro) - библиотека для построения GUI на основе GTK+ с применением подхода "The Elm Architecture" (#tea), на этот раз - на #rust
Зарелизился Pharo 6 (ещё в начале июня, а я всё торможу и не пишу об этом) - "чисто объектно-ориентированный язык", диалект (скорее даже "сборка") #Smalltalk.

В релизе
- перешли на 64bit для OSX/Linux (наконец-то!)
- прикрутили систему контроля версий (пока она самоедльная, но в релиз вошла система версионирования кода в Git, которая будет основной в Pharo 7)
- сделали пристойный FFI для выхода за пределы SmallTalk VM
- добавили поддержку иммутабельных объектов!
- добавили тёмную тему (САМОЕ ВАЖНОЕ УЛУЧШЕНИЕ!)

Что приятно, Pharo стал частью OpenSmalltalk Initiative - теперь это не просто сторонняя поделка!

Кстати, нынче на сайте Pharo (http://pharo.org/) есть курс (#MOOC) по Pharo! Правда, пока курс проводится по пятой версии, но концепции языка не поменялись, так что можно проходить и на Pharo 6 :)
Если игрострой близок вашему сердцу, и вы всегда хотели написать свою игру, и тем паче свой "Рогалик" (#roguelike), то настоятельно рекомендую присоединиться к мероприятию, которое проводит сабреддит по рогаликостроению: https://www.reddit.com/r/roguelikedev/wiki/python_tutorial_series

В рамках мероприятия все желающие читают статьи, публикуемые организатором, и шаг за шагом делают свои версии игры. Материал расчитан на начинающих питонистов, но использование #python не обязательно (я, вот, на #haskell свой рогалик пишу 😉). Более того, можно заявить о своем проекте в коментариях, что приведет к появлению вашего проекта в списке участников. Список уже немал, и постоянно растёт и вместе с ним растёт кол-во языков, которые используют авторы проектов. Так что даже если вы не хотите писать в одиночку, можете напроситься в уже существующий проект - думаю, большинство авторов будет непротив.

Кстати, помимо обучающих статей есть ещё и соответствующая серия видео (для тех, кто любит такое): https://www.youtube.com/playlist?list=PLKUel_nHsTQ1yX7tQxR_SQRdcOFyXfNAb

#gamedev #tutorial
Когда-то давно я уже натыкался на эту серию видео, а тут мой товарищ о ней напомнил: https://www.youtube.com/playlist?list=PL78FD414366D03B3C - обстоятельный и подробный курс видео про пайку.
Да, курс старый. Да, затрагивает только монтаж в отверстия (и даже пайку внавес на макетки со штифтами!). Но зато хорошо объясняет, например, физические принципы данной формы соединения!
Рекомендую к просмотру хотя бы выборочно.

#diy #electronics #soldering
https://www.youtube.com/playlist?list=PLGLfVvz_LVvSX7fVd4OUFp_ODd86H0ZIY - плейлист с кучей видео, каждое из которых даёт введение в какую-то конкретную технологию: это и языки типа #lua, #swift, #kotlin, #haskell и библиотеки типа express.js и jQuery и даже совсем-не-языки, такие как Twitter Bootstrap. В целом вполне неплохой способ посмотреть на что-то новое за обедом :)
Откопал "на антресолях" один из сових первых проектов на микроконтроллерах: USB-фицированный игровой манипулятор (joystick) от "Электроника БК 0010-01". USB реализован программно на базе библиотеки VUSB. Библиотека позволяет на микроконтроллерах AVR с тактовой частотой от 12МГц разрабатывать устройства, работающие в режиме USB Low Speed - обычто это либо CDC-устройства ("виртуальный последовательный порт"), либо HID-устройства (Human Interface Devices). В моём случае имитируется HID-joystick с двумя дискретными осями и двумя кнопками.
Вот так это выглядит
USB типа B тут, очевидно, привнесённый, но всё остальное - оригинальное!
В системе девайс видится как
$ lsusb 
...
Bus 002 Device 008: ID 16c0:05df Van Ooijen Technische Informatica HID device except mice, keyboards, and joysticks
...


Кого-то может смутить "except ... joysticks", но обычно хоббисты нагло используют именно эту пару id для своих устройств: 16c0:05df.

Что в Windows (пробовал давно, ещё на XP), что в Linux джойстик определяется и работает нормально:
$ jstest /dev/input/js0 
Driver version is 2.1.0.
Joystick (www.obdev.at "Electronika" joystick:)) has 2 axes (X, Y)
and 2 buttons (Trigger, ThumbBtn).
Testing ... (interrupt to exit)
Axes: 0:-32767 1:-32767 Buttons: 0:off 1:off