I’m starting to like Skype


I’ve “always” used IM clients. I started with ICQ, switched to AIM, then MSN, then Jabber, then Gtalk and more recently Skype. I have all of them open, mostly because I like to be able to talk to everyone without forcing them to switch to something to talk to me but the main client I use, is currently Skype.

Skype is the only one client that isn’t open in any way (application and every protocols). Well I must say, they’ve released their SDK (SkypeKit) very recently (the 22/06/10). People can now build softwares around Skype. But this is not what I want to talk about.

Why I am starting to like Skype ? It’s the best around multiple computers. I can open it on Windows host, a Mac Os X host, a Linux host, and iPhone and still follow the same chat conversation without losing any word of it. What you send and received is completely synchronized between computers. This might also be the biggest drawback for some people. You have to take care of closing your session at work before talking trash about your boss.

Why I’m still not loving it ?

  • The available / away state clearly doesn’t work well. It just fails to automatically detect the available / away state. It feels like it’s a totally broken feature (and I’m not the only one who feels that way).
  • Exchanged messages sometimes have pretty important delays (something like 5 to 30 seconds).

Recycling .net objects to improve performances

C# .Net allocation and freeing system is quite efficient but when you need to create a huge number of objects, it’s just not fast enough. So what you can do is try to recycle each object to avoid to recreate them. You will then just need to set their property.

In my tests, this class reduced the allocation time from 12 to 15 times:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public sealed class Heap<T> where T:class, new() {
	private readonly Stack<T> _stack = new Stack<T>();
 
	private int _count;
 
	public T Allocate() {
                if ( _count == 0 ) {
                   return new T();
                } else {
                  --_count;
                  return _stack.Pop();
                }
	}
 
	public void Free( T obj ) {
		++_count;
		_stack.Push( obj );
	}
}

You might think that this process is really painful as you have to manually free every single objects you use. But in fact you just have to recycle most of the objects. If you forget some, that’s not really important (they will just get garbage collected).

A little TC65 development document

WARNING: All the Cinterion related content from this blog will be removed to go to the javacint wiki soon. Please get used to going there.

During the last months I spent some time writing a document on the TC65 development. It is primary aimed at TC65 project managers and developers.

This document can be considered as a draft and I’m waiting for any of your comments to fix / improve / complete it. It’s currently 40 pages long.

Here is the document. I also added it to our Cinterion TC65i page on our website.

Oct 10, 2010 : Update
I updated the document to speak about libraries and fixed some few things.