Fridays @ Southworks
March 1st, 2010
Every Friday at 9 o’clock we have the “Friday Presentations”. Any Southie can propose a presentation, there is no restriction about the topic, so you could be watching someone talking about dynamic languages or sharing his experiences during the last PDC. However, most presentations talk about projects that are currently executing or that we have executed lately. Each presenter has a slot of 15 minutes to talk about the topic he chose. In general we have one presentation per Friday, but in some occasions we have 2 presentations.
Once presentations are finished we have an “Open Discussion” space. We sit in a circle and any Southie can propose a topic for discussion. After introducing all topics, we vote them and the TOP 2 voted topics are discussed. The open discussions topics are generally related to our daily practice, improvement opportunities, update on different things, etc.
Both, the presentations and discussion are recorded and published in our network to allow any Southie to consume them later if they could not make it.
All these effort is coordinated by the communications team lead by Julian Scopinaro.
Personally, I found these spaces very useful; they help to keep us up to date with things that are happening in the company and also allow us to talk about improvement opportunities.
This is part Southworks’ culture.
Below some pictures from the last Friday.
About SQL Server Users and Logins
February 20th, 2010
I think that many developers that work SQL Server do not have a clear understanding of this topic (I used to be one of them) and because of that is that I am writing this post.
Logins vs. User accounts
To connect to a SQL Server instance you first need a login so the instance can authenticate you (know who you are). But to perform operations on a specific database you will need a user account in that database. The user account is used for database access and permission validation. So you could have a login, but if you don’t have a user account associated to that login, you won’t be able to access that database.
Logins
To create a login you can use the following code snippet.
– To create a login that uses Windows Authentication:
CREATE LOGIN <name of Windows User> FROM WINDOWS; GO
– To create a login that uses SQL Server Authentication:
CREATE LOGIN <login name> WITH PASSWORD = ‘<the password>’ ; GO
The actions you can perform with a SQL Server instance (like create, backup and restore databases) depend on the server roles associated with your login. Once the login is created you can assign it server roles by using the [sp_addsrvrolemember] stored procedure. Possible server roles are: dbcreator, sysadmin and serveradmin among others.
User Accounts
User accounts are defined at database instance level, and every user account must be associated to a login, so to create a user account you must provide login.
– To create a user for the myLogin login for the myDatabase database
use myDatabase
create user myUser for login mylogin with default_schema=dbo
As you can see, when creating a user you don’t need to provide a password, because there is already a password associated with the login.What a user can do with the database is defined by the user’s permissions. Permissions are grouped into Roles and there are three different kind of roles:
- Database Fixed roles: are pre-defined roles by the system
- User-defined roles: are roles created by the user
- Application roles: are created to support the security needs of an application. (often database applications
enforce their own security based on the application logic)
When a user is created it is automatically added to the public (fixed) role. To add a user to a role you can use the [sp_addrolemember] stored procedure.
Hope you find this useful.
Troubleshooting ASP.NET MVC on IIS 7
January 28th, 2010
Some days ago we had to work hard on this topic to make an ASP.NET MVC application run on IIS7. It took us almost 2 hours, and after completing the task I decided it deserves a post.
I will start by listing the common setup steps and then I will share our particular case.
Solving common issues
First of all you need to have IIS installed and ASP.NET registered, this seems obvious but it must be mentioned. If you installed .NET framework after installing IIS then .NET Framework installation takes care of registering ASP.NET in IIS. But if you installed IIS after installing .NET, then you will have to make the registration yourself. To do this open a Command Prompt (running as administrator), go to the .NET framework folder (typically Windows\Microsoft.NET\Framework\vXXXX) and execute the command aspnet_regiis –i.

Once you have IIS with ASP.NET running, you can create the website or virtual directory for your application, point it to your application folder and if you are lucky your application is now running.
One common issue you can find is that when trying to browse your application you get a blank page, no errors, just a blank page. This usually happens when the IIS HTTP Redirection component is missing. So to fix it, just install this component by browsing Control Panel | Programs | Turn Windows features on or off | Internet Information Services | Word Wide Web Services | Common HTTP features and check HTTP Redirection.

