Release libnice 0.0.12

Hello,

Libnice 0.0.12 has just been released.. It’s not a very important release as it doesn’t add any substantial feature, but it does fix a few nasty bugs, so it’s recommended to update.

The important thing to note is that recently ICE has been standardized and is now known as RFC 5245! This is great news as it means that the spec will stop changing (it actually became stable at draft 19, so we were already safe).

The same thing happened to TURN, which has been standardized as RFC 5766. TURN has been changing a lot lately, so having it as a finalized standard is very good news.

In this release, libnice  has now a NICE_COMPATIBILITY_RFC5245 which should be used instead of the compatibility mode NICE_COMPATIBILITY_DRAFT19. Although the old code should still work since I kept the DRAFT19 symbol for legacy reasons.

The problem now is with TURN.  I never had time to upgrade TURN from the last draft that I implemented (draft 9) and since the specs of TURN kept changing, I didn’t want (nor had time) to keep updating it to meet the spec changes. So the new libnice is compatible with RFC5245 but it doesn’t support the TURN 5766 draft yet. Hopefully, the next release will be compatible with TURN RFC 5766.

If someone wants to contribute to libnice, then implementing the changes to TURN to upgrade it from draft 9 to RFC 5766 would be the first step! Let me know if you want to help.

KaKaRoTo

Humble Source

Hi,

As some of you might have seen already, there’s this great great initiative called the Humble Indie Bundle. It’s basically a group of five independent developers who decided to make a ‘pay-what-you-want’ promotion for a bundle of five games, and the money can be distributed however you want between the developers and two charities (Child’s play and Electronic Frontier Foundation).

This whole idea is really awesome! The minimum donation requested is 0.01$ so for just one cent, you could be getting 6 very awesome games (World of Goo, Gish, Penumbra, Lugaru HD,  Aquaria and as a bonus Samorost 2) although I hope you will be more generous than that!

I think that the initiative is indeed humble, and by giving the power back to the consumer, you let him decide on the price and ask him for his generosity, you can get some really good results.  And the proof is here.. After only 10 days, they have raised over one million dollars! 30% of that went to charity and the rest went directly to the developers! What does this mean? It means that people thought that the developers deserved the money because of this brilliant idea. This also gives us some pretty awesome statistics.

As of the moment of writing this, the average donation was 9.05$ and The distribution is  : an average of $7.95 for Windows users, $10.18 for Mac users and $14.55 for Linux users! It looks like Linux users are more generous than Mac users who are more generous than Windows users! The developer seems to have noticed this and talks about it in his blog.

You can also see the distribution of the downloads, it looks like the Linux and Mac gamers are also a big part of the gaming market. As explained in the developper’s blog :

Our most recent promotion, the Humble Indie Bundle, shows even more dramatic statistics for Linux: 52% Windows, 24% Mac, and 24% Linux.

Finally, the most interesting thing for which I want to salute those developers is that, considering the success of the Humble Indie Bundle, they decided to open source 4 of the games from the bundle! This is great news for the open source community and for the gaming community as well.

The bundle has been extended for 3 more days, so I encourage everyone to go buy these games and help the developpers who had this brilliant idea!

KaKaRoTo

GObject generator for Emacs

Hi All,

I recently  had to create many classes and as everybody knows, writing classes with GObject is quite annoying.. it involves a lot of copy/paste and a lot of search&replace. So I’ve searched and I (actually my colleague, Olivier) found these GObject class helpers : http://www.emacswiki.org/emacs/GObjectClassHelpers

Those are some helpers functions for Emacs that automatically create the .c and .h files for you with all the GObject boilerplate. They were written by Gustavo Sverzut Barbieri and they do the job quite fine.

However, they are missing a few things, so I took the liberty of modifying the script to make them more complete and make them suit my needs.

Here is the changelog :

  • Added the option to include a Private structure to the class
  • Added a dummy property and the get/set functions
  • Added a dummy signal
  • Added a ‘constructed’ method
  • Added LGPL license header to generated .c and .h files
  • Reindent the whole files to match the user’s settings.

These additions (private structure, property, signals) are optional and the script asks you if you want them or not when it generates the code.

I thought that these changes would be useful to some people so I decided to share my script with the world. you can grab it here.

