Friday, September 29, 2006

Team Development using MS TFS - Part 1

This is the first part of a 3-part series about MS TFS (Microsoft® Team Foundation Server). Part 2 and Part 3 will follow.
To me, the biggest challenges of enterprise wide projects are managing the artifacts and deliverables in one single place, directing all development efforts toward one target, lack of project’s predictability, and last but not least distributed developments.

I’m mostly talking about development in Microsoft platform. Those who have worked with Rational Suite know how integrated and distributed it is. It allows you to manage all the retirements and their traceability, defects, and all the configurations in one single place. I’ve worked with Rational ClearCase and I must admit, although difficult, it's purely distributed.

That’s why I call the Team System the first grate step from Microsoft toward a real team development.

Now with that, a project manager can monitor everything in one single place and assign tasks and control the progress.
Architects, Testers, and DBAs can now be part of the game.
The initiative I like most in this product is its extensibility and customizability which I’m going to talk about it in one of the future posts of this series. 
A real team development using Microsoft .NET needs three things in term of tools: Visual Studio Team System, Team Foundation Server, and Methodology guideline.

Visual Studio Team System is series of role-based editions of Visual Studio. It offers different versions for three different roles; Architects, Developers, and Testers. Also there is a version called Team Suite that contains the functionalities of all those three versions that is suitable for those individuals that play all those roles in a project. Microsoft has recently released a new version named Team Edition for Database Professionals which is not included in above mentioned versions; even Team Suite.

Team Foundation Server is the backend engine for Team System that enables team to collaborate. Without TFS there is no team development. It’s this engine that keeps all the team members connected.
You are probably wondering what the Team Explorer in the picture is.
Well, it’s a member component of TFS through which you can explore a team project inside TFS. It can be used as a standalone client or can be integrated with Visual Studio. I should say it’s the client tier of TFS.

About the third piece, a methodology guideline, TFS carries MSF (Microsoft’s process framework) in two forms, Agile MSF and CMMI MSF.
If you need to embed other process guidelines in TFS, RUP for example, you need to use third party tools.
In future parts, I intend to write more about TFS's architecture, how it works, installation and configuration, how to embed RUP’s guideline, and how to manage it.

Friday, September 22, 2006

SQL Server guys' problem of learning Oracle - Part 2

In the first part, I briefly wrote that there are fundamental differences between Oracle and SQL Server and in this episode we'll look at a few examples. The intention is to make it easier for those who know about one product and would like to know about the other. It's also my intention to conclude that designing applications to be database agnostic is not a good practice.

In my opinion, there are two reasons for facing difficulties when someone (SQL Server DBA or Programmer) wants to transition to Oracle and vice versa.

1- Similar terminology but different implementations.
2- Utilizing the database in applications the same way.


The most similar and confusing term between these two DBMSs, I believe, is “Instance”.
What is called instance in SQL Server is a collection of windows services that manages SQL Server Databases. You can have more than one database attached to an instance at any point of time.
In Oracle, however, an instance is a little bit different and so the way Oracle DBAs manage it.
Unlike SQL Server each instance in Oracle can mount and open only one database at any point of time. If you want to have more than one database open and running simultaneously, you’ve got to have another instance. Creating an instance in Linux came easier to me than creating one on Windows. In Windows every instance is represented by a service and so to have a new instance you ought to create a new service using a command-line tool. But in Linux, you need to take care of a few files and folders and then start it up.
Also each Oracle instance needs a "parameter" file to start working called Server Parameter File (SPFile). This file defines the attributes and characteristics of the starting instance.
 Each SQL Server instance comes with a few databases including "System" using which instance manages other databases. But since an Oracle instance can open one database at a time, at the creation time, is nothing more than a few files and folders.


In applications that utilize SQL Server it's common to open a connection to database for each executing statement. If you are going to do six queries, you might well see six connections. SQL Server was designed that way - much like Windows was designed for multithreading, not multiprocessing. In Oracle, whether you want to do six queries or six hundred queries, the maximum number of connections you want to open is one. Each Oracle connection was designed to handle multiple sessions. So a single Oracle connection requires much more memory than a single SQL Server connection. Essentially, what's common practice in a SQL Server database is simply an incorrect approach against an Oracle database.

