Ayende @ Rahien

Refunds available at head office

Toys for geeks

I just got myself a UFO Mini Helicopter, it looks like this:

Mini Helicopter UFO Aircraft With Remote Control

This is the first helicopter that I got, and for a 30$ toy, it is an awesome amount of fun. The only complaint that I have is that this has only about 5 minutes of battery life.

I am really bad at flying it, too.

As mentioned, this is the very first helicopter that I bought, and I think that I would like to have a better one for the next time. Any recommendations from you guys?

  • I would like a better battery life. 30 minutes – 1 hour would be what I want.
  • Should be pretty resistant to crashes. I know that I am going to crash it a lot.

Any recommendations?

Elections

So today we had elections, and by tonight you will have a lot of people doing a lot of electoral math.

I don’t like elections, because of an assumption problem. It isn’t linear. This is how we usually portray the choices in elections. You pick a candidate / party that fit where you are on this line.

image

In reality, this isn’t nearly as simple. Mostly because this one line assumes that there is a central idea that is important being anything else. But let us take a few examples:

  • Tax policy
  • Security policy
  • Gay marriage
  • Religion
  • Social justice
  • Climate change

Now, they don’t fit on a single line. Your position on gay marriage doesn’t impact what you want with regards to tax policy, for example. The real scenario is:

Now, usually there is some concentration of ideas, so it is typical that if you give me your idea about gay marriage, I can guess what your ideas about climate change are.

By the way, I am taking gay marriage and climate change as examples that are common in more than a single country.

But that is guessing. And in many cases, people are a lot more complex than that. We are limited to choosing a candidate, but what happens when we have someone who we support on issue X and oppose on issue Y? We have to make tradeoffs.

So you are limited to one vote, and have to choose something on this line. Yes, as a result of that you get commonalities, a lot of people that like position X also like position Y, but not always, and sometimes I find it abhorrent that someone with whom I share the position on X also have an opposed idea on Y.

Businesses that are a joy to work with: Skills Matter

I don’t believe that I ever did this, but I was just completely blown away by Skills Matter.

Please note, I never actually dealt with them as a student, although I got great feedback from the people I taught about them in that capacity. I am talking here solely about dealing with them as a service provider.

I have been working with them since 2008, and we have a great working relationship. I am routinely dealing with many businesses, and almost always you have this… friction. I usually have great rapport with the technical people with whom I work, but then it comes to dealing with other departments, it can be… annoying.

With Skills Matter, not only was it never the case. They go out of their way to make it easy and fun to work for them.  I can’t talk about the “straw that broke the camel’s back” and was the trigger for this post, but I can talk about some other things.

From spreading the word about RavenDB and NHibernate by organising talks with me for the Skills Matter community to helping me with a payment dispute that I had with a hotel (that I reserved, but they took care of all the details of getting my money back and saved me tons of international calls an angst) to being willing and able to accommodate screw ups (oops, I missed the plane) in the most pleasant way possible and all the stuff they do for the developer community.

In my time working with them, I found them to be honest, hardworking, professional, ethical and in general Very Good People.

Published at

Originally posted at

Comments (4)

Strange production errors

The following code cause a really strange error in production:

new MailAddress("test@gmail.​com");

The specified string is not in the form required for an e-mail address.

Huh?!

Obviously it is!

After immediately leaping to the conclusion that .NET is crap and I should immediately start writing my own virtual machine, I decided to dig a little deeper:

Character Code
t 116
e 101
s 115
t 116
@ 64
g 103
m 109
a 97
i 105
l 108
. 46
? 8203
c 99
o 111
m 109

8203 stands for U+200B or zero width space.

I guess that someone with a software testing background decided to get medieval on one of our systems.

Published at

Originally posted at

Comments (7)

I am turning 0x1E tomorrow

In hex, I am still a teenager Smile.

To celebrate that, starting from the 20 Dec all the way to the new year, I decided to offer a 30% discount on all the profilers. All you need to do is to use the following coupon code:

01E-45K2D46V6K

The offer is valid for:

Published at

Originally posted at

Comments (9)

The customer is always right?

When you get this sort of an email, you almost always know that this is going to be bad:

image

Let us start with: Which product? What license key? What order? What do you expect me to do about it?

At least he is polite.

image

image

Hm, I wonder what is going on in here…

