How-To Set Up SVN and Trac
What are SVN and Trac?
SVN: is a free/open-source Version Control System. Subversion (SVN) manages files and directories over time. Files are placed into a central repository and every change every made to the files or directories are remembered.
Trac: is an enhanced wiki and issue tracking system for software development projects. It provides a Graphical front end to SVN where diffs in files can be obtained. It cannot update the SVN repository. It simply provides a Project Management interface, wiki, ticketing system, and SVN front end.
Installation
sudo apt-get install apache2 sudo apt-get install subversion sudo apt-get install libapache2-svn sudo apt-get install trac
Setting Up SVN and Trac
To make things simple and flexible in case you want to make some changes in the future, configurations will be set in individual files, i.e. as virtual sites, then they will be enabled/disabled when needed.
1-Creating SVN Repository:
cd /var sudo mkdir MyProjects cd MyProjects sudo mkdir svn sudo svnadmin create SVN_Project_01
sudo chown -R www-data.www-data /var/MyProjects
2-Setting Up Trac
sudo trac-admin Trac_Project_01 initenv -->Project Name [My Project]> -->Database connection string [sqlite:db/trac.db] (choose defaults) -->Repository type [svn]> -->Path to repository [/path/to/repos]> /var/MyProjects/SVN_Project_01
sudo chown -R www-data.www-data /var/MyProjects
sudo trac-admin /var/MyProjects/trac/Trac_Project_01 permission add username MILESTONE_ADMIN REPORT_ADMIN ROADMAP_ADMIN TICKET_ADMIN TRAC_ADMIN
Setting Up Apache:
At this stage, we need to secure the web access to the repository so only authorized persons who can modify it, enable the SSL mode so connection is encrypted, and modify apache configurations accordingly:
Securing Web Access
- Enable the Authenticated Access by adding a username and password:
sudo htpasswd -cb /etc/apache2/passwords username password
- Enabling the SSL Module:
Refer to this blog: How-To Enable SSL on Apache2 Server
Trac Configurations
Note: You will need to download the Trac package and link to the cgi-bin/trac.cgi and cgi-bin/trac.fcgi in the configuration.
Create the following files or you may create one of them:
Track through CGI
cd /etc/apache2/sites-available/ cat > svn.cgi
##SVN
<Location /MyProjects/svn/SVN_Project_01>
DAV svn
SVNPath /var/MyProjects/svn/SVN_Project_01
AuthType Basic
AuthName "Subversion Repository - SVN_Project_01"
AuthUserFile /etc/apache2/.htpasswd
# <LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
SSLRequireSSL
# </LimitExcept>
</Location>
##Trac
ScriptAlias /MyProjects/trac /usr/local/Trac-0.11.6/cgi-bin/trac.cgi
<Location /MyProjects/trac>
SetEnv TRAC_ENV_PARENT_DIR /var/MyProjects/trac
</Location>
<Location "/MyProjects/trac">
SSLRequireSSL
AuthType Basic
AuthName "Trac Login for Projectname Website"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
<Location "/MyProjects/trac/Trac_Project_01/login">
SSLRequireSSL
AuthType Basic
AuthName "Trac Login for Projectname Website"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
Track through FCGI
cd /etc/apache2/sites-available/ cat > svn.fcgi
##SVN
<Location /MyProjects/svn/SVN_Project_01>
DAV svn
SVNPath /var/MyProjects/svn/SVN_Project_01
AuthType Basic
AuthName "Subversion Repository - SVN_Project_01"
AuthUserFile /etc/apache2/.htpasswd
# <LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
SSLRequireSSL
# </LimitExcept>
</Location>
##Trac
ScriptAlias /MyProjects/trac /usr/local/Trac-0.11.6/cgi-bin/trac.fcgi
##fastcgi
#FastCgiConfig -initial-env TRAC_ENV=/var/MyProjects/trac/Trac_Project_01
#FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/MyProjects/trac
##fcgi
DefaultInitEnv TRAC_ENV_PARENT_DIR /var/MyProjects/trac
#<Location "/MyProjects/trac">
##fastcgi
#SetEnv TRAC_ENV_PARENT_DIR "/var/MyProjects/trac"
#SetEnv TRAC_ENV "/var/MyProjects/trac/Trac_Project_01"
#AddHandler fastcgi-script .fcgi
#AuthType Basic
#AuthName "Trac Repository - Trac_Project_01"
#AuthUserFile /etc/apache2/.htpasswd
#Require valid-user
#SSLRequireSSL
#</Location>
<Location "/MyProjects/trac/Trac_Project_01/login">
SSLRequireSSL
AuthType Basic
AuthName "Trac Login for Projectname Website"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
Track through FastCGI
cd /etc/apache2/sites-available/ cat > svn.fastcgi
##SVN
<Location /MyProjects/svn/SVN_Project_01>
DAV svn
SVNPath /var/MyProjects/svn/SVN_Project_01
AuthType Basic
AuthName "Subversion Repository - SVN_Project_01"
AuthUserFile /etc/apache2/.htpasswd
# <LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
SSLRequireSSL
# </LimitExcept>
</Location>
##Trac
ScriptAlias /MyProjects/trac /usr/local/Trac-0.11.6/cgi-bin/trac.fcgi
#FastCgiConfig -initial-env TRAC_ENV=/var/MyProjects/trac/Trac_Project_01
FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/MyProjects/trac
#DefaultInitEnv TRAC_ENV /var/MyProjects/trac/Trac_Project_01
<Location "/MyProjects/trac">
#SetEnv TRAC_ENV_PARENT_DIR "/var/MyProjects/trac"
#SetEnv TRAC_ENV "/var/MyProjects/trac/Trac_Project_01"
AddHandler fastcgi-script .fcgi
#AuthType Basic
#AuthName "Subversion Repository - SVN_Project_01"
#AuthUserFile /etc/apache2/.htpasswd
#Require valid-user
#SSLRequireSSL
</Location>
<Location "/MyProjects/trac/Trac_Project_01/login">
SSLRequireSSL
AuthType Basic
AuthName "Trac Login for Projectname Website"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
Track through Python
cd /etc/apache2/sites-available/ cat > svn.python
##SVN <Location /MyProjects/svn/SVN_Project_01> DAV svn SVNPath /var/MyProjects/svn/SVN_Project_01 AuthType Basic AuthName "Subversion Repository - SVN_Project_01" AuthUserFile /etc/apache2/.htpasswd # <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user SSLRequireSSL # </LimitExcept> </Location> ##Trac <Location /MyProjects/trac> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/MyProjects/trac PythonOption TracUriRoot /MyProjects/trac #SSLRequireSSL #AuthType Basic #AuthName "Trac Login for Projectname Website" #AuthUserFile /etc/apache2/.htpasswd #Require valid-user </Location> <Location "/MyProjects/trac/Trac_Project_01/login"> SSLRequireSSL AuthType Basic AuthName "Trac Login for Projectname Website" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Location>
After that, you will need to enable ONLY one of them:
sudo a2ensite svn.cgi
Or
sudo a2ensite svn.fcgi
Or
sudo a2ensite svn.fastcgi
Or
sudo a2ensite svn.python
Finally, reload apache server:
sudo /etc/init.d/apache2 reload
Try to open these links:
https://hsmakdell/MyProjects/svn/SVN_Project_01
https://hsmakdell/MyProjects/trac
Next
You will need to configure your prefered IDE with the created SVN repository if it supports the synchronization with SVN repositories. In my case as a Java/Java EE Developer, I’ ll refer to the most known open IDEs which are: NetBeans and Eclipse. SVN is just a little part of them to control versioning!
Hence, this would help you get a well managed and organized development environment!
___________________
References
https://help.ubuntu.com/community/UbuntuTracHowto
http://wiki.kartbuilding.net/index.php/Trac_and_SVN
http://trac.edgewall.org/wiki/TracGuide
How-To Enable SSL on Apache2 Server
Why to Enable SSL Mode?
Without digressing too much in the Security topic, SSL (Secure Socket Layer) is a cryptographic protocol that provides security for communications over networks such as the Internet. Therefore, you will need such a protocol to protect your connection with the web server by encrypting the information being exchanged. So, if a sniffer drops into the connection then that information is not compromised. e.g. remotely logging in to your machine requires from you to submit your username and password. If the connection is not encrypted using one of the cryptographic protocols then such must-be-kept-secret information is exposed and imagine the impact on your system if such info was in somebody’s hand!
So, let’s discuss the steps of how to enable the SSL mode:
- Generate a Self-Signed Certificate
cd /etc/apache2/ sudo mkdir certs cd ./certs sudo openssl req -new -x509 -nodes -days 365 -out server.crt -keyout server.key
- Encrypt the Private Key (Optional)
The way of doing it is by passing a “passphrase“:sudo openssl rsa -des3 -in server.key -out server.key
Note: I tend not to do this step due to the fact that when Apache2 is restarted you will be asked to type the passphrase again. Therefore, I just change the key and certificate files permission so they are only read by Apache2!
- Enable the SSL Modules
You can either enable the SSL Module by running these commands:sudo a2enmod ssl sudo /etc/init.d/apache2 restart
OR if you are curious about what it does you can do the following steps instead:
cd /etc/apache2/mods-enabled sudo ln -s /etc/apache2/mods-available/ssl.load ./ sudo /etc/init.d/apache2 restart
- Create the SSL Site
sudo pico /etc/apache2/sites-available/MySSL
################################## ##-->@Author Husain Al-Khamis<--## ################################## <VirtualHost "*:443"> ServerAdmin webmaster@localhost DocumentRoot /var/www ##-->Me<--## SSLEngine on SSLCertificateFile /etc/apache2/certs/server.crt SSLCertificateKeyFile /etc/apache2/certs/server.key ##-->Me<--## <Directory "/"> Options FollowSymLinks AllowOverride None </Directory> <Directory "/var/www/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> - Listen on Port 443
Open ports.conf:sudo pico /etc/apache2/ports.conf
And add the following:
<IfModule mod_ssl.c> # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here NameVirtualHost *:443 Listen 443 </IfModule>
- Enable the SSL Site
Same as in step# 3, you can either perform these commandssudo a2ensite MySSL sudo /etc/init.d/apache2 restart
OR alternatively, you can do it manually in this way:
sudo pico /etc/apache2/apache2.conf
And add the following to the end of it:
# Include the secured host configurations: Include /etc/apache2/sites-available/MySSL
Then, Restart Apache2:
sudo /etc/init.d/apache2 restart
So, have a secure web surfing!
Celebrating Christmas OR Commemorating Ashura

