О компаниях и новых технологиях

Рубрика: Development, Работа | 25 July 2008, 12:40 | Vadim Voituk

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

Но более важным мне кажется то, что верно и обратное утверждение.

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

Невеяно вчерашним постом о том, что Scala постепенно движется в mainstream

Scala everywhere!

Рубрика: Development, Java | 24 July 2008, 20:16 | Vadim Voituk

За последнюю неделю-две встречал упоминания о языке программирования Scala большее количество раз, чем за весь  прошедший год.
Причем упоминания из источников, от которых, как говорится “не ждал, не ожидал”.

Для начала блог об изучении Scala (с классным headline: Learning Scala. The hard way), который ведут инженеры из Twitter. Потом вакансия от Яндекс.Видео.
Между ними массивный поток упоминаний и обсуждений в читаемых мною блогах.

Что это?

Новый прогрессивный тренд?

Мимолетный всплеск общественного  программерского интереса, основанный на ростущей популярности функциональных языков программирования?

Интереса ради: хотели бы вы писать код на функциональном, статически типизируемом языке для JVM? К тому же ещё не самом распостраненном и нифига не нишевом?

Google App Engine: Скоро будет Perl?

Рубрика: Development, Google | 24 July 2008, 10:20 | Vadim Voituk

По неофициальным данным разработчики Google добавляют поддержку Perl в систему хостинга web-приложений Google App Engine, но пока это не является официальным проектом.

Информация “проскочила” в сеть из блога сотрудника Google Brad Fitzpatrick
Но он не является членом команды разработки Google App Engine, и Google пока не обещает поддержку Perl.

Скорее всего на данном этапе это пилотный проект Google из серии “получиться – запустим, не получиться – так и будет”, на котором можно будет достаточно хорошо отработать методику адаптации других языков.

Напомню что Google App Engine поддерживает пока только Python, но компания обещает в скором времени добавить в платформу поддержку ещё нескольких языков программирования, в рейтинге “желаемости массами” которых, Perl занимает 4-е место, уступив при этом Java+Groovy, PHP и Ruby.

Подробнее в блоге Brad Fitzpatrick

Продолжение. Начало читайте снизу вверх отсюда.

В одной из своих заметок о попытке поработать на фриланс-бирже GetAFreelancer, я делился опытом вывода обналичивания средств. Там же в комментариях, читатели делились своими мыслями и советами по “удешевлению” данной процедуры.

Я же в свою очередь хочу поведать ещё один способ, который сегодня волей случая мне довелось попробовать.
Напомню что вывод кровно заработанных тугриков c GetAFreelancer на дебетную карту Payoneer стоит $2 или $5 (в зависимости от срочности). Также при каждой успешной транзакции снимается комиссия $2.15 (при неуспешной – $0.90). Итого как минимум $4.15 прийдется отдать.
Дальше все зависит от курса доллара по отношению к гривне, который на данный момент используется системой MasterCard (последний раз был 4.38грн/$).

Сегодня же попробовал получить наличные в долларах(!!!) в мультивалютном банкомате (оказывается и такие есть!) Приватбанка. Комиссия за снятие – 3% (о чем банкомат честно предупреждает вначале:), но тем не менее все равно получается существенно дешевле чем получать гривны в безкомиссионном банкомате ПУМБ по их варварскому курсу.

Ну а теперь самый главный вопрос – может я чего-то не знаю и изобретаю велосипед?
Кто-то вообще безболезненно деньги с GAF обналичивает?
Moneybookers не предлагать – он с Украиной не работает.

Самый простой генератор паролей

Рубрика: Development, Юмор | 25 June 2008, 22:39 | Vadim Voituk

Цитата:

Работаю в вебконторе, сижу смотрю на девочку-программиста напротив -
она смотрит на монитор и бьёт кулаками по клавиатуре. Нежно так, но кулаками :)
- Че, грю, делаешь?! Альтернативные методы разработок?
- Да грит не, я пароль на фтп для пользователей генерирую %)
Источник: http://bash.org.ru/quote/393171

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

base64 /dev/urandom | head -n1 -c6

Grails at LinkedIn

Рубрика: Development, Groovy, LinkedIn | 12 June 2008, 18:03 | Vadim Voituk

Когда-то, во время моего доклада на киевской встрече developers.org.ua, кто-то (кажется Алексей Колупаев) спросил где на реальных действующих проектах используется Groovy и Grails.
Первое, что я ответил – это LinkedIn. Но вот конкретнее рассказать, где там Grails а где Java, в силу непричастности к разработке этой соц-сети – не смог.

Теперь же инженеры LinkedIn сами поведали нам “где”, “как” и главное “зачем” у них используется Grails. Смотрим презентацию: [Далее...]

PHP, MySQL и FOUND_ROWS() bug

Рубрика: Development, MySQL | 5 June 2008, 11:53 | Vadim Voituk

“Словил” сегодня пренеприятнейший баг, который стоил мне более часа потерянного времени.

Выполняем в консольном mysql-клиенте такой запрос:
SELECT SQL_CALC_FOUND_ROWS FROM tablename LIMIT 5;

