Hatred's Log Place

DON'T PANIC!

Mar 2, 2011 - 2 minute read - programming

Hightide

Hightide (High Tide - большая вода) - сборка Jetty с включенными дополнительными библиотеками и сервисами JavaEE (эдакий не совсем JavaEE Application Server). Решили попробовать его для своих нужд, пока возможностей JBoss нам не нужно.

Последняя стабильная версия - 7.3.0 (поддерживается Java5), нестабильная - 8.0.0.M2 (нумерация по версии Jetty, поддерживает Java6).

Скачать можно отсюда: http://dist.codehaus.org/jetty/

Для удобной работы потребуется адаптер для WTP, который поддерживает Jetty 7 и 8: http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Install

Единственный нюанс: адаптер рассчитан чисто на Jetty, поэтому в дефолтной конфигурации просто не запустится - не будет хватать jar-ников. Пока выход нашёл ровным счётом один: по двойному клику на вкладке Servers по Jetty открываем диалог конфигурации, там идём в “Open launch configuration” и далее двигаемся на вкладку Classpath и в категории User Entries добавляем External JARs, которые ищем в lib директории и поддиректориях в jetty.home.

Если есть другие пожелания - в каментах жду ответов.

При работе с Maven поможет эта статья: http://docs.codehaus.org/display/JETTY/Fast+WebApps+with+Hightide

А про мой “любимый” JAAS почитать можно тут: http://docs.codehaus.org/display/JETTY/JAAS, а вообще по документации:

По вопросам горячего деплоя можно почитать тут: http://phishbouncer.com/trac/browser/trunk/jetty/demo/webapps/jetty/faq/HotDeploy.html, где сказано, цитирую:

Q: Can Jetty Hot Deploy?

A: Jetty is fully hot deployable, but does not have any native hot deployers. What this means is that Jetty contexts, servlets and filters may be added, stopped, started and reloaded dynamically, but that Jetty does not have any services that trigger these events.

Далее по тексту идут причины такого поведения. Ну и полезным по этой теме будет:

Feb 20, 2011 - 1 minute read - programming

Си, прекрасное

http://eli.thegreenplace.net/2011/02/15/array-initialization-with-enum-indices-in-c-but-not-c/ - это воистину прекрасно! Использовать enum для именованной инициализации массива. Можно делать в C99, не работает в C++

Ну и ссылки, на правах мемориза:

  • http://www.advancedlinuxprogramming.com/alp-folder - по названию сайта уже понятно, что это такое :) книжка “Advanced Linux Programming” в сободном доступе. На просторах интернета встречается русский перевод, можно поискать.
  • http://mij.oltrelinux.com/devel/unixprg/ - “UNIX programming examples” - примеры кода на Си для unix, в частности - сокеты, IPC, потоки.

Feb 18, 2011 - 2 minute read -

Dokuwiki Bookmark и Firefox

Внимание: статья полностью неактуальна ввиду переезда на статику в 2019 году.

Какое-то время назад я поднял у себя на wiki систему веб-закладок. Из браузеров подобные закладки добавляются при помощи так называемых bookmarklets - javascript вводящихся через адресную строку.

Естественно что, по сути, единственная удобная возможность использования веб-закладок - это создать на панели закладок (каламбууур!) закладку с URL с текстом букмарклета.

Но мне что-то не понравилось: держать открытую панель закладок ради этого, тратить драгоценное экранное место моего EeePC 1000HA… Решил покурить тему.

Задачу сформулировал так: создать кнопку, которую можно поместить на любую активную панель, и вызывать диалог сохраненя веб-закладки по нажатию на неё.

Приступил к поиску. Результат не заставил себя долго ждать: почти сразу нашел расширение Custom Buttons.

