суббота, 23 мая 2009 г.

ASTREE

Давно у меня уже висит в браузере вкладка этого проекта. Все ждал, куда можно будет ссылку на него вставить. Не дождался :) Поэтому пусть будет сама по себе. Итак:

ASTREE – проект по проверке наличия run-time ошибок в C-шных программах (но не во всех, а только без динамического выделения памяти и рекурсии). Основное назначение – проверка встраиваемого ПО.

Например, с его помощью проверялось ПО для Airbus A340, A380 и автоматического спутника.

Может кому пригодиться.

Отлично сказано

Дьявольский совет – очень здорово написано.

Сухой остаток для разработчика ПО: для того, чтобы продукт оказался востребованным, одних только технических качеств недостаточно (возможно, они даже не главное). О продукте нужно трубить на каждом углу.

Осталось только побороть свою природную скромность и начать повсюду кричать о SObjectizer и Mxx_ru (как минимум о них) :)

пятница, 22 мая 2009 г.

Выпустил Mxx_ru 1.5.0

Нашлось время портировать Mxx_ru под Ruby 1.9.1p129. Получилась версия 1.5.0. Новых возможностей в ней нет, только возможность работать под Ruby 1.9.

Более подробная информация в анонсе на RSDN.

Неудачная попытка избавиться от многословности в SObjectizer

На RSDN ввязался в дискуссию по поводу параллельного программирования и вставил там свои пять копеек на счет SObjectizer-а. После чего возник спор о том, является ли программирование с использованием SObjectizer кошмаром или нет (вот его начало). Резюмируя, суть претензий к SObjectizer можно свести к двум пунктам:

  1. SObjectizer заставляет разработчика сводить все сценарии работы агентов к явному конечному автомату. Что плохо для сценариев, в которых агенты должны делать синхронные запросы друг к другу. Т.е. послал агент A агенту B какой-то запрос и тут же “заснул” в ожидании ответа. Когда ответ пришел, его разбудили и он продолжил работу с той же точки. Причем все это выполняется в рамках одной функции агента A, с сохранением промежуточного состояния агента на стеке. Это модель взаимодействия легких процессов в Erlang. Так же она, насколько я понимаю, является обычной для языков со встроенной поддержкой продолжений (continuations). В SObjectizer-4 такая схема работы невозможна. В SObjectizer-4 агент A должен будет отослать сообщение агенту B сообщение и завершить обработку своего текущего события. Когда агент B пришлет ответ, у агента A сработает другое событие. Это означает, что свое промежуточное состояние агент A должен будет хранить не на стеке, а в своих атрибутах.
  2. SObjectizer-4 слишком многословен. По словам моего оппонента, многословность является следствием пункта номер 1.

Пункт первый сейчас не рассматривается. Ну да, SObjectizer вот такой, каждый агент в нем – это отдельный конечный автомат с явно выделенными состояниями. Для подобных задач SObjectizer создавался, таким он и получился. Если же какую-то конкретную задачу нельзя решить с помощью SObjectizer, то нет проблем – берется какой-нибудь другой фреймворк и все дела. Нужно ли вводить поддержку в SObjectizer схем с продолжениями – фиг знает. На ОС с поддержкой механизма файберов такую поддержку можно было бы сделать с помощью этого механизма. Но кроме вопроса о технической реализуемости данной идеи, есть еще и вопрос об идеологической целесообразности поддержки двух разных типов агентов в одном фреймворке. Пока я считаю, что в этом нет необходимости.

А вот пункт второй действительно является болезненной темой. Во-первых, самому хотелось бы писать меньше кода при работе с агентами (хотя тут интересный момент есть: в более-менее серьезных агентах объем SObjectizer-овских описаний занимает очень небольшой объем по сравнению с прикладным кодом). Во-вторых, мне кажется, что объем кода в простых примерах (типа Hello, World) создает незаслуженное отрицательное впечатление о SObjectizer у новичков.

Поэтому устранение многословности SObjectizer является одной из главных целей разработки SObjectizer-5. И я вижу пока всего два взаимоисключающих пути достижения этой цели. Первый путь – это использование внешних DSL. По аналогии с тем, как используются IDL для описания интерфейсов, ASN для описания структур данных и пр. Лично мне этот путь кажется наиболее многообещающим. Но он встречает серьезное неприятие у других заинтересованных в SObjectizer разработчиков. Поэтому рассматривается и второй путь – использование только средств C++.

