30 June 2013

Automated ExtJS application testing with nodejs and jsdom during maven build.

Hi there! I believe the post will be helpful for developers who want to test a complex ExtJS application (source code available). I work on a project where the front-end part is a complex ExtJS application. It is a very rich web application which generates a lot of grids, forms and dialogs automatically. Custom managers and utility classes work on top of ExtJS framework. We use ExtJS models which are generated from Java classes (back-end is a java application) automatically. So, the problem was to write tests for this complex ExtJS application. There are very few approaches I’ve found in Internet about testing ExtJS applications. Basically, only two: 

  • Siesta is a commercial product and the license costs $500 (the “Lite” version is free, but it allows only to run “tests in-browser”, no command-line support).
  • Actually, Jasmine is OK, but as any Javascript testing frameworks, it supports a limited version of ExtJS: ext-debug.js. It means that you can’t fully test all your application code, especially if you have a really complex application which overrides some of ExtJS base classes. 

Long story short: this post is about testing automatically (during maven build) your ExtJS application using ext-all-common.js (full* uncut version of ExtJS library, which you use in your real application). The idea came to me after investigating NodeJS project. So, the idea is pretty simple: we can start NodeJS from command line during maven build. We can emulate browser with jsdom project, we can initialize ExtJS library on emulated browser the same way we initialize it in real browser when we start our real application. The benefit of this approach is that you have fully functional ExtJS library and the whole power of NodeJS (of course, including assertions - you can test your application using default nodejs “assert” module). Here is the code. (I can’t show you all my code as the project I work on is commercial). Let’s start from maven configuration: 1) You should have a nodejs executable file, so please ensure that you’ve included next plugin to your pom.xml file:
<!-- Extract NodeJS executable in TARGET -->
<plugin>
    <groupId>com.github.skwakman.nodejs-maven-plugin</groupId>
    <artifactId>nodejs-maven-plugin</artifactId>
    <version>1.0.3</version>
    <executions>
        <execution>
            <phase>verify</phase> <!-- or whichever phase you need -->
            <goals>
                <goal>extract</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- target directory for node binaries -->
        <targetDirectory>
            ${basedir}/target/nodejs/
        </targetDirectory>
    </configuration>
</plugin>
2) As nodejs binaries are platform dependent, you should add several profiles:
<profiles>
    <profile>
        <id>nodejs-windows</id>
        <activation>
            <os>
                <family>windows</family>
            </os>
        </activation>
        <properties>
            <node.executable>node.exe</node.executable>
        </properties>
    </profile>
    <profile>
        <id>nodejs-mac</id>
        <activation>
            <os>
                <family>mac</family>
            </os>
        </activation>
        <properties>
            <node.executable>node</node.executable>
        </properties>
    </profile>
    <profile>
        <id>nodejs-unix</id>
        <activation>
            <os>
                <family>unix</family>
            </os>
        </activation>
        <properties>
            <node.executable>node</node.executable>
        </properties>
    </profile>
</profiles>
3) And after that you can run your nodejs script:
<!-- Run NodeJS Script as a part of verification process -->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <phase>verify</phase> <!-- or whichever phase you need -->
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <executable>${basedir}/target/nodejs/${node.executable}</executable> <!-- depends on platform -->
        <workingDirectory>./</workingDirectory>
        <arguments>
            <argument>${basedir}/src/test/nodejs/ApplicationTest.js</argument>
        </arguments>
    </configuration>
