Ayende @ Rahien

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

ayende@ayende.com

+972 52-548-6969

, @ Q c

Posts: 10 | Comments: 37

filter by tags archive

Great UI kit

time to read 1 min | 158 words

What do you look for when you are seeing new software on the web?

Me, I read what it does, and then I take a look at a screen shot (if available, and it'd better be). A polished UI doesn't neccecarily means a polished application, but it helps :-)

It's much nicer to work on a good looking interface than on plain one, and the amount of work invested on the UI is usually 100% user-visible, while that bug that happen only on 2:00AM every third wendsday usually isn't.

That was why I was so happy to find the DockPanel Suite1 by Weifen Luo. It is very nice, and the demo application does a very good imatation of VS.Net, so I'm very excited to try it out.

1 For such a snappy UI, it sure has a plain web page :-)

Simple things aren't

time to read 1 min | 131 words

What he's doing there might give you nightmares.

Raymond Chen blogs about the simple act of getting the size of a directory, not so simple after all, if you take into account all sorts of obscure stuff like reprase points, hard links, sparse files, compressed files and file streams.

It remind me an article about file copying by Joel from some time ago.

"CCITT" -- Can't Conceive Intelligent Thoughts Today

"Yes, it's tough, but not as tough as doing comedy." -- Final words of Edmund Gwenn, actor, d. September 6, 1959 (When asked if he thought dying was tough.)

[Listening to: Sealed with A Kiss - Agnetha Faltskog - My Colouring Book(02:35)]

Favoraite song

time to read 1 min | 131 words

I'm on vacation and I'm currently hearing my favoraite song, and the volume is so loud that I can feel it in my bones.
Life is good... :-)

[Listening to: 17 - The Show Must Go On - Queen - Classic Queen(04:12)]
 
Update: Just as I was going to post this I got a phone from work about some problem there. My one wish for the new year? Abolish mobile phones! (Except for my girlfriend, of course).
 
"What is the Origin of 'Foo': Of course, it also comes from the same WWII genesis as SNAFU." -- Tech Support Slogan
 
"Great spirits have always encountered violent opposition from mediocre minds." -- Albert Einstein
 
 

Words to write code by...

time to read 1 min | 95 words

Adam Bosworth write about a talk he gave in ICSOC04.

The subject? Keep It Simple, Stupid!

"The engineering is hard, but the user model is simple and sloppy."

"A moving object appears to shrink in the direction of motion as seend by a stationary observer." -- Albert Einstein

"If it was easy, the hardware people would take care of it." -- Tech Support Slogan

[Listening to: Linda Ronstadt - Heat Wave - - (02:46)]

Lambada in C#

time to read 9 min | 1626 words

Sriram Krishnan attempts to create lambada in C#, and James Robertson sneers at the attempt.
Peronally, I don't understand why she took the string approach even if she wanted to remain general. Delegates are perfectly possible to move a delegate around in a type-safe manner.

Here is a possible solution1, it works for both static and instance methods.

     1: using System;
     2: using System.Collections;
     3:  
     4: namespace Lambada
     5: {
     6:     class Mai2n
     7:     {
     8:         private static string[] words = {"dog","cat","mink"};
     9:         delegate void StringDelegate(string args);
    10:         delegate string RetStringDelegate(string args);
    11:         delegate void IntegerDelegate(int i);
    12:  
    13:         private static void PrintInt(int i)
    14:         {
    15:             Console.WriteLine("Integer: " +i);
    16:         }
    17:  
    18:         private static void PrintStr(string str)
    19:         {
    20:             Console.WriteLine(str);
    21:         }
    22:  
    23:         private static string Capitalize(string str)
    24:         {
    25:             if(!Char.IsUpper(str,0))
    26:                 str = Char.ToUpper(str[0])+str.Substring(1);
    27:             return str;
    28:         }
    29:  
    30:         private int multiplyBy;
    31:         public void Multiply(int i)
    32:         {
    33:             Console.WriteLine("Multiply by "
+ multiplyBy +": " + i*multiplyBy);
    34:         }
    35:  
    36:         public static void Main(string[] args)
    37:         {
    38:             Mai2n m = new Mai2n();
    39:             m.multiplyBy = 2;
    40:             Map(new StringDelegate(PrintStr),words);
    41:             Map(new IntegerDelegate(PrintInt),new int[]
{1,3,5,7,11,13});
    42:             Map(new StringDelegate(PrintStr),
    43:                 ReturningMap(new RetStringDelegate(Capitalize)
                         ,words));
    44:             Map(new IntegerDelegate(m.Multiply),new int[]
                             {2,4,6,8,10});
    45:         }
    46:  
    47:         public static void Map(Delegate d, IList list)
    48:         {
    49:             foreach (object o in list)
    50:             {
    51:                 d.DynamicInvoke(new object[]{o});
    52:             }
    53:         }
    54:  
    55:         public static IList ReturningMap(Delegate d, IList list)
    56:         {
    57:             ArrayList al = new ArrayList(list.Count);
    58:             object ret;
    59:             foreach(object o in list)
    60:             {
    61:                 ret = d.DynamicInvoke(new object[]{o});
    62:                 if(ret!=null)
    63:                     al.Add(ret);
    64:             }
    65:             return al;
    66:         }
    67:     }
    68: }

