вторник, 24 августа 2010 г.

В поисках e-mail клиента для Linux

Наконец, я нашел себе e-mail клиент по душе. За 10 лет пробовал их много, Pine, Evolution, Thunderbird, KMail... Но вот недавно установил Claws Mail и эта програмулина мне очень понравилась. Доступ по IMAP в Сlaws Mail реализован лучше, чем у других клиентов, интуитивно понятный и удобный интерфейс , работает очень шустро. Отлично конектится к GMail.
Да и это не удивительно, потому что Сlaws Mail очень похож на лучший email client всех времен и народов - The Bat. Мне удалось запустить The Bat под wine, но все-таки отдал предпочтение Сlaws Mail.

суббота, 14 августа 2010 г.

Книги В.В. Ершова

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

воскресенье, 8 августа 2010 г.

Что такое NIO и как с ним бороться

Коротко физику природного явления NIO можно выразить формулой:

NIO = IO + select + E

Кликните в браузере поочередно на первые три переменные. Четвертая переменная, E, является энергией еквивалентной усилиям потраченным на синхронизацию между selecting thread и worker thread, а также протокол обмена в не-блокирующем режиме, в том числе учитывая дефрагментацию TCP пакетов.

Мне нужно было написать простой java server который принимает сообщения от Adobe Flash Player по протоколу XmlSocket. Задача выглядела очень простой - получай запросы и отсылай ответы, поэтому решил не прикручивать готовый application server типа томката, а написать свой маленький сервер. За день я сделал реализацию на блокирующих сокетах. Дальше решил сделать эксперимент и переписать на не-блокирующих сокетах, тоесть NIO.

Оказалось что c NIO все намного сложнее, сразу стало ясно что Е совсем не маленькая величина. Остановился на самоой простой реализации с единственным selecting thread, это заняло в два раза больше времени чем блокирующие сокеты. Последняя стадия эксперимента: безжалостно убил материализцию темной енергии Е в коде и и использовал Apache Mina. И тут я понял насколько полезна Mina для написания распределенных систем, и что нет смысла реализовывать взамодействие между частями системы на сокетах с нуля. Mina создает уровень абстракции который сводит E к минимуму. После того как прикрутил Mina, количество кода уменьшилось в три раза: было 6 классов, осталось 2.

Поэтому, если надо работать с сокетами, то лучше делать это используя Mina, это будет быстрее и надежнее.

Вот пример Mina сервиса на Groovy: