Tuesday, January 31, 2006

Delivering services or buying software?

It's been a while, since I started noticing that most biggest software companies are trying to settle their business around service delivery, rather than creating conventional software. Indeed, have you asked yourself why SAP are so successful, what are they delivering so unique to its customer that it has such a huge revenue? Well, the answer is that they are not selling software, they are selling the service! I don't want to get into the shoes of their accountants, but they are really making a huge revenue where their customers don't actually have anything in their hands forever - they just pay their subscription for a given period for a given pack of services and that's it! You need assistance - SAP is here, you need education - SAP is here, you need a new feature - SAP is here, but you are not actually buying all these - you are just paying for the services.

Recently, we have been witnesses of the great success that Google. And what they have, is it an operating system? Is it a software that is so unique?No. They provided to its customers the service to be able to search very efficiently. Well, after that they have many other services like GoogleTalk, Google Video etc, but still their "customer" are just using the service rather than buying it.

And guess what - Microsoft whose biggest income so far has been from its operating systems and Microsoft Office, they are now trying to settle into this business too, because it is obviously very profitable. Go to Windows Live and you will see what I am talking about - very useful services like MSN Messenger, Security, Favorites, etc. Microsoft is planning to fight for Internet users and because of this they are now restructuring and investing in their MSN group. And I am sure that pretty interesting things are about to emerge.

But yeah, I believe that in the future the share of IT market that services are going to occupy will become dominant as opposed to the traditional software. Actually, take a look at this article: CSFB says 'traditional software is dead' (link). There you will see that this time this will happen is not too far away...

Monday, January 30, 2006

HOWTO write unit tests

I was working on a project, where the client had requested to follow the test driven development (TDD) methodology while working on his project. Before this I personally had read a lot about TDD and unit test in particular, but I had never engaged it a real project.

Some very common questions that you will have in this case is:
* What functionality should I test?
* Are my tests relevant to the business requirement?
* How should I structure my unit tests so that I know which ones to run when I make a specific change?
* How many unit tests are "good enough"?
* How should I design my code so that it is liable for easy unit testing?

One of the very good consequences of TDD is that each developer starts thinking a little bit like a software tester. We all know that developers develop to run, while testers run to break. Well, if developer invests some time to gain a more comprehensive understanding in the problem that (s)he has to implement, then chances are that (s)he will produce less bugs. And this is one of the main tenets of TDD. By developing test cases, developers tend to gain a more versatile understanding over the problem domain they have to implement and thus their code is prone to less bugs. I totally agree that this is just a theory, and basically it depends on what unit tests the developer creates, what is the code coverage of those tests, how often are the tests run and of course - are the tests actually relevant. A good place to start learning what are the most basic requirements for efficient test cases, visit the article "Write Maintainable Unit Tests That Will Save You Time And Tears" (link).

One of the biggest challenges that I had so far in my experience was to design my code so that it is easier to be unit tested. It really depends on the programming language that you use as well as the platform that you are using. My experience so far is with Microsoft .NET, where the unit testing framework which is most used is NUnit. So when it comes to design, we had to design our applications that in one hand they are easily to be tested, but on the other side the testing code is somehow out-of-the-box. Therefore, we decided to implement the business logic in separate class libraries (.DLLs), which exposed the main business classes. This has the following benefits:
1. Class libraries allows to be easily reused - thus, we wanted to use a single assembly for multiple places within our system, we were able to to this
2. Class libraries are easier to be tested - what we did was to create a "bootstrapping" code which just represented the specific unit tests on each single class / method. Thus, we had very well separation among unit testing, business logic and presentation.

Here is an article that is something like a quickstart for test driven development in C# - click here.

Monday, January 23, 2006

Java or C# - which one is more competitive?

I found this article which basically describes the trend in software development in the past 2005. I was really glad to see that Microsoft .NET is getting a fast pace over its rival Java. While years ago IDEs for Java were really far ahead compared to Microsoft Visual Studio 6 (I remember the times when Visual Assist was a not a requirement, but rather a must for this IDE, and after all it just give you a quick file navigation and syntax coloring). Well, with the release of Visual Studio 2005 Microsoft provided developers with a IDE, which really is integrated and has intent to help developers in enter into rapid application development. Actually, according to this article, now Microsoft has 67% of the market for IDEs, which is quite expressive about their huge improvement in this area.

