Готовая среда для Java-разработчика от Oracle
В организации, где я сейчас работаю, на Java пишется почти всё, причем разработка ведется в консольном режиме. Чтобы каждый раз заново не настраивать среду разработки, имеется готовая виртуальная машина в формате VirtualBox. Она содержит уже установленные инструменты (ant, git, vim) и используется как для обучения, так и для работы. Однако нередко можно слышать ропот: люди хотят пользоваться графическими средами. К тому же наша виртуальная машина, выложенная на Яндекс.Диск, плохо загружается у обладателей не очень надежных Интернет-каналов. Все-таки там более 4 Гб.
Ну что-ж, тогда встречайте: настроенная виртуальная машина для Java-разработки от самого Oracle! В состав входят NetBeans для любителей гуёвых IDE, а также сервер приложений GlassFish. Всё это установлено на фирменный оракловский Linux (гы-гы-гы… уши CentOS торчат с первых минут загрузки).

При установке вас ожидает небольшой квест. Во-первых, нужно зарегистрироваться на сайте Oracle. Без авторизации скачивать не дают. Во-вторых, образ виртуального диска выложен 4-мя кусочками (3 по 700 и еще 200+ Мб). Для их склеивания прилагается нехитрый батничек (assemble.cmd). В-третьих, виртуальную машину лучше не создавать с нуля (хотя и так можно), а импортировать их прилагающегося xml-файла. В-четвертых, не очевидны имя пользователя и пароль (подсказываю: glassfish / glassfish).
А в остальном всё очень мило, можно включить поддержку русского языка, хотя NetBeans, конечно, придется поднастроить. Предупреждаю также о том, что Firefox там настроен через прокси, так что может показаться, что нет соединения с Интернетом.
Ну что-ж, тогда встречайте: настроенная виртуальная машина для Java-разработки от самого Oracle! В состав входят NetBeans для любителей гуёвых IDE, а также сервер приложений GlassFish. Всё это установлено на фирменный оракловский Linux (гы-гы-гы… уши CentOS торчат с первых минут загрузки).