</plugin>
The whole architecture looks the next way:
You can download a sample project to take a look at code and find out how it works. Please, find the ZIP archive here. To run the code, please unzip the archive, go to root folder and type in console (don't forget to install nodejs before running the sample code as is doesn't contain maven build):
> node ./nodejs/ApplicationTest.js
You should see something like this. * There is only 1 dirty hack which I had to make in ext-all-common.js file :-( It is because of jsdom: html element doesn't support getBoundingClientRect() method. So, I had to add try-catch block (see in code). If you will find a better way how to fix it, please let me know. For now it looks the next way:
/**
 * asolodovnicov >> fix getBoundingClientRect for element
 */
try {
    box = el.getBoundingClientRect();
} catch(e) {
    box = { top : el.offsetTop, left : el.offsetLeft }
};

03 September 2011

BPMN 2.0 overview

    На днях делал небольшую презентацию по BPMN 2.0, которая вышла в начале этого года и решает много проблема предыдущей версии (v1.2). Надо признать: три года не прошли впустую! OMG проделала хорошую работу и теперь BPMN стала настолько привлекательной, что даже jBPM с версии 5 перешли со своего JPDL на BPMN 2.0. Демо, к сожалению, я не записывал, но ссылки на скринкасты с jBPM 5.1 можно легко найти в документации. Плюс еще я показал демо с BPM системой Activiti, у которой есть возможность интегрироваться с замечательным фреймворком Apache Camel.
    Спецификацию BPMN 2.0 я прочитал полностью и могу смело заявить: BPMN 2.0 это круто! К сожалению, открытой полной реализации (здесь я подразумеваю вместе с движком, который бы исполнял нарисованную диаграмму) я еще не нашел, но уже есть достаточный набор компонентов, чтобы рисовать и запускать довольно сложные бизнес-процессы (а то, что еще не реализовано, предлагается заменять кастомными компонентами на основе имеющихся). Особенно порадовал догожданный Human Task. JBoss, например, предлагает возможность использовать в jBPM любую имплементацию Human Task'а, которая соответствует спецификации WS-HT.
    Если есть такие люди, кто знает более хорошие движки для BPMN 2.0 - пишите комментарии. Буду очень рад о таких реализациях узнать и попробовать их!

15 August 2011

Велопробег Кишинев-Одесса

    Ура! Запланированная еще в прошлом году поездка на велосипедах из Кишинева в Одессу успешно осуществилась!

    Мы с Витей 12го августа, в пятницу вечером, все-таки сели на велосипеды и выдвинулись в сторону Одессы. Итого получилось от старта до финиша 200 км. Из них первые 150 прошли довольно легко (мы даже удивились как это мы "прочесали" 150 км, а все так хорошо и приятно). Но в связи с не сильно мягкими седлами и нашими чакрами, не сильно привыкшими к таким длительным сотрясениям, оставшиеся 50 км прошли не так беззаботно. Тем не менее, средняя скорость 21 км/ч, общее время в пути: 11 часов (вместе с отдыхами, перекусами и кофе на Молдавско-Украинской границе), наши довольные лица на фоне прохладного (но очень чистого) Одесского моря и полные карманы ощущений.

    Для тех, кто пожелает повторить: GPS трэк прилагается; дорога практически пустая, отремонтированный участок между Тирасполем и Кучурганами с обновленной разметкой круче, чем в Европе (Ай да Приднестровье! Ай да молодцы!); в отличии от прошлого года, на границе совсем нет очереди.

29 June 2011

Пирин 2011

С 18 по 26 июня 2011 года группа бравых молдавских туристов сходила в поход в Пиринские горы, Болгария. Отличная погода, красивые виды и замечательные воспоминания! Всем рекомендую ;-) Смотрим видео в HD и наслаждаемся!

10 May 2011

