31 мая 2012

Нечего на зеркало пенять...

По мере того как растет количество народа с которым я пообщался на собеседованиях растет и моя уверенность в правильности следующей мысли:

Корпоративная культура оказывает очень сильное влияние на людей.
Корпоративная культура отфильтровывает людей которые ей подходят, и вследствие этого люди из одной корпорации становятся похожими друг на друга.

Эта мысль может привести к рассуждения вида "Что было в начале - курица или яйцо?" но это не суть данного вопроса.
Суть заключается в том, что наблюдая за человеком на конференции и не зная ничего о предыдущих местах его работы, ты понимаешь, что это не тот человек с которым ты бы работал.
А потом ты узнаешь где он работал - и вот тут все становится на свои места.
Ты начинаешь понимать почему - потому что ты уже сталкивался с корпоративной культурой организации в которой он работал.

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

Сумбурно конечно вышло, но как-то так.



15 мая 2012

VirtualBox - настройка сети

Не у всех есть возможность продуктами VmWare, типа Workstation на законных основаниях.
В этом случае на помощь приходит VirtualBox от Oracle.
Недавно столкнулся с проблемой настройки ВМ на VirtualBox - нужно было сделать так чтобы ВМ могла видеть хост по IP и ходить в интернет через хост.

Теоретически это можно сделать используя один сетевой интерфейс в режиме Виртуальный адаптер хоста  - нужно только поуродоваться с маршрутизацией :).

Но я выбрал другой путь  - добавить два интерфейса на ВМ.
Вот как нужно настроить первый
А вот так второй

Если мне не изменяет память то по умолчанию форвардинг IPv4 трафика на Linux выключен, но у меня все заработало без его включения.
На Debian-подобных Linux его можно включить раскомментарив строчку

net.ipv4.ip_forward=1
в файле /etc/sysctl.conf

Ну и скриншот доказательства работоспособности решения :



Виртуализируйтесь!!!!

14 мая 2012

Запуск тестов под различными окружениями с помощью Maven


Зачастую при запуске тестов необходимо иметь возможность быстро настраивать параметры их запуска, а если говорить еще более приземленно - набор тестов зачастую запускается с испльзованием одной из нескольких конфигураций параметров.
В этом месте каждый становиться кто во что горазд - конфигурационные файлы, переменные окружения, пользовательский ввод, и даже наличие отсустсиве определенных файлов на жестком диске (дадад!!! и такое я тоже видел).
Сказать что конфигурационные файлы  - это плохо - нельзя, очень-таки даже хорошо, вот только переключаться между ними не всегда удобно, особенно если запуск происходит на Continuous Integration сервере.
Один из приемов который я нашел для себя - это создание профиля запуска.
Дальше речь будет идти об использовании Maven, однако не думаю что есть сильно большая разница как это делать используя другие инструменты.

Итак Maven славен тем что имеет возможности управления зависимостями проекта, плагинную архитектуру, свойства и ... профили.
ПРофили свборк в Maven  позволяют переопределять массу всяких свойств в зависимости от указанного профиля.
Подробнее - в документации к самому maven.
Суть предлагаемого мною приема состоит в следующем:
В pom.xml определяется набор свойств, одним из которых является путь к файлу с настройками конфигурации.
В pom.xml определяется ряд профилей, которые переопределяют значение указанного свойства в зависимости от нужд.
Вот так  например

Итого имеем:
ряд файлов конфигураций
Ряд профилей
одно (или сколько вам нужно) конфигурируемых свойств
единый механизм конфигурирования вида
mvn clean install -P

C первого взгляда ничем не лучше того что было в самом начале.
Но.... "набор тестов зачастую запускается с испльзованием одной из нескольких конфигураций параметров." - вот это место и можно зафикировать.
В нашем случае фиксация данного места производится с помощью создания ряда job-ов на сервере CI.
И за полгода у нас их не стало более 10.
Хотя конечно у данного способа есть свои ограничения на примемение.

10 мая 2012

Guava Event Bus или как сохранить мозг

Каждый кто писал Swing-овые или любые другие UI-приложения скорее всего сталкивался с проблемой когда установка галочки на третьем по глубине вложенности модальном окне сильно влияет на ход событий в основном окне.

Проще говоря - ввод пользователя сильно влияет на то как дальше себя будет вести приложение.
Стандартным решением данного вопроса является создание иерархии listener-ов и протаскивание ее через код.

Этот подход работает, однако количество таких классов во времени будет расти, равно как и структурная эрозия кода, создаваемая ими. Можно конечно натянуть на это все DI/IoC - но тогда придется объяснять IoC/DI куда какие listener-ы подсовывать, то есть проблема просто переезжает из одного места в другое.


Лучом надежды, ИМХО, является паттерн Event Bus - одна из моделей реализации паттерна Publisher-Subscriber.

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

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

Получается чуть более аккуратно, но вполне возможно и более "прямо", проще отлаживать.
Это все только мои теоретические прикидки - будет случай попробую на практике.

Ссылки для ознакомления:
http://tomaszdziurko.pl/2012/01/google-guava-eventbus-easy-elegant-publisher-subscriber-cases/
http://codingjunkie.net/guava-eventbus/


03 мая 2012

Ну очень вольный перевод принципов GTD от Бенджамина Франклина


  1. Меньше слов, больше дела.
  2. Не прокрастинируй.
  3. Будь готов к неудачам.
  4. Не противодействуй изменениям.
  5. Двигай дело, а не трясись на месте.
  6. Не путай движение и действие, действие приносит результат, движение приносит усталость.
  7. Разреши себе ошибаться
  8. Быстро используй возможности
  9. Продолжай расти над собой, ты все равно никогда не вырастешь.
  10. Не останавливайся
  11. Знай себя
  12. Не ври самому себе
  13. Не сдавайся
  14. Становись мудрым
Оригинал