Профессиональная разработка интернет приложений

Java, PHP, ROR…

Запуск Wowza Media Server из Eclipse

Очень удобно для отладки java кода и быстрого применения изменений в серверной части приложения, использующего медисервер Wowza, запускать последний прямо в среде разработки . Причем сделать это совсем не сложно. Для этого нужно выполнить следующие действия:

  1. Подключаем в проект все библиотеки из директории c:\Program Files\Wowza Media Systems\ 2\lib\
  2. Командой меню Run -> Run Configurations… вызываем окно, позволяющее редактировать конфигурации запуска
  3. В списке слева находим пункт “Java Application”, выбираем его и нажимаем на кнопку “New launch configuration” (Рисунок 1)
  4. Редактируем вновь созданную конфигурацию: прописываем ее название, выбираем проект, и главный класс - com.wowza.wms.bootstrap.Bootstrap . На вкладке “Arguments” в поле “Program arguments” вводим “start”, а в поле VM arguments параметры из листинга 1. (Рисунок 2)
  5. На вкладке “Common” ставим галочки “Debug” и “Run”, помещающие нашу конфигурацию в выпадающие списки быстрого запуска (Рисунок 3)
  6. Запускаем сервер в режиме отладки или в обычном режиме с помощью кнопок на панели инструментов

Листинг 1

-Xmx768M
-Dcom.wowza.wms.AppHome="C:/Program Files/Wowza Media Systems/ 2"
-Dcom.wowza.wms.ConfigHome="C:/Program Files/Wowza Media Systems/Wowza Media Server2"
-Dcom.sun.management.jmxremote=true

Связанные записи

Необходимость составления плана

В программировании можно часто увидеть повторное применение различных подходов, опробованных и обкатанных многими поколениями программистов. В них включены как паттрены программирования, применяемые ежедневно, так и схемы проектирования крупных систем.  Но существуют ли паттерны самого подхода к работе? Ведь у каждого программиста в процессе его работы накапливается определенный багаж знаний, помогающих ему построить свой рабочий процесс максимально эффективно. Эти знания очень важны, для того чтобы увеличить качество производимого кода и повысить скорость разработки. Бессистемный подход к разработке не может быть эффективным. Одна из полезных практик для меня - написание плана. Когда задача кажется простой, ты начинаешь ее реализовывать в лоб, не подумав. В результате ты можешь или зайти в тупик или все-таки завершить работу, но так, что при повторном анализе кода станет ясно, что можно было реализовать программу по-другому, облегчив ее расширение и поддержку. Составление плана не решит проблем с качеством кода и архитектурой. Но написание предварительного плана заставит разработчика более глубоко проанализировать задачу и продумать варианты ее реализации до начала работы. А это первый шаг на пути к качественному коду.

Связанные записи

В конце марта 2010 г. в Санкт-Петербурге пройдет первая в России конференция по Zend Framework

На днях закончился прием тезисов по планируемым докладам. Примечательно, что в состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей фрэймворка!

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

Каждый предстоящий доклад возможно обсудить на форуме ZF-сообщества. Ваше мнение очень важно для авторов!

Планируемые доклады

Жизненный цикл предложений (proposals) в проекте Zend Framework

Александр Веремьев (Zend Technologies, Core команда)

Zend_Search_Lucene в деталях

Александр Веремьев (Zend Technologies, Core команда)

Zend Framework и производительность

Александр Махомет (создатель сообщества ZendFramework.ru)

Zend Framework и MVC, «толстая» модель

Александр Стешенко (Norada Corporation, PHP-разработчик)


ФотоСтрана.ru: Прототипирование с использованием ZF (история боевого применения Zend Framework в highload-проекте)

Леонид Жаворонков (ФотоСтрана.ru, тимлид)

Использование очередей сообщений в повседневных проектах

Денис Баклыков (Обновление, веб-разработчик)

Zend Framework и Doctrine

Степан Танасийчук (руководитель веб-студии stfalcon.com)

Zend Framework и мультиязычность

Степан Танасийчук (руководитель веб-студии stfalcon.com)

История проекта e-Штаб

Анатолий Ларин (e-Легион, веб-программист)

Что нового несет нам Zend Framework 2.0?

Надежда Блинова (Wizartech, веб-программист), Георгий Туревич (Wizartech, ведущий веб-программист)

Интеграция Zend Framework c Javascript-фрэймворками jQuery и Dojo Toolkit

Георгий Туревич (Wizartech, ведущий веб-программист)

Смело обсуждайте доклады и регистрируйтесь!

За последними новостями можно следить здесь:
RSS-канал: feeds.feedburner.com/zfconf
Twitter: @zfconf
Группа Вконтакте: vkontakte.ru/club14951507

К участию также приглашаются информационные и финансовые спонсоры.

Связанные записи

История появления нулевой ссылки

Наткнулся на видео с конференции “QCon”, где рассказывается история появления нулевых ссылок из первых уст! Интересно посмотреть.

Связанные записи

BigDecimal вместо Float

Очень часто, в разрабатываемых нами программах реализуется работа с деньгами. Нетрудно догадаться, что отвечающий за это код должен быть хорошо отлажен и защищен от ошибок. Но иногда могут возникнуть такие ошибки, которые заметить очень сложно, а когда они будут замечены - приложение может уже работать у клиента. Одной из таких ошибок является использования класса Float для хранения и проведения операций с финансовой информацией. Эту ошибку часто совершают начинающие разработчики, которые еще не знают, что у класса Float есть проблемы с округлением чисел.

Проведем простой эксперимент:

System.out.println(0.9f - 0.8f);

Можно ожидать, что приведенный код выведет на консоль “0.1″, но на самом деле мы видим “0.099999964″. Это число может быть выведено на страницу счета, что уже плохо. Но самое страшное, что в процессе округления, часть суммы может быть потеряна.

Класс позволяет производить округление с помощью различных алгоритмов:

RoundingMode:
UP          - округление от нуля
DOWN        - округление к нулю
CEILING     - округление в сторону +∞
FLOOR       - округление в сторону -∞
HALF_UP     - округление от нуля, если дробная часть >= 0.5
HALF_DOWN   - округление от нуля, если дробная часть = 0.5
HALF_EVEN   - как и ROUND_HALF_UP, только в случае эквивалентности расстояния
               до соседей - округление выполняется в сторону четного числа
UNNECESSARY - округление не производится

Часто, если округление производится в операциях по выплате денег клиентам, используют округление ROUND_DOWN и ROUND_UP для выставления счетов. Для продолжения вычислений с округленным числом используют ROUND_HALF_EVEN, так как этот алгоритм обеспечивает наибольшую точность.

Класс  - немодифицируемый, поэтому такие операции как setScale() - возвращают новый объект класса .

Пример округления значения:

System.out.println("UP: " + new (1.5f).setScale(0, RoundingMode.UP));
System.out.println("HALF_UP: " + new (1.5f).setScale(0, RoundingMode.HALF_UP));
System.out.println("HALF_DOWN: " + new (1.5f).setScale(0, RoundingMode.HALF_DOWN));
System.out.println("HALF_EVEN: " + new (1.5f).setScale(0, RoundingMode.HALF_EVEN));
Результаты:
UP: 2
HALF_UP: 2
HALF_DOWN: 1
HALF_EVEN: 2

Но не стоит расслабляться - привденный ниже код также возвращает “0.099999964237213134765625″, как и код, приведенный в начале:

System.out.println(new (0.9f).subtract(new (0.8f)));

Поэтому, если мы считаем копейки, которые должны выставить в счете, необходимо изменить код:

System.out.println(new (0.9f).subtract(new (0.8f)).setScale(2, RoundingMode.UP));

И вот теперь мы можем взять у клиента эти 10 копеек!

Связанные записи

Доступ к компонентам Seam из фильтров

При попытке доступа к компонентам из фильтров web-приложения может возникнуть исключение: “javax.servlet.ServletException: java.lang.IllegalStateException: No active event context”. Для того, чтобы гарантированно получить нужный компонент, код необходимо выполнить в ContextualHttpServletRequest:

@Override
public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain)
		throws IOException, ServletException {

	new ContextualHttpServletRequest((HttpServletRequest) request) {
		@Override
		public void process() throws Exception {
			...
			MyComponent component = (Component) Component.getInstance(MyComponent.class);
			...
		}
	}.run();
	chain.doFilter(request, response);
}

Связанные записи

Безопасное включение/отключение фильтров в Hibernate

Иногда, при выполнении запроса, вам необходимо отключить некоторые фильтры . Для этого можно использовать методы сессии - disableFilter(String), enableFilter(String). Если фильтр по умолчанию включен, то сначала его отключают, потом выполняют запрос, а затем включают снова. Но если в промежутке между отключением и включением фильтра будет брошено исключение, то код снова включающий фильтр, выполнен не будет, и если исключение будет обработано таким образом, что выполнение программы не прекратится, то ее дальнейшее поведение может быть непредсказуемым. Запросы, зависящие от выключенного фильтра будут возвращать ненужные данные.

Чтобы избежать такой ситуации, вызов метода включающего фильтр, необходимо заключить в блок finally:

try {
    session.disableFilter("filterName");
    .....
} finally {
    session.enableFilter("filterName");
}

Связанные записи

Скриптовые языки, работающие на JVM стали быстрее

В JDK7 появились новые возможности по работе с динамически типизированными языками, работающими на . В этой статье описываются новые возможности . И приводятся примеры использования этих возможностей для JDK7.

Что же, ждем ускорения работы интерпритаторов скриптовых языков, работающих на .

Связанные записи

Влияние кризиса на открытые проекты

Андрей Лоскутов привел интересный граффиик, отображающий количество коммитов в проекты с открытым исходным кодом. На нем видно, что с конца 2008 года по настоящее время наметилась тенденция активного падения количества коммитов. Причем это наблюдается абсолютно по всем языкам. С большой вероятностью, причиной этого является мировой финансовый кризис.

Я думаю, что разработчики стали меньше коммитить в Open-source проекты, так как переместили свои приоритеты на проекты, работая над которыми можно заработать больше. А может быть это связано с уменьшением финансирования проектов, связанным с тем же финансовым кризисом.

Связанные записи

Впечатления от Seam

Вот уже как 2 месяца я работаю с Jboss . Хочу отметить несколько моментов, которые меня очень порадовали:

  1. Быстрый старт. Начать работать с очень просто. Я уже писал об этом. После создания скелета приложения, хватит одной только интуиции и небольшого опыта web-программирования, чтобы добавить несложный функционал.
  2. Высокая скорость разработки. Расширив класс EntityHome, вы получаете уже готовую часть программы, отвечающую за CRUD. Расширив класс EntityList, вы реализуете код, предназначенный для отображения списка объектов и навигации по нему.
  3. Новые возможности, реализуемые с помощью Conversations. Вам теперь не надо беспокоиться о передаче параметров, при реализации действия пользователя, состоящего из отображения нескольких страниц.

Связанные записи