четверг, 28 февраля 2013 г.

Типизация динамики или объективизация статики

Чтобы заснуть некоторые рекомендуют считать баранов. Раз баран, два баран, ... двести двадцать семь. Для меня не работает, но пока это не важно. Но вот что делать, если на 117 месте оказалась овца? Можно тоже считать. Но вот у вас слаботипизированная программа и может встретиться все что угодно. И понедельник, и смысл жизни, и зачет по диференциальным уравнениям. Их тоже считать?

А есть еще черная дыра, в просторечии известная как null. Хоар берет ответственность на себя, но до сих пор нормального (не то чтобы идеального) решения как-то не предложено. Это в итоге какой-то ужас. Единственное что можно делать, это сначала спросить: "А вы случайно не черная дыра?" В итоге программы в student-style выглядат как "Если не черная дыра, то считаем". Программа из "Сейчас я встану со стула, пойду на кухню и поставлю чайник на огонь" выглядит как "Если стул не Черная дыра, то (Если кухня не Черная дыра, то (Если чайник не Черная дыра, то (Если огонь не Черная дыра, то ...)))". Я видел такие проекты, с такими людьми я даже за руку здоровался (все отмыть не могу). Это то же от непонимания типов.

Есть тренд, когда в слаботипизированных языках добавляют недо-типы. Тот же python/cpython, аннотации в erlang, к названию языка приписать слева букву J или справа #. Тот же js внутри той же V8 внутри очень типизированный. Даже CoffeScript и javascript чем-то в названии похожи.

Понятно, откуда ноги растут. Только кажется можно растить и в другом направлении. Гибкости хватает, но надежность и скорость местами перевешивает.

С нетипизированным легко работать на малых величинах. Вы можете легко "сломать" часть системы, при том что остальное все работает. Это конечно и больший минус, но и такой же большой плюс для мелких проектов.

Так вот, вместо введения типов в нетипизированное может стоит идти в направлении ослабления типизации в типизированном? То есть взять что-то типизированное и ослаблять до некоторого уровня. Если идет фигня с типами и все начинает плохо компилироваться, то можно в оставшейся части модуля возвращать нечто абстрактное (типа, с типом object). И ругаться компилятором, что мол, сударь-с, у вас тут пока не собирается, я тут-с немного подкрутил. Запускать это можно частично, всю работу не гарантирую.

Таки мне кажется, что это лучше, чем на Питон натягивать презерватив типизацию. Тут системных работ немеренно.

Есть мнение, что один фиг, юнит-тесты и там и там писать. Будьто это и там и здесь все покроет и будет господство счатья и демократов. Для меня несколько очевидно, что чем раньше вы найдете косяки, тем оно дешевле/проще/быстрее и спокойнее. И еще из очевидного факта, что компиляция идет до рантайма тестов, следует что типизация - это хорошо.

Я так же приверженец контрактов, той штуки, которая еще при компиляции сможет доказать что все хорошо. Местами в критических ситуациях это уже в жизни начинает проявляться. И никакие рантайм-тесты вас там не спасут.

Если бы я понимал зависимые типы, то я бы тоже был их приверженцем. Но, имхо, до чего-то жизненного они пока не доросли.

В итоге уже давно пришел к выводу, что "стыд и скрам" - стыдно,  методологии, технологии, языки и модели вычислений - все бренное. Основания лежат в логике, оттуда все и растет.

понедельник, 18 февраля 2013 г.

Языковое

Я так не люблю телевизор, что новый год встречал в окружении мороженного и scala. Ну как встречал, о чем-то (понятно о чем) задумался, поднял голову - там уже 0:10. Президентов я не слушаю, они не могут сказать ничего нового. Да и не на чем.

Таки уже первого числа сходил к родителям. Получил дозу облучения телевизором (где-то 14-16 микроРентгенЧас), поел, подарил web-камеру и ушел как Винни Пух с фразой "ну, раз больше ничего нет..."

Очевидно, что пост не про это. И даже не про ЭТО.

В праздники таки добил bloxorz - эта такая пошаговая полу-логическая игра. http://www.coolmath-games.com/0-bloxorz/index.html , вот тут можно попробовать. С Димой непонятно зачем прошли вручную за вечер. Недели за полторы я смог вбить все уровни и сделал это в автоматическом режиме. Несколько непонятен смысл автоматизации, когда вручную можно сделать за день, а автоматизируешь в десять раз дольше. Удовольствие в самом процессе, а смысла нет.

Результат можно посмотреть тут https://github.com/ajtkulov/bloxorz_scala , если у вас стоит scala + sbt, то можно забрать исходники, в корне запустить sbt и набрать там test.

Это отнаследованная вещь от заданий с coursera. Все что без комментариев, очевидно, мое.

Пришлось немного повозиться с сплитом фигурки. Это когда встаешь на клетку, и тебя разрезает на два кубика.  Зачем-то рисовал богатую модель на все возможные переключалки, в итоге все свелось к битовому переключению состояний. Там нагляднее и проще.

Отлаживать уровни - это местами ад. Во всех случаях в итоге где-то косячишь на +-1 по координатам, отловить такое нетривиально. Косяков с кодом практически не было. В одном месте забыл переопределить hashCode. Еще оказалось, что ++ для стримов лучше не писать, а .append() эффективнее. На маленьких данных все работает, а чуть дальше памяти не станет хватать.