The past 3 weeks, I was off-line for most of the time. “We are the Shiite Muslims community practice what is called the Ashura Rituals in the 1st month of every lunar/Islamic year” and I had to dedicate most of the time to this annual occasion.
I would say that usually everyone celebrates the new year with happiness and joy, but we celebrate our new year in every year with renewing the remembrance of martyrdom of Imam Hussayn ibn Ali (pbuh), the grandson of the holy prophet (pbuh&hf), what happened to him and his family in Karbala, learning life lessons from this tragedy, and understand how blood defeated sword in that unforgettable day, the day of Ashura in Kerbala…
We believe in Jesus Christ (pbuh) and in every prophet was sent before Jesus Christ (pbuh). Actually, one condition to be a Muslim is not only to believe in our holy prophet Muhammed (pbuh&hf) but also to believe in all prophets sent before him and one of them is Jesus Chris (pbuh). So, Jesus Christ (pbuh) is not only for the Christians he is for us too the Muslims.
Christians celebrate the Christmas day at the end of every Gregorian year, and It’s always our duty to congratulate the Christians celebrating the Christmas day, the day in which Jesus Chris (pbuh) was born by Virgin Mary (pbuh). So, it is commemorated with happiness.
But due to the fact that lately the end of Gregorian year coincided with the beginning of Islamic/lunar year it wouldn’t be appropriate by us to celebrate with our brother Christians the Christmas day.
I would like to be deeply grateful to the Christians who condoled with us on the occasion of the Martyrdom of Hussayn ibn Ali (pbuh), the grandson of the prophet (pbuh&hf), and announced the cancellation of celebrating the Christmas day.
Now my wonder from the people claiming they are with the Islamic Nation and they have just announced that Ashura Day, the day in which Imam Hussayn ibn Ali (pbuh) the grandson of the prophet (pbuh&hf) was killed, must be the day of happiness and celebration.
When comparing those people to the Christians who actually have the official Christmas day and they have their right to celebrate the day, My wonder even becomes higher when they have just announced the cancellation of celebrating the Christmas day just to condole with us in the occasion of Ashura that coincided with the Christmas events.
How about Kofi Annan, the UN secretary, when he stated: “The words of Ali ibn Abi Talib, ‘O Malik! The people are either brothers in religion or your equal in creation’ must be adhered to by all organisations and it is a statement that all humanity must embrace.”
At the end, we have those claiming Islam, celebrating the days, in which grandsons of the holy prophet were killed, with happiness and joy, not only this but also killing people, Muslims and non-Muslims, around the world in the name of Islam aiming just to deform its real image. And, on the other side, we have the non-Muslims who knew what the real image about Islam is and incorporated some of its instructions in their every day life.
How-To Fix Flash Incapability of Recognizing Mouse Clicks