Как раз в попытке придерживаться второго пути пару месяцев назад у меня возникли мысли о том, как же описание агента могло бы выглядеть в SObjectizer-5. С использованием только простых возможностей C++ (как у некоторых есть предубеждения против внешних DSL, так же у меня есть предубеждение против навороченных шаблонных конструкций). Как мне казалось до вчерашнего дня, идеи были достаточно привлекательными.

Но вчера, по следам RSDN-овского спора, я решил сравнить, а какой выигрыш даст новая схема описания агентов по сравнению с существующей схемой. Вот результат для реального агента. Далеко не самого сложного. Итог не радует:

Никакого выигрыша. Более того, мне кажется, что в новом варианте дублирования кода даже больше, чем в существующем.

Да, новый вариант строже типизирован. Да, значительная часть ошибок будет вылавливаться компилятором. И бла-бла-бла. Но с точки зрения сокращения писанины результат удручающий.

Значит, нужно что-то править в консерватории. И я склонен еще более серьезно рассматривать варианты с внешними DSL. Не важно, будет ли этот DSL базироваться на Ruby или же это будет специализированный синтаксис и C++ный транслятор. Но нужно, чтобы описание агента было максимально простым и компактным. А весь необходимый оберточный C++ный код генерировался бы автоматически, без вмешательства со стороны программиста.

В этой связи вопрос к читателям (которым хватило интереса и терпения дочитать до этого места): если у вас есть предубеждения против использования внешних DSL (не важно, IDL, ASN, описаний для Google Protobuf, WSDL и пр.), то поделитесь, пожалуйста причинами возникновения ваших предубеждений.

четверг, 21 мая 2009 г.

Сдвиг по фазе

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

;)

Пара забавных случаев

Ноутбучная клавиатура, блин!

Ситуация сейчас на работе… Три проекта на мне повисли. Внезапно. И все срочные. А один из них так очень срочный. Настолько, что последних выходных у меня вообще не было. И это я не зря говорю. Это, так сказать, контекст, на котором разворачивались очень драматические события пару дней назад. Еще одно важное пояснение: своего компьютера у меня дома нет, везде таскаю свой рабочий ноутбук, который мне выдали, чтобы я мог свое рабочее место возить хоть домой, хоть в офис, хоть в командировку.

Как-то к концу рабочего дня обратился ко мне коллега с просьбой разобраться с настройкой написанного мной когда-то сервисного скрипта. По всем симптомам казалось, что как его не настраивали, он все равно не работал. Начал я разбираться. Ситуация не понятная. Вроде бы и в памяти присутствует, и ресурсы какие-то потребляет, а результатов не выдает… Через какое-то время у меня возникает смутное подозрение, что он таки работает. Но, поскольку в его распоряжение поступило несколько сотен тысяч файлов для обработки, он делает свое дело очень неспешно :) И первые признаки жизни он должен выдать где-то через час, не раньше :) Чего думаю, сидеть на работе и ждать? Поеду лучше домой. Все равно на сервер через удаленный доступ заходить, так какая разница, с работы или из дому. Ну и пишу своему коллеге в Jabber, мол так и так, приеду домой и гляну, потом отпишусь. И отчалил до дому, прихватив с собой ноутбук.

Приезжаю. Ужин вкусный. Настроение отличное. Достаю ноутбук, подключаюсь к удаленному серверу, пытаюсь залогиниться. Не получается. Неверные имя и пароль. Пробую несколько раз. Эффект тот же. Дела, блин… А ведь моего ответа сейчас в Москве ждут.

Ну ладно, надо коллеге об этом рассказать. Захожу в Jabber, пытаюсь написать, что у меня не получается на сервер зайти. И тут выясняется, что вместо части букв появляются цифры, а то и вообще что-то странное творится. Хотел написать “Я не могу залогиниться”, а выходит “Я не мо4у –а214инит0ся”. Опаньки, думаю. Классно. В английской раскладке такая же фигня. Вышел из Windows, зашел обратно – тоже самое.

Ну все, говорю я сам себе. Клавиатура сдохла. У ноутбука. Когда на мне три проекта висит. Срочных. А я в Гомеле. А компьютер для ремонта нужно в Москву. Блин!

Сознание постигшей меня утраты просто раздавило меня своей тяжестью. И эффект этот настолько сильно отразился на мне, что жена даже сказала дочке: “Не трогай сегодня папу”.

