понедельник, 26 декабря 2011 г.

Java vs. Android

Мобильная платформа Google поддерживает относительно большое множество функционала Java Standard Edition. Но существуют части J2SE, которые по тем или иным соображениям не включены в Android(к примеру, java.applet, javax.print, java.awt, ...).
Итак, что же общего у Андроида и Java(сравнение с версией Java 2 Platform Standard Edition 5.0)?

Общее:

  • java.io - Файловый и потоковый ввод/вывод
  • java.lang (кроме java.lang.management) - Языковая поддержка и поддержка исключений
  • java.math - Большие числа, округление, точность
  • java.net - Сетевой ввод/вывод, URL-ы, сокеты
  • java.nio - Файловый и канальный ввод/вывод
  • java.security - Авторизация, сертификаты, открытые ключи
  • java.sql - Интерфейс баз данных
  • java.text - Форматирование, естественный язык, сопоставление
  • java.util (включай java.util.concurrent) - Lists, maps, sets, массивы, коллекции
  • javax.crypto - Шифры, открытые ключи
  • javax.net - Socket factories, SSL
  • javax.security (кроме javax.security.auth.kerberos, javax.security.auth.spi, и javax.security.sasl)
  • javax.sound - Звуковые и музыкальные эффекты
  • javax.sql (кроме javax.sql.rowset) - Интерфейсы БД
  • javax.xml.parsers - XML парсинг
  • org.w3c.dom (но не суб-пакеты) - DOM ноды и элементы
  • org.xml.sax - Примеры API для XML

Теперь о том, что не поддерживает платформа Android

Отсутствует поддержка следующих вещей:

  • java.applet
  • java.awt
  • java.beans
  • java.lang.management
  • java.rmi
  • javax.accessibility
  • javax.activity
  • javax.imageio
  • javax.management
  • javax.naming
  • javax.print
  • javax.rmi
  • javax.security.auth.kerberos
  • javax.security.auth.spi
  • javax.security.sasl
  • javax.swing
  • javax.transaction
  • javax.xml (кроме javax.xml.parsers)
  • org.ietf.*
  • org.omg.*
  • org.w3c.dom.* (субпакеты)

И наоборот:

В свою очередь, существуют плюшки, которые Андроид включает в себя, но которые отсутствуют в ствндартных поставках Java 2 Platform Standard Edition 5.0(так называемые, third-party libraries). Среди них следующее:

  • org.apache.commons.codec - Утилиты для кодировки и декодировки
  • org.apache.commons.httpclient - HTTP аутентификация, cookies, методы, и протокол
  • org.bluez - поддержка Bluetooth
  • org.json - JavaScript Object Notation

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

Оригинальная статья датирована 14 января 2008 года. Поэтому, данные могут быть не совсем достоверными. Я постараюсь по мере накопления знаний корректировать свой пост. Если что-то не так - не судите строго) Полезная критика приветствуется.

понедельник, 19 декабря 2011 г.

Пишем игру для Android с помощью AndEngine и Physics Box2D Extension

В жизни каждого программиста наступает время, когда ему надоедает писать унылые формы и обработчики и душа просит настоящего творчества.. Например, написать игру.
Давайте посмотрим, как это делается для нашей любимой платформы Android.
Всякая игра базируется на наборе логики, которая реализует поведение игровых объектов на экране, т.н. "графическом движке". В комплексе с этой логикй работает игровая физика, "звуковой" движок, и масса другого, очень непростого кода. Если у нас нет лишних полгода жизни или полмиллиона баксов, лучше не пытаться реализовать эту логику самому. Благо под Android создано уже несколько достаточно мощных "двигателей". Один из них мы сегодня и применим. Это AndEngine - свободно распространяемый 2D игровой движок, базирующийся на OpenGL.
Чтобы было интереснее и ближе к "жизни", мы используем в нашем приложении расширение Physics Box2D, которое позволит нам реализовать в игре гравитацию. Наша игра будет простой но вполне играбильной: мы будем складывать конструкции из деталей, которые будут появляться "из воздуха".
Итак, приступим.

понедельник, 12 декабря 2011 г.

Работаем с очередью RabbitMQ в java


Ничто так не помогает справиться с нагрузкой на web-приложение, как асинхронная обработка. Можете это цитировать :)
Одним из лучших решений для организации очередей сообщений для асинхронной обработки является на сегодня RabbitMQ. Тут я опишу как без особых проблем установить и задействовать в своём java-проекте этот замечательный инструмент.

Итак, устанавливаем:
  1. sudo aptitude install erlang
  2. sudo aptitude install rabbitmq-server
Готово.

Для работы с сервером очередей нам понадобится официальный java-клиент RabbitMQ. Берём его отсюда.
Из архива понадобится "rabbitmq-client.jar" и "commons-io-1.2.jar".

Теперь перед нами стоит классическая задача: реализовать передачу сообщения от одного java-приложения другому. При этом выключение получателя не будет приводить к потере сообщений: пока их не обработают RabbitMQ позаботится о их сохранности. Также мы реализуем многопоточную обработку сообщений получателем. Уверен, что это потребуется, ведь в реальных задачах время обработки сообщения существенно превышает время отправки.
Итак, приступим: