<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2577391666416797449</atom:id><lastBuildDate>Fri, 13 Mar 2026 07:21:43 +0000</lastBuildDate><category>Personal Opinion</category><category>Java</category><category>News</category><category>Non Java</category><category>The Usual blabbing</category><category>Jobs</category><category>Logging</category><category>Spring</category><category>Acegi security</category><category>Book Review</category><category>IDEs</category><category>NetBeans</category><category>Software Development</category><category>Events</category><category>Hibernate</category><category>Windows Vista</category><title>Alaa Nassef&#39;s Java Blog</title><description></description><link>http://jnassef.blogspot.com/</link><managingEditor>noreply@blogger.com (Alaa Nassef)</managingEditor><generator>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-5808980646222163116</guid><pubDate>Wed, 20 Apr 2016 12:02:00 +0000</pubDate><atom:updated>2016-04-20T14:43:36.968+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jobs</category><category domain="http://www.blogger.com/atom/ns#">Non Java</category><category domain="http://www.blogger.com/atom/ns#">Personal Opinion</category><title>The tenth reason</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
WOW! It&#39;s been about eight years since my &lt;a href=&quot;http://jnassef.blogspot.com.eg/2008/08/nine-reasons-why-people-quit-their-jobs.html&quot;&gt;last post&lt;/a&gt;, which was about the nine reasons people leave their jobs. I wrote that post while I was preparing to leave the company I was working for back then. It was a sort of thinking out loud post, where I was evaluating my decision to leave. Now, it&#39;s time again to move on, but it is for a reason not mentioned in my 2008 post.&lt;br /&gt;
&lt;br /&gt;
Recently, I have been thinking about leaving the company I&#39;m currently working for for some of the reasons mentioned previously (financial, different types of experience, etc.), but found myself adding another reason to the mix that I wasn&#39;t aware of back in 2008. It&#39;s independence!&lt;br /&gt;
&lt;br /&gt;
I want to be on my own. I have some side projects that I wanted to work on since forever, but never had the time to attend to due to my full time job. Whether you want to have your own business, become an entrepreneur, be your own boss, whatever you call it, you just want independence.&lt;br /&gt;
&lt;br /&gt;
One solution to become independent is to have your own project, whether it&#39;s a services providing company (e.g. social marketing, SEO enhancement, car cleaning, etc.), a product (e.g. mobile app/game, a book, hand made soap, etc.) or opening a shop/office (e.g. co-working space, coffee shop, etc.). Another solution is freelancing! Yes, when you&#39;re freelancing, you are actually an independent service provider.&lt;br /&gt;
&lt;br /&gt;
The great thing about freelancing, &lt;i&gt;if you&#39;re really good at what you do&lt;/i&gt;, is that you get to choose what to work on and when to work on it. Of course when you agree with a client on performing a task in a specified time frame, you have to do it the way (s)he wants in the time frame you agreed on, but you get to choose the project and agree on the time frame before you start, which is totally different from when your boss tells you that you have to do a boring task in an illogical time frame, causing you to work extra hours and weekends on something that you don&#39;t like. Maybe I&#39;m exaggerating a little bit, but you get the point. I have met cases quiet similar to what I have described here, and believe me, they suck.&lt;br /&gt;
&lt;br /&gt;
There are of course several problems with freelancing, one of which is marketing yourself. If you decide to be a freelancing developer, web designer, whatever, you have to search for prospective clients (checking ads in newspapers, craigslist, etc.), show them your portfolio and previous projects, and convince them that you&#39;re the one they need. The problem here is that doing this search is hard, and a lot of clients are non technical and would cause more hassle for you that your current boss.&lt;br /&gt;
&lt;br /&gt;
The solution to this is to go for one of those freelancing websites, like &lt;a href=&quot;http://www.upwork.com/&quot;&gt;upwork&lt;/a&gt; (formerly oDesk), &lt;a href=&quot;http://www.elance.com/&quot;&gt;elance&lt;/a&gt; (an upwork company), &lt;a href=&quot;http://www.freelancer.com/&quot;&gt;freelancer&lt;/a&gt;, &lt;a href=&quot;http://www.guru.com/&quot;&gt;guru&lt;/a&gt;, &lt;a href=&quot;http://www.fiverr.com/&quot;&gt;fiverr&lt;/a&gt;, etc. However, another problem shows up here. The problem with those sites is the barrier to entry. You might be the best one in your field, but you would still find it hard to land your first job. Bidders do not want to take the risk of hiring someone with no previous work reference on the platform they&#39;re using. This will cause you to lower your price to really (funny) low rates to convince people to hire you. This will also make you go to any brain dead job just to get a positive feedback. My first job on oDesk was to solve some high-schooler&#39;s programming assignments, but to keep the quality of the code low so that not to raise the teacher&#39;s suspicion (I&#39;m not proud of that, but I needed to get in the system back in 2007)! Well, oDesk (now upwork) have a good system where you take a lot of tests to prove the skill you have, but the problems are still there. One more problem is that the clients of those platforms are mostly small companies (or individuals), which limits the cash you might get.&lt;br /&gt;
&lt;br /&gt;
This is where &lt;a href=&quot;http://www.toptal.com/&quot;&gt;Toptal&lt;/a&gt; comes in. What Toptal does is to screen all applying candidates (language, personality, skills, problem solving, etc.) to make sure they only get the top 3% of the freelance talent. By guaranteeing the talents that work with them, they have a &lt;a href=&quot;https://www.toptal.com/clients&quot;&gt;great roaster of clients&lt;/a&gt;, and they set (really) good hourly rates for you. I believe that this is the best thing you can get (if you&#39;re one of the top 3% of course). I&#39;m trying out in the next couple of weeks to join Toptal in the software development group, which is going to be great for me. I believe that I&#39;m one of the tom 3% in my field, so I hope this is going to go fine. However, if you read this, I hope that you pray for me to do well, since I think that this might be the best option for me. &lt;br /&gt;
&lt;br /&gt;
A company similar to Toptal is &lt;a href=&quot;http://www.crossover.com/&quot;&gt;crossover&lt;/a&gt;, but the drawback they have is that they require that you work with them full time (but you get paid hourly based on the actual work). By them making you work exclusively for them, with no guarantee of the number of hours you will actually make, and now way to set your availability to be a part-timer, Toptal wins by far (IMHO).&lt;br /&gt;
&lt;br /&gt;
So, this is the tenth reason why you might want to leave your job. You want independence, which is what Toptal provides.&lt;/div&gt;
</description><link>http://jnassef.blogspot.com/2016/04/the-tenth-reason.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-4834077661679296813</guid><pubDate>Wed, 27 Aug 2008 12:25:00 +0000</pubDate><atom:updated>2008-08-27T21:15:59.592+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jobs</category><category domain="http://www.blogger.com/atom/ns#">Non Java</category><category domain="http://www.blogger.com/atom/ns#">Personal Opinion</category><title>The nine reasons why people quit their jobs</title><description>Did you ever quit your job for another one? Do you know someone who did that? Are you thinking of quitting your current job? I&#39;m sure that &quot;YES&quot; is the answer of at least one of the previous three questions. The next question is &quot;WHY&quot;. Why did you quit your job? Why did the person you know quit his/her job? Why are you considering quitting your job? Now the answer to those questions would differ from one person to the other, and I&#39;ve heard a lot of different answers. One of the things I hate is when the person you ask begins his answer to why (s)he&#39;s quitting with &quot;a lot of reasons&quot;. I believe that there can&#39;t be a lot of reasons, because IMHO, there can only be the maximum of nine reasons.&lt;br /&gt;&lt;br /&gt;This article is not a top ten reasons (or a top nine reasons in our case) of why people quit their jobs. This article is about what I believe to be the nine, and the only nine, reasons of why people quit their jobs to go work in another company in the same field.&lt;br /&gt;&lt;br /&gt;Before we start stating the nine reasons, let me state the intended audience of this article, and why those are the ones I&#39;m targeting:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;HR people:&lt;/span&gt; I&#39;m targeting those people since they can conduct a list of questions for exit and entry interviews, so that they can know exactly why people leave their jobs, categorize the answers into the nine reasons, calculate the percentages and weights of each reason and see where are the weaknesses and strengths of their company, so that they can try to do something to improve the company.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;People considering leaving their jobs:&lt;/span&gt; You have to categorize the reasons that make you leave your job, prioritize the nine reasons/aspects according to your needs, give them weights and do the math. Some people leave because they got sick of something, and go to place far worse than where they&#39;ve been just because they got a little bit too emotional, or because they were more subjective than objective. Remember to do the math, and leave for the right reasons.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Normal employees who are not considering to quit:&lt;/span&gt; Are you sure that you don&#39;t want to leave? Remember the grass is always greener on the other side of the fence (your neighbor&#39;s backyard :-P). Just kidding, but seriously, even if you are satisfied with where you&#39;re working, you have to do the math, at least to know what makes you so happy. Prioritize the nine reasons according to your current needs, give them weights, give scores to your company for each of the nine reasons, and see if the score is good or not. Some people are satisfied with jobs that really suck, just because they either don&#39;t know what&#39;s on the other side of the fence, or because they&#39;re afraid that their neighbor has a dog in his backyard (that&#39;s a metaphor for being afraid of taking the risk, if you haven&#39;t already got that).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I will not be talking about career change, since HR cannot convince an accountant who wants to leave to be a professional ballerina to stay. If I go into this, this will just be some useless blabbing. I&#39;ll just give it an honorable mention at the end of this post. Now let&#39;s start with the reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Financials:&lt;/span&gt; Let&#39;s face it, we all work for the money. Yeah most people try to work in a field they enjoy, but we work to pay the bills and feed ourselves and our children. When I say financials, I do not just mean the salary. Other things add up on the salary, like bonuses and the possibility of traveling a lot with a good travel allowance. A lot of people might leave a perfectly good job for another one that pays more. Those people might either have a lot of bills to pay, or maybe they&#39;re just leaving because they feel that they&#39;re being underpaid in relation to the market, even if they&#39;re not in need for the money. This situation might be really stressful to a lot of people, because they feel that they are not given what they deserve.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Position:&lt;/span&gt; Titles are really important. First of all, your title decides your salary range. Secondly, it gives you prestige. Each of us wants to be something, and the title gives you a part of that. In the first company I worked in, there was no career path, and there were no defined titles, so both the youngest and the eldest people in the department (except for department managers and project managers) were both developers. Being a senior or a junior was highly subjective. Finally, after a lot of complaints, the company created a team (which I was proudly a part of), to create a defined career path. Well, let having a career path aside, even if there is a defined career path, some people leave their jobs to go to a job at a higher position, even if it&#39;s in a smaller company and, believe it or not, a smaller pay. They regard this as an opportunity to get the higher title, which will be their key pass to a yet better job with this higher title at a bigger company. One final point, some people might leave their job for the same position at another company where there is a higher potential for the promotion.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Technical Experience:&lt;/span&gt; When Ed Burns asked Rod Johnson and Chris Wilson (in the interviews in &lt;a href=&quot;http://www.amazon.com/gp/product/0071490833?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0071490833&quot;&gt;Secrets of the Rockstar Programmers&lt;/a&gt;) about when its time to change jobs they both had similar answers. It&#39;s time to change jobs when you are not learning anything new. Similar answers were given by others in different ways. What I mean by technical experience is the experience with the tools, frameworks, syntax, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Professional Experience:&lt;/span&gt; What I mean by professional experience is soft skills, managerial skills and other professional skills like software engineering practices. Some people might leave their jobs for another one where they would increase their experience in those professional areas. Professional experience might be more important than technical experience for some people. Gaining managerial and leadership skills would surely help you get promoted and direct you into the managerial path (project manager, department manager, CEO), while technical experience will get you promoted and direct you into the technical path (architect, senior architect, CTO).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Business Experience:&lt;/span&gt; This is an important one. Knowing the business of the telecommunication field, banking, brokerage, etc. is really helpful. You might turn into an independent consultant for such companies. Gaining experience in a certain field is the most important thing in a job at a certain time, which might get someone to leave his job to go to another one where he would gain that experience. For most people it is not that extreme, but a lot of people would like to get some business experience along with the other two types of experience.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Workload:&lt;/span&gt; This differs a lot from one person to the other. some people hate the high workload, while other are real workaholics. Generally speaking, most people hate being overloaded, and in the same time, they hate being idle. I have seen five people from the same department quit their jobs at the same time when their project was over, and the planning for the next phase was taking a really long time. Those people felt that they were idle, and hated that. On the other hand, a lot of people quit when they find themselves working an average of fifteen hours a day for really long periods. People really need their work-life balance to be maintained.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Stability:&lt;/span&gt; When a company is not stable, you tend to find a lot of people leaving it for their sense of insecurity, but this is not the only meaning of instability. I have seen a company that didn&#39;t have a real financial crisis, but the pay date was always a surprise. The problem was that the financial department was in KSA, while the development team was in Egypt, and salaries were sent on monthly basis. Since sometimes the financial team would like to depend on an amount of money that should be collected from a client, salaries would be delayed, sometimes for more than 15 day. Sometimes, people received their salaries before the pay day. This inconsistency/instability was really bad, and it was the main reason I left that company. The sense of insecurity that the company may fail, or that you might not be able to get your next paycheck to pay your bills might be the strongest reason why you might leave a specific company.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Environment:&lt;/span&gt;&lt;span&gt; A lot of things go under this category, from the quality of tea and coffee in the company kitchen/buffet, to the way your manager treats you. The team spirit, flexible hours, company facilities and management appreciation are all parts of the environment, and believe it or not, it&#39;s one of the biggest reasons people leave their jobs (especially regarding management appreciation and how the boss treats his employees).&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Benefits:&lt;/span&gt;&lt;span&gt; The benefits system of the company is also one very important aspect that may change your mind about the place you want to go. Health insurance, discounts at selected shops/service providers, pension plans, numbers of vacation days per year, etc. are core parts of the package. I worked in a company that arranged one or two trips annually for employees at really great rates, and employees paid the expenses of the trip in six months, which is a great benefit for those who love to travel.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Those were the nine reasons that are, IMHO, the only ones that may make someone quit his job for another one. Any other reason would be either a special case of one of those nine reasons, or a combination of a subset of them. For example, you might see someone who wants to leave the company, because he needs to be in a place where he can innovate. I believe that innovation has environment, benefits and workload aspects. Some environments encourage innovation, while others don&#39;t. When a company allows you to spend some of your time that you get paid for in innovation, this guarantees that your workload will not be increased if you need to innovate, while in the same time, it is clearly a part of the benefits system in the company, since you can do something that you love in the company&#39;s time.&lt;br /&gt;&lt;br /&gt;Another example is that when some people tell you that they&#39;re leaving their job because they live away from where they work, and they need to work somewhere which is near their homes. This has both workload and financial aspects. The time you spend going to work and coming back home is added to the number of hours that are not a part of your personal life, hence, in an indirect method affects your work load. As for the financial part, the money you spend on gas, or transportation is a part deducted from your paycheck. If a company provides buses, this would certainly affect the financial part. Additionally, if the company is flexible enough to allow you to do a part of your job while in the bus, this would surely reduce your workload.&lt;br /&gt;&lt;br /&gt;The examples are endless, but I think that this was enough for now. The last two points I would like to tackle are career change, and a tenth very special reason for quitting a job. People change their careers for several reasons, where most of the nine reasons are included (moving to a field that pays more, or has a higher potential, etc). A reason for a career change that&#39;s not in the nine reasons is that the person might not feel comfortable in the field he/she is working in. This is something that cannot be discussed in a rational manner. You cannot convince someone to love accounting more than dentistry. This is just a matter of a personal taste, and the only way to deal with such cases is to stress on the strong aspects (from the nine reasons) of the field this person is working in compared to the weak ones to the field he/she wants to leave for, and to try to explain the risk of starting a new career from the very beginning of the career path of that field, compared to continuing in his/her current path.&lt;br /&gt;&lt;br /&gt;Finally, the tenth very special reason that I didn&#39;t include is when a woman quits her job to give more time for her children. I believe that this is a special case of a career change, where the woman changes her career from being a professional engineer for example to being a professional mother. It also has the workload aspect, since she needs more time for her personal life, i.e. less workload. Some companies partially solved this problem by opening in-house nurseries for employees&#39; children. This reason is similar to the cases where someone quits because he/she needs to relocate to be near his sick mother for example. Some companies can solve such cases partially by being flexible enough to accept a large portion of the work to be done from home.&lt;br /&gt;&lt;br /&gt;I hope I covered the subject well enough. If you have any reason that you think that it isn&#39;t a special case of the nine reasons, and not a combination of a subset, please tell me so that I can enhance this article further. I know that it has bean a really long read, and I hope that it was worth your precious time.</description><link>http://jnassef.blogspot.com/2008/08/nine-reasons-why-people-quit-their-jobs.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-7475248178907762897</guid><pubDate>Tue, 26 Aug 2008 10:39:00 +0000</pubDate><atom:updated>2008-08-26T13:57:47.535+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Personal Opinion</category><category domain="http://www.blogger.com/atom/ns#">The Usual blabbing</category><title>Rights issue</title><description>Yesterday, I did a small search on Google to see how my blog is doing. I was searching for my &lt;a href=&quot;http://jnassef.blogspot.com/2007/07/dynamic-roles-management-in-acegi.html&quot;&gt;ACEGI article&lt;/a&gt;, and I found that it made the second result on Google, and that was great. I looked at the first result, and to my surprise, it was my article, but on &lt;a href=&quot;http://springtips.blogspot.com/2007/09/dynamic-roles-management-in-acegi.html&quot;&gt;another blog&lt;/a&gt;. No, this was not a link to my article, it was THE ARTICLE. I did not put it there, and no one asked me if they would have used it. At least the article was signed by &quot;By Nassef&quot;, but that&#39;s just my last name. If you google that, I will not show up in the top results at all. They didn&#39;t ask my permission to use the article, they didn&#39;t put a link to my blog and they didn&#39;t even put my full name. I wrote a comment stating that I was mad at the action, even though that I was flattered that the article was good enough to be referenced and used by other people. They did not have the decency of showing up my comment. All they did was to make my last name &quot;Nassef&quot; signing the article as hyperlink to my blog, which shows that they are not really bad people, but what about my comment? Why didn&#39;t it show up? Why didn&#39;t I receive an apology, by mail at least? Isn&#39;t this the decent thing to do? Anyway, I&#39;m both glad that the article was good enough to be used as reference, but I&#39;m really disappointed due to the fact that I had to discover that my article was on another blog for about a year now without a clear reference to me.</description><link>http://jnassef.blogspot.com/2008/08/rights-issue.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-1386054389184052899</guid><pubDate>Sat, 23 Aug 2008 20:15:00 +0000</pubDate><atom:updated>2008-08-23T23:31:39.315+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">The Usual blabbing</category><title>A facelift for my blog</title><description>Yeah, it really needed the redesign. I really got sick by the dark theme, and I really wanted a three column design. Anyway, I&#39;m happier with this new design, and I&#39;m planning to be writing some really interesting articles in the really near future, so be prepared ;).</description><link>http://jnassef.blogspot.com/2008/08/facelift-for-my-blog.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-2578771798639169068</guid><pubDate>Wed, 07 May 2008 10:28:00 +0000</pubDate><atom:updated>2008-05-08T10:34:34.384+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">News</category><title>Problem with Apache&#39;s Axis2 1.4 Download</title><description>Version 1.4 of Axis2 was released five days ago. I was trying to download it, but I&#39;m getting an internal server error when I try to get to the download page of version 1.4. I sent an email to the webmaster, but until they get that fixed, you can download it from any mirror. Well, I&#39;m currently downloading it from &lt;a href=&quot;http://apache.hoxt.com/ws/axis2/1_4/&quot;&gt;http://apache.hoxt.com/ws/axis2/1_4/&lt;/a&gt;. Thought you&#39;d like to know, in case you want to download it and face the same problem.&lt;br /&gt;&lt;br /&gt;EDIT 8 May 2008:&lt;br /&gt;&lt;a href=&quot;http://ws.apache.org/axis2/download/1_4/download.cgi&quot;&gt;Download link&lt;/a&gt; in apache website now working</description><link>http://jnassef.blogspot.com/2008/05/problem-with-apaches-axis2-14-download.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-2549119426296691252</guid><pubDate>Tue, 06 May 2008 16:16:00 +0000</pubDate><atom:updated>2008-12-10T18:24:30.510+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Logging</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Bubble Wrap, Hani Suleiman and Logging Abstraction</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiplru_95NegEAsr9cmUSg3m1Lkp0i5mYr1UPiRC3ABFHXd1TeeX_5UPC1FLYgD8Raw0dx0yuF5ta5MUmK0VF7TLGskqoEo5lm-PXGHfd8dGTBtkx59hKvgnag5_Y9brmqwsIy0pyD6WcRu/s1600-h/bm_bubblewrap_bust-081004.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiplru_95NegEAsr9cmUSg3m1Lkp0i5mYr1UPiRC3ABFHXd1TeeX_5UPC1FLYgD8Raw0dx0yuF5ta5MUmK0VF7TLGskqoEo5lm-PXGHfd8dGTBtkx59hKvgnag5_Y9brmqwsIy0pyD6WcRu/s320/bm_bubblewrap_bust-081004.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5196793585608650754&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Let&#39;s imagine that you are in an antique shop and a beautiful vase or a statue caught your eye and you thought of buying it, either for yourself or as a gift for a friend. You look at the price tag, and you find that it has a reasonable price. You compare it with the other antiques in the shop, and you decide that this is the one that you want.&lt;br /&gt;&lt;br /&gt;You then call for the sales person to take the antique (let&#39;s just say that it&#39;s a vase) that you chose to the cashier, where you go to pay for it, and to, more importantly, choose the box! Why a box? And why is it that important?&lt;br /&gt;&lt;br /&gt;Well, imagine going home with this vase un-boxed. The risk of it shattering, or at least getting a part chipped off is quiet high, and you wouldn&#39;t like this to happen, would you? Boxing is very important for reducing the risk of your vase getting broken or chipped off. But there&#39;s one more thing. The vase you chose is an antique hand made vase. It did not come out of a production line that produces thousands of replicas. It is one of a kind, handcrafted by a craftsman somewhere in the world, so it does not have  a box specifically made for it with an image of the vase printed on it. You&#39;ll have to choose a box that will suit your needs. You can choose a fancy looking box if this is going to be wrapped as a gift, or you can choose a cheap box if you just want to take the vase home, and don&#39;t care about the box. The box can be made out of paper, cardboard or wood. You have the freedom of choice, and you have a really large variety to choose from, because this antique shop has got everything.&lt;br /&gt;&lt;br /&gt;So, you choose a box that suites your needs, and now everything is OK, right? No, it&#39;s not OK.  If the vase does not fit the box exactly, then you&#39;ll be facing some trouble, because the vase might break inside the box after banging to the walls of it a several times. Even if it&#39;s a perfect fit, you still have a problem. What if you decide to buy a cheap ugly looking wooden box, that is a perfect fit, but after going home, you remember that your best friends birthday is next week, you didn&#39;t get him/her a gift, and this vase matches his/her taste exactly. You&#39;ll certainly need to get a new fancy box for the occasion instead of the cheap ugly one. What will you be doing then?&lt;br /&gt;&lt;br /&gt;Cushioning is the answer. Foam peanuts, styrofoam and bubble wrap are all great ways to cushion your valuable vase in the box that suites your needs.  If you&#39;d ever need to change boxes, there will be no problem, since you can wrap your vase in bubble wrap, and you&#39;re done. After all, this is what bubble wrap is good for (even though some people think that it&#39;s good for annoying other people by popping them in public).&lt;br /&gt;&lt;br /&gt;What does all of the above have to do with anything? Well, let the vase be a software product, the box be the logging framework and the bubble wrap be the logging abstraction framework. That simple! You buy the software solution because this is what you want, but you need logging to trace transactions and exceptions that occur in the system, so you can tell the vase manufactures, sorry, the software vendor to give you patches that fix those problems. Using a logging abstraction framework helps you changing the logging framework very easily, without the need to change anything your software. Imagine having to change the vase, simply because the fancy box you got to put it into for your friend doesn&#39;t fit. It would be insane, wouldn&#39;t it.&lt;br /&gt;&lt;br /&gt;OK, so what about &lt;a href=&quot;http://www.bileblog.org/?page_id=2&quot;&gt;Hani Suleiman&lt;/a&gt;? He&#39;s the CTO of a consulting company, and the owner of the controversial &lt;a href=&quot;http://www.bileblog.org/&quot;&gt;BileBlog&lt;/a&gt;. He&#39;s also a member of the &lt;a href=&quot;http://www.jcp.org/en/participation/committee&quot;&gt;executive committee of the JCP&lt;/a&gt;, and on the expert group of several specification requests. In his &lt;a href=&quot;http://www.bileblog.org/?p=337&quot;&gt;last post&lt;/a&gt; before his disappearance from the blogsphere (which was 9 months ago), he was ranting about Tapestry&#39;s creator, &lt;a href=&quot;http://howardlewisship.com/&quot;&gt;Howard Lewis Ship&lt;/a&gt;, moving from ACL (that&#39;s Apache Commons Logging, not Anterior Cruciate Ligament :P), more commonly known as clogging or JCL, to SLF4J. He was referring to Howard&#39;s &lt;a href=&quot;http://tapestryjava.blogspot.com/2007/08/so-long-commons-logging-hello-slf4j.html&quot;&gt;blog entry&lt;/a&gt;, which didn&#39;t give much technical details (actually no technical details) on SLF4J in my humble opinion.&lt;br /&gt;&lt;br /&gt;Well, I have to disagree with Hani here. Even though Log4J is one of the most widely used logging framework, it&#39;s not the best. You&#39;ve got &lt;a href=&quot;http://logback.qos.ch/&quot;&gt;Logback&lt;/a&gt; for example, which was created by the founder of Log4J, and has several performance enhancements. You also have a &lt;a href=&quot;http://java-source.net/open-source/logging&quot;&gt;lot of&lt;/a&gt; &lt;a href=&quot;https://simple-log.dev.java.net/&quot;&gt;other &lt;/a&gt;&lt;a href=&quot;http://www.theobjectguy.com/javalog/&quot;&gt;logging&lt;/a&gt; &lt;a href=&quot;http://www.x4juli.org/&quot;&gt;frameworks&lt;/a&gt;, and it&#39;s totally wrong to force your consumer to use one of your choice.&lt;br /&gt;&lt;br /&gt;When you are developing a framework (like the case of tapestry), you should never tie the users with a specific logging framework. I, for instance, like to use logback instead of the de-facto log4j. Being tied to a single implementation is really frustrating. You should be able to change the box if you want. I know that what you actually want is the vase, but if you have no choice but taking it an ugly cheap looking box, and no bubble wrap, you might think of purchasing another vase from another shop, just because you can&#39;t possibly give your friend a gift in this ugly box.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;He casualy flaps his michelin man arms about about how easy it’ll be for everyone to migrate, and how its no big deal to CHANGE EVERY SINGLE F****** SOURCE FILE YOU HAVE.&lt;/blockquote&gt;This is what Hani says in his blog, and again I wonder how would a man of his position imagine something like that? SLF4J is intended to be a drop-in replacement to clogging. You just have to read the manual (which is quiet small by the way). You can just drop in &lt;span style=&quot;font-family:courier new;&quot;&gt;slf4j.jar&lt;/span&gt; and &lt;span style=&quot;font-family:courier new;&quot;&gt;slf4j-jcl.jar&lt;/span&gt; in your class path in place &lt;span style=&quot;font-family:courier new;&quot;&gt;commons-logging.jar&lt;/span&gt;, and you&#39;re done. Now you can use bubble wrap instead of foam peanuts!&lt;br /&gt;&lt;br /&gt;Even if you&#39;re developing a product or a system, it&#39;s a bad practice to tie yourself with the concrete implementation of, well, anything. It&#39;s the ABC of design. You have to decouple yourself from everything. You have to &quot;DESIGN TO INTERFACES&quot;, and this is why abstraction is so important.&lt;br /&gt;&lt;br /&gt;Dear Hani, I have to totally disagree with you on that subject. Even if you are annoyed by people constantly popping up the bubbles in the bubble wrap, this doesn&#39;t mean that bubble wrap is a bad thing. Eliminating the use of the bubble wrap would make buying the vase a great risk, since it may break, or get chipped off. Not cushioning your antiques is a bad practice. Even if you get a box where the vase fits in perfectly, without the bubble wrap, you&#39;ll not be able to change the box (logging framework) without totally redesigning the vase :D.&lt;br /&gt;&lt;br /&gt;The only exception to the above is with log4j and slf4j. Slf4j took the liberty of creating a drop-in jar that is intended to redirect the calls made to log4j to slf4j. This is done so that if you are using a library that calls log4j directly, and you want to use some other logging framework via slf4j. Anyway, I again repeat and insist that using a logging framework directly without an abstraction layer is totally wrong. It&#39;s like putting your valuable vase in a large wooden case in the back of your car while driving on a bumpy road, without any bubble wrap!&lt;br /&gt;&lt;br /&gt;One last thing. Some people speculated that one of Hani&#39;s subjects waited for him in a dark alley and killed him, since it&#39;s been 8 months now since his last post. Actually, Hani is still alive, but he seems pretty busy to be blogging about anything these days. He is on the industry reviewers list of two tracks of this years &lt;a href=&quot;http://java.sun.com/javaone/sf/index.jsp&quot;&gt;JavaOne&lt;/a&gt;. He also had a couple of comments on a &lt;a href=&quot;http://www.julienlecomte.net/blog/2008/01/42/&quot;&gt;blog post&lt;/a&gt;, and was &lt;a href=&quot;http://www.infoq.com/news/2008/02/testng-excerpt&quot;&gt;interviewed&lt;/a&gt; in February by InfoQ. Good to hear that he&#39;s still alive.&lt;br /&gt;&lt;br /&gt;At the end, if you are a fan of popping up bubble wrap, you&#39;ll like &lt;a href=&quot;http://www.virtual-bubblewrap.com/popnow.shtml&quot;&gt;this&lt;/a&gt;. Another thing, the bubble wrapped statue image was taken by &lt;a href=&quot;http://www.track0.com/japh/&quot;&gt;Japh&lt;/a&gt; in the British Museum back in 2004. I contacted him to ask for his permission to use it. He gave me his permission to use it.</description><link>http://jnassef.blogspot.com/2008/05/bubble-wrap-hani-suleiman-and-logging.html</link><author>noreply@blogger.com (Alaa Nassef)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiplru_95NegEAsr9cmUSg3m1Lkp0i5mYr1UPiRC3ABFHXd1TeeX_5UPC1FLYgD8Raw0dx0yuF5ta5MUmK0VF7TLGskqoEo5lm-PXGHfd8dGTBtkx59hKvgnag5_Y9brmqwsIy0pyD6WcRu/s72-c/bm_bubblewrap_bust-081004.jpg" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-6637598597408480672</guid><pubDate>Mon, 28 Apr 2008 12:19:00 +0000</pubDate><atom:updated>2008-05-07T13:37:41.043+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IDEs</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">NetBeans</category><category domain="http://www.blogger.com/atom/ns#">News</category><title>NetBeans 6.1</title><description>&lt;a href=&quot;http://www.netbeans.org/&quot;&gt;NetBeans&lt;/a&gt; 6.1 was released several minutes ago, and it does have some cool new features.  Well, some aren&#39;t entirely new, like the JSF CRUD generation feature and java beans support that were missing from 6.0 have returned. It also has some major performance enhancements (up and above the really great performing &lt;a href=&quot;http://www.netbeans.org/community/releases/60/&quot;&gt;6.0&lt;/a&gt;) including an up to 40% faster startup time, lower memory consumption and increased responsiveness while working with large projects.&lt;br /&gt;&lt;br /&gt;A lot of other features are present. Two of the best for me are the rich javascript editing features and spring framework support (including spring web framework). MySQL is supported in this release (no wonder, since it&#39;s now owned by Sun :D), and you can add a server to the DB explorer, view, create and delete databases easily with lots of other operations.&lt;br /&gt;&lt;br /&gt;Code completion for JavaDoc is now present in this release, which is really convenient. For the Ruby/JRuby, the support has been enhanced a lot with editor quick fixes, a Ruby platform manager, fast debug for JRuby, and other enhancements.&lt;br /&gt;&lt;br /&gt;Better shareablity of projects is also a great feature, where you can create projects that share definitions of libraries. Axis 2 support for web services have been added as well as SOAP UI integration for web service testing and monitoring. I also love the new semi-transparent windows, which may add (a little) to the productivity (you won&#39;t have to minimize and restore a lot to see what&#39;s going on in other windows), in addition of it being a real eye candy.&lt;br /&gt;&lt;br /&gt;Another feature that I really like is that now the inspect members and hierarchy actions now work with classes that the source code is not present for (like 3rd party libraries that do not have an attached source). This is really great.&lt;br /&gt;&lt;br /&gt;This was a summary of the new features of 6.1. For the full list of features, you can see this &lt;a href=&quot;http://www.netbeans.org/community/releases/61/&quot;&gt;link&lt;/a&gt;. Bugs reported between December 2007 and March 2008 were fixed too. Of course I expect the release of 6.1.1 about a month or so later this year to fix any bugs that come up after this release. The next major release (6.5) is planned for &lt;a href=&quot;http://www.netbeans.org/community/releases/roadmap.html&quot;&gt;October the 2nd&lt;/a&gt;. Keep the good work going.</description><link>http://jnassef.blogspot.com/2008/04/netbeans-61.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-6580141100020401784</guid><pubDate>Mon, 28 Apr 2008 08:14:00 +0000</pubDate><atom:updated>2008-05-04T09:58:13.550+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jobs</category><category domain="http://www.blogger.com/atom/ns#">News</category><category domain="http://www.blogger.com/atom/ns#">Non Java</category><title>I got the best job offer ever</title><description>Yes I did! No, I wasn&#39;t offerred to be the CEO of Microsoft or anything, I was offered to be a senior software engineer (which is my current position by the way), but the offer itself was unbelievable. Well, let me start from the beginning.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Like most people, I have profiles on recruitment sites, like monster and others, where I look at the current openings in the market. There is no harm of knowing where the market is going, and what&#39;s your current price in the market. It would also help to find great offers, like the one I got (well, maybe not as great as the one I got).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Since I have a public profile on some recruitment sites (which is not a really very nice thing to do), recruiters and companies can view my profile and cv to contact me directly instead of me having to look for job postings and submitting to them (I&#39;m kind of lazy). Anyway, on February the 21st, I got an email from Renfield Recruitment Agency in London, telling me that Duramex Petrolium PLC (also in London) is looking for all sorts of engineers (petroleum, mechanical, computer, electrical, aerospace, etc.) for an extremely large project. Accepted candidates with more than two years of experience will be given a full time position, while candidates with less than two years of experience will be given a one year contract, which is renewable on satisfactory basis.&lt;br /&gt;&lt;br /&gt;Well, all I had to do was to send a copy of my CV to Engineer Peter Wilson on &lt;a href=&quot;mailto:career.renfield@gmail.com&quot;&gt;career.renfield@gmail.com&lt;/a&gt;, and so I did. I also forwarded the mail to two of my friends whom I thought might be interested of relocating to London. Anyway, on the 26th of February I received another email from Renfield recruitment containing two attachments. The first being the appointment offer and the second being the terms of agreement!&lt;br /&gt;&lt;br /&gt;Yup, I was accepted as an employee in Duramex petroleum WITHOUT AN INTERVIEW. The appointment offer said, and I quote &quot;&lt;span style=&quot;font-family:arial;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;font-family:Verdana, sans-serif;font-size:100%;&quot;&gt;your placement was based on with out any form of oral interview, from; the RENFIELD RECRUITMENT SERVICES. You should also note that your placement was based on certified information found in your CV/Resume...&lt;/span&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;/span&gt;&quot;. I know that my &lt;a href=&quot;http://www.linkedin.com/in/alaanassef&quot;&gt;LinkedIn profile&lt;/a&gt; is quiet good, but to get me a job offer without an interview? WOW!&lt;br /&gt;&lt;br /&gt;OK, here&#39;s a summary of the package:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Monthly salary of 9945.00 British Pounds (YES, thats Nine Thousand Nine Hundred Fourty Five GBP) TAKE HOME (After Tax). I can ask of taking them in US dollars or in Euros by the way.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Full medical insurance for me and my family&lt;/li&gt;&lt;li&gt;Family accommodation in company community&lt;/li&gt;&lt;li&gt;Local transportation will be fully provided for me and my family&lt;/li&gt;&lt;li&gt;A land line and a mobile phone will be provided&lt;/li&gt;&lt;li&gt;Security in both work place and housing community&lt;/li&gt;&lt;li&gt;Life insurance&lt;/li&gt;&lt;li&gt;Complete meals for me and family&lt;/li&gt;&lt;li&gt;And the list goes on...&lt;/li&gt;&lt;/ul&gt;Well, who would be stupid enough to turn down an offer like this one? We are speaking of an income exceeding 237 thousand dollars a year, after tax deductions, plus full housing, medical insurance, life insurance, meals, and even a travel allowance on your vacation complete with airline tickets, plus of course the other benefits. This is like an income of half a million dollars per year (if not more). All I had to do was to contact &quot;International Global Visa Rite Services&quot; before the 10th of March, either by email (&lt;a href=&quot;mailto:employment_visa_rite@mail2consultant.com&quot;&gt;employment_visa_rite@mail2consultant.com&lt;/a&gt;) or by phone (+447045766361), to apply for the immigration visa. I should have paid the fees, and would have been fully reimbursed after my arrival.&lt;br /&gt;&lt;br /&gt;Seems like a good deal, right? Actually, it seems too good to be true, doesn&#39;t it? Well, yes, it isn&#39;t true. I wasn&#39;t lying when I said that I got such an offer, but what I mean is that this was a fraud. There is no Renfield Recruitment, no International Global Visa Rites, and above all, the is no Duramex Petroleum! This was a scam from the very beginning, but it was a well played one.&lt;br /&gt;&lt;br /&gt;If you google &lt;a href=&quot;http://www.google.com/search?q=Duramex+petroleum&quot;&gt;Duramex Petroleum&lt;/a&gt; now, you&#39;ll find tons of results on the scam, but this wasn&#39;t the case back when I got the email in February. I had to search for the company records in the &lt;a href=&quot;http://www.companieshouse.gov.uk/&quot;&gt;official UK government register of UK companies&lt;/a&gt;, and do a lot of googling to find out that everything was a fake (and to shatter my dreams of wealth too :P).&lt;br /&gt;&lt;br /&gt;Well, why didn&#39;t I blog about this earlier? Stupidity is a good answer. I thought that by contacting the authorities I would be doing a greater good, so that they can catch the villains when they&#39;re not taking care, since no one was blogging on them. I was an idiot. I could have been the number one result in Google for Duramex Petroleum by now, but NO, I didn&#39;t do that so that not to grab attention to the scam, so that the authorities could do their job. I got absolutely no response from the Interpol. The &lt;a href=&quot;http://www.met.police.uk/computercrime/index.htm#hacking&quot;&gt;Scotland Yard website&lt;/a&gt; suggested to either go to the local police station (I&#39;m in Dubai, UAE, not in UK), or to report it to the American &lt;a href=&quot;http://www.ic3.gov/&quot;&gt;Internet Crime Complaint Center&lt;/a&gt;, which sent me an automatic respond, and no one contacted me after that.&lt;br /&gt;&lt;br /&gt;Anyway, this wasn&#39;t the end of it. One of the two friends whom I forwarded the first mail to got the same offer (well, same package, but as an IT manager) on the 15th of April. He got it directly from Duramex Petroleum this time, and not through Renfield Recruitment :D. The scammer had launched a &lt;a href=&quot;http://www.duramex-petroleum.org/&quot;&gt;fake website&lt;/a&gt; using Microsoft Office Live. I contacted Microsoft, and they replied in less than an hour to tell me that the fraudulent website had been closed. They also told me that they have taken appropriate action, and asked me about any information that would aid their investigation. I sent them the info, but don&#39;t actually know if a real action was taken against those people or not.&lt;br /&gt;&lt;br /&gt;I really want to kick myself for not blogging about this earlier.Here are the links for the &lt;a href=&quot;http://www.4shared.com/file/45651429/6d6edada/DURAMEX_APPOINTMENT_OFFER.html&quot;&gt;Appointment Offer&lt;/a&gt; and the &lt;a href=&quot;http://www.4shared.com/file/45651441/35eff56e/DURAMEX_TERMS_OF_AGREEMENT.html&quot;&gt;Terms Of Agreement&lt;/a&gt; I received on the 26th of February. Also here is a &lt;a href=&quot;http://www.4shared.com/file/45651627/895223b3/Duramex_Details.htm&quot;&gt;text file&lt;/a&gt; with all the contact details that I collected from my communications with Renfield Recruitment and from the mail sent to my friend. This file is a part of the mail I sent to Microsoft.&lt;br /&gt;&lt;br /&gt;Now just some few tips for you, whether you want to be able to find out scams, or to run your own scams professionally :D&lt;br /&gt;&lt;ul&gt;&lt;li&gt;People contacting you claiming to be a company or a recruitment agent should regularly have a corporate mail and domain, and not emails on Google and Hotmail. Some recruiters do use free mail servers so to reduce the number of spam on their corporate mail system. If you receive a mail from a free mail service, you should at least be a little bit careful.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A large company or corporation should have a website, and it&#39;s usually a dot com website not a dot org. The latter is cheaper, and is mostly used with non profit organizations (or people who want cheap domains). Another thing, a corporate website will not be hosted on Microsoft Office Live, Google sites or any other similar service.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you suspect a website, do a whois lookup to see who&#39;s the registrant, and try to make sure that the information is true.&lt;/li&gt;&lt;li&gt;ALWAYS research the company that wants to interview/hire you before taking some serious action&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If relocating to another country, ask friends who know this country about rules, standard of living, cost of living, and salary ranges for people of your experience&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Finally, I would like to thank Emad Bakir a lot for helping me with information on UK, and UK companies, and for being the one to tell me that this is probably a scam. &lt;/p&gt;&lt;p&gt;EDIT (4th of May 2008)&lt;/p&gt;&lt;p&gt;Just wanted to add some links to other sources&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://answers.yahoo.com/question/index?qid=20080304224539AAPmTd3&quot;&gt;A post&lt;/a&gt; on Yahoo Answers&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://answers.yahoo.com/question/index?qid=20080305072352AAqusbs&quot;&gt;Another post&lt;/a&gt; on Yahoo Answers&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.fraudwatchers.org/forums/showthread.php?p=46952&quot;&gt;Fraud Watchers&lt;/a&gt; (that was the only thread available at the time I got the offer)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;amp;f=37&amp;amp;t=007103&quot;&gt;My post&lt;/a&gt; on java ranch&lt;/li&gt;&lt;li&gt;Available on a &lt;a href=&quot;http://www.oil-offshore-marine.com/bewarejobscams.php&quot;&gt;warning page&lt;/a&gt; on job scams on Oil Offshore Marine&#39;s website&lt;/li&gt;&lt;/ul&gt;</description><link>http://jnassef.blogspot.com/2008/04/i-got-best-job-offer-ever.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-7550020367976257754</guid><pubDate>Thu, 17 Apr 2008 19:45:00 +0000</pubDate><atom:updated>2008-04-28T15:25:31.012+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">The Usual blabbing</category><title>Weird Tattoo!</title><description>Today I was in Deira City Center mall with my wife, and I believe that I have seen the weirdest tattoo. I don&#39;t know if this was true, or my mind was playing games on me, but I think that I saw a girl with a big (I mean really big) tattoo of McDonald&#39;s logo on her back. Most probably I was hallucinating after the the large Subway sandwich I ate. It was weird</description><link>http://jnassef.blogspot.com/2008/04/weird-tattoo.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-6367957633642438517</guid><pubDate>Sun, 16 Mar 2008 11:33:00 +0000</pubDate><atom:updated>2008-04-15T13:13:42.454+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><category domain="http://www.blogger.com/atom/ns#">Java</category><title>JDC 2</title><description>Yesterday I attended the annual Java Developers Conference, held in Cairo, Egypt. This event was the main reason I extended my vacation, so that I can attend it before coming back to Dubai. This is the second year &lt;a href=&quot;http://www.egjug.org/&quot;&gt;EGJUG&lt;/a&gt; (Egyptian Java User Group) has such a conference (apart from their monthly meetings and seminars of course). This years &lt;a href=&quot;http://www.egjug.org/jdc2008/&quot;&gt;event&lt;/a&gt; was WAY better than &lt;a href=&quot;http://www.egjug.org/jdc/&quot;&gt;last year&#39;s&lt;/a&gt;. Well, let me summarize the event for you.&lt;br /&gt;&lt;br /&gt;First of all, Ahmed Hashim, EGJUG&#39;s leader gave the keynote of the conference, then he was followed by words from the two golden sponsors, Etisalat Egypt and Microsoft Egypt. Yes, you read it right. Microsoft was a golden sponsor for the Egyptian java developer&#39;s conference!&lt;br /&gt;&lt;br /&gt;I believe that Microsoft found this as a chance to give a better image to the developers, and show them how good they are. I don&#39;t believe that they were supporting java, since I&#39;ve heard from my sources in a Microsoft parter company, that Microsoft did some pressure on them to stop them from sponsoring the event (both last year and this year). I believe that Microsoft thought that improving their image, and promoting &lt;a href=&quot;http://port25.technet.com/&quot;&gt;port25&lt;/a&gt; and &lt;a href=&quot;http://www.codeplex.com/&quot;&gt;codeplex&lt;/a&gt; is worth sponsoring JDC, but since thew would have gained nothing from their partner companies sponsoring the event, Microsoft pressured them to not do it. Anyway, this post is about the event not about company politics, so let&#39;s go on.&lt;br /&gt;&lt;br /&gt;After the keynote and the sponsor messages,          &lt;a href=&quot;http://weblogs.java.net/blog/edburns/&quot;&gt;Ed Burns&lt;/a&gt; gave a great session on &lt;a href=&quot;http://www.egjug.org/jdc2008/sessions/demystifying-jsf.pdf&quot;&gt;Demystifying JSF&lt;/a&gt;. His presentation slides were divided into two parts, but he gave part one only, due to the time constraints. Ed was followed by Hossam Karim (Software Architect at &lt;a href=&quot;http://www.itworx.com/&quot;&gt;ITWorx&lt;/a&gt;) who is one of the eldest members of EGJUG, and a great contributer to the java community. Hossam&#39;s session was on &quot;&lt;a href=&quot;http://www.egjug.org/jdc2008/sessions/Hossam-Karim-EI-and-SOD.pdf&quot;&gt;Enterprise Integration: A Service Oriented Architecture perspective&lt;/a&gt;&quot;, where he spoke about the methods of integrating different enterprise applications from different vendors together, with the pros and cons of each method. He spoke about the types of integration(information portals, data replication, shared business function, SOA, distributed business process and business to business integration), the styles used (file transfer, shared database, remote procedure invocation and messaging) an then he spoke a lot about messaging with its problems, solutions, concepts and implementation. I believe that it was a really great session, but he needed some more time, because the material was quiet large.&lt;br /&gt;&lt;br /&gt;We took a coffee and a prayers break, then we went back for the next couple of sessions. The third session was given by Gisele Consoline from IBM Brazil, and it was titled &quot;&lt;a href=&quot;http://www.egjug.org/jdc2008/sessions/Giesel-IBM_BDD4SOA.pdf&quot;&gt;Discovering Business Driven Development for SOA&lt;/a&gt;&quot;. This session was one of the worst sessions I have ever attended in my whole life. First of all, I believe that the title should have been &quot;How to use Eclipse for absolute beginners&quot;. The &quot;Business Driven&quot; part in the presentation was a sentence she said in the middle of the session that can be summarized as &quot;before you begin coding, take the requirements from the customers, so that you don&#39;t code something different from what the customer wants&quot;! As for the &quot;SOA&quot; part, she was not using just any Eclipse, she was using IBM&#39;s WebSphere that supports SOA development! Overall the session was a terrible experience for me, especially I was sitting in the front row, so it would have been embarrassing if I had gone to sleep :D.&lt;br /&gt;&lt;br /&gt;The fourth session was given by &lt;a href=&quot;http://blogs.msdn.com/pooyad/default.aspx&quot;&gt;Pooya Darugar&lt;/a&gt;, from Microsoft. I don&#39;t know if having a Microsoft speaker was part of the sponsorship agreement or not, but the session was nice.  The session was titled &quot;&lt;a href=&quot;http://www.egjug.org/jdc2008/sessions/Pooya-MS.pdf&quot;&gt;.NET and  Java Interoperability&lt;/a&gt;&quot; (Notice that .Net comes before java in the title :P). The session was really nice. Pooya had great presentation skills and was able to catch everyone&#39;s attention. Afterwards, when I was evaluating the session, I found out that the session can be summarized as this: &quot;Microsoft, along with other companies, standardized web services so that .NET and Java web services can communicate with each other, without the need of customization from the web services developers&quot;. As you can see, nothing new was gained from the session, but Pooya used his skills brilliantly to make the people feel that it&#39;s a valuable session. At the end of the session, he had a couple of slides promoting  Microsoft products/sites/technologies, like WPF, silverlight, codeflex, popfly, etc. Overall, it was a good session, but the gain from it as a technical person was just this: &quot;Web services  now can work together without any problems, regardless if they are written in java or in .net&quot;, which is why web services were created in the first place.&lt;br /&gt;&lt;br /&gt;A lunch and a prayer break, then the final two sessions. The next session was given by Ed Burns (again). I thought that he would give part 2 of the first session, but instead he gave a session titled &quot;&lt;a href=&quot;http://www.egjug.org/jdc2008/sessions/enterprise-grade-ajax-and-jsf.pdf&quot;&gt;Enterprise Grade Ajax and JSF&lt;/a&gt;&quot;, which was really great as well. The last, but certainly one of the best sessions (if not the best) was given by &lt;a href=&quot;http://blog.arendsen.net/&quot;&gt;Alef Arendsen&lt;/a&gt;, and was titled &quot;&lt;a href=&quot;http://www.egjug.org/jdc2008/sessions/Alef-di_with_spring.pdf&quot;&gt;Spring Dependency Injection &amp;amp; Java 5&lt;/a&gt;&quot;. The session was mainly on the new method of configuring spring beans using annotations.&lt;br /&gt;&lt;br /&gt;After that, there was the giveaways raffle, where I won my third free book in quiet a short period. The book I won was given by O&#39;Reilly, and it&#39;s titled &quot;&lt;a href=&quot;http://www.amazon.com/gp/product/059600978X?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=059600978X&quot;&gt;Enterprise Java Beans 3.0, Fifth Edition&lt;/a&gt;&quot;.&lt;br /&gt;&lt;br /&gt;The overall experience of the event was great. It&#39;s not just the sessions, but also meeting people that I haven&#39;t seen in a very long time, like Amal Kheirallah from ITWorx Alexandria, and like Mohammed Hamed, Ahmed Rizk and Mostafa Askar who were with me in college, and who I haven&#39;t seen in a really long time.&lt;br /&gt;&lt;br /&gt;The main thing that I think could have been improved is the crowd. This year, the size of the event was increased to accept about 600 people, which is great, but accommodating all those people in one place made it impossible to have desks for the people to easily take notes, and the crowd on the buffet during lunch was a disaster. I believe that dividing this event into separate tracks will allow more people to attend the event, and there will be less people in each session, causing a less crowd. The area where the buffet is held should have been larger to reduce the number of people in the queues. Other than that, it was a really great day.</description><link>http://jnassef.blogspot.com/2008/03/jdc-2.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-2378394144467874377</guid><pubDate>Sun, 17 Feb 2008 08:37:00 +0000</pubDate><atom:updated>2008-09-10T14:03:39.351+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Non Java</category><category domain="http://www.blogger.com/atom/ns#">Personal Opinion</category><title>The Missing Perfect Processor</title><description>On the 23rd of January, I sent an email to the editor of PC Magazine Middle &amp;amp; Near East. Well, I like the content of this letter, so I decided that I would post it as a blog entry here, so here you go.&lt;br /&gt;&lt;hr /&gt;I read your February issue article on the &quot;CPU Road Map 2008&quot;, and I started thinking about how far we are from the perfect processor. I&#39;m not talking about future processors that are going to have gazillion cores and do everything from simple arithmetics to 3D graphics processing. I&#39;m speaking about the processors that we could have this day with today&#39;s technology.&lt;br /&gt;&lt;br /&gt;Intel is better in developing transistors; they keep producing smaller transistors each day, giving the possibility of putting more cores on the same chip and reducing power consumption and heat (especially after they created the High-k metal transistor). Another thing is that Intel supports DDR3 with it&#39;s greater speed (even though the FSB is still slower than the fastest DDR3) and lower power, while AMD moved to DDR2 recently.&lt;br /&gt;&lt;br /&gt;AMD is, and was always, better in their processor architecture. They created the 64 bit PC processor more than a year before Intel adopting it to make it&#39;s own EM64T, AMD is not using an FSB to access memory, which is a great advantage and finally, AMD&#39;s Phenom processor is going to be a real Quad-Core processor, and not two dual cores glued together.&lt;br /&gt;&lt;br /&gt;With the technology available from both manufacturers, we (the consumers) could have had better processors than we have today, especially that each of the two companies is excelling in something totally different from the other. Unfortunately, since they are competitors, and it&#39;s impossible to convince any of the companies of sharing their secrets with the other company, then we are never going to have the perfect processor, because there will always be great differences, that if combined would have produced a far more greater processor.&lt;br /&gt;&lt;hr /&gt;Well, this was the end of my letter to the editor, and I hope that you like it.</description><link>http://jnassef.blogspot.com/2008/02/missing-perfect-processor.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-6554827736484886671</guid><pubDate>Sun, 03 Feb 2008 07:29:00 +0000</pubDate><atom:updated>2008-02-03T09:59:29.691+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">The Usual blabbing</category><title>Finally, I won something!!!</title><description>Did you know that &lt;a href=&quot;http://www.javaranch.com/&quot;&gt;java ranch&lt;/a&gt; is one of the best java communities with one of the best &lt;a href=&quot;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi&quot;&gt;forums&lt;/a&gt; around? I&#39;m not saying this because I won a book from them, but because it&#39;s one of the largest java communities on the web, where you would find nearly the answer of any java question you want an answer for.&lt;br /&gt;&lt;br /&gt;OK, did you know that they have a &lt;a href=&quot;http://faq.javaranch.com/view?BookPromotions&quot;&gt;book promotion&lt;/a&gt; that runs nearly every week, where the author of the book goes online to answer users&#39; questions (and of course promote his book)? This promotion runs from Tuesday to Friday, and people who post eligible posts (real questions, answers to questions, discussing the book, etc.) are eligible for winning a copy of that book. Every promotion, there are four winners, and this weeks promotion was on &lt;a href=&quot;http://www.amazon.com/gp/product/0980331609?ie=UTF8&amp;tag=alnasjabl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0980331609&quot;&gt;Struts 2 Design and Programming: A Tutorial&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Guess who&#39;s one of the &lt;a href=&quot;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=58&amp;t=012748&quot;&gt;winners&lt;/a&gt;? &lt;span style=&quot;font-weight: bold;&quot;&gt;IT&#39;S ME!!!&lt;/span&gt; Finally I won something, and I&#39;m really glad, to the extent that I&#39;m blogging about it, at the time where the project I&#39;m working in is on crisis, and with more than 8 (yes eight) draft blog posts that I want to still write. Any how, I&#39;m happy, and I thought of letting you know :D.</description><link>http://jnassef.blogspot.com/2008/02/finally-i-won-something.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-5810108502966766929</guid><pubDate>Sun, 13 Jan 2008 20:06:00 +0000</pubDate><atom:updated>2008-02-12T20:03:51.796+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Personal Opinion</category><title>Welcome Mr. Bush</title><description>Bush is visiting Dubai today; HOORAY!! Well, lot&#39;s of presidents and VIPs visit Dubai, like they visit any other city in any other country, but this time it&#39;s different. This time, Dubai is officially closed for the day! YUP, you read it right. They ARE closing the city.&lt;br /&gt;&lt;br /&gt;Well, the story is, for security reasons, they are closing the main express ways that lead into and out off Dubai, including Sheikh Zayed Road (E11), which is the backbone of the city, and since you have to pass by E11 to go to nearly all of the industrial and business areas (Jebel Ali Freezone, Dubai Media City, Dubai Internet City, etc.), the government announced that today is going to be a day off.&lt;br /&gt;&lt;br /&gt;Even though I never mind a day off, but I hate when it&#39;s for the wrong reasons. I do not accept that a whole city is shut down for the visit of someone, no mater who that person is. I do not accept being a prisoner in my own house because all the roads around my house are blocked because of GWB&#39;s visit.&lt;br /&gt;&lt;br /&gt;And how much money is going to be lost in that day? All businesses are going to be closed. How many millions of man hours are going to be lost? And how many business deals are going to be delayed this day? How many people in need for hospitals and medical care are going to have to take alternate routes through traffic jams that no one thought possible, because the main express ways are closed, and no one will know how to reach their destinations? How many people are going to get delayed for their flights? &lt;br /&gt;&lt;br /&gt;I really hate what&#39;s happening, but anyway, I&#39;ll try to enjoy my day in the morning by relaxing at home.</description><link>http://jnassef.blogspot.com/2008/01/welcome-mr-bush.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-1091758566959655057</guid><pubDate>Wed, 12 Dec 2007 18:12:00 +0000</pubDate><atom:updated>2008-01-06T14:03:49.939+02:00</atom:updated><title>Something is wrong between me and the design patterns book</title><description>About a year ago, I bought &lt;a href=&quot;http://www.amazon.com/gp/product/0596007124?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596007124&quot;&gt;Head First Design Patterns&lt;/a&gt;&lt;img style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=&quot;1&quot; alt=&quot;&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596007124&quot; width=&quot;1&quot; border=&quot;0&quot; /&gt;, which is a really great book. I started reading it right away, and I was reading &lt;a href=&quot;http://www.amazon.com/gp/product/0596005407?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596005407&quot;&gt;Head First Servlets and JSP&lt;/a&gt;&lt;img style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=&quot;1&quot; alt=&quot;&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596005407&quot; width=&quot;1&quot; border=&quot;0&quot; /&gt; together with it while I was on an assignment in Alexandria. Suddenly, something weird happened. I reached the chapter on the command design pattern, and then got back to Cairo to get stuck in crisis mode for two months, which didn&#39;t leave much reading time for me. I lent the book to a friend of mine, and kept the servlets &amp;amp; jsp book to read in my free time.&lt;br /&gt;&lt;br /&gt;After the crisis mode I had a knee operation to regenerate my torn ACL, had a month sick leave, and went to visit my family in Abu Dhabi, but without the book. Went back to Cairo after that month to get an assignment in Dubai, and I got the book this time, only to leave it on the shelf until I study for the SCWCD certificate from the servlets &amp;amp; jsp book.&lt;br /&gt;&lt;br /&gt;When I had time to read it, I ignored it for a while to read &lt;a href=&quot;http://www.amazon.com/gp/product/0061146609?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0061146609&quot;&gt;The Jesus Papers&lt;/a&gt;&lt;img style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=&quot;1&quot; alt=&quot;&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0061146609&quot; width=&quot;1&quot; border=&quot;0&quot; /&gt;, which I loved by the way. Finally, I had a chance to start reading the design patterns book again. I revised what I had already read a very long time ago, and again reached the command pattern chapter, and guess what?! I had to travel between Dubai and Abu Dhabi twice a week, since my wife and kid were in Abu Dhabi with my parents, and I was in Dubai for work. Of course this didn&#39;t leave me any reading time. I went back to Cairo a couple of weeks ago for ten days, where I didn&#39;t even have time to sleep. I&#39;m back in Dubai, and I have the book with me, and I hope that I would be able to start reading it again. Wish me luck.</description><link>http://jnassef.blogspot.com/2007/12/something-is-wrong-between-me-and.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-7951246410387177498</guid><pubDate>Mon, 03 Dec 2007 14:01:00 +0000</pubDate><atom:updated>2008-05-07T13:38:48.497+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IDEs</category><category domain="http://www.blogger.com/atom/ns#">NetBeans</category><category domain="http://www.blogger.com/atom/ns#">News</category><title>Netbeans 6 is finally here</title><description>Finally, NetBeans 6 is released. It has some really great features like profiling and support for ruby. Also their Swing GUI builder (formerly known as Matisse) is really great, and it now supports Beans Binding and Swing Application Framework. The only thing I don&#39;t like about the use of the GUI builder is that it doesn&#39;t allow you to edit the code it generates yourself, which is really annoying for hardcore developers. Overall, NetBeans is really great, and it really excels in some great areas. For the full feature list, please check &lt;a href=&quot;http://www.netbeans.org/features/all.html&quot;&gt;this link&lt;/a&gt;.</description><link>http://jnassef.blogspot.com/2007/12/netbeans-6-is-finally-here.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-8642105927301614753</guid><pubDate>Tue, 20 Nov 2007 09:55:00 +0000</pubDate><atom:updated>2008-05-07T13:38:25.599+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">News</category><category domain="http://www.blogger.com/atom/ns#">Spring</category><title>Spring 2.5 is out</title><description>&lt;a href=&quot;http://www.springframework.org/node/561&quot;&gt;Spring 2.5 is out&lt;/a&gt;,  and it introduces several new exciting features. One of the most exciting features in the new version is the java configuration, and automatic discovery of spring beans. Well, since the beginning of the Spring framework, wiring components to each other and configuring which class will be injected where was done only using XML. Yes, the people behind spring always said that any format can be used to do the configuration, but you have to write your own classes to implement the format you are going to use. Hence, there was nothing but XML until today.&lt;br /&gt;&lt;br /&gt;As of now, you can use the auto-wiring features provided by the new version of spring to put the wiring configurations as annotations in your java code. You will still be using XML, but the amount of XML you need to write will be reduced significantly. &lt;a href=&quot;http://www.thespringexperience.com/conference/speaker/mark_fisher.html&quot;&gt;Mark Fisher&lt;/a&gt; wrote a great article on InfoQ titled &lt;a href=&quot;http://www.infoq.com/articles/spring-2.5-part-1&quot;&gt;What&#39;s New in Spring 2.5: Part 1&lt;/a&gt;. Looking forward for part 2.</description><link>http://jnassef.blogspot.com/2007/11/spring-25-is-out.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-7363092018230806524</guid><pubDate>Sat, 17 Nov 2007 19:06:00 +0000</pubDate><atom:updated>2008-01-14T22:10:08.044+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Personal Opinion</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Politics in Software Development</title><description>Politics is present in every aspect of our life, whether we realize it or not. It&#39;s present in the way you treat your family, your in-laws, and your coworker. It&#39;s even present in software development.&lt;br /&gt;&lt;br /&gt;Ever wonder why Microsoft made Windows Mail in Vista not able to have Hotmail (now Windows Live Hotmail) accounts (unlike Outlook Express), and then months later they release Windows Live Mail which has this feature? Haven&#39;t you ever thought why when you want to download the new version of MSN Messenger (now Windows Live Messenger), you have to download an installer which has the options of downloading several other new Windows Live products that you never heard of (Mail, Writer, Photo Sharing, etc)?&lt;br /&gt;&lt;br /&gt;Why does Microsoft&#39;s Windows Live Family Safety require that each and every member of your household should have a windows live ID so that he/she can access the internet? You say marketing? I say marketing falls under the umbrella of politics.&lt;br /&gt;&lt;br /&gt;If the above examples don&#39;t strongly show clearly how company politics affect software development, the following ones will certainly do so.&lt;br /&gt;&lt;br /&gt;Sun&#39;s business is mainly hardware, servers to be specific. Sun is also the company that maintains java. Now java is supposed to be platform independent, and we (java developers) claim that it runs on each and every availabal platform, right? &lt;span style=&quot;font-weight: bold;&quot;&gt;WRONG!&lt;/span&gt; Sun creates JDKs and JREs for Windows, Linux and Solaris only, meaning that if you have an HP or an IBM server, you will not be able to get Sun&#39;s JVM. HP and IBM develop their own JVMs, but of course the available Java version on those machines is always behind that of Sun. Currently, HP and IBM have JVMs that run java 5, which is more than three years old.&lt;br /&gt;&lt;br /&gt;Sun simply won&#39;t release versions of java for AIX or HP-UX since it will be releasing it for competitors in the hardware business. If it did, enterprises that have java applications and need to use the latest features may go to Sun&#39;s competitors. Sun releases versions for Windows to stop Microsoft from dominating the software development market, and if this is done, the market share of dot net will increase while that of java will decrease, and since dot net doesn&#39;t work on anything other than Windows, Sun will be losing a large part of the hardware market for windows based servers.&lt;br /&gt;&lt;br /&gt;Sun also open sourced it&#39;s star office suite to create &lt;a href=&quot;http://www.openoffice.org/&quot;&gt;openoffice.org&lt;/a&gt;, and they open sourced Solaris, and made it compatible with desktop and laptop hardware. Why? To go another step in stopping Microsoft Windows from dominating the desktop market, so that it would slow down the growth of the dot net community, so that software in the market would be runnable on UNIX and not just Windows, so that it would increase it&#39;s the possibility of people going for Sun servers.&lt;br /&gt;&lt;br /&gt;I believe that Sun&#39;s war with Microsoft could simply be over (or at least won&#39;t be as strong) if Microsoft made dot net platform independent, but Microsoft will never go for such a move. Microsoft wants to dominate the desktop environment with Windows, and it&#39;s very strong competition from Apple and Linux. Microsoft is using the dot net technology, with their fabulous IDE to market Windows. If suddenly dot net applications ran on Linux, for example, Microsoft may lose a huge market share.&lt;br /&gt;&lt;br /&gt;I think that projects like &lt;a href=&quot;http://www.winehq.org/&quot;&gt;WINE&lt;/a&gt; must make Microsoft live in fear. Maybe that&#39;s why Microsoft made a lot of changes to Vista that made a lot of programs not compatible with it. What had happened is that the software vendors made their software compatible with Vista, and everything went back to normal, except that projects like WINE and &lt;a href=&quot;http://www.reactos.org/&quot;&gt;REACTOS&lt;/a&gt; went one step behind.&lt;br /&gt;&lt;br /&gt;I believe that a lot of changes that were introduced to Vista were just to make it incompatible with such projects (such as changing &quot;Documents and Settings&quot; to &quot;Users&quot; and  a lot of folders under the user folder like &quot;Local Settings&quot; for example to &quot;AppData\Local&quot; or something like that, and a countless more changes). I believe that such changes have no meaning other that what I assumed earlier.&lt;br /&gt;&lt;br /&gt;Now let&#39;s go back to Sun again. Sun is &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;THE&lt;/span&gt; supporter for Netbeans, which is a great IDE by the way. On the other side of the table, we have the more popular Eclipse, and guess what, IBM led the Eclipse Consortium (and it&#39;s the one that created Eclipse). Now someone would say that both are open source projects, and it doesn&#39;t make a difference to the companies what IDE developers use, right?. I again say &lt;span style=&quot;font-weight: bold;&quot;&gt;WRONG!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;IBM is in the software business, and being familiar with Eclipse makes you somewhat familiar with Websphere and Rational Tools, that are built over Eclipse. Being familiar with those IBM products may lead to you using the Websphere application server, and if you do, which operating system and hardware are the best for such a server? IBM hardware and AIX is the answer. What was Sun&#39;s response? Open source Sun application server and create project glassfish, hence you have a high end application server from Sun for free, and of course it supports the latest java technologies months (or even years) before other application servers (like servlets 2.5, JSP 2.1 and other JEE 5 features for example).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;Back to Netbeans and Eclipse. Both IDEs allow developers to create custom plugins, but Eclipse recently (not very recently, actually about a year and a half ago) changed their framework to use Equinox, which is Eclipse&#39;s implementation of OSGi. OSGi is maintained by a large group of corporations, that include both IBM and Sun Microsystems, and both were founders of the OSGi Alliance. Having IBM and Sun working together is not something to be surprised from, because, as I mentioned before, it&#39;s all about politics.&lt;br /&gt;&lt;br /&gt;Now Eclipse implemented OSGi by creating Equinox, what will Netbeans do? Well, as an active member of the Netbeans team told me once, they are waiting. They already have their pluggable framework. If they go to OSGi, they have to choose an implementation, and for sure they won&#39;t use Equinox. Even if they go for any other implementation (Apache Felix or Knopflerfish for example) or even create their own, they would still be switching to OSGi after eclipse did, hence Netbeans would be following Eclipse&#39;s steps (or as someone else would be seeing it, Sun would be following IBM&#39;s steps).&lt;br /&gt;&lt;br /&gt;So, what&#39;s next? Well, there is a JSR (JSR 277) which was created to create Java Module System, which is very similar to OSGi, and guess what, IBM is not in the expert group. As I mentioned seconds ago, the Netbeans team is waiting to see which one will win, Java Modules or OSGi, but I reckon that they will either go for Java Modules once the JSR is finalized, or they will stay as they are. I&#39;m quiet confident that they will never go for OSGi.&lt;br /&gt;&lt;br /&gt;I believe that this post became much longer, than I wanted it to be, but I can still go on with the subject for much longer. I wanted to get to a point, and that is, politics between large companies have a great effect on software development. Even with open source projects, when a project becomes very popular, large companies tend to create standards similar it. Examples in java include log4j &amp;amp; JDK 1.4 logging, Hibernate &amp;amp; JPA and of course OSGi &amp;amp; java modules (OSGI and java modules have some differences of course). It&#39;s then up to the original creator of the open source project to implement the standard (like hibernate implementing JPA).&lt;br /&gt;&lt;br /&gt;I&#39;m not at all against Sun (actually I&#39;m a huge fan), but I took it as an example. I&#39;m also not against standardization. I just wanted to speak about the subject of why large corporations do what they do.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Edit on 12/12/2007&lt;br /&gt;&lt;/span&gt;HP released java 6 in November and IBM release java 6 just this month, which is still two years after the release by Sun.&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;</description><link>http://jnassef.blogspot.com/2007/11/politics-in-software-development.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-3736799456983469868</guid><pubDate>Sat, 10 Nov 2007 10:11:00 +0000</pubDate><atom:updated>2007-12-13T08:38:41.073+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Logging</category><category domain="http://www.blogger.com/atom/ns#">Spring</category><title>Logback web configurer for Spring</title><description>On thing that should be mentioned about logback is that spring doesn&#39;t have a ConfigListener for it like the one it has for log4j (the &lt;span style=&quot;font-family:courier new;&quot;&gt;org.springframework.web.util.Log4jConfigListener&lt;/span&gt; class). Well, you can write your own code based on the spring source.  Thankfully to &lt;a href=&quot;http://www.javablogs.com/views/ViewProfile.action?name=immanuel&quot;&gt;Davide Baroncelli&lt;/a&gt;, he already did that for us. He had already sent the code to the logback user mailing list. The &lt;a href=&quot;http://www.nabble.com/logback-initialization-%22%C3%A0-la%22-Spring-td12919888.html&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;the thread&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.nabble.com/logback-initialization-%22%C3%A0-la%22-Spring-td12919888.html&quot;&gt;&lt;/a&gt; is available online on Nabble, so that if you would like to view it. He also has an updated version that supports auto reloading for logback configurations. Thanks Davide</description><link>http://jnassef.blogspot.com/2007/11/logback-web-configurer.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-8268917164691966543</guid><pubDate>Sat, 20 Oct 2007 10:54:00 +0000</pubDate><atom:updated>2008-01-06T14:01:20.255+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Non Java</category><category domain="http://www.blogger.com/atom/ns#">Windows Vista</category><title>Windows Vista Screen Flicker</title><description>Well, this post has nothing to do with java, but I though it would be important, since this issue caused me a lot of frustration. I recently bought a laptop with Windows Vista Home Premium, and I was frustrated at what seemed to me that it was a hardware problem. Well, it wasn&#39;t. It was a windows &quot;feature&quot; ;-)&lt;br /&gt;&lt;br /&gt;The &quot;feature&quot; that annoyed me was that the screen blinked a couple of times when I was logging in, in a matter that seemed as if the screen is faulty. The same thing happened when I wanted to do something that windows think that I shouldn&#39;t do, like moving a read only file, or run an executable program (yet another windows &quot;feature&quot;). When I tried to do any of those actions that would cause a security problem, I got a prompt to ask me if I allow this action, with the desktop disabled, and with an occasional screen blink (totally random).&lt;br /&gt;&lt;br /&gt;Well, after some googling, I found the causes of those two really annoying &quot;features&quot;. The first &quot;feature&quot; was the &lt;a href=&quot;http://www.microsoft.com/whdc/system/platform/mobilepc/TMM.mspx&quot;&gt;Transient Multimon Manager (TMM)&lt;/a&gt;. This TMM is &quot;a Microsoft Windows Vista operating system feature&quot; responsible for detecting your monitors as you connect/disconnect them to/from your mobile PC. You may regard TMM as a good feature in case you use multiple displays (external monitor, projector, etc.) especially that &quot;TMM persists the user&#39;s settings on a per-display basis when possible&quot;.&lt;br /&gt;&lt;br /&gt;When you seldom use multiple displays (like me), TMM is of no value. So, how do we turn it off? Simple. Go to task scheduler (present under &quot;Accessories/System Tools&quot;), then go to &quot;Task Scheduler Library/Microsoft/Windows/MobilePC&quot;, and you&#39;ll find a TMM task. Disable it, and you&#39;re done (of course you&#39;ll have to restart your system for the change to take effect, because the task will already be running). You can also disable the trigger of the task. I do not recommend deleting the task altogether, since you might need it in the future.&lt;br /&gt;&lt;br /&gt;Now for the second &quot;feature&quot;. Windows vista has what&#39;s called &quot;secure desktop&quot;. Well, it is a good feature to be frank. When you try to do an action that Vista thinks that it might be the result of a malicious action, it will prompt you whether you allow this action or not. This is not &quot;secure desktop&quot; by the way. Secure desktop is responsible for locking all the processes running in the background so that if the action was really performed by a piece of malicious software, it wouldn&#39;t give this piece of software the ability to mimic the user allowing the action to be performed.&lt;br /&gt;&lt;br /&gt;So, if you think that you will never have malicious software, and you don&#39;t want secure desktop, all you have to do is to run your registry editor (just type &quot;regedit&quot; in the &quot;run&quot; screen), and go to &quot;HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/&lt;br /&gt;CurrentVersion/Policies/System&quot;, and change the value of the &quot;PromptOnSecureDesktop&quot; to &quot;&lt;span style=&quot;font-family:courier new;&quot;&gt;0&lt;/span&gt;&quot; (that&#39;s a zero not an O) instead of &quot;&lt;span style=&quot;font-family:courier new;&quot;&gt;1&lt;/span&gt;&quot;. This will remove secure desktop (hence the occasional blinking) but will not remove the prompting. I recommend that you keep secure desktop for the security reasons, but that&#39;s just me.&lt;br /&gt;&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Edit on &lt;span style=&quot;color:#ff0000;&quot;&gt;6/1/2008&lt;/span&gt;:&lt;/span&gt;&lt;br /&gt;I would like to thank Matt for supplying this &lt;a href=&quot;http://netsaber.wordpress.com/2007/06/01/vista-display-problems-solved-2/&quot;&gt;link&lt;/a&gt; in his comment. I think that the screen shot woul give you a little help. Thanks Matt</description><link>http://jnassef.blogspot.com/2007/10/windows-vista-screen-flicker.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-1474156193381524993</guid><pubDate>Sat, 13 Oct 2007 12:48:00 +0000</pubDate><atom:updated>2007-12-04T15:34:52.835+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Logging</category><title>Commons Logging may be harmful to your health</title><description>All of us know that decoupling your code from the frameworks you use is a really great thing. This is why bridge libraries like &lt;a href=&quot;http://commons.apache.org/logging/&quot;&gt;commons logging&lt;/a&gt; are really wonderful. Just imagine how much code you will be changing if you are using log4j APIs in all of you application classes, and then a decision was made to start using the java APIs instead. Think of how much code would be changed. But with commons logging, the code changes would be minimal. Another thing, look at how many open source projects that are using commons logging. This must mean that commons logging is a good thing, right? &lt;span style=&quot;font-weight: bold;&quot;&gt;WRONG!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, let us define the meanings of &quot;good&quot; and &quot;bad&quot; concerning libraries such as commons logging. I think, that a &quot;good&quot; library would be able to bridge your logging requests to the logging framework of your preference with minimum interference and a very small overhead. I don&#39;t have to mention here that it should be stable and bug free of course. Another thing, which I personally think that it&#39;s very important, is that it should be as simple as possible.&lt;br /&gt;&lt;br /&gt;If we take a look at JCL (Jakarta Commons Logging), we&#39;ll find that a lot of those aspects are not met. JCL works in a quiet complex way. It has a discovery mechanism to see which logging library you have in your application, and then uses class loading to load the logger that will be used. Even though this does the job, this class loading solution has its drawbacks. First of all, this may cause a lot of problems if your application is in a strict class loading environment (like OSGI for example).  Another thing, JCL has a bad history with it&#39;s class loading solution.&lt;br /&gt;&lt;br /&gt;Version 1.04 of JCL that was released on the 16th of June 2004 had some serious problems with its class loading mechanism. Ceki Gülcü (the original author of log4j) wrote a &lt;a href=&quot;http://www.qos.ch/logging/classloader.jsp&quot;&gt;marvelous article&lt;/a&gt; on the subject. He also wrote a &lt;a href=&quot;http://www.qos.ch/logging/thinkAgain.jsp&quot;&gt;great piece&lt;/a&gt; on JCL, but might be a little outdated. Even though version 1.1 of JCL, released about 2 years after 1.04, claims that the bug is fixed, it&#39;s still a risk to use it, especially for the complexity of this library.&lt;br /&gt;&lt;br /&gt;Another thing that needs to be mentioned here is that Rod Waldhoff, the author of commons logging, wrote a &lt;a href=&quot;http://radio.weblogs.com/0122027/2003/08/15.html&quot;&gt;blog entry&lt;/a&gt; in 2003, titled &quot;Commons Logging was my fault&quot;, where, in the last part of it, he says where to use and, more importantly, not to use JCL. To conclude it, JCL should be used in small and tiny &lt;span style=&quot;font-style: italic;&quot;&gt;components&lt;/span&gt; that are intended to be used by other developers in their projects. Even with that, &lt;a href=&quot;http://www.blogger.com/profile/15976519439979651010&quot;&gt;Erik van Oosten&lt;/a&gt; created a &lt;a href=&quot;http://day-to-day-stuff.blogspot.com/2007/10/announcement-version-99-does-not-exist.html&quot;&gt;project&lt;/a&gt; called &quot;Version 99 Does Not Exist&quot;, which is an empty JAR with a pom file and maven meta data, so that you would put it in your maven repository, so that libraries that depend on JCL would not download it from the net, since the empty JAR is version 99.&lt;br /&gt;&lt;br /&gt;So what else should we use? Well, I think that &lt;a href=&quot;http://www.slf4j.org/&quot;&gt;SLF4J&lt;/a&gt; is a great project. It&#39;s a simple facade for various logging APIs. The beauty of it is that instead of the class loading solution, it is just a simple facade, where you just plug in the desired implementation at deployment time. It&#39;s a very simple solution, &quot;perhaps even laughably so&quot; as stated in their FAQ.&lt;br /&gt;&lt;br /&gt;SLF4J is wonderful, simple, stable and can be used in strict class loading environments like OSGI. It can be used with log4j, jdk1.4 logging, SimpleLogger, logback and x4juli (the latter 2 provide native implementation of SLF4J APIs). It&#39;s very simple to migrate to SLF4J from JCL. Simply download &quot;jcl104-over-slf4j.jar&quot;, and it will delegate JCL calls to SLF4J.&lt;br /&gt;&lt;br /&gt;SLF4J also has a couple of great features, parameterized logging and MDC support. Parameterized logging can cause a significant increase in the performance. One last thing that I have noticed, which is quiet funny really, several apache projects use SLF4J instead of commons logging. This sure shows that SLF4J is on the right track.</description><link>http://jnassef.blogspot.com/2007/10/commons-logging-may-be-harmful-to-your.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-4883781768680016908</guid><pubDate>Sat, 15 Sep 2007 11:18:00 +0000</pubDate><atom:updated>2008-01-14T22:01:48.772+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Book Review</category><title>Complete Java 2 Certification Study Guide (Sybex)</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.amazon.com/gp/product/0782144195?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0782144195&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;http://ecx.images-amazon.com/images/I/21NW2TEP72L._AA_SL160_.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0782144195&quot; alt=&quot;&quot; style=&quot;border: medium none  ! important; margin: 0px ! important; display: none;&quot; border=&quot;0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;This is my second review, and again, it&#39;s a java certification book. This was the book I studied from for my certification exam, and thanks to God, I did pretty well.&lt;br /&gt;&lt;br /&gt;The book is well constructed, with a lot of info, and a lot of great exercises at the end of each chapter, plus a mock exam, and four sample exams on the accompanying CD. Unfortunately, the book is full of typos, and there are several mistakes with the exam and the review questions, which is quiet a shame. Those mistakes turn this book from a great book, to a &quot;just quiet satisfactory&quot; book. Some of the mistakes are clearly due to lack of revision of the changes done to this edition, so conflicts show up in a couple of places.&lt;br /&gt;&lt;br /&gt;An example to what I mean is that starting from Java 5.0, the return type of the overriding method could be a child of the return type of the overridden method, and it&#39;s stated clearly in the middle of the chapter, but in the summary at the of the chapter, it&#39;s mentioned that the return type of the overriding method must be exactly the same as the overridden method, and can&#39;t even be a subclass of it (which is true for pre-5.0). This is clearly something that was in previous editions of the book, and wasn&#39;t changed where it was supposed to be. Several mistakes like this occur in the book.&lt;br /&gt;&lt;br /&gt;The book is worth it&#39;s price, but only if you are going to be careful while studying from it, and check other sources, whether they are other books, or freely available resources on the internet. If you are going to study from one book, and one book only, and will not rely on any other resources, then this is not the book for you. The book is not a bad choice, but there are several other better study guides in the market, like Katherine&#39;s Sierra&#39;s and Bert Bate&#39;s SCJP Sun Certified Programmer for Java 5 Study Guide from Osbourne. I checked it out, and it looks great.&lt;br /&gt;&lt;br /&gt;Buy &lt;a href=&quot;http://www.amazon.com/gp/product/0782144195?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0782144195&quot;&gt;Complete Java 2 Certification Study Guide&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0782144195&quot; alt=&quot;&quot; style=&quot;border: medium none  ! important; margin: 0px ! important; display: none;&quot; border=&quot;0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt; from amazon&lt;br /&gt;Buy &lt;a href=&quot;http://www.amazon.com/gp/product/0072253606?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0072253606&quot;&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0072253606&quot; alt=&quot;&quot; style=&quot;border: medium none  ! important; margin: 0px ! important; display: none;&quot; border=&quot;0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt; from amazon&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.assoc-amazon.com/s/link-enhancer?tag=alnasjabl-20&amp;amp;o=1&quot;&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;br /&gt;    &lt;img src=&quot;http://www.assoc-amazon.com/s/noscript?tag=alnasjabl-20&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/noscript&gt;</description><link>http://jnassef.blogspot.com/2007/09/complete-java-2-certification-study.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-7984580381905328048</guid><pubDate>Sat, 11 Aug 2007 08:41:00 +0000</pubDate><atom:updated>2007-10-21T07:41:03.145+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Acegi security</category><title>Dynamic roles management in acegi security: Part 2</title><description>Last time we stopped at a problem, and that was the fact that the bean holding the secure URL patterns is loaded only once at application startup. Now, when we need to alter the access rights of roles, we will need to restart the application, and this is really not very flexible.&lt;br /&gt;&lt;br /&gt;There are a couple of solutions to this problem. The first is to reload the filter invocation interceptor, and set the object definition source in it with an instance that holds the new values, like the following example:&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 390px; HEIGHT: 208px&quot; border=&quot;1&quot;&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;tt&gt;&lt;big&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;UrlPatternRolesDefinitionSource myRoles = (UrlPatternRolesDefinitionSource) applicationContext.getBean (&quot;objectDefinitionSource&quot;); &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;FilterSecurityInterceptor filterSecurityInterceptor = (FilterSecurityInterceptor) applicationContext.getBean (&quot;filterInvocationInterceptor&quot;); &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;filterSecurityInterceptor.setObjectDefinitionSource (myRoles);&lt;br /&gt;&lt;/p&gt;&lt;/big&gt;&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Only here we have a trick that should be done. The bean &lt;tt&gt;&lt;big&gt;objectDefinitionSource&lt;/big&gt;&lt;/tt&gt; should be declared as non-singleton in the XML configuration, either by specifying its &lt;tt&gt;&lt;big&gt;scope=&quot;prototype&quot;&lt;/big&gt;&lt;/tt&gt; or by specifying &lt;tt&gt;&lt;big&gt;singleton=&quot;false&quot;&lt;/big&gt;&lt;/tt&gt;. This solution has a problem, and it is that the whole list of roles and secure URL patterns will be reloaded from the database (or whatever your datasource is).&lt;br /&gt;&lt;br /&gt;The other solution is to create your own &lt;big&gt;&lt;tt&gt;ConfigAttributeDefinition&lt;/tt&gt;&lt;/big&gt; that extends the one supplied by acegi. The main reason for doing this is that the one supplied by acegi doesn&#39;t have a &lt;big&gt;&lt;tt&gt;removeAttribute&lt;/tt&gt;&lt;/big&gt; method.I suggest overriding this implementation to add a &lt;big&gt;&lt;tt&gt;removeAttribute&lt;/tt&gt;&lt;/big&gt; method. I also prefer if you would use an &lt;big&gt;&lt;tt&gt;ArrayList&lt;/tt&gt;&lt;/big&gt; or a &lt;big&gt;&lt;tt&gt;Map&lt;/tt&gt;&lt;/big&gt; instead of the &lt;big&gt;&lt;tt&gt;Vector&lt;/tt&gt;&lt;/big&gt; used by the acegi implementation to represent the &lt;big&gt;&lt;tt&gt;configAttributes&lt;/tt&gt;&lt;/big&gt;&lt;br /&gt;&lt;br /&gt;This &lt;big&gt;&lt;tt&gt;ConfigAttributeDefinition&lt;/tt&gt;&lt;/big&gt; should be the one you use in the &lt;big&gt;&lt;tt&gt;UrlPatternDefinitionSource&lt;/tt&gt;&lt;/big&gt; that we created in part one of this article.&lt;br /&gt;&lt;br /&gt;In the class(es) that will be manipulating the the roles, you should inject the &lt;big&gt;&lt;tt&gt;UrlPatternDefinitionSource&lt;/tt&gt;&lt;/big&gt; instance that acegi creates (using spring&#39;s configuration files). You then get the &lt;big&gt;&lt;tt&gt;ConfigAttributeDefinition&lt;/tt&gt;&lt;/big&gt; for your role using the &lt;big&gt;&lt;tt&gt;lookupAttribute&lt;/tt&gt;&lt;/big&gt; method in the &lt;big&gt;&lt;tt&gt;UrlPatternDefinitionSource&lt;/tt&gt;&lt;/big&gt; class. A code snippet is shown below.&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 390px; HEIGHT: 208px&quot; border=&quot;1&quot;&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;tt&gt;&lt;big&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;UrlPatternRolesDefinitionSource uprds = definitionSource;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;ConfigAttribute config = new SecurityConfig(role.getName());&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Set&lt;UrlPattern&gt; patternsSet = role.getUrlPatterns();&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;List&lt;UrlPattern&gt; list = urlPatternDao.listUrlPatternsOfRole(role);&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;List&lt;UrlPattern&gt; oldUrlPatternsOfRole = new ArrayList&lt;UrlPattern&gt;();&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//get list of old url patterns of role&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;for (UrlPattern urlWithRole : list) {&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  oldUrlPatternsOfRole.add(urlWithRole);&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//update role in database&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;roleDao.updateRole(role);&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//do not allow the role to access old url patterns&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;for (UrlPattern pattern : oldUrlPatternsOfRole) {&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  MyConfigAttributeDefinition configDefinition = (MyConfigAttributeDefinition) uprds.lookupAttributes(pattern.getUrlPattern());&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  configDefinition.removeConfigAttribute(config);&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//allow the role to access the new set of url patterns&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;for (UrlPattern pattern : patternsSet) {&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  //get the pattern itself from DB, since all we have is the id of the pattern only&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  pattern = urlPatternDao.retrieveUrlPattern(pattern.getId());&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  MyConfigAttributeDefinition configDefinition = (MyConfigAttributeDefinition) uprds.lookupAttributes(pattern.getUrlPattern());&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  configDefinition.addConfigAttribute(config);&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/big&gt;&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The previous code may need some optimization, but it was just to give you a general idea about how to implement dynamic role management.&lt;br /&gt;&lt;br /&gt;I hope that this article was useful, and I apologize once more for the delay.</description><link>http://jnassef.blogspot.com/2007/08/dynamic-roles-management-in-acegi.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-8916346871740792792</guid><pubDate>Tue, 07 Aug 2007 09:08:00 +0000</pubDate><atom:updated>2007-08-07T12:14:23.449+03:00</atom:updated><title>Apology</title><description>I just want to apologize for being late with the second part of the ACEGI security article, but I had some work pressure, and a lot of traveling between Cairo, Dubai and Abu Dhabi lately, which made it quiet hard to complete the article, but I promise that I&#39;ll try my best to finish the article before the beginning of next week, in spite of the fact that I&#39;m still traveling between Dubai and Abu Dhabi every weekend. I apologize again.</description><link>http://jnassef.blogspot.com/2007/08/apology.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-6628059175470116178</guid><pubDate>Wed, 11 Jul 2007 12:38:00 +0000</pubDate><atom:updated>2008-10-11T15:29:44.947+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Acegi security</category><title>Dynamic roles management in acegi security: Part 1</title><description>&lt;a href=&quot;http://acegisecurity.org/&quot;&gt;Acegi security&lt;/a&gt; is a great powerful and flexible security solution. What I don&#39;t like about it is the lack of documentation and samples provided, and this is why I thought of writing about this subject today.&lt;br /&gt;&lt;br /&gt;The example that comes with acegi security, and the one that comes with &lt;a href=&quot;http://appfuse.org/&quot;&gt;appfuse&lt;/a&gt; define secure URL patterns, and the roles that can access them in the XML configuration file, which is not a very flexible solution. It is a good approach if you have predefined roles and access rights , that are never going to change (or the changes are very rare). In case you have a security module, where you define which role can access which URL patterns, this method is the worst thing you could do.&lt;br /&gt;&lt;br /&gt;The solution to this problem is to define your own data source, which loads the secure URL patterns and the corresponding roles that can access it from somewhere (database for example). A simple way to do that is by extending &lt;a href=&quot;http://www.acegisecurity.org/acegi-security/apidocs/org/acegisecurity/intercept/web/PathBasedFilterInvocationDefinitionMap.html&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;PathBasedFilterInvocationDefinitionMap&lt;/span&gt;&lt;/a&gt; and loading the secure URL patterns and the roles that can access them in an initialization method or in the constructor. Here&#39;s an example:&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;width: 390px; height: 700px;&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;big&gt;public class UrlPatternRolesDefinitionSource extends PathBasedFilterInvocationDefinitionMap {&lt;br /&gt;&lt;br /&gt;public void init(){&lt;br /&gt;Session session = sessionFactory.openSession();&lt;br /&gt;try{&lt;br /&gt;&lt;br /&gt;List&lt;urlpattern&gt; urlPatternsList = urlPatternDao.listUrlPatterns(session);&lt;br /&gt;&lt;br /&gt;for (UrlPattern pattern : urlPatternsList) {&lt;br /&gt;&lt;br /&gt;ConfigAttributeDefinition configDefinition = new ConfigAttributeDefinition();&lt;br /&gt;&lt;br /&gt;for(Role role: pattern.getRoles()){&lt;br /&gt;&lt;br /&gt;ConfigAttribute config = new SecurityConfig(role.getAuthority());&lt;br /&gt;&lt;br /&gt;configDefinition.addConfigAttribute(config);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;addSecureUrl(pattern.getUrlPattern(), configDefinition);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch (FindException e) {&lt;br /&gt;// Handle exception&lt;br /&gt;}&lt;br /&gt;finally {&lt;br /&gt;session.close();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/urlpattern&gt;&lt;/big&gt;&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;In this example I used a &lt;a href=&quot;http://www.hibernate.org/&quot;&gt;Hibernate&lt;/a&gt; DAO I created (&lt;span style=&quot;font-family:courier new;&quot;&gt;urlPatternDao&lt;/span&gt;) to retrieve the secure URL patterns which is defined and initialized with the &lt;span style=&quot;font-family:courier new;&quot;&gt;sessionFactory&lt;/span&gt; somewhere else in the code (using &lt;a href=&quot;http://www.springframework.org/&quot;&gt;spring&lt;/a&gt;&#39;s dependency injection). You can implement it anyway you like (JDBC, with any other ORM framework, or any other method you like).&lt;br /&gt;&lt;br /&gt;In this example, each URL pattern can has a set roles that can access it, so I loop over this set to create the &lt;a href=&quot;http://www.acegisecurity.org/acegi-security/apidocs/org/acegisecurity/ConfigAttributeDefinition.html&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;ConfigAttributeDefinition&lt;/span&gt;&lt;/a&gt;. I prefer if you have your own implementation of the &lt;span style=&quot;font-family:courier new;&quot;&gt;ConfigAttributeDefinition&lt;/span&gt;, but this is going to be discussed in part 2 of this article. Of course the Role class used in this code implements the &lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;a href=&quot;http://www.acegisecurity.org/acegi-security/apidocs/org/acegisecurity/GrantedAuthority.html&quot;&gt;GrantedAuthority&lt;/a&gt;&lt;/span&gt; interface.&lt;br /&gt;&lt;br /&gt;As for the XML configuration of this entry, it&#39;s shown below:&lt;br /&gt;&lt;table style=&quot;width: 390px; height: 564px;&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;big&gt;&amp;lt;bean id=&quot;filterInvocationInterceptor&quot; class=&quot;org.acegisecurity.intercept.web. FilterSecurityInterceptor&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name=&quot;authenticationManager&quot; ref=&quot;authenticationManager&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name=&quot;accessDecisionManager&quot; ref=&quot;accessDecisionManager&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name=&quot;objectDefinitionSource&quot; ref=&quot;objectDefinitionSource&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id=&quot;objectDefinitionSource&quot; class= &quot;net.jnassef.security.UrlPatternRolesDefinitionSource&quot; init-method=&quot;init&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name=&quot;convertUrlToLowercaseBeforeComparison&quot;&amp;gt;&lt;br /&gt;&amp;lt;value type=&quot;boolean&quot;&amp;gt;false&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name=&quot;urlPatternDao&quot; ref=&quot;urlPatternDao&quot;/&amp;gt;&lt;br /&gt;&amp;lt;property name=&quot;sessionFactory&quot; ref=&quot;sessionFactory&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/big&gt;&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;As for the first bean in the previous snippet, this definition is the default that comes with the sample acegi application and with appfuse, except to the reference to the &lt;span style=&quot;font-family:courier new;&quot;&gt;objectDefinitionSource&lt;/span&gt; bean which was added by us, to allow dynamic role management. The second bean maps to the class we created, and defines the initialization method, that will load the secured URL patterns, and the roles associated with them. This definition also sets the DAO and the hibernate session factory used by the class. Of course you don&#39;t need those if you want to have any other implementation.&lt;br /&gt;&lt;br /&gt;The previous implementation seems good as a solution for dynamic role management, but if we look more closely, it&#39;s not a very good solution (or to be more accurate, it&#39;s not a complete solution). The problem that is going to face us here is that secure URL patterns are loaded only &lt;b&gt;ONCE&lt;/b&gt; at the application start up, and any change done to the role access rights will not effective until the application is started, and this is not dynamic at all. In fact, there is no difference between this solution, and having the access rights in the XML configuration file, except that you will not need to redeploy your application, but you will need to restart it. There are several solutions to this problem, and this will be the main focus of the next part of this article.</description><link>http://jnassef.blogspot.com/2007/07/dynamic-roles-management-in-acegi.html</link><author>noreply@blogger.com (Alaa Nassef)</author><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2577391666416797449.post-224111293251943929</guid><pubDate>Tue, 12 Jun 2007 07:39:00 +0000</pubDate><atom:updated>2008-12-10T18:24:30.860+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Book Review</category><title>Head First Servlets &amp; JSP</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.amazon.com/gp/product/0596005407?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596005407&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEXe4Ohwdl50Xl2u7SWYLz-MsUCqvYjkqZQtUbUY_ah14Ug5gQXVbFwNyMgMWmh7aIz7enQ2ljZYLOcdcm4uWfswTCcnrjpB9xEcLS_d_qx70O1WRMz_agpGteH8ApUNDb1VTnA4qY72Au/s320/31GM7N2EEDL._AA_SL160_.jpg&quot; id=&quot;BLOGGER_PHOTO_ID_5085589334409136338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596005407&quot; alt=&quot;&quot; style=&quot;border: medium none  ! important; margin: 0px ! important; display: none;&quot; border=&quot;0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;Studying is never fun for a lot of people, and reading technical books is always taken as a boring task by a lot of people. This will never be the case with any of the head first series of books.&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;The head first approach depends on a lot of images, since an image says more than a thousand words. It also depends on repeating the information in different styles, and dialogue like text.&lt;br /&gt;&lt;br /&gt;Even though this might seem as if it&#39;s a very simple approach, but the result is amazing. The book is fun to read, full of information, and yet very simple. Never thought I would love to study that much again.&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;Now enough about the head first approach, and into the book itself. The book is very informative, and covers nearly everything in the exam. Very few subjects were not covered, but most of them are covered in the questions at the end of each chapter, with a reference to the place of the information in the specs.&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;Few mistakes are there (like any book in the market), but most of them are spelling mistakes. The O’Reilly website has a great errata page covering every single mistake in the book (even spelling and grammar mistakes).&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;A lot of topics covered in the book do not even appear in other books, and a lot of those come in the exam. I studied from that book, and got 94% in the exam. Great book, and really fun to read.&lt;/p&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0596005407?ie=UTF8&amp;amp;tag=alnasjabl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596005407&quot;&gt;Buy the book from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=alnasjabl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596005407&quot; alt=&quot;&quot; style=&quot;border: medium none  ! important; margin: 0px ! important; display: none;&quot; border=&quot;0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.assoc-amazon.com/s/link-enhancer?tag=alnasjabl-20&amp;amp;o=1&quot;&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;br /&gt;&lt;img src=&quot;http://www.assoc-amazon.com/s/noscript?tag=alnasjabl-20&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;/noscript&gt;</description><link>http://jnassef.blogspot.com/2007/06/head-first-servlets-jsp.html</link><author>noreply@blogger.com (Alaa Nassef)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEXe4Ohwdl50Xl2u7SWYLz-MsUCqvYjkqZQtUbUY_ah14Ug5gQXVbFwNyMgMWmh7aIz7enQ2ljZYLOcdcm4uWfswTCcnrjpB9xEcLS_d_qx70O1WRMz_agpGteH8ApUNDb1VTnA4qY72Au/s72-c/31GM7N2EEDL._AA_SL160_.jpg" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>