?

Log in

No account? Create an account
Про сучасні події в Україні
shadow
dmytrish
Винесу з коментів до http://artem-r.livejournal.com/374752.html :

Жили-были два брати в соседних квартирах. Старший был здоровяк и алкоголик, младший тоже алкоголик, но здоровье было не ахти. Они любили запойно побухать, старший брат разливался пьяными речами о любви к младшему (прочем, так же часто они и грызлись). Пока у младшего брата здоровье не выдержало и его не увезли в отделение интенсивной терапии, где он провалялся три месяца. Побывал он тогда при клинической смерти, всерьез о жизни задумался — и подумал, что так жить больше нельзя, что теперь будет год не бухать (а потом только по праздникам) и нормальную работу найдет. Выписался, приехал домой, заходит к брату, а тот в жестоком запое. Рассказал младший, что мол так и так, хватит бухать. Старший на него посмотрел, хлопнул еще литр — и у него белочка началась, узрел он чертиков вместо младшего. «Ах ты ж сука, обуел совсем, меня не уважаешь, сейчас беса буду выгонять, это все эти западные врачи суки виноваты, я ж не буду один бухать!» — и сорвался махать кулаками. Младший забежал в свою квартиру, успел закрыться на замок в гостинную, старший же до сих пор орет в коридоре его квартиры «Сука выходи, буду беса выгонять!» на весь дом и ломает дверь. Так вот, это ваше настроение в моей аналогии — это больше крик «Вызовите санитаров, кто-нибудь!».

ЖЖ-репресії
Putler
dmytrish
Схоже, що сьогодні зарубали жж bytebuster463, і схоже, через українські новини:

http://ludmilapsyholog.livejournal.com/223929.html

Суки. Видно, запах горілих шин на Красній площі уже лоскоче ніздрі цензорів.

Красная Площадь в дыме шин

Bandera 9 from Outer Space
shadow
dmytrish
Banderas on UFOs attack peaceful people of Crimea

Hilarious!
Putler
dmytrish

Це сталось!
GuyFox
dmytrish
yanuk

Героям слава!

Про тітушок
GuyFox
dmytrish
Недавно в ефірі на Громадському був колишній голова СБУ часів Ющенка, він розповів немало цікавих речей. Але було питання, на яке він не міг відповісти: хто такі тітушки, чому вони так організовано полізли з усіх щілин, як влада їх організовує, хто конкретно цим займається в таких масштабах.

Після недавніх суперечок в інтернеті стало зрозуміло, що їх існування вимагає пояснення, інакше вони можуть виявитись просто продуктом діяльності ЗМІ (як не так давно опозиція знецінила слово «провокатор», застосовуючи його до кожного радикала і людей із симпатіями до радикалів, хоч справжні провокатори також мали бути).

Те, що влада одномоментно змогла найняти стільки напівкримінальних елементів, виглядає не дуже правдоподібно: навіть із такими грошима організація цього всього могла займати немалий час. І зараз у мене є гіпотеза, яка проходить хоча б елементарне лезо Оккама: тітушки насправді організовувались на вибори 2015-ого. Янукович навіть із колосальним адмінресурсом і можливістю підкупу виборців у 2004-му побачив, що це не достатній інструмент для забезпечення перемоги на виборах. Тому, швидше за все, мав почати шукати запасні інструменти. Міліція навіть за часів недавнього беззаконня була частково зв’язана рамками пристойності та статуту, до того ж це досить бюрократична і неповоротка організація, яка добре працює в довгій перспективі, але на виборах, коли все вирішують дні і години, не те. Можливо, саме тоді організатори майбутніх виборів могли подумати про тактичні групи із напівкриміналу: вони не зв’язані жодною законністю, відповідальність за них ніхто не несе (а з контрольованою міліцією і придушуваними ЗМІ легко сховати кінці в воду), вони мобільні, непередбачувані. І я підозрюю, що якби не повстання зараз, весь цей сірий слиз у набагато більших масштабах вивалився б на виборчі дільниці та акції протесту в 2015-ому.

Маленькі відкриття дня
sicp
dmytrish
Цікава поведінка Guile (реалізація Схеми від GNU) на виразах ( . val): він просто повертає val, тоді як інші інтерпретатори видають синтаксичну помилку.

Ще виявив для себе існування таких форм лямбд: (lambda args (display (length args))). Раніше якось не задумувався, як завести лямбду із змінною кількісьтю аргументів без фіксованих початкових (як у (lambda (fst . rst) (display (cons fst rst))) ).

SECDScheme news: vectors, strings, i/o
bartson
dmytrish
Стан справ у моїй віртуальній машині SECD: після того, як я таки наважився ввести в її пам’ять heap для масивів, все понеслось із великою швидкістю і зараз це уже більше Scheme, ніж PicoLisp.

Масиви довго мене лякали і я читав статті про опис масивів залежними типами, здригаючись від перспективи виставити в відносно функціональне середовище явний set! над пам’яттю. Але коли я таки написав масиви, код сам все прояснив: vector-set! (присвоєння клітинці значення) написався сам собою як явний drop попереднього значення в клітинці масива і init_with_copy іншим значенням. Таким чином: у мене є масиви, на яких я можу робити мутабельні операції через vector-set!, вони відносно контрольовані і в достатній мірі нагадують IORef — сам масив це тільки незмінний handle, посилання на реальну пам’ять в кучі. Мене також лякала комбінація reference counting та володіння клітинок масивами — але копіювання значень також дуже просто все вирішило: «звичайна», спискова куча не може володіти клітинкою із масива, вона лише може отримати копію значення, отже, клітинка масива завжди має неявний refcount 1 (хоч на сам масив можуть посилатись скільки завгодно клітинок будь-звідки).

Коли в мові є масиви, рядки робляться елементарно: CELL_STR трактує свою пам’ять не як масив клітинок (як CELL_ARRAY), а як набір байт, причому для приємної розминки я вплиляв туди ще й власне декодування/кодування UTF-8 (конструктивна критика вітається), так що string-length рахує правильну кількість codepoints (да, я знаю різницю між символом і codepoint).

Вчора дописав тип CELL_BYTES, який відповідає схемівському bytevector та підтримку його синтаксису (#u8(77 101 108 108 111 0) - представлення в ASCII рядка "Hello").

I/O довго зводився до двох опкодів, READ та PRINT, які приблизно відповідали нативній реалізації (read) та (write). Недавно це змінилось: з’явився тип клітинки CELL_PORT, за яким можливі два бекенда: рядковий (у пам’яті) та POSIX-файловий (тобто схемівські (open-input-string "data here") та (open-input-file "/path/to/file.scm"). Це одразу абстрагувало проблеми із тим, як SECD працює всередині мого недоядра, де досі немає файлової системи і де дані вкомпільовуються в бінарник). Таким чином, зараз уже працюють open-input-file, open-input-string, read-char, read-string, close-port. Вивід (open-output-file, write-string, etc) досі не неписаний, але в разі потреби напишеться за десять хвилин.



Про підтримку платформ: збирав SECD на Андроїді в TerminalIDE, поки що не працює через закриті дефолтні stdin та stdout. Також вкомпільовував у свою спробу написати POSIX-подібне ядро, COSEC. І основна платформа, звичайно ж, POSIX.



Ще один амбіційний напрямок — додати в машину зелені потоки та неблокуче I/O. Це, звичайно, потребує, щоб усі нативні операції мали свій watchdog, який обмежує час їх виконання, та могли відновлювати своє виконання. Але загалом, враховуючи дуже явний стан машини, збереження стану потоку виглядає дуже просто. І взагалі, цікаво спробувати компілювати Erlang у SECD (для цього, в принципі, все є, за винятком tuples, а з рядками у мене уже все краще, ніж у BEAM).



Можливо, маячня, але подумалось, що можна реалізувати контроль над ефектами у мові як обмеження неймспейсів, до яких має доступ функція. Строго (і по темі SECDScheme) кажучи, створити віртуальний модуль io, куди зібрати всі ті функції, які б у Хаскелі були в IO.

Правда, один абстрактний підводний камінь я уже ніби бачу — модулі це множини функцій у наївному розумінні, так що це типізація у наївній теорії множин (правда, не сказав би, що я багато розумію в теорії типів). Із практичних наслідків — що незрозуміло, чи всі комбінації ефектів матимуть сенс і наскільки гнучкий такий механізм. Покритикуйте, будь-ласка (можливо, хтось уже натрапляв на якусь студентську спробу склепати «монади на модулях»).

нужно смотреть, пока не запретили^U хрін їм
GuyFox
dmytrish
Краса яка:
Originally posted by sassa_nf at нужно смотреть, пока не запретили

Час вчити матчастину
GuyFox
dmytrish
Власне:
http://sprotyv.org/book/FDTD_Russian.pdf

A Prelude quirk
root
dmytrish
ghci> import Data.List
ghci> intersect "ubu" "ntu"
"uu"


Як у перетин множин можуть потрапляти елементи (друге "u" у прикладі), яким немає відповідника в іншій множині?! По-моєму, це суперечить визначенню перетину. А ще це мені вчора завдало трохи головного болю, коли я написав шматок коду, який не працював, хоч і був ніби правильним, а все через Data.List.intersect.

Причому документація це підносить не як баг, а як фічу!

P.S. Перечитав документацію ще раз, все-таки типи це не повна документація в випадку Хаскеля і із ознайомлення із типовою сигнатурою в ghci робити висновки про роботу функції іноді буває зарано: в цьому випадку елементи першого списка тестуються на присутність у другому, а мені був потрібен математичний перетин двох колекцій (Set.intersection мені не підходив через те, що треба було зберегти кількість дублікатів і вибрати саме дублікати, які спільні для двох колекцій).

А, і це пояснює, чому Data.List.intersect не називається так само, як Data.Set.intersection.

SECD machine implementation in C: general design
sicp
dmytrish
Виписав враження та винесені уроки від написання на Сі простого функціонального рантайму для чистої підмножини Scheme, реалізації абстрактної машини SECD, тут:

http://dmytrish.wordpress.com/2014/01/09/secd-in-c-design/

Далі буде.

От, до речі, моя крихітна лісп-машина (інтерпретатор SECDScheme, портований у моє недоядро COSEC):

Майки vs світери
Бо
dmytrish
Poll #1951142 майки vs светри

Ви носите світер із майкою чи без?

без, завжди
2(25.0%)
без, коли нехолодно
1(12.5%)
з, завжди
4(50.0%)
з, коли холодно
0(0.0%)
свій варіант (із коментарем)
1(12.5%)

CEK і нумерали Чорча
sicp
dmytrish
CEK-машини взагалі уміють рахувати нумерали Чорча?

Прості приклади типу (λx.λy.x) 1 2 обчислюються, але коли я намагаюсь обчислити succ one, де succ = λn.λf.λx.f (n f x), one = λf.λx.f x, і мій доморощенний CEK-інтерпретатор, і я вручну упираємось у стан < clos(λf.λx.f (n f x), E1) | E1 | nil > де E1 = { n -> clos(λf.λx.f x, {}) }, хоча в ідеалі хотілось би отримати визначення two = λf.λx.f (f x). Що я роблю не так?

Тобто так, якщо взяти і волюнтаристським рухом підставити n = λf.λx.f x в вираз λf.λx.f (n f x), то справді виходить two. Але ж у CEK таких правил немає.

The warm and fuzzy thing: Stream
Бо
dmytrish
Чому монади ніхто не порівнює із stream? Поки що всі приклади монад, які я знаю, більш-менш вкладаються в поняття stream, потоку:

  • [a] - потік даних, потенційно нескінченний. Причому, як мені зараз здається, варто було б розрізняти список як тип даних і як скінченний об’єкт у eager-сенсі і як контрольну структуру для виконання, lazy stream (простий приклад: sort/length/reverse приймають саме перше, не друге, take/drop/zip/filter навпаки). Тут Хаскель ототожнює два різні поняття в одне.

  • Maybe a — продовжувати чи обривати потік

  • State s a — потік зрізів стану

  • IO — stream взаємодій із зовнішнім світом


У Одерського також є приклади монад, які прямим чином візуалізуються у вигляді потоків подій:
Future, Observable. Правда, згодний, що Try (ErrorT) якось не дуже вкладається, потік надзвичайних ситуацій?

Коротше, the warm and fuzzy thing могла б називатись Stream: у будь-якого потоку є певні атомарні стадії, але є і контекст, який їх скріплює. Правда, це дійсно сильно перевантажений смислами програмістський термін, тому він може бути невдалим, довелось би щоразу уточнювати, що це Stream, який відповідає математичним монадам.

Fin 2
bartson
dmytrish
Вчора довго намагався зрозуміти оце:

data Fin : Nat -> * where
    Fz : {n : Nat} -> Fin (Succ n)
    Fs : {n : Nat} -> Fin n -> Fin (Succ n)


Намагався розписати вручну елементи, присутні в Fin 2, це Fs 2 (Fz 2) та Fz 2, я правильно розумію? Тобто саме невизначеність того, чи Fz, чи Fs, дозволяє на кожному кроці або створити більше число, або зупинитись на меншому від n? Чи це n типів, які є підмножинами n+1-атого, Fs Zero та Fz (Succ Zero)? Чи треба далі курити бамбук залежних типів, щоб повернутись до цього визначення, щоб зрозуміти, що ж тут робиться? Як саме тут ставиться бар’єр на верхнє можливе значення?

P.S. Можливо, варто було б спочатку із цим розібратись на знайомішій території із {-# LANGUAGE GADT #-}.

Christmas Warning
Бо
dmytrish
http://fare.livejournal.com/174589.html :

Let's assume Santa visits all NYC households with children at midnight, delivering a measly average of .2 kg of toys at each place. With 30% of 3 million households having children, that's 9e4 stops. Assuming the households more or less equidistributed over the 4e8 m^2 area of city, a circuit to cover them with 9e4 stops, using either a linear scan or a fractal scan a la Hilbert Curve or Polya sweep has a length of the order of sqrt(surface*households) = 6e6 m. Let's assume one order of magnitude savings because of non equidistribution, so only 6e5 m, to cover in 60s. Therefore the average speed of Santa, assuming instant stops, is 1e4 m/s. The average weight of toys he has to carry is 9e4*.2/2 kg = 9e3 kg. So his kinetic energy while traveling is .5 * 9e3 * (1e4)^2 J = 4.5e11 J. But since he has to stop and resume 9e4 times, the total energy released in the air while decelerating alone is 9e4 * 4.5e11 J = 4e16 J, which is a hundreds of times worse than the Hiroshima Bombing, except directly delivered to households with children. I recommend you not be in town or anywhere near children at midnight on this (or any) Christmas.

Міфи про Майдан
Бо
dmytrish
http://saint-daemon.livejournal.com/102135.html

Кінець пострадянської епохи
Бо
dmytrish

Сподіваюсь, ця подія стане символом кінця пострадянської епохи в Україні: останній пам’ятник Леніну в центрі Києва повалено (13:33 на відео). Для багатьох (і для мене) ця подія  — це падіння берлінської стіни в мініатюрі, недаремно комуністи навіть винаймали приватну охорону для цього пам’ятника.

Я не знаю, що буде далі, якою буде ця нова Україна, як вона впорається із Тайожним союзом, економічними проблемами, внутрішніми суперечностями, але не забрати відчуття того, що ми пройшли якусь історичну віху:





Так, багато людей у Фейсбуку вважають це вандалізмом або провокацією, і так, я не підтримую спосіб, в який це сталось, але не можу не відчувати полегшення від того, що це сталось. Пам’ятнику Гітлеру не місце в центрі європейського міста (в найкращому разі — в спеціалізованому музеї)

Громадяни затримали п’яного міліціонера!
Бо
dmytrish
Yes, not kidding:

https://www.facebook.com/EuroMaydan/posts/530737907022551

Люди, я вас люблю! З такими можна залишатись у країні.