BMP в JPEG, или о пакетной конвертации изображений

Конвертирование BMP в JPEG
Конвертирование BMP в JPEG

Здравствуйте, дражайший читатель.

Всем известно, насколько суровы русские программисты. Именно мы — когда нам надо сделать что-то, не ищем программу для этого, а пишем её сами (автору «записки жены программиста» — привет!). Так случилось и вчера. Знаете ли, наснимал скриншотов из игры Modern Warfare 2 Fraps’ом, для новой заметки. Да вот беда — этот поцмонек не хочет сохранять ни в чем другом, кроме как BMP. А файлов то, 70 штук… Ручками через фотошоп это дело конвертировать в Jpeg я бы задолбался. Но ясное дело! Я помню, что была такая фишка в ACDSee — выбираешь кучу файлов, и конвертишь эту кучу в добрые полтора десятка форматов — любой на выбор. Правда, во-первых, мне не надо было в любой, а во-вторых, ставить этого монстрика только ради одной нужной функции… Ну его на хер. В общем, ошибку мишигинера по имени «Fraps» надо было срочно исправлять, и не руками. Нет, вы не подумайте, я честно поискал, и даже нашёл софтинку по имени svpeg. После четвёртой попытки заставить её работать, а не вылетать по ошибке, я решил, что проще написать самому (второй привет автору записок жены программиста). Сказано — сделано. Нет, нет, писалось оное не два дня, я всего лишь 1,5 часа и заняла 200 строк кода (привет авторам .NET Framework). Что таки умеет? Ой, для начала не вылетать после конвертации одного-единственного файла. Затем, умеет ещё конвертировать между форматами BMP, Jpeg, TIFF, Gif и Png в любом сочетании и направлении — пакетно. Т.е. выбираем список файлов исходного формата, выбираем конечный формат, и если это Jpeg то ещё и качество сжатия, и тычем кнопу «Поехали». В той же папке, где лежат оригиналы, появятся новые файлы с новым расширением, и состоящие из имени старого файла, с префиксом new_ (ну, разумеется, префикс можно поменять)… Групповое переименование не юзалось, ибо нех — тотал коммандер всё это умеет и так. Не умеет? Пережимать в несколько потоков, например. Всё гонится в один поток — но конверсия сотни файлов на моём компе занимает где-то секунд 20-30. Размер 1680х1050 пикселей.

Читать далее BMP в JPEG, или о пакетной конвертации изображений

Разгон Palit GeForce GTX 460 — 1024, а ещё CUDA в .NET

Видеокарта gtx460
Видеокарта Palit gtx460, фото с Яндекс.Маркет

Таки здравствуй, дражайший читатель!

Буквально на днях прикупил енто чудо. До того у меня была ATI Radeon HD 4650 с 512 МБ ОЗУ. Ну, шо могу сказать, в общем небо и земля: ATI постоянно своими кривыми драйверами убивала винду в BSOD. Кроме того — быстродействие, сами понимаете — класс карточек разный, и быстродействие отличается раз в 10-12. Скажем, Сталкер: Зов Припяти на самых максимальных настройках — выдаёт 35-40 ФПС (при конфигурации проц Core 2 Quad Q9550 2,83 GHz, RAM Corsair 1066 MHz 4096 Mb).  Ну а Метро 2033 вообще меня порадовало — на старой было слайд-шоу 15-20 ФПС на минималке (ну по понятным причинам), на новой же — 25 ФПС что вполне играбельно при установках High. Ну, это перед самой высокой, но с использованием DX11 (и кстати, игра исключительно красива, но сейчас не об этом речь).

Читать далее Разгон Palit GeForce GTX 460 — 1024, а ещё CUDA в .NET

SQLite в .NET

Не так давно, у меня появилась необходимость сохранять довольно большие объёмы данных в софтинке, которую пишу в свободное время. А именно это список пиров, состоящий из нескольких полей: ID|PEER_IP|STATUS. Возникла необходимость их как-то структурировано хранить, обновлять, и вообще — производить те или иные операции над записями. Логичным решением выглядит использование тех или иных БД. Но — по факту для целостной программы подходит только один тип решения — это SQLite. Дело в том, что это библиотека БД, которая может встраиваться в приложение и использоваться прямо из неё, без коннекта к стороннему серверу, наподобие MySQL. Для небольшого объёма данных (< 1000000 записей) это оптимально. Во-первых, вам достаточно просто включить библиотеку (*.dll) в комплект поставки, и не надо устанавливать на клиентском компьютере какие-то посторонние приложения, вроде MySQL сервера, которые (хотя на современных машинах это и неважно) потребляют некоторое количество ресурсов, как память, например. А зачастую нам нужно получить некоторый набор данных только при загрузке приложения — и постоянно держать ради этого включённым сервер БД — не нужно, плюс переносимость хромает. Встраиваемое решение в виде SQLite позволяет преодолеть эти трудности (и заиметь некоторые другие). Но — по порядку.

Читать далее SQLite в .NET

Freenet, i2p, Java…

Не так давно, я скачивал и устанавливал систему Freenet. По некоторым причинам (больше время отклика, отсутствие динамического контента, низкая скорость загрузки, отсутствие нормального интерфейса, и т. д.) она удалена с моего компьютера, ибо на данный момент меня больше заинтересовал проект i2p (о том, что это такое, можно прочитать на вики, и на официальном сайте). Оба этих проекта объединяет то, что они OpenSource (который в последнее время всё больше и больше интересует меня), и то, что они написаны на Java. Меня заинтересовал этот язык, дело в том, что он очень похож на C# (а точнее, си-шарп похож на java, так как проектировался с оглядкой на него). А шарп я более-менее знаю, по крайней мере разрабатывал приложения контроля состояния распределённой сети серверов именно на нём. Но на данный момент у явы, как языка прикладного программирования приложений, есть огромное преимущество: он спокойно исполняется на линукс-системах. Т.е. исполняемый файл, в отличие от .NET exe, одинаково выглядит и работает на той же убунту, и на той же винде едва ли не любых версий. Это преимущество стало решающим в определении моего интереса к нему.

Чем же обеспечивается успех и живучесть Java в конкурентной борьбе с .NET? Тут надо сделать оговорку. Вообще, зависит от того, для какой платформы будет вестись разработка — для MS Windows, *Nix, или иных платформ. Если основным целевым сегментом является windows, то тут, безусловно, стоит выбирать .NET разработку, ибо она наилучшим образом интегрирована с системой, предоставляет массу платформо-зависимых инстументов, и писать на ней windows-приложения намного правильнее. Но у OpenSource проектов, как правило, целевые задачи совершенно другие. Зачастую приложения пишутся для бесплатного использования максимальным количеством пользователей (ибо от количества людей, у которых установлено то или иное приложение, зависит работоспособность сервиса, это и freenet, и i2p). И ввиду этого, привязывать к платформе приложение совершенно недопустимо. А поддержка .NET на той же линукс — практически отсутствует (да, я в курсе, что существует порт .NET на Linux, но я даже не проверял его работоспособность).

Единственной платформой, которая позволяет вести разработку для практически всех существующих операционных систем, обладает официальной поддержкой и довольно серьёзным финансированием, а как бонусы — имеет несколько открытых и бесплатных средств разработки (к примеру NetBeans IDE), является Java. Её разрабатывает компания Sun, которая, как можно видеть на их официальном сайте спонсирует и поддерживает также множество известных open source продуктов, среди которых MySQL, OpenOffice, NetBeans, Java… Ввиду этого, Java остаётся едва ли не единственным выбором для программиста, решившего написать прикладное приложение, и которое должно работать на многих платформах. За счёт чего это возможно? Дело в том, что Java-приложения исполняются не напрямую через вызов системных функций целевой системы (к примеру windows-API), а на промежуточном звене, так называемой «Java-машине). Условно, можно назвать это интерпретатором, а ещё точнее — JIT-компилятором. Исполняемый Java-файл не привязан к платформе, а состоит из так называемого «байт-кода», который исполняется на java-машине, которая, в свою очередь, переводит байт-код в исполняемые инструкции для процессора. Сама Java-машина уже привязана к платформе, т.е. машина для Linux не может быть запущена на windows, но прикладного программиста это не должно волновать. К слову, по быстродействию java-код, в настоящее время, не намного проигрывает чисто компилированным приложениям, за счёт применения JIT. Таким образом, лично для меня эти особенности стали поводом для знакомства с языком.

Также, если вас заинтересовала статья, рекомендую почитать ещё и вики: Java и сравнение Java и C#.

Для изучения же языка рекомендую вначале двухтомник Хорстмана и Корнелла «Java 2«, А затем трёхтомник Дейтела, «Технологии программирования на Java». Эти книги отличаются систематизированным изложением материала и по первому впечатлению вполне достойные представители технической литературы по Java. Единственный недостаток — цена бумажных версий, все книги обойдутся в сумму от 2,5 до 5 тысяч рублей. Но ведь мы в России живём, господа! :) И KAD с торрентами (1), (2), (3) ещё никто не отменял.