среда, 8 февраля 2012 г.

Несостоявшаяся рыбалка

Четыре друга решили пойти на рыбалку. В назначенный день они одели камуфляжные костюмы, брезентовые панамы, для пущей важности они не брились три дня, в общем выглядели как заправские рыбаки. В пункт сбора каждый принес, как было условлено заранее, свой вклад в общее дело - Саня принес сачок, Валера провизию, Антон удобный раскладывающийся стол, Вася тащил лодку и четыре удочки. Подойдя поближе, он бросил лодку на землю, сверху удочки выдохнул и сел на лодку и весь сияя заявил
- Мужики, блин, не поверите сейчас зашел в магазин,  а там как для нас - четыре отличнейших спининга стоит!!! Причем договорился что продавец вернет деньги если не понравится, я в шоке, такой удачи давно не видел - спиннинги легкие, качественные, из нового материала поли... пено... забыл но в общем самые современные и сразу с леской, парится не надо, покупать ее, наматывать!
Саня взял удочку поднял ее, покачал, прикидывая вес, прикинул на глаз ровная ли она, увидев что край уходит немного влево, недовольно хмыкнул, позакидывал удочку со свернутой леской в разные стороны, посгибал, удовлетворенно крякнул и положил удочку на плечо. Двое других недоверчиво смотрели на удочки. наконец Валера сказал
- Че это за фигня? Нахрен ты сюда это притащил?
- Как что за фигня. Удочки. Каждому по одной.
- Я вижу что удочки. Нахрен они нужны?
- Как нахрена. Рыбу ловить. Мы же на рыбалку идем?
- Вот именно что на рыбалку! - раздраженно сказал Валера. - На РЫБАЛКУ! понимаешь? А ты тут с удочками.
В это время время Антон некоторое время с интересом рассматривал удочку, потом положив ее между двух деревьев попытался на ней подтянуться. Удочка жалобно скрипнула и прогнулась
- Не, ну это совсем не куда не годится - выдал он заключение - я даже подтянуться на ней не могу. Представляю что будет если я перекину ее через горную пропасть и буду переходить по ней спасаясь от гималайского медведя! Я или провалюсь в пропасть или меня съест медведь. Не, это полный отстой.
Саня осторожно заметил
- Антох мы в средней полосе России, идем рыбачить на Волгу, какие медведи, какая горная пропасть?!
- Ну что ты заладил - Волга, Волга! Во первых Волга бывает разная, а во вторых что ты знаешь про тектанические движения? Так вот, через миллион-другой лет на Волге тоже могут образоваться горы.
- Ну дак то через миллион лет...
- Ну и что что через миллион. Ты Саня очень коротко мыслишь. А вдруг мы прорыбачим миллион лет, тогда что делать?
- Ну не знаю...
- Вот видишь! Не знаешь! Да и вообще - фигли ты этой удочкой сделаешь. Ну поймаешь одну рыбу, ну другую... Ну даже пусть 20 рыбин ты поймаешь, и что?
- Ну 20 было бы неплохо, ушицы сварить
- Ну вот ты только про ушицу и думаешь. А захочешь ты на удочке на этой своей подтянуться - и все, облом.
- Не, ну я-то обычно подтягиваюсь на турнике.
- Я тоже обычно подтягиваюсь на турнике, и что с того. Это не значит что я не имею права подтягиваться на удочке.
Тут решил вмешаться Вася
- Мужики, ну что спорить, давайте попробуем, если не понравится - сдадим обратно в магазин. Я вот сейчас закинул в бассейн, нормально так закидывается, катушка легко идет, поплавок уже сразу отрегулирован!
Валера резонно возразил
- Не, ты деловой, попробуем, сейчас все привыкнут так рыбу ловить, потом всех отучать придется от этой удочки. У тебя постоянно какие-то бредовые инструменты - вон в прошлый раз ты закидушки притащил, и че хорошего вышло?
Это был удар ниже пояса. Вася, вздохнув, попытался возразить
- Ну мужики честно говорю, когда я один на закидушку рыбачил, все круто получалось... это потом... ну я же не знал что так выйдет!
Он вспомнил как притащил четыре закидушки и они вчетвером спустились к берегу порыбачить. Все вместе стали раскручивать грузики над головой - как результат Антон попал грузилом Валере в лоб, Саня примотался леской к Антону, а крючок от закидушки Валере впился Васе в причинное место, да так что пришлось вызывать скорую... Вася поежился.
- Не знал, не знал - передразнил Валера - а ты знаешь сколько я тренировался ее закидывать правильно! Сколько времени потратил! И вообще ты постоянно так делаешь. И с этими удочками так же, я вот только сейчас узнал что ты припрешь сюда удочки! Можно было бы перед покупкой сказать, позвать в магазин
- Ну я тебя звал.
- Ты звал просто в магазин! Откуда я знал что ты там будешь покупать удочки!
- А что еще можно покупать в магазине удочек?
- Все равно ты не настойчиво звал!
Тут уже вмешался Саня
- Ладно. погодите горячие финские рыбаки,осадите. Ну хорошо, Валера,  а ты чем предлагаешь ловить?
- Буром.
- Чем?!!!
- Буром.
- Не понял. В смысле, тем которым бурят лед?
- Именно!
- Т.е. погоди... Как это... буром можно ловить рыбу?
- Да не. ну как ты не понимаешь. Бур - это же просто основа. Во первых в него из коробки сразу встроены блэкджэк и девочки. Из него можно сделать вообще что угодно. Я знаю одного мужика он из буров делает даже снегоходы!
Саня задумался
- Я всегда думал что бур используется в зимней рыбалке для...
- Ну! Вот видишь, сам признаешь что для рыбалки!
- Нет, я хотел сказать что для зи...
Тут вмешался Антон
- Конечно надо рыбачить буром! Например если его обернуть жестью - на нем легко можно подтягиваться, если на тебя нападает медведь - можно приделать к буру мотор и пробурить себе пещеру, с буром вообще можно делать все, понимаешь все!
- Ну а рыбачить как, у него же ручка кривая и лопасти...
- Да это все можно переделать как тебе нужно - пара ударов кувалдой и ручка прямая, еще 10 ударов - и нет лопастей, вот и будет тебе твоя удочка!
- Но это же будет железная удочка и без лески
- Ну что ты докапался, леска, леска. Я тебе конкретные аргументы уже привел почему удочку здесь вообще нельзя использовать, а ты уперся как баран! Вообще кто этой твоей удочкой пользуется?
- Ну как... за всех не скажу, но у меня на площадке почти все, и Митрич и Темя Рябой, все удочками
Вмешался Валера
- Ну вот видишь, устроили междусобойчик, три человека пользуются а тыща не пользуются, а ты уже навяливаешь всем свои удочки.
Антон
- Я же тебе наглядно показал что на удочке даже не подтянешься, о чем тут вообще говорить
Валера
- А я вообще узнал про эти удочки в последний момент!
Саня взвыл
- Так! Подождите! Давайте подытожим! Антон тебе что не нравится конкретно
- Во первых не подтянуться. Во вторых как я буду зимой делать лунки? Удочкой что ли?
- Ну так возьми бур для лунок...
- Ну вот! А я что говорю - нужен бур!
- Нет,  я имею ввиду что летом удочку, а зимой удочку и бур.
- Ну вообще зашибись! Я еще должен двумя инструментами пользоваться! У меня и так, давай посчитаю, лодка, весла, термос - три инструмента. а ты еще предлагаешь удочку и бур, копец какой-то 5 инструментов, это просто ахинея. Вот у Витьки жена, работает на буровой скважине, так она вообще пользуется одним буром, и больше ничем!
- Ну я тоже пользуюсь 5-ю инструментами и нормально.
- Ну ты можешь пользоваться хоть десятью, если тебе нравится, а я не хочу.
- А я не хочу рыбачить буром!
- Нет хочешь! Ты просто не понимаешь. Давай рассуждать логически
- Давай
- Ты понимаешь что меня не устраивает удочка?
- Понимаю
- Ты понимаешь что всем нам надо использовать один и тот же инструмент для рыбалки?
- Ну... желательно
- Ну вот видишь! - победно заключил Антон - ты сам пришел к правильному выводу!
Саня замешкался
Инициативу подхватил Валера
- Вот смотри. Раз ты уже согласился на бур, давай так
- Я не согласен рыбачить бу...
- Подожди дай я договорю. Значит надо со всех нас собрать требования, потом провести совещание, определить цели проекта, сроки, бюджет. Я знаю как минимум двух мужиков которые качественно наматывают лески на буры. Берут они недорого.
- Блин...
- Ну что ты блинкаешь. Удочка это вообще не вариант! Вот как ты ловишь рыбу?
- Ну закидываю удочку, смотрю на поплавок. Как только он нырнет, сразу выдергиваю.
Антон и Валера дружно засмеялись.
Антон сказал
- Мда, и ты еще с таким подходом хочешь какой-то рыбы наловить... Это все делается не так - приходишь на речку буришь лунку, и рыба сама валит в лунку, потому что ей дышать нечем
Валера добавил
- К тому же бур очень круто интегрируется с машиной, можно ездить по льду на машине и бурить лунки подключив бур к двигателю
Антон оживился еще больше
- Да можно вообще подключить бур к электросети машины и управлять скоростью вращения с магнитолы!
Валера развил мысль
- Да можно даже не с магнитолы. Если докупить инверсный блок, и распаять его правильно, то и управление голосом прикрутить можно!
Саня обреченно попытался возразить
- Ребят, а летом-то как
Валера ухмыльнулся
- Да что летом. Летом еще проще. Можно апроксимировать лунку на всю поверхность реки, проще говоря считай что река - это одна такая большая лунка, и дальше все сводится к моему случаю.
Антон продолжал
- Смотри, в буре, сразу из коробки встроены блэкджэк и девочки, а в удочке что? Вот у меня один бур есть - в нем у каждой лопасти 18 степеней свободы, и он умеет автоматически сворачивать лопасти при соприкосновении с водой! Мы с мужиками его шесть лет делали в гараже! Там еще конечно пара мелочей осталась, но мы их доделаем через месяца два-три уже! Иногда он правда крутится медленновато, но мы же на рыбалке, нам куда торопиться!
Саня и Вася не сговариваясь взяли удочки и пошли по домам. Антон и Валера переполненные ликования тоже пошли домой подпрыгивая от радости.
Рыбалка не состоялась.

понедельник, 31 октября 2011 г.

Помещаем tomcat позади apache2 и подключаем домены третьего уровня

Итак, прошло пара дней, хостинг и домен были подняты.
Далее я перешел к теме которую знал только по наслышке, правда очень хорошо. Конечно апача ставят в переди томката в основном для распределения нагрузки, что мне пока не требовалось, но даже без балансировки котенок Том чувствует себя под защитой воинственного индейца гораздо уверенней. Что же предстояло сделать на этот раз
1. Прячем томкат за апачем с помощью mod_jk
2. Стараемся спрятать урлы томката (контекст и маппинги) на доменах третьего уровня. Сразу оговорюсь - почему стараемся, не во всех случаях это возможно.

В общем можно было посадить томкат за чем-нибудь более легковесным, например nginx'ом, lighttpd или varnish, вариантов много, однако времени в обрез и совсем не в кайф заниматься изучением технологий ради изучения, и так багаж бесполезных знаний после исправления несуществующей проблемы bind трещал по швам.
Понеслась :)
1. Настраиваем mod_jk
В сети оказалось на удивление материалов по этой теме и как ни странно самыми вменямыми оказались какой-то внутренний доковский документ и официальная документация проекта Apache Tomcat Connectors. Просмотрев пару верхних ссылок гугла, я уже бросился компилять коннектор из сырцов, но что-то меня остановило. И правильно. В конце первой страницы гугловой выдачи я нашел тот странный вордовский документ в котором описывалось как ставить mod_jk в убунте. Явно он предназначался или для внутреннего использования, или для клиентов какой-то компании. Хоть документ был и не очень актуальным, он повел меня в правильном направлении. Ставим mod_jk

