Just another Zexro tape

Встал и пошел

Опубликовано в рубрике social by levi on Апрель 27th, 2008

Пляжный сезон не за горами. А некоторые приступили уже сейчас:
e.g. \

Умер? Никак нет. Тот же экспонат через 20 минут:

Tagged with:

AspectJ для журналирования

Опубликовано в рубрике langs, programming by levi on Апрель 6th, 2008

Задача: покрутить AOP на как можно более простом примере.

Для этого возьмем:

1) Файл AspectTest.java с подопытным классом


package ajtest;

class AspectTest {
    public void printKrivetko() {
        System.out.println("Я криветко :)");
    }

    public void printMedved() {
        System.out.println("Я медвед 8]");
    }

    public static void main(String[] args) {
        AspectTest app = new AspectTest();
        app.printKrivetko();
        app.printMedved();
    }
}

2) Файл PrintLogging.aj с простым аспектом


package ajtest;

// наш простой аспект
public aspect PrintLogging {

    // наш простой адвайс
    after() returning:
        call(void AspectTest.print*()) {
        System.out.println("^^^ вызыван какой-то метод print*");
    }
}

3) Файл build.xml с несложным проектом


<project name="ajtest" default="ajx" basedir=".">
    <!-- определяем директории для исходников и скомпилированных классов -->
    <property name="src" location="src"/>
    <property name="build" location="build"/>

    <!-- определяем таск iajc -->
    <taskdef
        resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
        <classpath>
            <pathelement location="lib/aspectjtools.jar"/>
        </classpath>
    </taskdef>

    <!-- цель для компиляции основных классов -->
    <target name="compile">
        <javac srcdir="${src}" destdir="${build}"/>
    </target>

    <!-- цель для добавления AOP-функциональности -->
    <target name="ajx" depends="compile">
        <iajc sourceroots="${src}"
              destdir="${build}"
              classpath="lib/aspectjrt.jar"
        />
    </target>
</project>

4) Библиотеки aspectjrt.jar и aspectjtools.jar из последнего стабильного билда.

Все это разложим по директориям:

+ build
+ src
|- + ajtest
   |- AspectTest.java
   |- PrintLogging.aj
+ lib
|- aspectjrt.jar
|- aspectjtools.jar
build.xml


И соберем ant-ом:
ant

Запускаем (сообщения, создаваемые внутри аспекта, отправляются в стандартный вывод):
java -cp build;lib/aspectjrt.jar ajtest.AspectTest

В консоли должно появиться следующее:
Я криветко :)
^^^ вызыван какой-то метод print*
Я медвед 8]
^^^ вызыван какой-то метод print*

It’s working.

Tagged with: , ,

Издевательство с url-pattern

Опубликовано в рубрике programming by levi on Март 23rd, 2008

Привязка сервлета к URL только двумя убогими способами («строка начинается с …» и «строка заканчивается на…») — это по нынешним временам совершеннейшая дичь. Благо, неравнодушные люди озаботились ситуацией и написали rewrite-filter.

Tagged with: ,

Без специалиста не рыпайся ©

Опубликовано в рубрике social by levi on Март 15th, 2008

Намедни захотелось мне почитать что-нибудь из психологии. Пошел, как водится, в ближайший книжный магазин и ну искать по авторам. И что же? Фестингер — шиш. Левин — шиш. Фромм — и тот шиш.

То, что компьютерную литературу книготорговцы подбирают по дизайну обложки, мне было давно известно. Но если механизм справедлив и для книжек по психологии, и если так формируется вообще весь ассортимент, то это повод как минимум принять к сведению тревожный сигнал, почесать репу и начать шевелиться. Найти 3-4-5 человек, сведущих в своей области. Дать им определенные бонусы: безобразно большую скидку, любую бесплатную книгу раз в сколько-нибудь времени. И выяснить у них, наконец, какую литературу нужно возить вместо макулатуры, что собирает пыль на полках магазина.

А можно еще радикальнее — начать самим читать.

Tagged with: ,

Перехожу на Spring Framework

Опубликовано в рубрике programming by levi on Март 7th, 2008

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

Но уже ясно, что легковесными казуальными решениями не обойтись: во-первых, еще никто не может четко представить задачи и сформулировать детальные требования к проектам, во-вторых, как следствие, настанет момент, когда все эти разнородные костыли будет сложно собрать в систему. Отсюда явно следует, что энтерпрайзу нужно предложить энтерпрайзовое решение. В нашем случае, реализацию бизнес-логики в виде бинов внутри Java EE-контейнера.

Чрезмерную сложность Java EE можно отчасти нивелировать внедрением фреймворка, который позволяет программировать бины, не захламляя код формальными конструкциями. На эту роль идеально подходит Spring Framework.

