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


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!

Performance

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.

Security

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.

Support

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.

Reliability

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!

Flexibility

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!

Ubuntu 9.10 Karmic Koala Officially Released

October 29, 2009 Leave a comment

Ubuntu 9.10, the Karmic Koala, has been in Beta, Alpha, then as a Realease Candidate. Today Thursday October 29th 2009 was announced that Ubuntu 9.10, the Karmic Koala, is Officially Released.

This release can be downloaded from the main website: http://www.ubuntu.com/getubuntu/download.

You can choose what suits you best, i.e. you can choose Desktop Edition or Server Edition, 32-bit version or 64-bit version. And if you intend to to upgrade from Ubuntu 9.04 you can download the so called Alternative Distribution.

Ubuntu 9.10 Highlights

Major improvements have been made to this newly released distribution with many worthy added features:

Upstart: Upstart is an event-based replacement for the /sbin/init daemon handling the start services during boot, stopping them during shutdown and monitoring them while the system is running. , for more details: http://upstart.ubuntu.com/

Linux kernel 2.6.31: One of the great thing of this kernel version is the Kernel Mode-Setting (KMS) which has a positive impact on the overall performance.

GNOME 2.28: Ubuntu 9.10 is one of the first distributions that to be shipped with Gnome 2.28. This version of Gnome has major improvements with many new added features. So, Ubuntu 9.10 will have an impressive graphical effects!

EXT4 filesystem: Ext4 was optionally offered in Ubuntu 9.04 now it’s the default in this release.

AppArmor: It is a Mandatory Access Control application, for more details here: https://help.ubuntu.com/community/AppArmor

XSplash: XSplash is replacing the previous USplash. It’s one of the contributers in improving the booting performance.

Other Impressive Features: Ubuntu One, Ubuntu Software Center, New Disk Utility, XZ compression, New software development tool, Better support for Intel graphics cards. and the many of them have been added.

So, what are you waiting for?? you go and upgrade your current Ubuntu or you’d better try if you haven’t yet!! Ubuntu has been the major buzz amongst other distributions!

Categories: Linux/Unix, Open-Source Tags:

How-To Force Thunderbird to Open Links in Firefox

September 3, 2009 43 comments

It’s been some time since I’ve been using Thunderbird as an e-mail client and it’s the favorite to me.

One thing Thunderbird let me amazed at was its incapability to open hyperlinks in the default browser (FireFox in my case). So, all this time whenever I want to open links I copy and paste them in the address bar in FireFox.  This process, switching back and forth between Thunderbird and FireFox is really frustrating and i was really annoyed at that.  How come a popular e-mail client like Thunderbird is incapable of opening links in the default browser, and of course this doesn’t make sense “Thunderbird one of the most popular e-mail clients can’t open links in the browser!!!”.

After making a little effort I found that I was wrong, and Thunderbird does open links in your default browser by simply editing the Thunderbird configurations, (same way when editing FireFox configurations, i.e. type “about:config” in the address bar).

Opening links feature can work by doing the following:

Preferences/Advanced-->Config Editor

Screenshot-about:config

Screenshot

usr_bin_firefox

In a nutshell,  add the following preferences by following the above steps:

Preference Name Value
network.protocol-handler.app.ftp /usr/bin/firefox
network.protocol-handler.app.http /usr/bin/firefox
network.protocol-handler.app.https /usr/bin/firefox

Now, Thunderbird should open links in FireFox!!

Note: If the above steps didn’t work for you then follow the steps suggested by Lennart at comment#:4 OR comment#:37

Commitment to Goals

February 21, 2009 Leave a comment

Sometimes I don’t know I feel I’m overwhelmed. I don’t know what I should do first. A lot of things I like to do. My problem I don’t focus on one task at a time. I feel I want to do them all at once. That’s why I fail to accomplish even the major tasks.

So, Goal Setting is a very crucial process to achieve goals or accomplish tasks successfully!

This is what I have found not letting me get connected with others effectively. This has been due to not setting my goals clearly, not writing them down, no drawn plans, too many goals/tasks to be accomplished, and that is not good.

Thus, I recently started reading about how to set goals prioritized to my needs, how to stay motivated and keep these qoals in my mind, what things that will help me achieve these goals.

Before reading in this regard, I was reading “The Secret“, a great book authored by “Rhonda Byrne”. When I reached the section “How to Use the Secret“, I started to ask myself: How can I really use the Secret?
A process composed of 3 steps called “The Creative Process“:

  1. Ask
  2. Believe
  3. Receive

I found that this process is somehow about setting goals. Asking yourself what you really want and write it out on a piece of paper is asking yourself “What are your Goals?”

The Secret is all about the “Law of Attraction“. It is the thoughts in your mind. Your thoughts what make your life. Good thoughts will bring you good things and vice versa.
Thus, by the time you ask yourself “What are my Goals?” you are making thoughts, and of course everyone would think of goals that will bring him the goal of goals, or as Craig Harper calls it the “Internal State” in his blog Goal Setting-The WHY behind the WHAT, such as:

Happiness, Self-Respect, Inner-Peace, Self-Confidence, Self-Esteem, Security, Attention, Recognition, Love, Connection, Popularity, Fulfillment, Joy …etc.