Another topic that took my attention from this article, was about the demand for programming languages. It seems like Java is still programming language no. 1. I do know that most developer are very sensitive on this subject - all of us have been a witness if not a participant in *bloody* discussion which one is more superior Java or .NET :-) I am technology oriented so I don't take neither position in such cases - for me what is important is the technology, the programming language is just the tool for implementation. Well, I have preferences of course, but I will never get into such kind of "deadly" fight. However, I think it is positive to know what is the market demand when it comes to programming languages. Thus, every developer knowing the trends in software development in the future years, will be able to react adequately, and if needed, to start learning new technologies so that (s)he is competitive. Those of you who are interested in such kind of trends especially in programming languages, go to TIBOE page which are publishing even monthly reports on the skills demand in programming languages (here is the link).

Sunday, January 15, 2006

How hazardous are Wi-fi devices with their radiation?

Today I was reading about the radiation coming out of our cell phones - a topic that has been thoroughly discussed for a long time. I've heard a lot of stories that there is an electromagnetic radiation emerging from the headset, but nevertheless I am using my mobile without taking this that serious.

Well, I heard a similar story about Wi-Fi devices. I personally use the Wi-Fi coming with my notebook a hell of the time. Actually, I am used to hold the machine on my stomack, while I am in the bed. So normally, I got upset a little bit. I checked out the Internet for some information about how hazardous is the Wi-fi? I found this very interesting article, which shows a real lawsuit for exactly the same thing (check it out here). According to this article, it is well-known that Wi-fi's are harmful, but they are not more harmful than any other microwave that we are so used to. And even our wireless speakers and cordless phones sold everywhere are not "flowers", when it comes to radiation. Here is an excerpt from this article, which gives enough information about the case:

"
.. Wi-Fi experts argue that while wireless networks do, in fact, produce low levels of electromagnetic radiation, they emit no more than household gadgets do. If wireless networks are hazardous to your health, they say, so then is nuking a slice of pizza. Microwave ovens and many cordless phones actually operate at the same 2.4GHz frequency used by a 802.11b wireless network. Even those wireless speakers you can buy at RadioShack emit similar radiation levels. "At this point, we have no reason to believe there is any harm in wireless networks," says Wi-Fi Alliance Managing Director Frank Hanzlik.

...

In their lawsuit they assert that "responsible scientists have reported that prolonged exposure to low-intensity radio frequency radiation can break down DNA strands, cause chromosome aberrations and break down the blood-brain barrier, thereby permitting toxic proteins to invade the brain."
"

I am so used to my wireless router at home that I am 100% sure that I won't throw it away, because of this radiation. Actually, Wi-fi networks are getting more and more around us, and in general I find them really useful if not a-must. Wait a minute - do you know that Google is planning to build a Wi-fi network all across the States? Can you image in what hell of a problem they are getting into if the radiation coming out of the Wi-fi's is that hazardous? :-)

However, I guess that some sort to precaution is not bad idea, because as can be inferred from the article, it is still unknown what the damages of prolonged exposure to Wi-fi radiation to human are.

Friday, January 13, 2006

Security Development Lifecycle at Microsoft

While I was reading articles from the MSDN Magazine, I ended up on this very interesting article regarding the security development lifecycle at Microsoft: A Look Inside the Security Development Lifecycle at Microsoft (link).

It is obvious that Microsoft has made their products more robust and reliable during the last years. Face it, there is a new Internet Explorer coming out, IIS 7 is far away more secure than its predecessor, the same applies to Windows 2003 family - all of these are an obvious sign that Microsoft puts security as a very important characteristic of their products. But in order to provide it, as can be inferred form this article, there is a very solid process engaged. I personally like the idea of having a person in the team, responsible for the product security. Also, the fact that security is put into consideration early in the development process will help to build the architecture with respect to it, and afterwards, during the implementation phase, security will be a criterion for each developer.

