thedeemon: (office)
Коробочный продукт, над которым сейчас работаю, подошел к стадии частной беты. Пишется он на D с гуем на DlangUI. Это довольно обширная кроссплатформенная библиотека (под 50к строк), и, линкуясь с ней, у меня не было уверенности, что в мой бинарник не попадет какой-нибудь ненужный слон. Сейчас главный ехе-шник у меня имеет размер 2.2 МБ. Вспомнил про онлайн утилиту Владимира Пантелеева TreeMap Viewer, сунул туда свой .map файл и получил красивую интерактивную карту. Довольно познавательно. Слонов не обнаружил, есть некоторое количество зайцев, но они небольшие, не жалко. Оказалось, что из тех 2.2 МБ две самых больших части, почти одинакового размера по 800+ КБ, это dlangui и Phobos, стандартная библиотека. Весь рантайм занял около 380 КБ, из которых GC всего 24, а остальное про исключения, рефлексию, массивы, форматирование строк, ну и C runtime, конечно. Очень много кода посвящено поддержке юникода. В целом, я доволен. Не то, чтобы размер имел большое значение, но все же приятно, когда общий размер распространяемых бинарников получается на порядок меньше чем с каким-нибудь Qt при схожей функциональности. И к вопросу о "языках с рантаймом".
thedeemon: (office)
Недавно делал однопроходный дешейкер, нашел ему отличное применение - в фильме про землетрясение можно быстро все поправить и всех спасти. :) И становится сразу видно, как девушка мальчишку трясет, изображая эффект от замлетрясения.

thedeemon: (office)
Делаю плагин для AviSynth, это такая гибкая штука для обработки видео: снаружи скриптовый язычок, внутри написанные на С++ модули. Модули эти обмениваются видео кадрами, для которых сделано автоматическое управление временем жизни через COM-like подсчет ссылок. Документация велит обычные указатели на VideoFrame не использовать, а использовать умный указатель PVideoFrame везде, он сам счетчик ссылок дергает когда надо. А еще там некоторое подобие uniqueness typing а-ля Clean: PVideoFrame может кому угодно выдать указатель для чтения видеоданных, но на запись он даст указатель только когда счетчик ссылок равен 1, т.е. писать можно только когда никто не смотрит, когда кадр всецело твой. Натурально как в Clean, там тоже, когда никто объект не пытается менять, можно несколько ссылок на него иметь из разных мест, а вот писать туда можно только когда ссылка единственная, уникальная. Но только в Clean сделано правильно: ежели мы уникальный указатель в функцию передали, то он внутри нее тоже уникальный, а то, что где-то на стеке остался еще один - во фрейме вызывающей функции - это не считается, он же сейчас недоступен. А вот на С++ когда умный указатель PVideoFrame передается в функцию, то это идет как создание копии, и теперь у нас на кадр две ссылки: одна в вызывающей функции и одна в вызванной. Счетчик ссылок становится больше 1, и все, получить указатель на видеоданные для записи он уже не дает. Приходится в функции ссылку на умный указатель передавать. Указатель на указатель на указатель... Такой вот смешной дизайн.
thedeemon: (office)
Когда-то давно пробовал относительно свежий интеловский компилятор и не заметил никаких особых улучшений по сравнению со старинной 7-й версией 10-летней давности. Даже по сравнению с MSVC2010 не видно было выигрыша. Оказывается, все дело в том, что тестировал на несвежем процессоре Core 2 Q8200 2008-го года выпуска, а авторы компилятора просто натаскивали его на более современные камни. Сейчас чуть-чуть посравнивал на ноуте с прошлогодним i3-3110M на текущем проекте, где много параллелизованного и векторизованного (SSE2) кода с байтами и float'ами (обработка видео).
Вот FPS на одинаковой обработке одного и того же файла (больше - лучше):
           Core 2 Quad Q8200 2.33 GHz  | i3-3110M 2.4 GHz
              4 real cores             | 2 cores * 2 hyperthreads (4 logical CPUs)
           MSVC2010    Intel XE 13     | MSVC2010   Intel XE 13
1 thread    2.7         2.7            |  3.4        4.0
4 threads  10.5        10.5            |  7.4        9.1

