Как создать ТЗ для программиста

Рекомендации геймдизайнеру от программиста (архитектора).
Вступление

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

Все слышали про pre poduction, но мало кто знает как именно это происходит. И если про стадию разработки написано много, а про стадию издания — еще больше, то про стадию планирования известно очень мало. В лучшем случае вам посчастливится ознакомится с результатами планирования. А вот как были достигнуты эти результаты? — загадка во тьме.

Этот документ является результатом «разбора полетов» после написания игры Звездная арена для социальных сетей. В этом документе я попытался упорядочить список проблем и решений к которым я и Александр пришли в процессе совместной работы над игрою. Кроме того этот документ является частью большой работы по выстраиванию рабочего процесса создания компьютерных игр.

Я намеренно оставил за кадром другие документы: концепцию, экономическое обоснование и ТЗ для других исполнителей. Это позволило сфокусироваться на одной теме и осветить ее и только ее достаточно подробно. (далее…)

144-ядерный процессор Чарльза Мура поступил в продажу по $20

Чарльз Мур, создатель языка программирования Форт (Forth), довёл до стадии промышленного производства уникальную разработку — многоядерный процессор GA144. Чип размером 10×10 мм уже поступил в продажу по цене $20 (при заказе от десяти штук), также доступны материнские платы для него. Фактически, это аппаратное воплощение самого языка программирования Форт.

Крайне необычный процессор по ряду параметров не имеет себе равных среди CPU:

  • 144 независимых ядра, которые активируются только при поступлении инструкции, то есть у этого процессора нет такой характеристики как «тактовая частота»;
  • скорость выполнения инструкций 1400 пикосекунд (эквивалент 700 МГц);
  • энергопотребление 7 пикоджоулей на одну инструкцию;
  • энергопотребление в «спящем» режиме менее 100 нановатт; (далее…)

jQuery Mobile 1.0

После более года разработки увидел свет финальный релиз jQuery Mobile 1.0 на базе jQuery 1.6.4 (поддержка jQuery 1.7 появится с версии jQuery Mobile 1.1). Этот фреймворк создан для разработки сайтов с тач-интерфейсом при помощи привычных HTML, CSS и JavaScript. Инструменты вроде PhoneGap позволяют легко трансформировать сайт HTML5 в мобильное приложение и распространять его через магазины приложений.
(далее…)

Самый простой способ генерации xls в PHP

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

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

В итоге я выбрал самый простейший способ из найденных в интернете — выведение стандартной html таблицы под видом xls-файла. На этом пути лично у меня возникла проблема с кодировкой, эксель упорно не хотел видеть кириллицу в честном Windows-1251. В итоге рабочей оказалась следующая конструкция.

header('Content-Type: text/html; charset=windows-1251');
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
header('Content-transfer-encoding: binary');
header('Content-Disposition: attachment; filename=list.xls');
header('Content-Type: application/x-unknown');

echo<<<HTML
<table border="1">
<tr><td>
htmlentities(iconv("utf-8", "windows-1251", $val),ENT_QUOTES, "cp1251"));
</td></tr>
</table>
HTML;

Соответственно iconv нужен в случае если данные в БД пишутся в utf-8, htmlentities переводит в доступный экселю формат. Попытка применить htmlentities к тексту в utf-8 привела к очень большому количеству китайских иероглифов в экселе.

Этот способ позволяет с помощью стандартных же html тэгов задавать жирный и курсивный текст, но пока не удалось понять, можно ли сделать заливку ячеек цветом. Впрочем для генерации простенького .xls файла способ все равно вполне пригоден. Данные потом нормально просматриваются, редактируются и сохраняются в экселе.

Надеюсь этот пост кому-нибудь поможет в решении аналогичной задачи.

HTML5: Рисовалка на JavaScript Canvas. Основы

canvas paint рисовалка

HTML5 – несомненный тренд. Причем, не столько новая спецификация с новыми тегами, сколько гармоничное и могучее сочетание HTML + CSS + JS, изящно утирающее нос Flash.

Уже сейчас можно наблюдать красивые HTML-5 сайты без мегабайтов изображений и без сотен килобайт скриптов. Например, фон вот этого сайта сделан при помощи JavaScript Canvas.

Как видите, JS Canvas действительно хорошая вещь. Именно ей я хочу посвятить первый пост свежеоткрытой рубрики «HTML5″. В нем я опишу процесс создания простенькой рисовалки на HTML5 с единственным инструментом «Pencil». Вот такую.

Общие сведения

Canvas позволяет рисовать в специальном элементе документа <canvas> линии, дуги, прямоугольники, окружности, заливать пространство, манипулировать текстом и картинками. Всё это прекрасно описано в «Canvas Tutorial« Mozilla Developers Center с примерами и картинками, прям как мне нравится.

(далее…)

jsPlumb — подвешиваем блоки с jQuery

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

jsPlumb demo

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

Уверен, что jsPlumb — гарантированный кандидат в TOP10 jQuery plugins 2010, обязательно приложу к этому усилия!

И да, работает со всеми браузерами (IE6-8 и остальные), протестирован в 1.3.2 и 1.4.2 версиях jQuery, для поддержки canvas в IE использует Google′s ExplorerCanvas script.

Правильный редактор для PHP

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

Хочется иметь нормальную реализацию IntelliSense, а не «деревянную» пародию на него в виде заранее определенного списка методов и констант языка, «вываливающегося» во время работы по поводу и без повода в виде полного списка. IntelliSense обязательно должен «знать» о всех используемыми вами классах, о их методах и переменных, то есть подключил через #include файл с определением своего класса, и редактор сразу же его подхватывает, подсказывая информацию о всех «внутренностях» объектов этого класса. (далее…)

Паранойя об инклудах в php

Речь пойдет о том, как сделать php файл недоступным для посетителей сайта, но при этом доступным для того, чтобы подключать его (по средствам функции include и т.п.) к другим php файлам на сервере. В первую очередь я задался вопросом о том, каким образом можно внутри php файла (средствами php) узнать – вызван/исполняется ли файл непосредственно или через какой-то другой скрипт.

Подобных мыслей не возникает, когда в основные скрипты подключаются php файлы, являющиеся некими библиотеками, содержащими лишь какое-то количество реализаций функций/классов. Если посетитель сайта вызовет в браузере такой библиотечный файл, то ничего страшного не произойдет (хотя как по мне, то если уж закрывать, то все :-) ). (далее…)

Что такое RSS?

RSS — это особый формат, который используется для доставки новостей с разных сайтов в указанное вами место. Например, новости сайта ТНК-BP после публикации будут автоматически пересылаться на ваш компьютер. Особенно удобно пользоваться RSS, когда речь идет о сборе информации из нескольких источников одновременно: вы будете следить за появлением новостей на всех интересующих вас сайтах, не посещая их. Таким образом, вы существенно сэкономите свое время, поскольку сбором и доставкой нужных сведений за вас будет заниматься специальная программа, а вам останется только просматривать готовую сводку последних обновлений — свежих новостей, событий и т. п. (далее…)