В этой части статьи рассматриваются уловки для выбора одного из двух значений на основе логического условия, передача и получение произвольного числа аргументов функций, а также распространенный источник ошибок — тот факт, что дефолтные значения аргументов функции вычисляются только один раз.
Дурак Обама @globalrunet
User
Java EE 6. Что нового в Servlet API 3.0
3 min
22K
С выходом Java EE 6 на ряду со значительными изменениями в JPA 2.0 спецификации сервлетов 3.0 также притерпела ряд улучшений: упростилась разработка и процедура развертывания, конфигурирование стало более удобным, появилась поддержка асинхронных запросов и улучшилась модель безопасности. Далее я попытаюсь осветить основные изменения в API.
Программирование и развертывание сервлетов упростилось главным образом за счет введения аннотаций для декларирования сервлет (@WebServlet), фильтров (@WebFilter), листнеров (@WebListener) и ограничений безопасности (@ServletSecurity). Таким образом, и дескриптор развертывания web.xml стал опциональным элементом. Обращаю внимание, что сами компоненты Servlet API не стали POJO, привычную иерархию интерфейсов и классов никто не отменял. Также добавилась аннотация для поддержки загрузки файлов @MultipartConfig и для установки параметров инициализации @WebInitParam.
Пример Hello World сервлета
package net.ismailov.tests;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name="hw", urlPatterns = "/hello_world")
public class HelloWorld extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println("<h1>Hello, World!</h1>");
}
}
+27
Настраиваем Tomcat для работы с JSF2 и другими компонентами Java EE 6
7 min
20KДанная статья описывает по шагам как настроить Tomcat (на текущий момент версия 6.0.26) на работу с разными компонентами Java EE 6.
- Unified EL 2.2 — язык выражений для JSF
- JSF 2.0 реализация — Mojarra (документация)
- JSR 299 реализация — Weld (документация)
- JSR 303 Bean Validation реализация — Hibernate Validator (документация)
- JPA 2.0 реализация — EclipseLink
+24
Удобный online мессенджер для интернет магазина
3 min
3.2KВ своем интернет магазине мы используем сервис
, который успел полюбиться одновременно простотой и функциональностью, гибкостью и отличным уровнем доступности.
В этом топике я расскажу, почему мы выбрали именно этот сервис, чем он отличается от конкурентов (а их и вправду много) и как «Большой брат» помогает нам продавать.

В этом топике я расскажу, почему мы выбрали именно этот сервис, чем он отличается от конкурентов (а их и вправду много) и как «Большой брат» помогает нам продавать.
+29
От создателей «Чип энд Дэйли» на экранах сервис услуг со скидкой «ДарБери»
2 min
1.8KМы обещали держать вас в курсе новостей по «Чип энд Дэйли». Я расскажу об итогах за 3 месяца – финансовые итоги (оборот, маржа), почему 1 млн. пользователей во Вконтакте бесполезны для бизнеса, откуда не брать трафик. И о нашем новом проекте DarBerry.Ru


+85
Видеоурок — Java + Intellij IDEA 9 + GWT 2.0 + Apache Tomcat
1 min
11KЗаписал видеоурок, думаю многим начинающим он пойдёт на пользу и ответит на многие вопросы.

Скачать в разрешении 1280x800 можно здесь Размер 32 мегабайта.
Вы узнаете, как создать приложение на GWT в среде Intellij IDEA 9. Мы напишем простой асинхронный запрос, сгенерируем число на сервере, отправим ответ клиенту и выведем результат на экране.
Далее, всё задеплоим на сервер Apache Tomcat и покажем работающий пример.
Конечно, многие нюансы опущены. Всё-таки урок для начинающий гвт-шников!
Удачи в программировании!
ПС. Один момент сглючил при сжатии видео, когда нужно было скопировать библиотеку gwt-servlet.jar с папки GWT 2.0 в папку WEB-INF/lib.

