суббота, декабря 30, 2006

Небольшое объявление


В связи с временными сложностями у хостинга сайт проектов и форум пока недоступны. Обещают исправить как можно скорее - ждём. Исходные тексты и дистрибутивы по-прежнему доступны для скачивания с sourceforge.

понедельник, декабря 18, 2006

Очищаем TODO-list


Только что с горем пополам закончил ещё одно давно запланированное масштабное мероприятие - написание статьи об устройстве протокола ичата. Заняло это, надо сказать, порядком времени. Если под конец написано не слишком разборчиво - прошу меня извинить, с трудом попадал пальцами в нужные кнопки. Возможно, статья ещё претерпит некоторые изменения. Пока же представляю, так сказать, на суд широкой общественности: Intranet Chat - Описание протокола

Spoiler - второе рождение


На днях сделал полезное и давно запланированное дело - переписал-таки заново Спойлера. Спойлер - это мой первый IRC бот, изначально предназначавшийся для того чтобы сбрасывать новости с локального сетевого форума в IRC-каналы. Написан он был жутко коряво, узко-специализирован на phpBB, зато в рекордные сроки. Разумеется, со временем я собирался довести его до ума.

И вот, не прошло и года, задуманное воплощено в жизнь. Новый спойлер стартовал сразу с версии 2.0, что помимо указания на его тёмное прошлое означает ещё и то, что функций в нём несколько прибавилось. Теперь это полноценный feed-reader, умеющий читать как RSS, Atom, так и RDF ленты новостей. Как уже у нас повелось, бот конфигурируется с помощью yan-framework и его xml-подмножества Nuts, что позволяет пересобрать / видоизменить приложение избегая перекомпиляции.

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

Пока что не все функции бота доступны пользователям (ещё не реализована выдача новостей по запросу, а также выдача содержимого конкретного поста по запросу), так что ожидайте новостей!

воскресенье, ноября 26, 2006

Новое обновление

Дятел оборудован клювом. Им он долбит.


В одной из сетей, в которых установлен Scepsis, была замечена странная аномалия - сервер потреблял порядка 90% процессорного времени. Проведённое на скорую руку расследование выявило одну из возможных причин: арп-флуд. Однако флуд пошёл на спад, загрузка же осталась прежней. Проведённый анализ трафика сервера показал наличие огромного количества запросов на обновление списка контактов.

Поясню, в чём заключается проблема. Процесс обновления списка контактов в ичате выглядит следующим образом: клиент отправляет запрос на обновление, адресуемый всем клиентам (себе в том числе). Каждый клиент (!), получивший этот запрос, отправляет запрашиваемому клиенту refresh-ответ для каждой линии, на которой он присутствует.

Что же происходило в нашем случае. При арп-флуде часть соединений неизбежно обрывается, список довольно быстро устаревает, поэтому пользователи начинают активно пользоваться кнопкой "обновить список". Поскольку процесс обновления требует некоторого времени, а при флуде это время несколько больше чем обычно, пользователю начинает казаться, что нажатие кнопки не возымело нужного действия, и он нажимает её ещё раз. И ещё раз. И ещё много-много раз. Ограничения на количество нажатий в клиенте нет. Таким образом вследствие этой недоработки провоцируется огромное количество ненужных сообщений, которые обрабатываются сервером, и соответственно ресурсы сервера расходуются впустую.

Подумав и проведя ряд экспериментов, я пришёл к выводу, что можно совершенно безболезненно ограничить хождение рефреш-запросов, а точнее их частоту для каждого клиента. Введение ограничения на частоту рефреш-запросов равное одному запросу в пятнадцать секунд показало просто поразительные результаты! Загрузка сервера снизилась с 90 процентов до близкой к нулю, с волнообразными всплесками, характерными для "естественного" цикла обновлений списков контактов.

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

пятница, ноября 24, 2006

NAT-обработчики исправлены