Видно, что
1) производительность одного ядра у процессора заметно выросла,
2) на более современном процессоре код от intel compiler работает заметно шустрее MSVC
3) hyperthreading хоть и дает некоторое ускорение, но совсем небольшое по сравнению с честными ядрами. 4 старых но настоящих ядра лучше, чем 4 новых условных.
thedeemon: (office)
Наложение пары глюков (неправильно распознанный формат плюс вероятно неправильно записанный тоже) дало занятный результат:

Read more... )

Кстати, попытка сохранить эту картинку в обычный (небеспотерьный) jpeg в сколь угодно хорошем качестве (даже когда размер получается больше чем у PNG) меняет ее до неузнаваемости.
thedeemon: (office)
В обработке видео банальные ошибки в алгоритмах порой дают довольно занятные результаты. Баг в компенсации движения:
Read more... )
thedeemon: (office)
Клиент жалуется, что после установки другой винды регистрационный код от купленной программы больше не работает, хотя раньше принимался. Проверяю у себя - код правильный, посылаю скриншот, где показано как его правильно вводить и как реагирует программа. Говорит, все равно не принимает. Прошу прислать скриншот. Сегодня присылает: пятиметровая фотка на 10 мегапикселей, необработанный оригинал прямо из Nikon D200, вот с таким зумом:
Read more... )

Поместилась лишь небольшая часть экрана, но проблему понять удалось - вводил код не в ту программу. :)
thedeemon: (Default)
Продолжаю тут играться с накопленной статистикой. Одним из ключевых показателей продающегося в онлайне софта называют конверсию - какой процент из скачавших или поставивших программу пользователей ее покупает. Вот только часто упускают, что мерять ее в лоб мало смысла - средняя температура по больнице не слишком информативна. Посчитал тут ее для одного своего продукта за этот год по разным странам, вот такое получается отношение числа установок к числу покупок:
Norway          22
Austria         32
Latvia          33
Denmark         36
Australia       37  
United States   54  
Canada          55  
Germany         85  
Singapore       88
United Kingdom  96  
Lithuania       97
Netherlands    100
Switzerland    105
Japan          127
Hungary        128
Portugal       132
Iraq           135
UAE            138
New Zealand    153
France         160
Italy          168
Spain          318
Poland         439
Turkey        1745
Indonesia     1829
India         2394
Taiwan        2498
Russia        3415
Peru          7815
China        15584

Тут я повыкидывал совсем уж outlier'ов вроде Намибии, где по моей статистике покупает каждый 10-й. :)
thedeemon: (Default)
У меня тут кое-какой софт продается в розницу онлайн. Взял IP адреса последних ~3k покупателей, по geo-ip базе получил координаты (~2k различных локаций) и закинул их на карту. Получилось довольно занятное зрелище:

(кликабельно)

Upd. Для сравнения география пользователей одного из продуктов за последние 3 недели:
Read more... )
thedeemon: (Default)
Занятное письмо сегодня пришло (фрагмент). Компания Боинг наняла Veracode, чтобы проверить весь покупаемый ею софт на уязвимости. Те написали нам, как поставщику софта для Боинга, чтоб приготовили бинарники в нужном виде, будут их анализировать. В данном случае речь о десктопном софте на C#, посмотрим, найдется ли в нем что-нибудь интересное.

msvc

