Встречи Scala программистов в Москве

Для меня Scala не "абстрактный сферический конь в вакууме", а язык, который я использовал в нескольких реальных проектах в течение последних трех лет. Хочу сразу отметить, что мы не использовали никаких скала-фреймворков - лифт, скалаторы и прочее. Во-первых не было необходимости, во-вторых можно без особых усилий писать на scala и использовать только обычные java-фреймворки.

Кроме программирования на Scala в 2010-2011 я вел курс по выбору в МФТИ "Практикум по программированию на Java и Scala". В результате у меня наработался некоторый объём дидактического материала.

В итоге летом 2011 года мы с друзьями решили организовать в Москве независимые регулярные встречи Scala программистов.
Под "независимыми" имеется в виду - без патронажа каких либо коммерческих организаций жадных до денег или мозгов программистов.
Регулярные - старались встречаться каждую неделю, но естественно были перерывы.
Формат встреч самый простой - собираемся и решаем небольшие задачки на Scala.

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

Один человек притаскивал ноутбук (как правило это был я со своим 17'' HP).
Выбирали одну задачку на всех, она разбивалась на несколько кусочков.
Главное условие - каждый должен был написать хотя бы несколько строк кода.
Если не успеваем решить - переносим на следующую встречу.

Также кто-то на встречах рассказывал про свой опыт использования Scala у себя на работе или какие-то интересные аспекты языка.
В качестве источника информации использовали в основном стандартную документацию по API, мои презентации к физтеховским семинарам,
и книжку Мартина Одерского "Programming in Scala", которую мне подарил Коля Матюшев (книжка на английском, он ее купил когда работал в Лондоне).

Некоторые задачки которые мы решали на наших "семинарах":

  • Рисовалка Мандельброта
  • Разные фракталы на L-System-е
  • Игра жизнь
  • Решалка судоку

Места в которых проводил занятия (в хронологическом порядке):

  • КофеИн
  • Шоколадница
  • Кофе-Хаус
  • Му-Му

Думаю станет чуть потеплее и мы продолжим (а может и раньше).
Кто был на встречах: Валерия Ива Виннер, Серж, Артур, Ник, Миха, Вит.
Прошу прощения если кого-то забыл. Буду рад новым встречам!

Другой способ защиты

На этой неделе друг со старой работы написал про свой способ защиты java проектов.
Около полугода назад я писал про то, как прятать строки в properties-файлах с помощью jasypt (EncryptableProperties и защита от дурака).
На самом деле, все понимают, что это всего-лишь защита от самого простого случая. Например, чтобы любопытный админ заглянув в файлик, не увидел там то, что не должен знать.
Тем не менее, если есть доступ к классам, то можно jad-ом отдекомпилировать исходники и получить доступ к "запретной" информации (например оригинальный пароль, которым шифруются properties разработчиком-оптимистом).

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

Так вот, российскими программистами сделан специальный продукт для защиты java-проектов.
Ключевое в нем - AES-шифровка строк. Кроме этого он делает динамические инъекции и использует специальные механизмы, которые мешают поломать приложение через рефлекшн.
Данное решение является коммерческим продуктом.

Подробнее здесь.

Tomcat и jdbc connection pool

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

В общих чертах что такое пул.
Пул (pool) - это такой "бассейн" или "резервуар" из которого можно брать "живые" объекты для дальнейшего их использования.
В данной статье будут рассматриваться только пулы подключений к БД, но в жизни программиста могут повстречаться пулы разных объектов, например многим знаком Thread Pool.
В общем случае, пул "каких-то объектов" - это шаблонный способ решения проблемы хранения и раздачи объектов (и самое главное поддержания их в нормально рабочем состоянии).

По аналогии с бассейном, в нормальных пулах постоянно протекают некоторые процессы. Например осуществляется проверка не "протухли" ли объекты. Нужно ли создать новые? Сколько времени объекты находятся в пуле? Во многих пулах есть своя "ватерлиния" (high water mark), которая указывает на максимальный "объем" пула.

В этой статье будет кратко описан JDBC Connection Pool.
Читать далее...

Про интерфейс: Map<K,V>

Недавно от товарища пришел вопрос на засыпку: "Почему в интерфейсe java.util.Map метод get в качестве ключа принимает Object, а метод put использует женерики?"

    V get(Object key);
    V put(K key, V value);

Сходу ответить не смог, пришлось разбираться. Читать далее...

Android, RTSP и 10 секунд

Работа с мультимедийными данными в Android-е проработана довольно не плохо, но к сожалению существуют ряд определенных сложностей.
Например, для проигрывания потокового видео можно использовать VideoView или использовать напрямую низкоуровневый класс MediaPlayer.
Естественно, VideoView внутри использует тот же MediaPlayer.
Примеры работы с VideoView и MediaPlayer есть в стандартной поставке: ApiDemos
Примеры вполне пригодные для самообучения и достаточно подробные. Самое интересное возникает при работе в реальной жизни.

Например, при начале трансляции по протоколу RTSP может возникнуть более чем ~10 секундная задержка. Читать далее...

Java Zip + русские буквы в названиях файлов

Баг №4244499

Этот баг был зарегистрирован еще в 1999г.
Проблема была не только с русскими файлами, а например с французскими (как в примере).
Корни довольно глубокие и существовали серьезные (надеюсь) причины, по которым эту ошибку долгое время не исправляли. В итоге, много-много лет в Java нельзя было сделать простыми штатными средствами zip-архив, который бы содержал файлы с именами не на латинице.

К сожалению, жизнь такова, что все это время некоторых java-программистов заставляли делать такие zip-архивы. Приходилось использовать например apache-вский commons-compress.

Использовать очень просто. Алгоритм буквально в два шага: Читать далее...

Работа с Maven + Tomcat

Maven и Tomcat


Ни для кого не секрет, что maven-ом можно деплоить проекты в Apache Tomcat.
Правда многие разработчики все-таки используют функции, встроенные в среду разработки (в Netbeans - из коробки, в Eclipse - ставим плагин).
Это удобно и просто, но к сожалению, мне приходится часто "перескакивать" с разных IDE и поэтому в некоторых своих проектах я предпочитаю сразу настроить tomcat:deploy.
Читать далее...

Немного об OAuth, Android и Facebook

OAuth авторизация

OAuth - по определению означает Open Authorization. Поскольку в английском языке слова аутентификация (authentication) и авторизация (authorization) имеют одинаковое начало auth, то сокращение oauth очень неоднозначное. Эти понятия (авторизацию и аутентифакцию) очень часто путают друг с другом.
Например OpenID - это система для аутентификации.

Очень кратко про аутентификацию и авторизацию (т.к. это простые и занудные понятия).
Читать далее...

Поездка в Санкт-Петербург

Прошло уже больше месяца, с тех пор как я обещал друзьям написать про свою поездку в Питер. Было очень много разных дел по работе, в итоге только сейчас смог дописать.
Читать далее...

OrderBy или OrderColumn

Между JPA аннотациями OrderBy и OrderColumn существует огромная разница. Читать далее...