Программирование - как искусство

По адресу http://rigidus.ru теперь лежит сайт, с которого я начинаю экспансию языка Common Lisp в современное веб-программирование. Там многое непонятно (поначалу), зато все "правильно". Если вы любите красивые решения так как люблю их я, т.е. до безумия - в статьях есть много интересного :)

Комментарии отключены

В связи с зашкаливающим количеством спама комментарии отключены. Ведется работа по обустройству собственной блог-площадки, после чего посты будут перенесены, а этот блог - удален. Такие дела...

Сантехнические дни.. (Sun Tech Days 2010)

В данный момент я нахожусь на конференции Sun Tech Days 2010 в ЛенЭкспо (С-Пб). К сожалению, мне не удалось попасть на нее в первый день работы - вчера, но сегодняшние доклады вполне это окупили.

Не успел я зайти в павильон как оказался на докладе по робототехнике, который проводили ребята из Благовещенска - там оказывается есть целая робототехническая лаборатория. Продемонстрировали мобильного робота на платформе SunSpot - довольно интересная хотя и дорогая платформа - по сравнению с SunSpot, Arduino - практически бесплатен. В числе их разработок - платформа для распознования лиц, использующая нечеткую логику - я был очень заинтересован. Удивительным оказалось то, что Александр из Благовещенска лучше меня знает где в Санкт-Петербурге купить сервомоторы и датчики для роботов :)

Пообщавшись с робототехниками я ушел на доклад JetBrains, которые рассказывали о MPS. Скажу честно - я впечатлён количеством работы, которое они вложили в реализацию, прямо скажем, не самой удачной (на мой взгляд) идеи. Если коротко - JetBrains делают платформу для разработки DSL. Делают путем кодогенерации, которая поддержана средствами среды. Поддержка действительно хорошая - не отличишь от базовой поддержки языка в современных IDE + все настраивается. В числе минусов, которые, думаю, даже не осознаются разработчиками - отсутствие ретроспекции, которым страдает генеративный подход в compile-time, сложность вывода типов и контроля за этим процессом (в последнем я возможно ошибаюсь). Кстати, JetBrains хайрит спецов - я взял на всякий случай их требования и думаю сходить на собеседование. Хотелось бы, наверно, поработать с ними над MPS и привнести туда ряд идей, воплощенных в лиспе - думаю это был был бы весьма интересный опыт.

По видимому Java стала настолько сложной и многословной в сравнении с другими языками, что назрела необходимость решать эту проблему - и JetBrains использует для этого новую "серебряную пулю" - DSL.

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

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

Веб-программирование на лиспе. Первые шаги с hunchentoot.

Погуглил по рунету и обнаружил, что нигде нет getting started для того
чтобы поднять hunchentoot и заняться наконец веб-программированием на
лиспе.

Ну раз нет, то надо написать, люди просят.

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

Как подключать emacs к удаленному лисп-процессу через swank.

Внимание! Эта статья в более полном и, что самое главное, обновляемом виде теперь лежит на Rigidus.ru в разделе статьи!

Сначала цитата - вдруг кто-то не знает об этом замечательном инциденте.

И даже более впечатляющий пример удаленной отладки произошел в
миссии NASA «Deep Space 1» в 1998 году. Через полгода после запуска
космического корабля, небольшой код на Lisp должен был управлять
космическим кораблем в течении двух дней для проведения серии
экспериментов. Однако, неуловимое состояние гонки (race condition) в
коде не было выявлено при тестировании на земле и было обнаружено уже
в космосе. Когда ошибка была выявлена в космосе (100 миллионов миль от
Земли) команда смогла произвести диагностику и исправление работающего
кода, что позволило завершить эксперимент. Один из программистов
сказал об этом следующее:

- Отладка программы, работающей на оборудовании стоимостью 100
  миллионов долларов, которая находится в 100 миллионах миль от вас,
  является интересным опытом. REPL, работающий на космическом корабле,
  предоставляет бесценные возможности в нахождении и устранении
  проблем.

Collapse )

Особенности Common Lisp

О намерениях. Данная компиляция не стремиться убедить вас использовать
Common Lisp. Не хотите - не используйте. Нам же лучше.

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

Collapse )

Беготня по граблям :)

Изучая лисп, поражаешься мощи и  выразительности этого языка, однако без граблей
не  обходится.  Используя  библиотеку  clsql  наткнулся  на  падение  с  ошибкой
"Unhandled memory  fault at  #x3C."  Гугление показало,  что не  стоит создавать
таблицу вызывая

(clsql:query "CREATE TABLE ...")

потому  что  при  попытке  разобрать  ответ mysql`я  (которого  в  этом  запросе
естественно нет -  мы же просто таблицу создаем, а  не делаем SELECT) библиотека
падает.  Вместо query использовать надо 

(create-table [foo] '(([id] integer) ([comments] longchar))) 

который  внезапно  (!)   создает  таблицу   с  именем  и  столбцами  в  верхнем
регистре. Гугл подсказал что чтобы работать в нижнем регистре надо писать так

(create-table "foo" '(([|id|] integer) ([|comments|] longchar)))

Вы можете считать меня психом, но я сразу понял, почему это работает :)