Wednesday, December 26, 2007

The End

It's time to move on, so i am officially announcing the end of the project. The project was great for me to learn new things, but i lost interest when i stopped learning, so i don't find joy on developing it anymore. I will be starting a new project, not related to IM clients.
The code was released with the MIT license, that means you can use the code. Feel free to re-license any parts of the monkey messenger code (except the MSNPSharp library which inherits the DotMSN license).

Thanks for everyone who helped me with code, bug reports, icons, ideas, complaints.. :)

Wednesday, August 8, 2007

Longest TODO list entry ever: Fix P2P

Just forget about the last post, i will continue developing Monkey Messenger, and perhaps Monkey Talk will born some day :)

The reasons for continuing Monkey Messenger:

1 - There are more people trying to fix p2p, like the pymsn guys. And they do a great job, specially oleavr. This guy rock :) They just choose a bad language (yes, i don't like python) to do it.
2 - I spent too much time doing it, don't want to throw it away :)
3 - I don't quit, ever! I do change plans, but this is not the case :)

About Telepathy:

It's nice, and my work on MSNPSharp can integrate with it.

About Emesene:

I would join forces with them, but i just don't like python :)

About Python:

1 - I like compiling things, it reduces bugs;
2 - I like to define types to my variables;
3 - Where is the damn switch ? (Note: python doesn't have switch, makes me laugh hehehe very funny);
4 - I can't just call wsdl.exe SoapService.wsdl and everything starts working like on C# :);
5 - It's slow;
6 - I'm not a l33t hacker that uses emacs or vim, and there is no good IDE for python, except for eclipse. But, did i mention that i don't like java? :)
7 - Just ONE good way to do it? Why there are so many python frameworks? It's just contradictory.

It's just like religion, politics and football teams, there are many people with different opinion, and i will just not change mine so soon because i like C# very very much :)
And please, no need to curse me, i don't mean to offend :) It's just my stupid opinion.

About the MSN Docs:

There are no good documentation for it. The good part of the docs are about the Nameserver part. This is the easy part, i can just debug it with Wireshark.
The hard part is the p2p part, and the docs are either incomplete or wrong.


Tuesday, August 7, 2007

MSN Stinks

That's it! MSN Sux very much. I can say it because i know half of the things that happens inside it. If half of the things sux, i can say it sux! :)
The major problem is, i don't know the other half part to make any complete work out of it. And if i can't finish it, why insist?

I will be thinking about migrating (read evoluting :) Monkey Messenger to google talk. What do you think? Maybe Monkey Talk :)


Thursday, June 28, 2007

We should smile more!

Here it is, emoticons on the contact list has landed the repository. You can now smile much more!

openSUSE users now can enjoy using Monkey Messenger too. I have downgraded the requirements to gtk-sharp 2.8. Next step: Emoticons on labels/text entries!


Friday, June 22, 2007

Smileys on the contact list

I got bored doing protocol stuff, so i hacked on Monkey Messenger yesterday. The goal was to make emoticon support on the contact list. Here is the result so far:

You can notice that text attributes are not working yet (but it will, i promise!). For now it can do ellipsizing, render emoticons, break lines and mess up with the attributes :)


Tuesday, June 19, 2007

Implementing MSNP15

I'm currently implementing MSNP15 on MSNPSharp. I have been trying to implement the SSO auth, but i don't want to write xml strings and send it over, i want to be able to serialize and deserialize the messages, like SOAP web services does :)

The problem is.. Microsoft does not make the WSDL (at least i didn't find it) for the Windows Live Id web service. So, if you feel like making a boring xml file reverse engineering the SSO thing, be my guest :)

Here is the link:

And.. sorry for not working on Monkey Messenger directly, i want to finish this first so Monkey Messenger can move along and support other things :)


Sunday, June 10, 2007


For those wondering what is happening with the Monkey Messenger development: I'm still working on the MSNPSharp library to fix bugs, fix P2P Direct Connect (fast file transfers) and other things. It takes a long process of debugging since the various versions of the official MSN client differ from each other. For example, WLM subtracts -3 for the LocalIdentifier after the session request and MSN 7 does not. This sux for me since i get a big trouble considering all the different cases.
I will probably just move to MSNP13+ and forget about the older versions. I wonder if there are much people using Windows Messenger 7...

Thanks to everyone sending fixes and bug reportings :)

See ya!

Thursday, May 31, 2007

Fixing MSNPSharp Direct Connect

This week i've spent a lot of time trying to fix P2P direct connection. It still doesn't work but i learned a lot of the msn protocol (really, a lot) :)

If you feel like helping me, grab the MSNPSharp code and try it :) You can use WireShark to intercept packets and see what's going on:

You can use aMSN to receive files and then use monkey messenger and compare the two WireShark results. I did it, they look the same and still doesn't work. Maybe it's a different ACK or something... something is different, this i can guarantee :)

Wednesday, May 23, 2007

Ping? Pong!

As Diogo Araujo suggested, Monkey Messenger now sends Pings to the server to keep the connection alive. The functionality was missing on MSNPSharp so i've implemented it :)

Btw, I'm cleaning MSNPSharp code, removing the code docs (not the comments, just the docs) as it doesn't belong there. I'm also organizing code to a better style. Variables on the top, constructors on the top, etc.. So if you feel like learning things, it's a good start since it's easy to do :)

Keep translations coming! I promise i will make it work properly soon, if someone doesn't do it first...

Wednesday, May 16, 2007

More Improvements

As many users request, you can now minimize the main window to the tray instead of closing it when you press the close button. And also thanks to Mark Baas we're giving another step to start to translate Monkey Messenger to another languages. Keep reading us hehe. For those who are looking for an easy way to install monkey messenger here I leave you a link that a user create:
But I suggest that you download the SVN version.

Friday, May 11, 2007

Chuck Norris uses Monkey Messenger

Some friend of mine told me that Chuck Norris, Steven Seagal and the Predator are using monkey messenger. So be cool like them and start using it! What are you waiting for?

UPDATE: I've heard that Rocky Balboa just started using monkey messenger!

Friday, May 4, 2007

File Transfers Reworked

I didn't like the transfer window, so i decided to re-work it and make it simple, like this:

Notice the file preview when transferring. Cool, isn't it? Please, post your thoughts.

See ya ;)

Wednesday, April 18, 2007

File Transfers

In the past week i did some improvements on file transfers, here is a screenshot:

It's not still finished and i don't like all the code i did, but it's getting into shape. At least it works :)
Btw, the .deb packages are very old, and a lot of people seems to be using them. Would be nice to have some scripts to make the package, perhaps using debhelper. Anyone up to the task?

Another thing, i will be moving monkey messenger to launchpad soon :) I just need to figure out how to use bazaar and have some time to set everything up. Bug reports can be done there, please.

And yes, i love the Opel Astra. I own an Chevrolet Astra 2006 which is a cooler version of the old opel astra, but the newer one... i wish i could have one :)

Well, that's it :)

Wednesday, April 4, 2007


Well, i will let the screenshot explain it for me:

Enjoy :)

Tuesday, March 27, 2007

Clickable Hyperlinks

As some users requested, the hyperlinks are now clickable For now monkey messenger assumes that you use Firefox. I will add code to detect the browser later.

The latest revision also adds code for the Preferences window. I will be doing this soon because a lot of users complained that clicking the preferences menu does nothing. It does now, but shows an empty window for now, until the code is not complete.

That's all folks, keep the feedback coming.


Monday, March 26, 2007


On the last past week i've been trying to implement Winks (those flash animations) on monkey messenger. I changed msnp-sharp to get it working. The good news is that i can get it transfered. The bad news is that there is no decent flash API on linux. Here is the options:

- Just use gecko and the flash plugin: This option may sound easy, but i didn't find a way to detect the animation end to close the window.
- Use gnash. Gnash is quite good, it plays all the winks animation i have tried. But a C glue library would be necessary to make C# bindings and use it.
- Use swfdec. This one also plays all the winks i have tried but it would be necessary to re-use the existing gtk widget on the source tree and make bindings to C#. Would be easier than using gnash afaik.
- Use flashplayer from macromedia. It would certainly work, but there is no library and i can't make the standalone flashplayer gtk window transparent. I would also have to call an external executable that would sux.

There is also one more problem. The winks comes in a .cab file. There is no managed .cab extractor for .net. There is libmspack and the cabextract program. They both work but the first would need C# bindings and the second would sux. It would be easy to extend sharpziplib and implement .cab extraction i think. This would be a better solution.

So folks, i gave up on winks for now because i was wasting too much time doing it and there are more important things to do on monkey messenger. On the source tree there is a Wink plugin which works by half and is unfinished. I will not touch it until:

- There is a managed way to extract .cab files;
- There is a decent and easy way to play flash animations on linux.

If you want to see this happening you would:

- Read swfdec source at the player folder and implement a gtk# widget that uses libswfdec to play movies, so we can add it to a transparent gtk window using composition.

- Implement a .cab extesion to sharpziplib

- Contact me!

Thanks :)

Sunday, March 18, 2007


As requested by some users, it's now possible to distinct blocked contacts as well as block and unblock them.

Thanks to Vinícius Depizzol for making the blocked icon.

Saturday, March 17, 2007

Help us

If you like monkey messenger and feels like contributing to it, we have tasks for:
  • Testing, bug reporting;
  • Bug squashing;
  • Coding user interface;
  • Coding the msn protocol;
  • Coding integration with other apps (plug-ins);
  • Art (tango style), we need a new logo, some icons;
  • Web development, we need a nicer web site;
Please, join our mailing list and tell us how you would like to contribute and your level of experience.

We plan to release a 1.0 in a few months. Will be publishing a TODO list and a schedule soon.

Friday, March 16, 2007

MSN Plus Format

Hi people, I had fixed a lot of bugs this week in the MSN Plus Parser, so I want to know if you still have any problem with these nicks, please send me the nick and the log that is show in the console, to fix the problem. I hope you enjoy this nice feature.

Thursday, March 15, 2007

Bug Fixing

The contact list bug that contacts always showed as offline is nailed!

A big change was committed today (15/03) on the svn. Major internal changes were done, including:
- Simplier access to objects using Singleton and a Global class
- Replaced XihSolutions.DotMSN with MSNPSharp
- Bug Fixing

I've been receiving some feedback about monkey messenger. That's great, keep them coming. But keep in mind that it's not a finished product yet. It lacks a lot of features, some things are implemented only by half and it has some bugs. So if you want to test it, go ahead, but i don't advise to use it on production until the 1.0 is released. Any feedback, bug report and suggestion is welcome.

Come and join our Mailing List.

Monday, March 12, 2007

User Feedback

With some users feedback, here is a new optional view mode of monkey messenger:

The default option at 32x32 is still available as well as 24x24, 48x48 and 96x96 with different layouts, image sizes and text sizes.

Thanks everyone for all the feedback. Any ideas or comments, please, post it! :)

Almost forgot! Please, if you are interested subscribe on the monkey messenger mailing list at:

Sunday, March 11, 2007

Monkey Messenger Engine

For anyone interested on coding protocols. The library used on monkey messenger to connect to the msn network and provide functions and events is DotMSN. Originally DotMSN only supports the MSNP9 (msn protocol version 9). I have changed it to support MSNP11 which adds a few more features. The target is to change it to support MSNP15 (the current protocol). If anyone is interested i've spoken to Bas Geertsema (the DotMSN author) and with his permission i have created a sub-project to target this. The project is hosted at google code: I will be changing monkey messenger soon to use MSNPSharp instead of DotMSN. Any questions about this can be sent to me

Wednesday, March 7, 2007

Monkey Messenger for your taste

As Vinícius suggested, it's now possible to customize the contact list size:

Friday, March 2, 2007

UI Changes

Vinícius Depizzol has sent me some mockups with really nice ideas, so i have implemented some of them:
  • The top bar (which we call owner info) now follows the gtk+ theme
  • Removed the status combo from the top and integrated it on the top bar
Here are the results:

He also suggested some nice changes to the conversation window. I will implement those as soon as possible :)

Saturday, February 24, 2007

New build system

Today i had fight with the autotools system. I started loosing badly but then after a deep breath i have won the fight :)

So now to install Monkey Messenger you can do:
make install

To run, just execute "monkeymsn"

If you already have the source code, just type "svn update" to get the latest revision.

You will need at least:
gtk-sharp 2.10
mono 1.1.17 (older versions might work)
mono classlibs 2.0
gmcs (mono compiler with generics support)


UPDATE: If you are getting Makefile errors, make sure you have automake 1.9

Friday, February 23, 2007

Why just MSN? What about supporting other protocols?

First of all, i have tried to write a multi-protocol IM. Turns out that the code was growing exponentially for each protocol i have added. For each different functionality one protocol implements, i had to create an abstraction layer for all of the protocols. I firstly tried to abstract the protocols creating one layer and plugging all the protocols into this layer. This path was wrong because the protocols (MSN, AIM, IRC, ...) are too different. Take for example MSN, it has the Switchboard, SLP, P2P, other protocols don't.

What about telepathy?

I'm sure they managed to abstract the protocols in a nice way with dbus. But telepathy doesn't implement each protocol special features. Take for example MSN, they do not implement custom emoticons, winks, nudges, ... For now they only have implemented the basics like messaging, contact list and of course video (which isn't so basic). I'm not criticising them here. This, i belive, was their goal and it is very useful for some mobile and desktop users. This makes me think on the next topic which is the target audience.

Target Audience

If you are reading this, you are probably a developer or someone that understands technical details about programming. Being a developer, you don't care much about winks, emoticons and all those silly things. But what do users think? Most users uses Windows and the official msn client which has support for a lot of "silly" things. Our users (the monkey messenger users) have friends that uses Windows and those friends wants to send our users love winks, funny winks, funny emoticons. They want to express their feelings with all those "silly" things. So, what is "silly" for us developers may not be silly for other users. Think about your younger brother or sister. I bet their IM client is filled with animated images.
Take for example Gaim. Does it suit for your little brother/sister? Do they understand that complex account dialog? Would they use it? Probably not. I always think about my mom. She has a doctorate and is a very clever woman, but would she be able to use a multi-im client like Gaim? No!
So this is our target audience, people that likes to express themselves, people that doesn't use more than two protocols (considering that they can use two clients, one for each protocol), people that doesn't want to use complex user interfaces or have to stop to think about how it works.

But.. what does complex UI have to do with multi-protocol?

There was another solution to implement a multi-protocol client which was abstracting the user interface so each protocol would communicate directly to the interface. This would work better i think, but it would still generates problems like code size, manutenability and specially usability.
Take for example MSN. It offers some user status like away, busy, out to lunch, on the phone, ... ICQ offers other users status like away with custom away messages which MSN doesn't have. Why a user that only uses MSN would want to type an away message? It won't be displayed to other contacts. We could set the MSN personal message to display this message, but this is not the purpose of display messages. So, the users ends having functionality in their multi-im client that they would never use, or that they will use and it will not take effect on the current protocol.
Just hide this options and make special cases for each protocol! There we go again, complex code, hight abstraction and exponential code growth and specially usability. The UI needs to be consistent, the user would be confused if sometimes an option is there for that protocol and sometimes it isn't for the other protocol. The user doesn't understands about protocols, they just want to talk with their friends and co-workers.

There are another ways to do it.

Think about galago. Take a look at Gimmie, picture the Novell Computer menu with a People tab page. Think! What is the real purpose of having a multi-im client? For me it's having all my contacts on only one place. That can be archived with multiple single IM clients having interfaces to interoperate with one single contact list.

Thursday, February 22, 2007


Yesterday i have added support for sending and receiving nudges. The window actually shakes! :) Too bad i can't demonstrate it on the screenshot. A video will be coming soon!

Monday, February 19, 2007

Custom Emoticons

Long time without any news. But today I got an excellent announce Custom Emoticons!!
Also, the file transfer is almost complete, it got some bugs but is going to be finished soon. A lot of bug fixed too.

Monday, January 29, 2007

Monkey Messenger

Monkey Messenger is an open source (MIT licensed) MSN client written using the MONO framework, gtk+ and the and a modified version of the DotMSN library.

The objective is to build a fully featured MSN Client, with all the functionality provided by the official MSN 7 client. For that, we've changed the DotMSN library to work with MSNP11, which is the protocol version for MSN 7. When MSNP11 is fully covered, we will move to MSNP13.

Monkey Messenger will follow the HIG and the KISS principle.

Current Status

Currently, Monkey Messenger have the basics working and some other features like:
  • Display pictures
  • Group support
  • Timestamping
  • Tabbed chat windows
  • Is possible to choose any state for your login status
  • Messenger Plus Nick Format Support
  • Support for Personal Message
  • Emoticons
  • Nudges
  • And a lot more.
We need more people to launch our first beta, you can help if you want to code something or want to test and report bug. Any little help will make the difference.

You're welcome to join the Monkey Messenger team. If you want to help, contact me (jaimerave at gmail dot com) or Thiago (thiago.sayao at gmail dot com) the project leader. See the TODO file included in the source to find what you can do.


The latest code can always be checked out from sourceforge SVN (Subversion) repository:

svn co monkeymessenger

You can browse the source here.