Получем resultset из 5ти результатов (предполагается, что в таблице tablename больше 5ти записей)

Теперь в этом же соединении выполняем:
SELECT FOUND_ROWS();
Получаем значение, равное количеству строк в tablename – ничего сверхъестественного, все как и ожидалось.

Самое интересное начинается если повторить выполнить эти SQL-запросы из PHP-скрипта (при определенных условиях, но о оних ниже) – второй запрос будет всегда возвращать 0.

Причиной всему – ошибка в модуле php_mysql.so (BUG#33021), которая наблюдается при включенной опции
mysql.trace_mode=true

Дабы не поулчить подобную неприятность в своих проектах рекомендую пока установить mysql.trace_mode в false.

При тестировании использовался PHP 5.2.1 и с модулем mysql client API 5.1.16-beta.

Groovy Classpath & Dynamic class loading

Рубрика: Development, Groovy | 4 June 2008, 11:55 | Vadim Voituk

В Groovy подключить дополнительные Java-библиотеки и классы можно 3-мя способами:

  1. Дописыванием пути к jar-у или директории с классами в глобальную переменную CLASSPATH
  2. Указанием значение параметра -classpath (он же -cp) при запуске groovy, groovysh, и тд.
  3. Размещением необходимых jar-ов в директории ~/.groovy/lib

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

Вспомнив про черновик заметки о ClassLoader-ах, которую Юра все никак не соберется дописать и опубликовать,  получилось что-то вроде:

Простой прием, демонстрирующий определение местополжения класса и загрузку дополнительных JAR-ов

[java]

def codebase = this.getClass().getProtectionDomain().getCodeSource().getLocation()
def f = new File(codebase as String)

def url = new URL(f.getParent()+"/commons-lang-2.3.jar")

this.getClass().getClassLoader().getRootLoader().addURL(url)

Class au = Class.forName("org.apache.commons.lang.StringUtils")

assert au.isEmpty(null) && au.isEmpty("")

[/java]

P.S. Кстати запускать groovy-скрипт в UNIX-среде можно точно так же, как и sh, perl, php, python скрипты – указанием в первой строке:
#!/usr/bin/env groovy

Java Deployment Toolkit

Рубрика: Development, Java, JavaScript/Ajax | 28 May 2008, 10:55 | Vadim Voituk

Вместе с выходом беты Java Development Kit 6u10, Sun анонсировали и выход вспомогательной, но IMHO очень полезной JavaScript-библиотеки  Java Deployment Toolkit.

Назначение библиотеки – сделать развертывание и запуск Java-приложений в среде Web (апплетов, WebStart-приложений) более простой и комфортной.
При этом библиотека берет на себя задачи по определению установленных JRE, проверки соответствия их версий минимальным требуемым приложением, установке обновлений (если необходимо) и конечно же кроссбраузерного добавления обьектов на страницу.
Получается такой себе аналог SWFObject для Java.

Использовать Java Deployment Toolkit  очень просто – достаточно подключить на web-страницу единственный JavaScript-файл:
[javascript]<script src=”http://java.com/js/deployJava.js”></script>[/javascript]

Пример добавления аплета на страницу будет выглядеть так:

deployJava.runApplet({codebase:"http://voituk.kiev.ua/demo/",
  archive:"TumbleItemProject.jar", code:"components/TumbleItem.class",
  width:"600", Height:"95"},
{maxwidth:120, nimgs:17, offset:-57, img:"images/tumble"}, "1.5")

где первый параметр метода runApplet() – параметры тэга <APPLET>,
второй – параметры, передаваемые самому апплету (значения <PARAM>),
третий – минимальная версия JRE необходимая для запуска апплета.

Что  по cути отличается от использования старого доброго тега <APPLET> только формой нотации (JSON вместо HTML).

При этом, при попытке зайти на страницу с апплетом с помощью браузера, без установленного (или с устаревшим) Java Plugin, будет предложено установить последнюю версию оного.

LinkedIn Architecture slides on JavaOne 2008

Рубрика: Development, Java, LinkedIn | 20 May 2008, 10:25 | Vadim Voituk

На прошедшей в Сан Франциско на прошлой неделе конференции JavaOne компания LinkedIn провела 2 сессии об архитектуре и взаимодействии компонент своей социальной сети.

Первая презентация имеет название “LinkedIn – A Professional Network built with Java Technologies and Agile Practices”

Очень интересный overview о базовой архитектуре и реализации компонент LinkedIn и организации процесса разработки и тестирования.
Лично мне было интересно узнать о технологиях и библиоетках используемых для реализации столь масштабной архитектуры.
Оказывается, что LinkedIn на 99% реализаован на Java и использует Spring (со своими расширениями), ActiveMQ, Eh-cache, Lucene, HttpClient, Jetty, Louis, Groovy/Grails, DWR, Hudson, Eclipse+Mylyn, Jira, JUnit, HtmlUnit, MySQL, Oracle RDBMS и другие.
Оставшийся 1% не-Java кода – это С++ реализация огромного графа связей в постоянной памяти (так называемый Сould). [Далее...]