Все гениальное просто
Решил рассказать, как на своем опыте столкнулся с верностью этого высказывания.
Шел 2002 год. Первый курс университета. В городе рассвет компьютерных клубов. Для одного из которых я написал программу, для управления и учета средств. Первая моя более менее серьёзная программа, испытываемая в таких масштабах. Но как ни странно все вроде бы работало.
Все хорошо, все замечательно. Но приходит день X . Рядовому игроку мало игр по локалке. Нужен доступ в интернет и игры по интернету. Как раз появился Warcraft 3, и битвы на Battle.net завладели умами игроков.
Начальством поставлена задача - реализовать в программе возможность подсчета и блокировки интернет-трафика.
В тот период, программ для компьютерных клубов, которые продавались в интернете, было не так много. А уж считающих трафик — одна/две. Те что работали с трафиком, реализовали это через работу с сервером на linux. Он считал и блокировал интернет. Для меня же Linux тогда был священной коровой. Программировать под него даже и мысли не было. Нужно было найти решение под Windows ( в тот момент Windows 98).
Поиски в интернете приводили только к одному — надо писать драйвер для Windows. На этом фоне перспектива использования Linux , была более радужной. Но в итоге, половину задачи удалось решить с помощью драйвера WinPCap. Он как раз таки позволял считать трафик на локальной машине. Нашлись и примеры использования его на Delphi. Использование его показало, что считает примерно правильно, не учитывая видимо некоторый служебный трафик. Но такого результата было достаточно.
Подсчет подсчетом, а блокировать трафик надо. Попалась на глаза следующая идея. Можно получить список открытых сетевых сессий, как программа netstat, а потом каждое соединение убить. Все это делать в цикле, т.к. новые соединения появлялись периодически. Был найден пример кода, и реализовано в программе. Радость была безмерной, работало, считало, блокировало... но не все блокировало. Например, в Counter-Strike можно было играть вечно. Трафик не блокировался. Оказывается UDP пакеты не блокировались моим методом. Облом был сильным. Всяко пробовал, но трафик не блокировался.
Не помню уже как мне пришла эта мысль, решение было очень простым и действенным. Нужно было просто посмотреть как работает сеть. Чтобы попасть в интернет, пакеты должны попасть на шлюз. А если шлюза нет — нет и интернета. ЭВРИКА!!! Просто удаляем шлюз по умолчанию и интернета нет. Добавляем шлюз — интернет есть. За это отвечает команда
и
Все работало как часы.
Казалось бы, задача реально сложная, а решается в пару строк кода. Возможно решение покажется корявым, но оно работало. Кстати, даже на современных ОС оно будет работать.
Проблемы с SVN
Столкнулся недавно с одной проблемой в моём svn репозитарии. Точнее проблема была давно , а я обратил на неё внимание вот только что. Пытался просмотреть с помощью черепахи лог изменений в репозитарии, а он выдавал список ревизий, но без дат и описаний. Причем проблема возникала только на приватном репозитарии, а на публичном, там где colorer_se — все нормально.
В итоге появилась такая вот запись номером 3516 в баг-трекере Subversion. Если на русском, то суть вот в чем.
Имеем svn сервер с sasl. В нем два различных репозитария, один публичный, другой закрытый. Отличаются они записями в файле authz. Для публичного
*= r
master=rw
Для приватного
*=
master=rw
Т.е. если ты не прошел аутентификацию , то тебе ничего нельзя.
Пробуем посмотреть лог обоих репозитариев. Для публичного он будет такой (это вывод в консоль, так что все нормально)
?\209?\131?\208?180?\208?\176?\208?\187?\208?\181?\208?\189?\209?139 ?\208?
\191?\209?128?\208?\190?\208?\181?\208?\186?\209?\130?\209?139 ?\208?\180?
\208?\187?\209?\143 ?\208?\188?\208?184?\208?\179?\209?\128?\208?\176?\209?
\134?\208?184?\208?\184 ?\209?\129 ?\208?\190?\209?135?\208?\181?\208?\189?
\209?\140 ?\209?\129?\209?130?\208?\176?\209?\128?\208?\190?\208?\185 ?\208?
\178?\208?181?\209?\128?\209?\129?\208?\184?\208?\184 ?\208?\189?\208?\176 ?
\208?\189?\208?190?\208?\178?\209?\131?\209?\142.
------------------------------------------------------------------------
r9 | sonar | 2009-03-16 09:06:05 +0300 (Mon, 16 Mar 2009) | 1 line
?\208?\161?\208?190?\209?\133?\209?\128?\208?\176?\208?\189?\208?181?\208?
\189?\208?\184?\208?\181 ?\208?\178?\208?181?\209?\128?\209?\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 как у приватного. Следующий возникающий вопрос — а ты то под тем логином/паролем заходишь? Специально проверил такой командой
Результат прежний.
В итоге напрашивается такое объяснение. Команда log не использует логин/пароль для чтения данных, а ломится на сервер под anonymous.
Будем надеяться, что исправят эту ошибку, либо укажут что я делаю не правильно. Жаль только, что аж с 27 октября к багу ни одного комментария.
ООП и я
На каждом шагу звучат эти три буквы ООП. Причем так же часто, как на заборе пишут другое слово из трех букв. А уж с выходом новых версий delphi только и слышишь про генерики и подобное. Вроде и в университете проходили ООП, и кой какую литературу из нетленки по этой теме читал. Но вот не вижу я места где применить его. Не, ну конечно delphi и окна построенно на классах, пользуюсь этим. Но чтобы что то свое сделать, какой-нибудь маленький классик замутить — неа. То ли задачи у меня на работе мелкие, недостойные классов, то ли я все таки не понимаю нафиг оно надо. А может не дорос я?
Найти бы какую идейку программки, в которой бы ооп можно было бы использовать. Да так чтоб затянуло. Но пока идей ноль. А работа начинает доставать. Не приносит того удовольствия, что по началу. И искать в основной работе такую идею вообще нет смысла.
Баг Оперы и TineMCE 3.2.4 в WordPress
Пока писал предыдущий пост заметил следующую багу. Если в окне редактора в начале строки стоят пробелы или табы, то при сохранении поста эти символы в начале строк удаляются. Воспроизводится в Opera 9.64 и 10 beta 3 . В IE8 все отлично.
Думал запостить в багрепорт TineMCE , но у них на тестовой странице с TineMCE 3.2.5 из под оперы все нормально работает. То ли они это исправили (явно в ченджлоге не видно), толи это бага WordPress. Но блин я вчера из-за этого убил 4 часа времени. Проверил предыдущие свои посты, там тоже самое - форматирование сбивается.
Зацепило
Прочитал на днях две цитаты. Зацепили ...
Взросление, это когда ты вместо того что бы написать какой-нибудь коммент в обсуждении, опровергающий остальные мнения, написав половину, стираешь все с мыслями — а кому это на*уй надо. © BashOrg
Вот ведь. Я ж взрослею
. Со мной такое бывает раз в неделю. Ну коммент мой конечно не опровеграет все остальные, но вносит какую то ясность. И вот пишишь его пишишь, а потом раз и удалил.
А еще бесит, что иногда тоже развернешь пост на форуе свой, распишишь. А после твоего поста тишина. Вообще никто ничего не пишит, ни мне в ответ, ни дальше в тему. И происходит это на разных ресурсах. Тут напрашивается вывод, что я тормоз , пишу в темах когдак ним пропадает интерес у народа.
Вторая цитата
Hаpодная пpимета: Если пpогpаммист в pабочее вpемя игpает, значит — либо у него мало pаботы и большая заpплата, либо у него много pаботы и маленькая заpплата. © взято с http://pankratov.org.ua/it/dev-play
актуальна она что то в кризис. В общем зацепило, задело.
Дела, заботы и маленький праздник
Опять давно ничего не писал. Пропадаю. А все апатия какая то. На днях взял себя в руки и занялся наведением порядка. Кое как заставил себя удалить с компа около 300 гб музыки, не отсортированной. Накачал когда то , еще во времена дорогого интернета. А сейчас так безжалостно удалил. Жалко, но надо. Под нож пошли 5 почтовых ящиков, накопленных за долгие года.
Сделал к своему небольшому празднику, сегодня кстати мне четверть века исполнилось, подарок. Именной домен и почту. Открою маленькую тайну — зовут меня Добрунов Алексей. Ну и почта соответственно aleksey щенок dobrunov . Мелочь вроде, а приятно. Еще родне в этом домене почту сделать для приличия надо. Почту как и dobrih.net перенес с хостинга на gmail. И управлять удобнее, и ограничений почти нет, и работает быстрее. В общем одни плюсы.
Ну и само собой блог. Настало время обновится. И вордпресс дорос до следующей стабильной версии, да и тема оформления меня честно говоря запарила. уж очень тяжелая и некрасивая. Пришлось пожертвовать удачным по-моему логотипом, и перейти на другую тему. Лучше выглядит, ни такая громоздкая. Заодно решил уйти от плагина wp-synhighlight, о котором упоминал ранее. Долго он не обновлялся, и не работали нужные вещи. Перешел на CodeColorer . То что меня раздражало в предыдущем тут было нормально. Вчера правда получил письмо от автора wp-synhighlight, о том что он поправил многие вещи что просили. Просит протестировать поглядеть. Блин вот ведь сейчас делема то.
Кстати, во время настройки выяснился один факт — wordpress не очень хорошо работает с списками (нумерованный или маркированный). При форматировании может добавить лишний закрывающий тег. Вот описание проблемы.
Поставил еще антиспам плагин WP Captcha Free. Счас в радостном недоумении. Спама вообще не стало. Раньше в день по 20 сообщений было. Akismet отметал из, но они были. А счас вообще тишина.
А в остальном вроде все постарому. Машина так же мозги и руки мои мучает. Достало блин. Раньше терпимее к ней был. А сейчас желание ходить пешком все больше проявляется. Порой мечтаешь о велосипеде. На работу на велосипеде, обратно также. По делам на нем же. Так ведь блин, работа в 40 км от дома, погода не айс. Да и с ним бывают проблемы.
Недавно решил отвлечься от всего, почитал новую книгу Лукъяненко — Недотепа. Как оказалось — сказка. Наверное для детей своих писал. В целом не плохо, для сказки. Для 6-9 летних детей. Но взрослым читать наверное не надо. Найти бы чего то типо «Звезды Холодные игрушки» или «Линия Грез». А уж если бы что то похожее на «Лабиринт отражений» ну просто шикарно бы было. Хотя сам понимаю, что написать что то похожее на лабиринты врятли получится.Получится, но будет не то. Не ново, похоже на все эти онлайн игры. Кстати, отличнейшая пародия на ситуацию вокруг онлайн игр показали в Южном парке ( South Park) еще аж в 2004 году. Серия из разряда "я уржался".
Админы инструкции не читают
Вот ведь правду говорят — админы не читают инструкций. Даже своих же.
Потребовалось установить связку Redmine по анологии моей инстукции . И что вы думаете , даже глядя краем глаза в неё, я наделал столько ошибок. Пока разбирался в чем дело, заглядывал в интсукцию, и видел там прямой ответ. Всего то надо было внимательней читать.
А потом мы жалуемся, что пользователи не умеют читать инструкции
Заодно обновил немного интсрукцию.
VDS — настройка продолжается
Ковырялся давеча на серваке, настраивал бэкап и экспорт svn в базу Redmine. Да, есть такая особеность в Redmine — он сам не лезет в репозиторий за данными о изменениях. Для этого надо периодически запускать скрипт
Заметил такую неприятную вещь — сайт не особо посещаемый, точнее кроме меня на нем никто не бывает. Поэтому процесс passenger`а постоянно выгружается из памяти за не надобностью. Но вот если после этого зайти на сатй, то он будет грузится порядка 20 -30 секунд, а потом снова будет нормально. Ситуация так себе. Была идея прикрутить wget для периодического запроса главной страницы. Но в начале решил почитать мануал по passender`у. И таки нашел. Параметр PassengerPoolIdleTime - время простоя до выгрузки из памяти. по умолчанию 300 секунд. сделал 3000. Стало гораздо лучше. Особенно изменилось использование памяти. До исправления текущее потребление памяти всей системой было примерно 115 мб, после 74 мб. Занятно.
Надо копать дальше, может что то еще можно оптимизировать. Память на вес золота.
Redmine + Apache + Passenger + Subversion на примере Gentoo
Как ранее писал, решил я настроить себе subversion сервер с багтрекером Redmine. Для этого обзавёлся виртуальным выделенным сервером на 1GB.ru . В качестве операционной системы там установлен Gentoo 2008. Для запуска сайта на Ruby on Rails существует много возможных комбинаций серверов. Например, я пробовал Apache + proxy_balancer + Mongrel , просто Mongrel. Так же всевозможные замены Apache на альтернативные веб-сервера. Но посоветовавшись с админом форума http://rubyclub.com.ua/, пришел к тому, что буду использовать Apache + Passenger. Кстати, в сети не нашел какого-либо мануала про Redmine и эту связку, с чем связаны многие часы раздумий. Ну и для полного счастья, точнее для более быстрой работы Passenger устанавливал Ruby Enterprise Edition. Я не рассматриваю установку и настройку базы данных, т.к. у меня она стоит на мощностях хостинга, а не на моем vds.
Цель поста — систематизировать свои знания, оставить себе шпаргалку, ну и показать некоторые нетривиальные места. Практически все собиралось из исходников, так что привязки конкретно к Gentoo практически нет. Ну и как некоторый показатель — после изучения всех граблей, настройка сервера заняла часа 3-4, и то в связи с ограничением на ресурсы сервера.
Раздумья 2
Прошла почти неделя как начались раздумья. Думал правдо я не долго, решил — а почему бы и нет. Запас карман тянет не сильно
.
Выбор пал на своего основного хостера 1Gb.ru. Поменял тариф на VDS и поехал пробовать настроить что мне надо. С воскресенья просто проподаю в консоли, голова никакая. В браузере уже порядка 20-30 открытых вкладок, что для меня при обычных 3-5, огромное количество. Сегодня закончил этап тестирования возможностей моих и сервера, осталось определиться что конкретно я хочу сделать и реализовать это.
В ходе тестирования выяснилось несколько интересных вещей.
- Оказывается в стандартный тариф vds на 1gb.ru входит виртуальный хостинг. Т.е. я могу оставить свой блог на старом месте, не пытаясь настроить его на vds. Это просто значительный плюс. И так скудные ресурсы не будут тратиться на блог.
- SVN-клиенты, например TortoiseSVN, могут не работать через proxy-сервер. Пытался подключиться к svn-серверу как по svn:// так и по http:// (apache + web_dav) через HTTP-прокси и SOCKS5 — результат никакой. Максимум чего добился, это подключиться к серверу http:// по http-прокси, но обозревать зхранилище не давало. В тоже время через браузер в хранилище заходило и показывало все коректно. Победить удалось использованием FreeCap и SOCKS5. Заработало на ура по всем протоколам.
- Различия в дистрибутивах linux бывают очень большими. Настраивая программу по инструкции для одного дистрибутива, адаптируя команды под свои условия нет никакой гарантии что все заработает. Например собрал subversion с динамической линковкой библиотек. Апач не стал запускаться, т.к. не может найти эти библиотеки. После долгих поисков нашлось решение — нужно проверить есть ли папка с этими библиотеками в файле /etc/ld.so.conf и запустить команду /sbin/ldconfig. Это для gentoo, для freebsd возможно поможет команда rehash. Позже опишу шаги настройки сервера с сылками на мануалы.
Эпопея получилась захватывающая. Больше всего убивало качество связи дома. Казалось бы, что может быть менее требовательно к связи как консоль ssh? А в итоге дома пбезлимитный тариф на 512 кбит, полностью свободный канал (запущеный джабер за раздражитель не принимается), а работа в консоли тормозит. Если еще запустить миднайт командер — порой бывает тяжко. Другое дело на работе. Вроде 2 мбита безлим, около полусотни человек в сети (если не больше), все работает через проксю, да еще вроде по этим же 2 мбитам телефонная связь идет — ssh работает на ура. Толи из-за того что дома я вечером ей пользуюсь, а в это время кучу народу сидит в инете, толи просто провайдер не может настроить... но так жить нельзя.
на этой печальной мысли закончился рабочий день )