SendEmail ignores the “From” Field

More Fun with Sharepoint and it's excellent (</irony>) Documentation.

Apparently, the SendEmail Workflow Activity ignores the FROM-Property. As per a Comment on the SendEmail.From Page:

This property is currently ignored. The emails it sends are always from the sender specified in the outgoing e-mail settings under SharePoint central administration. Specifying a "From" header in the Headers property also fails.

I can just confirm that, SendEmail.From indeed seems to have no effect, regardless if it's been set through the Binding Property or directly in the Property Page.

Bonus-Link: Completely unrelated to the EMail problem but regardless very helpful to me: An article about creating custom Sharepoint Timer Jobs. Thanks for that one!

I hate locale-specific content

Back in the old days, the Internet was almost exclusively English. Then, it became a more world-wide thing and now, you find content in all languages of the world on the web. That's fine.

Then, some people thought: Hey, wouldn't it be great if we detect your browsers Accept-Language (or your IP) and display content automatically in the language of your choice? Apparently, a lot of people thought the same and now, a lot of sites have such an automatic language-switch now. Of course, your opinion my different, but in my opinion, all of those sites have one thing in common: They all suck. Look at the two screenshots below:

When I go to http://www.msdn.com, the language selection will be set to German and all searches will search German Content. As you see, the German version does not have any results for "ResourcesAttribute", whereas if I manually change the dropdown to United States English, I get 1110 results, with the first one being the correct one directly.

Now, it's easy to point fingers at Microsoft and telling them "You Suck!", but MSDN is not the only site that does it like that, it's just the site where I encounter that regularly. Another well known offender is Google, as Google.com is not English but whatever language you choose. Google is actually even worse. They have domains in pretty much every TLD. So, what do you expect when you go to www.Google.fr or www.Google.es? What I would expect is the French or Spanish Version. What do I get?

A German Version. Ok, fair enough, so you got German UI. But what do I get if I search the web for something, let's say "Euro 2008"?

The first picture was made using German as my default Accept-Language, the second one with Spanish. Note that there is a difference in the search results, and that's what I not only find braindead but also inexcusable. If I go to Google.es and select "Search the Web", then I expect that my results look like the second one, regardless if my Accept-Language is German, Spanish or Swahili.

I find the Google results unusable at times, only to discover that my Language is German and therefore I do not get many good results when searching for Sharepoint-Related articles because frankly, most useful Sharepoint Articles are English and therefore the "English" Google which does not spam the first 10 Pages with useless German results gives a lot better results.

Again, YMMV, but I hate automatic language selection. I want to select my language through the URL and then expect that what I see will always be the same regardless of Accept-Language. Wikipedia does it right: http://de.wikipedia.org and http://en.wikipedia.org are entirely separated and I can be sure that they always behave the same regardless of my browser's language.

Anyway, that was just a long and complicated way of saying: As I reinstalled my operating system a week ago, I still had to change my browsers Accept-Language to get useful content on the Web and that was a good opportunity to rant a bit about sites that believe they do me a favor by displaying content in "my" language.

Solving Sharepoint’s long startup time

When developing on a Sharepoint server, I have to iisreset or recycle the application pool countless times, and that is always paired with some seemlessly endless startup time (usually around 2 Minutes until Sharepoint starts serving pages again).

It turns out that this is not just something that is given, but there is a reason and even a solution to it, as Jeroen Ritmeijer points out in his blog posting:

The problem is that when loading signed assemblies the .net Framework checks the Internet based certificate revocation list. As our servers have, like most secure environments, no outgoing connections to the public Internet the connection to crl.microsoft.com times out after what appears to be 30 seconds. It probably does this a couple of times in succession, causing a 2 minute wait when spinning up SharePoint.

Jeroen also reports some workarounds for this. I have to say, this is one of the most important tips as it really speeds up development! Or, to say it with his words: "life is good again..... well as good as it gets when you are doing SharePoint development.".

System.AccessViolationException on AnkhSVN with Visual Studio

As quite a few other developers, I use Subversion as my Source Code Control. Being mainly a .net Developer, I am using Visual Studio to do my work, and that means I needed a Subversion-integration for Visual Studio. My choice is AnkhSVN, specifically Version 1.0.3. Yes, it's pre-release, but it works a lot better than 1.0.2 which loved to put my repository in a state where I had to run the cleanup command first before I could commit. (Renaming, Deleting and moving files within the solution is somethink that could reliably mess up AnkhSVN, and 1.0.3 is a big improvement).

Since I have recently upgraded my PC (From an Athlon 64 X2 4200+ to an Intel Core 2 Quad Q6600), I also reinstalled Windows XP and the applications that I need, including Visual Studio and AnkhSVN. But to my surprise, I started getting Access Violations when starting or using any AnkhSVN Feature:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at svn_config_get_config(apr_hash_t** , SByte* , apr_pool_t* )
at NSvn.Core.ClientConfig.Init(String dir) in e:\projects\2003\ankh\build-3\src\nsvn.core\clientconfig.h:line 73
at NSvn.Core.ClientConfig..ctor() in e:\projects\2003\ankh\build-3\src\nsvn.core\clientconfig.h:line 21
at NSvn.Core.Client..ctor() in e:\projects\2003\ankh\build-3\src\nsvn.core\client.cpp:line 95
at Ankh.AnkhContext.SetupFromConfig() in E:\projects\2003\Ankh\build-3\src\Ankh\AnkhContext.cs:line 552
at Ankh.AnkhContext.LoadConfig() in E:\projects\2003\Ankh\build-3\src\Ankh\AnkhContext.cs:line 516
at Ankh.AnkhContext..ctor(_DTE dte, AddIn addin, IUIShell uiShell) in E:\projects\2003\Ankh\build-3\src\Ankh\AnkhContext.cs:line 49
at Ankh.Connect.OnConnection(Object application, ext_ConnectMode connectMode, Object addInInst, Array& custom) in E:\projects\2003\Ankh\build-3\src\Ankh\Connect.cs:line 89

Hmmm... That looks bad. After some searching and even a memory test (Access Violation is often also a sign of faulty memory, especially if they suddenly start appearing), I found that it was caused by an installed Subversion (if you look into the stacktrace, AnkhSVN eventually goes into Subversion, which then throws the somewhat misleading exception). I do always have the Command Line Version of Subversion installed, in case I want to check out some repository outside of Visual Studio. After renaming the C:\Program Files\Subversion Folder, AnkhSVN works perfectly fine.

It looks as if AnkhSVN was linked against a different Version of Subversion, or in some other way is incompatible with the stuff it finds in my standalone installation. Specifically, it is libapr-1.dll that is causing that issue. If I remove it from my %PROGRAMFILES%\Subversion\bin Directory, Ankh works fine, but obviously the standaone Subversion does not. Armed with that clue, I was able to find the reason:

Subversion-1.4.6 for Apache-2.0 uses APR-0.9(libapr.dll). But Subversion-1.4.6 for Apache-2.2 uses APR-1.2(libapr-1.dll).

Yep, I am indeed using Subversion for Apache 2.2 which uses APR-1.2 (APR stands for Apache Portable Runtime Library), but AnkhSVN uses APR-0.9 and despite them having different filenames, they are referencing each other somehow and as a result, it crashes.

The solution? Since I do not run Apache Web Server on that machine, I just uninstalled Subversion and reinstalled the version built against Apache 2.0 instead - works perfectly! (For normal Desktop use, there is no advantage or disadvantage of using a specific version, it is really only if you want to use Subversion with Apache, as outlined in an older article by me). If you ARE using Apache, I don't really know how you could resolve it. One guess is to install the Apache 2.2 package, grab the required .so files, uninstall it and install the 2.0 package while placing the 2.2 packages into the Apache extensions. But I have no idea if that works. If not, it looks like you're in for some recompiling to compile your own compatible versions of your tools.

Anyway, I'm back to having a working Development Environment and I'm working on the next version of my CommandLine Tools.

I like Big Screens and I cannot lie

Ok, excuse that bad Sir Mix-A-Lot pun in the title. Anyway, today I've upgraded my Monitor. Previously, I had a single 15.4" Flat Screen with a resolution of 1280x800. That is nice, but when working with Visual Studio or Cinema 4D, it gets a little bit fiddly.

So I've now added a 24" 1920x1200 Pixel Monitor to my existing one. Apart from the obvious advantage of having 1.3 Million additional Pixels compared to the previous one, it also allows me to have a Dual-Monitor setup. Now, be warned: A 24" Monitor is HUGE. In the shop, they all look so small when they are placed in the big open space along with other >20" Screens but at home you get to learn it's real size. Also, 1920x1200 is a resolution where Fonts and screen Elements are rather small. Do not even think about turning on Large Fonts though, Windows is really bad at scaling and instead of properly scaling all UI Elements, it will just increase the font size, thus causing more destruction to the UI than they help. And of course, buying a screen to get a bigger resolution only to size it down then does not make sense.

I also want to thank Jeff Atwood here. His Article about LCD Monitor arms contains a real sweet picture of his setup, and I envy him for having the space to put these Monitors 🙂

The Monitor of my choice is the Philips 240BW8. To be fair, the main reason was it's 350 € price tag compared to the 450+ € of other monitors. Ah yes, add a few Euro for a DVI Cable because it only comes with a VGA Cable. Dear Monitor manufacturers: People who connect a 1920x1200 Pixel Screen with a VGA Cable should be shot and companies to deliver a VGA Cable with such a screen should share a similar faith. Anyway, back to the screen. One nice feature is that the screen includes Speakers that are actually better than expected. They have (limited) bass and are loud enough for my office. You couldn't run a party with them, but compared to a lot other speakers in monitors, they are good enough. The screen is also properly adjustable: Move it up/down, tilt it sideways or turn it by 90° ("Pivot").

It's also suitable for games, and when playing on such a screen you realize that this is how gaming is supposed to be. Unreal Tournament on such a screen is pure glory. Only downside: For 1920x1200 you would need a really high-end PC (My Athlon 64 X2 4200+ w/ Geforce 7900 GTX is not quite cutting the edge anymore 🙂 ) or you have to reduce the resolution and live with interpolation. Luckily, interpolation in games is usually not such a big quality issue.

Yes, it takes up a lot of space, but I am happy with my new screen and I would never go back to a 1 Monitor as long as I can avoid it.

Sewing without a Sewing Machine is actually work

I have now started making my Weighted Companion Cube, and I just feel like I should point out the opposite: Sewing without a sewing machine is actually work!

So far, i've managed to make a heart piece, only to discover that the sewing pattern is a little bit inaccurate. In the first step it talks about a "Dark Grey fabric" which you combine with the interfacing. But "Dark Grey" should be light grey instead, as the fabric that you get from step one is the one where the heart will go to and that will eventually go onto the cube, which is dark grey. It can now be argued about wether not both are "dark" grey, with one being darker than the other, but the essence is: Use the lighter grey for the first step.

Anyway, here are my attempts so far:

  1. Get a 5x5 inch (14x14cm) pattern of (light) grey fabric and the interfacing. If it's not a perfect square it does not matter, you will eventually cut off the edges anyway.
  2. Sew them together using the circle template.
  3. Cut out a heart from the pink fabric using the template and sew it into the middle of the grey circle
  4. Cut out the circle, remember to leave a bit of safety margin.

As you see, I clearly need some more practice here, the heart piece could look a lot better. Also, the sewing technique is not optimal. You should use Satin Stitch here, but doing it manually is a LOT of work. I'm thinking of getting a sewing machine, which are not neccessarily big and expensive. The local electronics store has the Brother JS-23, which is relatively small yet does exactly what it is supposed to do - satin stitch Weighted Companion Cubes 🙂

Anyway, Sewing is actually quite fun, and I hope that I can finish my first Cube during the week.

Weighted Companion Cube, Part 2

A few weeks ago I wrote about making my own Weighted Companion Cube, and today I finally got round to buy the material needed. Now when it comes to sewing material, the question "Where to get stuff like that?" comes into mind. Luckily, Paris is a city that has everything, and of course they do not have one shop that sells sewing material, they got 10 or so, all neatly arranged next to each other in the Area around Montmatre. Speaking of that Area: As Montmatre is on a hill, you can expect a lot of stairs and walking up/down. On the other hand, you have a gorgeous view of Paris from there! I went to the Marche Saint Pierre, which has 5 stories of cloth (and a horrible web site, but at least you can get the address and opening times from there).

