Siebe 的个人资料Siebe Tolsma日志列表留言簿 工具 帮助

Inky's Blog & Search Engines

For fun I decided to see what page/rank I would appear on on various popular search engines. I've searched on all of the below engines with the simple phrase "Inky", something which is pretty common on the web, it seems. Anyway, here goes!
 
Windows Live Search: Gave up after 35 pages
Google: Page 3, #2 (this blog)
Yahoo! Search: Page 3, #10 (this blog)
Ask.com: Page 5, #9 (this blog)
Altavista: Page 12, #1 (this blog)
 
Interestingly enough, I found a piece of example code on MSDN which is called "Inky" which demonstrates the use of the RichInk control, which is pretty much where I got my nickname from in the first place (first to do Ink on a third party application for Messenger). It makes me wonder...
 
If you type "Siebe Tolsma", most search engines (if not all, I didn't test them) turn up a slew of stuff about my activities on "teh intertubes".

VER CVR0, Messenger Server mumbo jumbo

It most (if not all) documentation about MSNP you can always see "CVR0" tagging along on the VER transaction. But what is this "CVR0", really? No documentation explains it, and about everyone assumes it is "required", something you just send and don't ask what it does.

The truth is, CVR0 is actually a seperate protocol. It has the same properties and format as MSNP, but it only supports two commands, the VER and CVQ/CVR command. This protocol is being supported by the server and the client in case there are no other MSNP versions that are supported by both at the same time.

Say you are using a client that is *old*, something like say 3.0. Of course the server doesn't still support MSNP5 or 6, but it does support CVR0. Using the CVR0 protocol the client can then continue to communicate with the server to find out what the new client version is, and where it can download it (in this case a forced upgrade, I suppose).

And because it is a seperate protocol, you don't need to send it along with VER (for example if you are sure that you support protocols the server also supports). Saves another 5 bytes, right? ;-)

Plenty of reading material

Today my books from Amazon arrived. Pretty quick, roughly a week faster than Amazon indicated when I ordered it (26th of October vs. 1 November). So now I have a lot of new reading material, seeing as I've also bought another book at the local book store last week. That book is called Never Go Back by Rober Goddart.. It's a pretty good book, and it's funny to see the difference between British books and American books.
 
Oh, and in case you're wondering, the books I ordered from Amazon are Ice Station by Matthew Reilly and Deep Fathom by James Rollins.

Sweet ideas

I told you a while ago that we would be rewriting BOT2K3 in C#. And it is going to be sweet.
 
For those who are wondering, yes, the next generation of BOT2K3 will be version 5. No doubt about it. We did a minor update with v4 and v4.1, but that was mainly because not that much has changed between those versions (all just internal code, nothing much you can see). Version 5 however will be different. A lot different.
 
Yes, we will keep our commands, and our group games.. But that's about as far as the comparison with v4.1 will go. I cannot tell you all the cool and totally awesome ideas yet, of course (otherwise it won't be a surprise!) but here are some things I can disclose:
 
  • It will have Yahoo! interop support.
  • It will keep track of everyones status, nicknames, display pictures, etc.
  • The website (http://bot2k3.net) will be more important in the future
  • We will extend our XML APIs support
  • More speed for everyone

Windows Live Messenger 8.1 Capability Bit

Pretty obvious, but worth mentioning anyway for those who wish to know. Windows Live Messenger 8.1 uses the 0x70000000 capability bit (also known as "ClientID" among MSNP-developers). For those interested, also check out ZoRoNaX's blog, which contains some cool posts about MSNP (yeah, each of those words is a seperate link, go figure!). It's definitely worth to keep an eye on!

MSSQL vs. MySQL

I know my way around MySQL pretty well. In fact, we had classes at college teaching RMDBS, and MySQL in special (and a bit of Interbase, the database type that is heavily tied in with Delphi). For the better part of my life as a developer (or a to-be-developer, I guess, seeing as I haven't finished college yet) I have used MySQL for most of my projects (ranging from websites to applications).
 
However, now that I am working for Oberon (90 days work experience for school) I need to use ASP.Net. And with that, Microsoft Sql Server. And boy, is MSSQL different! Yes, it has some of the traditional SQL syntax, but there were a couple of things that made me scratch my head in wonder.
 
One of those things was the LIMIT from MySQL. There is no LIMIT in MSSQL. Nope, that's right, there is not. However, there is a TOP keyword.. And where do you suppose it's placed within a query? That's right! At the front! So if you want to select the first 10 records, your query would look like SELECT TOP(10) ..., ..., ... FROM table ....

Anyway, I think it's good to work with ASP.Net and MSSQL now that I've used PHP, Perl and MySQL for over 6 years... And I have to admit that ASP.Net is really neat, it kind of brings the fun of making websites back, seeing as it's all .NET powered (and thus has decent OO support, C# or VB backend and of course the whole .NET Framework).

Frisian, Norwegian

Interesting:
 
Recently I got an e-mail which contained a whole bunch of Norwegian text.. and it is amazing how similar it is to Frisian. Frisian, you may ask, is a language spoken by a relatively few people, maybe less than a million people in the world, myself included ;-). It is spoken mostly in the northern province of Friesland in the Netherlands, but there are also some dialects in northern Germany, and Denmark too I believe.
 
From Wikipedia:
 
"Frisian (Frysk) is a Germanic group of closely related languages, spoken by about half a million members of an ethnic group living on the southern fringes of the North Sea in the Netherlands and Germany. Frisian is the most closely related living European language to English. Although English and Frisian are unintelligible to each other, there are similarities to both Dutch and Danish, whose speakers are able to understand some spoken Frisian"
 
Anyway, it was pretty cool to notice that I could read most of the Norwegian text (or at least grasp the rough meaning) without even having to follow a single lesson of Norwegian. Spelling is not always the same, so it was easier to just try to pronouce it which also made recognition a lot easier.
 
Oh, and, going through a dictionary earlier this weekend I was mildly surprised at how many words in Dutch originate from Greek and Latin.

Question of the Week (MSNP Challenges)

Here's a question: how are the product ID and product Key for challenges in MSNP generated? Are they random, or is there some twisted logic behind it? Do they have monkeys sitting behind PCs typing away to create seemingly random combinations of letters, numbers and symbols? Or are they the codes to Bill Gates' volcano lair? (every overly rich person has to have one, right?)
 
Feel free to leave your suggestions by commenting. In the mean time, I should probably just ask one who works on the server code.

Being proud of buying games

Yes, by the end of this post I hope to have made a point.
 
I still remember when we got our very first Pentium 2 machine. We already had a 486, but it was of course not as awesome as the P2. It was the autumn of 1998, and I would ask my parents every week (or heck, maybe even every day) when the PC we ordered was ready. Finally it was time, we picked it up from a shop on a (I think it was rainy that day) Saturday. Everyone gathered 'round the PC to finish the installation of Windows 98 (OEM, we had to enter a name, etc., before we could start using it!).

By that time we also visited my uncle/aunt every now and then, and they already had a sweet machine which was humming along fine. When we visited we usually stayed for the weekend (they weren't exactly "around the corner"), and I could always be found sitting behind their computer with my cousin, playing games. Because they had awesome games. Starcraft, and most importantly, Age of Empires 1. I was in total awe (I admit, I didn't get jack **** of Starcraft, but it was still cool to watch my couple-of-years-younger cousin play it with ease).
 
So, not long after we got our own Pentium 2 machine I bought AOE. And mind you, by that time I got maybe 2,5 or 5 guilders of allowance every week (1 dollar equaled roughly 2 guilders at that time). The game cost some 50 guilders, so you do the math. It took a while to save for it. But when I got it, I was damn proud. It was awesome being able to buy the game and I got totally hooked to it. The game was definitely worth it's money. Even better was it when I got the Rise of Rome expansion pack.
 
When I look back on that now I wondered what happened to that feeling of being proud when finally being able to buy something expensive. Whenever I buy a game now (or heck even a whole XBOX 360 console) I don't get the same feeling. Perhaps materialism has got to me as well? Maybe we just want more more more? Just whatever we buy, we aren't happy with it, and it doesn't add much happyness to our lives. We get something, use it for a couple of weeks and discard it as something that is part of our every day life, not realizing how much stuff we already have, already looking at what to buy next.
 
Somedays I long for those days, some 10 years ago.

Laser pen / pointer + Tea

A week ago I received my MVP gift, and with it a laserpen/poiner (whatever you want to call it). It's a class LLLA red laser, with a wavelength of 650nm (the most common one there is) and a maximum output of <5 mw (obviously, otherwise it wouldn't be legal).
 
Anyhow, the other day I pointed it at my transparent tea-cup and pressed the little button. To my amazement you could actually see the red beam shine through the glass and exit on the other side. A pretty cool property of tea (I don't know why this happens, it must be something in the tea which makes it visible). I was even more suprised when I pointed the pen at it from an angle -- The beam actually bounced of the surface of tea, like so:
 
 
Pretty neat! I've also tried it with milk and water, but alas.. So far I've only found tea to be working.

Ideas, Laptop, Time!

Not having a laptop (or a normal desktop machine) around is really starting to bug me. And its hows how dependend I've become on such equipment. It gave me some time to finish a couple of books though, good ones too. I was suggested another by a contact of mine who saw I also read Seven Deadly Wonders by Matthew Reilly. I ordered them at Amazon yesterday and I surely hope they are delivered soon (even though Amazon says the estimate is 3rd of November -- What the?!).
 
Anyhow, back to the title of this post. Yes, I have been gathering many ideas as of late, but unfortunatly no time to execute them. First there are the issues of the current code base of BOT2K3 which, after churning along for over a year, has finally died. Well, partially died. The project is not dead, the current code base is. The good news I guess is that we're going to rewrite it in C# so we get to have all the .NET (and multithreading) goodness. The downside of that is that we can only run it on a Windows box (not that we aren't right now anyway, but you never know!). And being an Intern at Microsoft this summer, I completely forgot BOT2K3 turned 3 years old last summer! Wow, we've been doing this for over 3 years now.
 
