7 ноября 2011 г.

Хранение булевых полей в базе данных

Очень часто встречается ситуация, когда в базе данных необходимо хранить уйму битовых полей. Банальными решениями, конечно же, будут вставка необходимых колонок, несущих булевый смысл или хранение строки с перечислением всех необходимых сущностей. Но оба решения видятся мне громоздкими, не производительными и не гибкими. Более элегантным видится хранение булевых значений в одном целочисленном поле. Идея, конечно же, далеко не нова, но опишу её по-своему.

16 сентября 2011 г.

Класс обновления приложения AIR

Часто встречаю вопрос типа "Как сделать обновление приложения AIR". Не проверял, есть ли в сети что-то подобное (наверняка есть), а просто решил выложить свой класс для этой процедуры. Он далеко не отшлифован и функционал предполагалось значительно расширить. Но сразу не сделал, а времени на это уже нет. Поэтому, кому понравится, может расширять и модернизировать этот класс без всяческих оговорок.

8 сентября 2011 г.

Использование компилятора ресурсов pyrcc4 в PyQt

При использовании замечательной питоновской библиотеки PyQT для компиляции ресурсов (например файлов изображений) в код модуля применяется утилита, поставляемая вместе с библиотекой. Находится она в папке bin (а иногда в корне библиотеки) и называется pyrcc4.

29 августа 2011 г.

Функция форматирования числа на Javascript

Мой велосипед форматирования числа на Javascript.

28 августа 2011 г.

ZendDebugger для PHP в Aptana

Озадачился подключением debugger'а для PHP под Винду. Выбор пал на ZendDebugger. А так как я разрабатываю больше под Aptana и основательно уже успел к ней привыкнуть, то решил и поддержку PHP встроить туда же и ZendDebugger настроить там же, благо Aptana без всяких проблем поддерживает и PHP и ZendDebugger. Но дебаггер требует небольшой дополнительной настройки. Как настроить найти можно, постараюсь составить инструкцию более чётко, без лишних нюансов.

24 июля 2011 г.

Walking camera для Alternativa3D 8

После большого количества вопросов о том, как сделать перемещаемую пользователем камеру для Альтернативы, а иногда и такую, которая не "проходит сквозь стены", я решил всё же написать простенький пример. Для облегчения понимания максимально упростил логику и оставил только показательный функционал — "навернуть" всегда можно.

Также, пример рассчитан на новую, 8-ю версию "движка" Альтернативы, который поддерживает аппаратное ускорение графики. Но так как Flash Player 11 еще не вышел, то для функционирования примера и его тестирования необходим Flash Player 11 Incubator. Как всё это дело настроить можно посмотреть в предыдущих моих записях в блоге.

23 июля 2011 г.

Flash3D, Molehill. Модель освещения по Фонгу на AGAL

В прошлый раз для освещения 3-мерной сцены применялась модель освещения по Блинну. В этот раз применим модель Фонга и добавим цвет блику и окружающему освещению (ambient). Модель Фонга отличается лишь тем, что коэффициент для отраженного света вычисляется по-другому. При его расчете учитываются все 3 вектора: нормаль вершины, положение наблюдателя и положение источника света.

21 июля 2011 г.

Flash3D, Molehill. Добавляем блик от источника света на AGAL

В прошлой записи к 3-мерной сцене было добавлено рассеянное (диффузное) освещение. Но можно сделать освещение объектов чуть более естественным, добавив к нему блик от источника света. Сделать это не сложно. Следует лишь дополнительно учитывать положение наблюдателя в пространстве. Зная положение наблюдателя и положение источника света можно найти биссектрису между этими направлениями. Скалярное же произведение нормали и биссектрисы, возведенное в степень выбранного числа даст нам составляющую зеркального блика.

20 июля 2011 г.

Flash3D, Molehill. Шейдер диффузного освещения на AGAL

В своей записи Flash3D, Molehill. Добавляем трехмерный объект я рассказал как добавлять трехмерный объект во Flash-приложение, использующее новый API для работы с ресурсами графического адаптера Molehill. Но объект был раскрашен текстурой без учета освещения. Здесь я расскажу как добавить освещение, пока простое, рассеянное.

2 июля 2011 г.

Классический пазл Пятнашки на ActionScript3