Приключенческая гонка FERRINO EXTREME MARATHON 2011

    Пока что самым крупным приключением этого года стало мое участие в приключенческой мультиспортивной экспедиционной гонке Феррино Экстрим Марафон 2011. Это стадийная гонка без суппортов с общим контрольным временем 80 часов (включая время отдыха) и дистанцией около 300 км. К слову сказать, одна из самых крупных мультиспортивных гонок СНГ и самая крупная в Украине.
    Итак, начнем с начала. Во вторник мы с Куртовым Сашей выехали в Одессу, закупили на Привозе нужных продуктов, покатались по городу, посмотрели на море и сели вечером в поезд Одесса-Симферополь. В среду мы без особых приключений добрались до места старта - базы отдыха "Отважный", попутно купив в Симферополе обратные билеты до Одессы. Днем мы разделили еду на каждый день и прикинули что будет в нашем бауле: один командный баул объемом не более 100 литров и весом не более 40 кг перевозился судьями на машине в каждый следующий пункт завершения очередного этапа (этот пункт называется TA - Transition Area). Вечером в среду, 4 мая, мы успешно прошли проверку обязательного снаряжения, зарегестрировались, получили чипы iButtonSport для взятия контрольных пунктов на дистанции и карты. Всего дистанция состояла из 4 этапов. Старт 2го и 3го этапов был оговорен. То есть в случае, если придти на финиш этих этапов раньше, можно было поесть и поспать, получив доступ к своему баулу. Старт 4го этапа не был оговорен, то есть между 3 и 4 этапом можно не спать, а можно спать, при этом время сна идет в общий зачет бегового времени. Этим же вечером прошел брифинг, где обсуждались вопросы относительно некоторых изменений и неясностей в карте. После этого мы с Сашей успешно забили все КП в GPS (Ах! Этот чудо аппарат спасал нас не раз!) и легли спать.
    Еще надо отметить, что на всех этапах были обязательные КП, за невзятие которых снимали с дистанции, и бонусные, за которые только давали штрафные минуты.
    Старт первого этапа был дан в четверг, 5 мая, в 9 утра. Он был общий, то есть все 24 команды разом стартанули. Чтобы не было неразберихи на первых этапах, в начале был Пролог - короткое ориентирование, где команды немного растянулись. После ориентирования был небольшой техэтап - надо было поднять свой баул на высоту около 8 метров и подвесить карабином за петлю на дереве. Далее начиналось самое интересное...
    Первый этап - это 18 км на велосипеде, 22 км треккинг и еще 53 км на велосипеде. При этом надо было не просто ехать и ходить, а параллельно ориентироваться, брать контрольные пункты. Дорога заачстую была не асфальтированная или же ее не было вовсе, что значительно осложняло передвижение. В этот день я понял, что все мои тренировки имели ровным счетом нулевой эффект. Одно дело - бегать налегке в сухой обуви по асфальту или тропинкам, другое - ходить по крутым каменистым или сыпучим склонам вверх, вниз и траверсом, когда обувь насквозь промокла и за спиной рюкзачок. Ноги сбились в первый же день, несколько больших мазолей на ступнях натерлись и лопнули. Лейкопластырь не помогал - все было мокрое и он легко отклеивался. Кроме того, в первый день у нас неожиданно кончилась вода посреди треккинга и у меня было небольшое обезвоживание, от которого мне было не просто тяжело, а очень даже плохо. Это был, наверное, самый тяжелый момент гонки, когда я сел на склоне и сказал Саше, что если мы не пропустим 4 бонусных КП, которые были совсем рядом, и не пойдем к роднику, то я вообще не сдвинусь с места. Состояние было ужасное и я решительно собрался сходить с дистанции. Здоровье всегда дороже :-) Этот мой поступок в результате дал нам огромное количество штрафных минут и по результатам первого дня мы оказались в конце списка с огромным отрывом по штрафным очкам. Приехали мы в ТА уже утром, в 6 часов. То есть 21 час мы пробыли в пути. За полчаса мы поставили палатку, сварили кашу, съели ее с тушенкой и легли спать. Решили спать 5 часов, а потом подумать стоит ли идти дальше. Саша немного похрапел, а у меня спать совсем не получилось. Организм был напряжен и совсем не хотел засыпать. Через полтора часа, в 8 утра начались старты команд. В этот раз команды стартовали по порядку, начиная от лидера 1го этапа. Судьи сказали, что команды, которые не сдадут баул до 8-30 будут сняты с дистанции и будут тащить его сами на место старта. Такая перспектива нас совсем не привлекла и, подумав немного, мы все-таки собрали быстренько баул, сдали его судьям и выехали на 2 этап.
    Второй этап начался весело. Предстоял вело 31 км, треккинг 9 км, снова вело 12 км, снова треккинг 10 км и завершающий вело 28 км. Было утро, спать совсем не хотелось, но мы прекрасно понимали, что вечером нас начнет просто валить с ног. Поэтому на 2ом этапе мы решили не брать ни одного бонусного КП кроме тех, которые попадались на пути от одного обязательного КП до другого. Весь второй день моросил дождь, все дороги представляли из себя полосы взякой грязи. Впервые я столкнулся с ситуацией, когда колеса велосипеда не крутились из-за того, что на них налипал огромнейший грязевой ком и никак не хотел отваливаться. Приходилось чистить палочкой. Потом нашелся выход: я просто развел тормоза и когда колеса в очередной раз застревали в грязи, подкидывал повыше велосипед. От удара об землю грязевой ком распадался и появлялась возможность продолжать движение. Оба треккинга были линией скрытых КП. То есть на карте рисуется линия вдоль которой надо идти и искать все встречающиеся КП. Первая линия СКП шла по небольшому ущелью вдоль реки. Примечателен этот треккинг был только тем, что я упал на последнем КП в водопад и намочил себе штаны и нижнюю часть флисовой куртки. Это было не приятно. Ко второму треккингу мы подошли, когда стемнело. Он шел вдоль шлубокого каменистого ущелья, внизу текла река со множеством мелких водопадов. Здесь было много веревок: несколько спусков дюльфером, переправа. Спуски были такие, что боковые вертикальные каменные стены не давали другой возможности, кроме как намочить ноги, спускаясь прямо по водопадам. Взяв последнее КП, мы поняли, что теперь надо выбираться. Склон был очень крутой и приходилось лезть вверх, работая всеми четырьмя конечностями. Далее у нас была массовая галюцинация! Нам нужно было спуститься сверху в овраг и подняться по другой его стороне, чтобы выйти на тропинку и дойти до велосипедов. Была ночь, темно и в свете фонаря противоположный склон оврага казался большой каменной стеной, практически вертикальной. Из-за этого мы долго искали другой путь и потеряли время. Потом все же решили довериться GPSу и вышли на дорогу как надо. Оказалось, что каменной стены не было, а весь склон был простой "зеленкой" - он зарос кустами и деревьями. Кстати, надо отметить, что за все время гонки мы изрядно порвали и испачкали всю одежду, которорая на нас была. Особенно жаль термобелье :-) Кроме того, на втором треккинге у меня жутко болели ступни. От воды кожа расширилась, появились складки, в них забилась грязь, которую не было никакой возможности вычистить. Все это очень болело и каждый шаг был как по битому стеклу. Тут я решил, что это уж точно последний этап, потому что ходить так - это ад! В итоге, добравшись до велосипедов мы доехали к очередному ТА. Стоянка после 2го этапа была на берегу моря. По итогам второго этапа мы уже были на 19 месте. Оказалось, что мы набрали очень мало штрафов. Плюс несколько команд сошли с дистанции после первого этапа. Нас все еще тяготили штрафы первого дня.
    Утром я понял, что ноги немного прошли, теперь я могу ходить и боль вполне терпима. В это утро началась моя "эволюция": я растолкал Куртова и сказал, что надо собирать баул! Речи о том чтобы сойти с дистанции уже не было. В этот день предстояли треккинг 7 км, вело 25 км, второй треккинг 10 км и второй вело 13 км. Так как мы опаздывали по времени с баулом, то позавтракать не получилось. Пришлось вылись кипящую воду, палатку запихивали в баул, не собрав, вещи забрасывались в произвольном порядке. В результате, вышли на третий этап голодные, но довольные, что удалось поспать 4 часа... Третий этап прошел довольно легко и без приключений. Погода в этот день была довольно ясная, днем светило солнце, облачка были редкими. БОльшая часть вело трассы шла по асфальтированным дорогам. И (О, чудо!) на третий день мы наконец-то научились ориентироваться! Выходили на КП довольно точно, не терялись и не тратили лишнего времени. Я еще не видел итоги 3 и 4 этапа, но они должны быть у нас хорошими и, думаю, мы должны оказаться где-то в середине списка по итогам всей гонки. Итак, 3ий этап мы закончили засветло, ТА был на старте. Здесь моя "эволюция" продолжилась: Саша Куртов спросил меня что будем делать дальше: отдыхать или нет? Я предложил идти без отдыха. В принципе, сил хватало, было еще светло, а 4ый этап состоял всего лишь из одного треккинга, без велосипедов.
    Итак, мы вышли на финальный четвертый этап! Небывалое дело: выйдя вечером на треккинг, мы засветло успели взять 2 КП и выйти на подъем, ведущий к третьему! Шли довольно уверенно и весело. Единственное, по дороге к последнему КП я начал совсем засыпать на ходу и пришлось зарядиться энергетиком. Куртов чувствовал себя хорошо и пожертвовал один свой энергетик мне. Он сэкономил его на 3ем этапе. После он долго рассказывал про чудодейственную силу энергетиков. Говорит, я на глазах превратился из засыпающего человека в машину. Действительно, мне стало очень легко подниматься и я еле удерживался, чтобы не побежать на последний подъем. Последнее КП было с техническим этапом. Надо было спуститься дюльфером метров 30-40 и идти к финишу. На этом КП судья сказала нам, что еще как минимум одна команда сошла: на одном из бонусных КП, которое мы пропустили, был технический этап. Там один из участников неправильно перестегнулся и упал, пролетев вниз головой метров 20. К счастью, никаких серьезных повреждений он не получил: шлем раскололся и успешно выполнил свою миссию по спасению головы хозяина.