Then there's a major project me and Reinder have been thinking about doing, something with a private file server kind of thing that does all this awesome stuff for us. I can't disclose too many details about it (yet), but I hope I can tell you some more about it in the future. The project is huge though, and I doubt it's going to be finished by the end of the year. Again, the problem is that I can't do any coding, research, prototyping or whatever while not having a machine around at home.
 
Then I have a dozen ideas that are related to Messenger and other Windows Live services. Better MSNP documentation is high on the wish list, because quite frankly I think MSNPiki and Hypothetic aren't quite capable of delivering. Sure, MSNPiki is kind of up to date, but it is a very shallow documentation (mostly I think it acts as a dump where people post their most recent observations, rather than documenting what is going on).
 
Some other ideas include a Windows Live Spaces blog reader plugin for Messenger that actually intergrates with Messenger rather than launching a seperate browser. A blogger tool for your own blog would be cool, too. Either way, that's not really possible right now using any of the existing SDKs for Messenger, so it comes down to the people who actually like to hook Messenger and do all kinds of black magick. Speaking of Add-Ins, it's awefully quiet. I know that the people working on the Add-Ins for Messenger were pulled from the project to focus on other areas of the client last summer, but I had expected to see at least a wee bit improved version in the new 8.1 client. No such luck. There is still the "send one message per incoming or outgoing message" restriction, and no access to advanced features that makes writing Add-Ins fun.
 
Also, on a side note, why do offline messages not support fonts? For that matter, why does the Shared Search feature in the client not use fonts? How hard can it be to add one header with the message format so we can all enjoy our buddies font instead of our own (Shared Search) or the depressing default black font for Offline IM.
 
I'll probably come up with some more stuff I thought about recently, and if I do, you can read it here first.

Windows Live Spaces and Emoticons

Hmm. So I can add emoticons to messages. I knew I could do this for a while (or well basically since I started using MSN Spaces), but I've never really used the feature. I guess that is mainly because Spaces doesn't do any auto replacement!
 