Update: сделал еще и на HTML с общими результатами.

Давно лежал, мозолил глаза, незаконченный проект — игра «Пятнашки». Решил доделать (в простом виде). Можно, конечно, и таблицу результатов перенести на сервер, и различных "плюшек" в арте добавить. Но решил сильно не заморачиваться, а сделать по минимуму, а время уделить чему-нибудь более интересному.

28 июня 2011 г.

Компонент Table на ActionScript 3

Потребовалось отображать табличные данные на чистом as3 без использования компонентов Flex (типа DataGrid) или Flash. Как обычно, первым на очереди был гугл. Но, к своему удивлению, ничего бесплатно-приемлемого найти не удалось. Изваял свой. Старался сделать компонент максимально простым в использовании. Можно загрузить swc-файл и подключать к любому проекту. Версия Flash-плеера не меньше 10-й. Если у кого-то появится заинтересованность, то функционал можно разширить. Пока мне для своих нужд того что уже сработал вполне достаточно.

12 июня 2011 г.

Настройка C++ проекта в Eclipse CDT с MinGW

Ради интереса решил попробовать писать код C/C++ в Eclipse. Надо сказать задача оказалась не из "установил и заработало". По крайней мере под Винду и для компилятора MinGW. Но и слишком сложной процедуру тоже не назовешь. Пришлось немного посерфить по Инету в поисках ответов на вопросы. И, надо сказать, всех ответов в одном месте я не нашел. А некоторых не нашел совсем. Поэтому поделюсь своим опытом настройки Eclipse CDT.

11 июня 2011 г.

Подключение фреймворка для учебных примеров OpenGL и DirectX

В предыдущей моей записи я описал набор модулей на C++, используя которые можно заниматься только API рисования, не заморачиваясь на создании окна и подсоединении выбранного API. Причем, можно создавать код и под OpenGL, и под DirectX отдельно, при желании переключаясь между ними.

10 июня 2011 г.

Фреймворк для учебных примеров OpenGL и DirectX на C++

В своё время, выполняя множество уроков по OpenGL и DirectX под Windows у меня выработалась определенная схема построения приложения. И только недавно до меня дошло, что можно объединить функционал создания окна Windows и для OpenGL и для DirectX! Пошерстив Интернет на предмет данной темы, у меня не получилось найти нечто подобное, поэтому сделал свой "велосипед" и выкладываю результат для общего пользования.

Объединив наработки и причесав, получился набор модулей. Сейчас, используя данный код, в большинстве случаев (для учебных целей), не придется ломать голову над функционалом создания окна и присоединения контекста OpenGL или создания устройства DirectX. Достаточно скопировать файлы себе в проект и прилинковать нужные библиотеки.

5 июня 2011 г.

Пример реализации паттерна Singleton на C++

Паттерн программирования Singleton в C++ можно реализовать по крайней мере двумя способами: использованием только статических членов (методов) и реализацией единственного экземпляра класса. Первый способ более тривиален и менее гибок. Поэтому представлю второй.

3 июня 2011 г.

Генератор паролей на jQuery

Сделал свой генератор паролей на jQuery. Не спрашивайте зачем :). Генерирует пароли любой длины. Можно управлять содержанием символов в пароле: включать/выключать цифры, большие латинские, маленькие латинские, специальные символы.

31 мая 2011 г.

CAPTCHA для Django. Альтернативный вариант.

В предыдущей моей записи я рассказал как можно написать свою CAPTCHA для Django. Недостатком этого способа мне видится то, что до функций обработки запросов ("вьюх") не всегда есть доступ, точнее он не всегда оправдан. Например, когда "вьюхи" находятся в сторонних приложениях. Эту проблему можно решить несколькими способами. Один из них — использовать Middleware.

30 мая 2011 г.

Как сделать Captcha для Django

Посмотрев примеры CAPTCHA для Django в сети, не нашел понравившийся. Поэтому решил набросать не сложную свою.

14 мая 2011 г.

Тестирование алгоритма поиска пути A* для Flash

При тестировании алгоритма поиска пути A* попутно получилось создать некий прототип игры-стрелялки. Но суть не в этом. Предполагалась возможность использования этого алгоритма в 3D-шутере (FPS) для Flash. Предположительно на базе 3-мерного движка для Flash Alternativa3D 7 или 8 версии. Важно было оценить саму возможность и примерную ресурсоемкость алгоритма.