Another thing that I read in this article and I find particularly true, is that most developers just don't know what is to write secure code. In order to mitigate the risk of security flaws, having a "security" guy on the team is going to be really very handy, because (s)he will give guidance and put attention to security issues and best practices. But after all, each developer should be knowledgeable. I am now covering the courses found at Microsoft e-Learning, courses showing the latest best practices and important flaws that every developer should be aware of. These courses are under the label "Microsoft Security Guidance Training" and they can be found here. Very interesting, very helpful and for sure after you cover these, you will have a solid base in security.

Thursday, January 05, 2006

Skype 2.0 video conference works behind firewalls

Folks,

Today I tested Skype 2.0 build 2.0.0.63 beta (download it from here) to see whether we can setup video conference, when I am behind a firewall (as it is in my case). The test was successful – Skype 2.0 allowed me to make a video conference even though I am behind a firewall.

Just to mention that I tried to do the same with MSN Messenger 7.5, but it didn’t work out.

Say *hello* to the era of free video conferencing! I find this really fascinating, and for example we will try tomorrow to setup a video conference with a prospective client. This would be a definite plus for us, because the client will not only have voice, but also visuals, which will help us build credibility easier.

Sunday, January 01, 2006

Merry Christmas and Happy New Year!

Happy New Year 2006!

I wish you all the best during the new 2006 - let you be healthy (very very important one) and let all the happiness in the world be with you. Since this is a technological blog, I wish you to buy a 2 processor monster machine to a very reasonable price, develop code with less bugs (hey, why not bug-free! :-) ), start developing for.NET platform (if not already) - at this moment I am sure that Microsoft flamers have already erased my blog from their favorites :-), but I wrote this just for fun), etc. etc. - put shortly - all the best! :-)

Cheers!

Monday, December 19, 2005

ReSharper: quick navigation among recently accessed files

Today I found out a really very useful feature in ReSharper Visual Studio add-in. I personally use file navigation features a hell of the time, because most of the times classes have relations between them, or you want to see a specific code snippet somewhere else, etc. Visual Studio .NET 2003 doesn't have this feature (in contrast to Visual Studio 2005), so here is ReSharper to the rescue.

When you open Visual Studio .NET 2003 having ReSharper installed, just press CTRL + E and you will see a list of recently accessed files. Veeery, very handy! The name of this comand is "ReSharper.GotoRecentFiles". Besides this really great feature, ReSharper has the possibility to navigate you to a given file from the solution, or to navigate you to a given type - all these kinda "small" goodies, which Java developers are so used to, but most C++ developers like me think as an "innovation" :). Ah, and if you think that this is great, just see the refactoring support coming with this add-in - really awesome! :).

For those of you who are hasn't seen this add-in for Visual Studio .NET 7.0 and 7.1 (currently, there is a beta version for Visual Studio 2005), just go to this ReSharper site.

Friday, December 16, 2005

Managed .NET stored procedures in Oracle 10g

I know that this is my third post for the day, but when I saw this I was so excited. Yes, there are managed stored procedures in Oracle as well. Just a quick note, the new Microsoft SQL Server 2005 supports managed stored procedures, which are procedures written in one of the managed .NET languages. The benefit? Well, you don't have to know T-SQL in this case, in order to have access to your data. It is obvious that Oracle hasn't waited too long and now not only they support Microsoft .NET Framework 2.0, but have implemented the same type of SPs in their database server. Impressive!

I found one very good article about this feature in Oracle 10g. Check it out it is really great (click here)! What I find astonishing with it, is the Deployment wizard - once you have created your stored procedure in a managed .NET programming language, you have easy deployment through a nice-and-tidy wizard. Well, another story is that you can debug your Oracle .NET stored procedures through Microsoft Visual Studio .NET 2003 - yeah, no kiddin'! :) Just read this article...

FxCop 1.35 Beta 1 for .NET 2.0 is released

Today I saw that there is a new beta released for the famous FxCop tool. This tool obviously targets the brand new Microsoft .NET framework 2.0. Still, I couldn't found what are the changes in functionality as compared to version 1.35, but I will review this beta thoroughly during the weekend and will keep you posted.

