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

Swing focus

Рубрика: Java | 28 August 2008, 13:24 | juriy

Небольшой рецепт для авторов собственных Swing компонентов.

Свои компоненты, как правило, наследуются непосредственно от JComponent. Самый простой компонент выглядит так:

JComponent comp = new JComponent(){};

Немного усложним задачу: предположим, нам нужно создать компонент, который должен получать уведомления о событиях клавиатуры. Нет ничего проще: в JComponent’е есть метод addKeyListener, который позволяет реализовать этот функционал:
[Далее...]

WordPress: Блокируем спам в комментариях

Рубрика: Блоггинг | 28 August 2008, 12:13 | Vadim Voituk

В последние несколько дней количество спама, пропускаемого Askimet-ом, в комментариях увеличилось раз так в 10.

Путем беглого анализа было выяснено, что 99% процентов этого спама постится не роботами (или же очень умными работами), и постится с 3-4 IP-адресов.

Не желая вдаваться в поиски плагинов-блокировщиков для WP, поначалу просто добавил в .htaccess строки “Deny from ” с указанием IP-адреса спаммера.

Где-то так:
Deny from 78.109.28.40
Deny from 195.225.177.190

По прошествии времени, посчитав такую меру “перегибом” изменил на такой вот RewriteRule
RewriteCond %{REMOTE_ADDR} 78\.109\.28\.40 [OR]
RewriteCond %{REMOTE_ADDR} 66\.232\.101\.20 [OR]
RewriteCond %{REMOTE_ADDR} 195\.225\.177\.190 [OR]
RewriteCond %{REMOTE_ADDR} 195\.225\.176\.177 [OR]
RewriteCond %{REMOTE_ADDR} 195\.225\.178\.15
RewriteRule ^wp-comments\-post\.php$ http://voituk.kiev.ua/spammers-go-home/ [R,L]

Теперь при попытке отправить комментарий с перечисленных IP, будет происходить редирект на страницу http://voituk.kiev.ua/spammers-go-home/.

Если кто-то по-ошибке стал жертвой столь варварского метода – напишите мне %)

P.S. Все приведенные IP-адреса – реальные IP, с которых “вагонами” идет спам.

Gmail: Глюк или провокация?

Рубрика: Google | 26 August 2008, 10:56 | Vadim Voituk

Вот такую вот картинку мне только что показал Gmail вместо привычного логотипа.

Я уж было решил что сегодня какой-то день OSF/GPL или что-то вроде этого.
Так нет – на главной странице Google – лого классическое.

Очистка кеша и рефреш вернули родное лого.

Кто-то ещё такое наблюдал?

P.S. Файл с лого находился по адресу https://mail.google.com/mail/images/2/5/logo.png
Теперь там “родной” Gmail-овский логотип

Вакансия: Junior PHP developer

Рубрика: Работа | 24 August 2008, 01:01 | Vadim Voituk

Для работы над достаточно посещаемым и интересным проектом на неполный рабочий день требуется PHP-разработчик (а лучше 2).

Обязательно: знать на среднем уровне PHP, MySQL, HTML, CSS; иметь желание учиться и использовать голову по назначению.

Желательно: Знать что такое XML и как его читать/писать на PHP, SVN (CVS или любую VCS), базовый опыт работы в *nix-системах (ssh/vim).

Работа дома или в офисе (по желанию) со свободным графиком в среднем по 4 часа в день.
Оплата – будем договариваться ;)

P.S. Хочу верить, что вакансия может быть интересна студентам 2-3 курса технических факультетов.

MyISAM and InnoDB auto_increment difference

Рубрика: MySQL | 22 August 2008, 09:53 | Vadim Voituk

Заметил интересную особенность автоинкрементного поля в InnoDB MySQL Engine

В отличии от MyISAM, значение автоинкрементного счетчика может повторяться. [Далее...]

cHRonicles…

Рубрика: Работа | 21 August 2008, 08:31 | Uncle_Remus

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

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

Итак, вырезка диалога с рекрутером с моими комментариями:
[Далее...]

Безопасность в Java

Рубрика: Java | 18 August 2008, 10:48 | juriy

Безопасность в Java это один из “козырей” платформы. Контроль за исполняемым кодом с точки зрения доступа к ресурсам и действиям это одновременно высоко востребованная и достаточно сложная функциональность.

До последнего времени я не интересовался безопасностью. Я знал, в общих чертах, что могут а чего не могут апплет и мидлет, знал о том что есть “песочница” и что выходить за нее не стоит. И этого вполне хватало. Исследовать вопросы безопасности ближе меня побудило обсуждение моей заметки “Создание Pluggable решений на Java”. Ведь когда вы сами предоставляете среду для исполнения плагинов вы не можете игнорировать вопросы безопасности (конечно, кроме случаев, когда вы – единственный автор плагинов к своей-же системе). Последней каплей стала наглядная демонстрация того, как при помощи интроспекции плагин может получить доступ к объектам ядра приложения и выполнить с ними любое действие.

[Далее...]

Кто ещё небыл в G-Club?

Рубрика: Фото | 15 August 2008, 10:48 | Vadim Voituk

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

Зато вчера наткнулся на винчестере на фото с того события, которое хорошо отображает всю идею G-Club:

На фото: Я, Юра и Андрей Яковлев – все когда-то вместе учились на факультете Кибернетики, а позже и в лаборатории тестирования стандартов программной инженерии IEEE.