Just for Fun фриланс 1 – Первая неделя

Рубрика: Development, Работа | 29 February 2008, 11:17 | Vadim Voituk

… или рассказ о том, как я на 5 дней снова стал фрилансером

Пользуясь отсутствием загруженности по работе, а также почитав немного getafreelancer-daily.ru, решил “поиграться” с фриланcерским сайтом getAFreelancer.com

Первой приятной неожиданностью для меня стало то, что оказывается, у меня уже года так 4 есть аккаунт на этом сайте (остался ещё со времен фрилансерского прошлого) – в результате мой ежемесячный лимит ставок составляет более 60 bid-ов в месяц (для новичков лимит составляет 15 bid-ов в месяц). Такой сюрприз позволил мне не выполнять upgrade до gold-member-а(у которого лимит ставок выше), при этом не чувствовать себя в жестких рамках.
Это же в последствии и сыграло со мной злую шутку, но об этом позже. [Далее...]

jEdit FTP plugin 0.9.4 released

Рубрика: Development, Java | 18 February 2008, 13:49 | Vadim Voituk

Сегодня зарелизил новую (0.9.4) версию FTP-плагина для jEdit.

Изменения:

  1. Добавлена возможность подключения к plain FTP серверам через HTTP-прокси (Bug#1735335)
  2. Исправлена ошибка невозможности изменить неправильно введенный пароль (Bug#1885830)
  3. Рефакторинг и очистка кода

Полный текст анонса доступен на SourceForge.
Вскоре новый релиз должен стать доступным через Plugin Manager, до того же можно загрузить новую версию отсуюда: FTP-0.9.4.jar (65Kb)

Публикации в тему:

  1. jEdit sFTP connection over http proxy
  2. Using jEdit as diff/merge tool
  3. My jEdit plugins

Quick Perforce Guide

Рубрика: Development | 14 February 2008, 16:55 | juriy

On a project that I’m currently working with we’re using perforce as a version control system. I’ve found that mostly team members are having troubles understanding it besides official guide is rather large and information-intensive. So I’ve written a short guide for my team. I guess it will be useful for other people too. So here it is.

Quick Perforce Guide.
Perforce is a powerful and flexible version control system (VCS). Perforce is a commercial product and due to that reason is not spread as widely as Subversion. Nevertheless it’s popular and widely supported in modern IDEs. This guide is Windows-oriented: some details (mostly minor) may vary from platform to platform but general concepts are the same.

This guide assumes that you’re already familiar with concepts of version control and have at least some experience using other VCS like Subversion and CVS.

0. Intro.
The main difference between perforce and CVS/SVN is that perforce stores all meta-information on server. Absolutely everything. No files, except project files will be ever added by perforce to your filesystem. It’s really good: you cannot corrupt anything. It’s a bit bad: you have to stay connected to perforce server to do your work.

[Далее...]

Знак зодиака средствами MySQL

Рубрика: Development, MySQL | 13 February 2008, 13:45 | Vadim Voituk

Что-то давно я ничего про MySQL не писал – буду исправляться.

Часто на развлекательных сайтах приходится приходится “вычислять” знак зодиака пользователя по его дате рождения. Задача решена уже тысячу раз, и интереса не представляет – проверка попадания даты в интервал релизуется на любом популярном языке программирования в 5-7 строк.
А теперь представьте себе, что нужно написать SQL-запрос в MySQL БД, который выбрает из таблицы всех пользователей с определенным знаком зодиака.

Тут на помощь приходит оператор CASE.
С его использованием запрос, который выводит из таблицы users id-пользователя и его знак зодиака выглядит приблизительно так:
[sql]

SELECT id,
  stat_birth,
  @d:=DAY(FROM_UNIXTIME(stat_birth)) AS stat_birth_day,
  @m:=MONTH(FROM_UNIXTIME(stat_birth)) AS stat_birth_month,
  CASE
    WHEN (@m=3 AND @d>20) OR (@m=4 AND @d<21) THEN 'Oven'
    WHEN (@m=4 AND @d>20) OR (@m=5 AND @d<22) THEN 'Taurus'
    WHEN (@m=5 AND @d>21) OR (@m=6 AND @d<22) THEN 'Gemini'
    WHEN (@m=6 AND @d>21) OR (@m=7 AND @d<23) THEN 'Cancer'
    WHEN (@m=7 AND @d>22) OR (@m=8 AND @d<24) THEN 'Leo'
    WHEN (@m=8 AND @d>23) OR (@m=9 AND @d<24) THEN 'Virgo'
    WHEN (@m=9 AND @d>23) OR (@m=10 AND @d<24) THEN 'Libra'
    WHEN (@m=10 AND @d>23) OR (@m=11 AND @d<23) THEN 'Scorpion'
    WHEN (@m=11 AND @d>22) OR (@m=12 AND @d<22) THEN 'Sagittarius'
    WHEN (@m=12 AND @d>21) OR (@m=1 AND @d<21) THEN 'Capricorn'
    WHEN (@m=1 AND @d>20) OR (@m=2 AND @d<19) THEN 'Aquarius'
    WHEN (@m=2 AND @d>18) OR (@m=3 AND @d<21) THEN 'Fish'
  END AS zodiak
FROM users

[/sql]

По хорошему определение знака зодиака нужно оформить как хранимую процедуру, но в таком случае теряется совместимость с MySQL версий ниже 5-й.

Мы не ищем легких путей…

Рубрика: Development, Java, Юмор | 11 February 2008, 15:44 | Vadim Voituk

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

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

Но только что нашел настолько феноменальную реализацию проверки наличия записи в таблице БД, что удержаться не смог:
Немного упрощенная версия кода, без обработки исключений (это отдельная история!), соединений с БД и тд, все имена, фамилии, явки, изменены, все совпадения с реальными частями кода являются случайностью :)


...
Collection items = new ArrayList();
String sql = "SELECT '1'\n" +
"  FROM ... "; // тут следует большая куча неформатированного sql-кода

pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, this.getId());
pstmt.setInt(2, itemID);
rs = pstmt.executeQuery();