Следующим шагом - придумать код кнопки. Атака “в лоб”, то есть подстановкой кода букмарклета в команду openURI не увенчалась успехом. Но, благодаря этим документам:

  • Custom Buttons Documentation
  • Tabbed browser (особенно про получение объекта document для текущей открытой вкладки)
  • Pages tagged with “DOM” (тут вообще читать не перечитать, но оставим это любителям ваять расширения для FF) был составлен следующий код (помещается во вкладке Code (Код) редактора новой кнопки):
/*CODE*/
host  = 'http://hatred.homelinux.net/wiki';

doc   = content.document;
title = doc.title;
url   = doc.location.href;
sel   = doc.selection ? doc.selection.createRange().text : doc.getSelection();

target_url = host + '/doku.php?do=dokubookmark&te=' + encodeURI(sel) + 
                    '&ur=' + encodeURI(url) + '&ti=' + encodeURI(title);

// Open in new Window
window.open(target_url, 'dokuwikiadd',
    'scrollbars=yes,resizable=yes,toolbars=yes,width=680,height=520,left=210,top=150,status=yes');
// Open in new Tab
//gBrowser.selectedTab = gBrowser.addTab(target_url);

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

На скриншоте процесс редактирования выглядит так:

Кнопку после создания помещаем на любую открытую панель и пользуемся.

Из замеченных косяков: при включенном No script при открытии окна сохранения ругается на возможную XSS атаку и малость коверкает выделение при вставке, приходится перечитывать.

Feb 14, 2011 - 1 minute read - programming

Maven и WTP

WTP - Eclipse Web Tools Platform. Набор расширений для удобной работы с WEB проектами. Деплой на различные серверы приложений, отладка, профилирование и много всего другого вкусного.

Про Maven не пишу, многим понятно. В последних версиях плагина для Eclipse в extra есть модули для j2ee проектов различных версий соглашений (j2ee 5/6 и младше). Но статья по ссылке:

http://www.devx.com/Java/Article/36785

будет полезна как инструкция по переводу существующего проекта, созданного средсвами Eclipse и WTP на сборку maven’ом.

Feb 14, 2011 - 1 minute read - programming

Java и LDAP. Малость заметок

Помаленьку, понемножку, на уровне ссылок.

Заметка первая: LDAP как JNDI ресурс в context.xml

Читать тут: http://old.nabble.com/LDAP-as-resource-in-context.xml-td14204908.html

Из бяк: при использовании пула подключений, само подключение создаётся в момент new InitialDirContext(env); или первого обращения поиска атрибутов. Для подключения создаётся поток, который не завершается при редеплое. Tomcat ругается при этом на потенциальную утечку памяти. Раздражает.

Заметка вторая: использование DN в фильтрах

Не сразу прокурил как, вот статейка на русском языка, поясняющая - как это нужно делать: http://sysadminblog.ru/ldap/2011/01/18/tipichnye-primery-ispolzovaniya-entrydn-v-ldap-filtrah.html

Feb 8, 2011 - 2 minute read - programming

ThreadLocal Memory Leak

Использовать ThreadLocal переменные удобно, для расшаривания данных между разными частями одного потока (допустим достучаться из POJO объекта к HTTP сессии и т.п.). Другое дело, что чревато в контексте использования сервера приложений: тут треды не уничтожаются, а возвращаются в пул потоков, как следствие: GC не собирает их, они остаются в памяти, а тут, помимо явной утечки, есть ещё и потенциальная дырка в безопасности.

По ссылке статья на английском на эту тематику. Как решить теперь буду думать.

По этой ссылке:

http://wiki.apache.org/tomcat/MemoryLeakProtection

Можно почитать про разные MemLeaks в веб-приложениях (точнее про технологию защиты от оных в Tomcat)

UPD: подкатом решение (???)

Решение

Найдено тут: http://weblogs.java.net/blog/jjviana/archive/2010/06/09/dealing-glassfish-301-memory-leak-or-threadlocal-thread-pool-bad-ide

какое выбирать, решать вам, я выбрал второй вариант с наследованием класса. Скопирую его тут с форматированием:


import java.lang.ref.SoftReference;

public abstract class SoftThreadLocal<T> extends ThreadLocal<T>
{
    // Encapsulation required because Generics is stupid about references, and there is no interface for ThreadLocal, 
    //so I can't simply extend a single ThreadLocal, grr! Java has so many brittle design mistakes in it.
    private final ThreadLocal<SoftReference<T>> local = new ThreadLocal<SoftReference<T>>();

    
    @Override
    public T get() 
    {
        SoftReference<T> ref = local.get();
        T result = null;
        
        if (null != ref) 
        {
            result = ref.get();
        }
        
        if (null == result) 
        {
            result = initialValue();
            ref = new SoftReference<T>(result);
            local.set(ref);
        }
        
        return result;
    }
    
    
    @Override
    public void set(T value) 
    {
        if (null == value) 
        {
            remove();
        } 
        else 
        {
            local.set(new SoftReference<T>(value));
        }
    }
    
    
    @Override
    public void remove() 
    {
        local.remove();
    }
}

Далее работа классическая, к примеру, как у меня через ThreadLocal Singleton:

import java.util.HashMap;

/**
 * Небольшой вспомогательный статический класс
 * для расшариванить локальных для треда переменных. Значение будет для каждого треда своё.
 * 
 * Допустим, получая в методе doPost()/doGet() сервлета значение сессии и для проброса во все дочерние
 * классы, без необходимости передачи оных параметром, что, собственно говоря, не всегда возможно.
 *
 * @author hatred
 * 2011-01-27
 */
public class ThreadContext
{
    private /*static*/ final SoftThreadLocal<HashMap<Object, Object>> _context = new SoftThreadLocal<HashMap<Object, Object>>()
    {
        protected HashMap<Object,Object> initialValue()
        {
            return new HashMap<Object,Object>();
        }
    };

    private static ThreadContext _instance = null;
    //
    
    synchronized public static ThreadContext getContext()
    {
        if (_instance == null)
        {
            _instance = new ThreadContext();
        }
        
        return _instance;
    }
    
    synchronized public static void releaseContext()
    {
        if (_instance != null)
        {
            _instance.clear();
            _instance.contextRemove();
        }
        
        _instance = null;
    }
    
    public void put(Object key, Object value)
    {
        _context.get().put(key, value);
    }
    
    public Object get(Object key)
    {
        return _context.get().get(key);
    }
    
    public void remove(Object key)
    {
        _context.get().remove(key);
    }
    
    public void clear()
    {
        _context.get().clear();
    }
    
    protected void contextRemove()
    {
        _context.remove();
    }
}

Кстати, не могу понять, насколько правильно делать getContext() и releaseContext() synchronized?

Jan 31, 2011 - 12 minute read - туризм

Ударим троплением по отсутствию снегоуборочной техники!

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

Подкатом краткие ремарки…

Новая 2011 года - года Великий Воробей

Слово “насяльника” не дописываю, хотя рука поднимается :) Но по сути: так, только так и никак иначе!

Новый год встретили на хребте Большой Воробей (в распадке между непосредственно вершиной г.Туманная и безымянной вершинкой, на которой располагается бывшая метеостанция). Банда подобралась изумительная: сразу куча новых знакомых, и, главное - отличных ребят: Саня (Квазик или Квазикака), Димка (МРО), Олеся (Рыжая), ещё один Дима, Коля (Live), Оля, её парень - Андрей (обобщенно: альпинюги!), Саня Вишневский (местный “любимчик”). Не могу не упомянуть и о нашем “новогоднем чуде” - Антохе, который теперь даже пьяный будет туриков за версту обходить =-)

Вместе пересеклись на форуме у Зелёного, большая часть ребят оказалась из Гринтура, туда же и меня начала затягивать трясина :)

Подробно не буду описывать, ибо это в прекрасной юмористической форме изложила Рыжая в своём отчёте, ссылку на который я уже давал в одном из своих прошлых постов

Небольшим дополнением: это образование интересных и забавных мемов (устойчивых выражений): новогоднее чудо - как окрестили Антоху, МРО - Молодой Растущий Организм - эт про Димку, ибо вечно голоден (хотя и тощ) :)

Кроме того, произошол и мини-обмен опытом: мне объяснили как правильно тропить, а я показал свой способ организации очага из верёвки и палок (что бы не таскать лишнего, если отправляемся в лес). В остальном - болтали, вязали узлы, травили байки и просто прекрасно проводили время.

Январские обгонялки догонялки

Ешё празднуя НГ на Великая Воробья, Квазик начал агитировать меня на участие в сим мероприятии. И таки сбил с бухты барахты: мол там никто не побежит, все пойдут, тусовка, всё такое… Ну я и повёлся :)

А мероприятие проходило 15 января, за неделю до это отпраздновал свой ДР - стукнуло 27, почесал затылок и решил: еду!

Утро. 7.10. Жду электричку на перроне. Прохладно, однако.

По, как мне сказали, традиции, прыгаю в 3й вагон с конца электрички и… обана: вижу Колю (Live) и Вишневского. А ведь Коля собирался в тайгу, на мой вопрос отвечает коротко, но ёмко: холодно!

В Артем-ГРЭС нашу компанию разбавляет Олеся с горными лыжами - собирается на л.б.Грибановка кататься. В таком составе и катимся дальше (Квазик тем временем едет туда же, но на машине, а Оля уже на трассе “траверс”: так и собрался опять почти весь новогодний состав!).

Приехали в Анисимовку: морозец -25 (кто-то говорил и про -27, но не сильно суть), ветра нет, но кто сказал, что его на верху не будет. Ещё и Фалаза кажется в два раза выше - от жеж у страха глазики велики, нннно - хоть и на 4WD, но доползу! :) Кто-то делает робкие заявления - мол может скинуться и на машине, но смело отметаем эти малодушные заявления и топаем до базы своими двумя.

По дороге изымаю у Олеси лыжи, после того как она навернулась на скользком накате. Какие же они тяжеленные! Тем временем то мы обгоняем, то нас обгоняют группы и группки таких же отморозков, в поисках зимней свежести. На самом подходе к нашей цели, добрая женщина на чём-то джипо-паркетно-подобном говорит мне (ну а кому же ещё: лыжи на плечах!) мол, а в Грибановке подъемник не работает. Овечаю, в духе: эта типа, а мы этого, не того, не кататься, мы - бегать. Интересно, что у неё творилось в голове после такого ответа? :) Саня Вишневский ворчит по дороге: “не честно, мы тут лишние 5-6 км накручивает, а кто-то там с вечера/на машине”. Оправдываю это “безобразие” разминкой, а чем не похоже?

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

Далее всё быстро: новые знакомства, перекус, старт.

В 12.20-12.25 стартанули… Ога как же, пошли все - ЛОМАНУЛИСЬ как лоси, ну и я, в лучших традициях классики (вспоминая “Джентльменов удачи”): все побежали и я побежал! Но с моей дыхалочкой долго это не продолжалось: перешёл на шаг, да и на подъёме было тяжко, но ничего, я сюда за впечатлениями, по дороге фотографировал пейзажи (особенно красиво стало когда вышел на гребень, хотя там был и сильнейший ветерок и конкретный минусок) и обгоняющих меня девчат (разнесён старт на 10 минут был).

Но мы как трактора, медленно, но верно дотелепался: сначала до хребтика, потом, как казалось, обдуваемый всем ветрами, до главной вершины Фалазы, а там… Как только увидел крест, вдруг что-то внутри как-то резко оборвалось и таааааааааааак захотелось есть, что хоть стой, хоть падай. Сразу всплыли мысли о мороженных бутербродах и термосе с чаем в рюкзачке, и что-то как-то более резво получилось добраться до Креста, там и потратил часть времени на перемалывание бутерброда и шлифовку его чаем.