Meanwhile, if you want to evaluate this code analysis tool by yourself, just go to this page.

Creating partial trust applications with Visual Studio 2005

Today I found out that the new Visual Studio 2005 gives to its developers the means to easily build partial trust applications. So far, most of the .NET based applications are full trust, basically because it is really cumbersome to define all the required permissions and enumerate them declaratively, as it should be done with Visual Studio .NET 2003 for example.

What you have with Visual Studio 2005, is the "Security" tab in the Project properties dialog. There you can easily enable "Enable ClickOnce Security Settings" and select "This a partial trust application". The next step is to "calculate" the permissions that your code requires. A, there is something else you should pay attention - if you want to calculate the minimum permissions set, be sure to select the Custom zone from the "Zone your application will be installed from".

Monday, November 28, 2005

Quick file navigation feature in Visual Studio 2005

Today I was researching the new features that Visual Studio 2005 gives to its users. One of the super cool and sexy feature that I found, is the quick navigation among the open documents: just press CONTROL + TAB and a dialog box will appear, where you can choose among all the open documents, but also you will have Toolbox, Servers and many others menus at your fingertips.

The only thing that I can say is: THANK YOU! I am getting more and more convinced that this version of Visual Studio IDE has really got the goal to make developers’ work more productive.

More about the quick navigation between files can be found on the following MSDN article:
How to: Navigate Within the Integrated Development Environment (click here to see it)

Sunday, November 27, 2005

Common Software Errors

I recently ended up on a very interesting document, describing common software errors. What I really liked in this article was that the information in it was very systematically prepared, and as it is mentioned in it, it will help one tester to develop his/her way of thinking at least. I am sure that some of you will say that most of these bugs are not relevant, but try to look at the things from another angle – try to take the most out of the presented bugs, ant to remember as many bogus cases as you can. I am sure that this will help you a lot next time when you are trying to write test case scenarios for given software (provided that you are a QA engineer) or things to be careful while designing or writing code (if you are software developer). I provided this document to the QA manager at the software company, for which I am currently working. He was pretty amazed by this collection and recommended it lively to all of the other QA engineers as a “must read” source.

The aforementioned article is named “Common Software Errors” and can be at LogiGear download site (after you fill in a quick download survey).

Thursday, November 24, 2005

Windows Live: Microsoft's answer to Google's homerun

Today I found this new service, which Microsoft is now implementing. It is still a beta version, but still the idea behind it is really very valuable. I as an ordinary Internet user, have very often faced the problem with not having my Favorites in place. That is why I am used to have a USB drive with me so that I always have access to such personal things. Well, with Windows Live you will have this in your finger tips.

Secondly, I use my Motorola MPx200 very often to check my email, but now I will have seamless integration between my mobile phone and my emails, just like I have it already with Microsoft Outlook.

At last, but not with least significance, I will have a free virus protection guard (Windows Live Safety Center) so that my PC will become more secure. And then who says that this world is not perfect? (

Well, if you want to find out more about this new Microsoft service, just go to:
http://www.live.com/

To see what are the main benefits (ideas) behind it, go to the link below to find out more:
http://ideas.live.com/

Saturday, November 12, 2005

Open source tools for software testing professionals

I've recently seen a movie with Diijstra, who was talking about the software testing and QA. He mentioned that years ago, they were proclaiming the idea that every software developer should write rock-solid code, but it actually happened that nowadays developers believe that testers are responsible to detect software bugs (thus developers are somehow not responsible for low-quality code). I personally have seen lots of statistics about how many bugs can be detected by testers performing black box testing (which adopted by most ISVs) - the ranges varied between 30 up until 50, but not more (scary uh? :-) ). And honestly, when you think about it you will realize that software developers can be the best testers ever - they see the code, and they know what it is and is suppose to do, which is the basic pre-requisite for any test being performed by whoever.

And here is the way I looking at the things for software development vs. testing - I usually try to think from the QA engineer's point of view such as I am trying to break my code, what extraordinary cases I haven't considered, any boundary situations, what about UNICODE characters and encoding issues, etc, etc. There are many other questions that one may have, specific for the given project that is running, but it will be always a good think to have this kind of thinking - how I can make sure that my code is really solid!

The project that I am currently involved, has required high-quality since its very beginning. Therefore, every developer is responsible to write unit test and to run his/her code against it, and thereafter, while preparing the daily build, these unit tests are run automatically through the build process that is engaged. What is the benefit of this? Just to name a few, writing simple test cases helps you get a better understanding of the problem that you have to implement; it guides you whether the current implementation meets the functional requiremenets.

And if you are a software developer who is looking for testing tools, here is a very good site that you can find tons of free (open source) frameworks for unit test, performance tests, requirements tests and so forth:
http://www.opensourcetesting.org/

I highly recommend this site to all developers and QA engineers - there is something for each of you :0)