5 мая 2011 г.

Несложная стрелялка, вид сверху

Знакомился с алгоритмом A* (алгоритм поиска пути) и попутно получилась несложная стрелялка (можно видеть в следующей записи).

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

То есть сейчас вполне реально быстро создать массу разнообразных уровней, продумать геймплей, отрегулировать игровой баланс, ввести дополнительные фичи. Но это уже должно быть задачей гейм-дизайнера и художника.

24 апреля 2011 г.

Первый уровень Doom2 на Alternativa3D 7

Подключил к своему контроллеру FirstPersonController определение столкновений. Теперь персонаж может ходить по уровням не опасаясь болезни прохождения сквозь стены. Добавил прыжок клавишей Space.

Для тестирования функционала решил построить подобие первого уровня игры Doom 2. Пришлось вспомнить давно забытые навыки 3d-моделирования. Уровень смоделил достаточно быстро, а вот текстурировать пришлось почти 8 часов. Сначала хотел сделать более качественные копии оригинальных текстур уровня, но потом понял, что времени это занятие отнимет массу и сделал "примерно".

19 апреля 2011 г.

Определение столкновений в Alternativa3D 7

Определение столкновений трехмерных объектов при разработке большинства трехмерных анимированных, а тем более интерактивных сцен, является одним из важнейших аспектов. API Alternativa3D 7 предоставляет один из вариантов решения этой проблемы посредством класса EllipsoidCollider. В этом моем уроке вы можете познакомиться с технологией ближе.

Ну, а на мувике можно видеть процесс вычисления столкновений нагляднее.

15 апреля 2011 г.

Стрельба по бутылкам в Alternativa3D 7

Немного подправил FirstPersonController и реализовал стрельбу, что вылилось в простенький шутер. Перемещаться можно с помощью клавиш WSAD или стрелочками. Обзор мышью включается/отключается клавишей L. Если вдруг :) закончатся бутылки — жмем R.

14 апреля 2011 г.

Контролер FirstPersonController для Alternativa3D 7

Реализовал контроллер вида от первого лица на API Alternativa3D 7. По небольшому миру с маркерами можно перемещаться с помощью клавиш WSAD или стрелочками. Обзор мышью включается/отключается клавишей L.

Назначение пользовательских клавиш, реализация прыжка, приседания, регулировка чувствительности мыши — это уже "дело техники".

12 апреля 2011 г.

Камера HoverCamera3D для Alternativa3D 7

Часто поведение нативного контроллера Альтернативы SimpleObjectController не удовлетворяет потребностям и я решил немного расширить возможности движка. Прочитать урок, посвященный созданию камеры HoverCamera3D, подобной камере в Away3D можно здесь. Код урока можно загрузить отсюда. Смотрим.

С днем космонавтики, друзья!

11 апреля 2011 г.

Расширение класса при создании свойствами метакласса в Python 2.6

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

1 апреля 2011 г.

Flash3D, Molehill. Добавляем трехмерный объект

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

Так как мы будем использовать мощности графической карты, посредством API Molehill, то мы можем загрузить гораздо больше полигонов без ущерба для производительности, чем при использовании софтверного рендеринга. Геометрия в графическую карту загружается с использованием вертексного буфера. В один вертексный буфер API Molehill позволяет добавить максимум 65535 вершин с максимальным числом атрибутов на вершину — 8 (256 байт). Для наших целей этого будет вполне достаточно.

23 марта 2011 г.

Цепочка вызовов методов валидации данных формы в Django

BaseForm.is_valid()
BaseForm._get_errors()
BaseForm.full_clean()
BaseForm._post_clean() -> {
    Model.clean_fields()
    Model.clean()
    BaseForm.validate_unique() -> Model.validate_unique()
}

21 марта 2011 г.

Простой шейдер для двухмерной текстуры на AGAL

Давайте продолжим наши исследования шейдеров на AGAL для бета-версии Flash Player 11 с API Molehill, которое я начал несколько ранее. Здесь мы разберем вопрос о том, что потребуется сделать, если мы захотим, чтобы наш треугольник был раскрашен пикселями растрового изображения.

20 марта 2011 г.

