I always have trouble finding and installing the google chrome dictionary plugin, therefore, I'm posting this link as a reminder:
https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja?hl=en-US
Monday, November 29, 2010
The Exercise Every Developer Needs
Exercises for tendonitis and carpal tunnel:
http://www.youtube.com/watch?v=hUyMNyrOHJQ
Before its too late.
http://www.youtube.com/watch?v=hUyMNyrOHJQ
Before its too late.
Tuesday, November 09, 2010
wxWidgets versus Qt?
Both are good frameworks for writing a C++ desktop application. By the way, Qt is used in Google Earth and the Skype application.
For a wonderful comparison between wxWidgets and Qt, read the following:
My final conclusion, Qt wins.
Wednesday, November 03, 2010
Sticky Notes Utility and More...
I've been used to using ATNotes, which is a sticky notes utility that was very light weight but had some frustrations. I'm telling you, writing your todo's on a sticky note on screen is an excellent way to keep your mind fresh and at the same time keeping all your TODOs as a reminder.
However, some frustrations with ATNotes bothered me, so I've started looking for alternatives. Usually I do this be searching on google for "ATNotes alternativeto" (without double quotes), which displays the alternetiveto.net site.
Luckily, I found a wonderful alternative which is named Stickies. I've installed it and found it great, simple, lightweight and doesn't interfere with your system or registry.
If you still need more alternatives you can check the list on http://alternativeto.net/software/atnotes/.
More interestingly, I found that the company that made this utility also made some interesting utilities which I name a few here:
1. Stickies (The already mentioned sticky note utility).
2. ZBar (multiple task bars for multiple screens)
3. Bart (A wonderful simple backup utility).
4. Caffeine ( A utility that simulates a key press every one minute to avoid your PC from stand by or screen saving).
Sunday, October 03, 2010
Where to find good images for your website?
A good friend of mine named Maximos, originally Rami the 17th gave me this link which is excellente:
Don't look any further.
Tuesday, September 28, 2010
Wonderful Tutorial on CSS Layout and Positioning
http://www.brainjar.com/css/positioning/default.asp
Its a five page tutorial that I found really helpful.
Wednesday, August 25, 2010
Catching up with Nuxeo: Switching from Python to Java
I recently read this article on infoq.com. Summarizing the findings in this post, here's the story.
Nuxeo - an ERP company - took the decision on 2006 to port their core products from Python to Java. Infoq recently got hold of their CEO to discuss how the conversion went and also discussed the merits of static very dynamic typed languages since Nuxeo now tried both.
Summary of reasons to convert to Java
1. The availability of components and frameworks in Java like Hibernate, Lucene and Eclipse makes it much easier to build applications. Although they admint Python is great, it wasn't suitable for the platform they were envisioning to build.
2. The range and depth of the Java libraries was one of the main drivers for switching to Java. The Nuxeo product is using 100 libraries in total, including jBPM, OpenSocial, OAuth for widget inclusion, Apache Shindig, Apache Chemistry for CMIS, JXA-RS, JPA, JDBC, JTA, JSF, Seam and RichFaces.
3. Build system facilities based on Maven, Hudson, JUnit. Supporting Jetty, Tomcat, JBoss and bare OSGi.
4. Market Reasons. The market for java applications is huge. All companies know Java. Most already have java applications running. A lot of companies require Java for their IT. All system integrators have extensive java knowledge.
5. Community Reasons. The community is again, huge. The Java Apache community is tremendous. There are big annual conventions around Java (JavaOne, ApacheCon, Devoxx, Jazoon, etc.) and hundreds of small ones.
6. Specification Reasons. Many technologies in the Java world are based on published specifications that have many implementations and reference implementations promoting clean specs.
7. High availability of tooling for Java. The VM itself, debugging tools, IDEs, monitoring, performance benches, etc.
The results of the new Nuxea java based platform
1. Performance scales of about 10 to 100 times more.
2. In terms of features, its around 4 times the scope of what had been.
3. In terms of developer compatibility and ease-of-use, its about the same, but with alot more tooling experience.
4. Doubling or even tripling the capabilities of the old platform.
How customers reacted?
1. 80% were okay with the change.
2. For those organizations that didn't want to move, the community stepped forward to ensure their ongoing support (the open source advantage).
Merits of Python versus Java (Merits of Dynamic versus Static typing)
Merits of Python and Java is a subset of the merits of Dynamic versus Statically typed languages. Lets see what both sides have to say.
Advocates of Dynamyic types languages argue that they are faster to code in, since the languages are inherently more expressive.
Advocates of Static typed languages argue that time saved in development using Dynamic languages is time lost in testing. This is because the lack of type information makes testing harder. In addition, dynamic languages are generally slower than statically typed languages and thus tend to be more expensive to scale.
Nuxeo Opinion on Static and Dynamic Languages
In Nuxeo's case, they tried both dynamic and static languages to write their large scale product that consists of thousands of classes and hundreds of thousands of lines of code. Nuxeo's CEO says: Without a doubt, statically typed languages are better for such applications and yield many benefits giving you:
1. An IDE with proper autocompletion
2. An IDE that knows all the uses of a given method or field in all of your classes thus vastly improving search and refactoring.
3. Many compile time checks.
4. Tools that find patterns and bugs in your code.
5. Tools that extract documentation based on the actual types in your code. This is because a statically typed language will explicitly indicate the type of an argument passed to a function. This is rarely a hindrance and always good documentation. Dynamism on the other hand doesn't bring you anything except for less typing of the argument types.
What about the advantages of dynamic languages?
IMHO, dynamically typed languages are useful only for tiny applications or fast written scripts that perform different tasks.
Another interesting thought that comes up when debating dynamism versus static languages, is an analogous subject that has sparked myriads of debates in the United States when Obama's administration applied a new set of regulations on businesses (which in some people's opinions is freedom limiting).
I've spotted this interesting analogy from comments placed by the infoq.com visitors on the same article discussing the new regulated economy.
Chat Abbreviations and IMHO
Nowadays, people are using chat abbreviations very frequently to save time and typing along with emoticons.
What surprised me recently is a very popular abbreviation used widely on the internet that I never read or used before. Its "IMHO", from the letters used and the "O" at the end, I first thought that it is an international organization of some type. But when I looked it up, I discovered that what IMHO really stands for is:
"IMHO = In My Humble Opinion"
So you can now safely add IMHO to your set of chat abbreviations including LOL, BRB, NP, BR.
Wednesday, July 14, 2010
How BP Handles a Coffee Spill
Simulating how BP handled it's oil spill on a smaller scale scenario ... a coffee spill.
http://www.youtube.com/watch?v=2AAa0gd7ClM&feature=fvhr
Disclaimer: If you didn't follow the news then you wont get it.
http://www.youtube.com/watch?v=2AAa0gd7ClM&feature=fvhr
Disclaimer: If you didn't follow the news then you wont get it.
Sunday, July 11, 2010
A good Drupal alternative?
Frankly, I'm quite fedup with Drupal.
My plan is to find an alternative. And here's my research findings.
I bumped into the following excellent CMSs that I would like to try out:
1. Concrete 5 http://www.concrete5.org/ (PHP using Zend Framework)
2. BrowserCMS http://www.browsercms.org/ (Ruby on Rails)
3. Silver Stripe http://www.silverstripe.org/silverstripe-cms/ (PHP using Sapphire)
4. modx http://modxcms.com/download/ (PHP)
5. Frog CMS http://www.madebyfrog.com/ (PHP)
6. MiaCMS http://miacms.org/
7. CMS Made Simple http://www.cmsmadesimple.org/
8. TextPattern http://textpattern.com/
9. ImpressCMS http://www.impresscms.org/
Well, I think all of them are excellent. I really likes the Concrete 5 video preview though.
Also have a look at this top chart:
http://amplicate.com/rankings/475-top-ten-content-management-systems-cms/
My plan is to find an alternative. And here's my research findings.
I bumped into the following excellent CMSs that I would like to try out:
1. Concrete 5 http://www.concrete5.org/ (PHP using Zend Framework)
2. BrowserCMS http://www.browsercms.org/ (Ruby on Rails)
3. Silver Stripe http://www.silverstripe.org/silverstripe-cms/ (PHP using Sapphire)
4. modx http://modxcms.com/download/ (PHP)
5. Frog CMS http://www.madebyfrog.com/ (PHP)
6. MiaCMS http://miacms.org/
7. CMS Made Simple http://www.cmsmadesimple.org/
8. TextPattern http://textpattern.com/
9. ImpressCMS http://www.impresscms.org/
Well, I think all of them are excellent. I really likes the Concrete 5 video preview though.
Also have a look at this top chart:
http://amplicate.com/rankings/475-top-ten-content-management-systems-cms/
In search for a User, Group, Role & Security Java Library
I've been longing for a Java library that would cover all the needs of authorization and authentication within an application in a sensible manner. The library shouldn't require huge EJB structures and should allow being used within a POJO context.
I've searched and found three useful libraries:
1. Apache Ki http://incubator.apache.org/ki/
2. java.security http://java.sun.com/javase/technologies/security/
3. Spring Security http://www.acegisecurity.org/
The one that drives my curiosity the most is Apache Ki. Seems very promising.
Thursday, January 28, 2010
Jobless, need money, why not freelance from home?
You can start freelancing effectively using these websites:
One day, I'll need these websites badly.
Wednesday, June 13, 2007
A Useful Command Prompt Tip
netstat -an |find ":80"
The above command I use so frequently. It really helps me out figure if there is a webserver running on the machine (ie. listening on port 80).
Actually, this command is a combination of two commands. The first is netstat which displays a boring long table.
The second is find "XX" which ignores all strings that dont contain "XX".
The '|' is the pipe operator. Now the command simply pipes the output of 'netstat' into 'find', the result is the line that contains the string "80".
If you're from a linux background, you'll find this post a bit too obvious. Since we're used to using the 'grep' command (which is similar to 'find' on windows).
The above command I use so frequently. It really helps me out figure if there is a webserver running on the machine (ie. listening on port 80).
Actually, this command is a combination of two commands. The first is netstat which displays a boring long table.
The second is find "XX" which ignores all strings that dont contain "XX".
The '|' is the pipe operator. Now the command simply pipes the output of 'netstat' into 'find', the result is the line that contains the string "80".
If you're from a linux background, you'll find this post a bit too obvious. Since we're used to using the 'grep' command (which is similar to 'find' on windows).
Sunday, June 03, 2007
Microsoft PowerToys
Add convenience to your life ...
Try these free tools:
1. Alt-Tab Replacement
When using Alt-Tab, this will show you a small thumbnail of the program you are switching too. Very helpful when switching to multiple instances of the same application.
2. Power Calculator
Enhanced calculator for your OS.
3. Open Command Window Here
Allows you to open the command window for any folder you are currently in.
4. Image Resizer
Resize images on the spot.
5. ClearType Tuner
This PowerToy lets you use ClearType technology to make it easier to read text on your screen, and installs in the Control Panel for easy access.
Download any or all at:
http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx
Try these free tools:
1. Alt-Tab Replacement
When using Alt-Tab, this will show you a small thumbnail of the program you are switching too. Very helpful when switching to multiple instances of the same application.
2. Power Calculator
Enhanced calculator for your OS.
3. Open Command Window Here
Allows you to open the command window for any folder you are currently in.
4. Image Resizer
Resize images on the spot.
5. ClearType Tuner
This PowerToy lets you use ClearType technology to make it easier to read text on your screen, and installs in the Control Panel for easy access.
Download any or all at:
http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx
Saturday, June 02, 2007
Who Said You Cant Learn Karate From A Book?
You can learn anything from books. A good book with good illustrations and a comprehendable language style can teach you anything.
The only extra large step you need is to continually practice. If you dont, then most probably you're dropping everything you've read.
Now wait a second, I know what you're thinking... but watch out for what I said; I said 'you can learn', but I didn't say 'its the best way!'. So lets face it, someone whom read a book about Karate will definitely know more than someone who haven't read (assuming both initially start in the same state).
Here's my evaluation of the different ways to learn ordered from best to worst:
1. Let an expert teach you, practice well, see what other experts teach, read about it, apply, understand the different schools on the same subject.
2. Let an expert teach you and practice well.
3. Read a book, and practice.
4. Read a book.
5. Do nothing.
Please note that I'm writing this post without any pre-research or good analysis on the subject. Therefore, please forgive my 'hardly scratching the surface analysis' (abbreviated HSTSA) on this subject.
The only extra large step you need is to continually practice. If you dont, then most probably you're dropping everything you've read.
Now wait a second, I know what you're thinking... but watch out for what I said; I said 'you can learn', but I didn't say 'its the best way!'. So lets face it, someone whom read a book about Karate will definitely know more than someone who haven't read (assuming both initially start in the same state).
Here's my evaluation of the different ways to learn ordered from best to worst:
1. Let an expert teach you, practice well, see what other experts teach, read about it, apply, understand the different schools on the same subject.
2. Let an expert teach you and practice well.
3. Read a book, and practice.
4. Read a book.
5. Do nothing.
Please note that I'm writing this post without any pre-research or good analysis on the subject. Therefore, please forgive my 'hardly scratching the surface analysis' (abbreviated HSTSA) on this subject.
Tuesday, May 29, 2007
File System Storage Versus BLOB Objects
Document Management Systems nowadays are heading towards storing all documents as BLOB objects in the database. You rarely find any server side applications that deal with documents as files.
Whether its a... Document, Content, Bug, Project, Knowledge Management System, they're all implementing document storage using BLOB objects.
Why it that then?
Well...
1. The first advantage of having everything stored in the database is the ease of backups and restorations. You no longer need to backup the database then backup your document's directory, then make sure they are synchronized.
2. The second advantage is that the documents are stored the same way on all platforms and partitions. Whether its FAT32, NTFS, or any other filesystem, you can store them all in the same way.
3. The third advantage is, you have full control of versioning documents, storing interesting information like diffs, dates, users performing on them.
4. The fourth advantage is that third party applications that connect to the database need only to have the database port available. No need to provide extra ftp access to acess the documents.
Thats it. Bottom line...
If you're building some kind of server application, consider a Database File System.
Whether its a... Document, Content, Bug, Project, Knowledge Management System, they're all implementing document storage using BLOB objects.
Why it that then?
Well...
1. The first advantage of having everything stored in the database is the ease of backups and restorations. You no longer need to backup the database then backup your document's directory, then make sure they are synchronized.
2. The second advantage is that the documents are stored the same way on all platforms and partitions. Whether its FAT32, NTFS, or any other filesystem, you can store them all in the same way.
3. The third advantage is, you have full control of versioning documents, storing interesting information like diffs, dates, users performing on them.
4. The fourth advantage is that third party applications that connect to the database need only to have the database port available. No need to provide extra ftp access to acess the documents.
Thats it. Bottom line...
If you're building some kind of server application, consider a Database File System.
Wednesday, May 23, 2007
The 3arabeezy Habit
In the old university days, whenever I met someone speaking half english half arabic, I usually felt so intimidated of such personalities. I used to think of them as people whom try their best to show off by mixing sophisticated english terminology with verbal mingled arabic pronounced english sounding words. At those days, 3arabeezy for me was a 100% Yukk.
Today, I became one of them (A 3arabeezist). I just cant stop it, I keep mixing english and arabic whenever I speak, I dont know how it came up to be, it just happened. Gradually, I started substituting english words for words that I cant find an arabic alternative for, and vice versa.
It seems that mixing two languages makes me feel smoother. Its not only in verbal languages. Its also in computer languages. You need to write Embedded C in Java code for certain functionalities, and to write PHP extensions using C in others, or even assembly in some C code, mixing languages could be an advantage.
However, mixing arabic and english proves that you are proficient in using both simultaneaously, but very weak in utilizing one at at time.
Even when trying to talk completely in English... one or more 'ya3neeez' have to slip through the conversation. And when I talk in complete Arabic, one or more 'simply', 'basically', 'soon enough', 'I think' have to slip in between.
In funny cases, I'm also starting to use the plural form of arabic words in english form... examples are 'Raheeebz', 'Raw3az', '7abaaaybax' and 'Jee3aanz'.
Lets jump to the lessons learned of this post. I guess there's one really serious lesson to mention. 3arabeezy aint that bad, but could make you look REALLY bad in first impressions. So here's my advice:
1. When introduced to new people, dont use 3arabeezy whatsoever. Stick to one language. Talk professionaly. Dont mix. It will only leave an impression of either a show-off or an improficient talker.
2. In public speech, dont use 3arabeezy unless the audience are people you've worked with before.
3. When dreaming, feel free to use 3arabeezy. Totally acceptable.
4. Sometimes you need to use 3arabeezy when talking to people who know neither arabic or english. This raises the chances that there could be an arabic or english word that sound something similar to their native language.
5. Only use 3arabeezy if you feel that a certain word has a better alternative in the other language that will ease up understanding. Again, this proves weakness in the former language.
Till then, we'll meet again in a next epi-post of 'Lost in the Code Carribeans'.
Today, I became one of them (A 3arabeezist). I just cant stop it, I keep mixing english and arabic whenever I speak, I dont know how it came up to be, it just happened. Gradually, I started substituting english words for words that I cant find an arabic alternative for, and vice versa.
It seems that mixing two languages makes me feel smoother. Its not only in verbal languages. Its also in computer languages. You need to write Embedded C in Java code for certain functionalities, and to write PHP extensions using C in others, or even assembly in some C code, mixing languages could be an advantage.
However, mixing arabic and english proves that you are proficient in using both simultaneaously, but very weak in utilizing one at at time.
Even when trying to talk completely in English... one or more 'ya3neeez' have to slip through the conversation. And when I talk in complete Arabic, one or more 'simply', 'basically', 'soon enough', 'I think' have to slip in between.
In funny cases, I'm also starting to use the plural form of arabic words in english form... examples are 'Raheeebz', 'Raw3az', '7abaaaybax' and 'Jee3aanz'.
Lets jump to the lessons learned of this post. I guess there's one really serious lesson to mention. 3arabeezy aint that bad, but could make you look REALLY bad in first impressions. So here's my advice:
1. When introduced to new people, dont use 3arabeezy whatsoever. Stick to one language. Talk professionaly. Dont mix. It will only leave an impression of either a show-off or an improficient talker.
2. In public speech, dont use 3arabeezy unless the audience are people you've worked with before.
3. When dreaming, feel free to use 3arabeezy. Totally acceptable.
4. Sometimes you need to use 3arabeezy when talking to people who know neither arabic or english. This raises the chances that there could be an arabic or english word that sound something similar to their native language.
5. Only use 3arabeezy if you feel that a certain word has a better alternative in the other language that will ease up understanding. Again, this proves weakness in the former language.
Till then, we'll meet again in a next epi-post of 'Lost in the Code Carribeans'.
Tuesday, May 15, 2007
The Long Easy Way Versus the Short Hard Way
Today I had a small discussion with a good technical friend of mine ;) The discussion started with trying to handle an SQL Query with one shot.
The SQL Query got a bit too complicated to handle and needed some extra research, reading and thinking to figure out the correct way to do it. It took two technical brains, good MySQL experience, about forty minutes of work, and at the end some testing. It resulted with a long SQL statement.
Through our work we had another solution, its a very easy solution, get the data you need through multiple SQL statements. Thus, a long but easier way to do it.
We felt so proud that we were able to tackle the short difficult path, but at the end, considering the long easy path we missed, I felt a bit unrelaxed, but as soon as that happened, I was reminded with an important wisdom (by my amigo):
"If you keep choosing the easy and long path, you'll hardly learn anything. It's the difficult short path that provides you with extra skill and power."
Now imagine the amount of skill and power you can gain by choosing the long difficult path. Hmmmm, cool as long as no fatal mistakes takes place.
There's always alternate wisdom supplements when twisting different stories around.
The SQL Query got a bit too complicated to handle and needed some extra research, reading and thinking to figure out the correct way to do it. It took two technical brains, good MySQL experience, about forty minutes of work, and at the end some testing. It resulted with a long SQL statement.
Through our work we had another solution, its a very easy solution, get the data you need through multiple SQL statements. Thus, a long but easier way to do it.
We felt so proud that we were able to tackle the short difficult path, but at the end, considering the long easy path we missed, I felt a bit unrelaxed, but as soon as that happened, I was reminded with an important wisdom (by my amigo):
"If you keep choosing the easy and long path, you'll hardly learn anything. It's the difficult short path that provides you with extra skill and power."
Now imagine the amount of skill and power you can gain by choosing the long difficult path. Hmmmm, cool as long as no fatal mistakes takes place.
There's always alternate wisdom supplements when twisting different stories around.
Monday, May 14, 2007
The 'Call Super' Antipattern
A common design problem that is usually solved using the 'Call Super' antipattern (also referred to as code-smell). Simply stated, the problem occurs when the subclass needs to share the implementation of the super classes over-ridable methods.
In such case, 'Call Super' anti-patten is usually used by calling the over-ridden methods from within the subclass's over-riding methods.
I'll show a 'Call Super' code sample, then show a much better and neater solution (proposed by Martin Fowler).
The Bad Solution (Using the 'Call Super' AntiPattern):
A much better solution is to have an abstract method in the super class for the extra actions the subclasses will perform. And thus, the subclass only needs to implement that abstract method:
Thats it. A neat alternative solution that I love to use.
In such case, 'Call Super' anti-patten is usually used by calling the over-ridden methods from within the subclass's over-riding methods.
I'll show a 'Call Super' code sample, then show a much better and neater solution (proposed by Martin Fowler).
The Bad Solution (Using the 'Call Super' AntiPattern):
class Penguin {A Better Solution
public void intoduceYourSelf() {
System.out.println("Hi, I'm classified as a penguin.");
}
}
class EmperorPenguin Extended Penguin {
public void introduceYourSelf() {
super.introduceYourSelf();
System.out.println("My real name is Emperor Penguin");
}
}
A much better solution is to have an abstract method in the super class for the extra actions the subclasses will perform. And thus, the subclass only needs to implement that abstract method:
class Penguin {
public void introduceYourSelf() {
System.out.println("Hi, I'm classified as a penguin.");
talkAboutYourselfMore();
}
abstract public talkAboutYourselfMore();
}
class EmperorPenguin extends Penguin {
public void talkAboutYourselfMore() {
System.out.println("My real name is Emperor Penguin");
}
}
Thats it. A neat alternative solution that I love to use.
Wednesday, May 09, 2007
Curiosity Never Killed The Cat...
... it was Boredom which did.
The amount of boredom I've been through in the past three days has been killing me softly.
Unfortunately, this time it's the result of practicing a boring repititive task; writing code that tests code. You just keep on writing code and checking the result, then writing another line and checking the result, then another line, and checking the result.
Trying my best to be creative with this task, I only modified the code a bit to show errors in red color and success in green color. Thats about it.
Wisdom of the day:
Ok, curiosity might have killed the cat. But boredom will kill anything!
The amount of boredom I've been through in the past three days has been killing me softly.
Unfortunately, this time it's the result of practicing a boring repititive task; writing code that tests code. You just keep on writing code and checking the result, then writing another line and checking the result, then another line, and checking the result.
Trying my best to be creative with this task, I only modified the code a bit to show errors in red color and success in green color. Thats about it.
Wisdom of the day:
Ok, curiosity might have killed the cat. But boredom will kill anything!
Subscribe to:
Posts (Atom)