Thursday, November 19, 2009

Видео лекции по JavaServer Faces

JavaServer Faces — это технология создания веб-приложений, на основе визуальных компонент. Она является одним из стандартов среди технологий J2EE. Главной отличительной особенностью от других существующих технологий построения веб-приложений на языке Java является то, что в JSF все строится на так называемых визуальных компонентах, которые принимают вводимые данные от пользователя, передавая их в код приложения, а также выводят данные приложения в определенной форме. На самом деле JSF — это больше, чем набор компонент и API для управления ими.

Во-первых, JSF — это спецификация. На данный момент активно дорабатывается версия 2.0 и, если я правильно все понял, то уже в J2EE 6 она появится. До этой версии стандартной была версия 1.2, которую использовать было сложно без применения дополнительных библиотек, таких как Facelets, PrettyFaces, RichFaces или другие AJAX библиотеки. Популярной реализацией JSF спецификации является Project Mojarra. Также существует реализация от Apache, которая называется MyFaces.

Во-вторых, JSF — это полноценный фреймворк, на базе которого можно создавать веб-приложения. Кроме визуальных компонент, существует настраиваемая система навигации между страницами, контейнер бинов (managed beans с инжекцией зависимостей), обработка событий, поддержка EL-языка, управление состояниями компонент и приложения. И, наверное, не менее важное то, что JSF позволяет изменять и расширять свою функциональность, имея стандартизированный API.

JSF я начал изучать сам в далеком 2007 года. Я открыл обычный J2EE туториал и внимательно перечитал раздел, связанный с JSF. Я считаю, что невозможно выучить какую-либо технологию, не создав чего-либо с ее помощью. Поэтому, я создал небольшое серверное приложение GTalkWap, которое позволяло заходить на веб-странички с помощью мобильного телефона с поддержкой WAP и общаться в сети GoogleTalk. У меня тогда был очень слабенький мобильный телефон, Java-приложения на нем не запускались, и поэтому общение таким образом меня очень даже радовало. Запустив это приложение на университетском сервере, я им активно пользовался.

Позже я узнал про существование замечательной технологии Facelets, которая позволила избавиться от использования JSP страниц, а отображение определять в XHTML. Также она позволила использовать шаблоны страниц, которые мне понравились больше, чем те, что были тогда в библиотеке Tiles от Apache. С самого начала изучения JSF я знал про существование различных библиотек визуальных компонент. Но как только я начал использовать RichFaces от JBoss, JSF завоевал мое сердце.

Рассказывая студентам на лекциях о JSF, я старался покрыть как можно больше материала, не вдаваясь в сложные технические подробности. Сравнивать им было не с чем, так как до этого они знали только JSP, поэтому JSF для них был новой технологией. И чтобы не отбить интерес, я заострял внимание на основных фишках, которые упрощали создание веб-приложений, оставляя детали на самостоятельное изучение. Также отдельно я останавливался на интеграции Spring и JSF, так как весь проект был построен на основе Spring. Специально для студентов я создал приложение-пример ExampleTPPS, в котором отразил использование таких технологий, как Spring, JPA, Hibernate, AspectJ, JSF, Facelets, RichFaces, Log4J, Ant, JUnit.

Кстати, на счет самостоятельного изучения JSF, то могу порекомендовать вот этот небольшой туториал на русском языке от IBM, а также книгу Facelets Essentials: Guide to JavaServer Faces View Definition Framework (попробовать скачать можно тут), ну и, конечно, собственные лекции, которые идут ниже. :)















Update: Ниже выкладываю ссылки на слайды лекций, чтобы Вы их смогли скачать и использовать в своей практике.
Лекция 14, Лекция 15, Лекция 16, Лекция 17, Лекция 18, Лекция 19, Лекция 20

Read More...

Wednesday, November 11, 2009

Видео лекция по Spring Framework

Spring Framework - популярная библиотека среди многих Java разработчиков, которая является легковесным контейнером и содержит богатый набор вспомагательных классов для поддержки инфраструктуры как веб-приложений, так и настольных. Spring позволяет применять паттерн "внедрения зависимостей" (dependency injection) для организации взаимодействия компонент системы, выступая для них контейнером. Вместе с богатым набором классов для упрощения доступа к данным, организации веб представления, защиты приложения и взаимодействия со многими популярными библиотеками Spring может быть хорошей альтернативой использованию EJB, особенно там, где не требуется наличие EJB-контейнера и всей его инфрастуктуры.

Для подробной информации об использовании Spring могу порекомендовать книгу Spring in Action, Second Edition от Manning (если хотите скачать, посмотрите тут, ну или поищите в гугле, найти книгу не сложно).

Так вот, читая эту книгу, мне очень понравилось изложение материала. Сначала рассказывается о "внедрении контроля" (другие варианты названия - инжекция зависимостей, инверсия контроля). Причем, все объясняется на простеньком примере. Потом рассматривается уже разработка сложного веб приложения и объясняются все другие возможности Spring-а.