Upon upgrading to Ubuntu 9.10 Karmic Koala, some including me noticed that any Flash-containing website like YouTube.com then you can’t click on that Flash object. In other words, Flash is not recognizing mouse clicks.
It appeared that this was a bug that was reported here.
A workaround for such a bug has been put in place. So here are the workarounds as the official bug tracker suggested:
- WORKAROUND 1: Disable compiz
- WORKAROUND 2: Remove flashplugin-nonfree / flashplugin-installer and install from adobe
- WORKAROUND 3, and this the one worked with me:
- Open a terminal, or you can press Alt + F2, and type
- gksudo gedit /usr/lib/nspluginwrapper/i386/linux/npviewer
- Then add “export GDK_NATIVE_WINDOWS=1″ before the last line of text.
- Save.
- Restart your FireFox, or any application uses Flash.
So, This is it as far as I know!
How-To Deploy Roller 4 on GlassFish V3
I’ve just started blogging seriously. Many free blogging tool providers are available. Widely known are the WordPress and Blogger. For some reasons, I decided to use WordPress as my main blogging tool.
I’ve given some thoughts to start developing a Web-based Blogging Tool just to have some hands-on experience on the Web Development and Design process. Besides, as I advocate the Open Source Community I would like to make a humble contribution to this great community.

