Андрей Друченко
Вторая встреча Java User Group Херсон  
Волею судеб меня занесло в славный город Херсон, где я впервые попал на местную девелоперскую тусовку. Честно говоря, вначале я был несколько предвзятого мнения о предстоящем мероприятии, ибо - Провинция
- Java — это не мое, и местами меня сильно от нее тошнит (поскольку я занимаюсь вебом, а Ява для создания веб приложений — сакс)
- Заявленные темы не вдохновляли
Но, на мое удивление мероприятие прошло весьма весело и продуктивно =) Познакомился с парой интересных людей, фамилий некоторых не знаю, надеюсь они засветятся в комментах.
На Херсонский JUG были заявлены следующие доклады
- Александр Чередниченко расскажет о конференции Sun Tech Days 2008
- Владислав Круглик обрисует типичную архитектуру Web 2.0 сервисов
- Дмитрий Решетник поведает о generic классах Java и шаблонах C++
- Вадим Хохлов расскажет об интернационализации приложений Java и C++
Итак, начнем разбор полетов.
Как Владислав Круглик обрисовал типичную архитектуру Web 2.0 сервисов
Владислав Круглик, вообще говоря мой коллега, и мягко говоря довольно отдаленно и расплывчато обрисовал архитектуру веб-приложений. Видно было что перестарался с желанием не выдать корпоративных тайн :) Оговорюсь, что Влад был из
 Postindistria а конференция проводилась на вражеской территории компании
Postindistria а конференция проводилась на вражеской территории компании  DataArt ;)
DataArt ;)

Cобственно, вот некоторые тезисы из доклада Влада на тему веб 2.0 с точки зрения технологической
- Веб-службы
- AJAX
- Веб-синдикация (RSS/Atom)
- Mash-up (новые приложения построенные на базе открытых API, обычно Google API)
- Метки (теги) — речь о переходе от директорий(таксономия) к тегам (фолксономия)
- Сервисы, а не коробочное ПО
- Архитектура взаимодействия
- Недорогая масштабируемость
- ПО не привязано к клиентскому терминалу
Цели разработки архитектуры веб-приложения
- Масштабируемость (вертикальная & горизонтальная)
- Доступность (подразумевается в первую очередь Надежность, или 99.9% uptime)
- Производительность — максимально быстрая реакция приложения на действия пользователя
Сервера приложений
- Каждый экземпляр веб-приложения должен иметь возможность обработать абсолютно любой запрос пользователя в не зависимости от того где обрабатывались предыдущие запросы данного пользователя
- Балансировка нагрузки. 1) Решения на базе оборудования (например Cisco, Foundry, NetScalar) – дорого, высокая производительность и стабильностью 2) Решения на базе ПО (nginx + mod_proxy) — ниже производительность, некоторые сложности в конфигурации, зато дешево.
- Сессии. 1) Централизированное хранение сессий (например общая база данных, файловая система) 2) Децентрализированное хранение сессий (решения на базе memcached, DFS) 3)Хранение на клиенте через механизм cookies
Базы данных
- Соотношение запросов на выборку и обновление данных 15–10:1
- Асинхронная репликация данных (master-slave) — запись на master, чтение с slave
- При увеличении нагрузки издержки на репликацию значительно возрастают, добавление новых slave серверов не обеспечивает нужного прироста производительности
- Sharding — сегментирование баз данных. Данные делятся на части по какому-либо признаку и каждая часть хранится на отдельном сервере или кластере
-  Денормализация и оптимизация запросов  Why (not) normalize? Why (not) normalize?
Статический контент
- Использование «легких» веб серверов (например lighttpd, nginx)
- Распределенные файловые системы
- Content Delivery Network — сторонние сервисы для хранения контента (Amazon S3 например)
Вычисления
- Конвертация данных
- Сложные вычисления
- Генерация страниц без ожидания завершения процедуры обработки
- Использование очередей (Queue services, например Amazon SQS)
Была еще часть про кеширование, но это уже скучно. Ибо доклад Влада превратился не в доклад про Веб 2.0 а в доклад о Масштабируемости и Высоких нагрузках. А лучший доклад на на эту тему который я когда-либо слышал был на недавнем UAWEB 2008, назывался он
 «Как разрабатывать системы массового обслуживания» Егора Егорова.
«Как разрабатывать системы массового обслуживания» Егора Егорова.Ну и в качестве примера, Влад упомянул проект audioo.com (над которым, кстати, ваш покорный слуга тоже трудился)

Вообще говоря, хотелось бы больше услышать об идейных предпосылках Веб 2.0, на уровне концепций и идей, которые собственно, обуславливают архитектуру вебдванольных приложений.
Кстати, на тему того что же такое Веб 2.0
 рекомендую отличную статью Тима О'Рейли What is Web 2.0