Ну блин! Я давно убедился в верности народной мудрости – неприятности всегда приходят оттуда, откуда их не ждешь. Но чтобы в такой момент… Да мой ноутбук…

Прилег на диван. Попробовал найти в произошедшем что-нибудь хорошее. Ну eMule, к счастью, продолжает качать. Ну хоть не буду сегодня вечером пытаться работать. Ну хоть отдохну чуток. А все же странно, что отказала только половина клавиатуры. И как-то странно отказала. Не случайные буковки выдает, а всегда одни и те же. И как-то сильно все это на что-то похоже… Подскакиваю. Бегу к столу.

Ну ё! Так и есть! При нажатии на некоторые кнопки выдается тот символ, который на этой клавише написан маленьким фиолетовым шрифтом. Т.е. такие символы должны возникать, только когда нажимаешь эти клавиши совместно со специальной клавишей Fn. А здесь как будто она постоянно нажата… Сама, что ли залипла? Или?…

Или! Оказалось, что на клавише Insert есть такая маленькая фиолетовая подпись Num LK! Т.е. похоже, что я случайно одновременно нажал Fn и Insert. И сработал режим Num Lock – часть моей клавиатуры стала работать как маленькая цифровая.

Вот и все. Стоило нажать эту магическую комбинацию еще раз и все восстановилось. Видимо, поскольку Fn находится рядом с Ctrl, я в попытке сделать Ctrl+Ins, сделал Fn+NumLK. А потом пошел логиниться на удаленный сервер. Ну а что было дальше, я уже написал :)

В тот момент смысл выражения “камень с плеч” я ощущал буквально физически. Самое смешное, что я даже не подозревал, что на моем ноутбуке можно включить режим Num Lock. Пока не включил его совершенно случайно. В очень напряженный момент :)

А скрипт, кстати, оказался работающим. Он действительно притормозил при поиске нужных ему файлов на большом разделе. Потому и признаков жизни не подавал. Но это уже совсем другая история :)

Анекдот про пьяного подростка-металлиста

Точно знаю, что у некоторых анекдотов прообразами были реальные ситуации. Например, моего друга девушка на самом деле как-то прятала в шкафу, хотя и неудачно – по физиономии он все равно схлопотал. А еще был такой анекдот: “Где ты была всю ночь? – Меня изнасиловали… – Это минутное дело! Где ты была всю ночь?”… Да, хотя это была вовсе не веселая история…

Вчера почти убедился в правдивости анекдота про малолетнего металлиста. Пьяный подросток возвращается домой после дискотеки. Ему плохо, его мутит. Вокруг него суетится мамаша: “Сынок, может тебе рассольчику?” А он ей: “Мама, включи мне “Ласковый Май”. Меня вырвет и мне полегчает”.

Так вот, последние дня четыре, я постоянно слушаю инструментальный рок (Joe Satriani, Jeff Beck, John Petrucci, Paul Gilbert). А тут на работе оказывается mp3 сборник с прошедшего Евровидения-2009. И уж не знаю, какой приступ мазохизма на меня нахлынул, но я почему-то решил прослушать его. Весь.

Меня действительно к финишу мутило. Хорошо еще, что я был трезвый. А то ведь… :)))

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

Кстати, раз уж речь зашла о музыке. Сменил себе WinAMP на AIMP2. Отличная штука. Особенно впечатлило, как там playlist оформлен. Внушаить!

Ну и еще о музыке. У Джеффа Бека больше всего понравились альбомы "1975 - Blow By Blow", "1980 - There And Back", "1989 - Jeff Beck's Guitar Shop" и "1999 - Who Else!". И еще очень хороший "1992 - Soundtracks Frankie's House". Рекомендую. Хотя и остальные под настроение можно послушать, забойные вещи есть в каждом альбоме, и не по одной. Но меня больше всего вот эти торкнули.

Ну и еще не только о музыке. Прошедшее Евровидение показало, что я вряд ли когда-нибудь сделаю что-нибудь популярное. Поскольку не могу предугадать, что же может понравиться людям. Я предполагал, что первая тройка будет такая: Швеция, Норвегия и Франция. Ну и Эстония где-то неподалеку. Ага, почти угадал :) Хотя лично моя тройка -- Франция, Эстония и Великобритания. Плюс еще есть несколько нормальных: Мальта, Хорватия и, как это не странно, Беларусь – когда не видишь Елфимова на сцене, то вдруг оказывается, что и песня ничего, и петь он умеет :)