I was wondering which platform on which I should rely to start developing this project. From my notice, most web applications nowadays are developed in PHP. PHP has been used very widely by the public. Well, PHP is a very cool scripting language and I’ve always looked forward to learning it. But, as it is a top priority to my career path is to have a solid development background using Java/J2EE technology, I’ve decided to start a project for developing a Java Web-based Blogging Application. Fortunately, somebody already started developing such a project long time ago, since 2002. This application is sponsored by Apache Software Foundation and is called Roller Weblogger.

So, trying to make Roller up and running, we need to download a Java Web Server to be the deploying environment for Roller. You can download Tomcat and use it as a Web Server to deploy Roller. Refer to this Installation Guide to deploy Roller on Tomcat.

In my case, I decided to use GlassfishV3 due to the features and frameworks bundled with. Here, I’ll explain step by step how to install GlassfishV3, deploy Roller on it, and avoid a possible problem that might hinder the deployment process!
So, let’s start!
STEP 1: GlassfishV3
STEP 1.1: Download GlassfishV3
Download GlassFishV3 Prelude or Preview. Compare between them here.
Refer to Comment#:1
STEP 1.2: Install/Configure GlassfishV3
Install GlassfishV3 by simply running the script. It is not a big deal just follow the instructions!
STEP 1.3: Start GlassfishV3
Go to where Glassfish binary files are:
cd $GF_HOME/glassfish/bin
- To start the domain:
./asadmin start-domain
- To stop the domain:
./asadmin stop-domain
Or alternatively, I prefer to start/stop the server by running these: “log will be output to the screen, so you can monitor it“
- To start the server:
./startserv
- To stop server:
./stopserv
Now, you can reach the Admin Console at:
For further details, have a look at the GlassfishV3 Quick Start Guide!
STEP 2: MySQL JDBC Connection
STEP 2.1: Download Connector/J
You will need to download the MySQL JDBC Connector to allow Roller interact with the MySQL Database Server. Here, I used the MySQL Connector/J 5.1.10.
Place the Connector/J in:
cp mysql-connector-java-5.1.10-bin.jar $GF_HOME/glassfish/lib/
STEP 2.2: Provide JNDI
In GlassfishV3:
- Create JDBC Connection Pool: (Admin GUI -> Application Server -> Resources -> JDBC -> Connection Pools)


- Create JDBC Resources (Admin GUI -> Application Server -> Resources -> JDBC -> JDBC Resources)

Restart Glassfish and Ping the JDBC Connection!
STEP 3: Roller 4
STEP 3.1: Download Roller
Download Roller from here.
For more detailed information about installation refer to the Roller Installation Guide!
STEP 3.2: Create Database
mysql -u root -p password: *****
create database rollerdb; grant all on rollerdb.* to scott@'%' identified by 'tiger'; grant all on rollerdb.* to scott@localhost identified by 'tiger'; quit
STEP 3.3: Create roller-custom.properties
To connect to the MySQL database you should create the roller-custom.properties file in either 2 ways “as far as I noticed“:
- Roller will interact with database Directly:
installation.type=auto database.configurationType=jdbc database.jdbc.driverClass=com.mysql.jdbc.Driver database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb database.jdbc.username=scott database.jdbc.password=tiger mail.configurationType=properties mail.hostName=smtp-server.example.com mail.username=scott mail.password=tiger
Place it in:
mv roller-custom.properties $ROLLER_DIR/WEB-INF/classes/
- Roller will interact with database through the JNDI:
installation.type=auto database.configurationType=jndi database.jndi.name=jdbc/rollerdb mail.configurationType=jndi mail.jndi.name=mail/Session mail.configurationType=properties mail.hostName=smtp-server.example.com mail.username=scott mail.password=tiger
Place it in:
mv roller-custom.properties $ROLLER_DIR/WEB-INF/classes/
Make sure that the following Descriptor is placed in this directory:
ls $ROLLER_DIR/WEB-INF/sun-web.xml
STEP 3.4: Deploy Roller
Deployment must be easy and straightforward too from the Admin GUI, or You can place the $ROLLER_DIR in the autodeploy directory if you want just to try it out.
STEP 4: A Problem To Be Avoid
I only got Roller and GlassFishV3 working together by disabling the following JPA configuration and setting its flag to false and then adding it to “roller-custom.properties“:
openjpa.QueryCompilationCache=false
Enjoy blogging
How-To Fix libstdc++5 Dependency Problem in Ubuntu 9.10

