<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14338506</id><updated>2011-11-18T23:54:41.144Z</updated><category term='gluezilla'/><category term='flashing'/><category term='wootness'/><category term='winforms'/><category term='web'/><category term='bugs'/><category term='xulbrowser'/><category term='books'/><category term='security'/><category term='NumericUpDown'/><category term='streaming'/><category term='rants'/><category term='music'/><category term='hacking'/><category term='fosdem'/><category term='shoutcast'/><category term='open source'/><category term='osx'/><category term='assembly'/><category term='phone'/><category term='chrome'/><category term='ad'/><category term='c'/><category term='job'/><category term='android'/><category term='n800'/><category term='browser'/><category term='error message'/><category term='coding'/><category term='windows'/><category term='tomboy'/><category term='.net'/><category term='dsp'/><category term='livros'/><category term='mono'/><category term='winamp'/><category term='terastation'/><category term='mono soc'/><category term='moonlight'/><category term='wave'/><category term='c++'/><category term='focus'/><category term='google'/><title type='text'>World of coding</title><subtitle type='html'>Welcome to the World of Coding. Please check your keyboards at the entrance. This is a weapons-check area; all brains should be ready to fire.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14338506.post-7326388303444843827</id><published>2011-10-12T10:19:00.005+01:00</published><updated>2011-10-12T17:29:33.282+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>OSX, the Air and Recovery Mode, or how to make amazing software</title><content type='html'>This morning I decided I needed a case-sensitive partition on my MacBook Air. It comes with a nice juicy 250GB SSD and I still have about 140GB left, so, having woken up in an adventurous mood, I open up Disk Utility, peer at the partition, note it doesn't complain at me if I shrink it a bit, so I go ahead and resize it. I do this, of course, without killing any of the 30 tabs open on Chrome, or closing down the 3 server connections and about 30 channels on LimeChat, not to mention the 10 terminal sessions running various scripts and remote shells, or  any of the ton of widgets and apps happily fidgeting in the background. Life is good.&lt;br /&gt;&lt;div&gt;&lt;h2&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;The resize finishes with no issues, which of course only encourages me, so I go ahead and create a new partition occupying the space Disk Utility says it's free (who am I to argue, I'm sure it can do the math better than I can).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Error: no disk space left to perform the operation"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or something to that effect, anyways. I wonder if it might be too early for Disk Utility. You know,  math this early in the morning, tricky. I reboot, because that always fixes things, right? After a few seconds (yes, SSD is that awesome) of fretting about whether I still have a working Air or whether I'm now Airless, it boots. Disk Utility isn't fooled, though, it continues to complain that the space it has free isn't big enough to create a partition.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's at this point that my brain kicks in and I run verify on the drive and on the startup partition. Just because the resize finished with no errors, that doesn't mean it didn't actually screw things up, leaving behind a trail of dead bytes all over my drive. It just means it was sneaky about it. A bit like coming home and finding the cat nicely tucked away on her beanbag like a good obedient little kitty, but having the sofa all covered in cat hair. And feeling warm to the touch. As if a certain fur ball had just leaped off of it and onto the beanbag and then pretended to have been there all along. Sneaky.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, after glaring at the cat (pretending to be fast asleep, snoring loudly, pink tongue jutting out in blissful forgetfulness, the sneak), I repair the partition. Or try to, because this time I get complained at repeatedly with red menacing messages and a popup, indicating I need to run the Installation Disc to start Recovery Mode and run Disk Utility from there. After a careful examination of the Air to make sure it hasn't sprouted a DVD drive while I wasn't looking, I quickly google for the proper procedure to apply to the boot process in order to go in to recovery mode, and reboot again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now it seems to me that this thing, not having an optical drive, would come with a recovery partition from which one would boot when needed. Maybe it's just the Air pouting, but when I hit Command-R, instead of offering to boot from the recovery partition, it went online. Online!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have to confess, I was amazed and, quite frankly, boggled. This little gray metal thing that I'm obviously trying really hard to turn into a paperweight is going online to fetch an image of the recovery partition so it can load it and boot it on the fly. If I was impressed before that OSX allowed me to resize the system partition just like that, now this is some seriously impressive recovery process. I mean, really, I've blown up more partition tables than you could shake a stick at (the latest one was a combination of partitioning a portable drive on osx and then formatting said drive on linux and copying a whole bunch of stuff onto it so I could take it on vacation, and then when I'm on vacation 300km from home trying (haha) to use it on the mac, and then having to realign partition tables by hand on the command line), and although I usually don't lose anything except time, the recovery process is always sooooo annoying. This whole OSX recovery process was obviously done for silly people like me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While I'm boggling at it, it does its magic thingy and lo-and-behold! Recovery Mode! I run Disk Utility, hit Verify, hit Repair. Things work, apparently, so I try again to create the partition. It creates it. I reboot and I'm back to normal land. And stuff still works.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the hardware limitations of the Air and the possibility of not having a recovery partition, this whole recovery process is an amazing piece of well-designed software. Instead of having to waste hours trying to recover things manually, everything Just Worked (tm) and I could instead waste my time writing this blog post! It has made my day.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, and poking the cat. That has also made my day. The sneak...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-7326388303444843827?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/7326388303444843827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=7326388303444843827' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7326388303444843827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7326388303444843827'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2011/10/osx-air-and-recovery-mode-or-how-to.html' title='OSX, the Air and Recovery Mode, or how to make amazing software'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-2620550218546836472</id><published>2011-06-27T18:08:00.004+01:00</published><updated>2011-06-27T18:30:06.669+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='job'/><title type='text'>So long, and thanks for all the fish</title><content type='html'>&lt;div&gt;I am, as of now, officially no longer at Novell / Attachmate (I guess you can say I'm detached, I know I do).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;It's been an amazing 4 and a half years, working on an awesome project inside a little bubble of craziness infiltrated in a corporate environment that never understood us (it's ok, we never understood them either).&lt;div&gt;&lt;br /&gt;&lt;div&gt;As for what I'll be up to next, stay tuned!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-2620550218546836472?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/2620550218546836472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=2620550218546836472' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2620550218546836472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2620550218546836472'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2011/06/so-long-and-thanks-for-all-fish.html' title='So long, and thanks for all the fish'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/04206926767623363656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/-oYzQc-yh2W8/TYOx7facX4I/AAAAAAAAAA4/LfZ49QYQ72E/s220/avatar2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-2033681926906223045</id><published>2011-02-06T11:50:00.005Z</published><updated>2011-02-06T12:00:14.982Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='fosdem'/><title type='text'>Ooops, Is It FOSDEM Time Already?</title><content type='html'>&lt;p&gt;I guess it is! As always, FOSDEM is great fun, and once again we had a Mono room with lots of great talks! Especially enjoyed Mark Probst and Jo Shields talks, now I know what happens when the deb folks get a hold on our packages, and why we never get our finalizers called in order in Moonlight!&lt;/p&gt;&lt;p&gt;As for my talk, the important bits were that I didn't go over the time, nobody snored, and I made sure there were plenty of lolcats! &lt;a href="http://spoiledcat.net/files/mono_cpp_interop.pdf"&gt;Get the slides here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Right now I'm watching a very cool talk about the Go language while my laptop is charging plugged in to a very interesting combination of a triple connected to an adapter (stupid third pin on belgium plugs) connected to a power extension. Nothing has exploded yet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-2033681926906223045?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/2033681926906223045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=2033681926906223045' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2033681926906223045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2033681926906223045'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2011/02/ooops-is-it-fosdem-time-already.html' title='Ooops, Is It FOSDEM Time Already?'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-2388403021304375880</id><published>2010-02-16T22:26:00.001Z</published><updated>2010-02-17T00:49:37.798Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='fosdem'/><title type='text'>A small Fosdem wrapup</title><content type='html'>&lt;p&gt;The other weekend I was in Brussels for FOSDEM. As you know, this year we had a Mono room on sunday, thanks to the amazing efforts of &lt;a href="http://weblog.savanne.be/"&gt;Ruben Vermeersch&lt;/a&gt; and &lt;a href="http://blog.reblochon.org/"&gt;Stéphane Delcroix&lt;/a&gt;. The conference was great, as it always is, although as usual as didn't get to see much of the talks on saturday - busy preparing my own talk about Moonlight, and meeting people, which is one of the parts I enjoy most at FOSDEM. Sunday was awesome, full of Mono talks in a nicely packed room. People were very interested, we had great feedback, and everything went very well, including my demos - it was a very good day, and all in all, a great event. On monday we had a special Mono hackday, where we got together and, well, hacked. I sat down with Lucas Meijer of Unity and we went through some of the issues they have embedding Mono, similar to what Moonlight has to do. Lucas decided to stay an extra day just for the Mono hackday, after a lot of chatting and quite a few beers the day before, and I'm so glad he did, it was a very productive, if somewhat short, day.&lt;/p&gt;&lt;p&gt;Over the three days of the event I had the pleasure of meeting, remeeting and chatting with a lot of wonderful people, whom I usually only get to talk to online - Jo Shields, Mirco Bauer, Alan McGovern, Jeremie Laval, Jim Purbrick, Michael Meeks, Mans Rullgard, David "Lefty" Schlesinger, Rob Taylor, Bertrand Lorentz, Massimiliano Mantione, just to name a few and not in any particular order (I just know I forgot a ton of people!). Also got to meet a bunch of portuguese people, like Vânia Gonçalves, Miguel Azevedo, Paulo Trezentos and more - some of them I only get to see at FOSDEM these days, for some odd reason... weird country this is :)&lt;/p&gt;&lt;p&gt;All in all, it was great, I missed the interaction and the chats and the dinners and the talks and the general merryness and learning that is to be had when you're surrounded by a thousand geeks. I hope to see you all again soon!&lt;/p&gt;&lt;p&gt;PS: I somehow got Jérémie's name confused with a known beer brand... which might, or might not be, a good sign! Fixed... :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-2388403021304375880?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/2388403021304375880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=2388403021304375880' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2388403021304375880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2388403021304375880'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2010/02/small-fosdem-wrapup.html' title='A small Fosdem wrapup'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-1521577249043423262</id><published>2010-02-02T23:55:00.016Z</published><updated>2010-02-04T18:13:35.506Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Solving the gcc 4.4 strict aliasing problems</title><content type='html'>&lt;p&gt;A couple of days ago Jeff Stedfast &lt;a href="http://jeffreystedfast.blogspot.com/2010/01/weird-bugs-due-to-gcc-44-and-strict.html"&gt;ran into some problems&lt;/a&gt; with gcc 4.4, strict aliasing and optimizations. Being a geeky sort of person, I found the problem really interesting, not only because it shows just how hard it is to write a good, clear standard, even when you're dealing with highly technical (and supposedly unambiguous) language, but also because I never did "get" the aliasing rules, so it was a nice excuse to read up on the subject.&lt;/p&gt;&lt;p&gt;Basically, the standard says that you can't do this:&lt;/p&gt;&lt;p&gt;&lt;code&gt;int a = 0x12345678;&lt;br /&gt;short *b = (short *)&amp;a;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;I'm forcing a cast here, and since the types are not compatible, they can't be "alias" of each other, and therefore I'm breaking strict-aliasing rules. Note that if you compile this with -O2 -Wall, it will *not* warn you that you're breaking the rules, even though -O2 activates -fstrict-aliasing and -Wall is supposed to complain about everything (right??). Apparently, this is &lt;a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42908"&gt;by design&lt;/a&gt;, though why would anyone not want warnings in -Wall for something that will obviously break code is beyond me. If you want to be told that you're not playing by the rules, make sure you build with -Wstrict-aliasing=2, which will say:&lt;/p&gt;&lt;p&gt;&lt;code&gt;line 2 - warning: dereferencing type-punned pointer will break strict-aliasing rules&lt;/code&gt;&lt;/p&gt;&lt;p&gt;So now you know you're being naughty. Of course, if you did try to access the variable, even just with -Wall it will complain at you - this more complete snippet will give you several warnings with -Wall:&lt;/p&gt;&lt;p&gt;&lt;code&gt;int a = 0x12345678;&lt;br /&gt;short *b = (short *)&amp;a;&lt;br /&gt;b[1] = 0;&lt;br /&gt;if (a == 0x12345678)&lt;br /&gt;  printf ("error\n");&lt;br /&gt;else&lt;br /&gt;  printf ("good\n");&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;line 3 - warning: dereferencing pointer ‘({anonymous})’ does break strict-aliasing rules&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The problem gets ugly when you're dealing with structs and pointers to them - then -Wall is completely silent about possible issues, and only -Wstrict-aliasing=2 will work, like in this little snippet:&lt;/p&gt;&lt;p&gt;&lt;code&gt;typedef struct type {&lt;br /&gt;  struct type *next;&lt;br /&gt;  int val;&lt;br /&gt;} Type;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;...&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Type *t1, *t2, *t3;&lt;br /&gt;t1 = t2 = NULL;&lt;br /&gt;t1 = (Type*) &amp;t2;&lt;br /&gt;int i;&lt;br /&gt;for (i = 0; i &lt; 2; i++) {&lt;br /&gt;  t3 = malloc (sizeof (Type));&lt;br /&gt;  t1-&gt;next = t3;&lt;br /&gt;  t1 = t3;&lt;br /&gt;}&lt;br /&gt;if (!t2)&lt;br /&gt;  printf ("error\n");&lt;br /&gt;else&lt;br /&gt;  printf ("good\n");&lt;/code&gt;&lt;/p&gt;&lt;p&gt;This doesn't emit any warnings on -Wall because the loop makes it slightly fuzzy for gcc to tell whether things are getting assigned or not. -O2 will optimize away the assignment to t1 on line 3, which will make things not work later on.&lt;/p&gt;&lt;p&gt;So how to fix this? The attribute &lt;em&gt;may_alias&lt;/em&gt; allows a type to bypass the aliasing rules, just like character types do (character types are allowed to alias any other type, according to the c99 standard). Changing the definition of Type to the following will make the compiler happy:&lt;/p&gt;&lt;p&gt;&lt;code&gt;typedef struct type {&lt;br /&gt;  struct type *next;&lt;br /&gt;  int val;&lt;br /&gt;} &lt;b&gt;__attribute__((__may_alias__))&lt;/b&gt; Type;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;One final note: if you mix up code with aliased types and non-aliased types, gcc will not enforce aliasing optimizations on your non-aliased-possibly-broken code... i.e., if you define this type two times, one with the attribute, one without, and then do the loop above with both types (separately mind you, with separate variables, the code just happens to be in the same method), the non-aliased type won't fail. Aren't optimizations fun?&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; People have pointed out that the first statement &lt;i&gt;short *b = (short *)&amp;a;&lt;/i&gt; is totally legal and has nothing to do with aliasing.&lt;/p&gt;&lt;p&gt;Yes, that's true, I should have been more precise. The statement is perfectly legal. It's when you try to access the data via the pointer that was assigned on that line that breaks the standard. So when your code blows up, it blows up accessing the data, but that's not the cause, that's the consequence. The cause of said explosion is that optimizations + strict-aliasing look at that (totally legal) statement and say "oh, dude, come on, this is bogus" and throw it away while munching on scooby snacks. Well, not sure about that last part.&lt;/p&gt;&lt;p&gt;Anyways, where was I? Oh yes, so, two things: if you don't want to change your code, you can use may_alias , gcc will say "that's so awesome" and everyone will make merry. Or something. The second thing is, and let me add a little emphasis to this part, because I'm sometimes a bit too subtle, and apparently some things should be said *very clearly*: when a statement is perfectly legal, and yet it IS removed via a combination of default flags with NO warnings whatsoever, something is WRONG, and in my opinion, the problem here is lack of warnings.&lt;/p&gt;&lt;p&gt;And that, as someone said, is that. Or not, whatever tickles your fancy. Hmmmm, tickles...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-1521577249043423262?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/1521577249043423262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=1521577249043423262' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/1521577249043423262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/1521577249043423262'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2010/02/solving-gcc-44-strict-aliasing-problems.html' title='Solving the gcc 4.4 strict aliasing problems'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-5501941491429795315</id><published>2010-01-22T19:03:00.001Z</published><updated>2010-01-22T19:11:00.502Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='moonlight'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Chrome and Moonlight, or how to deadlock a browser</title><content type='html'>&lt;p&gt;It's no secret that Moonlight works best on Firefox at the moment - it's our baseline browser, after all - but we've had many requests to add Chrome support, and since it supports NPAPI just like all browsers out there, it should really work out of the box, requiring only some extra code to implement/hackify stuff that Chrome/WebKit doesn't expose and that we need - basically, DOM support and some downloader tweaks.&lt;/p&gt;&lt;p&gt;After some initial positive reports of Chrome loading the Silverlight Chess sample successfully, I decided to run some tests and start working on the WebKit bridge code... only to find out that I couldn't make Moonlight load properly on Chrome on my laptop at all. Even the simplest of test pages would hang forever on our initial splash animation, and killing Chrome would dump stacktraces all over the place. Clearly it wasn't happy about Moonlight.&lt;/p&gt;&lt;p&gt;My first instinct was "I must be doing something wrong", so I tried on another machine. Same thing. Built a Chromium debug build and tried it - even worse, I hit symbol conflicts all over the place. It seems the Native Client plugin is included inside Chromium by default, and it exports all the NPAPI symbols publicly. Any plugin (like Moonlight) which uses a loader and dynamically loads the real plugin from another location will get its calls intercepted by the Native Client plugin, and things will fail badly. After fixing this, it still kept hanging on the splash animation. Asked other people to test it - same thing. 99.8% of the time it deadlocks completely, and in only 0.2% of the time will it actually load properly. I guess the positive reports were just really, really lucky.&lt;/p&gt;&lt;p&gt;Next course of action - debug the thing. Following the instructions on how to debug Chrome on Linux, I learned about the Renderer and the Plugin processes that get spawned (and the Zygote, too :P), and how to debug them. Only it didn't work (of course not, I hear you say, that would have been way too easy), due to a missing condition on an if on the Chrome loader (I'm guessing nobody actually debugs it on Linux? :P) Patch the thing, and yay, we're debugging.&lt;/p&gt;&lt;p&gt;To keep plugins from blowing up and/or generally misbehaving and giving the browser a bad reputation, Chrome runs them on a separate process that communicates with the main rendering process via IPC. This, of course, is a terrain rife with potential race conditions and reentrancy issues, and that's exactly what's happening with Moonlight. Fortunately, unlike most race conditions, the problem was very reproducible under gdb as well, and I was able to get traces of both processes in the middle of the deadlock.&lt;/p&gt;&lt;p&gt;So what is deadlocking? Well, it's actually very simple: the renderer process calls NPP_SetWindow on the plugin, and also does a blocking call at the same time. In NPP_Setwindow, we do NPN_GetValue and NPN_GetProperty, which call back into the renderer process and block... oops.&lt;/p&gt;&lt;p&gt;I wasn't very confident that I could reproduce this without all the Moonlight code, but just in case, and because I wanted to have a nice clean skeleton NPAPI plugin around, I built one, which does nothing but stub out all the required methods to get an empty plugin going. When it gets to NPP_SetWindow, it calls NPN_GetValue and NPN_GetProperty - and it deadlocks pretty much 100% of the time.&lt;/p&gt;&lt;p&gt;I opened issue &lt;a href="http://code.google.com/p/chromium/issues/detail?id=32797"&gt;#32797&lt;/a&gt; on crbug.com, with the small splash plugin test case, if you're curious. Hopefully this will get fixed fast. With all the calls to the browser that we do during execution, I really really hope we don't hit this again... but it's more likely than not that we will :/&lt;/p&gt;&lt;p&gt;While the idea of keeping the plugins under control by shuffling them to the side is a good one, browser devs should keep in mind that, with all the limitations that a plugin is subjected to, with NPAPI being very far from perfect, with browsers implementing it differently, OS differences that plugins have to deal with as well, it's already so difficult to have a performant plugin (and believe me, the last thing we want to do is stall the brower), we shouldn't have to be worrying about potential reentrancy issues and race conditions when doing such simple things as querying the browser for a property value.&lt;/p&gt;&lt;p&gt;Pretty please?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-5501941491429795315?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/5501941491429795315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=5501941491429795315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/5501941491429795315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/5501941491429795315'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2010/01/chrome-and-moonlight-or-how-to-deadlock.html' title='Chrome and Moonlight, or how to deadlock a browser'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-2831166525146831769</id><published>2009-12-02T17:10:00.000Z</published><updated>2009-12-02T17:14:19.940Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='fosdem'/><title type='text'>Mono Developer Room for FOSDEM 2010!</title><content type='html'>&lt;p&gt;Some excellent news out of Brussels today, there is going to be a Mono Developer Room at FOSDEM 2010! Call for participation &lt;a href="http://weblog.savanne.be/186-fosdem-2010-mono-developer-room-cfp"&gt;is now open&lt;/a&gt;, so come and join us put together an awesome Mono day at FOSDEM! &lt;/p&gt;&lt;p&gt;Thank you so much to &lt;a href="http://weblog.savanne.be/"&gt;Ruben Vermeersch&lt;/a&gt; for spearheading this effort, together with &lt;a href="http://blog.reblochon.org/"&gt;Stéphane Delcroix&lt;/a&gt;. You guys rock!&lt;/p&gt;&lt;p&gt;Don't forget, &lt;a href="http://spreadsheets.google.com/viewform?hl=en_GB&amp;amp;formkey=dGlRMUJfbzVjaUZOSlpYeHFOS19ZdFE6MA"&gt;send in your talk&lt;/a&gt;!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-2831166525146831769?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/2831166525146831769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=2831166525146831769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2831166525146831769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/2831166525146831769'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/12/mono-developer-room-for-fosdem-2010.html' title='Mono Developer Room for FOSDEM 2010!'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-1545474759479405022</id><published>2009-11-21T20:38:00.004Z</published><updated>2009-11-21T20:48:23.086Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='moonlight'/><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='phone'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>New phone, Moonlight almost upon us and other little tidbits from the week</title><content type='html'>First off, Moonlight news: 2.0 is almost upon us (or upon you, in any case). The official release date is not set yet, but it is going to be in the next two weeks, so if you have bugs that need fixing for the release, speak now or forever hold your peace. Well, not forever forever... you know what I mean :)&lt;br /&gt;&lt;h3&gt;A simple phone&lt;/h3&gt;This week I got supremely frustrated with my phone(s). I have a very friendly Nokia 6288 which is unfortunately locked-in to Vodafone, and as some of you might know, I got a new phone number from a different operator, which means I can't use my Nokia until I unlock it... and in this country, it's not an easy thing to do. In the meantime, I have some unlocked phones, but they're for emergencies only, really, when I'm travelling and just need to use a local card for a bit, not at all something that I would like to use on a regular basis. And I did try to use them, but it turns out I need a little more from a phone than what a Nokia Prism can provide... boy oh boy is that thing slow :P&lt;br /&gt;&lt;br /&gt;Choosing a new phone for me is always hard... it beats clothes shopping in difficulty level/time spent hands down. I take *months* to make up my mind, and of course, by that time they're deprecated and new models are out, so I can never decide :P So this week I was stuck in a shopping center, getting frustrated with my crappy phone yet again, and I happen to walk in to a Fnac store, which the mobile phone section right in front of me. They always say you shouldn't shop for food when you're hungry... well, it turns out that applies to looking at pretty gadgets while being frustrated with your own gadgets, too.&lt;br /&gt;&lt;br /&gt;I started browsing, not very impressed by the selection, and I come to a corner with a pretty litte thing called HTC Tattoo. I don't know if it was the name, or the silly android logo on the silvery back of the display model or what, but before I realized it, I was walking out with a new phone.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.htc.com/uploadedImages/WWW/Press_Room/Product_Photo_Gallery/HTC_Tattoo/Download_01_HTC_Tattoo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 321px; height: 250px;" src="http://www.htc.com/uploadedImages/WWW/Press_Room/Product_Photo_Gallery/HTC_Tattoo/Download_01_HTC_Tattoo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I love it, it's everything I needed and a ton more. The only gripe I have with it is lack of a foldout keyboard, but the touch keypad is surprisingly accurate for it's small size, so I'm not missing it too much. The parts I like best are having mp3 and ogg as my morning alarm and ringtones, the twitter/facebook/gtalk/gmail/imap/flickr integration with everything and the gorgeous display. Oh yes, it makes calls, too :)&lt;br /&gt;&lt;br /&gt;Two seconds into playing with it I found a bug in the messaging software, where when you send an sms, it gives you the option to send more by having an empty box and a send button, and if you hit the send button, it will send an empty sms without any confirmation :P That was pretty much the only hiccup I've had with it so far, it's been a pretty smooth ride. I'm sure I'll have a lot more problems once I start hacking on it though :D&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;ChromiumOS&lt;/h3&gt;Thursday Google released the source of ChromiumOS. That evening I basically couldn't get to sleep, so I figured I might as well go do something boring like trying it out on my EeePC - watching stuff build usually does wonders for my sleeplessness.&lt;br /&gt;&lt;br /&gt;Building the thing was pretty straightforward, and in a short while I had it running from USB on the Eee 901. But, alas, no wireless - the 901 comes with a ralink, whose drivers are still relegated to the staging area of the kernel, and it turns out ChromiumOS doesn't include those in the build. So I had to go back, reconfigure the kernel to add the ralink drivers and build again, then build the image, load it on the stick, and boot again - et voilà, wireless was up and running.&lt;br /&gt;&lt;br /&gt;Next problem... how to get it to connect to a secure AP - it's not like you can login without network on ChromiumOS (well, yes, you can, but I'm stubborn and don't wanna), and there's no way to configure anything from the login screen... fortunately, wpa_cli was available from the terminal, so after a few choice commands, it connected to the AP.&lt;br /&gt;&lt;br /&gt;But still, no login. For some reason the connman DNS proxy refused to talk to the DNS on the router, so it wouldn't resolve any hosts (and it doesn't log anything! there's no docs for it, nothing... essential system-level software that fails without telling me anything is annoying!). &lt;br /&gt;&lt;br /&gt;At this point I decided to get it running from the HD, to make it easier to configure stuff, and the installation of the system to HD was completely painless and fast. Another reboot, and we're up and running from HD. Still no DNS, so terminal again to hack up resolv.conf and set up nameservers. ChromiumOS doesn't save wireless configurations, so every reboot means another set of wpa_cli commands, which is annoying. But hey, I have a lot of patience. Or I'm masochistic... one of those.&lt;br /&gt;&lt;br /&gt;Finally, net was running, tried to login and... no dice. A quick look at the logs reveals that curl is failing trying to load security certificates :/ At this point I gave in a bit and connected the eee to the ethernet, just to make sure. Same thing. Looks like it's either trying to connect to a stale server, or there's something wrong with my build. So I've seen the login screen (very blue), but nothing else. Maybe tomorrow I'll take another stab at it - I'm curious how the desktop is done.&lt;br /&gt;&lt;br /&gt;Didn't help much with the sleep thing, but it was fun. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-1545474759479405022?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/1545474759479405022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=1545474759479405022' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/1545474759479405022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/1545474759479405022'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/11/new-phone-moonlight-almost-upon-us-and.html' title='New phone, Moonlight almost upon us and other little tidbits from the week'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-9210018447355460130</id><published>2009-10-20T14:53:00.003+01:00</published><updated>2009-10-20T15:05:49.628+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='wave'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Doing the Wave</title><content type='html'>For the past week I've been doing the Google Wave dance. First impressions are, it's a really interesting mashup of different messaging/content concepts - Wiki meets IM meets Email threading - but it's way too cluttered. The social web evolution tells us that simpler is better, services tend to be straightforward, simple, uncluttered, fast. Google's own web page was a hit precisely because it was simple, clean and to the point, Twitter and all related services are the same thing. Having a huge chunk of my desktop space occupied by one browser window with a bunch of stuff because that's what it takes to be able to interact with Google Wave is way too intrusive. And of course, the fact that it can literally bring the browser to it's knees tells me that it might be a bit too much for a web app.&lt;br /&gt;&lt;br /&gt;I'm looking forward to seeing how it evolves, I'm sure a lot of people are getting ideas for better ways to do it... I've had a bunch already. In the meantime, I'm on it as shana.ufie@googlewave.com, feel free to add me to waves, I want to see what people are doing with that thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-9210018447355460130?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/9210018447355460130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=9210018447355460130' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/9210018447355460130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/9210018447355460130'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/10/doing-wave.html' title='Doing the Wave'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-3914293666542845120</id><published>2009-08-03T14:20:00.005+01:00</published><updated>2009-08-04T17:28:30.843+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Binding C++ APIs, the COM way</title><content type='html'>&lt;p&gt;A couple of days ago, during a routine "aaagh, we still don't have a nice way to do C# bindings for C++ APIs" discussion, Miguel asked me how hard would it be to leverage COM to bind C++ APIs. I've been known to mess around with COM, as when I did Mono.WebBrowser/Gecko C# bindings, but I never did get around to do little test apps to try and streamline the whole process of using COM to bind a C++ API, so I jumped at the chance and got some interesting results.&lt;/p&gt;&lt;p&gt;COM, despite all the bad connotations surrounding it, is actually really simple: it is just a contract stating that any COM-conforming C++ class has at least 3 methods: QueryInterface, AddRef and Release. No matter how many members the class might have, those 3 are always present at the top of the class' vtable, so  Mono's COM interop layer always knows where they are and can invoke them directly. And since the vtable layout for the class is known, any other method on that class can also be invoked in this way, bypassing name-mangling and other issues.&lt;/p&gt;&lt;p&gt;COM-comforming C++ classes can be described in C# via interfaces that have the same layout as the C++ class, so Mono knows exactly where the methods are in the vtable when invoking. Furthermore, COM support is pretty much transparent in C# - once you've defined your interfaces, you don't even realize you're using a COM object, it's just another object that you invoke methods on. Mono does all the marshalling for you, so you don't have to pass IntPtrs around, you just use the types you defined and everything will be marshalled for you behind the scenes.&lt;/p&gt;&lt;h3&gt;Show me the code!&lt;/h3&gt;&lt;p&gt;Let's say you have a little C++ library you'd like to use from C#:&lt;/p&gt;&lt;code&gt;&lt;p&gt;class File {&lt;br /&gt;public:&lt;br /&gt;  int Open();&lt;br /&gt;  int Close();&lt;br /&gt;};&lt;/p&gt;&lt;/code&gt;&lt;h3&gt;The C++ COM class&lt;/h3&gt;&lt;p&gt;The first thing you need to do is create a COM class which will serve as a proxy between C# and your nice little library.&lt;/p&gt;&lt;code&gt;&lt;p&gt;class COMFile {&lt;br /&gt;public:&lt;br /&gt;  virtual int QueryInterface (void* id, void** result) {&lt;br /&gt;    *result = this;&lt;br /&gt;    return 0;&lt;br /&gt;  }&lt;br /&gt;  virtual int AddRef () { return 1; }&lt;br /&gt;  virtual int Release () { return 0; }&lt;br /&gt;&lt;br /&gt;  virtual int Open () { return file-&gt;Open(); }&lt;br /&gt;  virtual int Close () { return file-&gt;Close(); }&lt;br /&gt;&lt;br /&gt;  COMFile (File* f) : file(f) {}&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;  File* file;&lt;br /&gt;};&lt;br /&gt;&lt;/p&gt;&lt;/code&gt;&lt;p&gt;All methods that need to be "exported" are marked as virtual, and the layout is what you would expect: the 3 methods on top that make this a COM class, plus the 2 methods that are proxying the calls to the library's File class.&lt;/p&gt;&lt;p&gt;AddRef and Release are standard refcounting methods - these will be called by Mono as needed when you invoke things that end up creating objects of this type. I'm just returning fixed values here, but it's important to note that when Release makes the refcount go to 0, the object &lt;a href="http://msdn.microsoft.com/en-us/library/ms692481(VS.85).aspx"&gt;should be released&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;QueryInterface allows Mono's COM interop layer to figure out if a pointer can be cast to a specified type - via behind the scenes magic (and a little code), it enables a dynamic type system. This example is very simple and doesn't use inheritance, but with a complex binding you'll certainly have inheritance, and there is where QueryInterface comes in, for instance allowing for upcasts if your COM class inherits from several different classes.&lt;/p&gt;&lt;p&gt;You'll notice in the C# interface below that it is marked with a Guid - this id is unique to every class, and your C++ class definition should also have the same id. When QueryInterface is invoked, the id argument is the Guid of the type you want to cast to, so you can check if your C++ class is of the correct type by comparing ids, or if it is a subclass and you need to cast the result (or you don't support it at all, in which case you'd return null).&lt;/p&gt;&lt;h3&gt;The C# interface&lt;/h3&gt;&lt;code&gt;&lt;p&gt;[Guid ("00000000-0000-0000-0000-000000001111")]&lt;br /&gt;[InterfaceType (ComInterfaceType.InterfaceIsUnknown)]&lt;br /&gt;[ComImport()]&lt;br /&gt;public interface COMFile {&lt;br /&gt;  [PreserveSigAttribute]&lt;br /&gt;  [MethodImpl (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]&lt;br /&gt;  int Open();&lt;br /&gt;&lt;br /&gt;  [PreserveSigAttribute]&lt;br /&gt;  [MethodImpl (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]&lt;br /&gt;  int Close();&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/code&gt;&lt;p&gt;"Wait a minute... where are the 3 methods?", I can hear you thinking. Well, on the C# side you don't need them. The interface is marked ComImport(), so Mono already knows it's a COM class and it will add them for you, no questions asked. The C# interface only needs the definitions of the methods you want to access, and nothing else.&lt;/p&gt;&lt;h3&gt;Putting it all together&lt;/h3&gt;&lt;p&gt;Now that you have all your definitions in place, the only thing you need is to get a reference to a COMFile object. For this you're going to need to add a P/Invoke call to a C function on your proxy code that gives you a pointer to an instance of that class. You only need to do that for top level objects, because any objects that are returned via COM calls are directly available to you.&lt;/p&gt;&lt;h3&gt;C++ proxy library&lt;/h3&gt;&lt;code&gt;&lt;p&gt;extern "C" {&lt;br /&gt;  COMFile* getptr() {&lt;br /&gt;    return new COMFile (new File ());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/code&gt;&lt;h3&gt;C# test app&lt;/h3&gt;&lt;code&gt;&lt;p&gt;[DllImport ("myglue")]&lt;br /&gt;[return:MarshalAs(UnmanagedType.Interface)]&lt;br /&gt;static extern COMFile getptr();&lt;br /&gt;&lt;br /&gt;public static void Main() {&lt;br /&gt;  COMFile file = getptr();&lt;br /&gt;  int return = file.Open();&lt;br /&gt;  ...&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/code&gt;&lt;p&gt;And there you go, the "file" variable is now talking to your COM class which is proxying all calls directly to your library. The glue code is very straightforward and can be easily autogenerated.&lt;/p&gt;&lt;p&gt;You can download a complete working sample here:&lt;br /&gt;&lt;a href="http://shana.worldofcoding.com/files/comtest-0.1.tar.gz"&gt;comtest-0.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shana.worldofcoding.com/files/comtestsharp-0.1.tar.gz"&gt;comtestsharp-0.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Build and install both packages to the same prefix, then go to $prefix/lib/ and do " ln -s comtestsharp/* . ". Then just do"mono comtestsharp.exe" and you should see the output of the Open and Close calls.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: BTW, neither QI nor AddRef/Release are actually implemented properly in this little sample. The unused parameter "id" is the Guid that is getting requested, and QI should always check it against the current instance.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-3914293666542845120?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/3914293666542845120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=3914293666542845120' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3914293666542845120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3914293666542845120'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/08/binding-c-apis.html' title='Binding C++ APIs, the COM way'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-3867128557435371033</id><published>2009-05-18T16:25:00.005+01:00</published><updated>2009-05-18T17:55:30.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Book memes for a monday morning</title><content type='html'>&lt;p&gt;* Grab the nearest book.&lt;br /&gt;* Open it to page 56.&lt;br /&gt;* Find the fifth sentence.&lt;br /&gt;* Post the text of the sentence in your journal along with these instructions.&lt;br /&gt;* Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;"I was chewing on the peculiar fact that both these photographs were pointing outwards from the desk, when a connecting door opened, and I was suddenly in the presence of Spencer."&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Note to self: when I eventually get down to writing a book, remember to collect all the memes flying around and place interestingly exotic and/or misterious phrases in all the right spots.&lt;/p&gt;&lt;p&gt;Extra cookies if anyone can guess what book it is.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; No cookies for all you guys looking up the book on Google! As penitence you now have to go and read the book! Tssk tssk&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-3867128557435371033?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/3867128557435371033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=3867128557435371033' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3867128557435371033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3867128557435371033'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/05/book-memes-for-monday-morning.html' title='Book memes for a monday morning'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-8879284254158951458</id><published>2009-04-23T15:58:00.006+01:00</published><updated>2009-04-23T16:10:05.920+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='tomboy'/><title type='text'>Gtk# on Windows - now with more Tomboy flavour!</title><content type='html'>If anyone missed it, a &lt;a href="http://mkestner.blogspot.com/2009/04/gtk-for-net.html"&gt;new shiny Gtk# 2.12.8 installer for Windows&lt;/a&gt; is available. As &lt;a href="http://tirania.org/blog/archive/2009/Apr-22.html"&gt;Miguel noted yesterday&lt;/a&gt;, it's a nice small package with the full stack so you have everything you need to develop in an awesome cross-platform way.&lt;br /&gt;&lt;br /&gt;And speaking of cross-platform development, in case you missed that one as well, a new version of &lt;a href="http://projects.gnome.org/tomboy/download.html"&gt;Tomboy is out now&lt;/a&gt;, with full Windows and Mac OSX support, for your note-taking pleasure! I've been using Tomboy forever, and it's one of those little apps that you just can't go without once you have it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-8879284254158951458?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/8879284254158951458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=8879284254158951458' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/8879284254158951458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/8879284254158951458'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/04/gtk-on-windows-now-with-more-tomboy.html' title='Gtk# on Windows - now with more Tomboy flavour!'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-4631730994249153357</id><published>2009-04-01T23:05:00.004+01:00</published><updated>2009-04-01T23:10:47.047+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono soc'/><title type='text'>Google Summer of Code with Mono!</title><content type='html'>Calling all students!&lt;br /&gt;&lt;br /&gt;Google Summer of Code is here, and this is the week where you do your proposals to spend the next few months working on awesome projects on Mono!&lt;br /&gt;&lt;br /&gt;Our ideas page is &lt;a href="http://mono-project.com/StudentProjects"&gt;here&lt;/a&gt;, and the soc page is &lt;a href="http://socghop.appspot.com/"&gt;here&lt;/a&gt;. There is a #monosoc channel on irc.gimpnet.org dedicated to everything Soc, do don't delay, do it now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-4631730994249153357?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/4631730994249153357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=4631730994249153357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4631730994249153357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4631730994249153357'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/04/google-summer-of-code-with-mono.html' title='Google Summer of Code with Mono!'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-3545562911739627649</id><published>2009-03-23T22:12:00.001Z</published><updated>2009-03-23T22:12:49.129Z</updated><title type='text'>RIP Mário Gamito</title><content type='html'>Nem sei o que dizer...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-3545562911739627649?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/3545562911739627649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=3545562911739627649' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3545562911739627649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3545562911739627649'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/03/rip-mario-gamito.html' title='RIP Mário Gamito'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-1150661579145613990</id><published>2009-02-19T11:37:00.006Z</published><updated>2009-02-19T12:11:40.022Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='moonlight'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Moonlight shining on Ubuntu</title><content type='html'>This morning the first thing on the channel was the following excellent news, that I shall now reproduce directly as-read:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;directhex&amp;gt; it's official, moon binaries are now trivially installable on any ubuntu 9.04 system&lt;br /&gt;&amp;lt;directhex&amp;gt; the 1-click url is &lt;a href="apt:moonlight-plugin-mozilla"&gt;apt:moonlight-plugin-mozilla&lt;/a&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Awesome stuff directhex, many thanks ot you and everyone else that helped shine a bit of moonlight on jaunty!&lt;br /&gt;&lt;br /&gt;PS: directhex also noted that the build servers are busy building, so not all architectures might be available right now, just give it a bit of time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-1150661579145613990?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/1150661579145613990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=1150661579145613990' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/1150661579145613990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/1150661579145613990'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2009/02/moonlight-shining-on-ubuntu.html' title='Moonlight shining on Ubuntu'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-7605070114433880669</id><published>2008-11-07T19:27:00.002Z</published><updated>2008-11-07T19:29:53.290Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>A little browser sample</title><content type='html'>By popular demand, here is the sample that I used at the ENEI presentation - &lt;a href="http://shana.worldofcoding.com/en/browser.html"&gt;a browser in 12 lines of code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-7605070114433880669?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/7605070114433880669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=7605070114433880669' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7605070114433880669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7605070114433880669'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2008/11/little-browser-sample.html' title='A little browser sample'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-174523875694672816</id><published>2008-10-24T04:08:00.008+01:00</published><updated>2008-10-24T04:42:44.479+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Some busy days ahead</title><content type='html'>As &lt;a href="http://www.go-mono.com/mono-downloads"&gt;Mono 2.0.1&lt;/a&gt; is rolling out, I'll be having a few busy days ahead talking about it.&lt;p&gt;First, at &lt;a href="http://www.enei.net/"&gt;ENEI'08&lt;/a&gt; in Aveiro this sunday October 26, where I'll be doing a presentation on Mono and integrating a roundtable on mobility and convergence.&lt;/p&gt;&lt;p&gt;On November 8th, it's back to Aveiro for the &lt;a href="http://glua.ua.pt/TechSessions"&gt;GLUA TechSessions&lt;/a&gt;, where besides me talking about Mono, there's going to be talks about Gnome, WebKit and much more.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://glua.ua.pt/TechSessions" border="0"&gt;&lt;img style="float:left; border:0;margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://3.bp.blogspot.com/_GAFHyYeOTVI/SQFBBdCCclI/AAAAAAAAA1g/qBJuZK2RUYs/s320/glua-banner.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5260557332974301778" /&gt;&lt;/a&gt;This one is organized by the excellent guys at the University of Aveiro's Linux user group, which brought you such great hits as the OpenSuse meetup last September. That one went so well that they decided they just had to organize something more technical this time around - apparently, me talking for more than an hour last time was not enough :)&lt;/p&gt;&lt;p&gt;&lt;a border="0" href="http://codebits.sapo.pt/"&gt;&lt;img style="float:right;cursor:pointer; border:0;cursor:hand;width: 200px; height: 150px;" src="http://codebits.sapo.pt/logos/vb200x150.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Finally, on November 13 it's time for &lt;a href="http://codebits.sapo.pt/"&gt;Codebits&lt;/a&gt; in Lisbon and another Mono talk by yours truly. This is the second year of this event, a sort of 3-day hackday with talks and competitions and a chance to network, always fun.&lt;/p&gt;&lt;p&gt;Now if you'll excuse me, I've gotta go make sure the laptop actually works with a projector...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-174523875694672816?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/174523875694672816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=174523875694672816' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/174523875694672816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/174523875694672816'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2008/10/some-busy-days-ahead.html' title='Some busy days ahead'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAFHyYeOTVI/SQFBBdCCclI/AAAAAAAAA1g/qBJuZK2RUYs/s72-c/glua-banner.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-9134371357033157060</id><published>2008-09-15T03:23:00.007+01:00</published><updated>2008-09-15T04:31:09.857+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Slides from ENOS 2008 Mono session</title><content type='html'>By popular demand, I'm putting up the slides from my afternoon session on the Mono project, presented last weekend (September 6) at &lt;a href="http://pt.opensuse.org/Eventos/ENOS"&gt;ENOS 2008&lt;/a&gt;, Instituto Superior de Engenharia do Porto.&lt;p&gt;The talk covers our platform architecture, development status, and takes a look at some of the leading desktop applications built on Mono technology.&lt;/p&gt;&lt;p style="display:block; margin:0px auto 10px; text-align:center;"&gt;&lt;a href="http://www.worldofcoding.com/mono_presentation.pdf"&gt;&lt;img style="border:0;" src="http://4.bp.blogspot.com/_GAFHyYeOTVI/SM3K_L9suAI/AAAAAAAAA0s/lvqiXUIz1Pg/s400/mono-talk.png" border="0" alt="Cover slide" id="BLOGGER_PHOTO_ID_5246072327848638466" /&gt;&lt;br /&gt;Download PDF&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;A big thank you goes out to all who attended and made this great event possible, and especially to &lt;a href="http://cgoncalves.blogspot.com/"&gt;Carlos Gonçalves&lt;/a&gt;, who organized it all and did an awesome job! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-9134371357033157060?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/9134371357033157060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=9134371357033157060' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/9134371357033157060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/9134371357033157060'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2008/09/slides-from-enos-2008-mono-session.html' title='Slides from ENOS 2008 Mono session'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GAFHyYeOTVI/SM3K_L9suAI/AAAAAAAAA0s/lvqiXUIz1Pg/s72-c/mono-talk.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-7004531341733859541</id><published>2008-02-11T13:22:00.000Z</published><updated>2008-02-11T15:29:46.127Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>It's that time of the year again!</title><content type='html'>&lt;b&gt;Hack week!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;*does little jiggly dance*&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;If you're not familiar with what it is, here's the gist of it: For one week, all the geeks at Novell stop what they're doing and dive into a project of their choice. That's right, a full week of pure, anadulterated hacking!&lt;br /&gt;&lt;br /&gt;This year I'm going to use this week to scratch an hitch I've been having with bugzilla, by getting together a proper &lt;a href="http://idea.opensuse.org/content/ideas/implement-a-gui-bugzilla-client"&gt;GUI &lt;/a&gt;for the thing, together with uber-hacker &lt;a href="http://grendello.blogspot.com/"&gt;Marek Habersack&lt;/a&gt;. Join up if you're interested, the more the merrier!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-7004531341733859541?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/7004531341733859541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=7004531341733859541' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7004531341733859541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7004531341733859541'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2008/02/its-that-time-of-year-again.html' title='It&apos;s that time of the year again!'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-195132078628459250</id><published>2008-01-02T15:19:00.000Z</published><updated>2008-01-02T16:29:19.360Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gluezilla'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Generating C# interfaces the lazy way</title><content type='html'>Since all this Winforms WebBrowser control / Mono.Mozilla / gluezilla business started, there's one thing that's been nagging me at that place in the brain where I store stuff I'd rather not think about at the moment (and yes, it's a place that quite resembles those junk-filled attics you see in movies where the kids go to play and occasionally encounter old moth-eaten dresses, the occasional treasure map or your garden-variety skeleton of the aunt nobody had seen in 50 years - a stuffy, moldy place where you can't take a step without tripping on something...)...&lt;br /&gt;&lt;br /&gt;Where was I? Oh, yes, nagging me was the thought that, while I had successfully created C# interfaces from the mozilla idl files, and was successfully accessing mozilla through XPCOM directly from the managed side, those interfaces were created by hand, which was not that hard at all, and I really could go on doing them by hand, only getting full DOM support on Mono.Mozilla would require generating some 50 interfaces... by hand.... ugh&lt;br /&gt;&lt;br /&gt;So, whilst suffering without net last week due to a router dying and a firewall showing solidarity towards said router (i.e., dying too), I ran across some perl scripts that are being used for various tasks all over the mono tree, and decided that enough was enough, I should get it over once and for all and do a little script to parse the idl files and generate my badly needed interfaces.&lt;br /&gt;&lt;br /&gt;Queue a fun-filled day playing around with perl, learning from scripts and from what little documentation I could find on my system (no net, no manuals...) In the end, scraped something together which is living on svn in &lt;a href="http://anonsvn.mono-project.com/source/trunk/mcs/class/Mono.Mozilla/tools/xpidl2cs"&gt;mcs/class/Mono.Mozilla/tools/xpidl2cs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;xpidl2cs&lt;/span&gt; basically parses an idl file and generates a C# interface that's ready to be used. It goes all the way up the inheritance tree and generates all parents and, since .NET interop doesn't support interface inheritance and requires child interfaces to also include all the declarations from the parent, xpidl2cs recursively includes all the parent declarations, so you end up with a (probably rather) huge but working interface.&lt;br /&gt;&lt;br /&gt;xpidl2cs also generates all the interfaces that are used in methods and properties of your target idl (and parents) so that all dependencies are satisfied in one pass. To avoid endless looping on this, the script doesn't generate the interface if a .cs file with the same name already exists in the directory, so if you want to make sure everything is regenerated, you should rm all interfaces first.&lt;br /&gt;&lt;br /&gt;The usage is simple: xpidl2cs.pl file.idl [/path/to/idl/files/]&lt;br /&gt;&lt;br /&gt;Any bugs, comments, flames, etc, feel free to nag here or on the #mono channel over at irc.gnome.org, or just mail me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-195132078628459250?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/195132078628459250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=195132078628459250' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/195132078628459250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/195132078628459250'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2008/01/generating-c-interfaces-lazy-way.html' title='Generating C# interfaces the lazy way'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-4941303577277754487</id><published>2007-12-11T15:20:00.000Z</published><updated>2007-12-11T16:00:29.687Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>There and back again... The Mono Summit 2007, and so much more</title><content type='html'>I had written this huge post about how awesome the Mono Summit in Madrid was, how great it was to meet everyone (some again, some for the first time face-to-face), how much I learned from talking and sharing ideas and watching the presentations... and then @#$@$% synergy went and turned on control again and when I scrolled, the entire page was gone!&lt;br /&gt;&lt;br /&gt;gnnngnnnngnn&lt;br /&gt;&lt;br /&gt;Of course, the autosave function didn't work either, so I was left with the title and the first line.... *sigh* and I had pretty pictures in too *sigh*&lt;br /&gt;&lt;br /&gt;So, this is going to be much shorter.&lt;br /&gt;&lt;br /&gt;Mono Summit 2007: awesome&lt;br /&gt;&lt;br /&gt;Highlights:&lt;br /&gt;&lt;br /&gt;* Talking and debugging speedy-gonzalez-like with my favourite marsupial Geoff Norton about all things mac-ish;&lt;br /&gt;&lt;br /&gt;* Discussing winforms and it's direction with Jonathan Pobst, as well as blowing up his Visual Studio 2008 with a carefully aimed HAHA;&lt;br /&gt;&lt;br /&gt;* Meeting our awesome tester Gert Driesen, recipient of our lifetime achievement award for extreme uberness in testing everything with extreme prejudice (award which will, for sure, take physical form and reach him... :) );&lt;br /&gt;&lt;br /&gt;* Meeting our wtf-is-wrong-with-transparency-dude/winforms designer Ivan Zlatev and making him come to dinner with us (hey, it was fun, wasn't it! ;) )&lt;br /&gt;&lt;br /&gt;* Meeting my COM hero Jonathan Chambers!&lt;br /&gt;&lt;br /&gt;* Watching with delighted surprise as Jim Purbrick (of Second Life fame) presented the pathfinding / tower of defense game we had been working on at Codebits Lisbon actually live in Second Life&lt;br /&gt;&lt;br /&gt;* Watching the moonlighters work their magic;&lt;br /&gt;&lt;br /&gt;* Watching Aaron Bockover turn his T into a portable disco by sending commands to the thinkpad acpi&lt;br /&gt;&lt;br /&gt;* Finally meeting my good friend/asp.net master Marek Habersack&lt;br /&gt;&lt;br /&gt;* Getting back together with all my teamsters&lt;br /&gt;&lt;br /&gt;These are only the highlights, mind you, there was so much more, between the Boo, Debugging, MD, Mac and all the other presentations, meeting contributors and users and developers and getting together to discuss and debug and hack and having a few laughs over drinks and jamón and coffee and walking around Madrid trying to steer through the huge crowds and having our room keys deactivated every couple of days so that everyone had to meet downstairs and chat a bit more while they were reactivated (nice touch there, hotel service)... Did I mention how awesome it was?&lt;br /&gt;&lt;br /&gt;So that was the Mono Summit 2007 in Madrid. Now that I'm back and filled with all the energy I got from this amazing event, I decided to make some changes to the way I work, because I realized that I was still carrying around some old habits from the closed-source/enterprise world that are keeping me back. Old habits are really hard to break, so this past week I've done two radical changes that will, hopefully, be the trigger to improving my whole way of working.&lt;br /&gt;&lt;br /&gt;The first change was dumping Windows completely, and with it, Visual Studio. The past thursday marked my  first Windows-free week in 10 years of work. I'm now running full time on openSuse, and it's great :)&lt;br /&gt;&lt;br /&gt;The second change was switching to a US International layout on the keyboard. I just reached the conclusion that the PT layout is not suited to coding at all, most of the keys I hit the most are hidden away with ctrl+alt combos, while in the US layout they are readily available on the sides. Also, the accentuation marks I need when typing portuguese are very easily reachable on a US layout, funnily enough, so I can still type correctly in pt without having to switch layouts. And my fingers and wrists are oh so thankful for the change, I hadn't realized what a strain it was to code until the strain was gone :D&lt;br /&gt;&lt;br /&gt;So that's that, went there and back again, and it was inspiring in so many ways. Can't wait for next year ;)&lt;br /&gt;&lt;br /&gt;PS: oh yes, almost forgot, you can &lt;a href="http://picasaweb.google.com/shana.ufie/MonoSummitMadrid2007"&gt;check out the pics&lt;/a&gt; I took if you're in the mood. There are also links to more albums from other monoers in the &lt;a href="http://mono-project.com/MonoSummit2007#Photos"&gt;Mono project site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-4941303577277754487?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/4941303577277754487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=4941303577277754487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4941303577277754487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4941303577277754487'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/12/there-and-back-again-mono-summit-2007.html' title='There and back again... The Mono Summit 2007, and so much more'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-5174825490754374496</id><published>2007-10-06T13:42:00.000+01:00</published><updated>2007-10-06T14:51:43.182+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Microsoft disponibiliza código fonte</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;Como já devem ter lido por aí, a Microsoft anunciou que irá &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;disponibilizar&lt;/a&gt; o código fonte da maioria das bibliotecas do .NET 3.5. O código estará disponível para download, e estará integrado no Visual Studio 2008, pelo que passará a ser possível fazer debug ao .NET, tal como, aliás, o pessoal do Java já pode fazer há uma data de anos.&lt;br /&gt;&lt;br /&gt;Já houve muitas reacções e &lt;a href="http://tirania.org/blog/archive/2007/Oct-03.html"&gt;comentários&lt;/a&gt; a esta notícia. Como parte integrante da equipa do Mono, não posso deixar de frisar o seguinte &lt;span style="font-weight: bold;"&gt;aviso&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Qualquer pessoa que olhe para código Microsoft, seja através de ferramentas como o Reflector, ou através deste pacote de código que a MS irá disponibilizar, não poderá contribuir para o projecto Mono. As regras de contribuição estão &lt;a href="http://www.mono-project.com/Contributing"&gt;aqui&lt;/a&gt;, e não está previsto que mudem.&lt;br /&gt;&lt;br /&gt;O Miguel de Icaza tem alguns &lt;a href="http://tirania.org/blog/archive/2007/Oct-05-2.html"&gt;comentários interessantes&lt;/a&gt; sobre isto, btw, recomendo a leitura.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://montaraventures.com/pix/sillysign.jpg" style="float: left;" src="http://montaraventures.com/pix/sillysign.jpg" height="162" hspace="3" width="179" /&gt;&lt;img src="http://farm1.static.flickr.com/89/264116790_4fb7f138e3.jpg" style="float: right;" src="http://farm1.static.flickr.com/89/264116790_4fb7f138e3.jpg" height="162" hspace="3" width="157" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ficam avisados. Não cedam à tentação :)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-5174825490754374496?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/5174825490754374496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=5174825490754374496' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/5174825490754374496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/5174825490754374496'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/10/microsoft-disponibiliza-cdigo-fonte.html' title='Microsoft disponibiliza código fonte'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/89/264116790_4fb7f138e3_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-8977832093996331551</id><published>2007-09-26T14:21:00.000+01:00</published><updated>2007-09-26T15:01:34.830+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xulbrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Mono.Mozilla on Windows</title><content type='html'>Alexandre Gomes posted on his &lt;a href="http://www.alexandre-gomes.com/wp-trackback.php?p=120"&gt;blog&lt;/a&gt; his experiences getting Winforms+Mono.Mozilla building and running on Windows.&lt;br /&gt;&lt;br /&gt;First of all, I'd like to thank him for taking the time to try this out; I'm building regularly on Windows and I try to keep things simple, but things do always slip past unnoticed (especially when trying to keep linux, win+vs2k3 and win+vs2k5 in synch), so it's great to have an external pair of eyes looking at your stuff :)&lt;br /&gt;&lt;br /&gt;He had some problems getting things up and running, so I thought I'd leave some pointers to help out those who want to test this out on Windows.  Do check out his post so it's easier to follow along.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Building&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You don't need the whole mozilla shell to setup the headers, the only thing you need is&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the xulrunner sdk&lt;/li&gt;&lt;li&gt;xpidl.exe (from the xulrunner sdk)&lt;/li&gt;&lt;li&gt;libIDL-0.6.dll and glib-1.2.dll (from the wintools zip)&lt;/li&gt;&lt;/ul&gt;There's now a make.cmd on the "build" directory that does the same as the Makefile, so the steps are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;unzip the xulrunner sdk somewhere&lt;/li&gt;&lt;li&gt;put xpidl.exe and the two dlls in the build directory&lt;/li&gt;&lt;li&gt;open a command prompt, go to the build directory, and run "make [path-to-xulrunnersdk]".&lt;/li&gt;&lt;/ul&gt;In the include and linker configurations, you only need to point to your newly created build\include and build\lib, respectively. These contain everything that is in the sdk plus the extra header files.&lt;br /&gt;&lt;br /&gt;The missing nsAppDirectoryDefs header has been added, so you don't need to google for it anymore. Ooopsie :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Running:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To run an application, you always need to have in the same directory:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the contents of the xulrunner runtime package&lt;/li&gt;&lt;li&gt;your app's exe :)&lt;/li&gt;&lt;li&gt;the mono.mozilla dll&lt;/li&gt;&lt;li&gt;the xulbrowser.dll&lt;/li&gt;&lt;/ul&gt;If you want to have the runtime in a different directory, you'll need to first register it: in a command prompt, go to the xulrunner runtime directory, and run "xulrunner.exe --register-global".&lt;br /&gt;&lt;br /&gt;Then, on the build directory, run "setup-runtime.cmd [path-to-your-application-exe], which will create some directories that are required to be where your app is.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Other problems&lt;br /&gt;&lt;/span&gt;The browser problems mentioned (unable to input text) have been fixed, so the latest version should be fine.&lt;br /&gt;&lt;br /&gt;The Mono.Mozilla project is also fixed.&lt;br /&gt;&lt;br /&gt;As for the TortoiseSVN problems, I use tortoise for all my work and it's always worked great :p&lt;br /&gt;Of course, I've never used the _svn variant, it's too much trouble and incompatibility just to have svn with webapps on vstudio. I suggest using the regular version for fun and happiness :)&lt;br /&gt;&lt;br /&gt;Thanks again to Alexandre, and do nag me if anything goes wrong.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-8977832093996331551?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/8977832093996331551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=8977832093996331551' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/8977832093996331551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/8977832093996331551'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/09/monomozilla-on-windows.html' title='Mono.Mozilla on Windows'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-8835475032491778917</id><published>2007-09-21T15:35:00.000+01:00</published><updated>2007-09-21T15:52:18.853+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>Something I drew...</title><content type='html'>Today I happened to be looking for a pic on my hd, and I came across the following picture.&lt;br /&gt;&lt;br /&gt;&lt;img style="border: 0px none rgb(255, 255, 255);" src="http://shana.iidbbs.com/images/financas.gif" border="0" vspace="10" /&gt;&lt;br /&gt;First off, translation:&lt;br /&gt;&lt;br /&gt;Top: "Citizen calling the tax service helpdesk so as not to waste the time of actually going there."&lt;br /&gt;Bottom: "The good thing is you get to hear a nice lullaby while you wait."&lt;br /&gt;&lt;br /&gt;I drew this in Photoshop, carelessly doodling, while waiting for the helpdesk callcenter to pick up my call. I think it's safe to say they weren't exactly fast.&lt;br /&gt;&lt;br /&gt;And yes, I know, my drawing skills are, hrm, sketchy. But, I don't know, I just love this one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-8835475032491778917?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/8835475032491778917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=8835475032491778917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/8835475032491778917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/8835475032491778917'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/09/something-i-drew.html' title='Something I drew...'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-3456528295286472056</id><published>2007-09-06T19:14:00.000+01:00</published><updated>2007-09-06T19:39:42.094+01:00</updated><title type='text'>Interesting conversations</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;Being a very, errr, head-in-the-clouds sort of person, I had to go in a rush to renew my ID card. It expired yesterday, and I completely forgot to renew it before today, multiple warnings from friends, family and the occasional stranger notwithstanding. It's especially bad due to the fact that I sorta need it for an official thingamajig tomorrow, so it was kinda important to have it up to date... or at least not expired :p&lt;br /&gt;&lt;br /&gt;Immersing myself in that weird place called a citizen's shop, where all the official stuff is gathered so it's easy to do everything in one place (you know, taxes, utilities, id renewals...), I went around looking for the proper booth or desk or whatever it's called so I could take my numbered ticket, and found it, easy enough. Actually, found two. First, there's the booth where you buy the forms. Gotta take a ticket for that and wait in line. Then there's the booth where you deliver the forms. Gotta take another ticket for that and wait in line. Yes, typical. Got both tickets before going to wait by the first booth, because, as I had guessed, the line to deliver the forms was at number 403 when I got there, and my ticket had the number 490. Typical. Cue long wait, punctuated by a trip to the photo store to take pics for the card... I had figured I would have time enough to do that, so I didn't bother doing it before going there :)&lt;br /&gt;&lt;br /&gt;My number is up, get to the counter to deliver the forms, sign the id card.&lt;br /&gt;&lt;br /&gt;woman: "oh oh"&lt;br /&gt;me: "oh oh?&lt;br /&gt;woman: "you'll have to sign the form again, the signature doesn't match the one you put in the id card"&lt;br /&gt;me: *looks at both and finds no differences.*&lt;br /&gt;me: "where are they different?"&lt;br /&gt;woman: "can't you see? they're different!"&lt;br /&gt;me: "I can't see it. Ok, maybe this one is slightly rounder, is that it?"&lt;br /&gt;woman: "no, don't you see? look at it"&lt;br /&gt;me: "..."&lt;br /&gt;woman: "the G!"&lt;br /&gt;me: "..."&lt;br /&gt;me: *signs again*&lt;br /&gt;woman: "they're still different! this is the id card we're talking about!"&lt;br /&gt;me: "ok..."&lt;br /&gt;woman: "you're missing a dot there on the i"&lt;br /&gt;me: *puts the dot in*&lt;br /&gt;&lt;br /&gt;Going smoothly so far. I get my finger all blackened up for the fingerprint, she takes my old card, I get the receipt of delivery with my data and when I can pick it up, and then...&lt;br /&gt;&lt;br /&gt;me: "so... will this receipt serve as a standin for my id card?"&lt;br /&gt;woman: "no"&lt;br /&gt;me: "so... what do I use if I need to identify myself?"&lt;br /&gt;woman: "your driver's license will do"&lt;br /&gt;me: "so... what if I don't have a driver's license?"&lt;br /&gt;woman: *blank stare and pushes the buzzer to call up the next number*&lt;br /&gt;&lt;br /&gt;These things are always so much fun.&lt;br /&gt;&lt;br /&gt;Note: it's not that uncommon here for people not to have a driver's license, but you must carry your id card at all times. The id card expires every 5,7 years, while the driver's license lasts about 50 years without needing a renewal, so if you're 50 you can be carrying a license with a picture of you when you were 18... not a particularly trustworthy piece of identification if you ask me. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-3456528295286472056?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/3456528295286472056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=3456528295286472056' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3456528295286472056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/3456528295286472056'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/09/interesting-conversations.html' title='Interesting conversations'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-9205045230983852331</id><published>2007-09-05T14:24:00.000+01:00</published><updated>2007-09-05T14:26:47.887+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='livros'/><title type='text'>Desafio Literário</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;Pois é, andava eu a espreitar os vários blogs do prt.sc, quando dou de caras com um Meme Literário no blog do Luís Nabais, &lt;a href="http://www.blog.nonsensebb.com/2007/09/04/meme-literario"&gt;Stat(ing) My Mind&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;"Que interessante", pensei eu, enquanto mastigava uma noz (a propósito, spoiler warning, &lt;span style="color: rgb(255, 255, 255);"&gt;a resposta é Dune, é a cena quando o Duque acaba de ser apanhado e está a perder a consciência, e prepara-se para envenenar o médico, convencido que este é o Barão, até já estou a ver a cena toda na cabeça...&lt;/span&gt; &lt;grin&gt;&lt;grin&gt;:)  )&lt;br /&gt;&lt;br /&gt;Mastigando mais um bocadinho de noz, lá cliquei no blog da &lt;a href="http://pecola.artedoengenho.net/?p=1718"&gt;pec&lt;/a&gt;, que me levou ao blog da &lt;a href="http://designaolitro.blogspot.com/2007/08/desafio-literrio.html"&gt;Maria Antunes&lt;/a&gt;, que me apontou para o blog da &lt;a href="http://alentandoprimavera.blogspot.com/2007/08/desafio-literrio.html"&gt;clau&lt;/a&gt;, que citou o blog da &lt;a href="http://nika-liu-dreamland.blogspot.com/2007/08/em-resposta-ao-desafio-literrio.html"&gt;nika_liu&lt;/a&gt; (mázinha mázinha, que não meteu o link, tssk tssk), que mencionou o blog da Miss K (bolas bolas também sem link), sendo que, a esta altura, já a noz era uma memória e tive que parar para caçar mais umas tantas.&lt;br /&gt;&lt;br /&gt;"Deveras interessante", pensei eu outra vez, com novo fornecimento de nozes. Não quis perder mais tempo, e resolvi entrar também na brincadeira, pelo que estiquei o braço e... tive que me levantar porque não tinha nenhum livro à mão. :p&lt;br /&gt;&lt;br /&gt;*saca um livro da prateleira e abre-o na página 161*&lt;br /&gt;&lt;br /&gt;"...", pensei eu. A página inteira tem exactamente três pontos finais. Complicated. Bem, não é propriamente a quinta frase completa, mas what the heck :p&lt;br /&gt;&lt;br /&gt;&lt;/grin&gt;&lt;/grin&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;"Antes do espectáculo desta noite, quero pedir á nossa convidada, capitoa Wong, que pronuncie algumas palavras ou recite algo."&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;As regras são as seguintes:&lt;br /&gt;&lt;br /&gt;1. Pegar no livro mais próximo&lt;br /&gt;2. Abri-lo na página 161&lt;br /&gt;3. Procurar a 5ª frase completa&lt;br /&gt;4. Colocar a frase no blog&lt;br /&gt;5. Não escolher a melhor frase nem o melhor livro (usar o mais próximo)&lt;br /&gt;6. Passar o desafio a cinco pessoas&lt;br /&gt;&lt;br /&gt;O desafio está lançado! Essa de passar o desafio a cinco pessoas é mais complicatida, por isso deixo a quem o apanhar :)&lt;br /&gt;&lt;br /&gt;PS: Hei-de colocar o nome do livro num comentário a este post, para não estragar a brincadeira a quem ler isto daqui a uns tempos ^_^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-9205045230983852331?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/9205045230983852331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=9205045230983852331' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/9205045230983852331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/9205045230983852331'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/09/desafio-literrio.html' title='Desafio Literário'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-4666789516401398254</id><published>2007-09-04T05:30:00.000+01:00</published><updated>2007-09-05T00:31:07.496+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xulbrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Windows Forms WebControl and Mozilla</title><content type='html'>It's been a while since I've blogged about the status of Mono's MWF WebControl - I kept adding stuff, then I wanted to settle it down on the tree, and then I went on vacation and ran out of net (but not out of fish.. yum!). So now that I'm fed up with fish and my net is back, let's talk about the latest webcontrol milestone.&lt;br /&gt;&lt;br /&gt;The code is split up into three components: the WebBrowser and related classes inside MWF (Mono's winforms implementation); Mono.Mozilla, a new class library on the tree that gets called from MWF; and xulbrowser, a c/c++ library that actually does all the talking to mozilla.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GAFHyYeOTVI/Rty1s-NgDdI/AAAAAAAAAOA/kyQMM_ApO-o/s1600-h/webcontrol1.png"&gt;&lt;img style="margin: 0px 0px 10px 10px; float: right; cursor: pointer;" src="http://lh4.google.com/shana.ufie/Rty1s-NgDdI/AAAAAAAAAOA/1oJjmqvCRRY/s288/webcontrol1.png" alt="" id="BLOGGER_PHOTO_ID_5106155861749796306" border="0" /&gt;&lt;/a&gt;Since a picture is worth a thousand words, the image on the right gives an overview of how these components relate to one another. I didn't want to clutter it too much with arrows, so I didn't put arrows upwards, but of course the communication goes both ways.&lt;br /&gt;&lt;br /&gt;Mono.Mozilla is essentially a managed wrapper that exposes an interface to MWF so that the WebBrowser* classes can call methods like Navigate, and register for events coming from mozilla. This interface is the only publicly accessible way to talk to the browser windows, so that things are nice and neat and the wrapper can be free to hide those little pesky details that WebBrowser and friends don't really care about.&lt;br /&gt;&lt;br /&gt;Although Mono.Mozilla is, well, Mozilla-oriented, it is neatly divided into two namespaces: Mono.WebBrowser, where the public interface resides, and Mono.Mozilla, where the pinvokes to the unmanaged library reside, so you'll never see the Mono.Mozilla namespace called from inside MWF directly. This has the nice side effect of making it easier (or at least doable) to plug in another browser toolkit in the future if need be.&lt;br /&gt;&lt;br /&gt;So what's done and working right now on WebControl? Well, the easiest way to implement an API is to have test applications, so I plucked up the &lt;span style="font-style: italic;"&gt;UsingTheWebControl&lt;/span&gt; sample from msdn and added it to our roster of winforms test apps. From it's description:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;This sample contains three tabs.  The first tab demonstrates the use of the WebBrowser control in a simple browser application.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The second tab uses the WebBrowser control as a local HTML document viewer.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The third tab demonstrates the use of the WebBrowser.Document HTMLDocument model, together with the WebBrowser.ObjectForScripting prorperty, to implement Form-to-Browser two-way communication. In this scenario, the WebBrowser control is used to load an HTML document template that is populated with data managed by the Form, as a means of supporting custom printing of application data.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/shana.ufie/Xulbrowser/photo#5106185333815381474"&gt;&lt;img src="http://lh6.google.com/shana.ufie/RtzQgeNgDeI/AAAAAAAAAOg/LW90kg_rL1w/s400/usingthewebbrowsercontrol1.png" style="margin: 0px 10px 10px 0px; float: left; cursor: pointer;" border="0" /&gt;&lt;/a&gt;The WebBrowser control on Mono is complete enough for the sample to work with the first two tabs, i.e., loading, refreshing, navigation are all there, as well as focus, activation, mouse and key events so that you can actually browse the web (as opposed to, say, just looking at it... which is a fine thing to do in itself, sure, but probably not that useful in the long run). Https support is already in as well.&lt;br /&gt;&lt;br /&gt;This sample is particularly nice in that it hits a lot of not-so-used areas, such as manipulating the Document to load custom data. This, btw, is done on the third tab, which isn't working yet.&lt;br /&gt;&lt;br /&gt;The sample is available from the /winforms/webbrowser/UsingWebBrowser directory on svn trunk. To get it working, you will need to use the latest mono on svn.&lt;br /&gt;&lt;br /&gt;You will also need to get the /mozembed directory from svn, which contains the xulbrowser library. Just build mono, do the usual autogen.sh, make, make install on /mozembed, make the UsingWebBrowser-port directory, and then go to bin and run the application there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-4666789516401398254?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/4666789516401398254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=4666789516401398254' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4666789516401398254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4666789516401398254'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/09/windows-forms-webcontrol-and-mozilla.html' title='Windows Forms WebControl and Mozilla'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-7756734178393133863</id><published>2007-06-25T17:24:00.000+01:00</published><updated>2007-06-25T18:11:21.995+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xulbrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Slowly but surely...</title><content type='html'>... things end up working.&lt;br /&gt;&lt;br /&gt;The last blog entry spoke of a successful embedding of xulrunner into a mono winforms app, on windows, and I had hoped that one or two days later I would be blogging about it working on linux as well. Unfortunately, it turned out not to be as simple as that. It actually turned out to be really complicated.&lt;br /&gt;&lt;br /&gt;First, while on windows I only had to feed xulrunner with the windows hwnd handle and voilá, it worked, on linux xulrunner uses gtk by default. The xlib xulrunner would be quite nice to use, as it would hopefully be just like windows, feed it a winforms handle and that's that. Unfortunately, the xlib xulrunner code has been bitrotting for quite some time, and would not work at all. :/&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The Gtk adventure&lt;/h2&gt;&lt;br /&gt;Getting gtk to use a winforms handle to draw in was quite an interesting challenge in itself - it was essentially the same as getting gtk to draw in an x window (since winforms handles are essentially xid's). There are a couple of different ways to go about the problem; either use the concept of socket/plug by calling gtk_plug_new on a xid and then adding widgets to that to later pass on to xulrunner to draw in, or using gdk_window_foreign_new to "import" the xid.&lt;br /&gt;&lt;br /&gt;gtk_plug_new creates a new GtkWidget, while gdk_window_foreign_new gives you a GdkWindow. The first would seem to be easier to get into xulrunner, as it requires passing in a GtkWidget, but it also requires reparenting the window (because the plug doesn't actually do that, it assumes the xid has a socket attached - which it hasn't, since it comes from winforms).&lt;br /&gt;The second gives you a GdkWindow, which doesn't actually help much when you really want a GtkWidget and simple code. I ended up building a custom widget to wrap around an X handle, following the line of the gtkwin32embed widget that comes with gtk, so I went for the second option. The widget works wonderfully, no need for extra reparenting, no need for top level windows (since the widget is a window), just create it with the xid and you're in business! :)&lt;br /&gt;&lt;br /&gt;&lt;table style="width: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/shana.ufie/Xulbrowser/photo#5080021032559754418"&gt;&lt;img src="http://lh6.google.com/image/shana.ufie/Rn_cNsk8vLI/AAAAAAAAALc/lxnX2HlvkiQ/s400/xulbrowser-mono2.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial,sans-serif; font-size: 11px;"&gt;Winforms application calling the new xulbrowser library to display an&lt;br/&gt;embedded xulrunner engine (mozilla)&lt;br/&gt;From &lt;a href="http://picasaweb.google.com/shana.ufie/Xulbrowser"&gt;Xulbrowser&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Those pesky initializations&lt;/h2&gt;What really made me bang my head on the walls was the fact that no matter what I did, the browser seemed to stop in the middle of loading and just stay there indefinitely! I did everything to the code; debugged it, traced it, #ifdef'd it, went step by step checking every call, every event, everything, and nothing, it refused to work! That damned loading icon kept mocking me!&lt;br /&gt;&lt;br /&gt;To cut a long story short, after spending hours and hours and days and days on it, I finally found out that the problem was, I wasn't initializing a thing called AppShell. This AppShell (which is a frozen interface, but is not actually a part of the sdk - so you'd think it wasn't all that important, hmm?) initializes gtk on the browser so the browser widget can receive events (you'd think one gtk initialization was enough, sheesh!...)&lt;br /&gt;&lt;br /&gt;It also seems to be an absolutely useless interface on windows, since the original code works perfectly fine and it actually catches events without it. So it's a linux only thing, as far as I can tell. Completely undocumented. Unless, of course, someone tells me that it was perfectly obvious that it needed to be there, since gtkmozembed uses it. Of course, gtkmozembed also uses a ton of private calls that are supposedly completely off-limits to us external embedding folks and that would probably earn me a ton of griefing if I actually thought of using them, but hey, I'm supposed to know the difference between an off-limits-never-use-or-we'll-send-the-mob-after-you calls, and absolute-mandatory-linux-only-initialization-calls-on-non-sdk-interfaces... right?&lt;br /&gt;&lt;br /&gt;It's a good thing I'm a certified nutcase and I actually have fun solving these little problems. And it's not like I don't have solid walls or anything. :)&lt;br /&gt;&lt;br /&gt;So, for your amusement, here's a couple of shots (ok, ok, one here and one above) of a Mono Winforms application running a control with an embedded xulrunner-powered browser inside.&lt;br /&gt;&lt;br /&gt;&lt;table style="width: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/shana.ufie/Xulbrowser/photo#5080021105574198466"&gt;&lt;img src="http://lh3.google.com/image/shana.ufie/Rn_cR8k8vMI/AAAAAAAAALk/TYYJm-CGRHE/s400/xulbrowser-mono.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial,sans-serif; font-size: 11px;"&gt;Gratuitous use of Xgl to show off my nice Suse desktop with a Mono Winforms &lt;br/&gt;app embedding a mozilla browser (phew!)&lt;br/&gt;From &lt;a href="http://picasaweb.google.com/shana.ufie/Xulbrowser"&gt;Xulbrowser&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-7756734178393133863?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/7756734178393133863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=7756734178393133863' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7756734178393133863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7756734178393133863'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/06/slowly-but-surely.html' title='Slowly but surely...'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-4955241615858564429</id><published>2007-06-11T19:40:00.000+01:00</published><updated>2007-06-11T19:44:01.504+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>A little browser glue</title><content type='html'>It's a real pity I didn't have this to blog about yesterday, it would be a really nice way of celebrating Portugal day (which was yesterday, June 10th :) yay for us!). If it weren't for some pesky bugs yesterday...&lt;br /&gt;&lt;br /&gt;Anyway, great blog-worthy news today, got the Mono WebControl -&gt; Gecko thing going, and it's alive and drawing! Check out this screeny of the mozilla engine rendering a webpage inside Mono...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://shana.iidbbs.com/images/monkeybrowser2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://shana.iidbbs.com/images/monkeybrowser2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-4955241615858564429?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/4955241615858564429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=4955241615858564429' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4955241615858564429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4955241615858564429'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/06/little-browser-glue.html' title='A little browser glue'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-133710504291262898</id><published>2007-06-11T17:36:00.000+01:00</published><updated>2007-06-11T17:37:45.085+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Now where did I put my type?</title><content type='html'>Today I ran across an interesting problem while trying to export a function from a dll built in vc++ (2003). I've been digging into the mozilla source a lot lately, doing the library to embed mozilla and get our much-needed webcontrol working on Mono, and after a successfull browser window invocation from .net (screenies to come soon) (woohoo), I decided to clean up the code a bit and start doing the functions properly.&lt;br /&gt;&lt;br /&gt;The first functions of the library were only returning ints, but for the glue to work properly, I needed to return a pointer to the newly created class in C++, and since cross-platform is good, all the function exports got marked with mozilla's NS_EXPORT_(type). While I had int as a return type, all was well, but when I decided to return void*... *boom*!&lt;br /&gt;&lt;br /&gt;Ooops!&lt;br /&gt;&lt;br /&gt;Looking at the exported functions of the dll, all those marked with void* or similar (anything with *, really) were not there. Everything was happily compiled... they just weren't exported. :p&lt;br /&gt;&lt;br /&gt;Cue 2 hours of googling and mucking about with the export syntax and going absolutely nowhere.&lt;br /&gt;&lt;br /&gt;Now note, please, exhibit A - the NS_EXPORT_ typedef:&lt;br /&gt;&lt;br /&gt;#define NS_EXPORT_(type) type __declspec(dllexport) __stdcall&lt;br /&gt;&lt;br /&gt;Note, also, as exhibit B, an example signature that jchambers gave to me on the #mono channel:&lt;br /&gt;&lt;br /&gt;__declspec(dllexport) void* STDCALL myfunc();&lt;br /&gt;&lt;br /&gt;Notice anything?&lt;br /&gt;&lt;br /&gt;Well, apparently, if you put the type before the __declspec, all functions with pointer return types will not be exported. If you put the type between the declspec and the stdcall, they are exported.&lt;br /&gt;&lt;br /&gt;&gt;.&lt;&lt;br /&gt;&lt;br /&gt;I ended up doing this:&lt;br /&gt;&lt;br /&gt;#ifdef VSTUDIO&lt;br /&gt;#define NS_EXPORT_(type) __declspec(dllexport) type __stdcall&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;*sigh*&lt;br /&gt;&lt;br /&gt;Of course, I could be doing something really wrong here... if anyone can set me right, feel free! I'll just go back to doing some useful now :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-133710504291262898?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/133710504291262898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=133710504291262898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/133710504291262898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/133710504291262898'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/06/now-where-did-i-put-my-type.html' title='Now where did I put my type?'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-4028220393074012086</id><published>2007-02-05T16:09:00.000Z</published><updated>2007-02-05T18:17:41.862Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flashing'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><title type='text'>Playing with my n800</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;I'm happily playing with my new Nokia n800 - affectionately named, by me, "Transistor". It's a slick little thing (well, no so little, but then again, it's mostly screen), but I think someone got sold that transistor radio designs from the 60s are all the rage. The n800 even has the traditional dotted grid. I mean, just look!&lt;br /&gt;&lt;div style="margin: 0px auto 10px; display: block; text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.transistor.org/collection/northamerican/northamerican16transistor.jpg"&gt;&lt;img src="http://www.transistor.org/collection/northamerican/northamerican16transistor.jpg" alt="" border="0" /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.carrypad.com/gallery/d/2645-2/IMG_0156.JPG"&gt;&lt;img src="http://www.carrypad.com/gallery/d/2645-2/IMG_0156.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Coincidence? I think not!&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;But once I started tinkering with it, I forgot all about that :)&lt;/p&gt;&lt;p&gt;I'm tapping away at it's settings and installing stuff just to see what it can do. And since I predict a future where my little Transistor will bork dramatically for some reason, I'll just leave a note to self here when I need to reflash the thing.&lt;/p&gt;&lt;a href="http://maemo.org/maemowiki/HOWTO_FlashLatestNokiaImageWithLinux"&gt;Reflashing the n800 - How-to&lt;/a&gt;&lt;br /&gt;&lt;p&gt;And if it gets stuck in a reboot loop:&lt;/p&gt;&lt;p&gt;./flasher --set-rd-flags=no-lifeguard-reset&lt;br /&gt;./flasher --clear-rd-flags=no-lifeguard-reset --disable-rd-mode&lt;/p&gt;&lt;p&gt;&lt;a href="http://maemo.org/pipermail/maemo-users/2007-January/002768.html"&gt;Linky: [maemo-users] N800 Refuses to Boot&lt;/a&gt;&lt;/p&gt;Note:&lt;br /&gt;Picture one from &lt;a href="http://www.transistor.org/collection/northamerican/noram3.html"&gt;http://www.transistor.org/collection/northamerican/noram3.html&lt;/a&gt;. &lt;a href="http://www.transistor.org/collection/channelmaster/chmstr10.html"&gt;http://www.transistor.org/collection/channelmaster/chmstr10.html&lt;/a&gt; might make a better match for the n800, but I thought the twin pics funnier :p&lt;br /&gt;&lt;br /&gt;Picture two from &lt;a href="http://www.carrypad.com/gallery/v/n800jt/"&gt;http://www.carrypad.com/gallery/v/n800jt/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-4028220393074012086?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/4028220393074012086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=4028220393074012086' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4028220393074012086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/4028220393074012086'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2007/02/playing-with-my-n800.html' title='Playing with my n800'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-109174718388074792</id><published>2006-11-22T00:08:00.000Z</published><updated>2006-11-22T00:12:12.501Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='NumericUpDown'/><title type='text'>NumericUpDown is a nice control... eh</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;&lt;a href="http://www.windowsforms.net/FAQs/default.aspx?PageID=3&amp;CategoryID=3&amp;amp;SubcategoryID=72&amp;tabindex=3"&gt;NumericUpDown Bug&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;From the site:&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" width="98%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span id="_ctl1_Title1_lblModuleTitle" class="Head"&gt;FAQs&lt;/span&gt;&lt;/td&gt;    &lt;td align="right"&gt;         &lt;br /&gt;&lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt;  &lt;hr noshade="noshade"  width="98%" style="font-size:78%;"&gt;         &lt;!-- SubCategory Heading--&gt;    &lt;table width="100%"&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td width="100%"&gt;       &lt;span class="head"&gt;        &lt;a name="SC72"&gt;         NumericUpDown        &lt;/a&gt;       &lt;/span&gt;      &lt;/td&gt;      &lt;td align="right" valign="top"&gt;       &lt;a id="_ctl1_SubCategories__ctl0_PrintLink" href="http://www.windowsforms.net/Modules/FAQ_PrintSubCategory.aspx?SubCategoryID=72"&gt;&lt;img src="http://www.windowsforms.net/images/print.gif" alt="Print these FAQs" border="0" /&gt;&lt;/a&gt;      &lt;/td&gt;      &lt;td width="2%"&gt;&lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;    &lt;!-- FAQs --&gt;                           &lt;!-- Question --&gt;        &lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;         &lt;td class="FAQListQuestion" width="100%"&gt;          &lt;table cellpadding="4" cellspacing="0"&gt;               &lt;tbody&gt;&lt;tr&gt;            &lt;td class="FAQListQuestion" width="100%"&gt;             &lt;a id="_ctl1_SubCategories__ctl0_FAQs__ctl0_FAQLink" href="http://www.windowsforms.net/FAQs/default.aspx?PageID=2&amp;amp;amp;ItemID=459&amp;CategoryID=3&amp;amp;tabindex=3"&gt;How do I get the Tooltips to be shown on a NumericUpDown control?&lt;/a&gt;            &lt;/td&gt;            &lt;td align="right" valign="top"&gt;                        &lt;br /&gt;&lt;/td&gt;            &lt;!--            -- Don't display print and email links, because we want them to go to detail so we count the number of views...            -- Is this a good idea?            &lt;td valign="top" align="right"&gt;             &lt;a id="_ctl1_SubCategories__ctl0_FAQs__ctl0_PrintLink" href="../Modules/FAQ_Print.aspx?ItemID=459&amp;Track=0"&gt;&lt;img src="/images/print.bmp" alt="Print this FAQ" border="0" /&gt;&lt;/a&gt;            &lt;/td&gt;            &lt;td valign="top" align="right"&gt;             &lt;a id="_ctl1_SubCategories__ctl0_FAQs__ctl0_EmailLink" href="mailto:?subject=WindowsForms.NET FAQ&amp;body=%2fFAQs%2fdefault.aspx%3fPageID%3d2%26ItemID%3d459%26CategoryID%3d3%26tabindex%3d3"&gt;&lt;img src="/images/email.bmp" alt="Email this FAQ" border="0" /&gt;&lt;/a&gt;            &lt;/td&gt;            --&gt;            &lt;!-- --&gt;           &lt;/tr&gt;          &lt;/tbody&gt;&lt;/table&gt;         &lt;/td&gt;        &lt;/tr&gt;        &lt;!-- Answer --&gt;        &lt;tr&gt;        &lt;td class="FAQListAnswer"&gt;         &lt;p&gt;This is because of a bug in the .NET Framework. When tooltips are set on a control that hosts other controls within it (like the NumericUpDown), tooltips are not shown on those child controls. To workaround this issue, do the following in code: &lt;/p&gt;&lt;p&gt;[C#] &lt;/p&gt;&lt;pre&gt;foreach ( Control c in numericUpDown1.Controls )&lt;br /&gt;tooltip.SetToolTip( c, "mytooltip" );&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;[Visual Basic] &lt;/p&gt;&lt;pre&gt;Dim c As Control&lt;br /&gt;For Each c In numericUpDown1.Controls&lt;br /&gt;tooltip.SetToolTip(c, "mytooltip")&lt;br /&gt;Next&lt;br /&gt;&lt;/pre&gt;&lt;p style="margin-bottom: 12pt;"&gt;&lt;i&gt;Contributed from George Shepherd's Windows Forms FAQ&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-109174718388074792?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/109174718388074792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=109174718388074792' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/109174718388074792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/109174718388074792'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/11/numericupdown-is-nice-control-eh.html' title='NumericUpDown is a nice control... eh'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-7672097845204802667</id><published>2006-11-21T23:56:00.000Z</published><updated>2006-11-22T00:12:29.714Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>.NET Bugs Registry</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;Nice handy list for those weird things that can bite you when you least expect it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-7672097845204802667?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jelovic.com/dotnetbugs/' title='.NET Bugs Registry'/><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/7672097845204802667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=7672097845204802667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7672097845204802667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/7672097845204802667'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/11/net-bugs-registry.html' title='.NET Bugs Registry'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-222421269067893570</id><published>2006-11-21T17:06:00.000Z</published><updated>2006-11-21T23:01:10.622Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='focus'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Focusing on cue</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;One of the challenges of implementing the Winforms behaviour from scratch is emulating all the little quirks that have accumulated over the years on Windows and that show up in .NET.&lt;br /&gt;&lt;br /&gt;One of these little thingies that make for big headaches is the visual focus cue. You know, that little rectangle that appears in controls whenever they have focus. Well, it turns out this apparently simple thing as showing a rectangle drawn on a button is not so simple at all, because it doesn't show up every time a control has focus... there are certain rules that control when it should appear (the headache part :p)&lt;br /&gt;&lt;br /&gt;It all started when a few bugs started showing up on the &lt;a href="http://bugzilla.ximian.com/"&gt;Mono Bugzilla&lt;/a&gt;, filed by people comparing the same application in Mono and MS.NET and discovering that the focus rectangle was being drawn in one but not in the other... or vice-versa.&lt;br /&gt;&lt;br /&gt;After a quite lengthy chat on the #mono-winforms channel, I had several different tests and quite a few links with which to start tackling the problem of figuring out exactly what rules apply when deciding whether to show the focus rectangle or not. I learned that there are two types of visual cues on Windows: the focus rectangle, and the keyboard shortcut underlining. I further learned that there is an option on Windows that controls the keyboard underlining cue... and that this option also controls the focus rectangle cue, &lt;a href="http://blogs.msdn.com/saraford/archive/2004/04/16/114935.aspx"&gt;but it doesn't say so when you change the setting&lt;/a&gt;. Don't you just love it? Eh. The option is available under Display / Effects / Hide underline...&lt;br /&gt;&lt;br /&gt;Anyway, in theory, the visual cues should work like this: since that checkbox controls both the focus cue and keyboard cue, if it is checked it means that the keyboard cue will only show up if you press the Alt key, and the focus cue will show up if:&lt;br /&gt;&lt;br /&gt;1) you press Tab, or navigate between controls with the keyboard, or&lt;br /&gt;2) you activate the window with the keyboard. This second part is important, because sometimes people don't notice how they activated the window, and so don't quite get the behaviour they think they should. Activating the window means opening it with the keyboard, for instance, instead of with the mouse.&lt;br /&gt;&lt;br /&gt;if, on the other hand, the option is not checked, the both the keyboard and the focus cues will show up regardless of how you activate the window or how you navigate between controls in it.&lt;br /&gt;&lt;br /&gt;Now, since there has been a lot of reports of different behaviours when this checkbox is checked or unchecked that don't quite fit with the theory, it stands to reason that there is something else fiddling with these options. It's quite possible that certain themes or tweaking applications change one of these options but not the other, so that certain systems don't exhibit the behaviour shown above.&lt;br /&gt;&lt;br /&gt;Finally, all of this reeaaallly doesn't matter all that much because there is no such equivalent in Linux, , so essentially Mono should behave according to a default behaviour chosen to actually make sense :) and stick with it.&lt;br /&gt;&lt;br /&gt;Isn't this fun? :D&lt;br /&gt;&lt;br /&gt;references:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/saraford/archive/2004/04/16/114935.aspx"&gt;http://blogs.msdn.com/saraford/archive/2004/04/16/114935.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2005/05/03/414317.aspx"&gt;http://blogs.msdn.com/oldnewthing/archive/2005/05/03/414317.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardAccelerators/AboutKeyboardAccelerators.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardAccelerators/AboutKeyboardAccelerators.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-222421269067893570?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/222421269067893570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=222421269067893570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/222421269067893570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/222421269067893570'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/11/focusing-on-cue.html' title='Focusing on cue'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-116411655806107560</id><published>2006-11-21T13:36:00.000Z</published><updated>2006-11-21T16:03:37.352Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='wootness'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='job'/><title type='text'>New job, new open source project, happy little coder</title><content type='html'>&lt;h2&gt;&lt;/h2&gt;As the title says, I have a wonderful new job, working full time at Novell on my favourite open source project, Mono. What more can I say? :D *happy little coder does happy little jiggly dance*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-116411655806107560?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mono-project.com' title='New job, new open source project, happy little coder'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/116411655806107560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/116411655806107560'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/11/new-job-new-open-source-project-happy.html' title='New job, new open source project, happy little coder'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-115506459862294067</id><published>2006-08-08T18:25:00.000+01:00</published><updated>2006-11-21T16:04:44.263Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='streaming'/><category scheme='http://www.blogger.com/atom/ns#' term='shoutcast'/><category scheme='http://www.blogger.com/atom/ns#' term='winamp'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='terastation'/><category scheme='http://www.blogger.com/atom/ns#' term='dsp'/><title type='text'>A bit of a SHOUT</title><content type='html'>So there was I, coding happily along, without a care in the world, when it hits me.&lt;br /&gt;&lt;br /&gt;Well, it didn't hit me, it more of skipped me. I mean, not me. The music. It skipped. Aargh. Focus lost, damn stupid tracks, winamp what's the matter with you?!&lt;br /&gt;&lt;br /&gt;Ok, so I get my mp3 off the TeraStation. The &lt;a href="http://www.buffalotech.com/products/product-detail.php?productid=97"&gt;TeraStation&lt;/a&gt; is very nice, very lovely, very cute  RAID-5 network-attached data storage (note the marketing speek - ain't it nice) box looking thingie all in silver. It does data. Huge amounts of it. Over the network. That's about all it does, really, but it's enough.  I have my collection stored away in there, so I don't have to fill up my disk space with it. Whenever I want to, I listen from it.&lt;br /&gt;&lt;br /&gt;The problem, ya see, is that I'm getting my music fix over a vpn, seeing as the Tera is at one location, and I'm on another. And that makes my music skip. Aaargh.&lt;br /&gt;&lt;br /&gt;Determined to get rid of the annoying skippies, I went and got the SHOUTCast server and DSP plugin for winamp (over at &lt;a href="http://www.nullsoft.com/"&gt;Nullsoft&lt;/a&gt;). Because winamp doesn't do buffering on it's own, ya see (as far as I can tell). So this is what I did:&lt;br /&gt;&lt;br /&gt;1. Get the server running. Easy enough, just, well, run it :p No extra configurations required, it listens on the 8000 port by default. You can change it in the ini, or not.&lt;br /&gt;&lt;br /&gt;2. Load up your selection of music on winamp.&lt;br /&gt;&lt;br /&gt;3. Configure the DSP plugin on winamp. Just fill in the name of the server (localhost), and the port. When you're done, connect. Don't close that window yet.&lt;br /&gt;&lt;br /&gt;4. Start playing the list. The plugin properties window should start showing bytes sent, and the shoutcast server window&lt;br /&gt;should acknowledge the connection.&lt;br /&gt;&lt;br /&gt;Easy enough. Now I'm  getting music from my Tera over at the other location and streaming it to the shoutcast server. And I can hear it playing. But wait, what I'm hearing is the unbuffered thing, before it gets to the server... no good :p&lt;br /&gt;&lt;br /&gt;What I need is to have one winamp sending to the server, and another one getting it form the server. No problem... I just open another winamp, right? (clicking on the Options-Allow Multiple instances first, of course. Duh). Second winamp opened, add url localhost:8000, play...&lt;br /&gt;&lt;br /&gt;Now this is nice... now I'm hearing *2* versions of the music. One is unbuffered, the other buffered. LOL&lt;br /&gt;&lt;br /&gt;Ok, chuckles aside, how do I get rid of the unbuffered one? Hmmm... Could I turn the volume down on that winamp? Nope, that turns both down (what fun!)&lt;br /&gt;&lt;br /&gt;The answer was just another search away... just redirect the Output of the first winamp to the Null Output plugin. Wohoo, no more confusing echoes of music, the unbuffered winamp is sending it's output to the dev/null graveyard. Nice...&lt;br /&gt;&lt;br /&gt;So now I can go back to my happy, buffered coding world. Groovy.&lt;br /&gt;&lt;br /&gt;PS: you can close that window now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-115506459862294067?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/115506459862294067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=115506459862294067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/115506459862294067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/115506459862294067'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/08/bit-of-shout.html' title='A bit of a SHOUT'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-113769236573005539</id><published>2006-01-19T17:39:00.000Z</published><updated>2006-11-21T16:05:26.772Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='error message'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>The Active Directory datatype cannot be converted to/from a native DS datatype</title><content type='html'>The nice sentence above gave me quite a headache today... as I was deploying the authentication for web app, it blew up with this rather cryptic message, as did every other authenticated web app installed on the machine.&lt;br /&gt;&lt;br /&gt;The solution is very simple, so if you happen to get hit by this one, the problem is essentially that the type cache has gone corrupted in a rather typical windows manner, so you have to force it to be rebuilt. You do this by going to %WINDOWS%/SchCache and deleting the files in that directory. Reboot afterwards, and you're done :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-113769236573005539?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/113769236573005539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=113769236573005539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113769236573005539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113769236573005539'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/01/active-directory-datatype-cannot-be.html' title='The Active Directory datatype cannot be converted to/from a native DS datatype'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-113751789141302485</id><published>2006-01-17T17:11:00.000Z</published><updated>2006-11-21T16:06:23.148Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Forgot the Administrator's Password? - Change Domain Admin Password in Windows Server 2003 AD</title><content type='html'>&lt;a href="http://www.petri.co.il/reset_domain_admin_password_in_windows_server_2003_ad.htm"&gt;Forgot the Administrator's Password? - Change Domain Admin Password in Windows Server 2003 AD&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some amazing tidbits of information on how to manipulate windows to do your bidding. It really shows how complex applications end up being almost impossible to secure... especially when they were not designed to be secure to begin with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-113751789141302485?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.petri.co.il/reset_domain_admin_password_in_windows_server_2003_ad.htm' title='Forgot the Administrator&apos;s Password? - Change Domain Admin Password in Windows Server 2003 AD'/><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/113751789141302485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=113751789141302485' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113751789141302485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113751789141302485'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/01/forgot-administrators-password-change.html' title='Forgot the Administrator&apos;s Password? - Change Domain Admin Password in Windows Server 2003 AD'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-113751758470152761</id><published>2006-01-17T17:06:00.000Z</published><updated>2006-11-21T16:06:50.487Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>How to write Buffer Overflows in Assembly</title><content type='html'>&lt;a href="http://www.insecure.org/stf/mudge_buffer_overflow_tutorial.html"&gt;How to write Buffer Overflows in Assembly&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just as the author wrote the article as a reminder of how to do it, so I am putting this one here so I can remember where to find it! :p Wish I'd do as he did more often, I seem to keep losing code everywhere nowadays...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-113751758470152761?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.insecure.org/stf/mudge_buffer_overflow_tutorial.html' title='How to write Buffer Overflows in Assembly'/><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/113751758470152761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=113751758470152761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113751758470152761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113751758470152761'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2006/01/how-to-write-buffer-overflows-in.html' title='How to write Buffer Overflows in Assembly'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-113337307726440229</id><published>2005-11-30T17:51:00.000Z</published><updated>2005-11-30T17:53:10.776Z</updated><title type='text'>ServiceController AccessDenied exception</title><content type='html'>Reminder to self: Just so I know where to look for this when it eventually hits my face, which will eventually happen when I eventually have to try and control a remote service... eventually... :p... When I get this nice little error in my face, the solution is:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;"The command ID parameter should be an integer value &lt;br /&gt;between 128 and 256. Values less than 128 are reserved &lt;br /&gt;by the operating system. &lt;br /&gt;&lt;br /&gt;Funny how the .NET Framework class library documentation &lt;br /&gt;doesn't mention this!"&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;Funny, ain't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-113337307726440229?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.derkeiler.com/Newsgroups/microsoft.public.dotnet.security/2003-11/0016.html' title='ServiceController AccessDenied exception'/><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/113337307726440229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=113337307726440229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113337307726440229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/113337307726440229'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2005/11/servicecontroller-accessdenied.html' title='ServiceController AccessDenied exception'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-112447150242185827</id><published>2005-08-19T18:11:00.000+01:00</published><updated>2005-08-19T18:11:42.440+01:00</updated><title type='text'>Further problems with SHA-1</title><content type='html'>So what is SHA-1?&lt;br /&gt;&lt;br /&gt;From wikipedia: &lt;em&gt;The SHA (Secure Hash Algorithm) family is a set of related cryptographic hash functions. The most commonly used function in the family, SHA-1, is employed in a large variety of popular security applications and protocols, including TLS, SSL, PGP, SSH, S/MIME, and IPSec. SHA-1 is considered to be the successor to MD5, an earlier, widely-used hash function. The SHA algorithms were designed by the National Security Agency (NSA) and published as a US government standard.&lt;br /&gt;&lt;br /&gt;The first member of the family, published in 1993, is officially called SHA; however, it is often called SHA-0 to avoid confusion with its successors. Two years later, SHA-1, the first successor to SHA, was published. Four more variants have since been issued with increased output ranges and a slightly different design: SHA-224, SHA-256, SHA-384, and SHA-512 — sometimes collectively referred to as SHA-2.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;From w3c.org: &lt;i&gt;The Secure Hash Algorithm takes a message of less than 264 bits in length and produces a 160-bit message digest which is designed so that it should be computationaly expensive to find a text which matches a given hash. ie if you have a hash for document A, H(A), it is difficult to find a document B which has the same hash, and even more difficult to arrange that document B says what you want it to say.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Some months ago a team of chinese researchers found an algorithm that could produce collisions in SHA-1, i.e., different messages could produce the same hash, which could be used, in theory, to forge certificates. SHA-1 is supposed to require at least 2^80 to produce a collision, which would be enough to keep it squarely out of supercomputer realm. The researchers initially managed to produce collisions in 2^69 operations, and now they were able to do it in 2^63. The lower it gets, the faster it is to break :D&lt;br /&gt;&lt;br /&gt;For now, this is only a paper... until someone implements it, and then the fun begins. Although the US are recommending a move to SHA-2, there's this interesting quote by the &lt;em&gt;NIST security technology group manager William Burr, in Federal Computer Week&lt;/em&gt;:  "SHA-1 is not broken, and there is not much reason to suspect that it will be soon." Should become an interesting tagline in a bit of time... hehehe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-112447150242185827?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.theregister.co.uk/2005/08/19/sha-1_attack/' title='Further problems with SHA-1'/><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/112447150242185827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=112447150242185827' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112447150242185827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112447150242185827'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2005/08/further-problems-with-sha-1.html' title='Further problems with SHA-1'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-112420924228848643</id><published>2005-08-16T15:34:00.000+01:00</published><updated>2005-08-16T17:20:42.296+01:00</updated><title type='text'>Bio-art</title><content type='html'>Nothing at all related to coding, this one, but leaving it here as a reminder for myself later - from September 23 to October 18, at Faleria António Prates, there will be a show of paintings done by robots created by a painter, Leonel Moura. Tak about conceptual art :p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-112420924228848643?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/112420924228848643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=112420924228848643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112420924228848643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112420924228848643'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2005/08/bio-art.html' title='Bio-art'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-112419594035423218</id><published>2005-08-16T13:39:00.000+01:00</published><updated>2005-08-16T13:39:58.913+01:00</updated><title type='text'>Forensics</title><content type='html'>Not directly related to coding, but a very interesting topic on it's own, is Computer Forensics and Incident Response. To relate this to coding, this field is so new that there's a huge need for good solid reliable smart tools to analyze and extract information from systems. I mean, even the most basic of informations, like knowing the memory map of a running windows system, is still an unkown!&lt;br /&gt;&lt;br /&gt;If you dd (dd - a linux tool also available on windows to dump bytes... be it memory, a drive, whatever - to a file, used to image disks or analyze memory or (yep) do forensics analysys) a windows machine's memory, how do you extract meaningful information out of it? How is it organized, what is the kernel region or the applications region? Process memory is part RAM part swap, how do you deal with that? If you crash dump a windows, you can analyze the dump information on MS's tools, but dd's output is not read by the debuggers, so we need tools for this :p&lt;br /&gt;&lt;br /&gt;&lt;a href="http://windowsir.blogspot.com/"&gt;Windows Incident Response Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-112419594035423218?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://windowsir.blogspot.com/' title='Forensics'/><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/112419594035423218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=112419594035423218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112419594035423218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112419594035423218'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2005/08/forensics.html' title='Forensics'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14338506.post-112108256997734388</id><published>2005-07-11T12:49:00.000+01:00</published><updated>2005-07-11T12:49:29.976+01:00</updated><title type='text'>First Post</title><content type='html'>And we start off with a classic. drum roll please...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;God, root, what is difference?&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14338506-112108256997734388?l=blog.worldofcoding.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.worldofcoding.com/feeds/112108256997734388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14338506&amp;postID=112108256997734388' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112108256997734388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14338506/posts/default/112108256997734388'/><link rel='alternate' type='text/html' href='http://blog.worldofcoding.com/2005/07/first-post.html' title='First Post'/><author><name>andreia|gaita</name><uri>http://www.blogger.com/profile/07506744512219560432</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