Sep. 14th, 2012 04:02 pm
thedeemon: (Default)
Пытаюсь тут собрать в vs2010 в 64 бита код, который успешно собирался в vs2005. Не собирается, не находит некоторые SSE интринсики - те, что используют тип __m64 (пришедший из MMX'a еще). Заглядываю в MSDN, а там просто так пишут: "The __m64 data type is not supported on x64 processors". Как же оно у меня тогда работало столько лет? А просто там проект интеловским компилятором компилился, он прекрасно эти типы и интринсики понимает, и отлично они себе работают на x64. Просто в MSVC кто-то решил их не поддерживать, а чтобы не задавали лишних вопросов написали, что это процессоры виноваты. Молодцы, чо.
thedeemon: (Default)
На днях занимался тем, что генерил интересные картинки, долго их созерцал, а по результату созерцания успешно ускорял код, не трогая в нем ни строчки. Теперь вот хочу поделиться.

Есть у меня программа, которая обрабатывает видео и показывает в процессе две картинки - "было" и "стало" (текущий обрабатываемый кадр). Как обычно поставлен такой процесс? Сплиттер читает очередной сжатый кадр из входного файла, декодер распаковывает его в картинку, нужная часть картинки рисуется в окошке "было", кадр как-то обрабатывается (в моем случае увеличивался методом super resolution), нужная часть обработанного кадра рисуется в окошке "стало", дальше компрессор его сжимает, а муксер пишет в выходной файл. Параллельно сплиттер также читает порции звука, и либо сразу отдает муксеру для записи в выходной файл, либо через цепочку декодер-энкодер. Делать все в описанном порядке не слишком эффективно, т.к. ядер обычно несколько, надо бы их загрузить. Для этого в цепочку были добавлены фильтры-параллелайзеры: такой фильтр получает порцию данных, складывает ее в очередь и тут же возвращает управление. В другом потоке он из очереди уже скармливает данные нижестоящему фильтру (работает все это в DirectShow, там все упомянутые компоненты - сплиттеры, кодеки, муксеры и пр. называются фильтрами и соединяются в граф, становясь его вершинами). В результате, как только декодер отдал распакованный кадр, он может сразу заняться распаковкой следующего кадра, а отданный только что кадр будет обрабатываться параллельно. Аналогично, как только кадр обработан, можно сразу заняться обработкой следующего, а сжатием его энкодер будет заниматься в отдельном потоке. Конвейер!

Столкнувшись со странными проседаниями производительности на двухядерном ноутбуке, я решил попристальнее изучить, как на практике работает этот конвейер, и где возникают тормоза. Для этого разные его части стали отмечать основные события в лог, но в текстовом виде его изучать оказалось трудно, поэтому был сделан конвертер таких логов в SVG, получились интересные картинки.
Read more... )
thedeemon: (Default)
скриншот
Все-таки замечательная у нас индустрия - когда один раз что-то наделал и потом неограниченно много раз это продаешь. Производство новых копий фактически бесплатно, доставка тоже, продажи полностью автоматизированы, так что продавцы не нужны. Жуй кокосы, ешь бананы, ходи к банкомату. Какой еще бизнес так хорошо масштабируется?
thedeemon: (Default)
Q: Is there some magic that GEP (the program) is doing that the exported code is not?
A: Yes, there is a lot of magic in GEP. It was made by best magicians from Gryffindor, Hogwarts using latest developments in alchemy and wizardry. It contains traces of unicorn blood, dragon eggs and jobberknoll feathers. Voodoo is actively used too, so each time you generate C++ code in GEP Bjarne Stroustrup loses a hair.

(с форума про один из наших продуктов)
thedeemon: (Default)
С четырьмя ядрами можно не только делать ошибки в четыре раза быстрей, но и сообщать о них слаженным хором:

:)

Капча

May. 9th, 2011 01:52 pm
thedeemon: (Default)
Есть у нас на сайте форум для общения с юзерами. Постить можно только после регистрации, сопровождающейся вводом капчи и подтверждением email'а. Некоторое время назад там перестала работать капча, видимо, на хостинге поломали пхпшную библиотеку GD. Попробовал отключить капчу при регистрации, так за один день форум сразу приобрел сотню активных членов, готовых поведать о новинках фармакологии, скидках на виагру и т.п., причем нередко на китайском языке. Форум на популярном движке - SMF, роботы-спамеры хорошо умеют с ним обращаться. Когда капча еще работала, спамеры иногда все же появлялись, но не так часто. Решено было немного модифицировать капчу, для чего мне даже пришлось написать несколько строк на похапе и потом долго мыть руки. Получилось вот так:



В таком виде оно работает уже несколько дней, за это время зарегистрировалось несколько нормальных пользователей и ни одного спамера.
thedeemon: (Default)
На днях по варезникам разошлась волна "релизов" нашей увеличивалки видео, вышедшей полгода назад. Сделать нормальный патч или кейген не шмогли, делают loader'ы. Нашел два разных. Первый убирает окно с напоминанием о регистрации, и первые 30 дней после установки программа действительно работает. После 30 дней она тоже не просит регистрацию, но при попытке обработать файл тихо закрывается. Второй лоадер на базе VMWare Thinstall как бы делает прогу portable. Там в архиве два exe-шника, первый тупо сообщает, что ознакомительный период уже закончен и просит купить программу, а второй запускает ее, но при попытке обработать файл все опять тихо закрывается. В общем, получилось, что пиратские варианты или не работают совсем и просят купить программу, или работают как 30-дневный триал. Таким образом пираты нам бесплатно прорекламировали прогу, создав дополнительный поток пользователей и покупок, и даже расстарались, нарисовали красивый боксшот:



Вот какие молодцы! Причем в этот раз даже вирусов в архивы не насовали.
thedeemon: (Default)
Говорят, ради денег человек готов на все, даже на работу. :)
Оказывается, люди также готовы работать даже не для того, чтобы получить деньги, а для того, чтобы не платить свои. После того, как осенью добавил в один из продуктов простую возможность локализации (для добавления нового языка достаточно положить рядом текстовый файл с переводом), вывесил на сайте предложение: дескать, если ваш родной язык один из таких-то, то можете получить лиценцию бесплатно, прислав нам перевод программы или страницы сайта. И за небольшой промежуток времени получил довольно много предложений (активнее всего были бразильцы). Теперь страница продукта и программа говорят на восьми-девяти языках. Самым забавным было письмо от одного Карлоса, который сказал, что у него жена китаянка, и она согласилась перевести страницу на китайский. Вот так и получается, что никто не потратил ни цента, а работа проделана. Странное ощущение создается, как торговля воздухом в квадрате. :) Причем мне почему-то кажется, что если бы сама программа была бесплатной, то так активно ее бы не переводили, ибо стимула бы особого не было.
thedeemon: (Default)
Выложили сегодня большое сравнение разных методов и утилит для увеличения видео и картинок. В сравнении приняли участие:
3 метода из VirtualDub (bicubic, Lanczos3, Lanczos3+sharpen),
3 плагина для AviSynth (Spline36, EEDI3, NNEDI3),
2 плагина для Adobe After Effects (InstantHD, Boris FX Uprez),
1 плагин для Фотошопа (Genuine Fractals),
5 самостоятельных приложений: CinemaHD, vReveal, Video Enhancer, SAR Image Processor (4 разных алгоритма), SmartEdge.

Получилось 17 разных методов, которые сравниваются на 10 разных видеофайлах и 10 отдельных кадрах из них. Для всех полученных файлов посчитан PSNR, графиками которого и предлагается полюбоваться вместе с тремя сотнями картинок-сэмплов (разные кадры увеличенные разными методами).

Для успешного любования нужен Flash. Трафик: полмега сразу и примерно по мегу на каждое выбранное видео (до 20 мегов в сумме). Выложено сравнение здесь:
Video resize shootout

Из графиков отчетливо видно превосходство подхода super resolution, который увеличивает кадр с использованием накопленной информации из других кадров. Визуально разница особенно хорошо видна на файлах bjorn и avatar1 (третий вариант). Если выбрать Video Enhancer, потом какой-нибудь другой метод, и затем жать много раз на (previous), хорошо видно, как super resolution восстанавливает высокочастотные детали, пропавшие при уменьшении картинки.

Кому лень чего-то нажимать, может просто полюбоваться демонстрацией работы super resolution на этой страничке: Super Resolution for VirtualDub (тоже нужен Flash). Там показаны фрагменты из реальных файлов, полученных этой технологией.

Все исходные видеофрагменты высокого и низкого разрешения будут скоро выложены.
thedeemon: (Default)
Несколько дней назад моей маленькой транснациональной корпорации исполнилось два года. По просьбам трудящихся с RSDN описал с подробностями и цифрами каково это - иметь тайскую компанию. Открытие, налоги, банки, проверки, работники, офис - все тут:
http://rsdn.ru/forum/shareware/4006617.flat.aspx

Profile

thedeemon: (Default)
Dmitry Popov

April 2025

S M T W T F S
  1234 5
6789101112
13141516171819
20212223242526
27282930   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 05:20 pm
Powered by Dreamwidth Studios