Upon upgrading to Ubuntu 9.10 I noticed that some applications won’t run any more and the problem was apparently related to the dependency library libstdc++5. This library was deprecated and libstdc++6 was used instead. It appeared that the removal of this library wasn’t wise, and it was reported as a bug which can be found here. You might see an Error Message like this when try to run an application depends on the missing library:
“Error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory“
To me, the packages that were affected are:
- Thunderbird (downloaded from Mozilla website)
- GWT (Google Web Toolkit) in the Hosted Browser mode
A workaround of this bug has been put in place. Mine is almost similar:
Since libstdc++5 was discontinued in Ubuntu 9.10 (Karmic Koala) then we need to download the Ubuntu 9.04 (Jaunty Jackalope) package.
Note: You will need the i386 package if you use Ubunut_i386, and you will need both i386 & amd64 packages if you use the Ubuntu_amd64 as there are i386 applications run under the amd64 architecture!
For Ubuntu 9.10 i386
Download the i386 Jaunty libstdc++5 package.
and simply install it by double click on it, or through the command line you can run this:
sudo dpkg -i libstdc++5_3.3.6-17ubuntu1_i386.deb
For Ubuntu 9.10 amd64
As I said before we need to download both the i386 & amd64 packages:
The amd64 package:
as simple as we did for Ubuntu_i386.
Download the amd64 Jaunty libstdc++5 package.
and simply install it by double click on it, or through the command line you can run this:
sudo dpkg -i libstdc++5_3.3.6-17ubuntu1_amd64.deb
The i386 package:
Download the i386 Jaunty libstdc++5 package.
Here, we need to extract the libstdc++5 library ourself as this deb package is an i386 one. So, if you try to double click on it or install from the command line it will give you an error message “Wrong architecture ‘i386′”
The way to solve this is to extract the libraries yourself and place them in the correct directory. Starting from the director where the package has been downloaded to, run the following:
sudo dpkg-deb -x libstdc++5_3.3.6-17ubuntu1_i386.deb ./tmp sudo cp ./tmp/usr/lib/* /usr/lib32/
Up to here, this must solve your problem with the libstdc++5. Stick with it till Ubuntu community find a solution for this bug.
Good luck!
Winning the BeginLinux.com Contest
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 BeginLinux.com 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 BeginLinux.com 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 Decision To Quit My Job
… And people are still complaining about proprietary solutions!!
Yesterday, I run across another blog titled with How Microsoft cost me my job at the IBO.
Obviously, that blog was talking about the father of the Proprietary Solutions Microsoft and how that person had to quit the job just because a proprietary software was used!
Hereby, I couldn’t have kept myself silent and I took the chance to share my similar story. Here is my reply to him:
I understand the compulsion feeling you are in! I was in such feeling before. So, I’m gonna share with you mine:
You remind me of the company I worked for. The main business line of this company was providing SAP-based Solutions. I know SAP Company is the 2nd largest IT company! Well, as their website claims. I had my training on some of their solutions like SAP NetWeaver, SAP ERP, and SAP CRM systems. My work lasted for 4 months. During these 4 months I tried to enforce myself to swallow their methodology in delivering their solutions. What happens after the 4 months is that I completely threw up, and even put my finger in my throat to make sure I throw up every bit of their technology! My work performance was very superior to my boss. Unfortunately for them, I decided to quit. My boss was begging me to stay but no avail. I was so stubborn! Of course I had my reasons why not to stay and I discussed that with my boss and he was very convinced about my decisions. The reason is simply that SAP is a proprietary technology aimed at only enterprise level. If you wanna learn anything then you have to pay. Even the overview courses we were enrolled in was payed for, WTF! The very funny thing about their solutions is that they are developed using their proprietary language ABAP which needs their NW platform to run the developed applications, and of course no way to buy their platform. So, one of situations to which I’ve given too much thoughts is:
What would happen if I was kicked out of this company whose main business line is SAP Solutions?
my answer to this question would be:
- I won’t have the enough money to buy their solutions for self-training purposes
- I won’t have the enough money to learn their costly technology
- I won’t be able run my own business from home through their solutions
- Furthermore, all I learn would be useless if no company in same area would hire me
Therefore, after giving it careful thinking and consideration, I decided not to go with SAP Solutions. Actually, not to go with any proprietary solutions. Since then, I decided to go with the Open-Source road which will lead you to many solutions even better than the proprietary ones. As an example of this, the Ubuntu OS has enabled me to abandon Windows for ever, and I’ve just written a post on this “The Greatest Impact in My Life: Linux”
Now, How strong my situation is gonna be if I rely on Open-Source solutions?
Answer would be very astonishing:
- Open-Source solutions are free to use, redistribute, and modify
- My technical skills would improve dramatically
- I can sell the modified version
- Open-Source solutions are found at different levels: home, small, mid-size, and enterprise businesses level
- Free tutorials
- … To name a few!
Moreover, I endorse platform-independent technologies like: C/C++, Java/J2EE, PHP …etc.
So, let the proprietary solutions and platform-specific ones be enclosed on themselves, and we will have our freedom to share with everyone and come up with the best solutions!
The Greatest Impact in My Life: Linux
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:
- Free Redistribution
- Source Code
- Derived Works
- 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:
- 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.
- 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.
- 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:
- 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.
- 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
- 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-Orientd Software
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.
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
Structural Patterns
Structural Patterns define the best ways to identify relationships between entities.
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Behavioral Patterns
Behavioral Patterns define the best ways to communicate between objects.
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- 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!
Your comments are highly appreciated!





Recent Comments