This June, I was in Seoul, Korea for the GNOME.Asia Summit, the yearly occasion to meet up with the Asian side of the GNOME community. As always, it was an awesome conference, with so many cool people. I learned about new projects like Seafile and got to meet new friends and catch up with old ones.
I’d also to thank my employer, Collabora, for sponsoring my flight and the GNOME foundation for paying the hotel.
Mark his words and laugh in two years.
Due to unintentional behavior breakage in the newest versions of GUPnP and GSSDP, the UPnP NAT traversal in all VoIP applications that use Farsight2 is currently broken. This includes Empathy, Pidgin, aMSN, etc. I advise distributors to just stay with the older GUPnP 0.16 (and GSSDP 0.10) releases until this is sorted out. For those who care, the details are on bugzilla.
Update: I’ve released GUPnP-IGD 0.2.1 that works around these problems.
Just like everyone else on Planet GNOME,
You are all cordially invited to my talk: Improving the quality of video calls on the Free Desktop. I will try to explain why Skype’s video calls look so much better than ours and what I’ve been doing to fix it, and how there is much more to do.
Now that WebRTC and RTCWeb are coming, it is more critical than ever that we can have good quality video calls in the GNOME platform so we can stay relevant.
On July 9, 2000, my first patch to a Free Software project was accepted. It was a patch to fix a small bug in GnomeICU, which was then the best ICQ client for GNOME. From there, I contributed a few more patches, then a lot more, then I re-wrote the protocol backend (to use the newer protocol) and before you knew it, I was the co-maintainer. The original author left, another maintainer joined, then left, and, in 2004, I was left as the only active maintainer. Then I lost interest and became the unmaintainer. I haven’t made a release since 2007, or written any code to justify one, so with GNOME 3 coming up, and after many years of non-maintenance, I have to admit the truth, GnomeICU, as a project, has died many years ago.
There were some changes left in the git tree, along with many translation updates, so I made a last release, for anyone who cares. To my surprise, we still get between 50 and 150 downloads per month from Sourceforge, hopefully it will be useful to some.
It was a fun project, I spent countless nights having fun programming, and I hope other did too. I learned a lot about programming, communities, etc. But more importantly, I’ve met some amazing people like Vincent Untz (rumor is that I committed his first patch to a GNOME project), Seb Bacher and even Philippe Kalaf.
After months of envy, I decided that since GNOME 3 is to be released in almost two weeks, it was time to try it out. I must say that is is pretty damn cool. Yes, it has a few annoying bugs and glitches, but nothing out of the ordinary for a first release. It is definitely going in the right direction.
That said, we’re in 2011, and it’s still impossible to use OpenGL on two monitors without tearing. How incredible is that! The thing is, my second monitor is a 50″ Plasma TV and I really hate tearing there when I watch a movie. So when I have two monitors, I want the VSync to be on the second monitor. Luckily NVidia (yea sorry) has an environment variable to select which monitor an OpenGL application syncs on, the annoying thing is that this has to be set before the application is started. So after a little messing around with Looking Glass (which is pretty amazing), I was able to set the variable into the shell and have it re-exec itself. After getting that to work, I couldn’t resist writing an extension to do it for me. Be warned that if you switch screens at runtime, you also want to apply the patch from bug #645408 for now.
Update: I’ve been informed by our very own Daniel Stone that free drivers are better and can actually do the VSync correctly.
A couple months ago, Facebook announced announced that their chat system would also be available through XMPP. So it is possible to just configure it like any other Jabber server on a N900. And then to merge Facebook contacts with other contacts and it the address book will store it as a field of type “X-JABBER”. Since the PR1.2 version of Maemo5, Nokia has added a specific profile for Facebook to the N900 software. But instead of calling the address book field “X-JABBER”, they created a “X-FACEBOOK” field (since Facebook Chat is not XMPP in the backend, it can not talk to other Jabber servers). So if you remove your old Jabber account and re-add it as a Facebook account and use Marco’s contact merger to merge back the contacts. You’re still stuck with a bunch of extra “X-JABBER” fields in your contacts. So to clean them up, I wrote a really simple program to remove them. It is based on Marco’s jid-to-email program. You can get the source code or a precompiled binary. You can just put the binary on your N900 and run it from the Terminal as “~/MyDocs/remove-old-facebook” (if you put it in the N900′s documents root). Be warned that is is not a good example like Marco’s code, I stripped all error handling and it never frees anything. If you want a good example, look at Marco’s code.
About a month and a half ago, I had a smallish bike accident, I did not have a single scratch, but I managed to fall right on my N900 and crack the LCD. So I’ve used a Nexus One as a replacement until I managed to fix the N900. That gave me a chance to compare them.
You should also know that I am entirely biaised as I was paid to make the VVoIP calling on Maemo incredibly awesome. I have no relationship with Google and they did not pay me to make their stuff awesome (so it is not awesome). The opinions stated here are mine and mine only. They are not approved by my employer Collabora, any of our clients or competitors, the Queen or anyone else than me.
I’m comparing both devices with the latest software version as delivered by their respective OTA update system. So it is Maemo 5 PR1.2 for the N900 and Android 2.1 (Eclair) for the Nexus One. I make no claim of fairness. This is not a guide to chose which phone to buy.
- Extensions: The N900 browser supports (badly) a few Firefox extensions (like Adblock Plus or Greasemonkey). That said, they’re already quite useful. Maemo +1
- Windows: Maemo 5 also handles multiple windows as regular windows, while the Android browser has them hidden in a menu. I did not discover that menu until I had a “Too many windows open, can not open new window” pop up. Also, the way “popup windows” appear in Android is really annoying, especially the fact that they are hard (impossible?) to zoom. Maemo +1
- Flash: It’s not really usable (more like really unusable). Flash video playback is really slow (since all decoding is done in software). Steve is right, Flash is a disaster on mobile devices. Maemo -1
- Text column width cheating and reflowing: The Android browser has a nice feature where it scales the width of text columns to the screen width to be nicely readable. It tends to break the layout of some sites, but it’s well worth it. Opera Mobile seems to do the same thing. But the Maemo browser doesn’t. Newer Firefox Mobile builds seem to also lack that. This means it is also unusable in vertical mode. Android +1
- Scrolling performance: The Maemo browser uses tiles for when scrolling, so if you scroll too fast, it has to work real hard to render the next tile. It was much smoother on Android. That said, I heard the Mozilla people are trying to fix this in Fennec 2. Android +1
- Rotation: The vertical mode of the Android browser just works better than the half-baked rotation support in Maemo 5. And holding it in one hand is much easier if its vertical. Android +1
Browser totals: Maemo 1- Android 3
Contacts & IM:
- IM protocols: Android only supports Google Talk out of the box, while Maemo supports Skype, SIP and XMPP (including Google Talk) right of out of the box. And it is easy to add 3rd party support for other protocols (MSN, Yahoo!, etc) and it integrates fully into the existing system. Maemo +2
- SMS/IM integration: SMS and IM are entirely separate in Android, but they are the same app in Maemo. Maemo +1
- Metacontacts: Both platforms have metacontacts. Sadly, they are both incomplete. Contacts in both platforms include the basics: name, nickname, phone, email. Maemo can also link contacts from all IM accounts together, while Android only does it for Google Talk. But Android applications can put their own info in the contacts, so you can link in Facebook and Twitter contacts easily. On Maemo, well you can do it with Hermes, but you still don’t get the phone number or email address from Facebook (blame them for it). Equal points
- Synchronisation: Out of the box, Android only supports synchronization with Google’s servers. Maemo only supports SyncML over USB (not over http) or Mail for Exchange. No points.
Contacts & IM totals: Maemo 3 – Android 0
- Ringtone: The Nexus One ringtones are just not loud enough. I’ve missed many calls because I just didn’t hear it. My colleague complained it wasn’t loud enough to wake him up making it useless as an alarm clock. That’s a pretty big fault for a phone. Nexus One -2
- Voice quality: I did not do any objective testing, but I feel that despite the active noise cancellation of the Nexus One (with a second microphone), I can still hear calls better on the N900. N900 +1
- VoIP: Android only has Google Voice (only works in the US) built in. Skype is only available from select providers. And I could not get any of the 10 SIP apps in the Market to work with SipPhone.com (a Google service). So no VoIP on Android for me. On the other hand, the N900 has excellent VoIP support (I know its excellent, it uses Farsight2, my project!). Out of the box, it supports Skype, SIP as well as XMPP Jingle calls. That means Maemo support Google Talk compatible calls, but not Android. How ironic. Maemo +2
- Video calls: There is no front-facing camera on the Nexus One. The N900 has awesome video calls, including GMail compatible calls (a mobile first)! As well as Skype compatible video calls (another mobile first). Maemo +1
- Accepting calls: The “incoming call” screen on Android has slide buttons. On Maemo 5, it has push buttons. Combined that with the fact that is auto-unlocks the screen when it rings and with the resistive screen, it means that I sometimes accidentally hang up or answer in my pocket. Really annoying. Maemo -1
Calling totals: N900 3 (Maemo 2) – Nexus one -2
- Both devices have email clients supporting IMAP. Android also has a separate application for GMail. Since I don’t use GMail, I did not try it seriously.
- Combined inbox: Android has a nice feature where the inboxes of all account are shown at once. Android +1
- Searching: It’s a funny thing. The Android mail application does not have any search feature. At least, Modest (the Maemo email client) has gained minimal searching in PR1.2. Maemo +0.5
- Performance: The android mail app just feels faster and doesn’t get stuck waiting for God knows what all the time. Android +2
E-Mail totals: Maemo 0.5 – Android 3
- Overall: The Ovi Maps application for Maemo is a disaster, Google Maps just works on Android. Android +1 Maemo -1 (I’m giving a -1 because Ovi maps is so disappointing, they should have released the device without it)
- Network access: That said, Ovi Maps has one nice things, you can download maps, while Google Maps is just pre-rendered tiles, which means it always requires Internet Access. Maemo +1
- Navigation: Google has free navigation (in select countries), Ovi Maps for Maemo does not have navigation. Android +1
- Voice commands: Android has them (including search), Maemo does not. Android +1
- Search: Google Maps has Google search.. Ovi Maps has some crappy search that fails half the time if you don’t spell the address exactly the way it expects it. Ovi Maps can not search for things that are not addresses (like a restaurant ou a gaz station). Android +2
- Extras: Google Maps also does nice things like public transit. I wish they had bike routes in Canada. Android +1
Maps totals: Maemo 0 – Android 6
Camera & Photos:
- Camera Hardware: Both devices have 5 mega pixel cameras and they seem to have more or less similar performance. That said, I did not do any serious comparison. Equal points
- Photo browser: The Android Gallery has a bit more bling, but it is the only built-in app that I’ve seen crash on the Nexus One. But functionality-wise, they seem pretty similar. Equal points
- Button: The N900 has a hardware camera button. On the Nexus One, it is an on screen button. Touching the on-screen button while holding the camera in the right direction is really hard. N900 +1
Camera & Photos total: N900 1 – Android 0
- Size: The Nexus One is quite a bit thinner, the N900 is a pretty bulky device. Good thing I don’t like thigh pants. Nexus One +1
- Keyboard: The N900 has one, the Nexus One doesn’t. I though it was a fatal flaw until I discovered Swype, which is really awesome… if you only write in one language. But I write in both French and English.. Sometimes I send one message in French and the next one in English.. Sometimes I mix languages in the same message. Swype only does one language at a time. That’s not a problem with the keyboard. So N900 +1
- Screen resolution: The same. Equal points
- Touch screen: The N900 has a resistive touch screen, the Nexus One has a capacitive screen. Everyone is saying that capacitive touchscreens are nicer… I’m unconvinced. Yes, you need more pressure on the N900.. But the Nexus One’s screen sometimes strangely fails to react. It is also much less precise. That said, resistive screens have the annoying habit of reacting to pockets (especially annoying when it rings). Equal points
- Digital compass: The Nexus One has one, N900 doesn’t. Nexus One +0.5
- Volume buttons: On Android, when not in the music app or in a call, the volume button control the ringer volume. That means it’s really easy to turn it even lower than it already is. This is especially annoying sine the Nexus One volume buttons are too easy to push. Nexus One -1
- Included Flash memory: The N900 has 32 GB. The Nexus One has none. Both have a microSD slot. The Nexus One did come with a 4GB card. That’s just not enough, I have 7 GB just for music on my N900, and that replaced a full 30GB iPod. N900 +2
- TV out: The N900 has TV-out, the Nexus One doesn’t. I though it was completely useless (its just analog low def). But it was really useful when I cracked the LCD. N900 +0.5
- Bands: The Nexus One is available in both AT&T/Rogers/Bell/Telus (850/1900) and T-Mobile USA (900/1700) bands for 3G. The N900 is only sold for the T-Mobile USA band (900/1700). Which mean no 3G in Quebec until Videotron launches its network (and they are one year late already). Both phones support the European 2100 band. And they’re both quand-band for GSM/EDGE. Nexus One +1
- FM transmitter/receiver: The N900 has a FM transmitter and a FM receiver. I’ve only used them briefly. N900 +0.5
- Speakers: The build-in speaker of the Nexus One is terrible, the N900 has some of the best stereo speakers I’ve seen on this kind of device. N900 +1
Hardware totals: N900 5 – Nexus One 1.5
- Availability: There are lots of apps on the Android store. There are TWO paid games on the Ovi store for the N900 as of today (when it is not down). That said, Maemo has a lot of ports of existing Open Source apps in Maemo Extras. That said, many of the apps in the Android Market are terrible… Android +1
- Application installer: The Android Market (which also acts as an app installer) just works. The Maemo 5 application installer is a complete disaster. It is user hostile and developer hostile. Maemo -1
- Developer story: Nokia decided to scrap most of the Maemo 5 platform and review everything with a brand new toolkit. They’re completely unable to get a straight story about developer APIs. I think that is in part because they also want people to do Symbian apps. Nokia please, please, just forget about Symbian apps, just use J2ME like on S40. Google has provided a stable Java API.. But not a stable C/C++ API. Maemo -2
- Python: A lot of the Maemo apps are in Python and therefore are memory hungry (on a memory starved device). Maemo -1
3rd Application totals: Maemo -4 – Android 1
- Maemo’s greatest weakness is the out of memory handling. There is only 256 megs of RAM and 768 megs of swap. That means that as soon as you do too many things, it starts swapping and the performance becomes terrible. This is made even worst by the fact that application startup is really slow, so many applications are in pre-started. Nokia should put a lot more memory in the next device and seriously fix the application startup time. Android has a nice thing where apps can serialize their content and be shut down when the system in under memory pressure. This leads to a much better impression of performance. Android +4
- CPU speed: The Nexus One has a 1Ghz Qualcomm Snapdragon CPU, much faster than the 600Mhz TI OMAP 3430 of the N900. Nexus One +1
- The real “multitasking” is much nicer in Maemo5, Android just fakes multitasking by having applications save their state and restart at the same point. That means you can not load two web pages at the same time or anything like that. Maemo +1
- Both have multiple desktops with applets. Sadly, when I load my N900 desktops with applets, the system becomes sluggish. Maemo -0.5
User experience totals: Maemo 0.5 – Nexus One 6 (Android 4)
- Maemo is the ultimate mobile Geek OS. Having an x-term built-in is just amazing. Maemo +3
- Maemo is a real Linux desktop-like operating system. To anyone who knows Linux, it just feels right. Android is the Linux kernel + Android. It was done in secret in a corner and Google has not made any serious attempt to join the great community. They re-wrote everything from scratch all the way to writing their own libc. Maemo +2
- The choice language on Android is Java (beurk!). On Maemo is it C (or C++). Maemo +1
Geek experience totals: Maemo 6 – Android 0
- Media player: I didn’t really try the Android media player since there isn’t enough space on the SD card to hold any significant amount of music.
- Notes: Android does not seem to come with a built-in notes apps. The Maemo Notes app is just pretty bad. They could have just shipped ConBoy instead…
- PDF reader: the PDF reader on Maemo 5 is terrible, the Android one seemed kind of ok (but not great either)
- RSS Reader: Does Android have one? I use the web-based Google Reader anyway
Total: N900 16 (Maemo 9) – Nexus One 17.5 (Android 17)
The Nexus One is really being dragged down by its its hardware. Especially when it comes to the bad speaker quality and the low ringer volume.. Did I mention how much it annoyed me ? That said, Android is pretty good. Better IM integration would be a big plus. And some VoIP too.
Our Nokian friends have their work cut out for them. First, they need to fix the memory handling story on Meego. Running out of memory and swapping all the time is just annoying. An almost desktop-class operating system requires desktop-class amounts of RAM (that means more of it). Ovi Maps needs a lot of work, hopefully they can work a deal with Google to get decent search in there. The browser could get its share of small screen friendliness and a performance upgrade. If they fix these few problems, Meego (as the future of Maemo is called) could very well be a success.
Were it not for its high geek factor (built-in X Terminal!), the N900 would have lost badly. That said, it’s still my favorite phone ever (did I mention I was horribly biaised?)
The PR1.2 update of the N900 firmware is now officially released. The big new feature is video calls. It is also the world’s first phone to offer Skype video calls as well as Google Talk compatible video calls! And all of this uses Farsight2, the GStreamer based voice and video calling library. The whole Farsight2 team is very proud to have been able to participate in this world first. And just like all other calls on Maemo, video calls use the Telepathy framework. We obviously also support Jingle (aka Jabber aka XMPP) and SIP just like the N800 and N810. But we also add H.264 support.
As a side note, my colleague Sjoerd (who now has a blog!) has made VP8 work with RTP. The Googlers are working hard to make some kind of standard. So hopefully, with Google’s clout, we’ll be able to have calls between a fully free platform and a hardware phone!
The part of the socket(7) man page about setsockopt(.., SOL_SOCKET, SO_PRIORITY…) says:
“For ip(7), this also sets the IP type-of- service (TOS) field for outgoing packets.”
I wanted to know how exactly it mapped the socket priority to the ToS field, so I looked in the kernel code for a while, and it turns out that in recent Linux 2.6 kernel, this is a lie. The ToS field is never set when the application selects the socket priority, only the internal priority of the packet is set. That said, the reverse is true, setting setsockopt(.., IPPROTO_IP, IP_TOS…) sets both the ToS header field and the internal priority of the packet.
So the question here is: Who is wrong, is the kernel buggy? Or is the man page incorrect?
Also, dear lazyweb, is there any support for applications to set the DiffServ field? Or are they only settable through iptables?