Saturday, November 05, 2005

The manuscripts of Edsger W. Dijkstra

These days I had to implement a semaphore synchronization object in C#. To note, Microsoft .NET 1.0 and 1.1 don't have such kind of synchronization primitive in contrast to the new version 2.0 where it is available. However, while I was looking for some guidelines for semaphore as a concept, I found out that this synchronization primitive was invented by one of the founders of modern Computer Sciences - the same Edsger Dijkstra - respect!!! During my bachelor's degree, I used to hate this guy because he has so many theorems that our professors insisted on knowing their proofs by heard :)

Despite this, I found an archive containing the manuscripts of Dijkstra, some of which are even hand-written - really impressive and somehow touching! If you want to see them just go here.

The one that particularly is about semaphores (and which is hand-written) can be seen here:

Enjoy!

Friday, November 04, 2005

Google Print is up and running

Google Print is working! For those of you who are not acquainted, Google Print provides you a virtual online library, containing a huge set of books.

How you can take benefit? Well, whenever you are looking for something, you just can search for it in Google Print and you will receive a list of books, which may help you with this. You have the possibility to see an electronic version of each book as well as to order a printout for yourself. Unfortunately, I didn’t find books like Code Complete 2 or Effective C++ (Third Edition), but I guess it is a question of publishing rights. More about Google Print can be found here.

I personally love reading and therefore for me this service is like а gift from God. I highly recommend to try it out at: http://print.google.com/

Thursday, November 03, 2005

Microsoft Win32 to Microsoft .NET Framework API Map

Hey Folks,

For all of you who have quite an experience with Windows 32 API, and who are now migrating to Microsoft .NET, here is something that you may find useful: Microsoft Win32 to Microsoft .NET Framework API Map. You can use this article whenever you are looking for something particular that exists in Win32 and you are wondering where it is situated in Microsoft .NET class library.

Here is the link to this article:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/win32map.asp

Best of luck!
    

Friday, October 28, 2005

Visual Studio 2005 and SQL Server 2005 released?!?!?

Now Available to MSDN Subscribers: Visual Studio 2005, SQL Server 2005
"Final release versions of Visual Studio 2005 and SQL Server 2005 are now available for MSDN subscribers to download. Redistributable packages, such as the .NET Framework 2.0, are also publicly available. (October 27, Download)"

(from http://msdn.microsoft.com, "News This Week" section)

P.S. Guess who is now downloading Visual Studio 2005 and SQL Server 2005 from MSDN Subscribers? ;-)

The New Generation of Microsoft Certifications

Microsoft is re-orienting their view about the IT certificates for developers. There are going to be 3 major *groups* for certification: Technology, Professional and Architect. Because I am Microsoft Certified Solution Developer for Microsoft .NET, I find this information very interesting and challenging. Regarding the Technology series, there are plenty of interesting certification tracks:
Technology Specialist: .NET Framework 2.0 Web Applications
Technology Specialist: .NET Framework 2.0 Windows Applications
Technology Specialist: .NET Framework 2.0 Distributed Applications
....

I am currently specializing in distributed systems and I find most of these quite relevant for my technology orientation. One thing is known for sure - I strive to start preparing for those exams! :)

For more information about the new certifications that Microsoft provides, go to http://www.microsoft.com/learning/mcp/newgen/