Tigraine
Daniel Hoelbling talks about .NET

The dark side strikes again!

April 22nd, 2010 . by Daniel Hölbling

image

Oh, Microsoft took it’s sweet time with Visual Studio 2010 and C#4 but now that it’s finally here I had to find out that the Vibrant Ink theme I’ve been using for years now needs an update to match new stuff in the language.

Thank god I did a quick search to see if someone already did that, and I stumbled on a pretty cool little website: studiostyles.info
A website dedicated to Visual Studio Themes, apparently written in ASP.NET MVC it allows users to create styles with a pretty simple editor and then share it with the world. They also added voting and some community stuff to it, but even if it was only a user-generated theme gallery for VS I’d love it. Cool stuff.

Anyway, Luke Sampson (the creator of studiostyles.info) updated Rob’s Vibrant Ink theme for VS2010 and shared it through studiostyles. Thanks a lot.

You can find it here: http://studiostyles.info/schemes/wekeroad-ink


Wasted innovation: Google Wave

October 31st, 2009 . by Daniel Hölbling

wavelogo[1]

It was pretty inevitable that Google Wave would fail after being hailed as the solution to all our problems. Still, looking at a defeat gives me a feeling of malicious joy.

Let’s start at the beginning: I got my invite almost 3 weeks ago, and after an initial: wow cool. I found out that nobody I care about had Wave.

After another week or so I finally got 20 invites to give out (if you want one send me an email, I’ve got 13 left) and finally managed to get the most important people I communicate to into Wave.

And, we had a lot of fun watching each other’s cursor spit out text live on the screen. Unfortunately, that was the only thing we found useful, and it was only funny for about 20 minutes. After that, we went back to our lives and that’s it. I’m still waiting for a reply to a Wave I sent Kristof almost 2 weeks ago.

So, what’s the problem? Wave technology is revolutionary, the idea is just not. It’s at heart:

Awesome technology looking for a problem to solve

Wave fails in most/all of it’s goals:

Replace Email: Ok, so Email is everywhere and it works (thanks to GMail). I get mails pushed to my Android phone, and all in all: It does everything I want flawlessly and most importantly: EVERYWHERE.
Wave on the other hand: Only inside my browser, no notification tool whatsoever. Pretty much equally useless as Facebook Messaging.

Replace Chat: Instant typing is funny, but using the tool for IM just does not cut it usability wise. Live and Skype are great at that too, and even ICQ had that instant typing thing going some versions back (nobody wanted it). Wave once again misses all the major points here: No mobile client, no notifications, no desktop client.

Replace Message Boards: Try running a public community off Wave: It’s impossible. Since you have to add people to the wave one by one, there is no way to spawn a new thread unless your community is really really small. Public viewing (the main purpose of most messaging boards) is impossible, thus the whole thing is not suited to replace a message board.

Replace Wiki: Again, who cares about a wiki if it’s not publicly available? I know really few people who have a wiki for <5 people, and even those few won’t care for Wave’s wacky and really laggy Playback feature.

Be a collaboration tool: Well, Wave does that pretty well. Only that I don’t really see any online collaboration happening anytime soon, since most people are just too used to sending Word documents or Excel sheets around, they won’t dumb down to using a Wave just because they see each other’s cursors.

Well, and that’s about it. Wave tries to do a thousand things, and succeeds at not one of them. It’s totally useless without having any sort of desktop integration and mobile device integration. And once it has all of that, I still see myself sending more “Hey check your wave” emails than receiving a answer through wave.

What I want now? I want Google to use the awesome technology they created with Wave and bring it over to GMail. I want to be able to drag&drop files to my GMail and have them be attached to my mails. I want this incredible spellchecker inside GMail and I want it now. That’s all. I don’t care for your revolutionary shiny thingy that does everything but nothing.


The paging antipattern

September 7th, 2009 . by Daniel Hölbling

Wherever you look on the internet, everywhere you’ll see pagination. This is especially important in web shop scenarios where you don’t want to overwhelm your user.

Usually you just take these things for granted and use them to navigate around, until you discover a gem of bad design like this one on the German bookstore Thalia:

image

This is a 1:1 screenshot, no scaling from the original. And as usual: the one < will take you to the previous page, the << will take you to the very first page.

Now, let’s consider these options that are only 3 pixels apart from each other: First page, previous (thus page 4), page 1.
Let’s just assume that unless you are really careful with you mouse you’re looking at a 2/3 chance of finding yourself on page number 1 instead of 4!

Instead of trying to home in on that tiny next button I found myself using the numbers to get to the next page, totally ridiculous.

Upon getting frustrated by this particular eBook store I decided to take a look at the other major players and their pagination solutions.

Amazon:

image

I just measured a distance of over 40 pixels between the 3 and the Next button. And even on a search where with less than 3 pages they keep a distance of at least 20 pixels between Next and 3. Also important that Next is always last and Previous is first. No First and Last button anywhere to be found.

Google:

image

Again, hitboxes for Previous and Next are enormous while completely lacking First and Last.

Ebay:

image

Bing:

image

 

Conclusion: Nobody uses these  Last and First any more. Get over it and leave them out! Why should anyone want to go to the last page of a listing that is probably already sorted by relevancy?

Instead use the space for huge Previous and Next buttons that are far away from any other navigational controls. At any rate, never ever use those <> Symbols alone as you means to navigate, always provide a big enough hitbox to avoid frustration.


NDC 2009 Videos online

August 31st, 2009 . by Daniel Hölbling

The Norwegian Developer Conference is over for quite some time now, and by looking at their speaker line-up it’s quite clear that I would have loved to be there.

Good for me that they videotaped all talks and decided to share them with the general public.

So, if you are interested in seeing Ayende, Michael Feathers, Scott Hanselman, Jeremy D. Miller, Phil Haack or Udi Dahan doing their talks, you can either stream them online, or you can go ahead and download a 30GB torrent with all of their talks.

The videos are online on the official conference page, or if you prefer a per-speaker listing:
Mark Nijhof has a list of all NDC videos for your streaming pleasure and Rune Grothaug has the torrent.

(Please keep seeding the torrent for a bit after your download has finished)


Help! My provider hijacks my DNS requests!

June 26th, 2009 . by Daniel Hölbling

Today I followed a link to a no longer active domain and suddenly found myself on UPC’s (my provider) search looking for that URL:

image

My first reflex was to check if my default search provider may be set wrong:

image

Woot? No, my search provider is Google. I just queried a DNS record that does not exist, and I got a result back instead of a DNS error. Now, imagine my head going red and some danger lights starting to flash.

First test I did to confirm my suspicions: open a raw putty connection on port 80 to some random DNS I know doesn’t exist:

image

Then I just did a basic HTTP GET request from my console to see what the server would return:

image

Ok, so what just happened here? First of all, there should be no web server to accept my connection! Hell, I shouldn’t even be able to resolve to an IP address!

So, running a quick nslookup turned up something interesting:

nslookup www.lksdafklsdlkfdsf.com
Server:  viedns09.chello.at
Address:  195.34.133.21

Apparently, UPC is abusing the trust I place in them (by using their DNS server) and resolves ALL requests that can’t be resolved (don’t exist) to their own server that will redirect all HTTP traffic with a 302 status code to their search service.

Now, why is this bad? Isn’t search something I like when mistyping a URL?

Oh, it’s bad I promise you. It’s bad for many different reasons:

  1. All browsers will search anyway if a URL can’t be resolved
  2. My browser thinks the bad domain name actually exists
  3. UPC search sucks
  4. I can’t do anything about it short for changing my DNS server

I do set that search provider inside my browser quite consciously, and I do that for a reason. Google knows my preferences, Google has a search history I use quite often, Google is set to US so it won’t sort German results to the top of the list. And most important: Google has a cached version of almost every page on the interwebz so even expired sites can be looked at with Google.

So, whenever UPC is hijacking my bad DNS request to redirect me to their stupid little search, they take away my freedom of choice and force me (and all users of Chello/Inode in Austria) to override my browsers default behavior in favor of an inferior solution so they generate more search volume on their stupid service!

Only Solution: Pick another DNS. There are plenty of DNS servers out there that will gladly satisfy requests, only drawback is that they aren’t located in my provider’s subnet and therefore won’t be as fast as the one I used before.

This is just sad. Very very sad.


Twitter passes 2,147,483,647 tweets

June 14th, 2009 . by Daniel Hölbling

I guess this screen will look really odd to non-programmers using the awesome Twitter client blu:

image

The text in the box says:

The value for a Int32 was too big or too small.

Any programmer knows this can only mean: Twitter just surpassed the boundaries of a 32 bit signed integer with their Tweed ids and has rendered a number of Twitter clients useless without an update.

Oh, and we all knew this is coming, thanks to http://www.twitpocalypse.com/


How to loose any credibility

March 2nd, 2009 . by Daniel Hölbling

I just listened to Stackoverflow.com Podcast #39 and am completely shocked.

I really like the podcast, I really like Jeff and Joel talk casually about stuff, but when Joel today talked about the SOLID principles (again), I almost screamed.

There were discussions throughout the community when Jeff and Joel said before on podcast #38:

Last week I was listening to a podcast on Hanselminutes, with Robert Martin talking about the SOLID principles. (That’s a real easy-to-Google term!) It’s object-oriented design, and they’re calling it agile design, which it really, really isn’t. It’s principles for how to design your classes, and how they should work. And, when I was listening to them, they all sounded to me like extremely bureaucratic programming that came from the mind of somebody that has not written a lot of code, frankly.

(quoted from the transcript wiki)

Especially the last line coming from a business guy like Joel to a programmer like Robert C. Martin (the topmost book in my drawer here at work bears his name!) just seemed incredibly silly and plain ignorant.
But, I didn’t blog about it since everyone else did (even Uncle Bob)

I also thought that Rob Conery had a very good post (although too amicable in tone towards Jeff&Joel) about the whole thing and I really couldn’t add anything to it besides my personal feeling that Joel & Jeff were way off track and judged about stuff they don’t have any authority to judge over. Not knowing stuff doesn’t enable you to criticize it.

So, now this time Joel Spolsky ruined any credibility he ever had in the field of writing software when he came up with an example of a method that should not be tested because it’s too hard to write a test for it.

The whole is an example from Copilot, a VNC thingy FogCreek is selling:

I need to write a function that’s basically a little button on a toolbar that is going to reduce the JPEG compression.
[snip] So imagine how much code you’ll need to write to change a parameter on your JPEG compression library from a 37 to a 10 lets say. Right? And that’s all it’s gonna do, so this is 5, 10, 20 lines of code to implement this feature, let’s say.
But to implement the test, once you have to somehow create a JPEG that is the same as this other JPEG that you have, but compressed at a different level.
And there is no way to actually construct this test in advance, other than actually running it, or if you did, it would be extremely hard. It would take lot of work to write a test that connects to another machine…

He then goes off to talk about having the test run over two different machines (one probably emulated for the test), talking about different versions of the JPEG compression library etc etc etc.

I couldn’t think of a more stupid thing to do. Nothing, never, ever.
Here is the whole test it would need to test the feature (the button that changes the compression rate)

[Fact]
public void Test()
{
    SetCompressionRate(37);
    Assert.Equal(37, jpgCompressionLib.CompressionRate);
}

Anything more than that, is an integration test and I’m no longer testing the feature, but the JPG Compression library and it’s ability to adapt to the new compression rate.

Anything besides verifying that the compression rate gets successfully set on the library runs out of scope of a unit test, and is no unit test.

And that’s basically it. This one innocent example meant to prove his point just dug the whole deeper. So far as for me it has become clear that Joel Spolsky has no credibility whatsoever left over in the field of software development.

Oh, and by the way. You really should listen to that podcast, it gets even better when Joel continues to make an ass of himself when he starts to bash on PHP as being a poorly designed ripoff of VBscript, that language features in .NET 3.5 have advanced programming far more than these object oriented design principles, etc.

Oh and by the way: I’m always open to discussion so feel free to leave a comment if you think I am wrong here.


Google Reader Feature Request: Don’t mark feed as new

February 13th, 2009 . by Daniel Hölbling

I’ve been using Google reader for a very very long time now, and it’s besides Gmail one of the most important tools out there for me to stay informed. I don’t read newspapers, I don’t read blogs directly, I only stop once in Gmail and once in Reader.

