An small mistake, just by nine orders of magnitude previous: Looking at the RavenDB structure next: Case Study: the first RavenDB’s production deployment story Originally posted at 3/16/2011 Opps Comments 03/28/2011 10:40 AM by 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. :) 03/28/2011 11:31 AM by Lee Atkinson A VB programmer in a pass life, perhaps? 03/28/2011 11:44 AM by Martin Larsen Hehe.. I actually spent 10 minutes staring at that snippet before realising what was wrong. :-) 03/28/2011 12:09 PM by Ales Same as Martin :-) but takes 15 mins :-D 03/28/2011 12:18 PM by 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! 03/28/2011 12:34 PM by SHODAN If you take that long to spot the problem, you need to read some C# for dummies books. 03/28/2011 01:45 PM by 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) 03/28/2011 01:57 PM by Remco Ros I'm going back to school. . . . ^-^ 03/28/2011 02:35 PM by Jason Isn't this an ugly way to do things regardless - why calculate the value every time? Why not just use const int giga = 1000000000? 03/28/2011 02:51 PM by Juan Lopes That's why I prefer the "1e9" notation. 03/28/2011 02:54 PM by Martin Larsen Jason, the compiler optimizes away the calculation as it is a const value. 03/28/2011 03:21 PM by Andrew Skalkin Two minutes of blankly staring at the snippet and finally the facepalm moment :) 03/28/2011 05:29 PM by Christopher Bennage Ha! I totally would have made that mistake. :-P 03/28/2011 05:30 PM by Christopher Bennage @Jason - readability 03/28/2011 06:25 PM by 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. 03/28/2011 08:40 PM by configurator 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). 03/28/2011 09:14 PM by hazzik Write the unit tests first, idiots! TDD in your ass! 03/28/2011 10:11 PM by Brian @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. 03/29/2011 05:20 AM by James @hazzik Testing only proves the presence of bugs not their absence. Dijkstra 03/29/2011 09:58 AM by Louis Haußknecht +1 for @configurator. 03/29/2011 10:38 AM by Manu @Diego, I believe ** would clash with pointer multiplication 03/29/2011 10:40 AM by Ryan Heath @configurator minor nitpick, according to the variable name 'giga', the ( intended) value 1.000.000.000 is correct. 1 << 30 == 1 GB (GiB) == 1.073.741.824 bytes. Just as kilo equals 1000. 1 KB (KiB) equals 1024 bytes. // Ryan 03/29/2011 11:00 AM by configurator @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. 03/29/2011 11:43 AM by 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; 03/29/2011 02:20 PM by Ryan Heath @configurator tell that to drive manufacturers :) They usually advertise the base 10 value compreviews.about.com/.../ActualHDSizes.htm // Ryan 03/30/2011 01:39 PM by configurator @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. 04/06/2011 10:32 AM by SHODAN 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. Comments have been closed on this topic.