Архив рубрики: Программирование

Cosmic Fail

Space Engine позиционируется как симулятор Вселенной максимальной реалистичности. Известные объекты описаны реальными данными, неизвестные смоделированы. Можно «слетать» к Сатурну и посмотреть на влияние кольца на цвет поверхности, вернуться на Землю и увидеть северное сияние, пролететь сквозь туманность и посетить соседние галактики. Все очень красиво и плавно работает на не самых мощных компьютерах. Но успех ли это?

Проект начался в 2005 году. Пятнадцать лет — это долгострой уровня третьего Half-Life и Duke Nukem Forever. Причины — отказ от привлечения инвестиций, закрытые исходные коды и авторитарность единственного разработчика. Автор, студент-астроном, просто «пилит» в свое удовольствие хобби-проект, который со временем стал работой за счет пожертвований игроков, мечтающих о «настоящем космосе».

За это время проект стал позиционироваться как «планетарий». Теперь это не какая-то игрушка, а «серьезный инструмент для изучения астрономии». Но увы — на фоне современных звездных каталогов проекта Gaia данные проекта Hipparcos 30-летней давности малочисленны и недостоверны. Большая часть виртуальной Вселенной синтезирована или воспроизведена по изображениям, тоже не всегда достоверным. Небесная механика для такого амбициозного проекта тоже недостоверна и при воспроизведении известных, наблюдаемых событий небесные тела банально «промахиваются». Для игры это проблемой не является, а вот для планетария явно недопустимо.

Автор предлагает свой «движок» для интеграции в сторонние проекты, но за прошедшие 15 лет проект остается «черным ящиком», позволяющим видеть красивые картинки на тему космоса.

Автор ищет тех, кто присоединится к проекту. Но не найдет — авторитарность и необходимость работать на общественных началах делает этот поиск безнадежным. Используемые технологии (С++ и GLSL) пока еще уместны и применимы, но (что особенно касается видеокарт) не вечны и шансы прийти к планируемому релизу на устаревших технологиях (данные, напомню, уже устарели) растут изо дня в день.

Автор пробирается к светлому будущему в одиночку, решая вопросы физического и графического моделирования по мере их возникновения. Вопросы игровой логики, сюжета и баланса нет даже на горизонте событий. Что в переводе с языка астрофизиков означает «никогда».

Вот что бывает, когда проект «в одно лицо» делается программистом. Типичный пример «внутренней вселенной» аутизма, которому в той или иной степени подвержены все «демиурги от программирования».

Это ли не fail?

Метки: ,

Lua

«Католицизм — это круто». Кевин Смит, «Догма».

Lua — это язык программирования, написанный подразделением технологий компьютерной графики Папского Католического университета Рио-Де-Жанейро. Все-таки католики знают толк в миссионерстве — о языке Lua нет даже нейтральных отзывов, только восторженные. И восторг этот, как оказалось, вполне оправдан.

Lua («луна» по-португальски) проектировался — и до сих пор является непревзойденным в этом своем качестве — как встраиваемый язык сценариев. Он компактен — всего 300 кило(!)байт; он прост — изучается без преувеличения за час; однако простота не синоним ограниченности, он мощен — поддерживает императивный, функциональный, объектно-ориентированный подходы, в нем даже есть многопоточность.

И он быстр — об этом говорит успешное применение в графике вообще и в видеоиграх в частности. В простеньком Angry Birds и в «навороченном» World of Warcraft, во вполне коммерческом Adobe Lightroom и в полностью свободном GIMP, в системном OpenWRT и прикладном SciTe — то есть везде, где быстрая низкоуровневая платформа нуждается в удобной и гибкой логической надстройке.

Lua работает везде. От мобильных устройств на Android, iOS и Symbian (и даже проще — игрушечных роботов Lego Mindstorm тоже можно программировать на Lua) до мейнфреймов. Впрочем, на мейнфрейме можно запустить все, что угодно, это не особенно интересно. Зато интересна поддержка всех разновидностей Windows, Linux и UNIX. Да, и MacOS с WindowsPhone тоже.

