О стэнфордских онлайн-классах

На этой неделе закончились “стэнфордские” онлайн-курсы Introduction to Databases, Machine Learning и Introduction to Artificial Intelligence.

Я успешно закончил все три курса.
 

Интерпретатор HQ9+ на Opa

Некоторое время назад написал интерпретатор HQ9+ на новом языке/платформе Opa для конкурса Opa Developer Challenge (результаты конкурса — http://blog.opalang.org/2011/11/opa-developer-challenge-results.html).

Интерпретатор, конечно, сильно громко сказано (HQ9+ — очень примитивный язык): хотелось написать что-то очень простое и быстро, так что там в сумме меньше ста строк, включая HTML-интерфейс, README и куплет из песни “99 бутылок пива”: https://github.com/kit1980/opa-hq9plus.

В конкурсе призового места не занял. У победителей, правда, сильно глючные какие-то программы, но они явно приложили больше усилий и потратили больше времени, чем я на свой “интерпретатор”.

Сама платформа Opa (написана на OCaml, кстати) довольно интересна. Но очевидно, что не взлетит: сомнительная идея использования строго типизированный функциональный язык для массовой веб-разработки (не поймут); попытка включить весь веб-стек, в том числе веб-сервер и СУБД, в одну платформу (и даже один исполняемый файл), которая уже провалилась (отказались от встроенной базы данных и делают интерфейс к внешним базам); странная расстановка приоритетов — до сих пор есть версия только для Linux, причем только для 64-битных систем.

Мастер-класс Юрия Артюха «Современные подходы в вёрстке 2»

8 октября в Киеве пройдет мастер-класс Юрия Артюха “Современные подходы в вёрстке 2“. Я был не предыдущем его мастер-классе в прошлом году, тогда понравилось. В этот раз тоже собираюсь пойти.

Анонс от организаторов:

8-го октября компания SmartMe проводит повторный мастер-класс Юрия Артюха “Современный подход в вёрстке 2”, который является улучшенным вариантом первого мастер-класса Юры.

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

Для тех, кто не знает – Юрий специалист по верстке с многолетним стажем. Он принимал участие в разработке нескольких сотен проектов, среди которых такие, как groupon.ru, subscribe.ru, sports.ru, ukr.net, delo.ua и множества других крупных проектов.

В этот раз Юрий рассмотрит следующие вопросы:

  • Айкидо работы с кодом (редакторы и ускорение работы)
  • Построение лэйаутов сайтов
  • Верстка больших проектов
  • Разработка сайтов для мобильных
  • Разработка почтовых рассылок
  • Оптимизация кода и ускорение сайтов
  • Хаки и прочая магия для браузеров
  • Микроформаты: то немногое полезное, что о них нужно знать
  • Применение CSS3 и HTML5
  • Responsive design
  • Любимые ошибки
  • Всякая современная всячина и вопросы

Теперь Вы видите, почему в прошлый раз было столько желающих.

Зарегистрироваться и посмотреть все подробности Вы можете на странице мастер-класса.
Приходите в гости!

Chrome Hackathon & Contest (Киев)

На этих выходных ходил на Chrome Hackathon & Contest. Подробнее о мероприятии с фото и видео: http://www.developers.org.ua/lenta/articles/chrome-hackathon-contest-kyiv-part-i/ и http://www.developers.org.ua/lenta/events/chrome-hackathon-contest-kyiv-part-ii/.

Я делал расширения для Google Chrome для перевода дат/времен на сайтах во временную зону пользователя с форматированием по заданному шаблону. Странно, но такого расширения нет ни для Chrome (есть с похожей идеей, но только для континентальных штатов США, без форматирования, без перевода дня и требующее дополнительных действий для пользователя), ни для Firefox. А будет полезно в том числе мне, для перевода кучи топкодеровских “08.28.2011 08:55 AM”.

Видео моей презентации расширения на Хакатоне — http://www.youtube.com/watch?v=6ZHpOASnr0I.

Код сейчас по адресу https://github.com/kit1980/chrome-handytd. Расширение работает, но пока это только прототип, многое надо доделывать. Уже после хакатона нашлась ошибка в одной из используемых библиотек — время типа 12:XX AM определяется неверно. В общем, надо тестировать и дорабатывать.

Вообще, мероприятие понравилось, хоть я был и один в своей “команде”. Дома я бы явно не успел за полтора дня сделать такое расширение от идеи до реализации (не имея опыта разработки расширений).

Codeforces Beta Round #83

Сегодня участвовал в — Codeforces Beta Round #83 (второй дивизион). Решал все на Python.

Первую и вторую задачу решил без особых проблем, плюс по второй 4 успешных взлома. Третья задача не понравилась, не решал.

С четвертой (D. Баскетбольная команда) получилось так. Формулу для решения я вывел, вроде бы все верно. Но проблема в том, что там дробь, где в числителе и знаменателе — примерно равные по величине произведения сотни довольно больших целых чисел.

Длинная арифметика для целых в Python из коробки, так что при умножении переполнения не будет. Но для деления двух больших целых чисел в Python 2.6 надо привести их к float (иначе получится обязательно целое) — и имеем OverflowError:

>>> 1.0 * (1000 ** 200) / (1001 ** 200)
OverflowError: long int too large to convert to float

По хорошему, чтобы этого избежать, надо не считать отдельно числитель и знаменатель, а умножать на одно число — делить на одно число (во float) и т.д.

Но в Python 3 можно поделить целые числа и получить float, без проблем переполнения в случае подсчета отдельно числителя и знаменателя:

>>> (1000 ** 200) / (1001 ** 200)
0.8188125757004808

Еще в Python 2.6 можно было бы использовать тип Decimal:

>>> from decimal import Decimal
>>> Decimal(1000 ** 200) / Decimal(1001 ** 200)
Decimal(‘0.8188125757004809207789472534’)

Интересно, что в C++ при включенных оптимизациях (по крайней мере в g++ с -O2) при вычислении отдельно числителя и знаменателя не происходит переполнения double, т.к. используются регистры сопроцессора с большей разрядностью без пересылки промежуточных результатов в память.

TopCoder SRM 514

Ночью участвовал в SRM 514, в первом дивизионе.

Повезло, что задача на 250 баллов была похожа на задачу, которую я уже решал в 2009 году на контесте “Potyczki Algorytmiczne”. Так что отправил решение я довольно быстро, но потом увидел у себя ошибку, связанную с отрицательными числами — пришлось править и снова посылать. Вторую задачу не смотрел, третья показалась уж очень сложной.

В челледж-фазе было понятно, что искать, но не успевал — ломали раньше, чем я.

Из-за ошибок с отрицательными числами первая задача у многих упала, так что одной решенной задачи даже с учетом повторной отправки мне хватило на +89 баллов рейтинга, и теперь у меня максимальной рейтинг в алгоритмах за все время моего участия — 1298.

Panasonic KX-MB2020 в Ubuntu

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

Подключение МФУ Panasonic KX-MB2020 в Ubuntu.

Берем архив, сделанный из RPM от Panasonic: http://narod.ru/disk/22319105000/kx-mb2000.tar.gz.html или http://kit1980.ru/files/other/kx-mb2000.tar.gz, распаковываем от рута в корень (хотя по-хорошему надо бы пакет сделать). После этого в настройке CUPS http://localhost:631/ появится принтер Panasonic KX-MB2000 Series, 1.0.1.

Для 64-битной системы выполняем еще:
ln -s /usr/lib/libtetra.so.1.0.0 /usr/lib32/

ln -s /usr/lib/libtetra.so.1.0.0 /lib32/


Изначально решение отсюда — http://forum.ubuntu.ru/index.php?topic=87465.0.

Цукерберг на TopCoder

Нашли профайл mzuckerberg. Заработал $124.00 на первых SRM.

TopCoder SRM 511

После почти трехмесячного перерыва написал SRM на TopCoder — SRM 511. Решил две задачки во втором дивизионе и завалил одно чужое решение — снова вышел в первый дивизион.

А еще в моей комнате был какой-то очень тупой читер с 249.99 и 499.95 баллами за первую и вторую задачи (из 250 и 500 соответственно).

Тарантас

Один из тарантасов с сегодняшнего киевского “Red Bool ралли на тарантасах”.

тарантас