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
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
Забавный проект: https://github.com/gothinkster/realworld

Суть: коллекция реализаций клона Medium как со стороны backend, так и со стороны frontend. Причем спецификация едина, а вот реализаций как серверной так и клиентской стороны уже набралось довольно много! Т.е. можно вот просто так взять и поставить Django-сервер с Vue-клиентом - или что-то поинтереснее, скажем Kotlin+ClojureScript - и попробовать связку в действии.

Часть реализаций уже завершена, но большинство находится в разработке - это отличный шанс попробовать силы в какой-то технологии и поработать над проектом с обозримым результатом и чёткой спецификацией!

И если вдруг ваша любимая технология отсутствует в списке - он далеко не полон, разумеется - бегите и добавляйте, ведь это отличный шанс увеличить заметность вашего любимого диалекта LISP или реактивной GUI-библиотеки для COBOL.js :)
Периодически поглядываю на текущее состояние вещей вокруг Piet - это один из трех моих любимых эзотерических языков программирования.

Вот и сегодня я заглянул на страницу с примерами программ на сабже (http://www.dangermouse.net/esoteric/piet/samples.html) и порадовался - их стало больше, а значит язык живёт! Причем добавляются в т.ч. и "большие" примеры - тот же Prime Number Generator. И пусть часть программ явно сгенерирована, но всё равно авторы добавляют частички творчества даже в такие искусственные творения :)

#esoteric_programming_language
"Hello World" на Piet
Интерпретатор Brainfuck на Piet ;^)
Если вгруг решите поиграться с Piet, вот вам online IDE для оного: http://www.rapapaing.com/blog/?page_id=6
Подкинули на днях интересный образчик "языка", если можно так сказать: https://github.com/aaronduino/asciidots
Описание гласит: "AsciiDots - The result of combining ascii art, electrical engineering, and programming". Программы-схемы выглядят так (это вычислитель факториала):
 /---------*--~-$#-&
| /--;---\| [!]-\
| *------++--*#1/
| | /1#\ ||
[*]*{-}-*~<+*?#-.
*-------+-</
\-#0----/