Please allow me to go off-topic for a minute and have a rant. First: Paris is not that big actually, but it's a Maze. Make sure you get a proper Map of the Area. Previously, I always thought that there is always a Map nearby wherever you are in Paris. That is not the case, sometimes you have to walk quite a bit to finally find a map. When you find one, chances are that it may be a map of Paris rather than just one of the area, which makes it close to useless. And if you find an area map, there is also a chance that the nice little "You are here" sticker is missing, so you are still lost as it can be hard to figure out where you are because Paris apparantly has more streets than inhabitants (I made that claim up, but it feels that way once you've spend 1 hour looking for a Metro station in the Maze). Dear French Government: As a tax payer and an inhabitant of the fifth French Republic, please use some of the tax that you are taking off me every month to produce and deploy a few "Vous êtes ici" stickers. Merci. The second part of my rant goes to the people who just love to aprubtly stop walking. Dear people, it is nice to see that you are not alone and got friends or family with you, but if you want to talk to then, you can continue walking down the street. There is no reason to suddenly stop, especially because the streets in certain areas (like Montmatre) are usually overcrowded and you are hampering the flow of traffic.

Any way, back to topic. So I went on and bought the cloth that is needed for the cube. I did not know that there were so many variations of cloth, but there indeed are. But every variant, be it Satin or Cotton has one thing in common: They are expensive. Some still more than others, but it's not really cheap. I also ended up buying quite a bit more than I needed because the sheets were 1.80 Meters long (and you had to pay per Meter of Width), but I think it cannot hurt to have some spare stuff. I also got a bag of Fill Material, so that I can stuff the Cube.

My complete shopping list today:

  1. Light Pink Thread (Fil a Coudre), 100 Meter, 3,05 €
  2. Filling Material (Tapissier), 1 Kilogram, 9,50 €
  3. Light Pink Cloth, Cotton, 1.80 Meter x 1 Meter, 8,80 €
  4. Light Grey Cloth, Cotton, 1.80 Meter x 1 Meter, 8,80 €
  5. Dark Grey Cloth, Cotton, 1.80 Meter x 1 Meter, 8,80 €
  6. White "Net", 1,80 Meter x 1 Meter, 2,75 €

So for a grand total of 41,70 € I should now have everything for my Cube (I have different colored thread and sewing needles already), which means I will now start actually building it. And I will make sure that GLaDOS will not let me burn it for sure 🙂

The one remaining problem is that the original sewing pattern uses imperial units (inches) and that a simple 1:1 conversion to the metric system does not make much sense, unless you want to work with 7,62 or 12,7 centimeters. If I happen to have a dual Metric/Imperial ruler I might just use imperial units, otherwise i'll try to properly make a pattern based on metric units.

Paris Slalom World Challenge 2008

Last week-end, the annual Paris Slalom World Challenge was held in Paris. This is one event in the World Slalom Series, and the PSWC is the one with the highest Rating in Europe (3 Cones), hence the competitors were some of the best freestyle slalom skaters you can find. The location is also one of the best, Trocadéro, in front of the Tour Eiffel.

And of course, with such an Event, the team of 4WheelFreestyle was also at the Event. On Friday, we did a lot of free training and meet & greet. Oh, by the way: Congratulations to this couple! The Friday ended at the place near Hotel d'Invalides, with more skating and meeting more people. The day ended with a trip on the Metro (I need to get another backpack, the existing is too bulky) and a visit to a restaurant that had some interesting wall decorations…

Saturday started with the confirmation that you CAN have 4 people in 31m² without people stepping on each other's toes, and also with the confirmation that the French can't Park 😛 So, back to Trocadéro, the sun was burning but luckily there were some clouds to make it endurable. With the lighting being a challenge, it looks a bit like the world is going to end any minute 🙂 During Saturday, the first part of the Men Freestyle Battles started. At the beginning, there were 48 Riders, in 16 groups of 3 each and the first 2 riders to qualify for the next round. Unfortunately, some German Riders already bit the dust during Round 1, finishing 3rd in their group: Thomas Vilcans from 4WheelFreestyle, Bernhard Kuhn and Heiko Bader could already change their plans for Sunday. At the end, 32 Riders were left for Sunday. For 4WheelFreestyle, Rudy Op't Veld and Michel Schulz were successful in this round. (From left to right: Thomas, Rudy, Michel). The day ended at Notre Dame, that beautiful church that attracts a lot of people. It was nice, having all those bystanders and "accidential" visitors.

