Archive for November, 2009

Winning the Contest

November 29, 2009 Leave a comment

5 days ago, I wrote an article narrating my Linux story “The Greatest Impact in My Life: Linux“. This article was part of the contest held at website. The contest was about writing an article discussing “Why Are You Thankful For Linux?

The good news is that: I was announced the WINNER of this contest! So, I’m so glad for this and I wish the best of luck for the rest of us in the upcoming contests.
Here, I would like to tell that I’m not glad because I’m the WINNER but rather I’m glad, happy, and delighted because actually I participated in a contest, I presented a work, I made an effort, I had to research, I got the acquaintance of a new community, I expanded my social network, I was connected to new fan of Linux, and countless benefits of participating in a contest!

So in case I was:

  • The winner then that would increase my self-confidence.
  • Not that winner then that would let me ask myself why I wasn’t that winner, what my weaknesses are, what the winner has that I don’t …etc. and that will encourage me to improve myself and strengthen my weaknesses! and of course, I would be so happy for the winner!

Therefore, I would like to thank the moderators who came up with the contest very much, and would like to thank every member participated and presented his/her idea in this contest.

Looking forward to more participations.

The Greatest Impact in My Life: Linux

November 23, 2009 2 comments

Before Switching To Linux

It’s been about 3 years since I started to use Linux seriously. Before switching to Linux I was trying to set up a Network Server at home starting with a home network, creating accounts for every family member along with their passwords, and then provide some network-based services to them. I tried to establish my home network and deliver the required services using Windows OS. The mission was a total failure due to the unavailability of the free tools doing the required job. Even the costly tools are useless. I really got fed up with the fact that whenever I wanted to do something then I had to pay that much of money and at the end for nothing professional. I’m specialized in Computer Science and I find the joy in developing applications and administering OSs. So, I was looking forward to having an environment enabling me to do whatever I want to do, whenever, and however. An environment providing you bundles of very flexible tools for Monitoring, Networking, Analyzing, Developing, Hosting, Securing, Virtualizing, Clustering …to name a few! Eventually, The OS that I underestimated long time ago was the whole solution for all my problems and needs. It is definitely the Linux OS!

The Linux Journey

Hence, My journey into Linux had started. This journey was a full of joyful adventure to me. Day after day while adventuring, I was exploring new ideas, fantastic applications, great solutions …etc. through which I managed to completely migrate from Windows to Linux! The Linux Journey has been of a great adventure to me. This Journey has really left high impact in my life. In this journey I found the convincing reasons to abandon Windows for ever and not to get back to it whatsoever!

Why Should I Be thankful For Linux

Thus, by my turn I have to very grateful and thankful to the Linux OS, to what it has been giving to me, to those who have been contributing in delivering it to the community at its best and highest potential. Therefor, I am very thankful for many reasons all of which time won’t be helping to mention but to list the most obvious ones for which everybody should be thankful to Linux:


Open Source, which everyone should be grateful for, is the concept of sharing the technical information with the community. When talking about an open-source software, then this software according to the Open Source Definition must comply with 10 criteria, 4 of them to me make Open Source Softwares rock:

  1. Free Redistribution
  2. Source Code
  3. Derived Works
  4. Distribution of License

An example of Open Source Licenses is the the well-known GPL, GNU General Public License, under which Linux OS is distributed. So, Linux really rocks because it is an open-source OS!


Linux performance has been one of the major contributing parts through which I was inspired to migrate to it. Linux has been of high performance in various aspects, to mention some:

  1. Kernel: No one can argue that Linux actually got its power from its kernel. Linux Kernel features multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6. And that’s according to the main Kernel website.
  2. Filesystem: Ext3 is the prominent Linux filesystem featuring the Journaling, up to 2TiB file Size limit, fragmentation is not that much of worry. Ext4 has just been out and is becoming the default in some distribution such as Ubuntu 9.10 (Karmic Koala) and it features the extents, Persistent pre-allocation, Delayed allocation, Journal checksumming, Online defragmentation, Faster file system checking, Multiblock allocator, up to 16TiB file size limit …etc. With all these features, Ext3/Ext4 have been strong competitors to other filesystems such as FAT32 and NTFS.
  3. Processing: Just to mention the different types of computing that high performance is of high priority and Linux was chosen to perform these types of computing. So, we recently heard about Cloud Computing, Parallel Computing, Distributed Computing, Grid Computing, HPC …etc.


Viruses, spywares, malwares ..etc. Huh! what are those? Sorry, I’m a Linux user, never heard about those before! Ooh, I’ve just remembered! they are Windows-related technologies. Sorry, I mean malwares. If we look at Security carefully then Security is not about installing a firewall and it’s not a product. Security is a policy, methodology, and an ongoing process. When it’s said that Linux is very strong in Security and unbreakable then because Linux is implementing the security policy itself in its core. Besides, Linux Authentication and Permission policy is what makes viruses impossible to have their effect on the system. So yes, Linux doesn’t need an ant-virus! Furthermore, Not having a running anti-virus software has also a huge positive impact on the system performance.