Here is the output of the above program:

dog
cat
mink
Integer: 1
Integer: 3
Integer: 5
Integer: 7
Integer: 11
Integer: 13
Dog
Cat
Mink
Multiply by 2: 4
Multiply by 2: 8
Multiply by 2: 12
Multiply by 2: 16
Multiply by 2: 20

 

1 Possible restrictions about no error checking, validation etc apply :-)

 

"A coat hanger is 44 inches long when straightened." -- Fact of lifes

"Quality assurance: A way to ensure you never deliver shoddy goods accidentally." -- Tech Support Slogan

"If you yelled for 8 years, 7 months and 6 days, you would have produced enough sound energy to heat one cup of coffee." -- Fact of lifes

[Listening to: Better Than Ezra - One More Murder - - (04:39)]

Long bets - Israel & the Palestinians

time to read 2 min | 318 words

Brad Abrams asks about a site for long bets, and get an answer in a comment that the site is call Longbets.org.

The curious thing about it that I run a cursory search and, naturally, there is a long running bet for a peace between Israel and the Palestinians because of some improvements in water technologies (didn't investigate the spesific technology).

Registerring isn't free, so I answer this arguement here:

The reasons for Israel & the Palestinians conflict1 are much deeper than water conflict. The issue is deeply embedded within the culture of both people. The conflict is about land, and religion, a way of life and a culture. We live within two steps of one another, but we are very different.

To think that solving the water supply would end the conflict is to be hopelessly naive.

My bet?
There will be no resolution2 to the Israel - Palestinians conflict in the next five years3.

1 I'm using very neutral language here.

2 Resolution defined as:

  • Israel formally acknowledge a Palestinian state.
  • Israel trasfer full responsability for the internal affairs of this Palestinian state, including in security matters.
  • The Palestinians formally renounce the Right to Return
  • The Palestinians stop the propoganda against Israel in all goverment controled media and in the schools.

3 By God, I so hope that I'll have to swallow those words.

The one reason I want .Net 2.0 now

time to read 1 min | 139 words

It's not generics, and it's not SQL Server Express, or anonymous delegates.

It's VS.Net 2005 ability to show me the content of unhandled exceptions that while debugging. VS.Net 2003 just show me an ugly dialog, with 2K5, I can check what the problem is, and in 99% it's just one second change.

I'm currently exploring NHibernate and I'm getting a lot of those exceptions, and it's annoying to stop debuggin, put try/catch blocks, read the exception message, explore inner exceptions and then make a single change, and then it works.

It makes a short task much longer than neccecary. Anyone knows about an add-in for VS 2K3 that does this? I would move to VS 2K5, but it doesn't support Resharper, and I'm addicted to it.

FUTURE POSTS

  1. Production postmortem: The case of the memory eater and high load - one day from now
  2. Production postmortem: The case of the lying configuration file - about one day from now
  3. Production postmortem: The industry at large - 3 days from now
  4. The insidious cost of allocations - 4 days from now
  5. Find the bug: The concurrent memory buster - 5 days from now

And 4 more posts are pending...

There are posts all the way to Sep 10, 2015

RECENT SERIES

  1. Find the bug (5):
    20 Apr 2011 - Why do I get a Null Reference Exception?
  2. Production postmortem (10):
    14 Aug 2015 - The case of the man in the middle
  3. What is new in RavenDB 3.5 (7):
    12 Aug 2015 - Monitoring support
  4. Career planning (6):
    24 Jul 2015 - The immortal choices aren't
View all series

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats