Home
Алексей Махоткин [entries|archive|friends|userinfo]
Alexey Mahotkin

[ website | Алексей Махоткин: домашняя страница ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| Блог "Техническая книга" | Version Control Blog | Mircea Eliade | Букинистические магазины Москвы ]

(no subject) [Dec. 4th, 2009|01:58 am]
http://mickey-mauser.diary.ru/p87447122.htm

http://zhzhitel.livejournal.com/165404.html

уникальное будет произведение! завязка такая:

"четыре хабалки живут в одной квартире. ВНЕЗАПНОСТЕ в соседнюю квартиру въезжает пятая хабалка."
link1 comment|post comment

(no subject) [Nov. 29th, 2009|09:45 pm]
Update: confirmed.
link2 comments|post comment

(no subject) [Nov. 28th, 2009|09:40 pm]
во втором вагоне ехал коллега

аэрофобия у человека

известий нет
link5 comments|post comment

(no subject) [Nov. 25th, 2009|02:27 pm]
http://www.vzsar.ru/news/2009/11/25/umer_dmitriy_tolmackiy.html

Толмацкий умер от гриппа

у меня просто нет слов

я только хотел ему отправить наконец этот несчастный Aryan Aquariums

R.I.P.
link1 comment|post comment

(no subject) [Nov. 25th, 2009|01:40 am]
"Рождественская история" (мы, конечно же, смотрели в 3D-варианте) снята чрезвычайно близко к тексту -- к счастью я как раз пару месяцев назад прочитал собственно произведение. Некоторые моменты, мне кажется, современный зритель даже не до конца понимает -- те же самые работные дома, что это такое?

гибкость мультипликационной среды используется на полную, с мучительными порой эффектами augmented reality (все эти полупрозрачные полы). Вообще, дух прошлого -- это явно что-то из постэффектов психотерапии. Дух настоящего -- видимо, ФЭА. Дух будущего -- жёсткие диссоциативы, плюс совершенно шаманистические проходы типа момента про сдирание плоти с костей.

Не говоря уж про встречу с доппельгангером, к тому же мёртвым.

В общем, кино интересное.
link2 comments|post comment

(no subject) [Nov. 16th, 2009|09:10 pm]
Козявку забрали.

хороший котик будет, быстрый
linkpost comment

(no subject) [Nov. 15th, 2009|01:19 am]
http://cheval-academiq.livejournal.com/71550.html

пользуясь освободившимся местом в квартире, захостил у себя этого пусечку.

ему нужен хозяин
котёнок совсем мелкий
пешите!

найти бы того кто его выгнал и уебать
link5 comments|post comment

(no subject) [Nov. 9th, 2009|06:25 pm]


ALL HAIL MONADIC FAIL
link1 comment|post comment

(no subject) [Nov. 8th, 2009|04:26 pm]
Кирпичёв правильно пишет про небрежность интуитивного понимания императивных языков: http://antilamer.livejournal.com/300607.html.
 
Однако, мне кажется, что важно было бы озвучить, что всё то, что сейчас скрывается под именем "монада" -- само по себе достаточно спутанно в плане педагогики и евангелизма.  Классическая шутка SPJ/Вадлера звучит как "нам следовало назвать ЭТО warm fuzzy things, чтобы не пугать людей теоркатом".  Шутка поразительно недальновидная.   Проблема лежит в той же плоскости, что и называние стоящих перед тобой задач словом "stuff" (это то, с чем борется Аллен в своём GTD).  
 
Монады в настоящий момент являются миру как сложный ком из исторически обусловленных причин, проблем, решений, технических возможностей и теоретических основ (как алгебраических, так и аспектов теории вычислений). 
 
Все эти наслоения можно (и нужно) расщепить в первом приближении так (порядок приблизительно случайный):
 
  • стремление к экспликации эффектов (чистое внедрение императивно-подобных моментов в вычисление), (см. труды Вадлера);  здесь мы включаем ввод-вывод, STM, параллельные вычисления и проч.)
  • удобный механизм для материализации базовых микро-стратегий вычисления -- вызов функции (call-by-name/call-by-value), многозначность, смена состояния (присваивания!), обработка исключений, останов при неудаче, continuations, бэктрекинг;
  • typeclasses как механизм внесения монад в язык, и как следствие -- удобный механизм для мета-перехвата вычисления (невероятно удобно для domain-specific embedded languages);
  • строгая проверка типов, проистекающая из использования typeclasses, и позволяющая механически проверять корректность использования объектов;
  • существование монадических законов, в которые укладываются монады, что позволяет материализовывать абстрактные комбинаторы; это позволяет находить порой неожиданные изоморфизмы между различными предметными областями, а также помогает при оптимизации и верификации программ;
  • проработанная теоретическая основа (теория категорий), на которой базируются монады; это облегчает жизнь создателям базовых библиотек, на которых потом базируется всё реальное программирование;
  • монады -- лишь один из классов в длинной цепочке интересных алгебраически обусловленных классов, некоторые из которых слабее монад, а некоторые -- сильнее: Functor, Applicative, Monoid, Traversable, Foldable, Monad со товарищи, Arrow со товарищи;
  • стремление к материализации некоторых видов вычислений в алгебраическую структуру (моноидальные вычисления); это открывает широкий простор для оптимизаций, верификации программ, создания абстрактных комбинаторов, а также устранение unbounded recursion -- по мощности результатов это похоже на то, как когда-то ввод-вывод был надежно изолирован в IO Monad;
  •  

