Legos for the iPad Generation

Bloomberg:

littleBits Founder Ayah Bdeir discusses her opensource library of electronic modules that snap together with tiny magnets for prototyping and play.

This is awesome.

Never Make Counter-Offers

Bram Cohen:

Management figures they’ll save money on salaries by leaving it up to the employees to negotiate for their own pay. So they don’t give raises until someone tries to negotiate for one.

Why would you want to work at ThoughtWorks

Aaron Erickson:

In many companies, particularly consulting companies, salespeople call the shots, have most of the respect, and take home most of the rewards. Delivery – the “programmers”, are the people who are to be managed, paid as little as possible, and controlled by management.

Konwersja czasu do liczby sekund w Excelu

Aby skonwertować czas do liczby sekund w Excelu należy wartość komórki z czasem przemnożyć przez liczbę sekund w dobie (86400).

Times are stored internally by Excel as fractions of a 24-hour day, so that 12:00:00 would be stored as 0.5 and 18:00:00 as 0.75. Consequently, to convert a time to seconds, you must multiply by the number of seconds in a day - it is easier to remember this as *24*60*60 rather than the actual number (86400).

Weryfikacja na etapie kompilacji nazw właściwości wykorzystywanych w Windows Forms Data Binding

Kontrolki wizualne w technologii Windows Forms pozwalają tworzyć powiązanie pomiędzy właściwością kontrolki a właściwością obiektu będącego źródłem danych dla tej kontrolki.

class MyTextBox : TextBox
{
  public void Bind(object obj, string dataMember)
  {
    DataBindings.Add(new Binding("Text", obj, dataMember));
  }
}

Takie rozwiązanie działa bez zarzutu jednak ma pewną wadę – nazwa właściwości źródła danych przekazywana jest jako łańcuch znaków. Powoduje to sytuację, w której poprawność tego powiązania zweryfikujemy dopiero po uruchomieniu programu chociaż chciałoby się aby było to już na etapie kompilacji. Aby osiągnąć mój cel postanowiłem skorzystać z możliwości jakie oferują wyrażenia lambda w ramach języka C#.

class MyTextBox1 : TextBox
{
  public void Bind<T>(T obj, Expression<Func<T, object>> dataMemberExpr)
  {
    string dataMember = GetDataMember(dataMemberExpr);
    DataBindings.Add(new Binding("Text", obj, dataMember));
  }

  private string GetDataMember(Expression<Func<T, object>> dataMemberExpr)
  {
    LambdaExpression expr = dataMemberExpr;
    Expression node = expr.Body;
    MemberExpression memberExpr = (MemberExpression)node;
    return memberExpr.Member.Name;
  }
}

Aby stworzyć powiązanie należy wywołać metodę Bind w następujący sposób:

class Person
{
  public string Name { get; set; }
}

Person p = new Person { Name = "Bob" };

MyTextBox1 myTextBox1 = new MyTextBox1();
myTextBox1.Bind(p, x => x.Name);

Tworzenie aplikacji Ruby on Rails z użyciem Passenger

Chciałem wykorzystać Phusion Passenger podczas tworzenia aplikacji Ruby on Rails. Konieczne w tym celu było aktywowanie środowiska development. Niestety opcja RailsEnv nie skutkowała pożądanym zachowaniem. Ostatecznie należało ustawić opcję RackEnv (jak w przykładowej konfiguracji zamieszczonej poniżej).

<VirtualHost *:80>
  ServerName app.local
  DocumentRoot "/path/to/your/app/public"
  RackEnv "development"
  <Directory "/path/to/your/app/public">
    Allow from all
    Options -MultiViews
  </Directory>
</VirtualHost>