Тут и началась самая интересная часть маршрута: жопогорки или Фалаза Бобслей-2011. Поясню: спуск по северо-восточному (да ровно как и подъем) - достаточно крутой… И меня сразу удивила форма тропы: ровный такой полукруг. Пытался сначала бежать по нему, хватаясь за деревья, но в один момент упал на пятую точку и… тут я ВСЁ понял: и почему форма тропы такая, и как по ней нужно спускаться! :) В общем, никогда я так быстро с Фалазы не спускался.

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

Пару последних рывков и я, абсолютно первый с конца, на финише: чуть не умерший, с, как примороженной, улыбкой на морде лица и, в общем, довольный как слон.

Зелёный (к моменту моего прибытия) уже прибежал с траверса, и вообще они там молодцы, слоны: за 7 часов с минутами уделали маршрут от Лукьяновки (ж/д платформы, если быть точнее) до Пидана, по Ливадийскому хребту на Фалазу и вниз на Грибановку. Скоро прибежала и Оля (“альпинюги!”), заморозила себе палец на ноге: ехала потом в электричке (мама?) отогревала. Но, вроде, всё нормальное уже.

Подождали последних, завершающих кольцо, девушек, чай, награждения, вручения, поздравления. Пообщался с Надей: заполучила 3е место, 1е и 2е - её подруги Настя (1) и Саша (2, ориентировщица).

Вовка (с кем Квазик ехал на машине) подбросил на машине до станции, там отогревались в магазине, из которого нас любезно не выгоняла продавщица, даже спрашивала что где как, когда искали куда выбросить мусор, предложила ведро, в общем - хорошим людям вива!

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

Зимняя Коврижка

<WRAP center round box 80%> Краткий исторический очерк

Остров Скребцова, в народе - Коврижка, небольшой островок в Амурском заливе, километрах в 2х от берега. Назван в 1863 году в честь М.Л.Скребцова, учавствовавшего в гидрографических исследованиях залива Петра Великого. В 1890 на острове был лагерный пункт для Сахалинских каторжников, отправляемых в приморье для ударной работы, но вскоре был ликвидирован, как экономически не выгодный и транспортно неудобный. Во время ВОВ на острове были огороды (думаю правда что один большой). В 1961 в ходе раскопок на острове были найдены следы стоянки древних людей. Сейчас остров необитаем, кроме забегающих туристов. Коренное население: два дерева, геодезический пункт и мыши-полевки (весь островок изрезан ихними ходами).

Сагитировала Надя Юрова, кто-то собирался ещё идти, но в результате стойких оказалось двое (плюс один дезинформированный… каюсь, Чайки во Владивостоке две).

В рюкзачках термос, бутерброды. Протопали по льду минут за 30-40 от Чайки и были уже на островке. Фотоаппарат забыл.

Погода теплая. С островка симпатичный вид на Владивосток со стороны: весь укутан в синей дымке выхлопов и влажности.

В яме на острове оставили рюкзачки, разложили бутерброды, достали термосы. Поднялись на насыпь… Тут, отхлебывая чай, краем глаза замечаю первого коренного жителя острова - полевка, шухерно, но верно продвигается к нашим бутербродам, а за ней и вторая показалась. Э неееет! Без проса есть нельзя! Спускаемся, рюкзаки оставшиеся внизу забираем, мышам оставляем бутерброд.

Потом забавно: отхлебываешь чай - мышь пробегает. Я уж было подумал - что же я такого там заварил? :) Но в скором времени сыр был, как им казалось, сворован и утащен в нору. Ещё немного постояли и отправились обратно на электричку.

А “пингвинов” в заливе… тьма тараканья!

В январе, в тайгу, что бы принять ванну!?

Да-да-да, именно так :) Это мы на прошедших выходных сгоняли на термальные источники на ключе Горячий, что в Лозовском районе, нашего родного приморья.