The final day of the Event - Sunday - started with the Women Battles. With 12 girls competing, we had 4 groups of 3, with the last one being eliminated. Sadly, Miriam Kwasny and Antonia Eggert did not make it past round 1, leaving 8 Riders (what's the female form of Rider by the way? Ridestress?) for the next reound (2 groups of 4). At the end – surprise, surprise – Chloe Seyres of Team Seba won, ahead of Polina Semenova and Nathalie Rager.

Also, Sunday had the Men Finals. 32 Riders in 8 Groups of 4, with the first 2 Riders going to the next round. From the German perspective, we lost Stephan Ullmann, Jan Gresens and André Stepczac on Position 4 and Michel Schulz on Position 3 of their groups. From the remaining three German Riders, Martin Sloboda was eliminated in the Quarter Finals, and Mischa Gurevich (who would later finish 7th) in the Semi-Finals. The Finals had a surprise for us, even though it is not really a surprise if you see the final: Rudy op't Veld finished second, in a Group with Igor Cheremetieff (who won the event), Tiziano Ferrari and Kirill Ryazantsev. In this picture, Rudy is the one with the white shirt and the german flag, Igor is standing right of him (not holding anything), and Tiziano on the left. On the left side of Tiziano, there is Kirill, and on the left side of him, there is Olivier Herrero, the 5th Placed rider.

Needless to say, we were really happy with the week-end, even though I am mentally kicking my ass for forgetting to get sun blocker, and now I've got pretty bad sun burns.. sigh… well, a minor price to pay for this great event!

Links:

Interrupting the Game Flow = Annoying as Hell

I just started playing Assassin's Creed, in which you play as Altair, an Assasin who is doing his Business around 1191 in Jerusalem and other middle eastern medieval cities. Unfortunately, Ubisoft almost ruined the game experience totally, as the first 20 Minutes are pure frustration. The game starts like many others: You got some sort of Intro, then a tutorial. All good until this point, but then the first mission starts and you are constantly interrupted. Walk three steps - bang, tutorial popup. Climb a ladder - bang, tutorial popup, explaining how to draw a weapon. Guys, making a stealth kill was covered in the tutorial 5 minutes ago! You then make 3 more steps and bang, cutscene. 2 more steps, cutscene. 4 steps, cutscene.

Where is the fun in that? I want to play the game, not being interrupted twice per minute! Cover the basics in the tutorial and then introduce new elements in a way where it does not interrupt the flow all the time. Luckily, this gets a bit better during the game (I first played it at a friend, so I can see how good this game really is), but it's the first impression that sells a product usually, and the first impression of Assasin's Creed was horrible so far, because there were no 10 Minutes of consecutive game play.

Assasin's Creed is not the only game guilty of this "Tutorialitis", it's just the latest example that I've played. I don't really understand why game developers are doing stuff like that. If you have a Tutorial, why does the first "real" mission need such popups all the time? Make the first mission easy enough to finish, but there is no need to explain stuff again that was explained 5 minutes ago, that's just interrupting the flow and fun.

Mass Effect – Hiding rough edges under a shell of awesomeness

I've bought Mass Effect for my Xbox 360 about 3 Weeks ago. For those who do not know, Mass Effect is the newest RPG from Bioware, creators of Baldur's Gate or the first Knights of the old Republic. Warning: This post may contain Minor Spoilers. I try to keep it clean, but details of some of the side quests may be given.

And speaking of KotoR: From the very first moment I started playing Mass Effect, I felt like the first time I was playing KotoR - I just could not stop playing it. And after I finished it, i still could not stop playing it. I've now done every side quest and finished it the second time, only to start a third walkthrough. Two effects are working together here: First, the story is absolutely compelling and awesone. And second, it has Achievements, those addicting little "Gotta catch em all!" things that Xbox 360 Games have.

True, it looks stupid playing Mass Effect a third or fourth time just to get some achievements like "Kill 150 Enemies with a Shotgun" or "Use Lift 75 Times", but it also a very welcome excuse to actually try out some more dialogue options. I tend to be the Paragon Guy, so I am usually nice to other people and have a sense of law and morality. But heck, it's just fun to be mean to the council (they to deserve it, to be fair), or to see how Mr. Bhatia reachts if you choose not to help him. Oh yeah, and beating up that reporter, now that's one deeply statisfying reason to be Renegade for sure.

The title of this posting is "hiding rough edges under a shell of awesomeness". The games dialogue and story is this shell of pure awesomeness. No matter if it's Ashley's "They have Flashlights as Heads, ma'am" comment when talking about the Geth, Joker's "That never gets old" if you keep disconnecting the council or pretty much all of Wrex's Dialogue, including "Don't piss in my ear and tell me it's raining", the dialogue is smart, fun, often unexpected in a positive way, and very well voiced, at least in the English version (I did not check any other language version). Combined with fact that there are many different choices at time, it's a pleasure to talk to pretty much anyone and anything in the game and just have a good time listening to what they have to say. (For some more examples of good and fun dialogue, look at this forum post. But warning: it contains major spoilers!)

But then, there are some rough edges. Some of the more obvious are on the technical side: Mass Effect uses a streaming mechanism, which means there are only very few loading times while playing. But the DVD is constantly spinning, which is not a pleasure for the ears, given the loud Xbox 360 DVD Drive. (Even though you might argue that this is just a welcome excuse to turn up the volume of the speech in game). Another side effect is that loading screens are replaced by elevetor rides, which gained some fame on their own. At least during such an elevator ride, your 2 other party members will usually engage in a conversation or something will be played on the elevator radio. Also, the textures pop in at times. Textures are loaded like a progressive JPEG File, i.e. there is first a very low quality version of the texture, and then the high quality texture shows up. Most of the time, you see the high quality textures, but also quite often you see low quality textures and then the better ones pop in. That looks plain ugly. Also, there is slowdown at times, when there are many enemies and effects going on. There is one scene on Noveira in a Lab where the frame rate sometimes drop into the "seconds per frame" region. These technical flaws are very noticable, but luckily, they are not stopping one from enjoying the game. And then there is that bug on the extra "Bring down the Sky" mission, which is also not a show stopper, but leaves a bad feeling in my gut.

The other rough edges are on the gameplay side, namely on the sidequests. Usually, the side quests follow this sheme: Land on an ugly planet, look on your map for 3 to 5 points of interest, drive to them, participate in a little senso-like minigame to survey minerals, recover artifacts or unlock doors, then drive to the main point, kill everything that moves, and move on. Usually, this is accompanied with some nice story bits, which means you may not notice that this does get kind of repetetive, but once you are left with the stupid "Collect X of Y missions" (Recover Asari Writings, Find Minerals, Find Turian Insignias, Find Sings of Battle) you actually do notice it. Dear Bioware, maybe one such mission would have been enough. Also, the leveling curve past Level 53 gets unneccessary steep. Sure, the only reason to level to 60 is to get the "Extreme Power Gamer" Achievement, but really: 200.000 EXP to go from 59 to 60? In my second playthrough with my Character, I did every single side quest, and I still only went from 43 to 58 in that Walkthrough. But well, I made the decission to get all Achievements in that game, so i'll manage to get the missing EXP as well. The last rough edge is - ironically - a major flaw in the story telling: Lack of Empathy. At some point of the game, you have to make 2 decissions, and depending on a number of factors, these decissions are going to have a huge impact on your party. The only problem: No one really seems to care, including you as well. In retrospective, I was suprised that a game with such a neat story would miss out on that point.

The game itself is also rather short if you focus entirely on the main plot, but let's be fair: Who plays a RPG only on the main plot?

Overall, Mass Effect is one of the best games i've played since Knights of the old Republic, because it has so many memorable moments and characters that easily cover up for the technical faults.

I am looking forward to Mass Effect 2, especially since it is developed within Bioware, so I have good hope that flaws like on Knights of the old Republic II (which was developed by Obsidian instead of Bioware) can be avoided.

"Krogan testicles go for 10,000 each... thats 40,000 for a full set!"