To conclude, as an architect or developer, it's important to remember that when porting applications from one database to another, you ought to take into consideration the time that is needed to refine and adjust application's architecture to be coherent with the database's architecture. I notice development teams choose development frameworks specifically because it helps their application to be database neutral without understanding the implications. Even Oracle provides two separate database management applications for Linux and Windows even though Java runs in both. That's not because Oracle can't ship one application. It's solely because Windows and Linux are fundamentally different. One uses processes (Linux) and the other threads.

If you are in the same situation and having problems, please don’t hesitate to contact me and share your problems.

Saturday, September 16, 2006

SQL Server guys' problem of learning Oracle - Part 1

In the first episode I’m going to write about the main issue that a SQL Server expert might face as he start learning Oracle.

I’ve always liked Microsoft SQL Server not only because it’s easier to manage and I can be more productive with – which isn't the whole point, of course - but also because it’s one of Microsoft’s products with which I have least amount of trouble (e.g.: bugs, security holes, etc) compare to other products like Visual Studio or Windows itself.
After a while, I realized knowing about other DBMSs is necessary, too. Because working with similar products in the same field gives you a lot of new ideas and, at the same time, options.

Starting with Oracle can be confusing if your mind is set on SQL Server. I, myself, had to start by figuring out differences of terminologies ("instance" and "database" to begin with). Oracle databases I setup were running into numerous number of issues. And it was all merely because I wanted to do things the same way I use to do in SQL Server.
It’s true that they have similarities, lots of lots of similarities. But the way they work are different. If you are a developer that doesn't look at database as a black box, you understand what I am talking about.
In my opinion, you have to learn Oracle from scratch, in the same way you learned SQL Server. This seems very obvious. But many good developers I run into don't seem to have realized this.
You have to understand how things really work in Oracle and solve problems in the Oracle way, not in SQL Server way.
This would be true as well if you were an Oracle DBA or programmer and you wanted to learn SQL Server. That’s why in the next post I am going to write more about this issue and compare quite a few concepts of Oracle and SQL Server that sound similar but are not and show you how they are different. That will hopefully make it easier for those who work with SQL Server to start learning Oracle.
There is a book from an expert that could make the learning process easier; “Expert Oracle Database Architecture” by “Thomas Kyte”. I wish it was available when I was starting with Oracle.

Thursday, September 14, 2006

SysML and an example from RUP

Hi everyone

I'm so excited to make this post as it's the first one in my first blog.You know, I was thinking what I should really start with; Database, C# or something not technical as I'm at the beginning. But then I decided to start with something that I love most, RUP.Well, this one is not purely about RUP. But the sample that I'm gonna use here is from RUP.
Here we go...
SysML (System Modeling Language) is a Modeling Language proposed by OMG (the consortium that has developed UML) and its specification has been developed by many companies including IBM.Yes, you might say it’s a sort of extension to UML and you are right. I believe soon or late it will become the next famous modeling language.But you may ask why OMG has proposed a new Modeling Language? What is the UML’s weakness?Well, I suggest you to read a 3-parts article from IBM's developerWorks web site to figure that out. But to keep you excited I give you an example from RUP:
In RUP’s Inception phase, there is a workflow named Understand Stakeholder Needs. There the System Analyst has a few tasks to do - which involve stakeholder as well - to understand requirements by collecting information.As you might be able to see from the RUP's guideline, there is a task named Manage Dependencies that has a few output artifacts including Use-Case Model and Supplementary Specifications.In use-case model you can only model the functional requirements of the customer. The non-functional requirement (i.e.: Performance) has to be documented in the Supplementary Specifications Document.But in the SysML - as you may read in the article - there is a diagram named Requirements that allows you to model both types of requirements. So you have a single place to look at your requirements and manage them.
That's it for the first post.
I appreciate your comments and feedbacks, a lot. Please let me know how much this post was helpful to you.