Скачать в разрешении 1280x800 можно здесь Размер 32 мегабайта.
Вы узнаете, как создать приложение на GWT в среде Intellij IDEA 9. Мы напишем простой асинхронный запрос, сгенерируем число на сервере, отправим ответ клиенту и выведем результат на экране.
Далее, всё задеплоим на сервер Apache Tomcat и покажем работающий пример.
Конечно, многие нюансы опущены. Всё-таки урок для начинающий гвт-шников!
Удачи в программировании!
ПС. Один момент сглючил при сжатии видео, когда нужно было скопировать библиотеку gwt-servlet.jar с папки GWT 2.0 в папку WEB-INF/lib.
+25
Всем по сообщению
6 min
15KTranslation
В сегодняшних веб-приложениях часто требуется выдать посетителю некоторое оповещение. Будь то «Ваш комментарий сохранён и ожидает модерации» или же «Благодарим за проявленный интерес, мы обязательно вышлем Вам приглашение, как только откроемся», эти небольшие сообщения появляются то тут, то там постоянно, так что весьма здорово иметь удобный интерфейс для отображения их пользователю.
Идущее в поставке с Django приложение аутентификации и авторизации (django.contrib.auth) всегда включало базовый функционал для отображения всплывающих сообщений пользователю, но он имел несколько досадных недостатков. В Django 1.2 же теперь есть совершенно новый фреймворк для таких сообщений, написанный в первую очередь Тобаясом Макналти (Tobias McNulty).
Идущее в поставке с Django приложение аутентификации и авторизации (django.contrib.auth) всегда включало базовый функционал для отображения всплывающих сообщений пользователю, но он имел несколько досадных недостатков. В Django 1.2 же теперь есть совершенно новый фреймворк для таких сообщений, написанный в первую очередь Тобаясом Макналти (Tobias McNulty).
+54
Введение в pygtk/gtkbuilder: пишем калькулятор
3 min
7KРазберем создание интерфейса на pygtk на примере самого примитивного калькулятора. Много картинок, немного кода.
gtkbuilder наиболее прогрессивный формат описания gtk интерфейса в xml,
если вы ранее использовали libglade, вы можете сконфертировать .glade файл в новый формат командой libglade-convert
gtkbuilder наиболее прогрессивный формат описания gtk интерфейса в xml,
если вы ранее использовали libglade, вы можете сконфертировать .glade файл в новый формат командой libglade-convert
+40
Вышел PyPy 1.2 и ускорил Python в разы!
2 min
14K
Чтобы долго не объяснять что это и зачем — простой тест:
cnt = 10 * 1000 * 1000 for _ in xrange(cnt): i = i + 1
5.8млн операций сложения в секунду на обычном СPython 2.6 (
python test.py
)42.5млн операций в секунду на PyPy 1.2 (
pypy test.py
)WinXP SP3, Core2Duo.
Да, в 7 раз быстрее он тест сделал! И это не только на синтетическом тесте: «django» в 3 раза быстрее, «n-body» в 7 раз быстрее… Я не знаю что такое тест «richards», но он теперь вообще в почти 12 раз быстрее. Смотрите результаты сами.
Читать и качать (из раздела "«JIT compiler» version"). 64-bit версии пока нет. А unladen-swallow нервно курит... Под катом еще несколько невероятностей (stackless, «песочница для python кода»)…
+70
AdSense: сколько можно заработать?
2 min
6.9KЯ веб-разработчик. Но я люблю фотографировать и смотреть чужие фото. Есть отличный ресурс photosight.ru, на котором есть много отличных фото.
Но вот незадача — каждый день просматривать данный сайт у меня не хватало времени, да и временами он страшно тормозил. В плюс к этому мне хотелось вести архив фотографий которые мне понравились, что бы потом их иногда пересматривать.
Именно по этому 3 года назад я написал парсер, который вытаскивал с фотосайта фото которые могли бы мне понравится (анализируя комментарии, рейтинги, etc..) и складывал их мне в папочку, которую я раз в неделю просматривал. Несколько моих друзей захотели ко мне присоединиться, и я открыл к этому веб-интерфейс. Так и случился мой первый стартап.
Но вот незадача — каждый день просматривать данный сайт у меня не хватало времени, да и временами он страшно тормозил. В плюс к этому мне хотелось вести архив фотографий которые мне понравились, что бы потом их иногда пересматривать.
Именно по этому 3 года назад я написал парсер, который вытаскивал с фотосайта фото которые могли бы мне понравится (анализируя комментарии, рейтинги, etc..) и складывал их мне в папочку, которую я раз в неделю просматривал. Несколько моих друзей захотели ко мне присоединиться, и я открыл к этому веб-интерфейс. Так и случился мой первый стартап.
+107
GROUP_CONCAT для Django ORM
2 min
3.4K
Агрегатные функции в Django ORM — крутые. Это обстоятельство послужило поводом добавить еще одну =)
Далее речь пойдет о mysql-специфичной функции
GROUP_CONCAT
и +29
«Прямой эфир» для общения c посетителями вашего сайта
3 min
5.4K
Сегодня я хочу представить и, как водится, немного «покопаться в моторе» первой версии продукта Прямой эфир, работающей на платформе РуТвит с применением Realplexor-а. Это виджет, который вебмастер может за 1 минуту установить на свой сайт, чтобы устроить микроблоггинг-общение с аудиторией в режиме реального времени.
С помощью «Прямого эфира» аудитория сайта общается между собой в реальном времени — «прямо сейчас», находясь в отдельной «чат-комнате», привязанной к вашему сайту. Виджет можно использовать для «прямого диалога» сразу со многими пользователями: например, для приема багов или фич-реквестов. Если пользователь, с которым вы общались, всё еще на сайте, вы увидите его присутствие: около его имени будет зеленый кружочек.
Для начала общения посетителю сайта нет необходимости проходить процедуру регистрации. Авторизация производится по OpenID. Т.е. ему достаточно иметь аккаунт на Яндексе, Google, LiveJournal и т.д., чтобы начать писать сообщения; не требуется даже e-mail.
+30
Сила и красота декораторов
5 min
83KОдним из самых сложных для понимания и осознания элементов языка является декоратор, хотя по сути это очень простая вещь, доступная для понимания даже начинающему программисту. Новых Эверестов я не открываю, а лишь предлагаю краткий обзор возможностей и несколько типичных примеров использования. Этакий короткий экскурс в метапрограммирование на питоне.
Upd 1: изменил несколько категоричное утверждение о несходстве паттерна Декоратор и одноимённой языковой конструкции на более мягкое.
Upd 1: изменил несколько категоричное утверждение о несходстве паттерна Декоратор и одноимённой языковой конструкции на более мягкое.
+96
Паттерн проектирования «Декоратор» / «Decorator»
4 min
94KПочитать описание других паттернов.
Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом.
Для более детального понимания проблемы, рассмотрим конкретную ситуацию. Пусть имеется некоторый объект — «кнопка», принадлежащий классу объектов «Кнопка», на который понадобилось возложить дополнительные обязанности. Под обязанностями, в данном контексте, понимаются какие-либо особенности поведения объекта. В случае с кнопкой, можно рассмотреть поведение объекта при его отображении на экране. При этом, будем считать, дополнительными обязанностями — отображение рамки кнопки, надписи, иконки. Важно понимать, что все эти обязанности должны иметь возможность быть наложенными как одновременно, так и по отдельности. Очевидно, первое, что приходит на ум — порождение классов (механизм наследования). Для данной задачи возможно это и выход — расширить класс «Кнопка» семью (23-1 = 7) различными классами, сочетающими в себе всевозможные комбинации обязанностей. Это классы: «Кнопка_С_Надписью», «Кнопка_С_Рамкой», «Кнопка_С_Иконкой», «Кнопка_С_Надписью_И_Иконкой», «Кнопка_С Рамкой_И_Иконкой», «Кнопка_С_Надписью_И_Рамкой», «Кнопка_С_Надписью_И_Рамкой_И_Иконкой». А если таких обязанностей будет не три, а хотя бы десять, не говоря уже про неудобство работы с подобной структурой. Безусловно, порождение классов в таком случае — заведомо проигрышный вариант. Однако, из этой ситуации есть выход — паттерн «Декоратор».
Проблема
Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом.
Описание
Для более детального понимания проблемы, рассмотрим конкретную ситуацию. Пусть имеется некоторый объект — «кнопка», принадлежащий классу объектов «Кнопка», на который понадобилось возложить дополнительные обязанности. Под обязанностями, в данном контексте, понимаются какие-либо особенности поведения объекта. В случае с кнопкой, можно рассмотреть поведение объекта при его отображении на экране. При этом, будем считать, дополнительными обязанностями — отображение рамки кнопки, надписи, иконки. Важно понимать, что все эти обязанности должны иметь возможность быть наложенными как одновременно, так и по отдельности. Очевидно, первое, что приходит на ум — порождение классов (механизм наследования). Для данной задачи возможно это и выход — расширить класс «Кнопка» семью (23-1 = 7) различными классами, сочетающими в себе всевозможные комбинации обязанностей. Это классы: «Кнопка_С_Надписью», «Кнопка_С_Рамкой», «Кнопка_С_Иконкой», «Кнопка_С_Надписью_И_Иконкой», «Кнопка_С Рамкой_И_Иконкой», «Кнопка_С_Надписью_И_Рамкой», «Кнопка_С_Надписью_И_Рамкой_И_Иконкой». А если таких обязанностей будет не три, а хотя бы десять, не говоря уже про неудобство работы с подобной структурой. Безусловно, порождение классов в таком случае — заведомо проигрышный вариант. Однако, из этой ситуации есть выход — паттерн «Декоратор».
+35
Развертывание сайта на Джанго, используя FastCGI
9 min
16KОт переводчика
Данную статью я прочитал на Django Advent приуроченному к уже скорому выходу Django 1.2 и она показалось мне настолько интересной, что я решил ее перевести. Далее текст статьи.
Когда разрабатываешь сайт на Джанго, так легко просто открыть консоль и напечатать:
python manage.py runserver
С этой простой командой управления ваши медиа файлы админки сайта поддерживаются правильным образом, PYTHONPATH правильно настроен и включает корневую папку нашего проекта, а так же запущен автоматически перегружающийся веб-сервер на указанном нами порту (от переводчика: по умолчанию порт 8000). Так просто!
Не удивительно, что люди так разочаровываются, когда приходит время положить их сайт на боевой сервер: существует так много шагов в этом процессе и поэтому сложно все их выучить и сделать все правильно. Неудивительно, что вся эта сложность приводит к тому, что написано много статей о развертывании веб-сайта на Джанго. Но почти все из этих статей фокусируются на развертывании сайта используя Apache и mod_wsgi или mod_python.
Однако иногда Apache не идеальное решение. Может быть ваш VPS имеет только 256 МБ памяти, а может быть вы хотите избежать сложности настройки Apache при установке. Или может быть вам просто не нравиться Apache. По любой из этих причин мы можем обратить свое внимание на FastCGI.
+39
Деревья в админке django
2 min
12KРедактировать модели, представляющие собой деревья в админке django очень неудобно и ненаглядно. Сразу возникло желание выводить вместо списка объектов дерево, для этого можно использовать замечательную библиотеку jstree.
Чтобы эффективно работать с деревьями в django существует mptt, которая добавляет в модель поля для эффективной выборки и методы для этого, а также шаблонные теги для вывода деревьев и т.п.
Если вы не используете mptt, у вас есть просто ссылка на parent — jstree можно подключить к с помощью одного javascript, про это — отдельная статья.
Далее про модели, использующие mptt.
Чтобы эффективно работать с деревьями в django существует mptt, которая добавляет в модель поля для эффективной выборки и методы для этого, а также шаблонные теги для вывода деревьев и т.п.
Если вы не используете mptt, у вас есть просто ссылка на parent — jstree можно подключить к с помощью одного javascript, про это — отдельная статья.
Далее про модели, использующие mptt.
+22
Сортировка изображений по разрешению… на сцене PowerShell
9 min
8.9KВ очередной раз просматривая интересности, любопытности и прочие всякости на Хабре, натолкнулся на статью о том, как с помощью Питона навести порядок среди иллюстраций, цифровое кладбище которых имеется почти у каждого из нас. Поскольку не так давно мне выпала доля заниматься процессингом картинок с использованием PowerShell, я решил провести показательное сравнение. Показательное с той точки зрения, чтобы продемонстрировать некоторые характерные возможности PowerShell тем, кто еще пока не знаком с ним или знаком поверхностно.
К сожалению, с PowerShell сложилась странная ситуация, когда весьма мощный инструмент оказывается обойден вниманием общественности и определенно нуждается в некоторой популяризации. Тем более, что с недавнего времени он входит в составе Windows 7 и скоро будет на рабочих местах немалого количества пользователей. А тут такой повод в виде лаконичной с одной стороны, но интересной с другой задачи административного характера по наведению порядка в хранилищах информации. Итак, приступим.
К сожалению, с PowerShell сложилась странная ситуация, когда весьма мощный инструмент оказывается обойден вниманием общественности и определенно нуждается в некоторой популяризации. Тем более, что с недавнего времени он входит в составе Windows 7 и скоро будет на рабочих местах немалого количества пользователей. А тут такой повод в виде лаконичной с одной стороны, но интересной с другой задачи административного характера по наведению порядка в хранилищах информации. Итак, приступим.
+32
Python Tips, Tricks, and Hacks (часть 2)
6 min
134KTranslation
Содержание
Списки. Свёртка списка (reduce). Прохождение по списку (range, xrange и enumerate). Проверка всех элементов списка на выполнение условия (all и any). Группировка элементов нескольких списков (zip). Еще несколько операторов для работы со списками. Продвинутые логические операции с типом set.
Словари. Создание словаря с помощью именованных аргументов. Преобразование словаря в список и обратно. «Dictionary Comprehensions».
+63
Стакан наполовину полон: разрушение негативных мифов о собственном бизнесе
4 min
1.5KТак много за последние 2 месяца на хабре было статей относительно мифов и обломов собственного бизнеса. Прочитав вчера свеженькую, мне показалось, что подобные рассуждения запросто могут отбить любые мысли о стартапах и уходе в свободное плавание у большинства читателей. Это неверно, я могу это сказать абсолютно точно – испытано на себе.
Мы начали свой бизнес год назад – разработка веб-сайтов. До этого мы все три основателя (я-менеджер, сеошник и программист) работали в известной в нашем регионе студии. За год мы выполнили все, что планировали. Наша студия стала известной в регионе, у нас постоянно появляются новые клиенты и мы занимаемся поддержкой старых. У нас дружный небольшой коллектив из 7-ми штатных сотрудников и мы работаем с примерно 10-ю фрилансерами на данный момент. А теперь о мифах.
Мы начали свой бизнес год назад – разработка веб-сайтов. До этого мы все три основателя (я-менеджер, сеошник и программист) работали в известной в нашем регионе студии. За год мы выполнили все, что планировали. Наша студия стала известной в регионе, у нас постоянно появляются новые клиенты и мы занимаемся поддержкой старых. У нас дружный небольшой коллектив из 7-ми штатных сотрудников и мы работаем с примерно 10-ю фрилансерами на данный момент. А теперь о мифах.
+84
Сортировка изображений по разрешению с помощью Python и PIL
3 min
6.3K
Захотелось зарегистрироваться на Хабре, но так как знаниями особо не блещу, а аудитория тут как раз наоборот, решил попробовать выложить скрипт на питоне, который написал по просьбе знакомого за бутылку 7апа :) Мне скриптик так же помог упорядочить свалку картинок ~15гб.
Скрипт проходит по директории и создает в ней папки вида ШиринахВысота и пихает туда соответствующие по разрешению изображения.
P.S. Ошибок не совершает тот, кто ничего не делает.
+35
Information
- Rating
- Does not participate
- Location
- Россия
- Date of birth
- Registered
- Activity