Unlike Windows Live Messenger, where emoticons are automatically replaced with the images, Spaces leaves the text intact. While you could argue that this is the correct behavior, I think it's silly. I like emoticons, I just don't like to use a dozen clicks (or, well, two, but still!) every time I want to insert one into the body of my post.
 
So here's and idea!
 
Windows Live is all about sharing and integration. Having your presence everywhere, being able to change your presence everywhere (you can observce this by going to any Windows Live page -- It should offer you a "Me Control" in the right hand corner of the screen). So, soon more information from Windows Live Messenger will be shared on the web: the display picture and personal status message. But what about other content, and emoticons in specific?
 
If I add an emoticon to Messenger, it would be cool if it were automatically saved on some huge ass Windows Live server, where all Windows Live services can pull my emoticons from whenever, whereever I need them. Then, I can have an option in Windows Live Spaces which says "Automatically replace emoticon shortcuts with images", which does exactly what it says it will do: It replaces default and custom emoticons in the body of my post.

MVP NDA

Section 2a, part iv:
 
"Recipient shall:
 
Refrain from reverse engineering, decompiling or dissasembling any software code and/or pre-release hardware devices disclosed by Microsoft to Recipient under the terms of this Agreement, except as expressely permitted by applicable law."
 
Aww shucks

Get Config File ("Shields Up", MSNP)

Thanks to ZoRoNaX for providing the latest XML payload of the GCF command.
 
Unfortunatly there is very little documentation on the GCF command for MSNP. So I figured someone has to change it! ;-)
 
The Get Config File command (GCF, not Get Client File as documented else where) is a command used to send and retrieve configuration files for the Messenger client (the feature is also nicknamed "Shields Up!" although this had to be changed by the Messenger team for legal reasons -- A similar product already existed with the name "Shields Up!"). Right now it has only one known purpose: to plug any security holes in the Messenger client related to certain features (such as Flash-enabled features and clickable links) until Microsoft can release a patch to fix the problem.
 
In pre-MSNP13 clients, the client will have to manually send GCF with the filename to the server on which the server will reply with the file as payload data. On MSNP13+ clients, the server will push all the configuration files to the client even before the USR S command is received.
 
There is also a small change in the way the XML payload data looks:
 
Pre-MSNP13 clients:
 
<< GCF (trid) Shields.xml\r\n
>> GCF (trid) Shields.xml (length)\r\n
   <?xml version="1.0" encoding="utf-8" ?>
   <config>
     <shield>
       <cli maj="7" min="0" minbld="0" maxbld="9999" deny=" " />
     </shield>
     <block></block>
   </config>
 
MSNP13+ clients:
 
>> GCF 0 (length)
  <Policies>
    <Policy type="SHIELDS">
      <config>
        <shield>
          <cli maj="7" min="0" minbld="0" maxbld="9999" deny=" " />
        </shield>
        <block>
        </block>
      </config>
    </Policy>
  </Policies>
 
As you can see, in MSNP13+, the configuration files are now called policies, and the client will push each seperate XML "file" as a different policy. Let's move on to the content of the configuration files. Note that I will refer to the XML tree as so: config/shield/cli to refer to the "cli" element in the example above.
 
First of all there is the config/shield element. This element contains shields to protect users against security holes in features of the Messenger client. The config/shield element will always contain at least one cli element. Each cli element contains the following attributes: the major of the client (maj), the minor of the client (min), the minimum build (minbld) and maximum build number (maxbld) and finally the deny attribute.
 
With the first four you can determine for which client the shield is (in the example above it is for 7.0.0 to 7.0.9999). The deny attribute indicates which features should be completely disabled. It is a space-seperated list of features from the following list (note that this list is case-sensitive):
 
  • SendTextAPI (API for sending IMs through Messenger?)
  • PlugIns (Windows Live Messenger PlugIns)
  • voicemail (Unknown)
  • SharingFolders (Windows Live Messenger Sharing Folders)
  • protocolhandler ("msnin:" links for browsers?)
  • dynamicbackgrounds (Dynamic Backgrounds)
  • phone (Windows Live Messenger Phone/Calling feature)
  • voiceim (Voiceclips?)
  • camera (Webcam, i.e. video conversation)
  • audio (Microphone, i.e. audio conversation)
  • filexfer (File Transfer)
  • hotlinks (Links in conversations)
  • ddp (Dynamic Display Pictures)
  • winks (Winks)