Потратим по паре абзацев на каждый пункт.
 
Экспликация эффектов. Clean первым (ЕМНИП) справился с тем, чтобы уложить ввод-вывод в экосистему чистого ленивого языка.  Ввод-вывод -- лишь первый эффект, с которым справились таким образом.  Сейчас всё, что не укладывается в чистоту и ленивость, оформляется в виде эффектов: транзакции (и их взаимодействие с вводом-выводом), генераторы случайных чисел, синхронизация при параллельных вычислениях).    Кроме того, что связано с внешним миром, сюда также идут вычисления, которые не укладываются в родную семантику языка -- например, строгое вычисление аргументов функций (как во всех императивных языках).
 
Эффекты позволяют беспокоиться только о четком ограниченном подмножестве проблемы, ведь всё что вне эффектов -- это очень "простые" вещи, которые не могут "навредить" -- там нет deadlocks, там не надо думать о барьерах и порядке вычисления.  Чудовище, таким образом, загоняется в клетку.
 
См. 1. SPJ "Beautiful concurrency" http://www.ece.iastate.edu/~pjscott/beautiful.pdf
2. Wadler "The essence of functional programming" http://mynd.rinet.ru/~alexm/monads/essence.pdf
4. Киселёв et al. "Purely Functional Lazy Non-deterministic programming" http://www-ps.informatik.uni-kiel.de/~sebf/pub/icfp09.html
 
Базовые микро-стратегии вычисления.  Не забываем, что люди, стоявшие у истоков Haskell, в первую очередь были заинтересованы в программировании самого компилятора.  С помощью монад можно эксплицировать все базовые процессы, происходящие при вычислении -- вызовы функций с разными методами передачи аргументов, лексическую и динамическую вложенность переменных (Env), обработку исключений, выразить присваивание через машину состояний (State), неоднозначные вычисления (amb/List), вычисления с неудачей (Maybe/Error), continuations (Cont), бэк-трекинг. 
 
Отдельной областью исследований были также модульные интерпретаторы, реализованные через монады и сопутствующие monad transformers. Такая конструкция позволяла конструировать интерпретатор нужного языка (например, арифметика + вызов функций + неоднозначность) простым комбинированием отдельных компонентов интерпретатора.   Каждый отдельный компонент изолирован от остальных и позволяет раздельную разработку.
 
Понятно, что такой подход позволяет один раз написать соответствующий блок, проверить его, и использовать для любой задачи, требующей создания интепретатора или даже компилятора).
 
См. 1. Guy L. Steele Jr. "Building Interpreters by Composing Monads", http://mynd.rinet.ru/~alexm/monads/steele.pdf
2. S. Liang, P. Hudak "Modular Denotational Semantics for Compiler Construction" http://mynd.rinet.ru/~alexm/monads/liang2.pdf
3. S. Liang, P. Hudak "Modular Monadic Semantics", 1998 http://flint.cs.yale.edu/trifonov/cs629/modular-monadic-semantics.pdf

Механизм для мета-перехвата вычислений.  Монады в Haskell реализуются через typeclasses, которые чем-то похожи то ли на interfaces в Яве, то ли на concepts в C++.   Typeclasses совершенно ортогональны монадам!   Typeclasses позволяют "перехватить" вычисление в другой тип результата.   

Например, можно написать на Haskell функцию для вычисления корней квадратного уравнения.  Её можно вычислить, передав ей три аргумента -- тогда она вернет пару корней.   С помощью typeclasses можно "вычислить" эту функцию в другом контексте так, что результатом вычисления будет код на JavaScript, который представляет собой JavaScript-функцию, вычисляющую корни квадратного уравнения.    

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

Активно развивающейся областью сейчас является написание DSL для параллельных вычислений.  Можно написать на Haskell векторизованный алгоритм, к котором потом написать ряд бэкендов: для SSE, для CUDA, для обычного C, для любой другой векторизующей технологии, которая ещё не появилась.   Естественно, алгоритм этот можно попросту вычислять прямо из Haskell, чтобы отлаживать его принципиальную корректность.

См. 1. презентацию Lennar Augustsson "Strongly Types DSEL"  http://www.infoq.com/presentations/Strongly-Typed-DSEL-Lennart-Augustsson (в конце идёт рассказ о языке для генерации Excel-файлов); PDF
 
 
 
Монадические законы, теоретические основы, младшие и старшие братья монад.  Обеспечивают возможность формально доказать некоторые базовые вещи, чтобы быть хоть сколько-то уверенным в том, что фундамент не подведет.  Это интересно не только авторам самых базовых библиотек, но и тем, кто добрался до задач с такой сложностью, когда каждая возможность автоматической самопроверки приветствуется с энтузиазмом.  
 