Определенно, Бог создал мир за шесть дней потому, что написал его на Lua.

Метки:

PHP это джинн…

… а джинн не должен покидать лампы.

Всякое использование PHP вне LAMP — это попытка устроить грузчика на работу в детский сад воспитателем. Или наоборот.

Метки: ,

Android

Android — это Linux. Ядро, драйвера — все то, что называется абстракцией между программным обеспечением и оборудованием — это Linux, простой и понятный.

Android — это С++. Стандартные BSD-библиотеки и библиотеки работы с оборудованием это возможность писать на С++. Подробности не столь важны, главное — можно самому дописать все, чего недостает.

Android — это Java. Написанные пакеты надо особым образом «готовить», потом они выполняются «в кэш», который загружается и выгружается сборщиком мусора во что-то вроде файла подкачки, но в основе всего этого лежит виртуальная машина Java. Особенная, непохожая, но все-таки Java.

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

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

Все это надо просто держать в голове и тогда умение думать как Android и программировать под Android придет быстрее и проще.

Метки: ,

6 закон программирования

Сложность программы растет до тех пор, пока не превысит способности программиста.

Как это верно.

Метки:

Не phpMyAdmin-ом единым…

Кто не знает phpMyAdmin? Наверное, только тот, кому не приходилось работать с SQL. Многие предпочитают этот веб-интерфейс даже «настольным» приложениям — официальным и не очень, бесплатным или «ломанным». Секрет этого продукта в том, что его достаточно «вылить» в любую директорию сервера и… и все. Вводите логин-пароль — и делаете все, что нужно.

На самом деле, он может гораздо больше и множество дополнительных возможностей требует настройки конфигурационных файлов. Но нам-то — кому требуется по-быстрому создать нужную структуру, выполнить запрос или исправить одну-две строки в таблице — всего это не требуется. Полностью настроенный интерфейс со всеми возможностями может быть востребован — и в большинстве случаев используется! — хостинг-провайдерами, которые предоставляют своим клиентам базы mySQL. Остальным же функционал в 17 мегабайт (в архиве 3,5) сильно избыточен. Что же делать?

Например, использовать Adminer. Один-единственный php-файл размером от 158 (английская версия для mySQL) до 381 (многоязычная версия для mySQL, Postgres, SQLite, MS SQL и Oracle) килобайт. Который может… ну, в общем, мне не потребовались функции, которыми не обладает этот продукт. Есть еще рекордно малый (30 килобайт) PHP Mini Admin for MySQL, но сильно проще — не умеет редактировать записи прямо на странице и работает только с mySQL. Продукт либо не завершен и будет еще активно дорабатываться, либо отражает отношение создателя, для которого возможности выполнять запрос достаточно, а всякие «интерфейсные красивости» избыточны и бесполезны.

В общем, остановился на Adminer. Лаконичный, удобный и достаточный инструмент. «Must have!»

Метки: , , ,

JSON_encode своими силами

Вот все упрекают php-шников в «велосипедостроении». А что, блин, делать-то? Чтобы добиться нормальной работы json_encode с обратной косой чертой и одиночной кавычкой, провозился целый день. И так и не добился. Потом за полчаса написал свою функцию, которая еще и не переводит unicode-символы в мнемоники и структурно форматирует текст.

[sourcecode language=»php»]
<?php
function encodeJSON ($data, $level = 0) {
if (is_scalar($data))
return """.addslashes ($data).""";
$token = array();
$indent = str_repeat(‘ ‘, $level);
if (is_array($data) && (array_values($data) === $data)) {
foreach ($data as $val)
$token[] = encodeJSON ($val, $level + 1);
return "[n {$indent}". implode(",n {$indent}", $token)."n{$indent}]";
}
if (is_array($data) || is_object($data)) {
foreach ($data as $key => $val)
$token[] = encodeJSON ($key)." : ".encodeJSON ($val, $level + 1);
return "{n {$indent}". implode(",n {$indent}", $token)."n{$indent}}";
}
}
?>
[/sourcecode]
PHP ненавижу…

Метки: ,