Archive for October, 2012


I like to do the difficult ;-)

One nice feature of the coming iPhoneversion of RF is that the chat now supports Unicode characters, meaning that you will be able to write emojis and other emoticons and symbols in messages.

This is all nice and dandy but what can we do about our fellow Android users? Emoji is mostly an iOS feature and has only become available in later versions of AndroidOS. And to make things even more difficult there’s actually two versions of Emojis for iOS. One older where Apple made up their own standard and then the Unified standard which became available in iOS5.0.

This means that for the majority of the Android users, these icons will only show up as questionmarks or strange square symbols… and that’s not so much fun, right?

But I do like to do the difficult 😉

So now I have created some very nice code for the Android which makes RummyFight for Android to both accept writing and reading of Emojis. Both of the old standard and the new. In fact, the app now supports as many as 938 different icons and that should be enough for most users.

I’m happy with the result! Now RummyFight really is up there with the “big boys” since Emoji support is very rare as it is.


There’s so much more

When creating an app like RummyFight, there are a lot more involved than just the app. I mean, somewhere all the fights must be stored, something must start new fights, end those where players are excluded etc etc.

To make sure RummyFight will work for both Android and iPhone at the same time, lots of things have had to be adjusted or rewritten on the server too since the two operating systems work not alike in many aspects. But anyway, I thought this might be a good time to explain how RummyFight is built. Maybe to inspire others to create other good apps.

So at the very bottom we have the main server. Let’s call it the Lobby server. It has a big database with all the players, info about running fights, statistics and everything. However it has no knowledge at all about the fights themselves. This info is stored on any of the Fight-servers. This means that in most cases you are connected to one server when you are in the Lobby and you are connected to another server when you are inside a fight. I chose this approach since it means we can add new servers to increase performance and allow the Lobbyserver to focus on what it does best.

On the Lobbyserver there is a cute little service running called RummiDaemon. It’s responsible for pairing players, populate fights with opponents, start fights, exclude players due to timeout, end fights and calculate statistics and rankings. This little cutie is actually written in the ancient language of Visual Basic 6. Why, you ask? Well, simply because I like it and there’s no need for speed in this service. It rests most of it’s time anyway and comes alive only every 15 seconds for about a second.


Then there’s another server running two important services: The RummiPusher and the RummiChat.

The RummiPusher is the one sending out the notifications to all players telling them it’s their turn, that they have received a new chat message, that they have an invitation, etc. It was up until a few days ago also written in Visual Basic 6 but lately the new RummiPusher written i C#.NET is responsible for all notifications. This new version can handle both Android and iPhone push notifications so that’s why it had to be completely rewritten before the release of the iPhone-RF.


The RummiChat is the little workhorse responsible for all the chat messages and update messages sent. When the app is started, it connects to this server and keeps it’s connection alive until the app is closed. At all times we are able to see how many players that actually have RummyFight up on their screens and we can also see where they are in the app. It’s great informations for us since we then can focus our optimizations on where people spend most of their times. RummiChat is also the way we can tell the app to reload fight information or refresh the lobby. This is what we call “Instant Update”.
This version of RummiChat is only about 2 days old and it had to be rewritten for several reasons.
1. It was a little slow sometimes due to being single threaded and written in Visual Basic 6 (yes, I do like that language). Now the new version is written in C#.NET, is multithreaded and fast like the wind 😉
2. The old version didn’t support unicode characters which we really would like to introduce in the apps soon. This way people will be able to write emoticons in their chat messages too.

There is also yet another server involved in all this and it’s our media server where all the profile pics and themes are stored. We believed there was no need to put additional load on our main servers and network connection so we “outsourced” this server to be hosted about 500 kilometers away from us. Nothing you’ll ever notice 😉

So, now you know some more about what it takes to make sure RummyFight is running.
Have fun!


Getting close to release

It’s been quiet in the blog for a while. That’s because we’ve been busy.
Besides implementing the last features in RF-iOS, we have also managed to release another update of the Android version including a built in report system amongst several other things. I like the idea of making it EASY for users to report problems, ask questions, etc. On too many occasions I’ve seen apps with absolutely no support or customer service – and that is really bad.

So… back to the iOS-version of RF… or should I say iPhone version? You see, we will not release an iPad compatible RummyFight at the very beginning. This is simply because this would delay the release of RF another few months. Better to have it available for the iPhone people first and then release the iPad-version when we know it works and looks good.

Tomorrow we are planning on releasing the third test version to our faithful testers. This will probably also be the last test version. The next after that will be the release candidate and hopefully this is the version that will be sent to Apple for publication. The app is working fine in the tests. Almost no critical errors and the stability is nice too. We are also very proud to say that the iPhone version of RummyFight will be lots better and nicer looking than the Android version… but rest assured, as soon as the iPhone version is released, we will include the majority of the improvements in the Android version too.

And before someone asks: Yes of course you will be able to play with your iPhone against opponents on Android and vice versa. Everything is 100% compatible, including the themes so don’t worry.

We do have one concern about iPhone-RF though and it is that it will become very popular and overload our servers. We have no problems today with server load and we believe can double the existing load at least but what can we do if the popularity is even greater?

Well, we are taking measures with this too.
So in the next week we will move the RummyFight servers to a connection with 10 times the speed of today and we will also have the possibility to add more servers to our server park. At the moment there is a limit of 2 servers where they are located today, after the move it will be possible to have 10 servers active if we like. RummyFight is built for scalability and is a multi server solution already today so if we reach the glass ceiling – just add another server and double the capacity.

So there’s probably no need to be afraid at all.