Recently a new virus/trojan/worm (whatever it was) was targetting MSN/Windows Live Messenger. This made Microsoft put their blocking system into use. To do this, Microsoft has two choices; either they add the blocks to their servers (try typing download.php or gallery.php in a conversation -- the message will be dropped) or it adds it to the config/block element. They opted for the second option, and so we had a good opportunity to take a look at this feature (which has not been documented before!):

<block>
  <hashes>
  </hashes>
  <regexp>
    <imtext value="LipcLnBpZi4q" />
    <imtext value="LipcLnNjci4q" />
    <imtext value="Lipncm91cHBpY3R1cmVcLnBocC4q" />
    <imtext value="Lipncm91cGljdHVyZVwucGhwLio=" />
    <imtext value="LipnYWxsZXJ5XC5waHAuKg==" />
  </regexp>
</block>

 
We not yet know what the shields/block/hashes element means, but we can always guess. It is probably a list of hashes of files the client needs to reject (i.e. a self-transfering virus could be blocked by adding a checksum of it).
 
The regular expressions however, we do know. The shields/block/regexp element contains zero or more imtext elements which all have a value attribute. This attribute contains a Base64 encoded regular expressions which (when matched) will make the client block the incoming (and presumably outgoing) message. The expresions are normal regular expressions (such as ".*groupicture\.php.*") and should be useable for any language that supports regex (such as Perl, C#, Javascript even).
 
If you have anything to add, please leave a comment :-)

King of IDEs, part 3

Writing some code I found another "cool" something I would like to see. Even though this is more language specific than IDE specific, I suppose.
 