рекомендую отличную статью Тима О'Рейли What is Web 2.0Идем дальше — следующим докладчиком был Вадим Хохлов, который рассказал о
Интернационализации приложений Java и C++
Несколько выдержек из тезисов Вадима.
Internatiolization (i18n) — процесс адаптации продукта к языковым и культурным особенностям (перевод интерфейса)
Механизм i18n должен:
- быть удобным для пользователя (скорей всего, имеются в виду пользователи составители переводов)
- не требовать перекомпиляции при добавлении перевода
- быть нетребовательным к ресурсам
- быть удобным для разработчика приложения
Варианты механизмов i18n
- не поддерживать i18n (а что, забить — тоже всегда вариант:)
- для каждого языка — свой исполняемый файл (пусть горят в аду злобные копипейстщики!)
- ini-файлы
- GNU gettext (конечно же опенсорс рулит, и дальше Вадим будет говорить именно об этом решении)

Далее, Вадим привел несколько примеров использования базовых возможностей GNU gettext в С++/Java приложениях.


а также немного коснулся темы поддержки множественного числа. На самом деле очень жаль, что так мало уделили этому внимания, ибо о базовой функциональности gettext знают почти все, а вот о реализации множественности, поддержке цифрового вывода в разных языках и прочих тонкостях — знают далеко не все.
Если бы я докладывался на тему gettext я бы как раз сфокусировался на более продвинутых фичах gettext нежели базовый перевод.

Также странно, что Вадим не упомянул о l10n (localization) которая обычно идет в связке с i18n. Это конечно немного отдельная тема, но тем не менее про вещи типа поддержки культур с письменностью справа на лево(
 привет 8200) было бы интересно услышать.
привет 8200) было бы интересно услышать.Я сразу заподозрил в Вадиме опенсорс евангелиста =) и
 оказался
оказался  прав.
прав. Материалы доклада интернационализации приложений Java и C++
Материалы доклада интернационализации приложений Java и C++После был кофе-брейк, на котором все кто хотел активно пообщались на смежные интересные темы. Я вот принял участие в дискуссии на тему методологий разработки с весьма агрессивным и активным дяденькой (увы, имени не запомнил, но сразу понял что человек занимается преподаванием и теоретикой нежели созданием реальных систем).
Далее был доклад
Generic в классах Java и шаблоны C++
Доклад, мягко говоря, немного не продуман, и явно был рассчитан на весьма узкоспециализированные знания в области C++ / Java шаблонов.

Кроме n слайдов с мелким кодом я не запомнил ничего.

Зато в конце доклада я все-таки получил довольно внятный резюмирующий ответ от Дмитрия Решетника в чем же была суть и основная идея доклада.
На мой взгляд, подобные вещи специальные (и весьма сложные вещи) следует готовить очень тщательно (если уж решили докладываться), причем рассчитывать на аудиторию с разным уровнем подготовки по данному вопросу. Ну и вообще, больше внимания уделять не деталям кода, а концепциям и идеям (дабы была понятна суть, т.к. запоминаются обычно идеи — а детали реализации в коде обычно забываются)
Ну и завершающим был доклад
Sun Tech Days, Spb '08
Александр Чередниченко поведал нам о ежегодном мероприятии от Sun Microsystems на котором побывал недавно в Питере.
На мой взгляд, самый лучший из всех докладов которые были. Как по манере изложения, так и по информационному наполнению. Ибо даже мне, человеку далекому от Java-stack технологий было интересно.

Итак, кто был на Sun Tech Days
- «Евангелисты» Sun
- Российские разработчики Sun (оказывается сборщики мусора последних JVM — именно их рук дело)
- Заинтересованные компании (Ericcson, Oracle, MySQL, Intel, AMD)
по словам Александра тусня там собралась веселая, ибо большая часть представляла собой студентов тех. вузов=)
Тематика докладов
- Java SE
- Java ME (о ужос, я когда-то это даже пробовал руками;)
- Java EE + web 2.0 (гкхм, вещи почти несовместимые — припомните мне хотя бы 2–3 популярных веб 2.0 сервиса которые используют Яву, слабо да?;)
- Solaris
- NetBeans
- University
Тенденции рынка
- Рынок ПО растет и это развивает жизнь в Интернет
- В разработку включается больше людей — переход от вендоров к сообществам
- Программные платформы дают толчок равитию «быстрых» идей
- Проекты, которые ранее, как казалось невозможно поддерживать некоммерчески, сейчас становятся открытыми (Sun давно открыла открыла исходники Solaris и Java )
Экосистема разработки