Кроме того, Spring Framework обещает элегантное решение проблем сквозной функциональности (например, журналирования), готовое MVC для веб-компонентов, аутентификацию / авторизацию и многое другое. Поверхностное чтение документации показало, что в центре внимания находятся как раз-таки насущные проблемы, которые много раз возникали в моих проектах. Это подтверждает (надеюсь) правильность выбора. Остается в который раз запастись терпением и глазными каплями — и в бой.

Tagged with: ,

סמכות רוסית

Опубликовано в рубрике langs by levi on Февраль 18th, 2008

Смихута в русском языке формально нет. Но выражения типа “твое день рожденья” подозрительно похожи на что-то сопряженное…

Tagged with:

Бабушка, вы не устали?

Опубликовано в рубрике funny by levi on Февраль 14th, 2008

Любой телефонный звонок из нашей конторы сопровождается интересным эффектом. На протяжении всего разговора среди сторонних шумов слышен тихий трындеж неустановленной пенсионерки. Понятно, что таким образом дают о себе знать прелести аналоговой телефонии. Но, право, позавидуешь пожилой леди, способной работать модемом в режиме 24/7. Нечеловеческой мощи бабуля. Я впечатлен.

Tagged with: ,

Аццкий конструктор IPSec

Опубликовано в рубрике admin by levi on Февраль 13th, 2008

До настройки OpenSwan я думал, что имею представление о Linux-шаманстве. Но это чудо, усыпанное независимыми ручками настройки, тумблерочками и кнопочками, бьет все рекорды. И, что характерно для подобных продуктов, уже отлаженный, рабочий конфиг выглядит настолько очевидным и логичным, что поневоле удивляешься: с чем там можно было бороться столько дней подряд?

Но все закончилось хорошо. IPSec с сертификатами и L2TP-туннель заработали, офисная сеть открылась избранным (roadwarriors).

P.S. Почему у l2tpns нельзя указать локальный IP и как это хозяйство роутить — осталось загадкой. Пришлось ставить обратно l2tpd.

UPD: Судя по рейтингам поста, людей интересует сам конфиг. Исправляю упущение.

Задача: открыть доступ к ресурсам корпоративной сети для сотрудников, которые находятся дома или в командировке.

Подзадача: создать безопасный канал связи между роутером корпоративной сети (внешний адрес, для определенности, 80.80.80.219/29) и компьютером сотрудника.

Листинг /etc/ipsec.conf:


version 2.0

config setup
        nat_traversal=yes                    # для тех, кто за NAT-ом
        interfaces=%defaultroute
        virtual_private=%v4:80.80.80.216/29  # подсеть, в которую входит наш секурный хост

conn %default
        keyingtries=1
        compress=yes
        disablearrivalcheck=no
        authby=rsasig
        leftrsasigkey=%cert
        rightrsasigkey=%cert

conn roadwarrior-l2tp                   # имя соединения произвольное, т.к. соединение
                                        # выбирается опенсваном по параметрам
        left=80.80.80.219               # должен быть в virtual_private
        leftnexthop=80.80.80.217        # инет-роутер подсети
        leftcert=mydomain.ru.pem        # сертификат должен лежать в /etc/ipsec.d/certs
        leftprotoport=17/1701
        right=%any                      # принимаем соединения с любого адреса
        rightsubnet=vhost:%no,%priv
        rightprotoport=17/1701
        pfs=no
        auto=add
        type=transport

include /etc/ipsec.d/examples/no_oe.conf

conn block
        auto=ignore

conn private-or-clear
        auto=ignore

conn clear-or-private
        auto=ignore

conn clear
        auto=ignore

conn packetdefault
        auto=ignore

P. P. S. OpenSwan ничего не знает ни о настройках L2TP, ни о топологии внутренней подсети, к которой предполагается открыть доступ через VPN. Подобные тонкости не фигурируют в ipsec.conf. Применительно к L2TP, задача IPSec только в создании безопасного транспорта между двумя хостами.

Tagged with: , ,

My desktop’s survivor

Опубликовано в рубрике admin by levi on Февраль 5th, 2008

Outpost сломался, Comodo Firewall перепугался, Core Force завис.

Wipfw победил их всех. Пусть даже пакетный. Пусть даже без GUI. Как самый юзабельный.

Tagged with: ,

Спасти рядовых козявочек

Опубликовано в рубрике funny by levi on Февраль 4th, 2008

Полдня играл в миниклиповскую игрушку Scribble. По способности выдумывать затейливую живность разработчики не уступают самому Босху: тут и козявочки (на самом деле это кляксы), которых нужно провести через весь уровень, умудрившись не сжечь и не убить падением со слишком большой высоты, и ходячие груши, и коровы (?) взрывающиеся от приступа клаустрофобии и т.д., и т.п. Управление будто пришло из керлинга: точно так же требуется подправлять движение предметов (козявочек или врагов) и точно так же процесс выглядит совершенно не тривиальным.

Рекомендую.

Tagged with: ,