SpringSource покупает G2One

Рубрика: Development, Groovy, Java | 11 November 2008, 12:46 | Vadim Voituk

Всего пол-часа назад прочел в твиттере Guillaume Laforge (project-manager проекта Groovy), что компания SpringSource, разработчик популярнейших Java-фреймворков, купила компанию G2One, которая занимается разработкой, поддержкой и консалтингом в области Groovy/Grails.

Сумма сделки не расглашается.

Что же касается пользы от сделки для обеих сторон, то тут, думаю сомнений не возникает:
G2One под крылом у “старшего брата” получает серьезную поддержку и немалое внимание на рынке JEE.
SpringSource же при этом получает отличную разработку для небольших приложений, тем самым покрывая своими продуктами весь JEE-рынок, а также достаточно внушительное комьюнити.

На мой взгляд весьма интересно то, что компания G2One была создана всего-то год назад (почти день-в-день).  А сам факт осуществления подобного приобритения – очереденой неслабый толчек для Groovy/Grails на пути к Java Enterprise среде.

Текст анонса, там же ссылки на пресс-релиз, краткое FAQ, и анонсы в блогах CTO G2One и CTO Spring Source

P.S. Кстати в Spring Framework Groovy поддерживался ещё с незапамятных времен :)

Facebook: 10 миллиардов фото!

Рубрика: Development | 15 October 2008, 18:41 | Vadim Voituk

Вчера вечером Doug Beaver, член Facebook Engineering Team, сообщил что Facebook преодолел рубеж в 10 миллиардов хранимых фото.
Учитывая, что каждое изображение хранится в 4 размерах, – это равнозначно 40 миллиардам файлов.

Для сравнения, по последним данным, на серверах Photobucket, принадлежащий News Corp., хранится более 6.2 миллиарда фотографий, а Yahoo-шном Flickr, по прошлогодним данным – около 2 миллиардов.

Если мне не изменяет память, то года 2 назад читал, что на Flickr только теги к фото составляют 10 террабайт данных.

Ещё некоторые данные от Facebook:

  • Каждый день на сайт загружается 2-3 террабайта новых фото
  • Общий их объем достиг 1 петабайта данных
  • На сайте ежедневно отображается более 15 миллионов фото
  • Фото-трафик в пике достигает 300000 изображений в секунду

После этого всего мне одному кажется, что заниматься оптимизацией MySQL-запросов по меньшей мере низко?

Вот тут сосед сокрушается по поводу того, что разработчики в команде мало того, что на работу не выходят, но и телефоном не пользуются.
Вот и интересуется “Что делать то?”

Что делать, что делать – сухари сушить (c)

Очевидно что вопрос лежит в плоскости трудовой дисциплины, и методов её прививания.
У меня на этот конкретный счет мнение весьма категоричное – благо “наглотался” уже. [Далее...]

Прочел отзыв Петра Диденко о “РИТ: Высокие нагрузки” и очень меня его выводы “зацепили”.

Основная идея тезиса, с которым не могу не согласиться, в том, что на просторах xUSSR-оного ИТ люди очень зациклены на том, что им приятно делать и что у них вроде как получается.
К тому же их мало интересует то, что они изобретают очередной велосипед, потому что так увлечены своим делом настолько, что некогда оглянуться вокруг.

У технарей в результате своей увлеченности (и как следствие узкого кругозора), крепнет уверенность в революционности/инновационности/конкурентного преимущества своего детища.
И уверенность эта ещё и подкрепляется мифом о том, что работа разработчика – труд все ещё творческий.

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

И после этого мы рассказываем, что наш “ИТ на 5 лет позади США и даже Индии”, что “у нас нет культуры стартапов”, что “новые технологии приходят к нам позже всех”, что “аутсорсинг нас тормозит” и тд.
А как же может быть иначе если мы все-ещё пытаемся сделать Ferrari из поношенного BMW, купленного 8-9 лет назад.

Вот только не надо мне рассказывать про защиту инвестиций, бизнес- и техно- риски и другую лабуду, которую пугливые и ленивые ИТ-менеджеры (а порой и сами разработчики) несут дабы оставить все как есть. Умные дяди уже все это продумали за нас и успешно продемонстрировали.
Нам осталось только осознать, что наши инновации в мировом масштабе уже устарели, взять и повторить успешный опыт заграничных товарищей, и тем самым сократить наше “ИТ-отставание” с 5 лет до 2х.

Хороший пример – это Cloud Computing.

Опять же процитирую Петра Диденко:

но народ думает, что это [could computing] какая-то далёкая наука, которая скорее всего никогда не будет иметь к ним отношения. Ну-ну.

