Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,124 | Comments: 45,475

filter by tags archive


Patrick Huizinga

At first I thought it would be interpreted as if ( (copiedStream.Length > 1) * Giga)

But then I realized the compiler would give an error (about bools, ints and ifs).

And when I entered the above piece of code in VS, I was quite surprised about the actual error. :)

Lee Atkinson

A VB programmer in a pass life, perhaps?

Martin Larsen

Hehe.. I actually spent 10 minutes staring at that snippet before realising what was wrong. :-)


Same as Martin :-) but takes 15 mins :-D

Peter Morlion

Also had to enter it in VS before I got it. Even then, had to double-check MSDN :D Learnt something new today!


If you take that long to spot the problem, you need to read some C# for dummies books.

Diego Mijelshon

Shodan, if you code in more than one language (I assume you've read C# for dummies, but not VB for morons, nor Haskell for idiots), it's not hard to use the wrong operator.

In that regard, C# is behind other modern languages for not having an exponentiation operator (which could just be an alias for Math.Pow), which is more useful for high-level development than XOR (and they could have used **, which doesn't clash with anything)

Remco Ros

I'm going back to school. . . . ^-^


Isn't this an ugly way to do things regardless - why calculate the value every time? Why not just use const int giga = 1000000000?

Juan Lopes

That's why I prefer the "1e9" notation.

Martin Larsen

Jason, the compiler optimizes away the calculation as it is a const value.

Andrew Skalkin

Two minutes of blankly staring at the snippet and finally the facepalm moment :)

Harry Steinhilber

@Juan, the only problem with the '1e9' notation is that it produces a double. Ayende's constant was an int, so it would require an additional explicit cast. Not terrible, but it does end up messing with readability.


I prefer 1 << 30. It's quite clear (everybody knows 1 << 10 is kilobyte) and I find it clearer because you have 10 for each prefix (10 = kilo, 20 = mega, 30 = giga, etc. - easier for me than 3, 6, 9).


Write the unit tests first, idiots!

TDD in your ass!


@hazzik, You might consider reading: How to Win Friends & Influence People

Unless, of course, you're trying to influence us to consider you in a less than stellar way.



Testing only proves the presence of bugs not their absence.

  • Dijkstra

@Diego, I believe ** would clash with pointer multiplication

Ryan Heath

@configurator minor nitpick, according to the variable name 'giga', the ( intended) value is correct.

1 << 30 == 1 GB (GiB) == 1.073.741.824 bytes.

Just as kilo equals 1000. 1 KB (KiB) equals 1024 bytes.

// Ryan


@Ryan: I couldn't care less. When talking about file size it may be "correct" to consider a gigabyte as 1000000000 bytes, but it is standard to consider a gigabyte as 1073741824 bytes.

Ron Klein

That's why I prefer "complex" consts to have the format of:

int const Kilo = 1000;

int const Mega = 1000 * Kilo;

int const Giga = 1000 * Mega;


@Ryan: Yes, I'm fully aware of that. Like I said, I just don't care. When I'm talking about Gigabytes, I don't care about a 7% difference; sure, I care if something is 100GB or 200GB, but I don't give a rat's ass about that third digit.


Diego, don't take this the wrong way, but if you code in several languages you still need to know them well enough not to make these kinds of mistakes. That being said, we all make mistakes - mine was probably posting a rude comment. I apologise for that.

Comment preview

Comments have been closed on this topic.


  1. The design of RavenDB 4.0: Making Lucene reliable - 8 hours from now
  2. RavenDB 3.5 whirl wind tour: I’ll find who is taking my I/O bandwidth and they SHALL pay - about one day from now
  3. The design of RavenDB 4.0: Physically segregating collections - 2 days from now
  4. RavenDB 3.5 Whirlwind tour: I need to be free to explore my data - 3 days from now
  5. RavenDB 3.5 whirl wind tour: I'll have the 3+1 goodies to go, please - 6 days from now

And 13 more posts are pending...

There are posts all the way to May 30, 2016


  1. RavenDB 3.5 whirl wind tour (14):
    02 May 2016 - You want all the data, you can’t handle all the data
  2. The design of RavenDB 4.0 (13):
    28 Apr 2016 - The implications of the blittable format
  3. Tasks for the new comer (2):
    15 Apr 2016 - Quartz.NET with RavenDB
  4. Code through the looking glass (5):
    18 Mar 2016 - And a linear search to rule them
  5. Find the bug (8):
    29 Feb 2016 - When you can't rely on your own identity
View all series



Main feed Feed Stats
Comments feed   Comments Feed Stats