Пишем первые шейдеры, используя Molehill

Для того, чтобы понять как писать программы с использованием API Molehill давайте разработаем каркас приложения и разберемся как это всё работает. Сделаем это вместе, вооружившись ссылкой на статью Thibault Imbert "Digging more into the Molehill APIs", нашими предыдущими познаниями в этой области:

а так же здоровым любопытством и терпением.

15 марта 2011 г.

Радио плеер для онлайн станций на Flash и AIR

Радио плеер

На работе потребовалось создать плеер для популярных станций, вещающих онлайн с которыми компания, где я работаю, подписала договор. Решил сделать попутно и свою версию, так сказать "для души". Сначала разрабатывалась версия для размещения в браузере, но потом я решил, что десктопное приложение будет удобнее и сделал еще и на AIR. Скачать можно здесь (для браузера) и здесь (как приложение).

11 марта 2011 г.

Поддерживает ли видеокарта Molehill?

Конечно же следует перефразировать заголовок более грамотно: будет ли работать API Molehill в режиме аппаратного ускорения с Вашим графическим адаптером. Ответ на этот вопрос можно узнать пройдя по ссылке http://zp.amsnet.pl/cdragan/d3dcaps.html и загрузив представленную утилиту.

1 марта 2011 г.

Что такое Molehill?

Данная статья — вольный перевод статьи Thibault Imbert. Оригинал здесь.

Molehill — 3D API для Adobe Flash Player и Adobe AIR. Это название API для работы с трехмерной графикой на языке ActionScript 3 для платформы Flash, использующего возможности графического процессора (GPU). Работа API основана на низкоуровневом и высокоуровневом программировании шейдеров (вершинных и фрагментных). На платформе Windows API будет полагаться на DirectX. На других платформах — на OpenGL доступной реализации. Благодаря этому API разработчик получает возможность управлять таким функционалом как z-буферы, буферы трафарета, кубические текстуры, vertex skinning при скелетной анимации и многим другим на уровне GPU. А пользователь получает высокопроизводительную 3-мерную графику прямо в своём браузере.

28 февраля 2011 г.

Flash Player 11 бета с API Molehill во FlashDevelop

Радости просто нет предела! Долгожданный Flash Player 11 с поддержкой API Molehill вышел! Учтите, что это бета-версия и не все фичи могут попасть в релиз. А также, скорее всего, будут добавлены новые. Также плеер скорее всего содержит множество багов. Так что в продакшн это разработка не годится. Только для опытов :).

Пару слов об API Molehill, чтобы знать с чем мы будем иметь дело. А дело мы будем иметь с возможностью использовать ресурсы GPU (процессора видеокарты) прямо из флеш-плеера! Взаимодействие происходит посредством "кодирования в металле" :) (кто в теме поймет) или проще - низкоуровневых шейдеров. Конечно, впоследствии Adobe выпустит и высокоуровневые средства (а может уже есть?). Но пока и это прорыв.

Шейдеры же, это такой Ассемблер для GPU, если упрощенно.

Почему шейдеры лучше? Если раньше 3-мерность во Flash-плеере обеспечивалось силами CPU (центрального процессора), и количество визуализируемых полигонов было не велико (при относительно приемлемом уровне кадров в секунду - FPS), где-то порядка тысяч, от силы десятков тысяч, то сейчас этот показатель увеличится в тысячи или даже в десятки, сотни тысяч раз (будет зависеть уже от видео-карты)! Не говоря уже о других приемуществах, говорить о которых мы не будем, потому как говорить о них можно долго.

Данная публикация написана для тех, кто очень хочет поэкспериментировать с API Molehill, но познания в английском являются преградой. Пока русскоязычных публикаций мало. Здесь я расскажу как настроить среду разработки, чтобы использовать API Molehill на Windows-машине. К слову, на Mac и Linux тоже можно сделать подобное.

21 февраля 2011 г.

HTML5 в браузерах

У многих пользователей расширение возможностей HTML (HTML5) и CSS (CSS3) вызывает иногда необоснованный восторг. Давайте посмотрим, насколько всё хорошо.

3 февраля 2011 г.

Программа для хранения телефонных номеров

Написал простенькую программку для хранения номеров телефонов на AIR. Скачать здесь. Подробнее здесь.