Прибежав на финиш, мы разбудили судей, отметились и быстренько пошли спать. Разложили палатку, поели и уснули мертвым сном. События следующего дня не так интересны: к нам приехали Саша Шашоркина и Марина Микитенко, которые поехали на недельку отдохнуть в Крым. И в последний день мы собирались, отдыхали, болтали, мыли велосипеды, приходили в чувство.
    Итог сей гонки таков: узнал много нового о мультиспорте, много интересного и неожиданного открыл в себе, почувствовал что такое действительно экстримальные условия.

    Время от времени я экономил батарейки и выключал GPS. Но итоговый трек выглядит примерно так:


    Организаторы вывесили таблицу итоговых результатов. Как видно, с учетом штрафов, из 24 команд в 1 день мы зяняли 24 место, во 2 день - 16, в третий 17. Итоговое место с учетом штрафов - 16. Ура! :-)

PS - Хочу сказать большое СПАСИБО Куртову Саше! Если бы он меня не поддерживал и не пинал иногда, наверное, я бы сдался еще в первый день. Он просто монстр :-)
PPS - Также огромное спасибо организаторам гонки! Проделать такую огромную работу по организации столь сложного мероприятия - большой труд!!!

31 December 2010

2011! Happy New Year!

Вот и подошел к концу 2010ый год, друзья!
В нем было много трудностей, которые смело преодолевались, много маленьких побед и поражений... В общем, прошел еще один год нашей с вами жизни. В Новом 2011ом году мы все стали взрослее, умнее, опытнее, мы веселы, сильны и готовы к новым жизненным трудностям! Они не пугают нас, и мы идем по жизни, смеясь, навстречу своей судьбе и своим приключениям! А приключения - интересные, неожиданные, разные - уже ждут нас в Новом Году. Хочу пожелать всем в наступающем 2011ом году успехов, полноты реализации своих творческих способностей, крепкого здоровья, добрых друзей вокруг и благополучия во всем! 2011ый год - год Кролика.
Я поднимаю свой бокал за то, чтобы в этом году господин Кролик был с нами, и все мы имели возможность посмотреть "на сколько глубока кроличья нора".