Solving our particular case (when you have two different ASP.NET builds installed)
In our case, we had the problem that the machine had installed 2 different builds of ASP.NET v4 (I think these builds corresponded to beta 1 and beta2 versions). After we followed the previous steps, when trying to run the application the app pool try to load the incorrect version (beta 1), it failed and the app pool stopped. We tried to re-register ASP.NET, but it didn’t work. In the APP Pool configuration we explicitly set the correct version, but at runtime, it tried to load the incorrect one. How did we solved it:
- Un-register ALL ASP.NET versions (by running aspnet_regiis –ua).
- Delete Beta 1 folder located under Windows\Microsoft.NET\Framework.
- Register again the ASP.NET beta 2 version. (by running aspnet_regiis –i)
That was all, hope this help you.
Website Performance Tools
January 13th, 2010
During these days we (project A2 team) have been working on this topic. We are working on training material about website performance, so we had to review some tools to measure performance.
Below is a list of tools we have reviewed during the last week.
- FireBug: is a very popular FireFox add-on for allowing to edit, debug, and monitor CSS, HTML, and JavaScript, but it also provides lower level information such as http headers and others.
- YSlow: is a FireFox/FireBug add-on developed by Yahoo! It analyzes and qualifies web pages from A to F suggesting ways to improve their performance based on a set of rules for high performance web pages. The reports it generates are very nice.
- Page Speed: is a FireFox/FireBug add-on developed by Google. It performs several tests on web pages that are based on a set of best practices known to enhance web page performance. A score is provided for each page as well as helpful suggestions on how to improve its performance.
- MSFast: is a browser plugin that help developers to improve their code performance by capturing and measuring possible bottlenecks on their web pages. It has been developed by MySpace.com and currently supports Internet Explorer.
- dynaTrace: It integrates with Internet Explorer and allows you to diagnose and prevent AJAX performance issues.
- Visual Round Trip Analyzer: is a standalone application that examines the communications protocol, identifying the causes of excessive round-trips, and recommending solutions. It is browser-independent. You open the tool and it starts recording what happen at network level. Then you browse your website and finally stop the recording. The tool helps you analyze what have happened.
There are some more tools we have reviewed but these are in my opinion the most interesting. You might be wondering why I didn’t mentioned Fiddler. The reason is that Fiddler does not provide any suggestions, it’s a passive tool: just captures the network traffic because its focus is not performance analysis.
On future posts I would like to drill down on each of these tools and I will also provide information about JavaScript profiling and server-side analysis.
Project A: day#end
December 28th, 2009
We shipped it! The product is now complete. It is not yet in production environment because the Go live!is scheduled for the end of January. Working on this project has been a very pleasant experience and weperformed a smooth delivery as well.
A few numbers of this project:
- 44 stories completed
- Representing a total weight of 97 points
- In a timeframe of 5 iterations
- With an iteration lenght of 1 week.
There is one post pending about this project that I will write after going live.
Project A: day#11, same team new project
December 7th, 2009
Today we started working on project A2. Project A is still in progress but the work remaining is enough for one dev, so together with the customer we decided to split the team in two. Diego will continue working in project A for 2 weeks while Gabriel and myself will start working on project A2. Both projects are related, not at the code level but at business level and that is why we splitted the team in two instead of having a new team doing A2. This afternoon we had a review & planning meeting with the customer where we showed the progress on project A and we set the vision and overall context for project A2.
This is one of the things that I find interesting an different compared to previous work experiences: projects run fast, maybe in two weeks. So you need to be sharp, execute, deliver and get ready for the next challenge. Weekly iterations help and communicating status daily is crucial to steer the direction if needed.
To be continue…
Project A: day#10
December 4th, 2009
We have just finished the second iteration and we are on track, we completed all the committed items and also some others that we found during the iteration. At the same time are working in a ISO complain way (that is what our complain checker says).
One interesting characteristics of this project is that we are working on a solution based on a open source product. During this two weeks we have found some issues on this product that we had to fix, but this didn’t affect our scheduled. At this moment we are almost ready to integrate the UI styles that are being developed by another company, I think that will be an interesting challenge.
To be continue…
Project A: day#6
November 30th, 2009
Today we did the iteration review (it should have been last Friday, but our customer decided to move it because of Thanksgiving day). We completed all the committed items and some more. The review meeting was short (less that 30 min), we had prepared a slide deck with 4 slides to highlight some facts of the past iteration and some important stuff about the next one. During the meeting we browsed the application, we reviewed the backlog and we agreed the scope for the next iteration. After the review we did a retrospective, and here we are now starting our second iteration.
To be continue…
Project A: day#4
November 26th, 2009
We are in good shape, the customer confirmed that we are going to take care of developing the application and go live process.
Today we deployed to staging the first drop of the application. To set clear expectation with our customer we added a disclaimer message on top on each page.
The link “See drop details” takes the user to a page were the deatils of features/modifications are listed. This first drop includes 4 out of the 6 story commited for the current iteration.
To be continue…
Project A: day#1
November 23rd, 2009
Today we (GabrielSZ, DiegoM, TimO and Lito) started a new project (aka project A) and I decided to (try to) write a post every day telling the story of the project. As you may image the first day our activities were:
- Kick-off: a short meeting where everybody get familiar with the project goals, timeframes and restrictions.
- Planning: the customer gave us a VERY rough idea of his needs and we took care of “backlogize” them (convert into a backlog the customer needs). This is usually misunderstood so I want to be very explicit: we clearly identified user stories, we estimated them and prioritized them according to the customer criteria. Finally we published the backlog for the customer to “play with it” (without modifying our estimates). Based on this backlog we will start our first iteration.
- Research: the project has some technical challenges so we had to make some research (just a couple of hours) before the planning, to be able to estimate.
- Setup: we made the infraestructure request for the project (repository, lists, tracking system, etc.)
To be continue…
NicoPaez’s south blog