Have fun!

KaKaRoTo

Who’s the bastard ?

Update : I’m putting this update at the start so people can see it…

I’m tired of repeating the same thing over and over again, so I’ll make this clear once and for all : I *never* said that Alvaro is a bastard.. the title of this post is an answer to the hundreds of people who told *ME* that I’m a bastard for doing what I’ve done.

Secondly, we *never* stole anything from Alvaro, his work is still credited to him, he still appears as a developer and the founder, the only thing that we’ve done is to remove him from the “list of currently active developers” because he’s not active anymore (and hasn’t been for over 3 years). He abandoned aMSN, and I see no reason why he would have to be mad if aMSN ‘abandoned’ him in return.

He’s saying it was a “coup d’etat”, which is over-exagerating, it makes it feel like he was the most active developer, and then he gave me admin privileges and I kicked him out right away… no, that is not true, and he never said that himself (but people seem to understand it like that), he left aMSN years ago, and I’ve been managing aMSN for over 7 years now, while he’s been the project leader for maybe 2 years (he would need to confirm that, as I’m not sure when the roles switches from him to me).

The only thing I believe was a wrong doing was to not notify everyone of that cleanup that I did in the list of active developers, and for that, I already apologized, and I don’t know why he had to blog about this story and harm aMSN’s reputation (and mine specifically).

And here is a copy/paste of a discussion I had with Alvaro back in 2007 (3 years ago) after he was accidentally deleted from the list of active developers :

Álvaro : i don’t mind being removed
Álvaro : do what you want, really
KaKaRoTo : btw, you’re not in amsn project anymore
KaKaRoTo : you want me to add you ?
Álvaro : yes i know
Álvaro : i’m not doing anything right now
Álvaro : so i don’t see the point
Álvaro : if i want to code in amsn again, i can be readded then
KaKaRoTo : you’re back :p
Álvaro : thanks

And finally… We told Alvaro from the very beginning that if he wants to code for aMSN again and be active, he just needs to tell us and he’ll be immediately added back to the ‘list of active developers’ and have full SVN access. But he said that he doesn’t have time and doesn’t want to do anything. He’s welcome to join us anytime, he was never kicked, it was never a “coup d’etat”, it’s a simple matter of whether or not he’s an active developer now or if he’s not, and he currently isn’t.

I don’t know what more I need to say for people to actually understand what happened….

End of the update: Back to the original post…

Wow, what a shock…

This post is a reply to Alvaro’s blog post. To those who don’t read spanish, there’s always google translate..

Basically, what happened is that I did a cleanup round on every inactive developer a few months ago (almost a year ago) and Alvaro realized that only recently and asks why, to which I explained that inactive developers were removed, and since he was inactive for over 3 years, he also got removed from the team members, as I want to keep it minimal to reflect the real status of the project. He did not like it, and he requested he’d be added again. to which we ALL (admins) responded that it wasn’t justified and that he was being childish (because of how he kept answering), then we added him again as team members, but he then told us to remove him again … you can read the whole thread here.

Now, Alvaro decides to post on his blog (in spanish) and put it on meneame (digg-like equivalent for spanish people) in which he says that I’m a bastard who prepared a “coup d’etat” to exile him, and that we started insulting him and stating me specifically, he says it’s “no surprise coming from that person”, trying to make me look like a bastard…

So here’s my answer to Alvaro :

First, aMSN is aMSN, it’s not “Alvaro’s Messenger”. It was called like that back then, when you were alone in the project, then you said that it didn’t deserve the name because it wasn’t your work anymore, it was the work of everybody involved and it belonged to the community now, and so the name was changed to be only “aMSN” with no particular hidden meaning, that was maybe 5 or 6 years ago. So why do you now state in your blog the name as being “Alvaro’s messenger”? Oh, is it because you want to generate even more sympathy towards your cause (troll) ?

Then you decide to explain your version of what happened.. some kind of ‘summary’ , full of false advertisement towards you.. did I “stab you in the back” like you said? no, I’m sorry but that’s not true, when you’re inactive from a project for that long, it is expected that you’d get removed from it, that’s normal. Yes, I probably should have notified you (and the 30 other people who got removed), but it wouldn’t have changed anything. Also I remember quite clearly that you told me yourself (before these events) to just remove you from the project because you were inactive, and I told you that it wasn’t necessary, that I might do it later, but that you could stay (at that time). For your information, launchpad automatically removes membership status to inactive developers every 6 months.. the system does it, not the project leader.. I wonder if you’d be insulting the machine too if sourceforge worked the same way…

