Класс для общения с BOB в I2P на C#

Таки буду краток, как говаривал один небезызвестный дядя.

В общем, есть в I2P такая чудная приблуда как BOB — Basic Open Bridge. Протокол сей позволяет создавать/уничтожать I2P тоннели с заданными параметрами. Фактически, вы создаёте точку подключения для своего приложения — например 127.0.0.1:12345 — и работаете с ней как с обычным сетевым адресом, посредством тех же сокетов. Проблема в том, что для инициализации тоннеля надо отправить несколько команд на адрес 127.0.0.1:2827. Протокол текстовый, достаточно простой и в целом удобный… Но для прикладных программ надо ещё проще :)

В результате на C# был написан класс-посредник, позволяющий создавать тоннели i2p в своей программе, не задумываясь над реализацией обмена, работающий вот так:

CBob bob = new CBob();
CBob.DataForCreateTonnel data = new CBob.DataForCreateTonnel();
// Можно задавать, можно не задавать - тогда автоматически сгенерируется
// data.nickTonnel = "abrahas";
data.inHost = "localhost";
data.inPort = 12345;
data.inboundLength = 3;
data.inboundLengthVariance = 2;
data.inboundAllowZeroHop = "false";
data.outHost = "localhost";
data.outPort = 44010;
data.outboundLength = 3;
data.outboundLengthVariance = 2;
data.outboundAllowZeroHop = "false";
bob.SendTonnelOptions(data);
bob.StartTonnel();

Т.е. он позволяет создавать тоннель десятком строчек и не заботиться о внутренней реализации на сокетах. Кстати по поводу внутренней реализации — там использована асинхронная отправка-получение команд-ответов. И очень сильно сырой код — аффтар не пишет постоянно на C#. Код правда документирован, по мере возможностей. Любые улучшения, замечания,  и прочее — приветствуется.

Соответственно ссылка на скачивание: http://www.shpargalko.com/files/CBob.zip

Это документация по BOB: http://www.i2p2.de/bob.html

А это полезная ссылка по I2CP: http://www.i2p2.de/i2cp

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