Sunday, November 04, 2012

Socket.IO for Erlang

I have created new Socket.IO 0.7+ compatible  server for Erlang. The server supports long-polling and websocket transports only. You can fork it from github.

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.

Thursday, June 28, 2012

Drink Adventure Game!

The best remedy against boredom at a party - Drink Adventure!!!! Try and enjoy! The best application for Friday!

Friday, May 04, 2012

Russian Roulette Pro on Kongregate!

Free Russian Roulette online game on Kongregate. Play and enjoy!

Tuesday, January 03, 2012

How to create typed AS3 objects from JSON

JSON is very simple and convenient format for communication between Adobe Flash/Flex client and server side. as3corelib library contains class for JSON deserialization from String to Object. It's not good idea to use simple Object because you cannot use Bindable tag in Flex application. Re-factoring will be nightmare for you without typed objects. To solve that problem I created util class to convert Object into typed one. Source code you can see on gist: I have class with two attributes: data and type. Type contains information about data. For example, if type equals "user" it means that data will contains object of UserVO class.
public class MessageVO {
    public var type:String;
    public var data:Object;
public class UserVO {
    public var id:Number;
    public var nickname:String;

To convert object into typed object you should execute the following code:

    var object:* = Converter.convertData(jsonObject, UserVO);

In my project I use dictionary where key is type (string) and value is class. For example:
    var typeToClassMap:Dictionary = new Dictionary;
    typeToClassMap["user", UserVO];
    typeToClassMap["chatMessage", ChatMessageVO];
    var jsonObject = JSON.decode(jsonString);
    var object:* = Converter.convertData(, typeToClassMap[jsonObject.type]);

object variable will contain typed object converted from jsonObject.

How to make release without erts

Erlang OTP has very interesting thing like release. You can upgrade or downgrade your application in real-time. Release contains erts. It means that your release will contain erlang package. If you builds release with ubuntu 10.10/64bit then you cannot use release in archlinux/32bit because of binary incompatibility. Sometimes it's a big problem. I have found way to remove that disadvantages. I modified standard node startup script and created makefile to make package archive. The example you can find in my github project ( Folder release contains bin and etc sub-folders. "bin" sub-folder contains startup scripts (node and nodetool), "etc" sub-folder contains standard  configuration for prod and dev environments (app.config and vm.vargs). Take a look at node shell script. You should replace ERTS_PATH on your real erts path and STARTUP_MODULE on your startup module like To build package you should run "make package_dev" for dev environment. The package will be in root project folder (example-prod.tar.gz). To run application you should extract package (or use existed target folder) and execute from shell "node console" script. You also can see all available options if you run script without arguments (). There is no problem to run package on other operation system now. I haven't tested upgrade and downgrade release because it was not necessary for my project.