Архив 05.2008

Периодические задачи в Ruby On Rails

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

Есть несколько подходов для реализации таких задач, наверное, одним из наиболее удобных является использование плагина BackgrounDrb, значительно упрощающего реализацию.

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

Читать дальше »

Свойства в C++

На тему http://dask-blog.blogspot.com/2008/05/property-c.html.

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

  • Свойства не требуют инициализации в конструкторах
  • Независимо от количества свойств, размер класса увеличивается на константу, связанную с выравниваем членов. У меня, например, на 4 байта.

Как это делается?

Читать дальше »

Kopete Antispam Plugin

Я уже давно искал антиспам плагин для Kopete. Особенно стало актуальным в последние пару месяцев, спаммеры совсем обнаглели.

Закончилось все это тем, что пришлось взять свой напильник и делать все ручками. В результате родился Kopete Antispam Plugin. Поскольку с Qt я до этого не работал, он кривоват, но зато работает. По той же причине, конфигурацию и прочее я отложил на ближайшее время.

Принцип работы повсеместно используемый: когда неизвестный пользователь пишет сообщение, окно чата с ним не открывается, вместо этого ему отсылается ответное сообщение с простым вопросом. Как только он присылает ответ, открывается окно чата с ним.

Все уже выложил на kopeteantispam.sourceforge.net.

Читать дальше »

Абстракция хранилища данных в J2ME

В процессе написания небольшой програмки для мобильного телефона столкнулся с тем, что работа c файловой системой (JSR-75) поддерживается не на всех телефонах. А данные надо же где-то хранить. Потому я решил реализовать поддержку записи данных как в файловую систему, так и в RecordStore

Но при этом различные объекты пишут данные по разному, поэтому в голову пришла следующая абстракция:

  • Все объекты, которые могут быть сохранены, реализуют интерфейс Storable
  • Имеется абстрактное хранилище данных, от которого наследуются реализации для файлов и для RecordStore. Это же абстрактное хранилище умеет само выбирать реализацию и выдавать ее по запросу.

Читать дальше »

Логирование в Java: Использование slf4j

В этой заметке я расскажу о фасаде для систем логирования, SLF4J, опишу его особенности и использование.

SLF4J (Simple Logging Facade for Java) – библиотека для логгирования, ставящая своей целью предоставить максимально простой, но при этом мощный фасад для различных систем логгирования на Java. Чем же это лучше чем использование какой-либо распространенной библиотеки для логгирования?

Если сравнить использование различных систем логгирования, как log4j и обощенных фасадов, таких как, например, slf4j, то можно найти следующие отличия:

Использование конкретной реализации:


  • Зависимость от этой конкретной реализации

  • Необходимость искать адаптеры, при необходимости использования компонент, разработанных, для других реализаций логгирования

  • Меньше компонент в зависимостях

Использование фасада:


  • Возможность использования различных реализаций

  • Большое число компонент (фасад + реализация)

  • Возможность быстро менять реализацию, возможно даже не меняя не строчки кода

Дополнительно к этому, SLF4J предоставляет возможность интегрировать компоненты, зависимые от других систем логирования (Log4J, JCL), подставляя реализации, направляющие логи этих систем в SLF4J.

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

Читать дальше »

Умные указатели в C++: boost::shared_ptr, boost::weak_ptr, boost::intrusive_ptr

Умные указатели (Smart pointers) - это, объекты, которые хранят указатели на динамическую память. Они действуют аналогично обычным указателям C++, за исключением того, что автоматически освобождают память в необходимый момент. Boost предоставляет шесть типов умных указателей:

  • scoped_ptr - некопируемый автоматический указатель на объект;
  • scoped_array - некопируемый автоматический указатель на массив;
  • shared_ptr - разделяемый указатель на объект;
  • shared_array - разделяемый указатель на массив;
  • weak_ptr - вариант разделяемого указателя, не увеличивающий счетчик ссылок;
  • intrusive_ptr - указатель со встроенным в объект счетчик ссылок

Читать дальше »

GUI в Java c помощью JFace: Создание окна приложения

JFace - это доплнительный слой абстракции над графической библиотекой SWT, предоставляющий возможности для разработки графического интерфейса приложения на основе модели MVC(Model View Controller). Основные компоненты JFace включают:

  • Viewers - классы для инкапсуляции задач предоставления данных для отображения, их фильтрации, сортировки и т.п.
  • Actions and contributions - вводят семантику описания пользовательских действий и того, как они должны быть доступны пользователю.
  • Image and font registries - предоставляют классы для управления ресурсами, такими как изображения и шрифты.
  • Dialogs and wizards - фреймворк для построения сложного диалогового взаимодействия с пользователем.
  • Field assist - предоставляет возможности для реализации вспомогательной функциональности для полей, такой как отображение статуса поля или подсказки о содержимом.
В первой части будет рассмотрено создание простого окна с использованием JFace, добавление к нему меню, статусной строки и панели инструментов.

Читать дальше »