Где-то года так 2 назад мне предлагали участие в проекте, построенном на Amazon EC2/S3.
В то время я сказал “ну вы ребята романтики-надуватели мыльных пузырей” и в проект этот не пошел.
Через пол-года прийшло прозрение, и я попробовал “скормить” идею руководству – безуспешно.
С таким же результатам попробовал ещё через год.
И несмотря на то, что уже сотни успешных web-стартапов продемонстрировали успешное использование тех же Amazon-овских сервисов, в ответ я слышу “А если вдруг что…”, “Это конечно интересно, но представляет только академический интерес…”, “Пусть оно поработает пару лет, а там поглядим”,  “Это все веянья новой моды – не обращай внимания, скоро пройдет” и тд.
А после этого успешно возвращаемся к “хаку очередного opensource-а ради 10% производительности”.

Грустно, господа, грустно…

P.S. Все выше сказанное прошу расценивать в контексте проблемы высоких нагрузок web-систем.

Прошивка и настройка DLink DWL-G700AP

Рубрика: Development | 16 September 2008, 00:05 | Vadim Voituk

Не так давно прийшел к выводу, что среди современного разнообразия активного беспроводного оборудования, найти что-либо приличное для дома/мини-офиса весьма проблематично.
Потому будем делать “из *** конфетку” своими руками.

DLink DWL-G700AP – это Wifi-точка доступа для домашнего (или около того) пользования, поддержвающая стандарты 802.11b/g.

В первую очередь это устройство интересно своей стоимостью – всего-то $40-50.
Минусом является то, что в базовом варианте, несмотря на наличие 2х сетевых интерфейсов, оно умеет быть только мостом (bridge).
Но это дело достаточно легко поправимо.

Исходим из таких начальных условий:

  • Точка доступа устанавливается дома (мини-офисе), где уже есть кабельное (Ethernet, RJ45) подключение от домашнего провайдера с авторизацией по MAC-адресу.
  • Наша задача состоит в том, чтоб посредством DWL G700AP предоставить нескольким ПК доступ в интернет, и друг-к-другу.
  • К тому же неплохо бы построить за точкой доступа свою мини-сеть, с автоматическим назачением IP нужным ПК.

Очевидно, что фабричная прошивка подобных “фокусов” нам провернуть не даст. Потому в первую очередь необходимо будет выполнить перепрошивку девайса, прошивкой от “народных умельцев”. [Далее...]

GPL and Open Source

Рубрика: Development | 11 September 2008, 14:20 | juriy

Недавно, общаясь на одном из форумов на около-OpenSource’ную тему, обнаружил один интереснейший факт. Лицензия GPL нарушает Open Source Definition. Точнее, всего один его пункт:

9. License Must Not Restrict Other Software
The license must not place restrictions on other software that is distributed along with the licensed software. For example, the license must not insist that all other programs distributed on the same medium must be open-source software.

Выходит, софт выпущенный по GPL формально не является Open Source. Или я что-то упустил в юридических тонкостях?

[UPDATED] По результатам дискуссии в комментариях, выянсилось, что GPL использует термин based-on и считает такой софт частью оригинального. А в OSD речь идет об “along with”.

GPL
Open Source Definition

Nice class names

Рубрика: Development | 5 September 2008, 10:11 | juriy

Пока читаешь исходники OS библиотек, да и Core Java классов, бывает натыкаешься на очень забавные имена.

Вот несколько “хитов”:

Класс SharedSecrets – это у Sun. Мы не жадные, вот, секреты шарим.

Log4J во время выполнения сам пишет логи. Как вы думаете, какой класс использован для этого (сам себя log4j не использует по вполне понятным причинам)?
Класс – LogLog.

В JUnit 4.4. нашел замечательный метод, он называется _dont_implement_Matcher___instead_extend_BaseMatcher_().

На предыдущей работе подрядчик обозвал класс кирилицей, жаль точного имени не вспомню. Кто еще встречал “имена-с-юмором” делитесь.

Sendfile on Tomcat, Apache, Nginx

Рубрика: Development, Java | 4 September 2008, 14:53 | Vadim Voituk

Наверное все, кто хоть когда-либо использовал web-сервер nginx, знают о такой его возможности как “X-Accel-Redirect”.
Для тех кто не знает / не помнит – напомню. 

Суть состоит в том, что при необходимости отдать клиенту файл посредством своего скрипта, можно не писать код, который будет читать байтики из файла и писать их в сокет, а отправить специальный response header, получив который nginx сам начнет отправку файла.
Например на PHP это выглядит так:

header("X-Accel-Redirect: /protected/iso.img");

Такой подход существенно повышает производительность приложений, сохраняя ресурсы сервера, и конечно же экономит много нервных клеток разработчикам, которым не прийдется реализовывать  отдачу файла по HTTP, поддержку докачки и тд. и тп.

Собсно как подобное реализуется на nginx – написано парой строчек выше.
Если что не очень ясно – Google в помощь.

Не так давно узнал даже как реализовать описанное и в старом-добром Apache.
Для этого нужно установить дополнительный модуль mod_xsendfile, активировать, ну а дальше все аналогично nginx, только c отличным именем response header:

X-Sendfile: /path/to/file

Есть только одно НО в этом способе – я его ещё не пробовал :)
Если кто имеет опыт работы с этим модулем – дайте знать, хочется услышать отзывы и мнения :)

А недавно пришлось реализовать отдачу достаточно тяжеловесного контента на Tomcat, и захотелось чего-то подобного.

Путем недолгого гугления было найдено такое решение:

В первую очередь необходимо активировать NIO connector в настройках сервера
(документация говорит что можно и APR, но я не пробовал)

Для этого в conf/server.xml вместо стандартного

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
    redirectPort="8443" />

Пишем

<Connector port="8180" protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="8443" />

После этого проверяем поддержку sendfile наличием аттрибута
org.apache.tomcat.sendfile.support в request-е сервлета

Если значение установлено в false – то в Connector-е дописываем useSendfile="true"

Код отправки файла клиенту выглядит так:


if (request.getAttribute("org.apache.tomcat.sendfile.support")==Boolean.TRUE){
  File f = new File(cont.getRealPath("/3499.3gp"));

  long start = 0L;
  long end = f.length();

  request.setAttribute("org.apache.tomcat.sendfile.filename", f.getCanonicalPath());
  request.setAttribute("org.apache.tomcat.sendfile.start", start);
  request.setAttribute("org.apache.tomcat.sendfile.end", end);
  request.setAttribute("org.apache.tomcat.sendfile.token", this);

  response.setContentLength(new Long(end).intValue());
}

Немного отличается от того, как это выглядит в nginx и apache, но ничто не мешает вынести эту логику в фильтр, который будет срабатывать при наличии соответствующего HTTP заголовка в response-e

Just for Fun фриланс 7 – Опять Payoneer MasterCard

Рубрика: Development, Работа | 14 August 2008, 12:02 | Vadim Voituk

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

Продолжая тему о минимизации затрат при выводе/обналичивании средств, заработанных на GAF.

Вчера откровенно скучая в очереди в супермаркете “Велика Кишеня” решил эксперемента ради попробовать расплатиться картой Payoneer MasterCard (см. предыдущие заметки).

Предварительно прикинув что на сумме покупок в $40-$50 дополнительные $2.15 комиссии будут выглядеть весьма несущественно, бодрым движением сунул карту кассиру.

К моему удивлению процессинг прошел с первого раза без сучка и задоринки (может с этого УкрСоцБанка когда-то что-то и вырастет хорошее).

Вечерком проверив, листинг транзакций через web-интерфейс Payoneer, обнаружил:

  • оплата в 212.5 грн. была списана со счета в эквиваленте $47.24 (включая комиссию $2.15)
  • при такой сумме курс доллара к гривне получился 4.50грн/$ (немного низковато ввиду последнего роста)
  • если же учитывать курс при оплате без комиссии, то он получается около 4.70грн/$, что уже весьма неплохо

В результате, кажется я нашел самый дешевый способ вывода (к словам не придираться) средств с Payoneer, который начинает более или менее эффективно работать при оплатах от $80-$100.

О решении старых проблем

Рубрика: Development | 7 August 2008, 08:27 | Vadim Voituk

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

К примеру если у меня в прошлом проекте были проблемы с производительностью под высокими нагрузками, то в следущем весьма похожем проект,  я уже делаю все возможное, чтоб эти проблемы даже теоретически не возникли.
И совсем не важно, под какими нагрузками будет работать новый проект, и есть ли в requirements specification что-либо о метриках производительности.

К счатью (а может быть и к несчастью) замечаю, что “заморачиваюсь” не один я – это довольно распостраненное явление среди моих знакомых.

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

С одной стороны вроде бы это и похвально, – основываясь на собственном опыте делать все сразу и хорошо. Но с другой стороны подобные “надуманные” (или правильнее “ненужные”?) решения отбирают какие-никакое время и тормозят развитие проекта.

Вот и думай что лучше: “плохо-шатко, но сейчас” или “хорошо и стабильно но стулья вечером потом”.

Какие у вас мысли по этому поводу?