Андрей Друченко
Вторая встреча Java User Group Херсон
Волею судеб меня занесло в славный город Херсон, где я впервые попал на местную девелоперскую тусовку. Честно говоря, вначале я был несколько предвзятого мнения о предстоящем мероприятии, ибо- Провинция
- Java — это не мое, и местами меня сильно от нее тошнит (поскольку я занимаюсь вебом, а Ява для создания веб приложений — сакс)
- Заявленные темы не вдохновляли
Но, на мое удивление мероприятие прошло весьма весело и продуктивно =) Познакомился с парой интересных людей, фамилий некоторых не знаю, надеюсь они засветятся в комментах.
На Херсонский JUG были заявлены следующие доклады
- Александр Чередниченко расскажет о конференции Sun Tech Days 2008
- Владислав Круглик обрисует типичную архитектуру Web 2.0 сервисов
- Дмитрий Решетник поведает о generic классах Java и шаблонах C++
- Вадим Хохлов расскажет об интернационализации приложений Java и C++
Итак, начнем разбор полетов.
Как Владислав Круглик обрисовал типичную архитектуру Web 2.0 сервисов
Владислав Круглик, вообще говоря мой коллега, и мягко говоря довольно отдаленно и расплывчато обрисовал архитектуру веб-приложений. Видно было что перестарался с желанием не выдать корпоративных тайн :) Оговорюсь, что Влад был из Postindistria а конференция проводилась на вражеской территории компании 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?
Статический контент
- Использование «легких» веб серверов (например 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
Идем дальше — следующим докладчиком был Вадим Хохлов, который рассказал о
Интернационализации приложений Java и C++
Несколько выдержек из тезисов Вадима.
Internatiolization (i18n) — процесс адаптации продукта к языковым и культурным особенностям (перевод интерфейса)
Механизм i18n должен:
- быть удобным для пользователя (скорей всего, имеются в виду пользователи составители переводов)
- не требовать перекомпиляции при добавлении перевода
- быть нетребовательным к ресурсам
- быть удобным для разработчика приложения
Варианты механизмов i18n
- не поддерживать i18n (а что, забить — тоже всегда вариант:)
- для каждого языка — свой исполняемый файл (пусть горят в аду злобные копипейстщики!)
- ini-файлы
- GNU gettext (конечно же опенсорс рулит, и дальше Вадим будет говорить именно об этом решении)
Далее, Вадим привел несколько примеров использования базовых возможностей GNU gettext в С++/Java приложениях.
а также немного коснулся темы поддержки множественного числа. На самом деле очень жаль, что так мало уделили этому внимания, ибо о базовой функциональности gettext знают почти все, а вот о реализации множественности, поддержке цифрового вывода в разных языках и прочих тонкостях — знают далеко не все.
Если бы я докладывался на тему gettext я бы как раз сфокусировался на более продвинутых фичах gettext нежели базовый перевод.
Также странно, что Вадим не упомянул о l10n (localization) которая обычно идет в связке с i18n. Это конечно немного отдельная тема, но тем не менее про вещи типа поддержки культур с письменностью справа на лево(привет 8200) было бы интересно услышать.
Я сразу заподозрил в Вадиме опенсорс евангелиста =) и оказался прав.
Материалы доклада интернационализации приложений 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
Cайт Sun Tech Days Spb 08
Заключение
Вот такая вот была JUG Херсон =)https://jug-ks-ua.dev.java.net/
http://www.developers.org.ua/archives/cb/2008/07/22/jug-kherson-2/
Возможно, попаду сюда еще раз (когда они переименуются в CakePHP User Group ;) )
Последние комментарии:
коммент | Felix |
---|---|
Да, согласен кода было в докладах много. Главная проблема в том, что мало кому это доступно в Херсоне. Программы в университетах не предусматривают подготовку именно девелоперов. Ну и пусть. Главное свои же потом понты гоняют тип датаарта и ежи с ними. | |
Дмитрий Решетник | |
Спасибо за комментарии к моему докладу. Немного непривычно было находиться «по ту» сторону аудитории. Буду учиться на своих ошибках :) |
|
Re: Alexander Cherednichenko | Автор |
Ну как бы я в общем-то не такой уж далекий человек от программирования чтобы не понимать что такое шаблоны в том же С++ (смею заверить, я даже как-то давно писал реальный код их использовавший) Но, речь о том что доклады все-таки надобно делать с куда-меньшим кол-вом кода и куда большей концентрацией на идеях и сути =) так что пожелаем Диме в следующий раз более удачно выступить =) |
|
Alexander Cherednichenko | |
Мне понравилось как написано ревью. На самом деле, специфические языковые, и технологические средства, вроде шаблонов, помогают значительно облегчить жизнь программистам, и знать о них надо обязательно. Тут вопрос в том что всем надо знать не о синтаксисе шаблонов java/c++ а о парадигме обобщенного программирования, которая находит свое решение в С++ в виде template, в .net в виде system.collections.generic (или как его там), и в java в виде нового java.util. То есть об обобщенных контейнерах, алгоритмах, а так же о том зачем они нужны и что с их помощью можно делать. Доклад Димы был ориентирован скорее на людей, со всем этим знакомых, так что не думаю что все так плохо. Надеюсь, мы продолжим сеансы общения в подобном формате – я думаю, они приносят только пользу :) Спасибо. |
|
Малышев Кирилл | |
Да, согласен, над публичными выступлениями Диме Решетнику надо ещё работать, но он ведь этим как аз и занимается :) Самый лучше способ научиться – делать это. Несмотря, что его доклад был несколько сумбурным и не всё он объяснял наиболее понятными словамипримерами, я думаю, этот доклад будет полезен прежде всего для него самого. | |
Обсудить (комментариев: 6)