Right now I'm in the process of writing several methods in C#, and one recurring theme is input validation (of parameters passed to the method). I'm not talking about complex validation here, just simple checks to see if an object is null (when it shouldn't be), etc. It would be very cool if there would be some way to automate this (writing a ton of if(x == null) throw new ... blocks can get very boring).
 
I haven't looked at the C# 3.0 spec yet so I don't know if something similar has been added yet (although I do know it's getting a bit more like Perl syntax-wise every day, with all the little "?" etc (not that I mind though)), and I have no idea how my idea would fit into the syntax (some special keyword perhaps similar to out, ref, etc?). Perhaps something along these lines would be best:
 
public void X(notnull string y, notnull string z)
{
...
}

King of IDEs, part 2

So I previously talked about how much I loved Visual Studio. In turn, Cyrus (who I met on his 4th of July party during my internship, although I doubt he remembers me) commented on my blog post about how he hoped that the next version of VS would turn out even better for me.
 
That got me started thinking about possible features I'd like to see in Visual Studio. One thing is more integration with regions. Regions are blocks of code you can encapsulate with #region Title #endregion, so you can mark certain blocks of code as doing "Title" (for example you can categorize methods). I really like that feature and I use it a lot.
 
But what about Intellisense? Let's say I have a class with a hundred methods/properties. I know that's a lot and I should probably split it up somehow, but just let's use it as an example. Now I have every method categorized with regions. I create an instance of the object, x = new X(), and type "x.". The IntelliSense window comes up and prompts me with all methods and properties (oh and fields too of course) belonging to that object.
 
There is however no support for regions. I cannot collapse groups of methods based on the region they are in, e.g.:
 
x. +-------------------+
   | + Region X        |
   +-------------------+
   | - Region Y        |
   | A()               |
   | B()               |
   +-------------------+
   | + Region Z        |
   +-------------------+
 
That is really something I would like to see.

Windows Live Mail Desktop has potential

I've been looking for a simple yet Microsoft-style e-mail client that can also handle newsgroups for a while now, and haven't found any but Outlook Express (which I've been using for the past couple of years and wanted to dump in the first place). Having seen a couple of screenshots of Windows Live Mail Desktop (WLMD from now on) I figured I'd try that for a change.
 
I must say, I'm impressed. WLMD definitely has potential, although I'm not entirely happy with the GUI yet. For example, the whole "putting checkboxes in e-mail items when hovering over them" strikes me as pretty odd, and makes moving/deleting e-mails kind of annoying because when opening an e-mail the checkbox is automatically being selected. There are a couple of other small UI tweaks I'd like to see (some more spacing here and there) but other than those issues I really like it.
 
And it has support for newsgroups like Outlook Express has! I really missed this feature in Office Outlook. It still hasn't been (re-)added in Outlook 2007, and I've heard some "rumors" that it will probably never be added to the Outlook client again.
 
I really like the intergration with Windows Live Messenger as well. When receiving new e-mail a toast will popup ala Windows Live Messenger style (or is it actually *from* Messenger?). Furthermore, I can change my status from WLMD as well (and I can see my nickname and display picture, but no personal status message?). Beyond that it will also sync up your contacts (if you allow it to, at least) so I can also quickly read all feeds from my contacts Windows Live Space. Cool.
 
Speaking of Windows Live Spaces integration, you can also click a little icon that says "Blog" and it will automatically Quote the e-mail for you in a new Spaces post. Awesome. Not that I think it's going to be very useful for me (I don't usually quote e-mails in my blog posts ;-), it's still great to see the great extend of the integration with other Live services.
 
... And I get to figure out how this all works behind the scenes of course, joys! :-)

American zippers zip on the wrong side

The British drive on the other side of the road. Australian water flushes the other way (even though this has been partially debunked by Braniac, but you get the idea). But strangely enough American (as in "United States of America" American) zippers zip the wrong way. Try it. Go look for European (or just Dutch) clothing which has a zipper. You will find that in Dutch clothing the zipper part (the little label you pull) is on the left side. In US clothing however (or all that I've seen anyway, and I own some) it's on the right side!
 
It's kinda annoying. I'll live, though ;-p

King of IDEs

The King of IDEs is definitely Visual Studio. I simply love it. You may not agree, but you have to agree that Microsoft has created a pretty stable product when it comes to their programming environment. In fact I could argue it is possibly the best product MS has ever made... But I'm not going to do that right now because .. Well, I don't feel like it ;-p
 
For me it makes developing large applications so much easier. For example (I don't know whether 2003 has this or not) in VS2K5 you can now create class diagrams and design your program before you even write any code. Visual Studio will automatically generate the classes for you in any language is supports (C++, VB, C#, J#, you name it). This makes planning a large project so much easier, and allows you to visualize inheritence, etc. Yes, there are other tools that can do this .. But so far I haven't seen one which can do it with the elegance of Visual Studio (and believe me, I tried a buttload of them for school).
 
So, now that I have to write Java applications for work, I am annoyed there is no IDE that can offer me the same functionality as Visual Studio. You might say "hey, IDE xyz is awesome for Java!". Perhaps. The keyword is "for". For Java it's all nice and dandy maybe. But what about debugging? Intellisense-style code completion? User-configurability?
 
For example, at work we use Eclipse 3.2. It is OK. However, there is some annoying things that I cannot change in any option anywhere in the program. For example, I love the behavior with { } in VS. It's a bit smarter than Eclipse when it comes to randomly inserting them when I don't want them (yet). Another thing is the seemingly slow and clunky Intellisense-style code complete... It just doesn't feel as good as Visual Studios -- who here thinks that hitting "Enter" is a good thing if you want to insert a method you picked from the list? .. I don't, I want to type ( and bam, the method is inserted and intellisense tooltip is still there to provide me with parameter information. The last thing is debugging .. The whole breakpoint idea in Eclipse just doesn't cut it. Also, why does it need to switch to a completely seperate IDE layout for debugging? It's annoying, especially since it doesn't automatically switch back when I stop debugging an application.
 
Oh well. I will just go sit in my corner and hug my copy of Visual Studio with all the nice posters and stuff until I can use it again (ie. when my laptop gets back). I never liked Java anyway. C# is my hero.