Примечательно, что в отличие от большинства других языков с "2D-синтаксисом" (BeFunge, False, того же Piet) этот - не стековый. И вообще, программы на языке действительно похожи на электрические схемы с путешествующими по ним электронами. Занятная штука! Написана на #python
Процесс отладки программы (Телеграм пожал гифку, так что лучше смотреть ту, что в README репозитория):
https://raw.githubusercontent.com/aaronduino/asciidots/master/dots_debug.gif
Мне этот AsciiDots, почему-то, напомнил клеточный автомат WireWorld (https://en.wikipedia.org/wiki/Wireworld). Последний тоже поделирует электрические схемы, правда только логические, но зато полон по Тьюрингу!

Выглядят Wireworld-схемы так: https://upload.wikimedia.org/wikipedia/commons/1/13/Wireworld_XOR-gate.gif

#cellular_automata
Если вы вдруг пишете на #haskell, то, возможно, накопили своих пунктиков по поводу стендартной Prelude (для тех, кто не в курсе, это такой неймспейс, который импортируется неявно в любые исходники и содержит (или экспортирует) предметы первой необходимости типа print, map и +).

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

Поэтому так ценны подобные странички: https://guide.aelve.com/haskell/alternative-preludes-zr69k1hc - здесь упомянуты многие популярные прелюдии, и для каждого образчика указано краткое описание "почему?"/"для кого?", плюсы и минусы и проч. Организована информация удобно и охват имеет широкий. Буду пользоваться :)
Интересная штука - Urn, #lisp (Lisp-1) для #lua:
https://squiddev.github.io/urn

Умеет compile time макросы, выдаёт самодостаточные Lua-файлы, REPL тоже в наличии, разумеется. Есть pattern matching, что приятно. Есть threading macroses, как в #clojure. Вобщем, неплохой вариант в ситуации, когда нужно что-то написать для Lua VM, но именно на Lua писать не хочется или же просто хочется S-выражений :)
Вот прямо сейчас проходит голосование за участников LOWREZJAM 2017 - это такой конкурс игроделов, где оные соревнуются в написании игр, работающих в разрешении 64x64 пикселей. Ограничение, прямо скажем, довольно суровое! Но тем интереснее участникам раскрывать свой творческий потенциал!

Ссылка: https://itch.io/jam/lowrezjam2017

#gamedev #pixelart
Победитель прошлого года:
http://i.imgur.com/IjwJZkZ.gif
(поиграть можно тут: https://cronus.itch.io/umbri)
Ещё одна утилитка на #rust: https://the.exa.website/
Быстрая (по словам авторов) и более современная замена ls. Умеет выводить различные дополнительные данные, сразу выводит размер в человекочитаемом виде, может отображать git-статус - приятная штука.

Ах да, ещё может заменить собой tree - тоже умеет выводить иерархию файлов и папок, но уже с дополнительной информацией.
Пример вывода
Внезапно прорекламирую канал: https://t.me/kanaflow
Внимание, внутри теоркат, типота, вот это всё! Но материал подаётся автором по мере изучения оного оным, поэтому сложность, очевидно, будет нарастать плавно, а пока всё достаточно просто и понятно :)
Вот пример публикации. ИМХО, хорошая работа!
Forwarded from это кана
ADT - произведение и копроизведение типов

Тип можно трактовать как множество значений (На самом деле это не всегда так). Мощность типа - количество элементов в этом множестве.

Произведение типов - декартово произведение множеств, то есть множество всех возможных пар, где первый элемент - элемент первого множества, а второй - второго.
A = {a, b, c}
B = {x, y}
A×B = {(a, x), (a, y), (b, x),
(b, y), (c, x), (c, y)}

Мощность произведения двух множеств равна произведению мощностей множителей.
|A × B| = |A| × |B|

Пример в хаскеле:
-- тут мы говорим, что `x`
-- имеет тип `(Int, String)`
x :: (Int, String)
-- а тут мы говорим, какое у
-- x значение
x = (1, "hello")

-- делаем тип IntStringPair
-- значение которого является пара
-- из числа и строки.
-- Для создания значения этого типа
-- используется конструктор MkIntStringPair
-- который принимает число и строку
-- и создает элемент типа IntStringPair
data IntStringPair = MkIntStringPair Int String
y :: IntStringPair
y = MkIntStringPair 1 "hello"

-- Конструктор и тип могут иметь
-- одно название, они не будут
-- пересекаться, ведь типы можно
-- использовать только в сигнатуре,
-- а конструкторы только в выражениях
data Triple a b c = Triple a b c
z :: Triple Int String Int
z = Triple 1 "hello" 2

Меченное объединение, сумма или же копроизведение типов - объединение двух множеств так, что каждый элемент нового множества помечается исходным множеством, благодаря чему новый тип будет содержать все копии значений из исходных множеств.
A = {1, 2, 3}
B = {3, 4}
A + B = {A 1, A 2, A 3, B 3, B 4}

Как видно, каждый элемент нового множества помечен исходным множеством, поэтому число 3 встречается дважды, ведь A 3 ≠ B 3.

Очевидно, мощность такого типа равна сумме мощностей слогаемых.
|A + B| = |A| + |B|

В хаскеле суммы типов создаются с помощью символа | в определении типа (или же с помощью определений конструкторов с GADTs).
data Either a b = Left a | Right b
x, y :: Either Int String
x = Left 10
y = Right "hello"

data Bool = False | True
-- изоморфно Either () ()
-- где () - единичное множество,
-- то есть множество из одного элемента
-- () = {()}
-- (Важно не путать ()-тип и ()-значение)
z, u :: Bool
z = False -- Left ()
u = True -- Right ()
Просто оставлю это здесь:
https://github.com/LightningJimmyJoeJohnson/Anime-Girls-Holding-Programming-Books
Вдруг вам понадобится картинка с анимешной девицей и книгой по вашему любимому ЯП :)

Что примечательно, по кол-ву присутствий на картинках с большим отрывом лидирует SICP, что с одной стороны радует, с другой - вовсе не удивительно :D

#anime #meme #picture
Пример
Довольно интересная статейка на #haskell WiKi: https://wiki.haskell.org/Haskell_logos/New_logo_ideas - тут собраны работы, участвовавшие в The great 2009 Haskell logo contest (кстати, именно в рамках этого конкурса был выбран текущий логотип!).

Некоторые образчики очень занятны и даже довольно круты, советую пролистать и приобщиться, даже если вы не интересуетесь #haskell (зря!)

P.S. Тут ещё немного текста и картинок по истории лого: http://www.willamette.edu/~fruehr/logos/intro.html