Архив за 02 июня 2013

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

  1. ресайз изображений под любые размеры (добавление новых размеров не должно вызывать головную боль)
  2. модификация изображений: добавление водяного знака, применение эффектов оттенки серого, сепия и вообще добавление новых эффектов не должно быть трудной задачей
  3. обработка изображения не должна влиять на основной поток (скорость загрузки страницы)
  4. для ускорения загрузки изображений на странице решение должно позволять обойти лимит одновременных соединений в браузерах, детальнее о лимите (рус)
  5. избежать возможность засорения сервера явной передачей параметров ресайза в url
  6. кешировать результаты работы

Читать полностью »

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

Проект посвящен разработке свободной системы управления бизнес-процессами, основан на ядре jBoss jBPM и представляет собой программное окружение к этому ядру для работы конечного пользователя. В течение всего времени с момента появления проекта часть потенциальных пользователей системы знакомилась с примененными в проекте техническими решениями, но приходила к заключению, что систему на своем предприятии они ставить не будут, так как система российская. Потенциальные пользователи говорили, что лучше они попробуют внедрить на предприятии сам jBoss jBPM. На замечания, что наша система содержит внутри себя jBoss jBPM и от установки системы они ничего не потеряют, никаких объяснений мы не получали. В конечном счете выяснилось следующее:
Читать полностью »

Пишу игрушечную ОС (о реализации sleep)
Очередной пост для блога, посвященного работе над игрушечной ОС. В прошлый раз я писал про необходимость в простеньком драйвере AHCI (SATA). Прежде чем начать двигаться в этом направлении, я решил набросать инфраструктуру драйверов: общий интерфейс драйвера + уточнённый интерфейс драйвера устройства хранения. Формулирование этих интерфейсов выявила проблему, на которую я ранее не обращал внимания — проблему портируемости.

Не зависящий от платформы код (например, большая часть планировщика, вспомогательный код типа kprintf, ...) у меня перемешивается с кодом, заточенным только под x86_64 (системные таблицы дескрипторов, APIC, прерывания, ...). Хотя ничего не мешало мне сформулировать интерфейс драйвера, жёстко привязанного к x86_64 (в частности, свободно оперировать PCI-адресами), мне стало ясно, что без чёткого отделения кода, специфичного для конкретной платформы, от общего портируемого кода я буду лишь усугублять ситуацию. Итак, я принял решение перебрать всё написанное, отделив общий код (в корне src/) от кода, специфичного для платформы (в src/x86_64/). Этим я и занимался последние две недели.
Читать полностью »

Невероятно и стыдно. Является ли это новым падением CAPTCHA, да к тому же для Белого дома? Позвольте мне объяснить.

Для того, чтобы подписать on-line петицию к Белому дому об обеспечении глобальной доступности книг для слепых, нужно зарегистрировать аккаунт. Проблема в том, что для этой регистрации обязательно нужно решить CAPTCHA, а её аудиоверсия не поддаётся расшифровки. Таким образом, слепые люди не могут подписать петицию, отстаивающую равноправие для слепых!
Читать полностью »

Распределенный аудиоплеер на Odroid U2Однажды я заметил, что довольно много времени я провожу на кухне, куда звук от колонок, расположенных в комнате доходит плохо. И тогда мне захотелось сделать хороший бесшумный плеер, способный синхронно воспроизводить музыку в нескольких комнатах. Конечно проблему можно было решить простым поворотом регулятора громкости, но этот способ был отброшен как негуманный по отношению к соседям. Другой важный момент заключался в том, что я хотел использовать те же колонки для вывода звука с компьютера. Зачем мне иметь несколько комплектов аккустики в одной комнате?
Пост получился довольно длиннный, так как я старался уделить внимание соображениям, по которым я выбирал то или иное решение.Читать полностью »

Логотипы модулей-минимизаторов из Bundle Transformer

Разработчики, использующие Bundle Transformer, часто спрашивают у меня: «Какой минимизатор обладает самой высокой степенью сжатия?». В принципе, в сентябре прошлого года в своей статье «Вышел Bundle Transformer 1.6.2 или что изменилось за полгода?» я уже проводил сравнение минимизаторов по степени сжатия кода, но это сравнение было поверхностным и не было подкреплено цифрами.

В этой краткой статье мы проведем сравнение наиболее популярных алгоритмов минимизации CSS- и JS-кода на примере адаптеров-минимизаторов из Bundle Transformer. В качестве исходных файлов будут использоваться файлы bootstrap.css и bootstrap.js из Twitter Bootstrap версии 2.3.2. Измерять размеры файлов мы будем с помощью YSlow.
Читать полностью »

Несколько лет назад появился проект, который я посчитал достаточно интересным для себя, а именно — TzGen. Проект решал одну из основных задач веб-агентур того времени — составление технического задания. Идея показалась интересной — было решено написать его владельцам: интересовало развитие проекта, а также возможность инвестиций. Однако, ответа не получил. Через несколько месяцев, имея свободные ресурсы дизайнера и ПМ (себя лично), было принято решение своими руками создать новый проект. Что из этого получилось, смотрите ниже.

image
Читать полностью »

Привет!
Продолжая неделю морского боя, хочу предложить еще один способ построения оптимальной стратегии стрельбы. Он использует представление стратегии в виде дерева, что весьма распространено в теории игр. Представление задачи в виде таблицы решений позаимствовано из теории тестов, которая была популярна в 70-е годы прошлого века и применялась, в частности, для контроля и диагностики неисправностей в электронных схемах. Этот способ позволяет найти оптимальную стратегию, но у него очень большая вычислительная сложность. Увы, игру на поле 10x10 проанализировать не удалось.
Читать полностью »

На моём сайте в определенный момент очень остро встал вопрос организации мультиязычности, причём речь шла не о 2-3 языках, а о том, чтобы перевод сайта на другой, абсолютно любой язык мог быть осуществлен за считанные минуты. Информации в сети на эту тему не так много(может я плохо искал?) и мне пришлось думать самому. Хотя моё решение довольно простое и многим может показаться очевидным, я всё равно приведу его, надеюсь кому-нибудь оно будет полезно. Сразу предупреждаю, что необходимо мало-мальское представление о фреймворке kohana 3.
Читать полностью »

«Алгоритм» для случайной выборки значений из array без их повторения. Конкретнее, в рамках обучения JS, я использовал его для генерации классической RPG-группы персонажей (варвар, маг, вор, рыцарь, священник), без повторения классов и имен.

image

Принцип предельно простой, но он может быть полезен таким же новичкам в JS как и я. Привязка к RPG исключительно символическая — сейчас я активно пытаюсь сменить профиль с маркетинга на IT (понял, что душа лежит), а практиковаться в игровой форме гораздо интереснее.
Читать полностью »