При установке вас ожидает небольшой квест. Во-первых, нужно зарегистрироваться на сайте Oracle. Без авторизации скачивать не дают. Во-вторых, образ виртуального диска выложен 4-мя кусочками (3 по 700 и еще 200+ Мб). Для их склеивания прилагается нехитрый батничек (assemble.cmd). В-третьих, виртуальную машину лучше не создавать с нуля (хотя и так можно), а импортировать их прилагающегося xml-файла. В-четвертых, не очевидны имя пользователя и пароль (подсказываю: glassfish / glassfish).
А в остальном всё очень мило, можно включить поддержку русского языка, хотя NetBeans, конечно, придется поднастроить. Предупреждаю также о том, что Firefox там настроен через прокси, так что может показаться, что нет соединения с Интернетом.
RPC на JavaScript
Года три назад я написал материал об удаленных процедурах, выполняемых с помощью фреймворка GWT. В то время эта технология действительно выглядела прорывом. Еще бы: клиентский и серверный код пишутся на одном и том же языке! Но за прошедшее время произошло много событий, которые побуждают меня всё чаще писать на чистом JavaScript, особенно там, где не требуется задействовать мощные библиотеки и API.
На стороне сервера использую Node.js, развивающийся в последние месяцы просто космическими темпами. На стороне же клиента — не менее интенсивно развивающийся jQuery, который, помимо возможности рисовать красивые интерфейсы, содержит мощные средства выполнения асинхронных запросов. Ну, а посредником между клиентом и сервером может выступать код в формате JSON (я и раньше его иногда использовал, в GWT для этого есть необходимые пакеты).
Вот как можно организовать передачу JSON-объекта на сервер. На стороне клиента:
Как принять на стороне сервера (задействован пакет express):
Вот так, довольно бесхитростно. Учитывая то, что с сервера можно присылать довольно сложные объекты, этот метод вполне может заменить GWT в экспресс-проектах, когда городить огород некогда и незачем.
На стороне сервера использую Node.js, развивающийся в последние месяцы просто космическими темпами. На стороне же клиента — не менее интенсивно развивающийся jQuery, который, помимо возможности рисовать красивые интерфейсы, содержит мощные средства выполнения асинхронных запросов. Ну, а посредником между клиентом и сервером может выступать код в формате JSON (я и раньше его иногда использовал, в GWT для этого есть необходимые пакеты).
Вот как можно организовать передачу JSON-объекта на сервер. На стороне клиента:
var queryParams = {greeting: 'Hello, World!', someBool: true};
$.getJSON('/hello', queryParams, function(data){
// асинхронный разбор прилетевшего с сервера JSON-объекта.
}Как принять на стороне сервера (задействован пакет express):
app.get('/hello', function (req, res) {
res.setHeader('Content-Type', 'application/json; charset=utf-8');
var someObject = {
replay: 'Воистину ' + req.query.greeting,
yesOrNo: req.query.someBool
};
res.send(JSON.stringify(someObject));
}Вот так, довольно бесхитростно. Учитывая то, что с сервера можно присылать довольно сложные объекты, этот метод вполне может заменить GWT в экспресс-проектах, когда городить огород некогда и незачем.
10 случайных обоев из командной строки
Удивительно, до чего иной раз додумываются гении консоли:
А почему бы и не испытать этот трюк? Скопипастить строку в консоль и дождаться результата закачки при хорошем соединении займет не более 3 минут. Вот такой получился «улов».

Остальное под катом.
( Читать дальше )
for i in {1..10}; do wget $(wget -O- -U "" "http://images.google.com/images?imgsz=xxlarge&hl=en&q=wallpaper&sa=N&start=$(($RANDOM%700+100))&ndsp=10" --quiet | grep -oe 'http://[^"]*\.jpg' | head -1);doneА почему бы и не испытать этот трюк? Скопипастить строку в консоль и дождаться результата закачки при хорошем соединении займет не более 3 минут. Вот такой получился «улов».

Остальное под катом.
( Читать дальше )
Qr-код из текста
Сгенерировать можно так:
vcs — текстовой формат для обмена визитными карточками.
$ qrencode -o contact.png ?`cat contact.vcs`?vcs — текстовой формат для обмена визитными карточками.
Здравый смысл против копирайта на Java API
Отгремевшая недавно битва гигантов (Oracle vs Google) принесла победу «Империи добра». Это очень отрадно, поскольку в последнее время здравый смысл всё чаще пасует перед какими-то иными соображениями.
Сыр бор разгорелся из-за того, что Oracle упрекала Google в создании собственной реализации «принадлежащего» первой из упомянутых корпораций языка программирования. В суде было доказано, что да, в исходниках VM Dalvik целых 9(!) строк кода из классической реализации Java. И за это Google заплатит несколько миллионов долларов штрафа. Но и только. Дальнейшие поползновения Oracle в направлении приватизации Java были отвергнуты.
Джеймс Гослинг цитирует в своем блоге золотые слова одного из судей, прозвучавшие на процессе:
Сыр бор разгорелся из-за того, что Oracle упрекала Google в создании собственной реализации «принадлежащего» первой из упомянутых корпораций языка программирования. В суде было доказано, что да, в исходниках VM Dalvik целых 9(!) строк кода из классической реализации Java. И за это Google заплатит несколько миллионов долларов штрафа. Но и только. Дальнейшие поползновения Oracle в направлении приватизации Java были отвергнуты.
Джеймс Гослинг цитирует в своем блоге золотые слова одного из судей, прозвучавшие на процессе:
Поскольку для реализации методов используются специфические программы, любой человек свободен писать свой собственный код, реализующий любые функции или спецификации, использованные в Java API. И не важно, что декларации или заголовочные строки могут при этом совпадать у разных авторов. По правилам, принятым в Java, они (декларации и заголовки) должны быть идентичными, хотя реализация может различаться. Когда есть лишь один способ выразить идею или функцию, никто не вправе это монополизировать. И хотя в ОС Android имена методов и классов могли бы отличаться от соответствующих имен в (классической) Java, копирайт не распространяется на имена и короткие фразы.
Отмена автопереноса строк в Vim
Работая в Vim, я стараюсь вытягивать строки как можно длинее, типа
Это позволяет видеть больше строк на экране одновременно. Знаю, что не очень это приветствуется в профессиональных кругах и много раз пытался писать «по правилам», но привычка берет своё. Для того, чтобы строки не переносились автоматически, следует добавить в конфиг vim'а
Однако с какого-то момента vim стал поставляться с настройками, при которых происходит не просто враппинг, а принудительный разрыв длинных строк. Чтобы отключить этот эффект нужно добавить в конфиг
if(id == null || ref == null || getInitParameter("allowed_ips").indexOf(ip) < 0)Это позволяет видеть больше строк на экране одновременно. Знаю, что не очень это приветствуется в профессиональных кругах и много раз пытался писать «по правилам», но привычка берет своё. Для того, чтобы строки не переносились автоматически, следует добавить в конфиг vim'а
set nowrapОднако с какого-то момента vim стал поставляться с настройками, при которых происходит не просто враппинг, а принудительный разрыв длинных строк. Чтобы отключить этот эффект нужно добавить в конфиг
set textwidth=0
Список каталогов и файлов в виде дерева
Выводится на консоль такой остроумной командой:

Источник.
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Источник.
HelloWorld Explorer
Интересный веб-сервис создал Мэт Годбольт. Он
А я как раз о программировании сегодня лекцию читал и два раза на разных языках HelloWorld писал. Пришлось дома писать в третий раз:

Подробности.
представил первую версию инструмента GCC Exlorer, предназначенного для наглядного просмотра результата компиляции участков исходного кода на языках C/C++ в инструкции на языке ассемблера. GCC Explorer позволяет быстро просмотреть результат компиляции произвольного участка кода, оценить качество его оптимизации, а также наглядно изучить техники оптимизации, применяемые GCC.
А я как раз о программировании сегодня лекцию читал и два раза на разных языках HelloWorld писал. Пришлось дома писать в третий раз:

Подробности.
Свободному сообществу подарили Lotus
Компания IBM перевела свой давний офисный проект Lotus Symphony в разряд свободных.

В 80-х и начале 90-х Lotus-123 какое-то время был лидером рынка. В России, например, это название было знакомо компьютерной тусовке не меньше, чем продукты от Microsoft. Его, кажется, даже на КаМАЗе внедрили. Потом MS-Office выбился в безусловные лидеры и о пакете от IBM (его более позднее название — Lotus Notes/Domino) стали забывать. Позднее и другие конкуренты появились: OpenOffice, разработки от сообщества KDE, Google Docs. Тягаться с такими драконами — себе дороже и IBM поступила грамотно, по принципу «На тебе, боже, что нам не гоже». Теперь наработки Lotus Symphony будут интегрированы в OpenOffice, развивающийся с недавних пор под эгидой фонда Apache.
«Поинтегрировать» там есть что: ведь Lotus — это не столько офисный пакет, сколько полноценная система электронного документооборота с возможностью ведения внутрикорпоративной переписки, электронными подписями, интеграцией с OpenLDAP и т.д. В связи с этим всякие Directum'ы, MS-Exchang'и и даже Zimbr'ы начинают нервно покуривать в сторонке
.

В 80-х и начале 90-х Lotus-123 какое-то время был лидером рынка. В России, например, это название было знакомо компьютерной тусовке не меньше, чем продукты от Microsoft. Его, кажется, даже на КаМАЗе внедрили. Потом MS-Office выбился в безусловные лидеры и о пакете от IBM (его более позднее название — Lotus Notes/Domino) стали забывать. Позднее и другие конкуренты появились: OpenOffice, разработки от сообщества KDE, Google Docs. Тягаться с такими драконами — себе дороже и IBM поступила грамотно, по принципу «На тебе, боже, что нам не гоже». Теперь наработки Lotus Symphony будут интегрированы в OpenOffice, развивающийся с недавних пор под эгидой фонда Apache.
«Поинтегрировать» там есть что: ведь Lotus — это не столько офисный пакет, сколько полноценная система электронного документооборота с возможностью ведения внутрикорпоративной переписки, электронными подписями, интеграцией с OpenLDAP и т.д. В связи с этим всякие Directum'ы, MS-Exchang'и и даже Zimbr'ы начинают нервно покуривать в сторонке
.
