Все заметки категории «Программирование»


Были же времена, когда разработчики не были испорчены квартирным вопросом DirectX’ом…

Первая версия SimCity (у которой тогда было рабочее название… правильно, Micropolis) была написана Will Wright’ом в 1985-м году под Commodore 64 (Wikipedia). 3 года издатели не хотели выпускать игру, в которой нельзя было победить или проиграть, пока наконец в 88-м не была достигнута договорённость с Maxis. В 89-м игра выходит сначала на Amiga и маках, следом — на PC (т. е. под DOS) и Commodore 64.

Код маковской версии был лицензирован DUX Software для того, чтобы разработать порт под Unix. Don Hopkins портировал игру сначала под NeWS window system от Sun, а когда Sun отказалась от NeWS, перенёс на X11 с использованием Tcl/Tk. И X11 (aka X Window), и Tck/Tk были доступны на многих платформах тогда, и дожили до наших дней, так что ещё в 90-е в различных модификациях этот порт был выпущен под SunOS, Solaris, Irix, HP/UX, OSF/1, Quarterdeck Desqview/X, NDC X Terminals, Warp и Linux. В конце 90-х срок контракта DUX Software закончился, и Tcl/Tk-версия больше не продавалась.

В 2007 году Electronic Arts, которая на тот момент владела всей интеллектуальной собственностью, связанной с SimCity и её спиноффами (SimCity и её сиквелы была самой продаваемой игрой на PC, пока не вышли The Sims, которые считаются спиноффом SimCity), подарила оригинальную SimCity проекту One Laptop Per Child. Don Hopkins и John Gilmore допилили X11 Tcl/Tk порт игры так, чтобы он работал под современными версиями X.org и Tcl/Tk, а то, что получилось — выпустили под лицензией GPL.

Поскольку всё, что выходит под названием SimCity, должно проходить QA в Electonic Arts, OLPC-релиз всё-таки сохранил название SimCity, а вот открытый код уже распространяется под оригинальным не защищённым копирайтом названием.

Если заглянуть в SVN-репозиторий проекта в Google Code (или хотя бы на эту страницу), то можно увидеть, что кроме X11 Tcl/Tk версии (Micropolis-Activity) уже ведётся работа над новым портом, Micropolis-Core, в котором игру перенесли на C++/Python/PIL/GTK/Cairo

Собственно, то, что должен знать каждый разработчик

Целей у этого поста две. Рассказать новичкам зачем все это нужно и переубедить сомневающихся. Ибо отказ от этих полезных инструментов ведет к потери времени и денег.

Кстати, есть такая штука, как Trac — интегрированные wiki, багтрэкер и веб-интерфейс к SVN.

В общем, забросил я попытки решить перловые проблемы с кодировками, нашёл питоновские биндинги к MPD, и написал свой собственный mpd-dynamic на своём любимом языке. Ни тебе пробем с кодировками, ни быдлокодерских (шутка) фигурных скобок. Как-нибудь под настроение доведу до ума и выложу.

Планируемый набор фич:

  • экспоненциальный рейтинг: песня с рейтингом 3 проигрывается в 2 раза чаще, чем песня с рейтингом 1, и в 2 раза реже, чем песня с рейтингом 5 (done);
  • новые песни (т. е. песни с неопределённым рейтингом) имеют повышенный рейтинг, после первого проигрывания им даётся рейтинг по умолчанию (3);
  • автоматически занижать рейтинг песен исполнителя, у которого очень много песен;
  • отсутствие повторов в пределах текущего плэйлиста;
  • возможность работы в режиме демона;
  • утилиты для просмотра и установка рейтинга любой песни (я их уже написал на Perl, но портировать дело пятнадцати минут, ещё нужна утилита, удаляющая «мёртвые» записи в базе), а также виджет для Plasma, показывающий рейтинг текущей песни и позволяющий его изменить (это когда я доберусь до Plasma ^_^)

10 января исполнилось70 лет Дональду Кнуту — самому известному учёному-программисту в истории человечества.

Happy Coding!

Полезная всё-таки штука этот блог! Стоило мне написать об MPD, как kaktyc в комментариях посоветовал мне попробовать mpd-dynamic.

Последний, как оказалось, распространяется с перловым модулем Audio::MPD. Я начал по привычке искать ебилды, но вместо этого нашёл g-cpan — генератор ебилдов для любых модулей из CPAN. Короче говоря, Audio::MPD под Gentoo ставится вот так:

sudo emerge g-cpan
sudo g-cpan -g Getopt::Euclid
sudo g-cpan -g Audio::MPD
sudo emerge version Getopt-Euclid Audio-MPD

Интересно, в других дистрибутивах подобные back-end-ы к CPAN’у есть?

В общем, посмотрел я на mpd-dynamic вблизи, и понял, что некоторые вещи в нём мне не нравится. После чего занялся правкой этих вещей — при том, что весь мой опыт с Perl’ом ограничен тем, что я когда-то пару раз листал книжки о нём — но и скрипт там всего на полторы сотни строк, да и примеры работы с Audo::MPD на CPAN-овском сайте есть, в остальных мелочах гугль помог. И я даже реализовал всё, что хотел, но потом упёрся в проблему с кодировками. Помучив гугль, сдался, и попросил помощи на форуме. Пока что мой новый mpd-dynamic работает только для файлов, в именах которых нет русских букв (к слову, у ориганального mpd-dynamic проблема та же).

Собственно, в самом mpd-dynamic я только изменил работу рейтинга — если в оригинале песня с определённым рейтингом либо добавляется в плейлист, если рейтинг выше порога, либо не добавляется; то я сделал так, что вероятность добавления песни растёт в зависимости от рейтинга: рейтинг по умолчанию — 3, песни с рейтингом 1 добавляются с в два раза меньшей вероятностью; с рейтингом 5 — с в два раза большей. Ну и кроме того, рейтинги должны храниться в базе данных, а с mpd-dynamic не идёт никаких программ для её создания и заполнения, так что я написал простенькие скрипты для установки и проверки рейтинга (при чём у этих скриптов никаких проблем с русским языком почему-то не возникло)

« Предыдущая страница