Showing posts with label java. Show all posts
Showing posts with label java. Show all posts

Sunday, July 01, 2012

Drink Adventure. Press release.


Drink-adventure is a very innovative android application for all weekends.

We are pleased to present you the mobile application that simple as vodka and reliable like AK-47. It’s a favorite game of all scientists from secret Siberian University of Dance and Social Problems. Certainly, it’s the hit of current summer, the best entertainment application for parties - Drink Adventure. Wow!
We used the best mechanics from similar games to make the game. Imagine “spin the bottle”,  “truth or dare” together then multiply two times and you’ll get the Drink Adventure game! To play you need android device and friends (from 1 to 7). The rule is very simple. Don’t forget to throw dice, perform assignments and smile. Good mood is guaranteed! Winner will get memorial and place in Hall of Fame!

Stay tuned! In the future you will get the following features:
  • standalone mode with Andrew Barman;
  • android Toaster;
  • more maps and assignments for all situations.

The game is absolutely free!
You can download the application here.
Share your ideas and assignments for maps using the official game site.

Friday, December 23, 2011

Java, Erlang and Rock'n'Roll

Есть у меня игровой проект под названием Russian Roulette Pro. Адрес Вконтакте http://vkontakte.ru/app2417844, в фейсбуке http://apps.facebook.com/russianroulettepro. Это клиент-серверное приложение. Клиент написан на Adobe Flex, а сервер на Java, используя Netty. Соединение между Adobe Flex и Java сокетное. Но как известно, много кто играет в игры из офиса, где стоят всякие прокси-сервера, которые поддерживают только HTTP протокол. Тут я решил сделать соединение long-polling. Вменяемую реализацию для Netty я не нашел, да и шибко не хотелось, поэтому решил я заюзать модный ныне Erlang для реализации long-polling соединения. Начал искать готовые решения и таки нашел: https://github.com/yrashk/socket.io-erlang. Я вначале обрадовался, что вот она рыба моей мечты, но тестирование показало, что там блокирующая архитектура, в общем решил сделать форк https://github.com/sinnus/socket.io-erlang/tree/dev. Пофиксил некоторые баги, убрал блокирующий процесс. Этот сервер использует протокол Socket.IO (http://socket.io/) версии 0.6. Готовый клиент существовал только для JavaScript, а мне нужен был Adobe Flash клиент. Долго думать не стал и запилил клиент для флеша: https://github.com/sinnus/socket.io-flash. Он поддерживает long-polling и Websocket. Websocket, конечно, работает через сокетные соединения со всеми вытекающими последствиями, как настройка отдачи полиси через сокет. Я в своей рулетке решил воспользоваться только long-polling. Теперь встал вопрос, а как же все это дело прицепить к существующему серверу? Не выбрасывать же существующий код на джаве, не для того он писался, чтобы его выкидывать на помойку! Решение было простое - сделать socket.io-erlang  проксирующим сервером. Клиент подцепляется к 80 порту по Socket.IO протоколу, который слушает erlang. Erlang процесс создает сокетный коннект к Java серверу и затем редиректит сообщения от клиента на Java сервер. В общем, получился такой nginx в мире long-polling - socket. Решение уже работает несколько месяцев и пока проблем не было. Протестировано под всеми браузерами, полет тоже нормальный. Как говорится, Erlang your penis!

Thursday, June 04, 2009

Digester, validation and XSD

How to validate XML using XSD in Digester (1.8 version)? There is no clear answer in Digester documentation.
Here you can see how to validate XML using XSD:

File xsdFile = new File(${location});
Digester digester = new Digester();
digester.setValidating(true);
digester.setNamespaceAware(true);
digester.setErrorHandler(myErrorHandler); // Don't forget to set custom error handler
digester.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
digester.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", xsdFile); // You can use File, String, InputStream, InputSource or an array of these type
digester.parse(...);