Linux is a full-blown, feature-rich, and extremely powerful OS for free. Free doesn’t mean that you won’t get the required support. On the contrary, people working on it are already making a huge effort to deliver it, then how come you don’t get the support from them unless they want to get their effort to vanish and fade out. Actually, providing the support would help them harness the system and that’s by finding solutions to the problems that users complain about. One way to ease the support process is the centralized repositories enabling you to install/update all packages you need from one place, and this by its turn relieves you of getting a headache and distracted in finding the the packages you want.


Linux is reliable to such a degree that you don’t need to frequently restart or shutdown the machine in case of errors or crashes, almost no hangs, very robust, fault-tolerant, and stable. I remember working in a department whose main mission is providing high Availability of the deployed applications (Business Continuance). Guess what? A Unix-based infrastructure was used to provide such a highly available environment!


A very fantastic feature of Linux is its Customizability to your needs. So, you can use it as a:

  1. Desktop: you can choose from different Desktop Environments (Gnome + KDE), edit and play multimedia (MPlayer, VLC, GIMP, Inkscape, Blender), have your office suite (OpenOffice), play games, browse the Internet (Firefox), Internet Messengers(Pidgin, Empathy), manage your files …etc.
  2. Server: Linux is the optimal OS to run as a Network Server(web server,ftp server, DNS server, e-mail server, file sharing, …etc.), Database Server, Monitoring. An important point needs to be mentioned here is that you need to master the use of the Shell through which I found the real flexibility I was looking for long time ago
  3. Development Environment: which is a combination of both Desktop and Server environment. So install whatever desktop applications you want, set up the type of servers fitting your needs, and have the required tools for development such as IDEs (Eclipse, NetBeans, Quanta), UML Tools (ArgoUML, Umbrello), Programming Languages(C/C++, Java), Frameworks (Qt, GTK), Scripting (PHP, Perl) … you name it.

Last But Not Least

As I said before, time won’t allow me to surround all the reasons why Linux is an ultimately optimal OS, but I tried to express indirectly that Windows has been a major obstacle to my productivity and I wish I had known Linux long time ago! You go to any IT-related company whose infrastructure is of high performance then with no doubt you will find that they use a Unix-based environment to run their business, and you can rely on Linux to run your business.

Linux has been embedded in ADSL modems and smart phones. Furthermore, Dell Company has already started shiping some laptops with Linux as the default OS! So, Why should I bother myself about a buggy, costly, virus-targeted, insecure, frequently crashing OS if there are already OSs capable of achieving the Business Level performance at home and for free!

Hereby, I would like thank those, the Open Source Community, for their great efforts, sincere endeavors, and continous support which greatly contributes in helping the community from naive users to the professional ones!

Design Patterns In Object-Oriented Software

November 3, 2009 6 comments

In Computer Science, a Design Pattern is a way of having a solution of a certain reoccurring problem. This solution is usually the best practice to solve that problem so there is no need to invent a new solution unless it appeared eventually that it is ultimately necessary to have a new best practice solution to that problem.

In other words, Design Patterns are one approach of the Software Reuse concept.

A Design Pattern is usually aimed at software components design in the software engineering. This concept became more popular after the book: Design Patterns: Elements of Reusable Object-Oriented Software. This book was written by 4 authors who are referred to as the Gang of Four or GoF. This book discusses 23 software design patterns that I think every developer must know so they can come up with good software design in a timely-efficient manner for their intended software system. According to the GoF book, these patters were classified by 3 categories: Creational Patterns, Structural Patterns, and Behavioral Patterns.


Creational Patterns

Creational Patterns provide the best way in which an object can be instantiated/created that can suit certain situations.

  1. Abstract Factory
  2. Builder
  3. Factory Method
  4. Prototype
  5. Singleton


Structural Patterns

Structural Patterns define the best ways to identify relationships between entities.

  1. Adapter
  2. Bridge
  3. Composite
  4. Decorator
  5. Facade
  6. Flyweight
  7. Proxy


Behavioral Patterns

Behavioral Patterns define the best ways to communicate between objects.

  1. Chain of Responsibility
  2. Command
  3. Interpreter
  4. Iterator
  5. Mediator
  6. Memento
  7. Observer
  8. State
  9. Strategy
  10. Template Method
  11. Visitor


That sums up 23 classic design patterns the I will try to pass through one by one to illustrate them in details and add that to my experience!

Please, read comment# 6

Your comments are highly appreciated!