Рассказ о "внедрении контроля" (мне, все же, больше нравится вариант "инжекция зависимостей", так как это дословный перевод с английского) особенно понравился. Там рассказывается о разработке и тестировании приложения, которое обеспечивает походы Короля Артура для поиска Священного Грааля.

Рассказывая лекцию по Spring, я знал, что всю информацию уложить в 80 минут у меня не получится. Поэтому я постарался остановиться на самом важном аспекте - инжекция зависимостей. А вместо походов Короля Артура я выбрал то, что ближе для Украины - походы казацкого гетмана. Вместе с этой информацией, я также кратко объясняю и другие аспекты Spring, а, например, про взаимодействие его с JPA я рассказываю в отдельных лекциях, посвященных огранизации доступа к базе данных.


Update: Ниже выкладываю слайды лекции, чтобы Вы их смогли скачать и использовать в своей практике. Для этого нажмите меню в правом нижнем углу, потом нажмите на название презентации слева почти снизу. В новом окне откроется презентация, где ее можно будет скачать.



Кстати, в блоге гугла, посвященному тестированию, есть статья, где написаны их советы по написанию хорошо тестируемого кода. Более подробно все эти рекомендации представлены в этом PDF-файле. Много в чем они сводятся к тому, что необходимо использовать внедрение контроля, чтобы свести зависимости между классами к минимуму. Так что, "внедрение контроля" (или инжекция зависимостей) - это очень и очень полезная штука. :)

Read More...

Видео лекции по Java Persistence API (JPA)

Работая преподавателем в Черниговском государственном технологическом университете на кафедре Информационных и компьютерных систем, я читал курс лекций по предмету ТППС (Технологии проектирования программных систем). В основном я старался делать упор на проектирование систем, рассказывая про разные шаблоны, подходы, многослойную архитектуру и т.п. Материал свой я основывал на замечательной книге Мартина Фаулера "Архитектура корпоративных программных приложений".

Однако, без рассказа о технологиях, которые применяются для создания систем уровня предприятия, этот курс был бы не таким интересным. Весь курс основывался на технологиях J2EE и связанными с ними, и поэтому включал в себя такие темы как Spring, AOP, JPA, Hibernate, JSF.

В последний год своего преподавания я случайно додумался записывать лекции на видео, используя способ, описанный в предыдущем посте.

В этом посте я решил выложить лекции, где я рассказываю про технологию JPA и использование Hibernate, в качестве ее реализации. Попутно, вместе с JPA, я рассказываю про разные шаблоны реализации слоя доступа к данным, шаблоны отображеня наследования объектов на реляционные таблицы базы данных, и есть интересные лекции про транзакции, DAO и использование Spring+JPA.

Все лекции, собранные в одном месте, чтобы легче было их искать и следовать по ним :)













Update: Ниже выкладываю ссылки на слайды лекций, чтобы Вы их смогли скачать и использовать в своей практике.
Лекция 8, Лекция 9, Лекция 10, Лекция 11, Лекция 12, Лекция 13

Read More...

Monday, November 9, 2009

Видео лекции. Работающая реализация

Преподавая в университете на кафедре Информационных и компьютерных систем у меня давно возникала идея создания видео материалов для помощи студентам. Воплощал я идею по-разному. Сначала я просто записывал экран моего компьютера, где показывал как делать ту или иную лабораторную работу. После добавил пояснения к видео и начал не только туториалы по лабораторным делать, а и небольшие теоретические описания. Любил баловаться, накладывая музыкальное сопровождение к таким видео. Такие видео пользовались (а может и до сих пор пользуются) популярностью у студентов, так как они могли повторять шаги за видео, слушать пояснения и сразу выполнить работу. Получалось практически виртуальное занятие.

Какие же инструменты я использовал для этого?

Сначала я пользовался операционной системой Windows и программой SnagIt. Неплохая программка, много чего умеет. Но требовала дополнительной обработки видео, причем много. Она генерировала ооочень большой видео файл. Как я понял, она записывала полные кадры, что естественно и сказывалось на размере выходного файла. Не знаю, может сейчас она уже получше работает :) К тому же программа притормаживала тогда еще на моей машине, так что вскоре я разочаровался в ней.

Дальше я нашел и попробовал такую программу, как Jing. Что мне понравилось, так это то, что она сразу генерировала swf-файл, который я потом без проблем мог вставить на веб-страницу и все. Плеер был, как бы, интегрирован в тот файл. Все замечательно, если бы не некоторые ограничения. Бесплатная версия программы позволяла записывать только 5 минут видео. К тому же редактирование видео исключалось, так как для этого необходимо было парсить swf-файл, вытягивать оттуда видео, потом как-то его назад туда загонять. В общем, несколько видео туториалов я сделал, но на этом все закончилось.