Вместе со строгой проверкой типов это позволяет ловить ситуации, когда задача недопонята, сформулирована противоречиво, или просто сложнее, чем кажется.  Также это позволяет развивать программу, резко снижая вероятность внесения ошибочных изменений.   Так, Galois в своей презентации говорят, что постоянно пытаются закодировать те или иные требования к коду в виде сигнатуры типов.  

Также формальная структура (в том числе в моноидальном стиле) открывает широкий простор для оптимизаций на уровне компилятора (в том числе, управляемых программистом через механизм rules).  Некоторые жёстко структурированные функции удаётся соптимизировать максимально близко к машинному коду, при этом не жертвуя абстрактностью исходного кода.
 
 
2. http://comonad.com/reader/2009/iteratees-parsec-and-monoid/  (моноидальный стиль)
 
3. http://www.cse.unsw.edu.au/~dons/papers/CLS07.html (dons et al. "Stream Fusion: From Lists to Streams to Nothing at All)
 
link44 comments|post comment

(no subject) [Nov. 3rd, 2009|12:27 am]
[music |The Doors "Riders on the storm"]

записал как есть в семь утра в полусне

Read more... )
linkpost comment

(no subject) [Oct. 29th, 2009|07:17 pm]
http://www.russiancomics.narod.ru/Comics/BD/001/page/001.html

!!!
link11 comments|post comment

(no subject) [Oct. 23rd, 2009|10:47 pm]
http://community.livejournal.com/strobist_ru/328475.html

А.?
link11 comments|post comment

(no subject) [Oct. 18th, 2009|11:39 pm]
книги и старые дома -- о чем ещё может присниться сон, не выветрившийся за целый день?

Read more... )
linkpost comment

(no subject) [Oct. 16th, 2009|12:50 am]
31 gods fuck me blind (in a mouthful of winter and sun)

link20 comments|post comment

Л. З. Прох "Словарь ветров" [Oct. 4th, 2009|09:20 pm]
на алибе внезапно появился небезызвестный "Словарь ветров" в большом количестве (5 экземпляров в продаже)

отличный подарок

http://www.alib.ru/find3.php4?tfind=%EF%F0%EE%F5+%F1%EB%EE%E2%E0%F0%FC+%E2%E5%F2%F0%EE%E2
link3 comments|post comment

(no subject) [Sep. 18th, 2009|09:39 pm]
http://twitter.com/squadette/status/4083730565
linkpost comment

(no subject) [Sep. 12th, 2009|04:55 pm]
дорогие френды

(locked by [info]arkanoid)

я созрел до того, чтобы расстаться со своим http://en.wikipedia.org/wiki/HP_200LX

в комплекте PCMCIA на 5 мегабайт + кабель до ком-порта

если кому-то нужно в коллекцию -- пешите!

FREE * FREE * FREE
link6 comments|post comment

(no subject) [Sep. 11th, 2009|07:25 pm]
Аривона,

Read more... )
link5 comments|post comment

(no subject) [Aug. 27th, 2009|01:20 am]


(via [info]ailev)



(особенно в конце про удивленного робота)
link6 comments|post comment

(no subject) [Aug. 19th, 2009|06:36 pm]
http://hackage.haskell.org/trac/ghc/ticket/1548#comment:15

yep ;)
link5 comments|post comment

(no subject) [Aug. 7th, 2009|10:54 pm]
вопрос для узкой группы

реквестирую музыкальные файлы, составляющие альбом Psychic TV & White Stains - At Stockholm

muchos gracias,

POWER IS OFTEN
VERY QUIET
link5 comments|post comment

(no subject) [Jul. 23rd, 2009|07:17 pm]
«Совсем не случайно получилось, что бессмертные линии клеток человека, поддерживаемые в лабораториях всего мира, произошли из раковых опухолей. Наиболее известная из них — линия HeLa, выделенная из опухоли шейки матки пациентки Генриетты Лэкс (Henrietta Lacks), чернокожей женщины, умершей в 1951 году. Её раковые клетки настолько бурно пролиферируют, что часто загрязняют другие лабораторные образцы и подавляют рост любых других культур в чашках Петри. [...] Клетки HeLa используют для создания поливакцин, и они уже побывали в космосе. Суммарная масса всех культур HeLa по всем лабораториям мира сейчас в 400 раз превышает вес собственного тела Генриетты. Удивительно, но они бессмертны.»

Мэтт Ридли „Геном”


ЗА ПРЕДЕЛЫ ЧЕЛОВЕЧЕСКОГО УСЛОВИЯ
link5 comments|post comment

(no subject) [Jul. 20th, 2009|10:35 pm]
лекция по матану была крутая, только жарко

SPJ рассказал о Data Parallel Haskell, со слайдами отсюда: http://www.cse.unsw.edu.au/~chak/papers/PLKC08.html

шутка вечера, безусловно, была такая: во время Q&A-сессии встаёт чувак, задаёт свой вопрос, потом достаёт распечатку и говорит: "My friends offline have several questions. May I ask them all sequentially?"

SPJ: "You may try to ask them all in parallel!"
link1 comment|post comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]

Advertisement