while (rs.next()) {
    items.add(rs.getString(1));
}
...
return !items.isEmpty();

И это наш, родной украинский парень – а вы говорите “индусы, индусы”…

P.S. Для любителей пообсуждать подобные “пЕрлы высоких технологий” существует русскоязычное комьюнити Programming WTF

Глючный Feedburner (крик души)

Рубрика: Development, Java | 7 February 2008, 14:06 | Vadim Voituk

Все не перестаю удивляться, как такой солидный и масштабный проект, как FeedBurner, может быть настолько, не побоюсь этого слова, глючным и нестабильным.
Постоянно донимают “обвалы” серверов, нестабильность AwareAPI, проблемы с кодировками (и это при том что у них все в UTF-8!), сбои пересчетов, потери данных и “отравления” кэша.

Вроде же и Google их купил – а ничего не изменилось – как были те же проблемы, так они и остались.

А с другой стороны – аналогов то и нет :)

Дабы немного привнести в этот пост полезность для читателя, рекомендую для ознакомления несколько ссылок по архитектуре FeedBurner.

Видео со встречи DoU 8.11.2007

Рубрика: Development, Groovy | 2 February 2008, 16:27 | Vadim Voituk

Разгребая архивы RSS-ленты снова наткнулся на видео со встречаи developers.org.ua от 8 октября 2007 г., где я делал доклад о Groovy.
Так и не дождавшись, пока кто-либо выложит его на YouTube – решил сам выложить его на RuTube.
Итого 83 минуты и 234Мб видео в формате flv:

Introduction to Java Persistence API

Рубрика: Development, Java | 30 January 2008, 11:10 | Vadim Voituk

Ранее мне не приходилось в полноценной промышленной разработке использовать различные ORM-фреймворки а-ля iBATIS, Hibernate, Toplink etc.
Все мои познания в них ограничивались “поиграться и бросить” Hibernate & iBATIS.
Сейчас же, в предверии перехода на EJB3, жизнь заставила разобраться с JPA – оттуда и “ростут ноги” этой заметки.

Постараюсь продемонстирировать какой простой и понятной становится задача отображения этого класса на таблицы реляционной БД с ипользованием JPA. [Далее...]

Toplink Essentials on Caucho Resin

Рубрика: Development, Java | 23 January 2008, 15:28 | Vadim Voituk

Опять же себе на заметку, но может кто уже наступал…

Как оказалось, использовать Oracle Toplink Essentials как JPA-провайдер в среде контейнера Resin 3 штатными средствами невозможно.
Такое поведение нарушает требования 0000005.8 и 0000005.9 спецификации “Enterprise JavaBeans 3.0″ (JSR-220).
Хотя тех, кто хоть раз имел дело с Caucho Resin, подобные нарушения спецификаций, наверное, уже давно не удивляют:)

Хочешь-не-хочешь, но на Resin 3, приходится использовать встроенную JPA-имплементацию – Amber.
(с ужасом жду миграции на Resin 3)

Сам же больше дня проигрался с Resin 2.x (ни о каком Abmer-е ещё речи быть не могло) в тщетных попытках подключить к нему Toplink Essentials.
Как не крути, а не хочет Resin видеть persistence.xml.
Самое неприятное было то, что проблема состояла в наличии файла ejb-30.jar из поставки Resin 3.x в lib-директории Resin 2.x (невесть откуда он там взялся!).
Так вот в этом самом ejb-30.jar находилась собственная реализация класса javax.persistence.Persistence, которая о Toplink-е ничего знать не знала.

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

Eclipse subversion over proxy

Рубрика: Development | 17 January 2008, 13:24 | Vadim Voituk

Себе на заметку…

Дабы заставить Subclipse работать поверх HTTP-прокси, необходимо после установки дописать такое:
[global]
http-proxy-host = proxy1.some-domain-name.com
http-proxy-port = 80
http-proxy-username = blah
http-proxy-password = doubleblah
http-timeout = 60

в файле “C:\Documents and Settings\<username>\Application Data\Subversion\servers”