Свершилось! NAT-обработчики наконец-то исправлены и выложены на сорсфорж. До чего же я не люблю мистику. Загадочное поведение было вызвано, похоже, несколько некорректным взаимодействием с файрволом. В остальном после исправления несомненно досадных ошибок, обрабочтики стали работать нормально. С чем я и поздравляю всех, кому не безразличен проект Scepsis. У меня же стало на одну головну ю боль меньше.

четверг, ноября 16, 2006

Ошибки в NAT-обработчиках

Усталость делает своё дело. Обнаружил несколько довольно глупых ошибок в NAT-обработчиках. При более тщательном тестировании выяснилось, что они не работоспособны. Более того, даже после исправления ошибок при использовании реального NAT, а не синтетических тестов, возникли некоторые проблемы. Осталось выяснить, чьи это ошибки - обработчиков или же nat-provider'a.

Необходимо провести еще несколько тестов прежде чем будут выпущены обновления.

четверг, ноября 09, 2006

Текущие проблемы


Обнаружилась (точнее даже не то чтобы обнаружилась, просто всплыла) проблема с iRCha. При использовании !users все остальные сообщения вынуждены стоять в очереди. Поправить в общем-то не сложно, нужно взять на заметку. Скорее всего сделаю что-нибудь вроде priority queue, по-простому дав !list приоритет поменьше.

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

среда, ноября 08, 2006

Краткая история "Проектов"


Чат является неотъемлемой частью любой домашней сети, наравне с Counter Strike, фильмами и дешёвым интернетом. В нашей сети, так уж вышло, прижился Intranet Chat с выделенным сервером. Судьба у этого чата, прямо скажем, непростая. Простой, дружелюбный интерфейс и отсутствие необходимости сложной настройки обеспечили этому чату в своё время большую популярность. Популярность эта, однако, пошла на спад с появлением так называемых "убийц" ичата. "Убийца" в среднем представлял собой нехитрое приложение, либо создающее огромное количество соединений с сервером и отправляющее кучу флуда, либо же использующее недочёты механизмов безопасности чата (а точнее их полное отсутствие) и позволяющее таким образом изменять имена других пользователей (чаще всего на обидные, а как же иначе?), отправлять сообщения от имени другого пользователя и совершать прочие бесчинства. Пресечь, или хотя бы даже отловить такие нарушения средствами стандартного сервера невозможно. Честь и хвала нашему администратору, он не пошёл по бесхитростному пути сноса сервера с последующей его заменой на какой-либо аналог. Он модифицировал исходники сервера таким образом, что атаки прекратились. Как выяснилось позже, изменения эти не гарантировали полной безопасности, но большинство scriptkiddies, как известно, отличаются полным отсутствием мозга, поэтому разобраться в причине неудачи и перенастроить или (о боже!) пере-собрать киллер им просто не хватило фантазии. Атаки прекратились.

Тем временем в нашей сети разворачивалась другая драма. Параллельно с Intranet Chat у нас также существовал и собственный IRC сервер, слинкованный с сетью IRC.BY. В тот момент в сети что-то не ладилось, и один из наших админов решает переводить пользователей из IRC.BY в "другую" сеть :-) Естественно, нашлись люди, которых это не устроило. В результате в сети появилось два сервера, слинкованные с различными сетями. Отношения между сетями тоже не были гладкими, не являются они гладкими и по сей день. Между сторонниками сетей завязалась конфронтация. Одним из аргументов в пользу "другой" сети было наличие двух сервисных ботов: бота, сообщающего о последних новостях с форума и бота, являющегося гейтом из IRC в Intranet Chat.

Первоначально автор не включался в активное противостояние. Ну есть выход в ещё одну сеть - ну и ладно. То, что пользователей в неё буквально тащили, возмущало конечно, но до определённого предела. Со временем наличие двух серверов стало данностью и автором была предпринята попытка эти сети "подружить". В рамках эксперимента по туннелированию был создан бот, ретранслировавший сообщения новостного бота из одной сети в другую. Можно себе представить, отзывы какого плана были получены. Красный от негодования, автор удалился для создания "патентно чистого" образца. Через пару дней был готов Spoiler, а еще через несколько - первый прототип iRCha, а также добрая часть IChatAPI и IChatBot. Причиной того, что боты были реализованы на Java была в первую очередь профессиональная специализация, и не в последнюю очередь нелюбовь к скриптовым языкам, наподобие TCL.

Но мало создать гейт - его нужно было сделать "лучше". Так гейт, получивший название iRCha, стал обрастать дополнительными функциями, и всё чаще звучали вопросы пользователей о том, почему же в списках пользователей канала не виден список пользователей ичата. Автор задумался над идеей создания полностью "прозрачного" гейта. Подумав, он пришел к выводу, что ничего принципиально невозможного здесь нет, необходимо лишь создание контролируемых ичат и ирк серверов и прослойки между ними.

Таким образом начал оформляться проект Scepsis. С развитием Scepsis выделились в отдельную ветку проекты IChatAPI и IChatBot. Проект стал жить и развиваться. Выяснилось, что большинство уязвимостей Intranet Chat легко устраняются. Те же проблемы, устранить которые не удаётся, присущи в большей или меньшей степени всем серверным приложениям. Появилась версия, поддерживающая фильтры, спецификации и действия. Реализован мат-фильтр (одно из наиболее спорных и обсуждаемых нововведений в сети). На данный момент сервер очередной раз близок к завершению, реализуется request пользователей о линковке серверов. После чего можно, наконец, приступать к созданию IRC сервера на Java. Потому что существующие автора не устраивают :-)

Добро пожаловать в блог


Итак, что же из себя представляет этот блог? А представляет он из себя авторский журнал сайта "Проекты для домашней сети" и по идее призван освещать вопросы, возникающие при разработке проектов. Что получится в результате - мне пока неизвестно. Надеюсь, что блог не выродится в банальный changelog или releaselog. В жизни любого проекта есть масса интересного, чем по возможности автор и собирается делиться с общественностью в этом блоге. Также имеют место события, непременно требующие комментария. Вопросы вопиющей несправедливости, неграмотности (как автора, так и оппонентов) наряду с размышлениями над общечеловеческими вопросами вида "куда катится этот мир?" применительно к миру программирования - всё это не должно, по задумке, миновать этот блог.

Что, собственно говоря, за "Проекты для домашней сети"? Проекты для домашней сети - это сайт (авторский, опять же) по созданию програм для локальных сетей. На данный момент разработчик и автор статей на сайте всего один, так что это в некотором смысле
домашняя страничка разработчика. Пока что автору интересно возиться с данными проектами в свободное от основной работы время, не исключено что ситация со временем может измениться, тогда судьба сайта и проектов будет под вопросом.

А что, собственно говоря, за "Проекты"? "Проекты" - это громкое слово для обозначения программ, призваных облегчить или разнообразить (тут уж как получится) жизнь пользователям и администраторам домашних сетей. На данный момент это: защищённый сервер Intranet Chat (в народе известный как "ichat", не в обиду не к ночи помянутой Apple), гейт из IRC в этот самый Intranet Chat, фреймворк для разработки ботов для этого самого Intranet Chat, API для разработки приложений под этот самый Intranet Chat, несколько неопубликованных пока ботов, я думаю вы уже догадались под что.

А зачем? Честно говоря - не знаю. Интересно. Пока. Есть с чем повозиться, над чем поэксперементировать. Работа на больших и серьёзных проектах зачастую не даёт возможности для манёвров, там нет места для творческого эксперимента. Здесь же подобных ограничений нет, можно принимать решение и смотреть, что из этого получится. Когда надоедает - всё поменять. Так, в "Scepsis" обкатаны некоторые паттерны асинхронной обработки подключений, контроля нагрузки, IOC паттерны, применены новинки пятой джавы, black-box расширения... Если угодно, это своего рода песочница разработчика. Если вам интересно покопаться или же у вас есть новая лопатка - милости просим. Только чур не портить мои "куличики" :-)