And no, all you got wasn’t just a bunch of insults and shouts, we tried to reason with you, but you just wouldn’t listen, you were just being your childish usual self, a real crybaby. If you take that as an insult (you will, since that’s all we said to you that you considered being ‘insults’), then too bad, it’s just the truth, not my fault if you don’t like the truth. But how can you say that it’s really not a surprise coming from me? what, you want to make me look like a universal bastard who just insults everybody with no reason? Did you decide to make this your personal vendetta against me? You should know that this decision (and those ‘insults’) were not mine alone, *everybody* said and agreed on the exact same thing, but I’m always the one in the front lines, because I’m the project leader right now.

The aMSN development isn’t closed, and like we all said a few times already : It doesn’t matter what you did in the past!!!! Do you think that Bill Clinton can just go and yell and post on his blog how the security at the white house refused to let him move in there, and how they didn’t let him authorize the launch of a nuclear missile? Even after he told them “how about my past contributions”? No, the world doesn’t work like that, we were quite polite towards you, we said that we respect your work, we acknowledge what you’ve done, but if you’re going to be inactive and not do a thing, then you have no reason to be part of the team… We said that if you give us a reason to add you to the team, if you were going to become active, then you’d get your status back, but you just wanted to have your name up there and not do anything.. nope, it doesn’t work like that. You have to respect democracy and what everybody thinks, and you have to respect the rules that were being used by the team since day 1 (your own rules).

After some more whining on your part, You were added again to the members list!! But then you denied that, and said that you didn’t want it, so I removed you again (this time telling you that I removed you).  So don’t come making us look like bastards here!! Why did you fail to mention you were re-added at your request ?

No, I don’t like your blog, I don’t like how you make us (and mainly me) look, and I don’t like how you deform reality, I don’t like how you say we stabbed you in the back, how you said that we’re not giving you credit for your past work, and I don’t like how you think you’re some kind of God or something, and that you are in your absolute right to ask us whatever you want after disappearing for 3 years! You could have been dead for 3 years for all we know, you weren’t giving any sign of life, and you still dare come and say that you were “active” for all that time?  You say that I did a “coup d’etat”? I’ve been project manager of aMSN for a lot longer than you were, your last commit was maybe 3 years ago, but your last real contributions as a project manager was 6 years ago, that’s more than the life of the whole project.

Your blog has just proven to us once more what we’ve been saying from the start… I won’t say it, but let our readers decide on how you acted…  You decide to post a story about what “we did to you”, giving your own story of what happened, completely manipulating the facts to suit your ego, and you post it in spanish and post it in meneame, as if you thought we don’t know how to use google translate… You try to catch all of the spanish people’s patriotism, making them think “one of our own got stabbed in the back”.. and all you did was send us a few people to our IRC channel, who come and insult us, bastards, motherfuckers, then leave the channel.. yep, that’s the way a “leader” acts…

If you want to fork aMSN and rename it back to “Alvaro’s messenger”, then have fun, go ahead, do it and good luck with that, the more users you take from us, the less support we’ll give to people who don’t know how to use a computer.. But like I told you before, and I’ll tell you again, you are more than welcome to join the aMSN team again, you just need to be active. If you do have time to spend on aMSN and work on it, and you have patches for us, then you will be added. If you don’t want to send us your precious patches, and want to act all high and mighty and fork aMSN, then do it, but it will be your own loss.

But let me tell you one thing… although people say “don’t feed the troll”, I don’t care, if you want to talk trash about me, then bring it on, you’re not the only one who has a blog in this world, and I can make people see the truth, where you try to deform it.

Good luck with your life, and I hope I won’t be hearing from your anymore.

Update: Alvaro commented on meneame saying that he uses amsn but only to connect (never chat) and uses pidgin.. he also says : “I do not need nor do I have time or inclination (increasingly less) to continue with the project AMSN.” And that’s the reason why he’s not part of the team, it’s because he’s not active and doesn’t plan to be. Like some other people said, the status and lifetime of an open source project is unrelated to the original founder of the project. And I believe that’s what people must understand. I don’t like people who just want to cause issues and get people’s attention just to feed their ego…

