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

Участие в проекте

Как оказалось, вышедший недавно первый релиз ColorerSE стал и последним. Игорь Русских, автор оригинального Colorer-take5, предложил поучаствовать в оригинальном проекте. Соответственно и все наработки вносить в хранилище на SourceForge.net .

Я согласился. Первый опыт участия в коллективном проекте, да и еще на SourceForge. Открыл себе бранч . Пока переношу туда  все, что до этого реализовал/исправил для ColorerSE. Надеюсь в ближайшее время выложить первый релиз на SourceForge. А там, кстати, можно попробовать замахнуться на поддержку еще и первой версии Far.

ну как говорится - будем посмотреть.

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

Релиз ColorerSE

Сегодня официально зарелизил первую версию плагина для Far - ColorerSE 1.0.1.6.
На самом деле я уже ни раз выкладывал разные версии  плагина. Но вот только сегодня решился представить его как отдельный проект. Проделана большая работа по адаптации и исправлении исходников головного проекта к текущей версии. В этом большую роль сыграли и пользователи Far, давая рекомендации на форуме . Текущую версию можно назвать стабильной. Со времени последней правки прошло уже много времени.
Ну а главным моментом этого релиза, являются обновленные базы раскраски файлов. Собраны текущие правки с головного проекта, и замечания пользователей.

Следующий шаг - обновление баз из бранча Евгения Ефремова. Там у него много исправлений.

Страница проекта
Обсуждение на форуме

среда, 11 ноября 2009 г.

Все гениальное просто

Решил рассказать, как на своем опыте столкнулся с верностью этого высказывания.

Шел 2002 год. Первый курс университета.  В городе рассвет компьютерных клубов. Для одного из которых я написал программу, для управления и учета средств. Первая моя более менее серьёзная программа, испытываемая в таких масштабах. Но как ни странно все вроде бы работало.
Все хорошо, все замечательно. Но приходит день X . Рядовому игроку мало игр по локалке. Нужен доступ в интернет и игры по интернету. Как раз появился Warcraft 3, и битвы на Battle.net завладели умами игроков.
Начальством поставлена задача  - реализовать в программе возможность подсчета и блокировки интернет-трафика.
В тот период, программ для компьютерных клубов, которые продавались в интернете, было не так много. А уж считающих трафик - одна/две. Те что работали с трафиком, реализовали это через работу с сервером на linux. Он считал и блокировал интернет. Для меня же Linux тогда был  священной коровой. Программировать под него даже и мысли не было. Нужно было найти решение под Windows ( в тот момент Windows 98).

Поиски в интернете приводили только к одному - надо писать драйвер для Windows. На этом фоне перспектива использования Linux ,  была более радужной. Но в итоге, половину задачи удалось решить с помощью драйвера WinPCap. Он как раз таки позволял считать трафик на локальной машине. Нашлись и примеры использования его на Delphi. Использование его показало, что считает примерно правильно, не учитывая видимо некоторый служебный трафик. Но такого результата было достаточно.

Подсчет подсчетом, а блокировать трафик надо. Попалась на глаза следующая идея. Можно получить список открытых сетевых сессий, как программа netstat, а потом каждое соединение убить. Все это делать в цикле, т.к. новые соединения появлялись периодически. Был найден пример кода, и реализовано в программе. Радость была безмерной, работало, считало, блокировало... но не все блокировало. Например, в Counter-Strike можно было играть вечно. Трафик не блокировался. Оказывается UDP пакеты не блокировались моим методом. Облом был сильным. Всяко пробовал, но трафик не блокировался.

Не помню уже как мне пришла эта мысль,  решение было очень простым и действенным. Нужно было просто посмотреть как работает сеть. Чтобы попасть в интернет, пакеты должны попасть на шлюз. А если шлюза нет - нет и интернета. ЭВРИКА!!! Просто удаляем шлюз по умолчанию и интернета нет. Добавляем шлюз - интернет есть. За это отвечает команда 
route delete
и 
route add
Все работало как часы.

Казалось бы, задача реально сложная, а решается в пару строк кода. Возможно решение покажется корявым, но оно работало. Кстати, даже на современных ОС оно будет работать.

суббота, 7 ноября 2009 г.

Проблемы с SVN

Столкнулся недавно с одной проблемой в моём svn репозитарии. Точнее  проблема была давно , а я обратил на неё внимание вот только что. Пытался просмотреть с помощью черепахи лог изменений в репозитарии, а он выдавал список ревизий, но без дат и описаний. Причем проблема возникала только на приватном репозитарии, а на публичном, там где colorer_se - все нормально.

В итоге появилась такая вот запись номером 3516 в баг-трекере Subversion. Если на русском, то суть вот в чем.
Имеем svn сервер с sasl. В нем два различных репозитария, один публичный, другой закрытый. Отличаются они записями в файле authz. Для публичного
[/]
*= r
master=rw
Для приватного  
[/]
*=
master=rw
Т.е. если ты не прошел аутентификацию , то тебе ничего нельзя.
Пробуем посмотреть лог обоих репозитариев. Для публичного он будет такой (это вывод в консоль, так что все нормально) 
r10 | sonar | 2009-03-16 09:21:53 +0300 (Mon, 16 Mar 2009) | 1 line

?\209?\131?\208?​180?\208?\176?\2​08?\187?\208?\181​?\208?\189?\209?​139 ?\208?
\191?\209?​128?\208?\190?\2​08?\181?\208?\186​?\209?\130?\209?​139 ?\208?\180?
\208?\187?\209?\143 ?\208?\188?\208?​184?\208?\179?\2​09?\128?\208?\176​?\209?
\134?\208?​184?\208?\184 ?\209?\129 ?\208?\190?\209?​135?\208?\181?\2​08?\189?
\209?\140​ ?\209?\129?\209?​130?\208?\176?\2​09?\128?\208?\190​?\208?\185 ?\208?
\178?\208?​181?\209?\128?\2​09?\129?\208?\184​?\208?\184 ?\208?\189?\208?\176 ?
\208?\189?\208?​190?\208?\178?\2​09?\131?\209?\142​.
--------------------​--------------------​--------------------​------------
r9 | sonar | 2009-03-16 09:06:05 +0300 (Mon, 16 Mar 2009) | 1 line

?\208?\161?\208?​190?\209?\133?\2​09?\128?\208?\176​?\208?\189?\208?​181?\208?
\189?\2​08?\184?\208?\181​ ?\208?\178?\208?​181?\209?\128?\2​09?\129?\208?\184​?
\208?\184 0.9
--------------------​--------------------​--------------------​------------
Тут мы видим и дату , и пользователя, и сообщение ревизии. Для приватного вывод будет следующим 
--------------------​--------------------​--------------------​------------
r10 | (no author) | (no date) | 1 line

--------------------​--------------------​--------------------​------------
r9 | (no author) | (no date) | 1 line

--------------------​--------------------​--------------------​------------
r8 | (no author) | (no date) | 1 line
Тут мы видим "ничего".

Может возникнуть мнение, что ошибка в самом хранилище. Но я объясняю на двух разных для наглядности. Тоже самое будет, если для публичного отредактировать файл authz  как у приватного. Следующий возникающий вопрос - а ты то под тем логином/паролем заходишь? Специально проверил такой командой 
svn log svn://address --username master --password pass
Результат прежний.

В итоге напрашивается такое объяснение. Команда log  не использует логин/пароль для чтения данных, а ломится на сервер под anonymous.

Будем надеяться, что исправят эту ошибку, либо укажут что я делаю не правильно. Жаль только, что аж с 27 октября к багу ни одного комментария.