Потом я как-то, сам того не замечая :), перешел на использование операционной системы Ubuntu. Как только я начал активно использовать различные OpenSource программы, я поискал и нашел замечательную программу Kdenlive, которая для записи рабочего стола использовала утилиту recordmydesktop (которая устанавливается вместе с kdenlive). Скорость работы просто супер. Ни капельки не тормозила и не мешала работать основным программам. Я даже пару раз забывал, что у меня включена съемка экрана :) Позволяет писать как полные кадры, так и только фиксировать изменения, благодаря чему размер видео файла получается достаточно небольшим. Кроме того программа содержит все необходимые инструменты для редактирования видео и очень богатый набор различных аудио и видео эффектов. Так что на данный момент - только плюсы!

Туториалы туториалами, но мне захотелось большего!

Я подумал: а почему бы не записывать собственные лекции? У ребят из MIT на YouTube целый образовательный канал свой. Причем не только у них, а и у многих других университетов. Чем мы хуже? :) Ведь можно записывать не только звук, а и видео, да еще и добавлять в видео сразу слайды лекции. Учитывая, что доску и мел я практически не использовал, так как всегда был проектор и слайды, то на видео можно было только снимать собственно меня, а потом еще наложить картинки слайдов и все.
Реализовать эту идею мне удалось достаточно просто с минимальными затратами.

Итак, что же я использовал.
  • Железо: использовался мой собственный ноутбук со встроенной веб-камерой. Да, всего 1.3 мега-пикселя, разрешение 640х480, но поверьте мне - для видео лекции на YouTube этого достаточно. Микрофон я брал внешний, так как встроенный был уж очень слаб. Внешний был тоже не супер-пупер, обычный компьютерный микрофон примерно за $7.
  • Как вы уже можете догадаться, все операции, включая съемку и обработку видео, я выполнял в операционной системе Ubuntu.
  • Софт 1: Съемку я делал простенькой программкой Cheese Webcam Booth. Наверное, проще этой программы ничего и не найдешь. Ну а больше мне и не надо было. Она снимала, и я получал видео файл со звуком :)
  • Софт 2: Полная обработка видео выполнялась в уже упомянутой Kdenlivе. Я вырезал ненужные фрагменты из видео, накладывал картинки слайдов лекций, добавлял различные эффекты, и (!) сразу сохранял видео в формате, наиболее приемлемом для YouTube (один из профайлов экспорта в программе). 
  • Софт 3: Обработка звука производилась в программе Audacity. Дешевенький микрофончик давал очень низкое качество звука. Основная проблема - это шумы. Но благодаря это программе, я удалял практически все шумы, увеличивал уровень сигнала, и подправлял эквалайзером звук. Несложные махинации - и на выходе я получаю приемлемый звук (не супер-пупер, но слушается отлично) в отдельном mp3-файле.
  • Софт 4: Склеивание звука с видео и разрезание видео на части для  YouTube (туда можно загружать файлы не более 10 минут длительностью). Эти две операции выполнялись в программе Avidemux. Это тоже очень интересная и богатая функционалом программа. Но в данном случае никакой дополнительно обработки видео и аудио мне не нужно было. Эта программа позволяет двумя щелчками мышки заменить основной аудио-файл для видео, а потом сохранить видео по частям.
Стоит отметить затраты такого решения для обработки лекции длительностью в 80 минут:
  • Стоимость софта - 0.0 любой валюты. OpenSource тут явно рулит.
  • Стоимость железа - $7 за внешний микрофон. Ноутбук давайте считать не будем, так как он покупался совсем для других целей, а не для записи видео лекций.
  • Время на обработку - примерно 2 часа на редактирование видео и звука и еще около 1 часа на все операции сохранения. Итого примерно 3 часа.
  • Время на закачку в YouTube - не будем хвастаться скоростью нашего интернета (или наоборот жаловаться на скорость) :)
Лицезреть результат видео лекций по курсу ТППС вы можете, например, на моем канале YouTube, ну или список всех лекций вместе с презентациями на блоге сайта кафедры.

Скажу еще, что в YouTube можно создавать плейлисты. Вы загружаете туда несколько видео, потом добавляете их все в один плейлист, и уже встраиваете себе на страницу этот плейлист. Когда пользователь смотрит видео, то они для него автоматически переключаются сами. :)


P. S. Один из студентов прислал мне ссылку на пост Видео-трансляция лекций. Реализация. Человек, написавший тот пост, задался вопросом, как бы ему реализовать запись и потом трансляцию лекций. На момент написания этого поста мной, я так понял, что он еще не решил, как же он это будет делать.

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

Но если есть желание, то все можно реализовать, используя, так сказать, подручные средства. Это во-первых дешево, а во-вторых работает. Доказано занусси мной :)

Read More...