This error can occur because of a trial that has expired or a subscription that has not been renewed.

image

image

He attached a Trial licensed to this email.

image

image

It is like a Greek tragedy, you know that at some point this is going to arrive at the scene.

image

I mean, we explicitly added the notion of subscriptions to handle just such cases, of people who want to use the profiler just for a few days and don’t want to pay the full version price. And you can cancel that at any time, incurring no additional charges.

image

Sigh…

All the Rhinos in the World, Unite!

Update: You can see all the photos here

Well, I might have gone a bit overboard, but I do like Rhinos.

RhinosUnited

Say hello to my crash of rhinos.

And here is a nice family of them:

RhinosFamily

I don’t get this way very often, but AWESOME!

Entering to the office…

WP_000312

WP_000316

And just to give you some perspective:

WP_000310

The Big Event is just a week away

I am getting married on the 29th May, which is just a week away. You may notice a decline in the number of posts to this blog (and general activity for work related stuff) around that time frame.

For quite some time, I had to… endure certain types of jokes about what would happen when I would get married. Given the choice between my own happiness and the desires of some members of the development community to see me in a dark room eating pizza and working at all hours, I know what I would take… Smile

Never the less, as a consolation prize to those people, and as a way to spread my happiness, the following coupon code with give you 29% discount for all the profilers (NH Prof, EF Prof, L2S Prof, LLBLGen Prof, Hibernate Prof): WDG-45K2D467C5

The coupon works for single license purchases, and it is only valid until the 1st of June.

More on the joy of support: My trial expired!

I got the following very interesting email:

image

You might have noticed that I have kept the email address of the sender public. That is an important clue.

The email was sent from a public email gateway, one of those places where you have a disposable email address.

I suspect that there isn’t actually a bug, but that the system is working as planned Smile

And there is this complaint:

image

Executing TortoiseGit from the command line

Originally posted at 1/6/2011

I love git, but as much as I like the command line, there are some things that are ever so much simple with a UI. Most specifically, due to my long years of using TortoiseSVN, I am very much used to the way TortoiseGit is working.

I still work from the command line a lot, and I found myself wanting to execute various actions on the UI from the command line. Luckily, it is very easy to do so with TortoiseGit. I simply wrote the following script (tgit.ps1):

param($cmd)
& "C:\Program Files\TortoiseGit\bin\TortoiseProc.exe" /command:$cmd /path:.

And now I can execute the following from the command line:

tgit log

tgit commit

And get the nice UI.

Please note that I am posting this mostly because I want to be able to look it up afterward. I am sure your git tools are superior to mine, but I like the way I am doing things, and am reluctant to change.

Published at

Originally posted at

Comments (6)

Google vs. Bing

I was trying to find my office in Google’s Maps:

image

And then I tried Bing’s Maps:

image

Dear Microsoft, there is a good reason why you are less successful than Google…

Enough is enough: iTunes got to go

Here is the story, the only reason that I am using iTunes is because I want to sync books that I buy from audible.com to my iPhone.

I am still fighting this problem. And I have installed / uninstalled, danced the mamba and even try some chicken sacrifice on the last full moon. Nothing helps, oh, it will works once, immediately after I install it, but on the next reboot, it will show the same error.

Right now I have uninstalled iTunes from my system, and I am currently building a VM specifically so I would be able to sync new audiobooks to my iPhones. I think that this is insane.

Anyone got a better option than that?

Unstable

Originally posted at 10/20/2010

Currently…

  • RavenDB has an unstable fork
  • Which has an unstable branch (too unstable to be the master branch of the unstable fork!)

And then there is what I am working on locally…

I hate making big changes.

Published at

Originally posted at

Comments (9)

The other side of chasing the money

When I started doing my own consulting, I realized that sometimes I would have to chase after a client in order to get paid. Luckily, it hasn’t happened often.

I did not expect the reverse to happen, but it did. I just had to send the following formal notice to someone who does work for me:

Hi guys!
I am pretty sure that I owe you money. Would you mind terribly if I paid you?

And yes, this post is here to serve as a kick to the people in question.

How far can you push commercialization?

I was recently at a private company event (not my company, I was invited, along with others, because we have a close association to that company). The event itself wasn’t notable, but there was one thing that really bothered me, before the event actually started, there was the usual phase when everyone is munching on the snacks and mingling. The food was some sort of green cupcakes with inspirational messages on them: “think positive”, “fitting the world to you”, etc.