sudo apt-get install libapache2-mod-jk

Пакет заботливо создал директорию /etc/libapache2-mod-jk а в ней в общем вполне рабочий конфиг - workers.properties. Остается включить mod-jk в настройках апача:
Создаем в /etc/apache2/conf.d файл конфигурации допустим jk.conf имя не имеет значения, т.к. апач инклудит все файлы из каталога /etc/apache2/conf.d в основной конфиг. Соержимое файла примерно такое

  root@Ubuntu-1004-lucid-32-minimal /etc/apache2/conf.d # cat jk.conf
  JkWorkersFile /etc/libapache2-mod-jk/workers.properties
  JkLogFile     /var/log/apache2/mod_jk.log
  JkLogLevel    info
  JkShmFile     /var/run/apache2/mod_jk.shm


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

a2enmod jk

рестартуем апач, mod-jk работает, о чем видим соотвествующие записи в логах.

Вторая проблема - Посадить разные части приложения на разные домены третьего уровня и по возможности убрать лишее в url приложения. Веб-приложение состояло из двух частей. Одна написана с использованием Wicket, другая на простом сервлете, с простеньким самопальным диспетчером и шаблонами Velocity. Как известно у томката маппинги настраиваются от url веб-приложения. Т.е. если мы задеплоили приложение WebApp.war в котором сервлет отмаплен на url - /* то это значит что сервлет будет обрабатывать запросы вид http://server_address/WebApp/*. Задача была сделать так что бы сервлет обрабатывал все запросы вида webapp.server_address Забегая вперед скажу что это хорошо получилось только для случая использования чистого сервлета, сразу не получилось использовать в случае веб-фреймворка Wicket. Однако это было допустимо и так и решил сделать.


1. Добавляем виртуальный хост апача для сервлета
Сервлет у нас отмаплен  в веб-приложении на путь /drv/*
Создаем в /etc/apache2/sites-available/ файл с описанием нашего виртуального хоста, например drv.example.ru с таким содержимым

root@Ubuntu-1004-lucid-32-minimal /etc/apache2/sites-available # cat drv.example.ru

<VirtualHost *:80>

      ServerAdmin webmaster@localhost
      ServerName drv.example.ru

      JkMount /* ajp13_worker
      JkLogFile  /var/log/apache2/drv.modjk.log
      JkLogLevel  debug

      RewriteEngine on
      RewriteRule /(.*) /WebApp/drv/$1 [PT]
      RewriteLog /var/log/apache2/drv.rewrite.log
      RewriteLog 9

      ErrorLog /var/log/apache2/drv.error.log

      # Possible values include: debug, info, notice, warn, error, crit,
      # alert, emerg.
      LogLevel warn

      CustomLog /var/log/apache2/drv.access.log combined

</VirtualHost>

Ключевым я бы тут назвал строку RewriteRule /(.*) /WebApp/drv/$1 [PT], все остальное довольно прозрачно - директивой JkMount /* ajp13_worker говорим что все урл от корня этого виртуального сервера должны обрабатываться jk воркером ajp13_worker (он у нас один :) )
RewriteRule /(.*) /WebApp/drv/$1 [PT] - тоже вполне понятная директива, magic здесь в флагах passthrough ([PT]) - без них не работает.
Т.к. диспетчер самопальный не составило особого труда понять какие url приходят в сервлет на самом деле, викинуть ненужное и обрабатывать правильно, т.е. в итоге сервлет работал по адресу drv.example.ru

С сервлетом на Wicket дела обстоят хуже, т.к. у него собственный диспетчер URL, наверное, если сильно постараться можно добиться требуемого эффекта и с ним, но в моем случае это поведение было приемлемым, поэтому оставил так. По моему в Wicket 1.5 это как-то сильно улучшили, но пока еще не разбирался.

понедельник, 11 апреля 2011 г.

Злоупотребления...

Задумался о смысле слова злоупотребление - значит употребить во зло. Например злоупотребление служебным положением - употребить это самое положение во зло. Т.е. подразумевается что обычно служебное положение употребляют в добро. Что же тогда значит злоупотребление вредными привычками?