В каждой из функциональщин есть джентельменский набор вопросов, которые необходимо знать. Как клеятся списки - это пожалуй один из первых вопросов. В пятерке также входит не использование foldr с бесконечными ленивыми объектами (это вам не foldl).

Не знаю, может немного подрос. Сейчас везде с легкостью втыкаются fold. До этого я что-то ручками все рекурсию писал. А сейчас прямо прет.

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

Система сборки sbt довольно радует. Очевидно, вы пишете простые скрипты на scala, при том все типизированно. Конечно, уже сильно привык к тому же Resharper, что позволяет просто вертеть проекты в 20+Мб исходников. Писать в emacs десяток Кб нетрадиционщину для меня уже (или пока?) напряжно.

Прохожу еще на coursera курс, там был месяц ML, сейчас Racket (оно же Scheme). ML приятен на вкус. Довольно прост и местами абстрактен. Папа многих, Хиндли-Милнер ногами растет от туда. Если не про ML, то я щупал около 4..6 диалектов скобочек, мелочи есть, я их ощущаю. Scheme && Racket немного рафинированы, и немного урезаны с практической точки зрения. А так, скобочки как скобочки. Мне нравится. Отсутствие статической типизации и лексический scope как-то напрягает, но если закрыть глаза... то практически не тошнит.

В общем, детский восторг на детском уровне. 

понедельник, 11 февраля 2013 г.

Не о грибах

Возможно, если вы знакомы со мной лично, знаете, что я не употребляю в пищу грибов. Они не проходят, точнее выходят обратно тем же самым способом, что и вошли. Раза два-три в жизни было, сейчас я более осторожен. Пирожки непонятно с чем я не кусаю, а даю попробовать другому человеку. Однажды мне "хватило" одного полного укуса. Теперь когда меня спрашивают, какое мороженное я буду - отвечаю что "без грибов". Совсем маленькие кусочки вызывают очень плохие ощущения, бывают в блюдах попадаются, но дальше я это не ем. Опасность для всех, в том числе и для окружающих.

Так как пост "не о грибах"... Есть нечто, что у меня вызывает схожую неприязнь. Это понятие статуса и престижа. Меня примерно также сворачивает в физиономии и крутит в желудке.

В принципе, это все сводится к опять к мерилкам, ценнике на шубе или длине полового члена. На данный момент я нахожусь в понимании, что
  • меряться каким-то одним измеренем есть плохо. Можно даже собрать какой-либо агрегационный рейтинг и меряться им, но это все равно плохо. Проблема в адекватности рейтинга, все равно это сводится к одному измерению=рейтинг.
  • меряться в таком понятии есть несколько плохо. Плохо меряться публично, а для внутреннего понимания "где ты сейчас находишься?" может быть полезно. "Где я" и "куда двигаться" - это хорошие вопросы. Вопрос "зачем" философский и часто очень хорош.
В мировом масштабе говорят что американцы (США) должны меряться более активно. Опять же, не могу ничего сказать адекватного. Тот, один/два десятка, которых я видел, этим не отличались. Обычные люди.

Далее, наверное, таки идут москвичи. Какие-то нотки есть у всех крупных городов, тот же Екатеринбург с Питером иногда чувствуется. Но победитель по длине тут явно один. Однажды я видел такой диалог, люди перечисляют города, откуда они родом.

- Я с Пскова.
- Петрозаводск.
- С Оренбурга.
- Я с Фили.

Тут можно вызывать санитаров. И заметьте, что такое могло быть только с Москвой.

Конечно, абсолютное большинство москвичей - нормальные не контуженные люди. Просто вот эти 0.5% с заскоками чаще видно, потому что этому логарифму надо сильнее выделяться. Самое такое место обнаружено мною в Москве - это между Охотным рядом и Лубянкой, почти напротив Думы. Там нужно подъезжать на феррари/мазерати/бентли, специальный человек подвинет колпаки на тратуаре, вы выйдите и пойдете пить кофе на террасе. В принципе, феррари больше ни для чего не приспособлен, цемент на дачу возить вообще не удобно.

Далее я отмечаю контузию у МГУ. Опять же большая часть популяции - это нормальные люди. Но самое высокое здание среди учебных заведений... Какой еще вуз так раскрутил свое здание? Вы знаете как выглядит МИТ или CMU? СПбГУ только исторически свою двухэтажку рисует, но это только 2 этажа.

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

Там причем с возрастом все усиливается: у студентов еще легкая контузия, у аспирантов уже признаки хронической болезни. К 30 годикам получается какой-то младший научный сотрудник, который продолбал аспирантуру, по научной деятельности он круглый отличник ноль, ведет одну пару в неделю в виде спец. семинара в один семестр, нереально горд за свой вуз и факультет. Есть люди, которые ходят с поднятой головой, так вот вышеописываемый класс ходит "мостиком" (это такая позиция в детской гимнастике).

Питерцы как люди, и питерцы как вузы, в среднем по больнице мне гораздо приятнее.

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

В общем, меряйтесь дома перед зеркалом, оно для рефлексии полезно. Не надо только результаты в твиттер/инстаграмм выкладывать. От рвоты монитор сложно отмывать, проверено. Если меня покормить грибами и сказать что-нибудь про "статус/престиж", то вы даже не успеете отпрыгнуть. Сами виноваты будете.