четверг, 5 ноября 2009 г.

C/C++ Модульное программирование в linux: Динамическая загрузка библиотек dlopen



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

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

Что нам даст такой подход? А то, что наша программа сможет быть динамически расширяемой. А это даёт неограниченные возможности в масштабировании приложения. К тому же, если приложение большое и тяжелое, это позволит разгрузить его. У модульного программирования много преимуществ, не буду про это писать, а расскажу о своём примере.

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


вторник, 27 октября 2009 г.

Делаем циклический backup/restore конфигов и красивое восстановление посредством dialog.



Давно стояла задача создания небольшого скрипта, по созданию резервных копий и восстановлению различных конфигурационных файлов.

Обрисую задачи, которые решает этот скрипт:
  • Скрипт создаёт резервную копию конфига, дописывая к нему дату и время, и перемещает его в папку для хранения;
  • Скрипт имеет ротацию, т.е. следит за кол-вом конфигов в папке и удаляет самый старый, если их число превышает заданное.
  • Восстановление происходит через меню в 3 этапа:
  1. выбираем конфиг, который хотим восстановить.
  2. выбираем резервную копию для восстановления.
  3. подтверждаем наш выбор.
  • Перед восстановлением скрипт делает резервную копию восстанавливаемого файла с пометкой "_before_restore".
  • В скрипте присутвует быстрое восстановление всех конфигов на их последние резервные копии.
Код и описания - под катом.

суббота, 24 октября 2009 г.

Подключаем ICONV в nautilus или быстро меняем кодировку файла.




Очень часто, я сталкиваюсь с проблемой перекодировки файлов. К примеру, в субтитрах. Очень часто русские субтитры содержат информацию в кодировке windows-1251, а мой любимый VLC player просто отказывается выводить их нормально. Раньше проблему я решал через gedit, потом начал пользоваться консольной iconv, конечно, наверняка, существует ещё много решений, но я решил написать небольшой wrapper к iconv, чтобы облегчить себе жизнь окончательно.

Начну с того, что есть замечательная папка в Gnome - ~/.gnome2/nautilus-scripts, и какой бы скрипт вы туда не положили, он тут же будет отображаться в меню File->Scripts или по нажатию правой клавиши мышки. Скрипт нужно класть именно туда.

Сама задача, которую я поставил - это сделать так, чтобы выделив нужные мне файлы в nautilus, я бы быстро смог поменять кодировку всем
выбранным файлам.

Код с описание дальше.

вторник, 29 сентября 2009 г.

log4cpp или как правильно вести логи в C++



Что должна уметь делать любая программа? Помимо того, что просто хорошо работать, она должна сообщать где и какие у неё проблемы или наоборот где у неё всё хорошо, вообщем, вести логи.

Существует тысячи способов ведения логов, несложно написать и свой, но зачем изобретать велосипед, когда всё уже готово?

Я хочу рассказать о log4cpp.

Не буду делать длинного вступления, скажу только одно, что я пересмотрел очень много различных систем для ведения логов программы, и могу смело сказать, что log4cpp показался мне наиболее удобным.

Дальше будет код, с подробным описанием каждой функции.

среда, 2 сентября 2009 г.

Рекурсивная отправка файлов на FTP

День добрый!
Недавно возникла проблема с переброской по фтп каталога, со всем его содержимым,  подпапок, файлов и т.д.
Существуют FTP клиенты/сервера с поддержкой mput и mget, но к сожалению не всегда есть возможность ими воспользоваться.
Для решения проблемы, я написал небольшой bash скприпт, который генерирует небольшой файл с командами для ftp.
Долго не буду описывать проблему и её решение, перейду к делу:

четверг, 27 августа 2009 г.

Cкрипт для искусственного увеличения посещаемости

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

Итак что нам понадобится для того чтобы скрипт ожил:

вторник, 25 августа 2009 г.

Автоматизация sFTP

Столкнулся с такой проблемой, нужно было делать бэкап ряда папок и пересылать их на sFTP сервер.
Вроде бы всё просто, да только в sFTP нельзя задать пароль при коннекте, он спрашивается только после соединения, т.е. возникает проблема автоматизации данного процесса, не всегда удобно вводить руками пароль...
Отсюда я нашёл 2 выхода:
1) Создание пары ключей
2) Автоматизирование ввода пароля

Т.к.про первый способ много где написано и, это не так интересно, я решил разобраться со вторым способом.
Немного покопал в интернете, наткнулся на программку Expect(инструмент для автоматизации и тестирования в ОС Unix). Оказалась очень полезной и интересной программой(я не давно в мире администрирования Linux, поэтому был очень доволен своей находкой).

Итак приступим к написанию самого скрипта:


четверг, 25 июня 2009 г.

RoundCube: убираем спам в папку SPAM.


В этом посте я расскажу, как убрать спам, определяемый при помощи SpamAssasin, в папку Spam в RoundCube.

Предполагается, что у Вас уже установлены:

  • RoundCube


  • SpamAssasin


  • Exim4

Все ниже описанное производилось на Ubuntu Server 8.04. На других версиях/дистрибутивах возможны небольшие отличия.

Не забывайте делать бэкапы файлов, которые правите.