In other words, Internal State can be determined through feelings and emotions, the core values.

So, why haven’t I managed of achieving my goals, or accomplishing tasks required to achieve certain goals?
The answer is clearly that I did NOT use the: “Goal Setting Process

Next, I will be talking more on “Goal Setting“.
Feel free to have your comment on this.

Categories: Self-Improvement

Linux Overview

November 19, 2008 Leave a comment

A. What is Linux
Linux is a UNIX-Based Operating System, and it is well-known that UNIX operating system was designed to be scalable, reliable, modular, secure and portable with network extensibility. Thus, Linux is considered as a multi-user, multi-tasking, network-enabled operating system accessible from anywhere on the network. Multiple users can access a Linux computer remotely, each running their own individual desktop instance, all at the same time. The Linux/Unix X-Windows network enabled multi-user windowing system allows full remote access. The Linux/Unix OS was designed to support remote and secure multi-user access using SSH. This gives all Linux/Unix administrators and users a powerful flexible standard remote interface while the automobile is often the primary remote access tool of other OS administrators (e.g. Windows XP).

B. History of Linux
Linux evolved from a kernel created by Linus Torvalds when he was a student at the University of Helsinki. When Linus Torvalds was studying at the University of Helsinki, he was using a version of the UNIX operating system called ‘Minix’. Linus and other users sent requests for modifications and improvements to Minix’s creator, Andrew Tanenbaum, but he felt that they weren’t necessary. That’s when Linus decided to create his own operating system that would take into account users’ comments and suggestions for improvements. Late in 1991, Linus Torvalds had his kernel and a few GNU programs wrapped around it so it would work well enough to show other people what he had done.

C. The Kernel

The kernel is at the heart of the Linux/Unix operating system. It is responsible for enabling multi-tasking, multi-user, multi-threading, multi-processing, security, interfacing with hardware and the network. It is this kernel which Linus Torvalds developed, based on the POSIX/Unix design, which gives Linux its name. Shells, user applications and everything else interfaces with this kernel.

D. Why to Use Linux
Comparing Ms Windows Operating Systems, Linux avoids the MS/Windows “DLL libraries”, which causes Windows or its applications to fail when a newer or incompatible run-time dynamic linked library (DLL) is installed. Linux employs version numbers in its run-time shared object libraries, which can therefore coexist on the system with different versions of the same libraries. The Linux RPM package management system, for example, helps resolve dependencies and conflicts with files and libraries.
Network settings and many other MS/Windows parameters require a reboot to take effect. This is also true when MS/Windows registry settings are modified. Linux is modular enough to allow the particular service (i.e. networking) to be cycled without shutting down the entire computer. Linux also has many kernel parameters which can be set through the “/proc/” interface to allow dynamic changes to a running kernel. This greatly increases Linux system uptime and eliminates the time wasted performing system reboots.
The file system directory structure is completely configurable and not limited to drive letters such as A, C or D as a top level mounts point. Thus MS/Windows has a limit of 23 mount points.
The Linux/Unix file system is network enabled (using NFS) to extend its reach. Both directly attached storage and networked file systems are mountable at any point in the file system directory hierarchy and can be simultaneously used by all users on the system.
The use of Linux/Unix pipes, tees and redirection allow a modular approach to the design of Linux/Unix tools. They allow the capability of any tool to be extended, chaining input and output with other tools.
Linux/Unix shell scripts provide a batch scripting capability which can be scheduled, propagated to other systems or used to create new commands. Only GUI interfaces may require physical point and clicks on each system to perform a task. While some debate GUI vs. commands and scripts, Linux/Unix embraces both.
Linux is an open source code which guarantees fast development.

Categories: Linux/Unix

My Trip Into Linux

November 19, 2008 1 comment

Linux/UNIX-based systems are well suited to work as a central server for business. With Linux/UNIX-based systems, web-based applications can be served up for corporate/public use and email can be handled, easing uptime, high availability and privacy concerns. Also, printing, file services …etc can be centralized under one roof. Linux works very efficiently as an application server, providing the programs for users on thin clients. Though, doing so requires powerful hardware. With Linux/UNIX-based systems, everything need to be done is doable. Here, my report will focus on showing the necessary steps required to acquire the basics of UNIX/Linux operating systems for administering the BEA WebLogic applications server. Since, BEA WebLogic, at Aramco Company, is installed under a UNIX-Based environment.

To succeed in acquiring the basics of the UNIX/Linux OS, knowing how to administer the OS itself is strongly required. Thus, there are several steps need to be followed to master the UNIX/Linux administration, and that’s of course for getting ready to administer the BEA WebLogic. This report is aimed at the beginner Linux users who are intending about switching to Linux and want to learn how to use it. Also, it can be beneficial to intermediate Linux users.

This report starts by giving an overview of the Linux OS. This is followed by showing the steps of installing the Linux OS. Then, how the file system is organized will be described. After that, the fundamental scripts/commands for system administration will be followed. Then, basic network configurations will be shown. Finally, how to provide the essential printing services will be illustrated.

  1. LINUX OVERVIEW
  2. INSTALLATION
  3. FILE SYSTEM ORGANIZATION
  4. SYSTEM ADMINISTRATION
  5. PRINTING SERVICES

Next Blog!!

Categories: Linux/Unix