Сообщения

Сообщения за 2012

Процесс из памяти (Windows)

Может кому понадобиться запустить процесс из памяти под Windows. Способ не совсем законный, но рабочий. Вот исходнички https://github.com/DEgITx/creatememoryprocess .

Чуть о комментариях

Много знаете способов закомментировать строки? Есть вообще "чоткий способ для пацанчиков": #if 0 ... #endif Основным достоинством этого способа является обход подобной проблемы в коде /* void someFunc() { //... /* //... */ } // упс, ошибочка компиляции */

Qt/C++. Экспорт в pdf - это легко.

Вам нужно экспортировать данные в pdf из вашей программы? На первый взгляд довольно трудная задача, но на наше счастье Qt предоставляет набор всех нужных инструментов, и, в частности, QPrinter который позволяет сделать желаемое явью. Рассмотрим создание объекта класса с самого начала.

QPrinter printer; printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName(pdfPath); // устанавливаем путь к pdf файлу // работаем с отрисовкой pdf через QPainter QPainter p(&printer); // выполняем действия с p p.end(); Довольно легко не правда ли? Но работа с QPainter не из самых приятных, поэтому рассмотрим более привлекательный вариант, а именно сохранение отрендеренного html в pdf. Для этого нам потребуется модуль WebKit Qt, и класс QWebView.
// ?.h // QWebView* printHtmlView; void htmlGen() { printHtmlView = new QWebView; connect(printHtmlView, SIGNAL(loadFinished(bool)), this, SLOT(htmlRender())); printHtmlView->setHtml(html); // загружаем ваш html. } // slot: htm…

Сравнение содержимого двух папок. Маленький скрипт

Если кому-то, вдруг, понадобится маленький скрипт для сравнения содержимого 2 папок (по-файлового) на C++, вот
http://dl.dropbox.com/u/66826430/Other/dircompare.cpp

Разрезаем lossless. Часть 2: непосредственно нарезка.

Итак, у нас есть cue файл с кодировкой utf-8 и один flac/tta файл. Что будем делать дальше, как это нарезать? Все очень просто. Воспользуемся для этого прекрасным набором утилит shnutils. Скачать их можно тут http://www.etree.org/shnutils/shntool/ . Для Windows сборки находятся тут - http://www.etree.org/shnutils/shntool/dist/win32/ . Заодно на сайте есть список форматов, поддерживаемых приложением, но, насколько я помню, этим дело не ограничивается и к приложению можно прикрутить свой decoder/encoder по типу ffmpeg'a. Выполняем:
cuebreakpoints file.cue | shnsplit -o flac -a prefix file.flac  Проще некуда, и на выходе у нас получаются файлы flac с префиксом prefix, которые, собственно, являются вашими треками. Как разобраться с тегами рассмотрим в следующей части статьи.

Разрезаем lossless. Часть 1: японский tta/cue.

Тем кому доводилось слушать музыку с японских comiket'ов наверняка доводилось сталкиваться с форматом tta. Ничего в нем сверхъестественного нет, это такой же lossless кодек как и тот же flac только со своими плюшками. Но в этой статье будет рассмотрен вопрос иного рода, а именно, как подготовить cue-файл, содержащий японские теги треков перед нарезкой.
Отмечу сразу, что у японцев, как и у нас та же cp1251 или koi8-r, есть своя, родная, кодировка SHIFT-JIS, и большинство cue файлов записаны именно в ней. Перекодируем файлы в стандартный UTF-8: iconv -f SHIFT-JIS -t UTF-8 input.cue > export.cue Готово. Но что если возникает ошибка "недопустимой последовательности символов" на какой либо из строк? В свое время пришлось долгу гуглить на эту тему, пока я не нашел решение проблемы. Для начала стоит убедиться что перед нами файл именно с японскими тегами, и вы уверены в том то кодировка выбрана верно. Так в чем же проблема? Скорей всего заумные авторы песен использовали в на…

Qt. Небольшое замечание по поводу работы QSortFilterProxyModel.

В первую очередь при работе с QSortFilterProxyModel не нужно забывать что этот класс образует лишь прослойку между реальной моделью и представлением. Официальная документация и книги обычно останавливается на том, что для того чтобы работать с этим классом, достаточно переопределить 2 метода:virtual boollessThan ( const QModelIndex & left, const QModelIndex & right ) const для сортировки. А так же virtual boolfilterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const для фильтрации. Но о чем еще не стоит забывать, и о чем забыл я? Важно заметить что любое изменение исходной модели должно отражать изменение QSortFilterProxyModel. В частности, при изменении данных в исходной модели обязательно посылайте сигнал voiddataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) иначе ваше приложение не только не отобразит изменения, но и попросту может работать неверно из-за несоответствии данных. Используйте другие методы оповещения кажд…

Работа с mkvmerge, или как добавить звуковые дорожки в видео.

Казалось бы, вполне обыденный вопрос, с которым может столкнуться любой желающий посмотреть или сохранить фильм/мультфильм/аниме у себя на компьютере. Вроде, зашел на rutracker, скачал фильм - наслаждайся. Но что если вы столкнетесь с вполне частой надписью в описании - external (ext)? Легко ли подключить звуковой файл, "врезать" звук?
А что если звуковых дорожек к файлу несколько, да ещё и к каждой серии (прим. аниме из 50 серии или больше :) ). Что делать с этим лесом файлов, все делать вручную для каждого файла в течении дня?
Как раз тут я и затрону некоторые из этих вопросов, потому что не раз появлялась нужда проделывать подобную операцию "слияния".
Это не будет слишком длинная статья, и постараюсь по-быстрому разложить все поставленные вопросы по полочкам.

Наш главный инструмент статьи - программа для работы с контейнером mkv: mkvmerge (утиты из набора mkvtoolnix). Советую обзавестись как консольным вариантом, так и графическим.
http://www.bunkus.org/videotoo…

Старт

Решил все таки завести небольшой блог, где буду описывать ряд проблем (их решения), событий и т.п. Так, собственно, в блогах и принято. По большей части всякое разное будет касаться вопросов программирования, администрирования, автоматизации, IT сферы, но вопросы жизни, своей страны тоже грех упускать. Так что понеслась :).