All in all, I found that somewhat strange, but I didn’t really care, but I was talking with a few friends when a woman walked up to us and started handing out coupons for some free demo courses using a whole new technique, etc. I was quite taken aback. I am used to stuff like that on conferences floors, where you have booth babes doing stuff like that, but that was a private meeting of less than fifty people, and I couldn’t understand what was going on.

It helped that the woman kept dropping the same phrases that appeared on the cupcakes. That was later confirmed at the beginning of the meeting, where the presenter stood up and started by thanking the sponsors for bringing the food, etc.

Looking back at this, I am both appalled, amazed and utterly unsurprised (you can be both at the same time, it seems). That company actually sold sponsorship for an internal, private, meeting. I don’t really know what was the point, if they were trying to save money on the food or they were actually making money out of this, but that behavior really bother me.

I am absolutely for commercialization, if only because the bank would otherwise object, but I was utterly stunned by how crass it was.

What is next? Hiring employees for the express purpose of watching commercials while the company is getting paid for that?

More to the point, there is some expectation about how such functions are going to be, and stunts like that are leaving very bad impression.

Published at

Originally posted at

Comments (6)

I ain’t going against my professional judgment pro bono

I had an interesting conversation with a guy about some problem he was having. This was just one of those “out of the blues” contacts that happen, when someone contact me to ask a question. He presented a problem that I see all too often, trying to create a system in which the entities are doing everything, and he run into problems with that (to be fair, he run into a unique set of problems with that). I gave him a list of blog posts are articles to read, suggesting the right path to go. After a few days, he replied with:

I went over your advised reading in depth, but let me describe in short the properties and functions of our system, which I think causes the system to be an exception to those methods.

He then proceed to outlay his problem, a proposed solution and then asked a very specific NHibernate question that was a blocking stumbling block to get ahead with the solution he wanted. My reply was that he took the wrong approach, a suggestion how to resolve it in a different manner and a link to our NHibernate Commercial Support option.

Contrasting UberProf & RavenDB from business perspective

I was recently asked to contrast the business decisions related to the profiler and RavenDB. I thought that it would make an excellent post.

There are a lot of aspects to thing about here, actually. The profiler is an add on tool, it is only useful if you are using one of the supported OR/Ms, but if you do… it:

  • has very low barrier to entry, you need to reference the dll and add a single line of code.
  • provides immediate value, you can see the benefits that it gives you.
  • have very few moving parts that users can break.

NH Prof was released on Jan 1st, 2009. The first sale happened on Jan 2nd, 2009 (thanks Yann!).

The lead time for the profiler tends to be very short. Because there is very little that you need to invest and there is a lot that you gain. Yesterday I introduced a guy to the profiler as a way to help him see what his app is doing, he made a purchase about an hour later.

That is excellent news from my point of view. :-)

RavenDB, on the other hand:

  • has a very high barrier to entry, not so much from technical perspective, but from adoption one.
  • requires you to make significant changes to the way you work.
  • takes time to show why it is beneficial.
  • requires payment only when you actually goes live.
  • requires much higher degree of support for users.

That means that while it takes a few minutes to decide if you want the profiler (and the rest of the 30 days trial is spent getting corporate approving it :-) ), for RavenDB the lead time until you pull out your credit card is much longer.

That has some interesting implications. I actually spent a lot more (time & money) in the profiler than I spent (outright) on RavenDB. But the major difference is what type of investment that would be.

There is a term in economics called sunk cost, that is all the costs associated with building a product up to the point you released it. That is money already spent. But what usually matter a lot more is that once you reached the release point, can the cash flow from a product justify the continued work on the product ( and maybe, at some point, pay for the product development) ?

NH Prof was a big investment for me, but money started coming in shortly afterward, and it became apparent that it was sustainable product. For RavenDB, the costs have actually been a lot lower (since the majority of them represented my own time), but the expectation is that it would take about a year or two before it would be be possible to say if RavenDB is a sustainable product.

In that sense, RavenDB represent a lot riskier investment. If RavenDB wasn’t rattling in my head for so long, I would have probably would have gone to something with much shorter lead time.

It is interesting to me to see how many factors there are in those sort of decisions.  So many things to balance.