Ayende @ Rahien

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

ayende@ayende.com

+972 52-548-6969

@

Posts: 5,947 | Comments: 44,543

filter by tags archive

Great UI kit


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


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


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
 
 

Lambada in C#


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


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


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

No future posts left, oh my!

RECENT SERIES

  1. RavenDB Sharding (3):
    22 May 2015 - Adding a new shard to an existing cluster, splitting the shard
  2. The RavenDB Comic Strip (2):
    20 May 2015 - Part II – a team in trouble!
  3. Challenge (45):
    28 Apr 2015 - What is the meaning of this change?
  4. Interview question (2):
    30 Mar 2015 - fix the index
  5. Excerpts from the RavenDB Performance team report (20):
    20 Feb 2015 - Optimizing Compare – The circle of life (a post-mortem)
View all series

RECENT COMMENTS

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats