Archive Page 3


Finally time for a new iOS version!

It took a while but now I am finally finished with an update for iOS. Up until now the latest version for that OS has been v1.46 and the Android people has had v1.48 to play with for quite a while. Now this can’t go on for too long and about 10 minutes ago I submitted the new version to iTunes.

It’s not v1.47.
It’s not v1.48.
It’s v1.49.

Yes, it’s true. For the first time in RummyFight’s history, the iOS version will be ahead of the Android version.
Why? Well, they’ve been waiting so long (more than 2 months now) and I feel it’s time for them to be in the front line for a while… at least until I have implemented the same functions in the Android version too.

So what’s new then?
Hmmm… let’s take a look at the Lobby for a start.

Screen shot 2013-04-11 at 16

Can you see what language it is in?
Yes, it’s true. The iOS version is finally localized too. Now it supports English, Swedish, Dutch and German which is autodetected based on the device’s settings. However it can also be overridden in Settings to be any of the four languages supported.

Also visible in the Lobby is the clock in the middle. This is added on popular demand. Seems lots of people spend a lot of time in the app and like to be able to see what time it is without having to leave the app. So… here you go. A clock showing the local time in the local time format.

So… what’s new besides this then?
Well, Tetpuz has had it’s graphics improved and also the bomb added. Bomb, you say. What’s that? Well, place it and tap it and you’ll see.
Then we have the Tutorial which is improved with some new slides and texts.
Then we have a couple of improvements and bug fixes. One of them was that the app sometimes could crash when leaving a fight. Fixed now.
Then there was a bug that showed the wrong creation time at newly created fights. Fixed now!
Another bug that didn’t show the FightText in the invite dialog – Fixed!
Improved error handling when trying to display a broken theme or profile pic. Shouldn’t crash the app anymore.
A small bug that showed the wrong space used in the Clear Cache dialog – Fixed!
An even smaller bug that sometimes didn’t put the name of the player in turn in bold text – Fixed.

And lots of text improvements here and there and other stuff too of course.

So, when will this v1.49 for iOS be available?
Well, we need to give the guys and girls at Apple some time to review and approve the update first. This normally takes about 4-7 days so hopefully it will be downloadable from App Store during the next week or so.

And what’s next then?
Well, the Android version will be v1.49 too soon. Then I will probably release a free ad-based version for iOS too.
After that… it’s time for Tournaments.

Keep your eyes up… and have fun!


Yes, I am still alive ;-)

I’m well aware that I’ve been quite absent lately. I’m sorry for this. However I’m not dead, I’m not exhausted, I’m not sick, I’m not tired of RummyFight… yet.

The simple reason for my absense is personal. I’ve gone from being a single father of two kids to be a father of two kids living with Messer, the love of my life. To move all her furniture into my apartment and integrate both our lives took a few weeks and because of this, RF development had to be paused.

But don’t fret. I HAVE been working on RF a little during these weeks too but not at the normal pace. However since today I feel I’m back in the saddle again and v1.48 of RF for iOS is almost ready now, including bug fixes, language localizations and physics handling in Tetpuz. In parallell I’ve begun working on v1.49 for Android which will be the last update before v1.50 where I plan to have added Tournaments.

The localization of the apps to support multiple languages was really a tough nugget to pull off. I had to develop several tools just to make sure everything always is synced correctly even though Android and iOS handles localizations differently. But now both versions compile with my new tools and the upside is that the german language also will be supported from the next release.

So just sit down and relax for a while. Soon everything will be back to normal again… with a developer that’s just a litte more a happy puppy.

By the way: On popular demand 😉
Here is my developer’s desk. This is where RF is created. This is where the magic happens!



Sometimes I make myself happy

One challenge with RummyFight is to constantly optimize the servers. Since there is an increase in both players and playing there will sooner or later be a limit of what the servers can cope with.

At the moment that limit is still pretty far away but I rather spend some time with it now because I want that to do it later because I must.

So what can be optimized then? Well, even though things are pretty fast as they already are there’s always a few milliseconds more to tweak out of the system here and there. My focus lately has been on the “FetchLobbyFights”-routine which is called pretty often by the apps. As a matter of fact, it’s called about 10 times a second at peak time which means that if I can optimize it a little it might make a good difference after all.

So… up until now, the FetchLobbyFights has been a combination of three database calls and some post processing logic. 10 calls a second * 3 = 30 database operations per second and that’s a bit too much according to me. Also, each fetch took about 110ms to make meaning that every minute there’s been about 66 seconds of work for the server (many of them in parallel though)

But with some clever coding I’ve been able to reduce the database calls to ONE per fetch and now the call takes about 67ms instead. This means a reduction of database operations of 2/3 plus a reduced workload of 39%. That’s a lot! And besides making fewer database operations, the one remaining is also a lot friendlier to the database since the sorting is made in the apps afterwards, not in the database (outsourcing the work, anyone?)

And I do like the size of the database query now too 😉

SELECT d1, d2, d3, d4, d5, d6, d7, d8, d9, p1.d10, p2.d10, p3.d10, p4.d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20, d21, d22, m.d23, d24, d25, d26, d27, d28, m.d29, m.d30, p1.d31, p2.d31, p3.d31, p4.d32, d33, d34, p1.d35, p2.d35, p3.d35, p4.d35 FROM TABLE1 m join TABLE2 p1 on abs(d1)=p1.d1 join TABLE2 p2 on abs(d1)=p2.d1 join TABLE2 p3 on abs(d1)=p3.d1 join TABLE2 p4 on abs(d1)=p4.d1 join TABLE3 on d2=pk_d2 WHERE (abs(p1.d10)=d1 OR abs(p2.d10)=d1 OR abs(p3.d10)=d1 OR abs(p4.d10)=d1)

All row and table names have been changed in the above query so there’s no use for you to memorize anything. Just wanted to show that I find it amusing that a query with 5 JOIN and a WHERE with mathematical operations can be as fast as it is.

And now… back to the app 😉


Some fun numbers

While working hard on the iPhone update of RF to make it v1.48 too, I thought it could be fun to publish some numbers about RummyFight, since they are, in some ways, pretty impressive. At least I think so 😉

So first off, how many people are playing RummyFight?
Well, it’s a difficult number to define. One day there could be X people playing. The next day there could be the same amount but totally different people. Since there can take 72 hours between melds in a FourFight you don’t need to check in every day if you don’t like. But we have defined “active player” as someone starting the app at least every three days and at the moment there are about 22.000 people doing that. If we would increase this to a week, there are almost 40.000 different users playing. What we also know is that these numbers are growing. Every week the “active users number” are increasing which means that not only are new players discovering RummyFight but the old ones stay too.

How many fights are being played
We are getting close to 15.000 running fights at the moment but there are more fights being started than ended every day so it’s a growing number too. You must take into account that some fights last for weeks and some are finished within 30 minutes. Some fights are between two players and some are between four so it’s not as easy as saying 15.000×2 = 30.000 active players either.

How many melds are being done every day
Now this is an interesting number. A meld is when someone makes their move and is a good estimate of how much RummyFight is played. I like this measurement since there are other Rummikub apps out there bragging about having 100.000 active fights. However what’s the use when people only make a meld a week due to slow gameplay? I mean, it’s not the amount of fights or players that are important. It’s how much you PLAY.

Yesterday we scored an all time high with juuust short of 180.000 melds being made during 24 hours. That’s 2 melds every second around the clock. What makes this even more impressive is that 70% of those melds were made between 4pm and 11pm (swedish time) which means that during those hours there were 5 melds being made EVERY SECOND. But yesterday was an all time high. Normally there are about 140.000 melds being made every day, however this is also a number that’s increasing. Just two weeks earlier the average was 127.000 melds per day.

How many data requests are being made every day
Every day? Let’s focus on every second instead. I mean, a meld is one request. A Login is another. Then you have “get bookmarks”, “refresh lobby”, “create fight”, “open fight”, “send gift”, “change settings”, “get statistics” etc etc. There are A LOT of requests from the apps to the servers. At peak times about 200 requests… PER SECOND… which makes the very rapid response times from our servers even more impressive.

So what are the response times then?
Well, it depends on the nature of the request and the amount of data being involved and one need to remove network latency from the factor too. I mean, if you are using a slow mobile connection, it’s not the server’s fault it takes a second or two. The servers were done quickly but then it took the data a while to get to you. Also, some data takes some time for the phone to process and update the interface with too.

However, the average response time of the servers, when not including the time for transferring the data or parsing by the phone, is about 70ms. That’s LESS than 1/10 of a second for fetching active fights, creating new fights, making a meld, etc. That’s faaaast.

How much is people using the chat?
Pretty much actually. Since it was implemented in RummyFight there has been 894.146 chat messages sent.

How much is people playing the hidden game of Tetpuz?
Don’t really know. What we do know is how many Tetpuz games that are finished and scores being sent to the server and that is 865.807 so far.

So what can we expect in 6 months?
Going by the constant increase of new players, increased playing and bigger popularity, probably servers with smoke coming out of them 😉


More improvements to come

New year. New challenges!
We are still not done with RummyFight, you know. We are still improving it, piece by piece.

In the next few days there will be a new version for Android available. A couple of days after that the iOS update will be released too. So what have we done then?

Well, there are two major things changed:
1. Dramatically improved graphics for the Android version when using large screens or tablets. Trust me. This will be noticeable. One can almost call it a HD version.

2. Localizations. Yes, finally RF will be available in other languages than english. The Swedish and Dutch translations are already finished and there are Spanish and German on the way. Hopefully we will get them in time for the release.

But wait… there are other improvements too. Like the ability to select your own notification sound, to have text auto correction on or off in the chat, bombs in Tetpuz etc etc.

This will be a really nice update which hopefully will be the last one before putting our teeth into Tournaments. I’m really looking forward to this.

Here’s a screen cap of the new graphics. The new one is on the left and the old one to the right. Click on the picture to get it in full size and then you can really compare. Look especially on the rounded images or the logo.



Santa heard me

Just a day after my last post, version 1.46 for iOS was finally released at App Store.
Oh, the joy.

Thanks Santa


Dear Santa

Dear Santa. All I want for next years christmas is that Apple finds a way to speed up their approval process of apps and that they for once begin to care about their developers instead of closing down the whole approval process between the 21st and 29th of december every year.

Version 1.46 of RummyFight has now been released to both Android (Google Play and Amazon App Store) and iOS (Apple AppStore). This is the results so far:

Google Play: Approved and available after 50 minutes
Amazon: Approved and available after 4 days
Apple: They haven’t even begun looking at it and it’s been 7 days now.

So dear Santa. Please send some of your elfs to Apple to help them out during 2013 because I really would like them to shorten their review times to 0-2 days because that is the reasonable time it should take to approve an update for an existing app.

7 days and counting and since Apple has closed their submission and approval portal until the 29th of dec, it’s very possible that v1.46 for iOS will not be available until next year.

Thanks Santa.


New Android version coming up

The work on v1.46 for Android did go a little faster than I thought so I will be releasing it later today. I even managed to get some other stuff in there too. So here goes:

* Added support for tilesets. To be used (in the future) in themes but at the moment, only we can change tilesets
* One alternative tileset added and activated
* Added another seasonal joker to be activated at the right time
* Support for Draw in a fight, which happens if all active players make a pass two times in a row.
* New gift: CleanUp. To be sent to those incapable of placing tiles at the recommended positions
* You can no longer GoOutWithABang in a fight, meaning you need to make your opening meld FIRST before finishing the fight. (Hoarders will hate this). Exception: You are allowed to GOWAB if you do it during the first 10 rounds of the fight
* TetPuz now stores it’s state after every move which makes it possible to leave a current game and continue when back… or continue if the app crashes.
* TetPuz is now running in full screen (no statusbar) and notifications are shown on the infotext area instead

* Adjusted the color of the tiles just a little for dim screens
* New design of the EndGameDialog backgrund

* TimeLeft-circle now updates in still active fights where YOU are excluded
* ChangeName in Settings could sometimes fetch cached information instead of the very latest
* AND FINALLY: Notifications work again on the free version

The new version will probably be available in about 5 hours. Need to go X-mas shopping for the kids first. Happy 21’st of dec. We are still alive and as long as we are, I will keep on improving RummyFight for you.



Time for an update

Been working quite hard the last week or so with the next version releases for both the iOS and Android versions. At the moment, version 1.45 is available for Android but only v1.41 for iOS. Now, this is not as dramatic as it sounds since v1.42 up to v1.45 for Android are quick releases with improved graphics but we would like both the version numbers and the functionalities to be as close as possible.

So, today I have sent v1.46 for iOS to Apple for approval. This will probably take about a week before it becoming available for download. During that week, I will work on the same version for Android which then will become available at about the same time since it takes about 15 minutes for Google to make an update available for download.

So why not release v1.45 of the iOS-version instead and have them using the same version number?
Well, we could do that but we also like to put new stuff into each release so the new iOS version is actually ahead of v1.45 which makes it incorrect to name it v1.45.

So what will be new in v1.46 then? Well, this is implemented already in the coming iOS-version and will be put into the coming v1.46 for Android too:

* Added support for different tilesets. This will in the future be used for user designed tiles but at the moment only we can switch between different appearences of the tiles.
* Added a tile counter inside the fights showing the number of tiles on the rack
* Added a Clear cache button in Settings to be used by those with limited space on their devices
* Tetpuz now stores the game after every move, meaning you can leave a game and continue later. This also means that if your device or app dies, you won’t lose your game.
* Added possibility to search for players based on blocking
* New gift in fights: CleanUp! To be sent to those incapable of placing tiles at the preferred locations
* Added support for Draw in fights which means that if all active players make 2 pass in a row, the fight is finished and all active players receive 0 points as prize.
* Added two new seasonal jokersets to be activated by us at holidays
* You are no longer allowed to finish a fight before having made your initial meld so all hoarders will cry now since they MUST open first and THEN finish. Exception: You ARE allowed to finish before making your first meld if it happens within the first 10 rounds.
* Added an information text at the bottom of the Settings

* Now disabling the Accept button in the Invite dialog when it’s pushed to prevent double push
* Active fights where you are excluded are now sorted in the column to the right in the Lobby
* Rewrote the redraw routine in the Lobby which means significantly faster updates (not refresh)
* When sorting tiles in a fight, only one click sound is played instead of 15 at the same time
* When exiting the app and quickly starting it again, the lobby is not refreshed anymore.
* When manually refreshing the Lobby by clicking the R in the logo, the titles in the lists are removed too.

* Long country names no longer continues outside the dropdown box
* If the very last thing happening in a fight was sending a gift, a DoubleTapFastForward didn’t show the endgame dialog

Several of these already exists in v1.45 for Android but the rest (and a fix for notifications) will be included in v1.46.

And if you don’t hear from me again in a few days: Merry Christmas to you all

_iOS Simulator Screen shot 19 dec 2012 13


iOS Simulator Screen shot 19 dec 2012 13


Improvement of chat stability

It’s become evident lately that it is difficult to get the chat server to be 100% stable. This is due to all spywares that portscans and sends strange packets of information on all open ports in the world. This includes the port where the chat server is listening to incoming packets of chat data from the RummyFight app. I’ve tried to add filters, examining incoming data etc etc but it’s almost impossible to be protected against anything that might arrive, leading to the server acting strange.

I mean, it would be easy if it just died. In those cases it’s automatically restarted again. The problem is that I sometimes have woken up in the morning only to find the chat server looking 100% visually but not working properly logically. This has happened about 2 times last week and it’s at least once too many.

So I thought like this: If the most important task of the server is to accept incoming messages and respond accordingly, why not make a thin little client that sends a message to the server every 60 seconds? If no response has arrived within 10 seconds, then it’s likely that the server is down which means it’s restart-time.

So since about 15 minutes, the WatchDog is running on the chat server. This means that if the chat server ever is acting up in the future, this will be detected within 60 seconds and the server is then back online.

So now I can sleep again at nights 😉