Update 2: I just want to make sure people understand that Alvaro is still listed as a developer/founder, he appears in the amsn website, he’s in the README, etc.. but all we did was remove him from the “list of currently active developers” (the sourceforge membership list) and that’s what he didn’t like.

The title of this blog post “Who’s the bastard?” isn’t meant as an insult to Alvaro, it is meant to answer all those hundreds (probably thousands in the next couple of days) of comments on meneame and on Alvaro’s blog who are treating *me* of a bastard, son of bitch, stupid, etc.. without knowing the facts.

Alvaro decided to be a troll and start a flame war and a vendetta against aMSN, and I don’t care, but I won’t sit by watching him insult us without giving the real truth to people.

KaKaRoTo

http://translate.google.com/translate?js=y&prev=_t&hl=en&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fwww.bodegueros.net%2F2010%2F04%2Fcuidado-con-vuestros-proyectos-software.html&sl=auto&tl=en

Google Summer of Code Participation

Hello fellow developers and aMSN enthusiasts!

As some of you might know, this year again, we’d like to participate in the Google Summer of Code program. Unfortunately, we couldn’t get aMSN as an organization, but, just like previous years, we will be generously given a slot by the Tcl/Tk community who is acting once again as an umbrella organization.

What this means is that you still have until April 10th to submit an application for GSoC, and to do so, you should go the GSoC webapp and fill an application under the organization “Tcl/Tk Community” and submit your proposal for an aMSN related project.

You can get ideas on what we’d really like people to work on by having a look at our wiki.  Don’t forget you can submit your own ideas if you wish to, but make sure it’s something we’d like to see and that it’s worth working on for 2.5 months at 40 hours/week.

Make sure you read the User Guide and the FAQ that Google has put up and don’t forget that this is just like submitting an application for a job (there is 4500$USD involved..) so you need to make sure you convince us that you are the best person for the job. Quality over quantity, and only submit an application if you know you can do and finish the project on time.

I hope we can get good students this year who will help us improve aMSN.

Thanks.

libnice 0.0.11 Released

Hi,

Today, I’ve released a new version of libnice : 0.0.11.

This is an important milestone for libnice because this is the first version that has support for a reliable transport.

As I explained in my previous post, this version uses a TCP over UDP implementation that is compatible with libjingle’s pseudotcp (it’s actually a copy of it).

The change is very minimal, all you need to do is call nice_agent_new_reliable instead of nice_agent_new and libnice will take care of making your components reliable. You will also need to pay close attention to the return value of the nice_agent_send as well as the reliable-transport-writable signal. But everything else should stay the same.

If you’re interested in the TCPoUDP implementation, you can also use it directly in your application, outside of libnice, as it is now provided as its own class.

The documentation has now been updated, and you can read more about it here.

Let me know if you will be using this much requested feature!

aMSN 0.98.2 to be released without Audio/Video support

Hey,

We (the aMSN team) want to soon release aMSN version 0.98.2 because of the various issues we faced with 0.98.1 because Microsoft changed their protocols.. mainly the problem with the nickname changing to the email at every connection.

We also recently realized that the Audio/Video capability would need to be dropped because it just doesn’t work anymore unfortunately 🙁

Microsoft forced everyone to upgrade to the latest version of Windows Live Messenger : WLM 2009 which uses MSNP18 and has the ability to do Audio/Video calls through a tunneled SIP (P2P SIP messages, not using an external SIP server) and so, they realized that their SIP servers aren’t being used anymore, so they had this great idea of shutting down their servers… the result? aMSN can’t do Audio/Video calls because the SIP server refuses our connections.

Now we have two choices, either use MSNP18, or disable SIP calls completely. Obviously, we can’t move to MSNP18 at the moment, because MPOP support isn’t really ready yet, and because MSNP2PV2 hasn’t been implemented, so we had to remove the Audio/Video support in aMSN SVN for now, and only have it available for those who are brave enough to try out MSNP18.

We will soon release 0.98.2 as it is long overdue now, and we want to let people know why their A/V calls are not available to them anymore.

I hope everybody will understand why this is happening and we won’t get flooded by n00b questions everyday…

Some Braid designs…

Hi,

So.. I’ve been thinking *alot* about how to best design Braid if I wanted to have a proper time manipulation feature in the game that would ressemble Braid, but still avoid using up MBs of RAM per second… I think I’ve got something, and I’ll try to explain it!

First: do not store the position of every object in the world at every timestamp, instead, only store the events, and let the objects interpolate on the event’s timestamp, their current timestamp/state to know what their new status should be.

I also realized today that I do not need to keep every object of the world in memory, even after they disappear.. all I need to do is make the object’s creation/destruction events get registered in the ‘timeline’ and let the rewind/fast forward feature recreate objects as needed. I should probably have a unique name generated per object in order to know which event goes to what object (instead of linking the event to the object’s address).

I also realized that I’d need multiple timelines, dependent on each other.. so for example, we could have the “world” timeline for the world (for time independent objects), then the “current” timeline that could get rewinded/forwarded (for normal objects), we could also have a “player timeline” that would have its timestamp generated depending on the player’s position in the world (for Braid’s world 4), and a “shadow” timeline that would be used by ‘shadow’ objects for world 5, also probably a ‘timewarp’ timeline to emulate the time-warp feature of the ring, so it could translate the timestamp of other timelines depending on the object’s position relative to the ring..

These timelines would be linked to each other.. For example, imagine a time dependent key in world 4. The world would request the key to update its state (position/broken or not/being held or not, etc..) to the new timestamp X on timeline “world”, this will cause it to ask the “current” timeline for the ‘current’ timestamp at time X, which would translate to timestamp Y (depending on whether or not you rewinded or not), this would cause the timeline to ask the “player” timeline for the new timestamp associated with timestamp Y (in other words, where was the player located at timestamp Y), which would give us a timestamp of Z, now that’s where the key should be.. so the key tries to go into its new state at timestamp Z, it realizes that it was ‘hooked’ (being held) to another object “abc” (player or monster) at that timestamp, so it asks that object (the world actually, since the object could have been destroyed) to get the status of object “abc” at timestamp Z, which could again chain up multiple timestamps (depending on whether it was the player, a time independent monster, or a normal monster) until it gets the state of the object at that timestamp, at that point, it will be able to know the position of that object, and set its own position to the same position as that object (with an offset depending also on the direction of the object)!

Ouff, now that sounded complicated! And we didn’t even start adding a ‘maybe there was a time warping ring in the path of that object between now and timestamp Z..’ Either way it seems to fit so far, holding only events, destroying unneeded objects, and chaining timelines together with each timeline holding its own objects/events, seems to make sense so far.. we do get the correct behavior apparently, and with minimal memory usage…

Now I still have to get my brain into a stable enough state to figure out questions like “what happens if the user gets inside a time-independent platform?” or “what happens when you need to figure out the position of an object when a ring might be in the way?” or “how to interpolate correctly our new state when the requested timestamp is not the old timestamp +/- 1 time unit?”

I’ll start designing some uml diagrams soon to try and make it fit, then I’ll start coding the basic structure… Assuming I don’t see any flaws in the design…

If you have comments about this design, feel free to share! 🙂

See you soon!

KaKaRoTo

PS3 Hypervisor dumped!

Hi again,

Great news for PS3 owners, The PS3 Dev team from http://ps3news.com (of which I am now a member) has been able to dump the hypervisor’s executables in memory! This was done thanks to a kernel module that I wrote 🙂

My first experience with kernel programming was challenging, fun and very frustrating because of the lack of docs! But thanks to the open source nature of the kernel’s source code, I was able to understand how to properly use the read_proc of the create_proc_entry API, and was able to dump the memory of the hypervisor by giving full access to the memory through a /proc entry.

You can  download the source code of my kernel module from here. I’ve decided to release it under the LGPL license.

Read more about it on the ps3news forums.

p.s.: What this means is that we can now start reverse engineering the PS3’s hypervisor’s code in order to find an exploit or some way to trigger the ability to install custom firmware on the PS3. However, this does not mean that the PS3 is completely hacked.

This exploit was first discovered by George Hotz.

Enjoy! 🙂