The only thing I really consider “missing” from Reader is some way to declare a rule that Reader should never mark a feed as “unread”.

Why? Simple: Many online newspapers and sites give out full-text feeds and I subscribe to them to occasionally read some articles.
But, in case of sites like Engadget or Gizmondo, there is no way you can keep up with 30+ posts per day and still do work in between reading. So, my “News” folder in Reader grows pretty fast to 1000+ unread items and I have to go in and mark them all as read every now an then.

I consider those feeds as a constant stream of information, so I don’t want Reader to track their read/unread status. If I’ve got free time I go in there to see what’s going on right now, while most of the time I simply ignore those feeds.

What do you think is missing from Google Reader?


When Amazon became Ebay

December 8th, 2008 . by Daniel Hölbling

There are many things I love about Amazon: free shipping, recommendations, customer reviews, good product pictures, awesome website, gift lists. I could go on and on, all those things make Amazon the #1 shopping site on the internet, and I love buying my stuff there. They offer free shipping on everything above 20€ and all books ship for free too. So, whatever you buy, you never think about shipping, you never think about returns or anything. You always know, there’s this big-ass company called Amazon that takes customer satisfaction etc pretty serious and will not cause you any troubles on returns etc. They always ship on time and they have almost everything.

Now, Amazon decided some time ago that “almost” everything isn’t enough and they went to really everything.
They opened the Amazon platform up through a program called Marketplace, where other vendors can sell their products through the Amazon.com website. And man do I hate that feature!
I never went to Amazon because they had everything, I went there because they had almost everything completely hassle-free.
Now, when I am searching for something I end up at 3rd party vendors 90% of the time (feels like Amazon stopped selling themselves almost) that have different shipping policies (almost nobody offers free shipping except for Amazon) and different return policies. Hell, I’ve seen 1-man-shops surface on Amazon that didn’t even have a rightful email address (listing a hotmail address in your company profile does NOT generate trust!).

Last week I decided to order a Canon EOS 450D DSLR and went to Amazon to shop for accessories  like memory, batteries etc.
Guess what? It took me almost 30 clicks to get to a product that was offered by Amazon! When searching for a SanDisk SDHC Extreme III 8gb card I found it 4 times, from 4 different 3rd party vendors but not from Amazon.
I gave up after 30 minutes of searching and ordered another SD card, completely pissed and very unsatisfied. And there is no way to turn the marketplace off, there is a filter that lets you select vendors but apparently this isn’t working when selecting Amazon (you still end up with a listing of 3rd party vendor sold products, yikes!).

The best thing is: Apparently Amazon is selling the SanDisk SDHC Extreme III 8gb card, I just couldn’t find it last week but did so now.

So why did Amazon destroy one of the most pleasant buying experiences of all time? I go to Amazon to buy their products, not to buy some other guys products he is selling from his basement, getting charged shipping costs and not knowing how returns or reclamations are going to be handled! Are those people insane? If I’d be into that kind of things I would be shopping at Ebay not at a respected and well trusted Amazon!

I can only hope Amazon will change their mind on this and create some “Amazon products only” button, so I can enjoy shopping again. Now it’s more a quest to filter 30 products for their vendor.


The deprecated target attribute and jQuery

September 24th, 2008 . by Daniel Hölbling

It’s usually not considered polite to open new windows whenever somebody clicks one of your external links. Those back and forward buttons are there for a reason, so I strongly encourage people to avoid opening new windows.

But, we all know customers. They get this "but I want this" look the second they discover that users may leave their web site too early (can’t say how much this attitude sucks..).

One popular way to do this is to use jQuery to open all external links on your page in a popup (making code that obviously violates the "don’t open new windows" rule still validate).

$(document).ready(function() {
    $("a[rel='external']").click(function(event) {
        window.open($(this).attr("href"));
        event.preventDefault();
    });
});

Now all you have to do is, add a rel="external" attribute to all outgoing links, and this little jQuery function will take care of making them popup.

Still, this is bad. It contradicts the whole idea why they removed the target attribute in the first place, so consider this as a quick’n'dirty hack to satisfy stupid customers.


« Previous Entries