Предыстория: Зелёному нужно по работе в Лазо, в радиусе 20км он может сделать заброску. В среду, в клубе, по принципу: один сказал, остальные не возражали, выбрали конечной целью - термальный источник. Назначили завпродом, начпоха, распределили кому тащить палатку, кому печку для неё, пилы и т.п., прикинули меню и раскладку. Прозевал электричку, остался ночевать в клубе, как и Олеся.

В общем, опять суббота, договорились, что меня подберут на Подгородинке в 7.20 (получилось позже, но замерзнуть не успел). В машине старые и новые лица (помимо тех, что планировались изначально): Саня Коломеец с Зелёным едет по делам, с нами - Настя (ориентировщица, как сказал Квазик: “Её беречь! Она в будет в моей команде на Ковалеровской!”). В районе Арем-ГРЭС тем же образом подбираем Олесю и двигаем дальше, до следующей, главной цели: ШПЦ (Шкотовский Пирожковый Центр), дабы восполнить потраченные калории на ржач в машине.

Но вот, ШПЦ оставлен позади, наглому барбосу скормлена соска в тесте, едем, болтаем, смеёмся. Так и миновали Новую Москву, перевал Серебряный, Сергеевку, Монакино, Лазовский перевал, Лазо, Беневское и… вот посёлок Свободный: десантируемся, рюкзаки, как обычно, с мерзким хихиканием запрыгивают нам на спины, идём… По дороге, переодеваясь (снял куртку), чуть не оставил какому-то счастливцу в подарок фотоаппарат, пришлось немножко пробежаться за ним и обратно.

До места дошли быстро, ориентиры (проталины на снегу) не подвели, плюс, к ключу первая же дорога, что идет на подъем и ведёт. Жилое помещение уже занято, поздоровались, решили поставить свою палатку в одной из соседних комнат, где пол почище. Оставили ставящих, отправились за дровами. Зелёный пугал, что всё вокруг выпилено, сушняка нет - сушняк есть, много, если правильный подход найти :)

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

Я потом помог девчатам раскопать место для костра (для готовки), домыслил костровые прибамбасы, соорудил костерок, ибо жрать уже начинало хотеться.

Потом скопом и посменно пилили-кололи-таскали дрова для печки. Саня всё твердил, что мало, но на постой дров оказалось больше, чем на Новый год, на две ночи! =-) Правда, как выше писал, и горели они как порох.

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

В ванну в первый день залезла только Олеся.

Но вот и отбой (около 22.40). Вызвался дежурить первым (остальные в порядке лежки по местам). Глаза крайне стремились сомкнуться, но печку держал в полной боевой. Потихоньку заправлялся чаем.

Пока дежурил стал свидетелем забавной сонной ситуации: Саня заливается храпом, рядом Олеся спит. Тут он поворачивается к ней, и так, ласково начинает ей нахрапывать на ушко. Ну, она явно такого не выдержала и таки пнула его в бок. Квазик, как истинный боец сразу подрывается с вопросом мне: “А!? Что случилось!?”. Пришлось ласковым голосом успокаивать, что всё нормально, просто страшный сон, спи :)

Около 00.00 разбудил Димку (МРО), забрался в спальник, который, к слову сказать, оказался не тем, кем представлялся: на чехле High Peak и экстрим до -23, а оказался NovaTour model 450 (экстрим -5, комфорт +10). Но, к слову сказать, было не холодно.

Следующая смена у меня было на утро (7.00). Принял вахту у Сани, расположился. Разогрел и навернул супа, оставшегося с вечера - типа завтрак, немного шлифанул чаем. А у печки тем временем наблюдаю сдувшиеся тюбики от сгущенки, наверное полёвки прокрались и, пока дежурные отвернулись, высосали всё до капли! :laughing:

По окончании, решил уже не ложиться. Опять сдал вахту Димке (МРО), отправился готовить дрова, и распаливать огонь под ванной. Тем временем Дима (№2) так же покинул палатку, занялся разведением огня для готовки, чистку котлов и заправку оных снегом для растопки. Такое мирное трудовое утро.

В том же составе приняли банные процедуры… Это вообще песня: вода сама теплая (27-29 градусов), плюс подогрета (картина: человек сидит в чане, под ним горит костёр… постановка скоро будет :)), а вокруг елки, снег, тайга! =-) В общем, сплошной и безоговорочный кайф.

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

А котлы тем временем всё не хотели закипать, хоть сильно, обильно и усердно парили. Вообще котлы без крышек, особенно зимой - злое зло! Ннно, где наша не пропадала: примерился к одной фанерке - опппа, вот и крышка :) Закипело сразу и мигом. Забабахали борщ “Воробей”, после перекинули “крышку” на котелок под чай. С чаем вышло не без приключений: таки не выдержала фанерка: решилась загореться, но мы на неё не в обиде: дело она своё сделала и нам помогла.

На одном из сеансов связи откликнулся Зелёный: оказывается они уже почти добрались, малость забуксовали, пока спускались на помощь - выбрались. К тому моменту были уже почти все наетые и собранные, для насяльника раскочегарили огонь под ванной с присказкой: Зелёный, давай в ванну, зелени не хватает!

После был обратный путь… Анн нет! Есть такое место на дороге, которое моз мозг ввело в смятение: идёт наезженная колея, а тут ба! переходит в ОДНУ! Ну прям как в фильме в “Зоне особого внимания” (или как-то так):

  1. Тут, бабушка, танки пройдут

  2. Да как же милок, тут же узко!

  3. Да это новые, на одно гусенице!

  4. До чего же техника дошла…

В этом месте нужно было откренивать машину. Зелёный сказал откуда цепляться, я потопал с Саней на это место… Вот только, как оказалось, останавливаться он при этом не собирался. Саня с криком “На абордаж!” пригнул и зацепился, но я, глядя как опасно машина при этом отклонилась по направлению к опрокидыванию, не решился последовать его примеру… А то, дрова есть, ещё бы ночевали =-)

А вот уже дальше уже был обратный путь, легкая грусть на сердце и слипающиеся глаза. А сегодня что-то руки отваливаются, от всех эти дровозаготовительных работ =-)

Jan 25, 2011 - 1 minute read - programming

JAAS in Action

Довелось повозиться с JAAS, для организации управления доступом внутри XML-RPC сервиса (реализованного в виде сервлета, крутящегося внутри Tomcat). В результате поиска хорошей, систематизированной информации, наткнулся на книжку: JAAS in Action ( http://jaasbook.wordpress.com/)

Книжка доступна для свободного скачивания в формате PDF, лицензия - CC.

Как результат, я её крайне рекомендую: содержит всё необходимое для вникание в работу с JAAS, содержит практические примеры, среди которых, к примеру, использование нескольких Policy-источников, показаны примеры для хранения настроек JAAS, аутентификационной (имя пользователь и пароль, группы пользователя) и авторизационной (политики, разрешения) информации в базе (легко разворачивается до использования других хранилищ, к примеру - LDAP). Язык английский, но читается крайне легко.

Другие ссылки, касательно JAAS, можно поглядеть тут.

P.S. эпопею с сервлетом и авторизацией, я ещё опубликую, как только полностью закончу.

Jan 19, 2011 - 1 minute read -

Ejabberd и LDAP

На правах закладки: ejabberd - группы из LDAP на о снове OU - пример реализации. Но без документации даже не начинать читать. Модуль mod_shared_roster_ldap появился только в комплекте ejabberd 2.1.6, если версия младше, как, например, в Debian Squeeze (2.1.5), то качать отсюда: https://alioth.debian.org/projects/ejabberd-msrl, читать документацию, компилять и настраивать.