Saturday, January 23, 2010

Windows live writer

A small tip to all the bloogers –

There is a very good tool the can be download from http://download.live.com/ that gives you a very powerful editor to write your blog posts.

All you have to do, is download the program and (easily) configure your blog(s) and it gives you full support in writing posts,adding pictures,videos etc…

It can even show you "quick preview" with your blog layout!

The tool also save drafts, and all you have to do is just press "Publish" and the post will be published on your blog.

It's very comfortable, especially if you have more than one blog…

highly recommended.

Friday, January 22, 2010

5 Tips on How to work in a huge team

Okay, so our company is very successful, we have lots of clients, and we have a very strict dead-line to deliver. the next thing that happened – our team grew to something like 20 programmers!! and all sitting in the same huge open space.

So there are plenty of people to write code, but there are lots of unfortunate side effects: 

  • first of all – lots of stuff to do, lots of people to do it, however – things falls between the chairs, things get done twice, the code is duplicated, and so on
  • there is lack of coordination between all the programmers.
  • a lot of code is written and therefore – build is breaking.
  • noise in the room.
  • tons of questions to the experienced programmers.
  • and more…

So after a lot of talks in the team we made some adjustments to our daily work so we could actually get some work done, so thanks to my team I selected 5 tips that I think will help a huge team get something done:

  1. split the team – we took the team leader and added 3 more lower level managers, so each of them has 5 programmers, and each connects between the team-leader and his team. we also made sure that in each team there will be at least one experienced programmer.
  2. rearrange the workspace – first of all, make sure each and every one has his privacy, it’s very important, you can do so by adding something that physically separates between the work stations. you should also arrange the workstations by the teams, so the team meeting won’t interrupt each other’s.
  3. continuous integration – The best way to make sure nobody breaks the build, we use TeamCity but every other tool will do just fine.
  4. Make Morning standup meetings – We use agile as our development methodology, but even if you don’t, make morning meetings – a separate meeting for each team for 10 minutes so you would understand what you accomplished yesterday and will be done today. after this we make a meeting between all the leaders and the Team leader, that is how we make sure we are coordinated.
  5. Get to know all the team-mates of the team – I believe it’s very important to know all the programmers in the big team personally, so there won’t be a situation when someone don’t want to approach you because he is shy and is embarrassed to talk to you! you want people to talk to each other between the teams, that’s how things gets done best.

So that’s it, that’s what I learned by working in a huge team, I hope you could use these insights for your team.

Health!!

Tuesday, January 19, 2010

Expression trees

first post - yay! :)

A while ago i was debugging a method that generates a Linq query and returns IQueryable  .
I had a problem with it's results and i wanted to check-out the IQueryable object that was generated,
so I set an "Add watch" to the return value and was trying to find my generated linq. that wasn't so simple as i though.
In fact, the IQueryable dose not keeps the Linq statement as is, but saves it in an Expression object(also known as Expression tree).
You can see this in the IQueryable  interface definition:
public interface IQueryable : IEnumerable
{
   Type ElementType { get; }
   Expression Expression { get; }
   IQueryProvider Provider { get; }
}

What is an expression tree?
“Expression trees represent language-level code in the form of data”
msdn.microsoft.com
-This means that an expression tree gives us some kind of meta-data for our code.

To explain the concept of the Expression trees we need to start from the very beginning....
Lets say we have this method:
public void PrintNumbers(Func<int,bool> filter)
{
   for(int i=0;i<=10;++I)
  {
      if (filter(i))
         Console.writeline(i);
  }
}

The method takes a filter function and prints all the numbers from 1 to 10 that match the filter.

Until now we had 3 ways to do this:
1) Declare a method that match the parameter,something like this:
private bool MyFilter(int x)
{
  return (x%2) == 1;
}

And call our method like this:
PrintNumbers(MyFilter);

2) we could call it with anonymous delegates:
PrintNumbers(delegate(int x)
{
   return (x%2) == 1;
}

3) Lambdas expression:
PrintNumbers(x => (x % 2) == 1);

And Now we have a new way - Expressions:
Expression<Func<int, bool>> myExpression = x => (x % 2) == 1;

This expression is of type Func<int, bool> and assigned with lambdas expression.
when doing this assignment the expression object's properties are filled  as follows:
1)Body - the expression: (x % 2) == 1
2)Parameters - x
3)NodeType - LambdaExpression
4)Type - Func<int, bool>

Becasue expressions are nested types(that's why they are called trees) we would like to view them in a tree format.
you can download the visualizer from Visual studio 2008 sampels.

For exmple, if we run the visualizer on our current expression, we will get the following result:



Our Expression is an : ExpressionEqual which equals between (marked in pink underline) ExpressionModulo(left) and ExpressionConstant(righ).

The Expression modulo represent a modulo operation between ExpressionParamter "x" and a ConstantParameter "2' ,and the ExpressionConstant represent the const "1".

Expression trees and Linq
As I said in the begining of the post,the linq statement is saved in the Expression property of the IQueryable object. when the query is "executed" the expression is translated into sql statment.

for example, if we run the expression tree visualizer on the query:
var query = from c in db.Customers
where c.City == “London"
select new { c.City, c.CompanyName };

We will get the:

and now that we can read this, it is simpler to debug Linq queries.

There are some more usages to the Expression trees such as generating code and reflection, but thats for a diffrent post....

Barko(aka Tal)

Saturday, January 9, 2010

Welcome!!

hello everybody We are Matan and Barko, and We have been .net developers for almost 5 years We both work in a big Software company in Israel. In this blog we will post some interesting stuff , mostly about .net, WCF, TFS, unit testing, ESRI technologies, Agile and more.. we hope you will enjoy what we have to say, Have fun Pair (of) Programmers