Мини идея: Языковая анти-амнезия

Рубрика: Development, Just a life | 23 December 2008, 15:01 | Vadim Voituk

В связи с тем, что в последнее время в моей деятельность над разговорным английским преобладает письменный, часто встречаю незнакомые слова / выражения / идиомы, за которыми приходится “лазить” в словарь (например только что искал в словаре “fascinating”).

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

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

Теперь суть идеи:

Комьюнити людей, которые таким вот образом сохраняют разные словечки/словосочетания/обороты/идиомы/etc, и соответственно публикуют их внутри собственных friend-групп.
Понравилось мне выражение или оборот из очередной статьи – запостил в свою группу.
Паралельно прочел “постинги” френдов.

Построить что-ли такое поверх Twitter?

Что думаете?

Simple & Reliable Java HTTP-server

Рубрика: Development, Java | 22 December 2008, 13:43 | Vadim Voituk

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

Вариантов, как встроить в свое приложение небольшой HTTP-сервер уйма –
начиная от аскетичного и сложно-развиваемого 10-ти строчного HTTP-сервера на Groovy, заканчивая интеграцией в приложение небольшого сервлет-контейнера Jetty.

Я же хочу предложить что-то среднее между этими двумя вариантами.
Начиная с 6й версии, в составе JRE поставляется пакет “com.sun.net.httpserver”, который содержит реализацию достаточно производительного и гибкого HTTP-сервера, построенного на асинхронной технологии NIO.

С его использованием код самого простого HTTP-сервера умещается в 30 строк Java-кода:


import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class HttpServerEx implements HttpHandler {

	public static void main(String[] args) throws IOException {
		HttpServer server = HttpServer.create(new InetSocketAddress(80), 10);
		server.createContext("/", new HttpServerEx());
		server.start();
		System.out.println("Server started\nPress any key to stop...");
		System.in.read();
		server.stop(0);
		System.out.println("Server stoped");
	}

	@Override
	public void handle(HttpExchange exc) throws IOException {
		exc.sendResponseHeaders(200, 0);
		PrintWriter out = new PrintWriter(exc.getResponseBody());
		out.println( "Hello moto!" );
		out.close();
		exc.close();
	}

}

Теперь, думаю, никому не составит труда расширить метод handle() под свои нужды.

Более подробную документацию можно найти тут: Javadoc пакета “Java™ HTTP Server”

К сожалению исходный код пакета доступен только как часть Standard Edition Development Kit Source Release под Java Research License, что вынуждает немного “попотеть” чтоб его добыть.

P.S. За наводку спасибо Dmitriy Kopylenko и его ссылке на реализацию подобного HTTP-сервера на Scala.

WordPress: Exclude post by ID from main loop

Рубрика: Development | 13 December 2008, 23:33 | Vadim Voituk

Очень часто в wordpress, при получении списка заметок посредством создания WP_Query, нужно исключить одну или несколько, с определенными “магическими” ID.

Документация на codex.wordpress.org по этому поводу молчит. Взамен предлагается исключать только заметки из определенной категории.

Как вариант предлагается выполнять фитльтрацию внутри цикла:

$query = new WP_Query(...)
while ($query->have_posts()): $query->the_post();
    if (get_the_ID() == '231231') continue;
    ...
endwhile;

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

Немного поковырявшись в исходном коде класса WP_Query обнаружилось, что возможность исключить определенные post_ID на этапе запроса все-таки есть:

$query = new WP_Query("post__not_in[]=231231&post__not_in[]=231232&..")

Особенность недокументированного параметра “post__not_in” в том, что его значение обязательно должно быть arrray-ем (оттуда и символы “[" и "]“). Иначе получим warning и неверный результат.

Для “кодирования” списка ID в строку, можно воспользоваться функцией http_build_query().

Сегодня утром Юра, обратил внимание на 2 дополнительных кнопки, которые появились на странице результатов поиска Google: “Promote” и “Remove”:

Что по сути является не чем иным как пользовательским ранжированием страниц.
Грубо говоря нажатием на “Promote” пользователь поднимает сайт на высшую позицию при ранжировании результатов поиска, но не для всех, а только при выводе результатов себе любимому.

И наоборот – нажатие на “Remove” удаляет сайт из дальнейших результатов поиска для данного пользователя (очень симпатично прорисован процесс удаления:).

Для каждой страницы в списке есть индикаторы того, сколько пользователей её “промотировало” и сколько “удалило”:

Пока Google не сообщает как эти данные будут влиять на общее ранжирование страниц, без привязки к аккаунту пользователя, но я уверен что как-то влиять все-таки будут :)

Также к каждой ссылке в результатах поиска теперь можно добавить “Public comment”.
Пока, правда, не знаю как смотреть эти комментарии.

Ещё внизу страницы появилась возможность добавить страницу в результаты поиска.

Жаль нет кнопки “удалить” на контекстных рекламных обьявлениях, но думаю это дело времени :)