С НОВЫМ 2011 ГОДОМ! Ура!

14 December 2010

Рисовалки для диаграмм.

Всем привет. Для людей разных специальностей (в особенности, связанных с айти) рано или поздно встает вопрос о выборе инструмента для рисования диаграмм. Диаграммы бывают разные: кому-то нужно Activity в UML, кто-то рисует процессы в BPMN, кому-то надо просто и, желательно, красиво нарисовать архитектуру системы...
Конечно, идеального инструмента нет, и вкусы у всех разные. Этот пост не для того чтобы обсуждать минусы и плюсы рисовалок. Я предлагаю здесь поделиться хорошим инструментом для рисования диаграмм и написать для каких именно диаграмм он хорош. Если, конечно, у Вас есть такая информация :-)

Со своей стороны, хочу отметить такую рисовалку как BizAgi Modeller для BPMN диаграмм. Я пользуюсь ей время от времени. Очень удобная, простая, быстрая, красивая, бесплатная. Большой недостаток- отсутствие допольнительных компонентов, поэтому область применения этого моделлера очень ограничена.

Недавно нашел для себя неплохую рисовалку yEd Graph Editor от yWorks. Бесплатная, довольно удобная. С возможностью расширить компоненты. В стандартной палитре есть UML, BPMN, Flowchart и другие компоненты. Мне эта рисовалка очень понравилась, рекомендую. Мне надо было показать как будет выглядеть новая функциональность в модуле так чтобы наши QA это быстро и легко поняли. Вот что получилось:


PS - Как я уже говорил, нет идеального инструмента... Так давайте делиться опытом! Кто чем пользуется? ;-)

03 November 2010

Впечатления о США.

Привет всем! Вот я наконец-то и решился написать свои впечатления о США. Разумеется, мои впечатления не отражают всей объективной ситуации в стране и даже в штате. Тем не менее...
Наверное, надо начать с того что живу я в небольшом городке под названием Бельвью (Bellevue). Город довольно молодой, основан в 1989 году. Население не превышает 150 тысяч. При этом центр города является вторым по величине во всем штате. В центре города живет около 5 тысяч человек и работает около 35 тысяч. То есть в центре города сконцентрированы все небоскребы и бизнес-центры, а в остальных частях города дома не выше трех этажей. Вообще я заметил, что американцы не любят строить высокие здания и не любят жить в квартирах. Поэтому абсолютное большинство людей тут живет в 1-2 этажных частных домах. Так же у каждого есть гараж или хотя бы навес для машины. Машина здесь- обязательный атрибут. Расстояния от дома до магазинов, фитнес-центров и работы обычно существенное. С учетом низкой стоимости бензина, машину иметь очень практично и выгодно. При этом очень мало кто вообще ходит пешком. Первую неделю я очень сильно удивлялся пустым улицам. Встретить человека, прогуливающегося пешком в Бельвью, это большая редкость! Кстати, в Бельвью практически нет преступности, нет черных кварталов, мексиканских группировок и тому подобного. Говорят, что в Бельвью живет только элита. В основном это сотрудники средних и крупных компаний, которые находятся в центре города. К слову, в соседнем Сиэттле (Seattle) дела обстоят иначе и жизнь там гораздо больше похожа на жизнь большого города. Но все большие города более или менее одинаковы и, думаю, не стоит заострять внимание на Сиэттле.
Несколько слов обязательно надо сказать про дороги. Все дороги очень ровные, все водители в Бельвью очень аккуратные и вежливые. Все уступают друг другу дорогу. Отлично относятся к велосипедистам (боюсь привыкнуть). Велосипедист тут - полноценный участник дорожного движения. Водители всегда пропускают, стараются объехать. Велосипедист здесь может быть на 100% уверен что его не собьют сзади, даже если он перестраивается из крайнего правого ряда в крайний левый. Это очень приятно. Есть здесь на дорогах интересное правило. Из правого ряда можно поворачивать направо даже на красный свет, если при этом ты никому не мешаешь. Кстати, все светофоты рассчитаны только на машины. Зеленый для пешехода не загорится, если не нажать на специальную кнопочку. Такими кнопочками оборудован каждый перекресток. На дорогах есть специальная система с датчиками движения. Это сделано для того чтобы автоматически переключать светофоры и побыстрее пропускать машины. Например, вечером система может определить что по данной улице едет машина, и впереди, если больше никого на улице нет, сделать этой машине зеленую полосу, чтобы она поскорее проехала. Это удобно. Еще очень удобно то как американцы пометили тут разделительные полосы. Кроме обычной разметки краской через каждые полтора-два метра встроен светоотражающий элемент. При движении в 35-60 миль яркие светоотражающие элементы видно прекрасно. Кроме того, они несколько возвышаются над уровнем дороги и это гарантирует что водитель не будет заезжать на линию колесом. Обочины часто процарапаны специальными поперечными полосками, которые шумят, если вдруг водитель заезжает на обочину. В общем, на такие дороги нельзя выезжать, если хочется спать. Можно легко заснуть за рулем.
Так как по выходным я обычно езжу в небольшие однодневные походики (они называются здесь хайками, hike), то не могу не рассказать о замечательной американской природе. Недалеко от Бельвью тянутся Каскадные горы. Красота неописуемая! Природа сохраняется по возможности дикой. Американские города тянутся вдоль дорог и, судя по всему, при застройке они стараются как можно меньше трогать леса. Для хайков есть специальные дороги, трэйлы (trails), которые во многих местах укреплены деревьями и камнями. Животные не боятся человека. Например, гуляя в окрестностях Рэйнира, я подходил к косуле метров на 15 и при этом она даже не собиралась убегать. Пеший и горный туризм, а также скалолазание здесь очень развиты. Есть много клубов, отличных скалолазных стенок в зданиях фитнес-комплексов.
Про самих американцев почти ничего не могу сказать, потому что общаюсь с ними только на работе.
Будем считать этот пост моим отчетом по поводу впечатлений от Соединенных Штатов Америки.

12 October 2010

Крым 2010

Сходили в единичку по горному Крыму на недельку с 3 по 10 октября. С погодой нам не повезло- наверху был снег, дождь, ветер и сильный туман. Но в целом поход состоялся: все довольны, никто не заболел, познакомились с замечательной группой туристов из Киева и просто хорошо провели время. Участники сказали что фотографии не отражают реальных погодных условий, поэтому.. смотрим и завидуем! :-)

05 February 2010

JVM Memory Management

Предлагаю вашему вниманию презентацию Кена Сайпа, выступавшего на конференции NFJS с докладом на тему управления памятью виртуальной машиной Java. Здесь можно узнать многое на тему распределения областей памяти для оптимизации работы ява процесса.
Мне было интересно почитать. Я раньше не вдавался в такие подробности.