В рамках упомянутых выше идей, что делает Sun
- Поддерживает Glassfish (типа модный новый сервер приложений)
- Покупает MySQL
- Покупает openXVM (виртуализация сакс в любом случае, ну а ява на виртуальных машинах... гкхм, поживем — увидим)
- Открывает исходники Solaris — openSolaris
В рамках новой модели разработки, меняются и инструменты, о Glassfish мы уже упомянули, упомянем о фичах в новой версии Java SE 6
- Поддержка Javascript
- Webservices в SE пакете
- В Java SE включены JDBC+JavaDB(оказывается это бывший Informix!)
- Компиляция в динамике — 3.5x Jasper (ох, помню я эти времена компиляции, хуже — только C++)
- Pluggable Annotations — можно специфицировать процессор аннотаций на уровне конфигурации
- Развертывание (Deployment) — быстрый старт, определение платформы, частичная загрузка (Это кстати всегда было самым узким местом Явы для веб-приложений, хорошо что это поняли и начали двигаться в этом направлении)
Также хорошо понимают важность скриптовых языков (Ruby + Jruby + RoR)
- Cкриптовые языки — средство быстрого программирования
- Утиная типизация: If it walks like a duck, talks like a duck, then we can treat it like a duck. Определяющим является имя и сигнатура а не интерфейс.
- Гибкость и динамизм — все есть объект, вызов метода = передача объекта-сообщения объектом-отправителем объекту-приемнику.
Несколько слов о Java DB
- Может быть как сервером так и встраиваемой
- Простая, быстрая
- Поддержка двухфазных комитов (XA-driver)
- JDBC type 4 driver
- Управляется через jmx может стать управляемым компонентом сервера приложений
- Восстановление после сбоев, шифрование
Общий тренд
- Программирование стремится к упрощению, разделению на ортогональные, не связанные между собой аспекты (тут рекомендую для прочтения Redundancy vs dependencies: which is worse?)
- Декларативные элементы — аннотации
- Скриптовые языки
- Функциональные языки
- Less coding, less configuration, more conventions
А напоследок Александр оставил
Немножко приятного
Приятное заключалось в мини-устройстве Sun SPOT, которое наглядно демонстрировали в Питере:
- Sun Small Programmable Object Technology (SPOT)
- Sun SPOT device (180mhz, 512k, 4m)
- Sun SPOT development kit
- Объектный интрефейс к железу
- Модульная структура
- JRE on Hardware, no OS
Александр рассказывал как на основе этого устройства демонстрировали синхронное управление скелетом робота. Хотелось бы увидеть это вживую )
А я нарыл видео об использовании этого устройства —
 spider spots
spider spots Cайт Sun Tech Days Spb 08
Cайт Sun Tech Days Spb 08Заключение
Вот такая вот была JUG Херсон =) https://jug-ks-ua.dev.java.net/
https://jug-ks-ua.dev.java.net/ http://www.developers.org.ua/archives/cb/2008/07/22/jug-kherson-2/
http://www.developers.org.ua/archives/cb/2008/07/22/jug-kherson-2/Возможно, попаду сюда еще раз (когда они переименуются в
 CakePHP User Group ;) )
CakePHP User Group ;) )Последние комментарии:
| коммент | Felix | 
|---|---|
| Да, согласен кода было в докладах много. Главная проблема в том, что мало кому это доступно в Херсоне. Программы в университетах не предусматривают подготовку именно девелоперов. Ну и пусть. Главное свои же потом понты гоняют тип датаарта и ежи с ними. | |
| Дмитрий Решетник | |
| Спасибо за комментарии к моему докладу. Немного непривычно было находиться «по ту» сторону аудитории. Буду учиться на своих ошибках :) | |
| Re: Alexander Cherednichenko | Автор | 
| Ну как бы я в общем-то не такой уж далекий человек от программирования чтобы не понимать что такое шаблоны в том же С++ (смею заверить, я даже как-то давно писал реальный код их использовавший) Но, речь о том что доклады все-таки надобно делать с куда-меньшим кол-вом кода и куда большей концентрацией на идеях и сути =) так что пожелаем Диме в следующий раз более удачно выступить =) | |
| Alexander Cherednichenko | |
| Мне понравилось как написано ревью. На самом деле, специфические языковые, и технологические средства, вроде шаблонов, помогают значительно облегчить жизнь программистам, и знать о них надо обязательно. Тут вопрос в том что всем надо знать не о синтаксисе шаблонов java/c++ а о парадигме обобщенного программирования, которая находит свое решение в С++ в виде template, в .net в виде system.collections.generic (или как его там), и в java в виде нового java.util. То есть об обобщенных контейнерах, алгоритмах, а так же о том зачем они нужны и что с их помощью можно делать. Доклад Димы был ориентирован скорее на людей, со всем этим знакомых, так что не думаю что все так плохо. Надеюсь, мы продолжим сеансы общения в подобном формате – я думаю, они приносят только пользу :) Спасибо. | |
| Малышев Кирилл | |
| Да, согласен, над публичными выступлениями Диме Решетнику надо ещё работать, но он ведь этим как аз и занимается :) Самый лучше способ научиться – делать это. Несмотря, что его доклад был несколько сумбурным и не всё он объяснял наиболее понятными словамипримерами, я думаю, этот доклад будет полезен прежде всего для него самого. | |
Обсудить (комментариев: 6)