P.S. А вы ещё спрашиваете почему Google не купил Digg :) ! (шутка)

Mount tool trick – Symlinks replcement

Рубрика: Development | 4 December 2008, 10:52 | Vadim Voituk

Есть такая категория убогого *nix софта, которая не поддерживает работу с символическими ссылками файловой системы.

К числу таких относится, например, FTP-демон VSFTPd (ох доберусь я как-то до того, кто мне его посоветовал).

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

Запускается приблизительно так:
mount --bind /dir/from /dir/to

И соответственно запись в /etc/fstab выглядит таким образом:
/dir/from /dir/to none rw,bind 0 0

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

Ремонт ноутбука DELL в Киеве

Рубрика: Just a life | 30 November 2008, 00:20 | Vadim Voituk

Через неделю, после вроде-как найденного решения проблеммы с видео на DELL XPS 1330, оказалось, что рано радовался – проблема начала повторяться с завидной регулярностью – прийшлось обратиться в сервис.

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

В первом, DataLux, мне сказали, что диагностика будет длиться в течении недели, а ремонт – ещё 2-3 недели, при условии наличия нужных запчастей. Если запчастей на складе нет, то доставка займет ещё 4-5 недель. – фигасе! сказал я се!

Во втором (не помню как зовется) вообще сообщили, что будут ремонтировать мой DELL бесплатно, только(!!!) если он куплен у них.
На мой вопрос, не должны ли они, будучи в статусе “Authorized Service Partner” ремонтировать любое оборудование DELL, проданное в любой точке мира услышал феноменальный ответ: “Ну в принципе то должны, но мы так не делаем и бесплатно ремонтируем только ноутбуки, купленные у нас”.
Менталитет, млять! Договор с крупнейшим мировым производителем ценится не дороже бумаги, но которой напечатан.
Как-нибудь,  будучи в плохом настроении,  позвоню в DELL и “накапаю” на таких недо-партнеров – думаю статуса партнера эта шарашкина контора лишится очень быстро.

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

Итак, если у вас настала жопа гарантиный случай с оборудованием DELL, необходимо позвонить по номеру
8(800) 502 03 20 (бесплатно со стационарных телефонов),
дальше побродить минут 5-7 по их IVR меню выбирая язык и соответсвующий вашей проблемме раздел (серверы, ноутбуки, etc).
После этого обьяснить весьма странному русскоговорящему индусу с ужасным акцентом суть проблеммы, попробовать следуя его инструкциям продигностировать проблему, услышать “К сожалению я вам помочь не могу, вам прийдется обратиться в сервис-центр”.

После этого позвонить в компанию Service.UA по телефону 8(044) 594-97-98, рассказать печальную историю про индуса, получить от них подтверждение и везти железку на Эспланадную 34/2 офис 11.

Ну а дальше как повезет – в моем случае диагностика, и замена материнской платы (включая ожидание её доставки) продлилась 2 недели и 2-3 дня.
О статусе ремонта можно следить непосредственно с сайта, что весьма удобно.

The power of 4k

Рубрика: Development, Java | 27 November 2008, 11:25 | juriy

Уже много-много времени я увлекаюсь разработкой игр на Java. Да что тут говорить, мое первое приложение на Java была мини-игра для мобильного телефона Siemens M55, моя первая постоянная “программистская” работа была тоже связана разработкой игрушек на Java.

Эта заметка посвящена ежегодному событию, которое проходит по инициативе www.javagaming.org – состязанию Java 4k. Правила очень простые – необходимо сделать интересную игру на Java, так чтобы размер архива (jar) с игрой (и всеми ресурсами) не привышал 4 килобайта. Трюки вроде “напишу-ка я на 4 кб загрузчик, который подтянет с сайта мой 50-мегабайтный движок” не проходят.
Естественный вопрос: “что, черт побери, можно написать на 4 килобайта?”. Чтобы на него ответить достаточно взглянуть на игрушки прошлых лет:

Победитель прошлого года, простая, но интересная аркада:

Spiderball4k
А эта игра потрясет любого: изометрическая Real-Time стратегия, где есть разные юниты, можно строить здания, добывать ресурсы и воевать с AI! Комментарий к этой работе с форума javagaming выражает основную мысль как нельзя лучше: “Hey, where did you put other 100k?!”
T4anks

Есть еще множество интересных игр. В этом году я думаю присоединиться к соревнованию. Надеюсь, времени хватит.

Известные люди в LinkedIn

Рубрика: LinkedIn | 18 November 2008, 14:48 | Vadim Voituk

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

В отличии от психологов, изобретателей теории, которые рассылали письма “циганской почтой”, Microsoft-овцы пошли куда дальше – они проанализировали списки контактов и пути сообщений в IM (MSN что-ль?).

Тогда же мне и подумалось, что куда интереснее отслеживать подобные вещи посредством современных социальных сетей.
Ибо контактов в том же LInkedIn у меня куда больше чем даже в древнющей аське.
Чего только стоит надпись у меня а LinkedIn-профайле:
“274 Connections links you to 4,662,300+ professionals”

Немного покопавшись в поиске LinkedIn, прийшел к выводу, что довольно известную фигуру найти можно даже через 2 рукопожатия.

Возвращаясь к залоговку заметки, привожу небольшой список “знаменитостей” найденных в мною в LinkedIn
(судя по всему это только те, кто попадает в обозначенные 4,662,300+ professionals):
Bill Gates – в представлении не нуждается
http://www.linkedin.com/in/billgates

John McCain – Кандидат в президенты США 2008 года, сенатор
http://www.linkedin.com/in/johnmccain2008

Barack Obama – президент США
http://www.linkedin.com/in/barackobama

Linus Torvalds – думаю в представлении тоже не нужается
http://www.linkedin.com/in/linustorvalds

Michael Dell – основатель и руководитель компани DELL
http://www.linkedin.com/in/mdell

Larry Ellison – основатель Oracle Corp.
http://www.linkedin.com/pub/b/55b/8b0

Greg Doherty – вице-президент Oracle Corp.
http://www.linkedin.com/pub/1/b4/719

Mark Zuckerberg – основатель и CEO крупнейшей соц-сети Facebook
http://www.linkedin.com/pub/0/835/a34

Hillary Clinton – жена экс-президента США и кандидат в президенты 2008 года
http://www.linkedin.com/in/hillaryclinton

Среди тех кого с “пол-пинка” найти в LinkedIn не удалось – Steve Jobs, Sergey Brin, Larry Page, Eric Shmidt, Steve Ballmer.
А при клике на профайл Bill Clinton, получил сообщение “You and this LinkedIn user don’t know anyone in common” (подтверждаю – общих знакомых нет :).

А кто ещё находил в LinkedIn мировые известности?

Microsoft Interview и задачка о фруктах

Рубрика: Задачки, Работа | 16 November 2008, 00:24 | Vadim Voituk

На поза-прошлой неделе у меня происходил первый (телефонный) этап интервью в Microsoft Corporation.

Не смотря на то, что вакансия (которая кстати очень соответствовала моему профилю) была открыта не в саму M$, а в небольшую французкую компанию, не так давно приобретенную оным Microsoft, со мной связался именно рекрутер из американского подразделения M$.

О самой организации и подготовительном процессе особо рассказывать не буду, замечу лишь что:

  1. Имея не лучший опыт вечерних интервью – пытался договориться об утреннем времени проведения — мне отказали, без какой-либо аргументации. Просто “нет”, и баста.
  2. Резюме несколько раз “футболилось” от одного сотрудника Recruit dept. к другому, который в очередной раз просил ответить на одни и те же вопросы
  3. Для проведения телефонного интервью найсточиво предложили скачать и установить Skype (странно что не MSN), на ходу расхваливая какой это хороший и главное бесплатный сервис

В результате всего это создалось впечатление что тебя там и в грош не ставят, и я должен им ещё доплачивать за то, что они тратят на меня время.
Что довольно резко контрастировало с интервью, которые я проходил в Google и Yandex.
Там чувствуешь что компания в тебе заинтересована, и готова идти на, хоть и небольшие,  но уступки.

Теперь о самом интервью.

Проводила его девушка-рекрутер, как она сама сказала “non technical employe”.

При этом после вступительных разговоров (“Как вы себя видите в M$”, “Почему это вы вдруг заинтересовались нашей вакансией”, “Что вы знаете об MS”, etc), вопросов по резюме (“С какими языками/технологиями работали?”, “Работали ли с MSSQL?”, “Какой процент рабочего времени вы пишете код?” etc) начала задавать технические вопросы по OOП и Java.

Из того, что удается сейчас вспомнить – это “Что такое полиморфизм?”, “А правда ли, что Java разработана для создания сетевых и распределенных приложений?”:) (/me поулыбался, вспомнилась первая моя книга о Web-разработке которая именно так и начиналась)

Потом были вопросы: “Если бы вам нужно разработать WEB-сервис синхронизации времени, как бы вы это сделали” и “Расскажите о ваших критериях хорошего кода” .

После всего этого простая задачка про фрукты:

Есть 3 ящика фруктов – с апельсинами, с яблоками и с яблоками и апельсинами вперемешку.
На каждом ящике есть надпись, указывающая на содержимое ящика, но известно, что все надписи неверные.
Вопрос: Какое минимальное количество фруктов нужно достать из ящиков, чтоб точно идентифицировать их содержимое?
Аргументируйте.

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

Ссылки “в тему”:

О прохождении интервью в Google  (начало, продолжение, the-end)  и Яндекс (начало, завершение)
Вопросы по PHP на собеседование в Yahoo

Задачка о шляпах от Microsoft
Как собеседовали 2х бывших сотрудников Google – я плакал

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 поддерживался ещё с незапамятных времен :)