Мысли вслух


1
Dec 10

vs кодировщики JPEG-файлов.

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

Итак, наши номинанты на получение премии лучший Jpeg Encoder:

com.adobe.images.JPGEncoder
Кодер от as3corelib

JPEGEncoder
Оптимизированная байтарейцами кодер от as3corelib
http://www.bytearray.org/?p=775

cmodule.jpegencoder.CLibInit
Alchemy кодер от segfaultlabs
http://segfaultlabs.com/devlogs/alchemy-asynchronous-jpeg-encoding-2

by.blooddy.crypto.image.JPEGEncoder
Кодер от blooddy
http://www.blooddy.by/ru/crypto/

Сразу нужно заметить, что генерация jpeg файлов бывает двух видов – синхронная и асинхронная.
Синхронная кидает всю мощность системы на просчет файла и “вешает” систему до полного окончания генерации.
Асинхронная делает просчет с паузами, тем самым, позволяя выводить на экран данные процесса и совершать пользователю действия.
Соответственно синхронная работает быстрее в несколько раз.
Какую из них выбрать зависит зависит от типа вашей разработки и размера генерируемого файла.

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

Чтобы долго не тянуть рассмотрим на практике результаты тестов.

Get Adobe Flash player

Как видите, “алхмия” уделывает все остальные кодировщики по скорости.

UPDATE: Как оказалось на локале и в браузере кодировщики ведут себя по-разному. Если на локалке “алхимия” в лидерах.
То в браузере кодировщик от bloody уделывает её. Для более точного анализа отпишитесь в коментах о ваших результатах.

Но дело в том, что библиотка от segfaultlabs уделывает все остальные еще и по гибкости настроек.
Если в стандартных кодировщиках у нас просят всего два параметра (bitmapdata и качество сжатия jpg), то “алхимия” может принять и размеры исходного джепега и налету его заресайзить.

А сейчас небольшой туториал по подключению этой прекрасной библиотеки в формате fla + FlashDeveloper.

1. Качаем swc библиотеку отсюда (ссылка внизу поста) http://segfaultlabs.com/devlogs/alchemy-asynchronous-jpeg-encoding-2 и сохраняем её, например, в папочку lib вашего проекта.

2. Создаём новый fla-файл, открываем Publish Settings. Чтобы swc библиоткека не ругалась плохими ошибками ставим галочку Export SWC. В результате при компиляции проекта рядом с swf вы увидите swc файл, который не нужен для последующей работы с swf.

3. Заходим в “ActionScript 3.0 Settings…” и инклудим библиотеку с помощью кнопки Browse.

4. Открываем Flash Developer проект и с помощью правой клавиши мыши добавляем библиотеку в проект.

Теперь немного кода.

Инициируем библиотеку:

import cmodule.jpegencoder.CLibInit;   
_jpeginit:CLibInit = new CLibInit();
_jpeglib = _jpeginit.init();

Подключаем кодировщик:

_jpeglib:Object;
_progressMonitor:Number; //монитор прогресса ж)
_jpgArray:ByteArray; //временное хранилище
_jpgStream:ByteArray; //итоговый массив файла
_jpgSource:BitmapData; //исходная битмапа для кодировки

_progressMonitor = setInterval(encodeProgress, 20); //заряжаем мониторинг прогресса
_jpgArray = _jpgSource.getPixels(_jpgSource.rect);
_jpgArray.position = 0;
_jpgStream = new ByteArray();
_jpeglib.encode(_jpgArray, _jpgStream, _jpgSource.width, _jpgSource.height, 60); //синхронная кодировка
//или
_jpeglib.encodeAsync(encodeComplete, _jpgArray, _jpgStream, _jpgSource.width, _jpgSource.height, 60); //асинхронная кодировка

function encodeComplete(ba:ByteArray) {
  clearInterval(_progressMonitor); //останавливаем прогресс монитор
}

function encodeProgress() {
  trace("Progress - " + Math.round(_jpgArray.position / _jpgArray.length * 100) + "%");
}

Спасибо за внимание, вопросы и каменты приветствуются.


7
Jul 10

vs Мой Мир

Портировал и запустил с 1 июля приложение «Моя Вебка» на Мой Мир.

Неожиданно поразил рост приложения:
~4000 установок и ~7000 уников в день.

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

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

Из недостатков API – прямая загрузка на сервер ММ пока невозможна, поэтому приходится сначала сохранять на свой сервак и потом уже постить в альбом и в гостевую.
Будем наблюдать…

Update: Дали бесплатный пакет рекламы, не сказал бы, что рекламка супер цтрная, но эти цифры уж очень вселяют пессимизм в бесплатные пакеты. Сдаётся мне общая засраность рекламой Моего Мира сказывается на этом.