воскресенье, 23 февраля 2014 г.

Ruby 2.0 + DevIL + Windows

Есть такая библиотека для работы с изображениями - DevIL. Библиотека довольно старая, собрать её из исходников под виндой практически невозможно, но зато поддерживает кучу форматов и вообще замечательная.
У этой библиотеки есть биндинги для Ruby, чем я и воспользовался, написав небольшой генератор текстурных атласов.

Недавно заметил, что на новый Ruby он перестал ставиться, ввиду того, что во-первых либа под новую Ruby не собрана, а во-вторых -  из-за чуши в extconf.rb её вероятность собраться под Windows была крайне мала. На моё  issue было отвечено гробовой тишиной, так как автор походу перестал поддерживать его году в 2010.

Засучив рукава, форкнул репозиторий и принялся исправлять. Скажу сразу - в итоге справился.
Гем заработал и я его даже у себя протестировал.

Вкратце расскажу, что поразило. В первую очередь,  структура Rakefile сильно поменялась года за четыре, да и косяк в extconf.rb оказалось не так легко исправить. Хотя бы из-за проблемы разделителей путей, которые упорно в одних случаях нормально работают в GCC, хотя заданы слешами, а в других - нет и приходится перекраивать путь "вручную".

Вторая проблема - принудительная линковка, либо с либой от другого компилятора, либо с DLL. Это довольно глупый и костыльный хак, который поддерживается GCC и который частенько приходится использовать. Из-за обработки параметров в Makefile пришлось подхачить, но взлетело.

Самое главное - вот это вот . Потому что это может быть малопонятная ошибка в рантайме, которую руби показывает, как исключение, и она в командной строке непонятна совсем.  Убило три часа моей жизни и доставило много недовольства. Хинт: в таких случаях имеет смысл использовать Dependency Walker - он может показать, что случилось, почему не подгрузилось и избавить от гадания на ключах компилятора.

воскресенье, 2 февраля 2014 г.

Bicycle Way

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

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

От этого захотелость составить список велосипедов, которые можно (должно) написать для саморазвития и которые часто встречаются. Список не претендует на полноту, ибо писался по ощущениям, а не по статистике. В первую очередь буду говорить о C++, как наиболее близком мне, и репозитории на котором чаще всего смотрю:

Рубрика "Основы"

  • Умные указатели (с подсчетом ссылок, своя реализация auto_ptr, unique_ptr, genius_ptr)
  • Библиотека шаблонных контейнеров (list, queue, vector)
  • Свой кроссплатформенный враппер сокетов
  • Свой протокол сериализации.
  • Своя система сборки проектов.
Рубрика "ЯП"

  • Интерпретатор языка программирования (компилятор тоже пойдет)
  • Виртуальная машина для этого же языка
Рубрика "Геймдев"

  • Игровой движок, куда ж без него.
  • Рандомная хелло-ворлд игра (Змейка-Тетрис-Пятнашки-whatever)
Рубрика "Сети"
В связи с зоопарком протоколов верхнего уровня тут много чего можно.

  • HTTP-сервер
  • FTP-сервер
  • POP3-сервер
  • CMS
  • ХХХ-хостинг, где под XXX - картинки, файлы и еще много всего интересного.
Замечу, что не хочу  никого обидеть этим списком, к тому же сам в написании подобных велосипедов был неоднократно уличен.