<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2858328690300381570</id><updated>2012-01-18T19:43:07.768-08:00</updated><category term='guidelines'/><category term='technology'/><category term='Plugins'/><category term='skills'/><category term='web'/><category term='process'/><category term='books'/><category term='Regular Expressions'/><category term='development'/><category term='Rails'/><category term='WCAG'/><category term='cartoon'/><category term='ActionScript'/><category term='jsp'/><category term='Commercial'/><category term='Java'/><category term='Programming'/><category term='reaction'/><category term='accessibility'/><category term='agile'/><category term='zimbra'/><category term='analysis'/><category term='large sacle web applications'/><category term='servlets'/><category term='Linux'/><category term='migrations'/><category term='thoughts'/><category term='Mac'/><category term='templating'/><category term='reset_column_information'/><category term='design'/><category term='standards'/><category term='career'/><category term='eclipse'/><category term='Ruby_on_Rails'/><category term='caching'/><category term='Flex 2.0'/><category term='HTTP.'/><category term='usability'/><category term='Erlang'/><category term='non-technical'/><category term='XML.'/><title type='text'>eSpace</title><subtitle type='html'>Leaking thoughts out of eSpace</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-8251210138311568908</id><published>2008-02-05T08:57:00.000-08:00</published><updated>2008-02-05T08:59:15.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='templating'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='servlets'/><title type='text'>One template file for all pages using Servlets and JSP</title><content type='html'>One of my recent tasks was making a new skin for one of our websites. the site had a common header, left side area and right side area that are to be shared among all pages. we used to include file for "header", "left side", "right side" in each of the pages.. it wasn't that pretty i know.&lt;br /&gt;&lt;br /&gt;I wanted to think of something better where i can define the template in exactly one file and i do not have to include that file on every new page i add. something pretty much close the RubyOnRails "&lt;% yield %&gt;' directive to import the page content inside the template. i finally managed to do it.&lt;br /&gt;&lt;br /&gt;I'll use two simple pages to illustrate the concept:&lt;br /&gt;&lt;br /&gt;mahmoud.jsp&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ntOcR9BKdOg/R6iMmEL8PqI/AAAAAAAAABI/AbaZuu0u85o/s1600-h/Screen-mahmoud.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ntOcR9BKdOg/R6iMmEL8PqI/AAAAAAAAABI/AbaZuu0u85o/s320/Screen-mahmoud.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163531558367018658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and index.jsp&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ntOcR9BKdOg/R6iM0kL8PrI/AAAAAAAAABQ/yKuLRdXCZfg/s1600-h/Screen-index.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ntOcR9BKdOg/R6iM0kL8PrI/AAAAAAAAABQ/yKuLRdXCZfg/s320/Screen-index.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163531807475121842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;what we want is to have each of the two pages displayed in a layout where is one header, banners and so. which will look like the following.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ntOcR9BKdOg/R6iNNEL8PsI/AAAAAAAAABY/fkbi7BSlt1g/s1600-h/Screenshot-mahmoud.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ntOcR9BKdOg/R6iNNEL8PsI/AAAAAAAAABY/fkbi7BSlt1g/s320/Screenshot-mahmoud.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163532228381916866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ntOcR9BKdOg/R6iVAEL8PxI/AAAAAAAAACA/WZ-q5UQ_p1o/s1600-h/Screenshot-index.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ntOcR9BKdOg/R6iVAEL8PxI/AAAAAAAAACA/WZ-q5UQ_p1o/s320/Screenshot-index.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163540801136639762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I was able to do this using a servlet that intercepts the request. and loads the template jsp file and pass the desired page to as a parameter to be included.&lt;br /&gt;&lt;br /&gt;The template file is called &lt;span style="font-style:italic;"&gt;template.jsp&lt;/span&gt; will look like:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ntOcR9BKdOg/R6iOAEL8PtI/AAAAAAAAABg/67bmZVcNP0U/s1600-h/template.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ntOcR9BKdOg/R6iOAEL8PtI/AAAAAAAAABg/67bmZVcNP0U/s320/template.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163533104555245266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The only line that matters in the template code is where we make the jsp:include page="&lt;%request.getParameter("targetPage")%&gt;"&lt;br /&gt;&lt;br /&gt;The servlet intercepts http requests and loads this template using RequestDispatcher and passes the original desired page as a parameter:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ntOcR9BKdOg/R6iUvkL8PwI/AAAAAAAAAB4/-Z2Wf9hadmg/s1600-h/servlet.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ntOcR9BKdOg/R6iUvkL8PwI/AAAAAAAAAB4/-Z2Wf9hadmg/s320/servlet.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163540517668798210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Servlet and servlet mapping in web.xml will look like&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ntOcR9BKdOg/R6iRhUL8PvI/AAAAAAAAABw/K4B5avx_S0E/s1600-h/web.xml.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ntOcR9BKdOg/R6iRhUL8PvI/AAAAAAAAABw/K4B5avx_S0E/s320/web.xml.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163536974320778994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A note to be mentioned is that I had to configure my template to be initiated with requests to html pages (i can choose to work on any extension except jsp). When I configure my servlet mapping to be associated with jsp URLs, i get stuck in an infinite loop as since including the page inside the template results in a new jsp request.&lt;br /&gt;&lt;br /&gt;The idea is simple. You are free to create your own template and to work on any file extensions in the url, but you have to specify a type other than jsp to avoid the infinite loop trap.&lt;br /&gt;&lt;br /&gt;Bon appetite&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-8251210138311568908?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/8251210138311568908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=8251210138311568908' title='44 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8251210138311568908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8251210138311568908'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2008/02/one-template-file-for-all-pages-using.html' title='One template file for all pages using Servlets and JSP'/><author><name>mahmoud</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_ntOcR9BKdOg/TP6t53s418I/AAAAAAAAAI8/7MEqFrItL9M/S220/mod3.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ntOcR9BKdOg/R6iMmEL8PqI/AAAAAAAAABI/AbaZuu0u85o/s72-c/Screen-mahmoud.png' height='72' width='72'/><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-8468194632166082335</id><published>2008-01-06T14:40:00.000-08:00</published><updated>2008-01-06T14:42:06.356-08:00</updated><title type='text'>Restful Pagination in Rails</title><content type='html'>Have you ever tried to cache your paginated lists? Sadly, vanilla Rails wont help much as they ignore the url query parameters when caching and hence the page=x value is not honored and Rails caching (action or page caching) will simply stick to the first page rendered for all requests.&lt;br /&gt;&lt;br /&gt;One might come with a solution that overrides the cache key generation to incorporate the query string, which will work, but will result in very long and ugly hash keys.&lt;br /&gt;&lt;br /&gt;Luckily there is a better approach, if you simply defined routs for pages (for the paginated resources) and name them page parameter with the same name you give it in the paginator then Rails will pick up the route when creating paginated links. &lt;br /&gt;&lt;br /&gt;In your routes.rb&lt;br /&gt;&lt;br /&gt;map.resources    :users&lt;br /&gt;map.paged_users   '/users/pages/:page'&lt;br /&gt;map.formatted_paged_users  '/users/pages/:page.:format'&lt;br /&gt;&lt;br /&gt;once the above routes are in place, all you need is to make sure your paginators are using 'page' as the page parameter name and you will see the pagination links created like this:&lt;br /&gt;&lt;br /&gt;/users/pages/1&lt;br /&gt;/users/pages/2&lt;br /&gt;&lt;br /&gt;Don't forget the formatted route to support pagination with various formats so you can use routes like:&lt;br /&gt;&lt;br /&gt;/users/pages/1.xml&lt;br /&gt;&lt;br /&gt;These urls are very cache friendly and adhere to REST much more than the default parameters based ones.&lt;br /&gt;&lt;br /&gt;Happy caching (with pagination)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-8468194632166082335?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/8468194632166082335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=8468194632166082335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8468194632166082335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8468194632166082335'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2008/01/restful-pagination-in-rails.html' title='Restful Pagination in Rails'/><author><name>oldmoe</name><uri>http://www.blogger.com/profile/14341721253106429644</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_XFDHsTWrvBY/SsFeIEFTI_I/AAAAAAAAADU/NphzXmrghkw/S220/oldmoe.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-4462448916728720021</id><published>2007-11-03T14:03:00.000-07:00</published><updated>2007-11-03T14:08:28.970-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><title type='text'>Installing Windows, Ubuntu7.10, Mac OS 10.4.10 on MacBook (Triple Boot)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_e1QpmVrnUc0/RyzRjNMj6mI/AAAAAAAAADo/b1MlZkSpPlc/s1600-h/IMG_0349.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_e1QpmVrnUc0/RyzRjNMj6mI/AAAAAAAAADo/b1MlZkSpPlc/s320/IMG_0349.JPG" alt="" id="BLOGGER_PHOTO_ID_5128704478436125282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I am happy with my MacBook with its running Mac OS X 10.4.10. I can't stand working on windows any more, I feel more comfortable with Mac OS.&lt;br /&gt;&lt;br /&gt;My master Thesis is running on linux environment(basically Fedora, but I successfully turned it to be Ubuntu)&lt;br /&gt;My current project delivery should be done on windows. An easy solution costing 60$ would be to purchase &lt;a href="http://www.vmware.com/beta/fusion/"&gt;Fusion&lt;/a&gt;.&lt;br /&gt;Although Fusion looks very interesting, I didn't submit to this solution, for the following reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Running virtual machines consumes more memory, in this case I will loose some performance which is something I will certainly need during development.&lt;/li&gt;&lt;li&gt;More memory usage, means more power consumptions, hence less battery life time. in normal cases I enjoy having ~4hrs battery life time with my lovely  Mac. this is sthg i don't stand to loose.&lt;/li&gt;&lt;li&gt;to overcome the first problem, I can extend my RAM. this will make the virtual software costs me almost (60+90)$....I really can't afford this for now. (I didn't get paid for salary 3 months ago)&lt;/li&gt;&lt;/ol&gt;So, I decided to to create a triple boot on my MacBook. It was a very risky step for me..But here we go, I have nothing to loose anyway (keeping in mind 150$ :S, 900 LE when converted to our local currency!!!!!! )&lt;br /&gt;&lt;br /&gt;My MAC specs are:&lt;br /&gt;Processor:  2.16GHz Intel Core 2 Duo&lt;br /&gt;Memory: 1 GB 667 MHz DDR2 SDRAM&lt;br /&gt;MAC OS X: 10.4.10&lt;br /&gt;&lt;br /&gt;The target is to install Ubuntu 7.10 and WinXP SP2 on MacBook.&lt;br /&gt;steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Get &lt;a href="http://www.apple.com/bootcamp/"&gt;BootCamp&lt;/a&gt;: I think it may force you to update to Mac 10.5. (luckily I installed it 1 month ago before leopard is released)&lt;/li&gt;&lt;li&gt;Update your Mac OS.&lt;/li&gt;&lt;li&gt;Install &lt;a href="http://refit.sourceforge.net/"&gt;rEFIT&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;run BootCamp assistant and follow instructions to burn driver CD for windows. (don't proceed with installing steps)&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.onmac.net/index.php/How_To_Backup_your_Mac"&gt;Backup&lt;/a&gt; your data. (you may not loose your data if things go smoothly)&lt;/li&gt;&lt;li&gt;Check your disk partitions and identify the Mac Partion. I most cases it is /dev/disk0s2. but if you are not  sure, you can verify this by running a shell command using the diskutil: &lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;$ diskutil list&lt;br /&gt;&lt;/pre&gt; resize your HDD using Diskutil by running the following command. first you specify the volume to be resized, and its new size, then the type, and the name of the new volumes followed by their size.&lt;br /&gt;&lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;$ diskutil resizeVolume /dev/disk0s2 70G "Linux" "Linux" 20G "MS-DOS FAT32" "Windows" 20G&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;insert your XP SP2 CD and hold down the "ALT" key.&lt;/li&gt;&lt;li&gt;install XP on the valid partition, just give it a quick FAT32 format.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;you should now have a dual boot(windows with Mac).&lt;/li&gt;&lt;li&gt;insert your Ubuntu 7.10 Live CD.&lt;/li&gt;&lt;li&gt;run the installation normally. You should set up the partition manually. Don't mount the EFI system partition. you need only to mount / to the drive you allocated to your linux installation. I didn't make a SWAP file, I just don't need this for now, I relied on my 1GB RAM.&lt;/li&gt;&lt;li&gt;Continue through the installation steps.&lt;/li&gt;&lt;li&gt;When you reboot, you should have triple boot.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-4462448916728720021?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/4462448916728720021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=4462448916728720021' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4462448916728720021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4462448916728720021'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/11/installing-windows-ubuntu710-mac-os.html' title='Installing Windows, Ubuntu7.10, Mac OS 10.4.10 on MacBook (Triple Boot)'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_e1QpmVrnUc0/RyzRjNMj6mI/AAAAAAAAADo/b1MlZkSpPlc/s72-c/IMG_0349.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-1621259727016605423</id><published>2007-11-03T02:02:00.000-07:00</published><updated>2007-11-03T02:07:22.102-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='career'/><title type='text'>Why Software Developers Leave...</title><content type='html'>i read a nice article with the title "&lt;a href="http://www.developerdotstar.com/mag/articles/software_team_turnover.html"&gt;Software Team Turnover: Why Developers Leave (And What You Can Do About It)&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;In this article, the writer, Aaron Reed, discussed the negative impact of the fact that some software developers leave their teams and what makes them do that. it is worth to read.&lt;br /&gt;Aaron specified three main reasons that causes developers to leave:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Money&lt;/span&gt;&lt;br /&gt;Like any person in any field, Software Developers too are in need for Money to fulfil their human needs. a developer being paid below the market average might be an unhappy unsatisfied developer. and in general, a Developer can increase his income by jumping to a new place more that he can by getting a raise in the same place.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;being happy with what they do&lt;/span&gt;&lt;br /&gt;Developer can work in some place or on some project even under paid, if they love what they are working on. in other words.. they also can leave for somewhere else (even paying less) if they were unhappy about they current projects/place/team, if they were bored, or if they were &lt;span style="font-weight:bold;"&gt;not learning more&lt;/span&gt; and not getting experience. actually this is a key reason for developers to move to a new place. the need for getting new experiences and new challenges.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Burnout&lt;/span&gt;&lt;br /&gt;Software development is not an easy job. It is like having a hard exam for at least 8 hours per day/ 5 days per week. sometimes the developer gets overloaded by working in some project, and due to his experience in that project or field, and due to the fact that resources are need for that project. management do not move the developers to another project. which makes leaving the whole place is the only get away for the developer. i have seen this more than once before.&lt;br /&gt;&lt;br /&gt;i totally Agree with Aaron Analysis of the issue. but i also need to add &lt;span style="font-weight:bold;"&gt;"Politics"&lt;/span&gt; as a candidate cause itself. a broken promise from the management side is fatal from the developer's prospective. disharmony among team members or people in the same work place may cause some of them to be unhappy to the extent that they may not want to stay in that place any more. of course that last reason is not specific to software developers, but it matters and do worth mentioning. actually all of the reason aren't specific to them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-1621259727016605423?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/1621259727016605423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=1621259727016605423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1621259727016605423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1621259727016605423'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/11/why-software-developers-leave.html' title='Why Software Developers Leave...'/><author><name>mahmoud</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_ntOcR9BKdOg/TP6t53s418I/AAAAAAAAAI8/7MEqFrItL9M/S220/mod3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-1746059064737990509</id><published>2007-10-31T01:30:00.000-07:00</published><updated>2007-10-31T01:31:40.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Effective Java Programming</title><content type='html'>Effective Java Programming, by Addison Wesley, is one of nice books i have read in software development material. and i recommend it to any developer developing in Java, starter or senior.&lt;br /&gt;&lt;br /&gt;programming by nature is very flexible. you have many choices. it is like creating a statue using clay. You choose at every point; Class names, methods and variable names. public methods, internal implementation algorithms, structure of the package classes,.. all of those and others are left for the programmer to choose.&lt;br /&gt;&lt;br /&gt;Effective Java programming comes to introduce a lot of the best practices for Java programmers; to enhance the stability, readability, clarity, reusability and maintainability of their code. it also has guides to the proper use of a lot of the java standard classes.&lt;br /&gt;&lt;br /&gt;A note inside the book really draw my attention; in item 8, chapter 3, Wesley was talking about overriding the hashCode method, he stated an example of a phone number class and an implementation of a suggested hashCode, then he said "Writing such hash functions is a topic of active research and an activity best left to mathematicians and theoretical computer scientists.". Wesley encourages his readers to use the state-of-art code. that's the goal of the book.&lt;br /&gt;&lt;br /&gt;Actually i was thinking about the classes of the open source libraries we use as i proceeded reading the book. the kind of code that shall be used by thousands of programmers all around the world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-1746059064737990509?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/1746059064737990509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=1746059064737990509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1746059064737990509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1746059064737990509'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/10/effective-java-programming.html' title='Effective Java Programming'/><author><name>mahmoud</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_ntOcR9BKdOg/TP6t53s418I/AAAAAAAAAI8/7MEqFrItL9M/S220/mod3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-2704092917558593291</id><published>2007-09-27T02:47:00.000-07:00</published><updated>2007-09-27T03:50:52.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='large sacle web applications'/><title type='text'>To AJAX or Not to AJAX? That is the question!</title><content type='html'>&lt;p&gt;When faced with a new web project these days you typically hear the clients listing AJAX as one of the must haves in their brand new web application. Pretty cool as you might be accustomed yourself to AJAX to the extent that you can hardly imagine returning back to the page reload per click days. But, if you are more sensible (or better yet, your clients are so) you would think twice before entirely abandoning the normal site browsing model for an AJAX based one.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;br /&gt; Why? I hear you say. Many reasons, including the fact that we live in the early 21st century, where – get ready for this – not all Internet access devices are equipped with state of the art browsers that can consume your AJAX interfaces or whatever Javascript or CSS magic you throw at them. Many mobile phones (millions to say the least) can hardly parse plain old HTML, some can do CSS but not Javascript&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Ok, you tell  me. “I will have to do two versions, one that is full of AJAX effects and one old boring HTML only version.” STOP IT, I say, you can't be more wrong. Thank God there could be more elegant solutions to the problem than just writing another application around the same database. I present to you my humble take on the problem. Using the Ruby on Rails Framework (you can apply similar thoughts in other frameworks if you like, and many ideas can be copied easily as they only involve Javascript)&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;  First off, the controllers. The controllers are responsible for receiving requests and sending responses. What we need to do is make them intelligent enough to understand different types of requests and respond accordingly. This is done using Rails magical method “respond_to”&lt;br /&gt;  &lt;/p&gt;&lt;pre&gt;class IssuesController &amp;lt; ApplicationController&lt;br /&gt; def index&lt;br /&gt;  ...&lt;br /&gt;  respond_to do |format|&lt;br /&gt;   format.html { # do something }&lt;br /&gt;   format.js { # do another thing }&lt;br /&gt;   format.json { # and another thing }&lt;br /&gt;   format.xml { # ok, enough }&lt;br /&gt;  end&lt;br /&gt; end&lt;br /&gt; ...&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;  In the above example we see that each format will have a different response. This is great for a start, that way we can implement slightly varying responses for the AJAX and the none AJAX calls. To make things easier on us we will implement a very simple case of AJAX. Each rhtml view is rendered in a DIV tag within an rhtml layout. In the none AJAX model, pages are rendered by rendering both the layout and the inner view. In the AJAX model, only the inner view is rendered and is sent back to the browser to replace whatever resides in the content DIV.&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;  So, our controllers will work as follows:&lt;br /&gt;  &lt;/p&gt;  &lt;pre&gt;class IssuesController &amp;lt; ApplicationController&lt;br /&gt; def index&lt;br /&gt;  ...&lt;br /&gt;  respond_to do |format|&lt;br /&gt;   format.html   # will render index.rhtml&lt;br /&gt;   format.js { render :layout =&gt; false }&lt;br /&gt;   # the above line will render index.rhtml but without the layout&lt;br /&gt;  end&lt;br /&gt; end&lt;br /&gt; ...&lt;br /&gt;end    &lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;  The above lines made our controller ready to respond to normal or AJAX requests (given that AJAX requests will have the .js format). In the former case it will return back the whole page but in the latter it will omit rendering the layout and only send the content.&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;  Ok, but what we still need two views. I hear you, and fear not, you will have to change nothing. Actually it's only a trivia to adapt your views to this model. Let's see how this can be done.&lt;br /&gt;  &lt;/p&gt;Here's a normal view code sample, and pardon me, I won't use the link_to helper method for clarity purposes:&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;...&lt;br /&gt;&amp;lt;div id=”content”&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&amp;lt;a href=”url1”&amp;gt;Link1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&amp;lt;a href=”url2”&amp;gt;Link2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&amp;lt;a href=”url3”&amp;gt;Link3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;form target=”url4”&amp;gt;&lt;br /&gt; ...&lt;br /&gt; &amp;lt;input type=”submit”&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;...  &lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;  The above fragment shows a list of links and a form. All should behave in the normal way and reload the page when clicked. Now let's imagine that the user is using a Javascript capable browser. What effect could this coming fragment have on his experience?&lt;br /&gt;  &lt;/p&gt;  &lt;pre&gt;&lt;br /&gt;&amp;lt;!-- Warning, this fragment requires prototype.js --&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt; function ajaxifyLinks(){&lt;br /&gt;  // check if there is AJAX support&lt;br /&gt;  if(!Ajax.getTransport())return false;&lt;br /&gt;  // loop on all links&lt;br /&gt;  $$('a').each(function(link){&lt;br /&gt;   // attach an event observer to each link's 'onclick' event&lt;br /&gt;   Event.observe(link, 'click', function(event){&lt;br /&gt;    // call the original url (with .js added) with AJAX&lt;br /&gt;    new Ajax.Updater('content',link.href+”.js”);&lt;br /&gt;    // stop the browser from following the link&lt;br /&gt;    return false;&lt;br /&gt;   });&lt;br /&gt;  });&lt;br /&gt;  // loop on all forms&lt;br /&gt;  $$('form').each(function(form){&lt;br /&gt;   // attach an event observer to each form's 'onsubmit' event&lt;br /&gt;   Event.observe(form, 'submit', function(event){&lt;br /&gt;    // send the form contents via AJAX&lt;br /&gt;    new Ajax.Updater('content',form.action+”.js”,&lt;br /&gt;       {params:Form.serialize(form),&lt;br /&gt;       method:'post'});&lt;br /&gt;    // stop the browser from submitting the form&lt;br /&gt;    return false; &lt;br /&gt;   });&lt;br /&gt;  });&lt;br /&gt; } &lt;br /&gt;&amp;lt;/script&amp;gt;  &lt;br /&gt;  &lt;/pre&gt;&lt;p&gt;  The above code will transform EVERY link and form in the page to AJAX, that is, in case that the browser supports both Javascript and AJAX. Otherwise links and forms will remain untouched and they will behave as usual.&lt;br /&gt;  &lt;/p&gt;  &lt;p&gt;Of course this is a minimalistic example. We knowingly avoided touching on any special case but, in another installment of this article we will get more intimate with the subject and may be we can handle more aggressive ... techniques!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-2704092917558593291?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/2704092917558593291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=2704092917558593291' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/2704092917558593291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/2704092917558593291'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/09/to-ajax-or-not-to-ajax-that-is-question.html' title='To AJAX or Not to AJAX? That is the question!'/><author><name>oldmoe</name><uri>http://www.blogger.com/profile/14341721253106429644</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_XFDHsTWrvBY/SsFeIEFTI_I/AAAAAAAAADU/NphzXmrghkw/S220/oldmoe.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-4412497141733971928</id><published>2007-07-22T12:57:00.000-07:00</published><updated>2007-07-22T12:59:57.052-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zimbra'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Zimbra, violating Open Source terms</title><content type='html'>Not all pretenders are Open source... This is true for zimbra at least which claims it is open source, but actually I see everythg they r doing is against open source. check &lt;a href="http://blogs.zdnet.com/BTL/index.php?p=3430"&gt;this&lt;/a&gt; for detailed discussion abt zimbra as open source.&lt;br /&gt;I am still in my battle field working on Zimbra.&lt;br /&gt;We upgraded to the new zimbra version now....&lt;br /&gt;In this new version I found sthg in the code that made my nerves; all variables  are written in this format "_158", "_140".&lt;br /&gt;I found this hilarious...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-4412497141733971928?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/4412497141733971928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=4412497141733971928' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4412497141733971928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4412497141733971928'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/07/zimbra-violation-open-source-terms.html' title='Zimbra, violating Open Source terms'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-4822610073628159688</id><published>2007-07-17T12:58:00.000-07:00</published><updated>2007-08-27T02:04:00.014-07:00</updated><title type='text'>Java vs. C++ - Part Two</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;These are &lt;/span&gt;&lt;strong style="font-family: trebuchet ms;"&gt;some more&lt;/strong&gt;&lt;span style="font-family:trebuchet ms;"&gt; differences between Java and C++.&lt;/span&gt;&lt;div style="font-size: 100%; font-family: 'Trebuchet MS',Trebuchet,Verdana,Sans-Serif;"&gt; &lt;table style="border-style: inset; border-collapse: collapse;" border="3" cellpadding="10" width="100%"&gt; &lt;tbody&gt; &lt;tr&gt;&lt;th style="width: 10%;"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th style="width: 45%;"&gt;Java&lt;/th&gt;&lt;th style="width: 45%;"&gt;C++&lt;/th&gt;&lt;/tr&gt;   &lt;tr&gt;    &lt;th&gt;Class attributes and behaviors&lt;/th&gt;    &lt;td&gt;Attributes are "instance variables".&lt;br /&gt;Behaviors are "methods"&lt;/td&gt;    &lt;td&gt;Attributes are "data members".&lt;br /&gt;Behaviors are "member functions"&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Extending Class Object&lt;/th&gt;    &lt;td&gt;Every class is a subclass of Object and so inherits the 11 methods defined by       class object, you never create a class from scratch. Even if a class doesn't explicitly use &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;extends&lt;/span&gt; in its definition, it implicitly extends Object&lt;/td&gt;    &lt;td&gt;You can create classes from scratch. A class will inherit attributes and behaviors of a base class ONLY when its declaration explicitly implies that it should.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Packages&lt;/th&gt;    &lt;td&gt;Every class belongs to a package even if not explicitly specified it will be the default       package ( the current directory )&lt;/td&gt;    &lt;td&gt;Classes do not have packages. Their containing header files are simply included in source files in which they are to be used&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Constructor name&lt;/th&gt;    &lt;td&gt;Methods other than the constructor of a class ARE ALLOWED to have the same name as the class AND to specify return types but these are not constructors and won't be called when an object is created.&lt;/td&gt;    &lt;td&gt;It is NOT ALLOWED for any member function other than the constructor to have the same name as the class name AND it is INVALID to specify a return type for any constructor.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Initializing attributes&lt;/th&gt;    &lt;td&gt;Instance variables CAN be initialized where they are declared IN THE CLASS BODY, by the class's constructor, or they can be assigned values by "set" methods. Instance variables that are not explicitly initialized by the programmer are initialized by the compiler (primitive numeric variables are set to 0, booleans are set to false and references are set to null).&lt;/td&gt;    &lt;td&gt;Data members can be initialized ONLY by the class's constructor, or they can be assigned values by "set" methods. Instance variables that are not explicitly initialized by the programmer are NOT automatically initialized (they will have whatever values that happened to be stored in their allocated memory space).&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Accessing hidden attributes&lt;/th&gt;    &lt;td&gt;An instance variable hidden by a local variable (having the same name) can be accessed in a method by:&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;this.variableName&lt;/pre&gt;(this is a reference to the current object)&lt;/td&gt;    &lt;td&gt;Such a hidden data member can be accessed in the member function by:&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;ClassName::variableName&lt;br /&gt;or&lt;br /&gt;this-&gt;variableName&lt;/pre&gt;(this here is a pointer to the current object)&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Access modifiers&lt;/th&gt;    &lt;td&gt;Each instance variable or method declaration in a Class definition must be preceded by an access modifier.&lt;/td&gt;    &lt;td&gt;Access modifiers are followed by a colon and apply to all following member declarations until overridden by another access modifier. If they were omitted they are implicitly applied by the compiler:&lt;br /&gt;for classes: members are private by default.&lt;br /&gt;for structs: members are public by default.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Package access&lt;/th&gt;    &lt;td&gt;Members that have no access modifier preceding their declaration are accessible to all the classes included in the same package.&lt;/td&gt;    &lt;td&gt;Members are either public or private and the only way that another class could access a non-public member of a different class is by inheritance of protected members or by being declared as a friend class of that class.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Memory leaks&lt;/th&gt;    &lt;td&gt;Are less likely to occur because Java performs automatic garbage collection to help return memory back to the system. When an object is no longer used in a program ( there are no references to the object e.g. if null was assigned to the objects reference ) it is marked for garbage collection. Before the garbage collector returns memory resources to the system it calls the finalize method of the object to be destroyed.&lt;/td&gt;    &lt;td&gt;Are common because memory is not automatically reclaimed to the system it is the programmer's responsibility to do that himself by freeing the memory in the Class destructor when its task is over.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Multiple inheritance&lt;/th&gt;    &lt;td&gt;Is not supported but interfaces are supported that allow a class to acquire multiple functionalities from any number of interfaces&lt;/td&gt;    &lt;td&gt;Is supported.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Over-ridden superclass methods&lt;/th&gt;    &lt;td&gt;Can be accessed from the subclass by:&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;super.methodName();&lt;/pre&gt;&lt;/td&gt;    &lt;td&gt;Such an over-ridden base-class member function can be accessed by the derived class by:&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;BaseClassName::functionName();&lt;/pre&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Calling superclass constructor&lt;/th&gt;    &lt;td&gt;To explicitly call the superclass Parent constructor from the subclass Child constructor:&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;public Child( int a, int b )&lt;br /&gt;{&lt;br /&gt;  super( a );&lt;br /&gt;  x = b;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;The calling statement must be the first statement in the subclass constructor&lt;/td&gt;    &lt;td&gt;To do the same thing here it goes like this:&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;Child( int a, int b )&lt;br /&gt;  : Parent( a )&lt;br /&gt;{&lt;br /&gt;  x = b;&lt;br /&gt;}&lt;/pre&gt;here we use the member initializer ( : ) to call the Parent constructor before the body of the constructor is executed&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Polymorphism and dynamic binding&lt;/th&gt;    &lt;td&gt;Applies automatically.&lt;br /&gt;When a reference to a subclass object is assigned to a superclass reference which is then used to invoke a superclass method that is overridden in the subclass definition the java compiler only checks that the class of the reference really has that method and the java interpreter calls the method of the actual data type of the object at execution time.&lt;/td&gt;    &lt;td&gt;Does NOT apply automatically.&lt;br /&gt;When a pointer to a derived-class object is assigned to a base-class pointer which is then used to invoke a base-class member function that is overridden in the derived class definition the compiler treats the object exactly as an object of the base-class and the base-class member function is called for the object. This is overcome by declaring the function to be a vertual one and in this case the compiler generates code that would at run time access the appropriate version of the function for the actual object's data type.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;&lt;span style=";font-family:monospace;font-size:100%;"  &gt;final&lt;/span&gt; methods and &lt;span style=";font-family:monospace;font-size:100%;"  &gt;final&lt;/span&gt; classes&lt;/th&gt;    &lt;td&gt;&lt;p&gt;A method that is declared &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;final&lt;/span&gt; cannot be overridden in a subclass.&lt;/p&gt;&lt;p&gt;A class that is declared &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;final&lt;/span&gt; cannot be a superclass( cannot have subclasses).&lt;/p&gt;&lt;/td&gt;    &lt;td&gt;Does not have an equivalent in C++&lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt;    &lt;th&gt;&lt;span style=";font-family:monospace;font-size:100%;"  &gt;const&lt;/span&gt; functions&lt;/th&gt;    &lt;td&gt;Java has no equivalent for C++'s &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;const&lt;/span&gt; functions&lt;/td&gt;    &lt;td&gt;A member function can be declared as &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;const&lt;/span&gt;, indicating that calling that member function does not change the object.&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;Abstract classes&lt;/th&gt;    &lt;td&gt;Are declared by using &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;abstract&lt;/span&gt; and have one or more abstract mehtods&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;public abstract ClassName {&lt;br /&gt; private int instanceVariable;&lt;br /&gt; public int someMethod1()....&lt;br /&gt; public void someMethod2()...&lt;br /&gt; public abstract int method();   &lt;br /&gt; //abstract method&lt;br /&gt;}&lt;/pre&gt;&lt;/td&gt;    &lt;td&gt;Must have one or more pure virtual functions &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;class ClassName {&lt;br /&gt;public:&lt;br /&gt; virtual int someFunction1()...&lt;br /&gt; virtual int someFunction2()...&lt;br /&gt; virtual int function() = 0;&lt;br /&gt; // pure virtual funtion&lt;br /&gt;private:&lt;br /&gt; int dataMember;&lt;br /&gt; ...&lt;br /&gt;};&lt;/pre&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;    &lt;th&gt;GUI support&lt;/th&gt;    &lt;td&gt;Normally has packages that support frames, windows, Graphical User Interface components.&lt;/td&gt;    &lt;td&gt;Does not normally support them. Appropriate third party libraries must be obtained to offer their support.&lt;/td&gt; &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-4822610073628159688?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/4822610073628159688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=4822610073628159688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4822610073628159688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4822610073628159688'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/07/java-vs-c-part-two.html' title='Java vs. C++ - Part Two'/><author><name>mshalaby</name><uri>http://www.blogger.com/profile/13133192118777632030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-683499122399718284</id><published>2007-06-30T13:41:00.000-07:00</published><updated>2007-07-05T06:18:38.045-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>The fall of MS fan</title><content type='html'>For most of life, I have been a Microsoft user. I wasn't a MS' fan. But I didn't find it not so bad working on Window, and it was fair enough for me, although it is not perfect.&lt;br /&gt;&lt;br /&gt;I had great passion to try the Vista out, the long delayed version, 6 years or sthg. We all read abt it for many years, and how much it will be sthg fascinating and a new..bla..bla..bla&lt;br /&gt;When I tried it on my PC, i was expecting sthg that could dazzle me.&lt;br /&gt;&lt;br /&gt;finally, I got Vista business. I was totally wrong, I regret the day i installed Vista.&lt;br /&gt;&lt;br /&gt;well, it is beautiful, the 3-D desktop switcher looks nice.&lt;br /&gt;I faced many problems with Drivers. the problem is not that they r not verified by Vista. the problem that from time to time, I had to redefine the drivers.&lt;br /&gt;my network card kept to be disconnected. I couldn't stay online for couple of hours. the stupid thing that when it disconnects, i have to press by myself "diagnose and repair" then should press  "get a new IP" to ask the Vista to get another IP. What is this stupidity!!! didn't I define that already in the connection properties!! the answer to that question is the "&lt;a href="http://www.youtube.com/watch?v=VKM1cAtAdtQ"&gt;ALLOW&lt;/a&gt;" :))&lt;br /&gt;If u run sthg on vista, and precipitate away from ur PC, don't expect it is working.&lt;br /&gt;&lt;br /&gt;u should wait because u will have to answer "Continue with getting a new IP?", "continue with opening this executable file"..etc I really hate this stupid thg in vista. i don't think i have to press 3 clickes just to run exe file..&lt;br /&gt;&lt;br /&gt;The gadgets are terrible, I have never turned them on. they are not innovative and poor.&lt;br /&gt;&lt;br /&gt;fighting to have a network connection really annoyed me.&lt;br /&gt;this Vista eats the processor and the Memory. it slows down ur PC. without any tasks running ur RAM usage can be 512 MB. to use a PC now, u have to add $X to buy extra RAM for the Vista and $Y extra to more powerful processor, don't forget that u will pay for the Vista too :)&lt;br /&gt;Vista price is too high. despite the license price is the almost the same since many old versions of windows, it is too high comparing with HW costs these days. Windows license can exceed 20% of ur costs!!!!&lt;br /&gt;&lt;br /&gt;the only thg that may keep windows alive is that majority of mobile tools need windows to sync, and some softwares are not still available for MACs.&lt;br /&gt;&lt;br /&gt;anyway, I didn't like the Vista thg.&lt;br /&gt;Not friendly, no performance, no stability...nothing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-683499122399718284?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/683499122399718284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=683499122399718284' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/683499122399718284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/683499122399718284'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/06/fall-of-ms-fan.html' title='The fall of MS fan'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5106799938744624773</id><published>2007-06-28T11:08:00.000-07:00</published><updated>2007-06-30T01:19:17.920-07:00</updated><title type='text'>Improve your Company using Workflow System</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Work flow,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Business Process Management,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Business Process Modeling,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Methodologies,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Work Procedures&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"  style="text-align: left; direction: ltr; unicode-bidi: embed;font-family:verdana;"&gt;All these related words can come together to build an understandable vision of the workflow system.&lt;/p&gt;      &lt;p class="MsoNormal" face="verdana" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;The Business Process is a group of logically related tasks that come together to form a methodology to implement work procedures.&lt;br /&gt;So companies try to automate these procedures using a workflow system to gain its benefits.&lt;/p&gt;&lt;p class="MsoNormal" face="verdana" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" face="verdana" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;You can find more about workflow &lt;a href="http://en.wikipedia.org/wiki/Workflow"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal" face="verdana" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;  &lt;p class="MsoNormal" face="verdana" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(0, 0, 153);"&gt;So why do we need workflow system?&lt;/span&gt;&lt;br /&gt;Some of the benefits we can get by using workflow can be briefed by the following&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; font-family: verdana;"&gt;  &lt;/p&gt;  &lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-size:7;" &gt;  &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span dir="ltr"  style="font-size:100%;"&gt;&lt;b&gt;Improved efficiency&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; - automation of many business processes results in the elimination of many unnecessary steps&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;span dir="ltr"  style="font-size:100%;"&gt;&lt;b&gt;Better process control&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; - improved management of business processes achieved through standardizing working methods and the availability of audit trails &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span dir="ltr"  style="font-size:100%;"&gt;&lt;b&gt;Improved customer service&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – consistency in the processes leads to greater predictability in levels of response to customers &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;span dir="ltr"  style="font-size:100%;"&gt;&lt;b&gt;Flexibility&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – software control over processes enables their re-design in line with changing business needs &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;span dir="ltr"  style="font-size:100%;"&gt;&lt;b&gt;Business process improvement&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; - focus on business processes leads to their streamlining and simplification&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; color: rgb(0, 0, 153); font-weight: bold; font-style: italic; font-family: verdana;"&gt;How to implement a workflow system for our company?&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; color: rgb(0, 0, 153); font-weight: bold; font-style: italic;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; font-family: verdana;"&gt;Well, Thanks god we didn't have to pay for a license to build a system using &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx"&gt;Microsoft workflow foundation&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; font-family: verdana;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;We have &lt;a href="http://www.jboss.com/products/jbpm"&gt;&lt;b&gt;JBPM&lt;/b&gt;&lt;/a&gt; (Java Business process management)&lt;b&gt; &lt;/b&gt;which is a flexible, extensible workflow management system build on Java and it is an Open source project.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;A lot of open source projects are developed like (&lt;a href="http://java-source.net/open-source/workflow-engines/open-business-engine"&gt;Open Business Engine&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/the-open-for-business-workflow-engine"&gt;The Open for Business Workflow Engine&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/openwfe"&gt;OpenWFE&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/wfmopen"&gt;WfMOpen&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/xflow"&gt;XFlow&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/micro-flow"&gt;Micro-Flow&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/jflower"&gt;JFlower&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/yawl"&gt;YAWL&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/zebra"&gt;Zebra&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/apache-agila"&gt;Apache Agila&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/antflow"&gt;Antflow&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/beexee"&gt;Beexee&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/dalma"&gt;Dalma&lt;/a&gt; &lt;a href="http://java-source.net/open-source/workflow-engines/swish"&gt;Swish&lt;/a&gt; etc...)&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;/p&gt;        &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;I believe that &lt;a href="http://sourceforge.net/projects/runawfe"&gt;RunaWFE&lt;/a&gt; is one of the best.&lt;br /&gt;&lt;br /&gt;RUNA WFE is an environment for JBoss jBPM workflow engine.&lt;span dir="rtl" lang="AR-SA"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;It is a cross-platform end user solution for business process development and execution.&lt;span dir="rtl" lang="AR-SA"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Together RUNA WFE and JBoss jBPM provide an easy to use business process management system.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="font-family:Verdana;"&gt;RUNA WFE provides:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;an end user GUI to define business processes without any coding: draw flowcharts, define roles and variables, lay out forms&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;an end user GUI      to load and execute processes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;an      administrative interface to create and remove users/groups and grant      rights&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;a possibility of      writing automatic "bots" that can participate in business      processes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;a possibility to code new GUI elements, variable types, organizational structure functions etc. that extend existing RUNA WFE components and will be available to end users through the GUI&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Then How to integrate our workflow system with other software?&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; font-weight: bold;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Integrating RunaWFE with MySQL Database:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Simply, do the following steps:&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;Add The File mysqldb-ds.xml to your jboss deploy folder "&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;server\default\deploy&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;".&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_fevCfrahi3s/RoPzg-buo6I/AAAAAAAAAAg/IvH4avdes7A/s1600-h/xml.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_fevCfrahi3s/RoPzg-buo6I/AAAAAAAAAAg/IvH4avdes7A/s400/xml.PNG" alt="" id="BLOGGER_PHOTO_ID_5081172552444715938" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol start="2"&gt;&lt;li&gt;&lt;span style=""&gt;In server\default\conf\hibernate.cfg.xml Change&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;/p&gt;&lt;pre   style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);font-size:12px;color:black;"&gt;connection.datasource = java:/MYSQLDS&lt;span dir="rtl" lang="AR-SA"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;Dialect = net.sf.hibernate.dialect.MySQLDialect &lt;/pre&gt;&lt;p&gt;&lt;/p&gt;  &lt;ol start="3"&gt;&lt;li&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;Important Note : Don't forget to add "com.mysql.jdbc.Driver" to your l&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;ibrary &lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;This is done by adding "mysql-connector-java-3.1.14.jar" to the lib Folder.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Integrating RunaWFE with LDAP:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed; color: rgb(0, 0, 153); font-weight: bold; font-style: italic;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Unfortunately integrating RunaWFE with LDAP can be done to a certain level, &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;In any workflow system you have to define your users, their groups and also their permissions and Roles.&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;So you can authenticate through LDAP but you still has to add your ldap users in your workflow system so you can define their groups and Roles.&lt;/p&gt;        &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;o:p&gt;&lt;/o:p&gt;So what we will do now is to authenticate using our LDAP and also import our LDAP users into RunaWFE to manage their groups, Permissions and Roles.&lt;br /&gt;&lt;br /&gt;Fortunately RunaWFE helps us in doing both the importing and the authentication.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;To Add LDAP Authentication To RunaWFE Do the Following:&lt;/p&gt;    &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-right: 0in; margin-left: 0.5in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Add the LDAPPasswordLoginModule to      src\af\logic\ru\runa\af\authentication &lt;/li&gt;&lt;/ol&gt;&lt;pre   style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);font-size:12px;color:black;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;boolean&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; login() &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throws&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;SERVER_URL&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;= LDAPImporterResources.&lt;i&gt;getServerURL&lt;/i&gt;();&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;if&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (&lt;/span&gt;&lt;span style=""&gt;callbackHandler&lt;/span&gt;&lt;span style=""&gt; == &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;null&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;&lt;span style="font-family:monospace;"&gt;t&lt;/span&gt;hrow&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(&lt;/span&gt;&lt;span style=""&gt;"No CallbackHandler provided."&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;   &lt;/span&gt;Callback[] callbacks = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; Callback[2];&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt; &lt;/span&gt;callbacks[0] = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; NameCallback(&lt;/span&gt;&lt;span style=""&gt;"actor name: "&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;   &lt;/span&gt;callbacks[1] = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; PasswordCallback(&lt;/span&gt;&lt;span style=""&gt;"password: "&lt;/span&gt;&lt;span style=""&gt;, &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;false&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;   &lt;/span&gt;ExecutorDAO executorDAO = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;null&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;try&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;callbackHandler&lt;/span&gt;&lt;span style=""&gt;.handle(callbacks);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;String actorName = ((NameCallback) callbacks[0]).getName();&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;if&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (actorName == &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;null&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(&lt;/span&gt;&lt;span style=""&gt;"No actor name was provided."&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;char&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;[] tmpPasswordChars = ((PasswordCallback) callbacks[1]).getPassword();&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;if&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; ((tmpPasswordChars == &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;null&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;) || (tmpPasswordChars.&lt;/span&gt;&lt;span style=""&gt;length&lt;/span&gt;&lt;span style=""&gt; == 0))&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(&lt;/span&gt;&lt;span style=""&gt;"No password was provided."&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;String password = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; String(tmpPasswordChars);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;env&lt;/span&gt;&lt;span style=""&gt;.put(Context.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;INITIAL_CONTEXT_FACTORY&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;                                     &lt;span style=""&gt;"com.sun.jndi.ldap.LdapCtxFactory"&lt;/span&gt;&lt;span style=""&gt;);&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;env&lt;/span&gt;&lt;span style=""&gt;.put(Context.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;PROVIDER_URL&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;, &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;SERVER_URL&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;);&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;env&lt;/span&gt;&lt;span style=""&gt;.put(Context.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;SECURITY_AUTHENTICATION&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;, &lt;/span&gt;&lt;span style=""&gt;"simple"&lt;/span&gt;&lt;span style=""&gt;);&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;env&lt;/span&gt;&lt;span style=""&gt;.put(Context.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;SECURITY_PRINCIPAL&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;, &lt;/span&gt;&lt;span style=""&gt;"uid="&lt;/span&gt;&lt;span style=""&gt;+ actorName +&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;                                    ",ou=people,"&lt;/span&gt;&lt;span style=""&gt;+ LDAPImporterResources.&lt;i&gt;getDC&lt;/i&gt;()); &lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;env&lt;/span&gt;&lt;span style=""&gt;.put(Context.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;&lt;span style=""&gt;SECURITY_CREDENTIALS&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=""&gt;, password);&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;DirContext ctx = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; InitialDirContext(&lt;/span&gt;&lt;span style=""&gt;env&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;ctx.close(); &lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;executorDAO = DAOFactory.&lt;i&gt;getInstance&lt;/i&gt;().createExecutorDAO();&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-family:mon;"&gt;         &lt;/span&gt;&lt;span style=""&gt;actor&lt;/span&gt;&lt;span style=""&gt; = executorDAO.&lt;s&gt;getActorCaseInsensitive&lt;/s&gt;(actorName);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;succeeded&lt;/span&gt;&lt;span style=""&gt; = &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;true&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;return&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;succeeded&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (IOException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.toString());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (UnsupportedCallbackException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.getMessage());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (NamingException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.getMessage());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (InternalApplicationException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.getMessage());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (ExecutorOutOfDateException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.getMessage());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (RuntimeException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.getMessage());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;finally&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;try&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                  &lt;/span&gt;DAOHelper.&lt;i&gt;close&lt;/i&gt;(executorDAO, &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;true&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt;);&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;catch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; (InternalApplicationException e) {&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;throw&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=""&gt; LoginException(e.getMessage());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;  &lt;ol style="margin-top: 0in;" start="2" type="1"&gt;&lt;li class="MsoNormal" style="margin-right: 0in; margin-left: 0.5in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Modify the LDAP importer Configuration File      ldap-importer.properties in server/conf to point to your LDAP server.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-right: 0in; margin-left: 0.5in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Change login-module.properties in server/conf to the      LDAPPasswordLoginModule.&lt;/li&gt;&lt;/ol&gt;           &lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;#ru.runa.af.authenticaion.NTLMLoginModule=SUFFICIENT&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;#ru.runa.af.authenticaion.InternalDBPasswordLoginModule=SUFFICIENT&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;#ru.runa.af.authenticaion.ADPasswordLoginModule=SUFFICIENT&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;#ru.runa.af.authenticaion.KerberosLoginModule=SUFFICIENT&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;u&gt;&lt;span style=""&gt;ru.runa.af.authenticaion.LDAPPasswordLoginModule&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=""&gt;=&lt;/span&gt;&lt;span style=""&gt;SUFFICIENT&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;  &lt;ol style="margin-top: 0in;" start="4" type="1"&gt;&lt;li class="MsoNormal" style="margin-right: 0in; margin-left: 0.5in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;You have to modify some constant variable in class LDAPImporter&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;to accommodate with your LDAP settings.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style=""&gt;&lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;&lt;span style="font-weight: normal;"&gt;private&lt;/span&gt;&lt;span style="font-weight: normal;"&gt; static final String &lt;i&gt;OBJECT_CLASS_ATTR_USER_VALUE&lt;/i&gt; = "user";&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;span style=""&gt;private&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt; &lt;/span&gt;static final&lt;span style="font-weight: normal;"&gt; String &lt;/span&gt;&lt;i style="font-weight: normal;"&gt;DISPLAY_NAME&lt;/i&gt;&lt;span style="font-weight: normal;"&gt; = "name";&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol style="margin-top: 0in;" start="5" type="1"&gt;&lt;li class="MsoNormal" style="margin-right: 0in; margin-left: 0.5in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Run the LDAP importer Tool which will import your users to the ldap      users group in the Executors list of Runa.&lt;/li&gt;&lt;li class="MsoNormal" style="margin-right: 0in; margin-left: 0.5in; text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;If you changed the Administrator login password don't forget to change it in the LDAPimporter script.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Finally to create your own processes you can use the &lt;a href="http://sourceforge.net/forum/forum.php?forum_id=710360"&gt;Graphical Process Designer&lt;/a&gt;&lt;span style=""&gt;  &lt;/span&gt;which helps design your processes in a very simple way.&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Enjoy your Automated Workflow System and your process improvement.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5106799938744624773?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5106799938744624773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5106799938744624773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5106799938744624773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5106799938744624773'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/06/improve-your-company-using-workflow.html' title='Improve your Company using Workflow System'/><author><name>ABDOOOO</name><uri>http://www.blogger.com/profile/06497826312654732518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_fevCfrahi3s/RoPzg-buo6I/AAAAAAAAAAg/IvH4avdes7A/s72-c/xml.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7946061299096435756</id><published>2007-06-28T10:11:00.000-07:00</published><updated>2007-07-04T06:12:01.756-07:00</updated><title type='text'>Java vs. C++ - Part One</title><content type='html'>These are &lt;strong&gt;only&lt;/strong&gt; some of the differences between Java and C++ that I found so far that drew my attention and I think are worth mentioning.&lt;div style="font-size: 100%; font-family: 'Trebuchet MS',Trebuchet,Verdana,Sans-Serif;"&gt; &lt;table style="border-style: inset; border-collapse: collapse;" border="3" cellpadding="10" width="100%"&gt; &lt;tbody&gt; &lt;tr&gt;&lt;th style="width: 10%;"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th style="width: 45%;"&gt;Java&lt;/th&gt;&lt;th style="width: 45%;"&gt;C++&lt;/th&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Compiling source code&lt;/th&gt;&lt;td&gt;When we compile a source file a .class file is generated in java byte-codes ( machine independent = portability ) that is not translated into machine language instructions until in the run time when interpreted by the Java Virtual Machine&lt;br /&gt;( machine dependent ).&lt;/td&gt;&lt;td&gt;A source file is compiled and linked to produce an .exe file in machine language that is ready to be executed when the file is loaded into memory and run by the operating system.&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Function definitions &lt;/th&gt;&lt;td&gt;All function definitions and variable declarations are inside Classes even main(). Nothing is allowed to be outside    a class except imports and package names.&lt;/td&gt;&lt;td&gt;Function definitions are outside class definitions. They have prototypes whose place decides function scope&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;th&gt;Including classes&lt;/th&gt;&lt;td&gt;Importing a package.* just directs the compiler to the location of classes used in the code so that only these classes are included not the whole package. &lt;/td&gt;&lt;td&gt;while in C++ I think that including a header file means that all classes in that header file will be compiled and linked to the source file.&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Ending class definitions&lt;/th&gt;&lt;td&gt;Class definitions end with } without a semicolon.&lt;/td&gt;&lt;td&gt;Class definitions end with };&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;th&gt;Creating objects&lt;/th&gt;&lt;td&gt;All objects must be created with &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;new&lt;/span&gt;, so they are all dynamically allocated in the heap.&lt;br /&gt;Only primitive data types can be allocated on the stack.&lt;/td&gt;&lt;td&gt;Objects can also be created and allocated without &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;new&lt;/span&gt; so they are put on the stack in the scope of their declaration.&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Declaring a reference:&lt;/th&gt;&lt;td&gt;Declaring a reference to an object without using &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;new&lt;/span&gt; to allocate the object only reserves space for the reference and no object is created in memory until &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;new&lt;/span&gt; is used and the resulting object is given to the reference to point to it.&lt;/td&gt;&lt;td&gt;Declaring an object without initializing it makes the compiler call the default constructor for the object's class and memory is allocated for the object in the stack.&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Calling static methods&lt;/th&gt;&lt;td&gt;&lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;ClassName.methodName( args.. );&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;ClassName::functionName( args.. );&lt;/span&gt;&lt;br /&gt;or &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;ObjectName.functionName( args..);&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;th&gt;Wrapper classes&lt;/th&gt;&lt;td&gt;Java has wrapper classes for primitive data types that contains static methods for handling them&lt;br /&gt;e.g.&lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt; String string = Integer.toString( intVariable );&lt;/span&gt;&lt;/td&gt;&lt;td&gt;C++ doesn't normally have them in its standard libraries&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;th&gt;Array declaration and memory allocation:&lt;/th&gt;&lt;td&gt;An array is considered an object that has to be allocated by new.&lt;br /&gt;&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int c[];&lt;br /&gt;&lt;/pre&gt;       &lt;p&gt;declares the array reference&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   c = new int[ 12 ];&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;allocates the array and automatically initialize its elements to zero for numeric primitive types, false for boolean, null for references ( non-primitive types)&lt;br /&gt;or&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int c[] = new int[ 12 ];&lt;br /&gt;// in one step&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;you can never specify the number of elements in the [] in a declaration unlike C++.&lt;/p&gt; &lt;p&gt;For multiple array declarations:&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   double a[], b[];        &lt;br /&gt;&lt;br /&gt;a = new double[ 100 ];&lt;br /&gt;b = new double[ 27 ];&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;double a[] = new double[ 100 ],&lt;br /&gt;b[] = new double[ 27 ];&lt;br /&gt;or&lt;br /&gt;double[] a, b;         &lt;br /&gt;&lt;br /&gt;a = new double[ 100 ];&lt;br /&gt;b = new double[ 27 ];&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;double[] a = new double[ 100 ],&lt;br /&gt;  b = new double[ 27 ];&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Elements of an array of a primitive data type contain values of that data type.&lt;br /&gt;While elements of an array of a non-primitive data type contian "references" to objects of that data type.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;( they have the value null by default )&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Allocating and initializing arrays in declarations:&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int n[] = { 32, 27, 64, 18, 95,&lt;br /&gt;   14, 90, 70, 60, 37 };&lt;br /&gt;// initializer list&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Array size is determined by the number of elements in the list. Here &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;new&lt;/span&gt; operator is provided by the compiler and the array object is also dynamically allocated.&lt;/p&gt; &lt;p&gt;When a Java program is executed. the Java interpreter checks array element subscripts to be sure they are valid. If there is an invalid subscript, Java generates an exception: &lt;strong&gt;ArrayIndexOutOfBoundsException&lt;/strong&gt;.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int c[ 12 ];&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;declares and allocated memory for 12 int elements without initializing them also memory is not dynamically allocated but instead it is preserved from the start and is allocated in the stack I presume.&lt;br /&gt;For multiple array declaration:&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   double a[ 100 ],&lt;br /&gt; b[ 27 ];&lt;br /&gt;&lt;/pre&gt;                   &lt;p&gt;Elements of an array of any data type contain values or objects of that data type.&lt;br /&gt;Objects for which an array can be declared must have a default constructor to be called for every element when the array is declared.&lt;/p&gt;&lt;p&gt;initializing arrays in declarations:&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int n[ 10 ] = { 0 };&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;initialize elements of array n to 0&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int n[] = { 1, 2, 3, 4, 5 };&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;array size determined by the number of elements in the list &lt;/p&gt; &lt;p&gt;No checking for array bounds is done by the compiler so the programmer must be very carful not to exceed the array length&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Multiple subscripted arrays&lt;/th&gt;&lt;td&gt;&lt;p&gt;Doesn't directly support multiple-subscripted arrays but allows the programmer to specify single-subscripted arrays whose elements are also single-subscripted arrays, achieving the same effect.&lt;br /&gt;i.e. arrays of arrays: &lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int b[][] = { { 1, 2 },&lt;br /&gt;      { 3, 4, 5 } };&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;b[ 0 ] is a reference to an array of 2 elements&lt;br /&gt;b[ 1 ] is a reference to an array of 3 elements &lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int b[][];&lt;br /&gt;b = new int[ 3 ][ 3 ];&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;3 by 3 array allocated&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int b[][];&lt;br /&gt;b = new int[ 2 ][];&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;allocates rows&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   b[ 0 ] = new int[ 5 ];&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; allocates columns for row 0 &lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   b[ 1 ] = new int[ 3 ];&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;allocates columns for row 1 &lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Directly supports multiple-subscripted arrays and their elements are placed consecutively in memory row after row and the elements are actually located by pointer arithmetic. &lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int b[][] = { { 1, 2 },&lt;br /&gt;      { 3, 4, 5 } };&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;causes an error in C++  "error: declaration of 'b' as multidimensional array must have bounds for all dimensions except the first."&lt;br /&gt;&lt;/p&gt; &lt;pre style="font-family: monospace; font-size: 100%; color: rgb(0, 0, 204);"&gt;   int b[][ 3 ] = { { 1, 2 },&lt;br /&gt;         { 3, 4, 5 } };&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;declares and preserves memory for a 2 by 3 multidimensional array b and initializes missing element in the list b[ 0 ][ 2 ] by 0. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Passing arguments&lt;/th&gt;&lt;td&gt;&lt;p&gt;Java does not allow the programmer to decide whether to pass an argument call-by-value or call-by-reference:&lt;br /&gt;  Primitive data type variables are always passed call-by-value.&lt;br /&gt;Objects are not passed to methods; references to objects are passed&lt;br /&gt;(call-by-value just like pointers       in C++ are) so the method can manipulate the object directly.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;You can pass primitive data types or objects either call-by-value or call-by-reference ( using pointers or references to them ).&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Returns&lt;/th&gt;&lt;td&gt;&lt;p&gt;When returning information from a method via a return statement:&lt;/p&gt; &lt;p&gt;Primitive data type variables are always returned by value (a copy is returned).&lt;br /&gt;Objects are always returned by reference - a reference to the object is returned.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Objects and primitive data type variables can be returned by value or by reference&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;th&gt;Constant variables&lt;/th&gt;&lt;td&gt;&lt;p&gt;Constant variables ( read only variables ) are declared using &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;final&lt;/span&gt;. &lt;/p&gt; &lt;/td&gt;&lt;td&gt;&lt;p&gt;They are declared using &lt;span style="color: rgb(0, 0, 204);font-family:monospace;font-size:100%;"  &gt;const&lt;/span&gt;.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7946061299096435756?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7946061299096435756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7946061299096435756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7946061299096435756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7946061299096435756'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/06/java-vs-c-part-one.html' title='Java vs. C++ - Part One'/><author><name>mshalaby</name><uri>http://www.blogger.com/profile/13133192118777632030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-1165115921179045732</id><published>2007-06-19T14:30:00.000-07:00</published><updated>2007-06-19T14:31:11.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>Erlang Vs Object Oriented</title><content type='html'>I think that in the future the functional programming community will be at peak. currently I think that the functional communities are too small to beat the Java community.&lt;br /&gt;&lt;br /&gt;the functional is easier to any person. any one can write a functional code. Erlang for example has a light VM that can make profit of multiprocessors availability. this doesn't depend on certain compiler that enables parallelism in Java or C.&lt;br /&gt;if you don't care about performance, think about parallelism as simpler way to structure software in a domain where there is a lot of natural concurrency.&lt;br /&gt;&lt;br /&gt;I read a paper "Structured Programming Using Processes" in which the author tried to prove that the Erlang was capable to support a personal accounting software application. Maybe you can take a look to it later.&lt;br /&gt;&lt;br /&gt;also, I like to point to &lt;a href="http://yaws.hyber.org/"&gt;Yaws&lt;/a&gt;, Yaws is a HTTP high performance 1.1 webserver particularly well suited for dynamic-content webapplications. I ma really amazed by its performance.&lt;br /&gt;&lt;br /&gt;well, but why Erlang is not widely used till now?&lt;br /&gt;Well the world likes Java. the type safe language. Security in distributed Erlang is “all or nothing,” so when a node is authenticated to another, it can perform any operation.&lt;br /&gt;process isolation is not complete, a process can flood another process with messages, or it can steal all the CPU cycles by entering into an infinite loop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-1165115921179045732?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/1165115921179045732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=1165115921179045732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1165115921179045732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1165115921179045732'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/06/erlang-vs-object-oriented.html' title='Erlang Vs Object Oriented'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7040739828742525212</id><published>2007-05-25T07:45:00.000-07:00</published><updated>2007-05-25T07:49:44.552-07:00</updated><title type='text'>Using action+client caching to speed up your Rails application</title><content type='html'>Too many visitors are visiting your website and loads of dynamic data are being delivered to your clients?. Of those visitors, you have more people reading your site's content than people modifying it? meaning,  you get lots more GET requests than POST, PUT or DELETE?&lt;br /&gt;&lt;br /&gt;If the above questions are all answered with a YES, then, my friend, you are desperately in need of caching. Caching will help you lessen the load on your servers by doing two main things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It eliminates lengthy trips to the (slow by nature) database to fetch the dynamic data&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It frees precious CPU cycles needed in processing this data and preparing it for presentation.&lt;/li&gt;&lt;/ol&gt;I have faced the same situation with a project we are planning, we are bound to have much more GETS than any other HTTP command, and since we are building a Restful application we will have a one to one mapping between our web resources (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;urls&lt;/span&gt;) and our application models. The needs of our caching mechanism are the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It needs to be fast&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It needs to be shared across multiple servers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Authentication is required for some actions&lt;/li&gt;&lt;li&gt;Page presentation changes (slightly) based on logged in user&lt;/li&gt;&lt;li&gt;Most pages are shared and only a few are private for each user&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;We have two answer the following now, what caching technique and what cache store we will use?&lt;br /&gt;&lt;br /&gt;The cache store part is easy, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;memcached&lt;/span&gt; seems like the most sensible choice as it achieves points 1 &amp;amp; 2 and is orthogonal to the other 3 requirements. So it is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;memcached&lt;/span&gt; for now.&lt;br /&gt;&lt;br /&gt;Now, which caching technique?. Rails has several caching methods, the most famous of those is Page, Action and Fragment Caching. Greg Pollack has a great writeup on these &lt;a href="http://www.railsenvy.com/2007/2/28/rails-caching-tutorial"&gt;here&lt;/a&gt; and &lt;a href="http://www.railsenvy.com/2007/3/20/ruby-on-rails-caching-tutorial-part-2"&gt;here&lt;/a&gt;. Model caching is also an option, but it can get a bit too complicated, so I'm leaving it out for now, it can be implemented later though (layering your caches is usually a good idea)&lt;br /&gt;&lt;br /&gt;Page caching is the fastest, but we will use the ability to authenticate (unless we do so via HTTP authentication, which I would love to, but sadly is not the case). This leaves us with action and fragment caching. Since the page contains slightly different presentation based on the logged in user (like a hello message and may be a localized &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;datetime&lt;/span&gt; string) fragment caching would sound to be the better choice, no?  Well, I would love to be able to use action caching after all, this way I can server whole pages without invoking the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;renderer&lt;/span&gt; at all and really avoid doing lots of string processing by Ruby.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is a solution, if you'd just wake up and smell the coffee, we are in Web 2.0 and we should think in Web 2.0 age solutions for Web 2.0 problems. What if add little JavaScript to the page that dynamically displays the desired content based on user role. And if the content is really little, why not store it in a session cookie? Max Dunn implements a similar solution for his wiki &lt;a href="http://blog.maxdunn.com/articles/2006/09/16/ruby-on-rails-advanced-page-caching"&gt;here&lt;/a&gt; and thus the page is served the same with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;dom&lt;/span&gt; manipulation kicking in to do the simple mods for this specific user. Rendering of those is done on the client so no load on the server, and since the mods are really small, the client is not hurt either, and it gets to get the page much faster, it's a win win situation. Life can't be better!&lt;br /&gt;&lt;br /&gt;No, It can!. In a content driven website, many people check a hot topic frequently, and many reread the same data they read before. In those cases, the server is sending those a cached page yes, but it is resending the same bits which the browser has in it's cache. This is a waste of bandwidth, and your mongrel will be waiting for the page transfer to finish before it can consume another request.&lt;br /&gt;&lt;br /&gt;A better solution is to utilize client caching. Tell the browser to use the version in its cache if it is not invalidated. Just send the new data in a cookie and and let the page dynamically modify itself to adapt to the logged in user. Relying on session cookies for dynamic parts will prevent the browser from displaying stale data between two different session. But the page itself will not be fetched over the wire more than once, even for different users on the same computer.&lt;br /&gt;&lt;br /&gt;I am using the &lt;a href="http://blog.craz8.com/action-cache-plugin/"&gt;Action Cache &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Plugin&lt;/span&gt;&lt;/a&gt; by Tom Fakes to add client caching capabilities to my Action Caches. Basically things go in the following manner:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A GET request is encountered and is intercepted&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Caching headers are checked, if none exists then proceed&lt;br /&gt;else send (304 NOT MODIFIED)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Action Cache is checked if it is not there then proceed&lt;br /&gt;else send the cached page (200 OK)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Action processed and page content is rendered&lt;/li&gt;&lt;li&gt;Page added to cache, with last-modified header information&lt;/li&gt;&lt;li&gt;Response sent back to browser (200 OK + all headers)&lt;/li&gt;&lt;/ol&gt;So how to determine the impact of applying these to the application&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We need to know the percentage of GET requests, which can be cached as opposed to POST, PUT and DELETE ones&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Of those GET requests, how many are repeated?&lt;/li&gt;&lt;li&gt;Of those repeated GET requests, how many originate from the same client?&lt;/li&gt;&lt;/ol&gt;Those numbers can tell us if our caching model works fine or not, this should be the topic of the next installment of this article&lt;br /&gt;&lt;br /&gt;Happy caching&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7040739828742525212?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7040739828742525212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7040739828742525212' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7040739828742525212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7040739828742525212'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/using-actionclient-caching-to-speed-up.html' title='Using action+client caching to speed up your Rails application'/><author><name>oldmoe</name><uri>http://www.blogger.com/profile/14341721253106429644</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_XFDHsTWrvBY/SsFeIEFTI_I/AAAAAAAAADU/NphzXmrghkw/S220/oldmoe.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6192053082537071990</id><published>2007-05-24T14:54:00.000-07:00</published><updated>2007-05-24T16:17:10.535-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><title type='text'>Agile Process</title><content type='html'>My first reading about &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile&lt;/a&gt; was the &lt;a href="http://agilemanifesto.org/principles.html"&gt;Agile Manifesto&lt;/a&gt;. I think this was enough to get the whole picture of the agile philosophy.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I really don't recommend that you get a book to read about the agility; it will be a contradiction to read a book as long as the Agile methods emphasize working software as the primary measure of progress. It is better you spend the time understanding your working environment and maturity to apply the best process that can fit with it.&lt;br /&gt;&lt;/div&gt;I lived a similar experience with &lt;a href="http://www.espace.com.eg/"&gt;eSpace&lt;/a&gt; when they were aiming to get a &lt;a href="http://www.sei.cmu.edu/cmm/"&gt;CMM&lt;/a&gt; certificate, &lt;a href="http://www.sei.cmu.edu/cmmi/"&gt;CMMI&lt;/a&gt; or whatever they will call it after couple of years.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I think that finally the people here got the good decision by putting this plan away, and put their own standards, the standards best fitting with their teams and their environment. I doubt their was a need to some white collar guy to supervise our documents and our working styles to decide whether we fit  to  Mr XYZ standards or not. I also got the chance to meet some guys from another company having this certificate. What I found is that they modified their hierarchical structure just to accommodate the standard although their team wasn't capable at all to support this hierarchy.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Anyway, let's move to another point...&lt;br /&gt;&lt;div style="text-align: justify;"&gt;When we talk about the agile process we should identify very well any possible limitations before adopting it. It is very clear for me that it needs mature people, and this can be considered as one of the limitations.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Another factor that may limit the agile adoption is the "&lt;span style="font-weight: bold;"&gt;distributed software&lt;/span&gt;". Lately all our projects are distributed. Customers are from Europe, USA, Gulf. Developers are working remotely from different areas.&lt;br /&gt;&lt;/div&gt;What are the challenges behind such distributed agile work???&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The answer of this question can be summarized in knowing that agile methods mainly rely on informal processes to facilitate coordination while distributed software development typically relies on formal mechanisms.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Challenges in Agile Distributed Development&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Communication need vs. communication impedance&lt;/span&gt;: How can we achieve a balance in formality of communication in agile distributed environments?&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Fixed vs. evolving quality requirements: &lt;/span&gt;the Agile relies on ongoing negotiations between the developer and the customer while Distributed Development often relies on fixed, upfront commitments on quality requirements.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;People- vs. process-oriented control: &lt;/span&gt;We appreciate the people-orientation the most.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Lack of cohesion:&lt;/span&gt; Generally speaking about the distributed environment, people may feel In distributed development, participants are less likely to perceive themselves as part of the same team when compared to co-located participants. the agile adds some more excitement to it :)&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_e1QpmVrnUc0/RlYKNtMOSoI/AAAAAAAAACw/B3tGxQcKrKs/s1600-h/challenges.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_e1QpmVrnUc0/RlYKNtMOSoI/AAAAAAAAACw/B3tGxQcKrKs/s400/challenges.jpg" alt="" id="BLOGGER_PHOTO_ID_5068249661237512834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Practices&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Process Refactor&lt;/span&gt;: Continuous process adjustments instead of following strictly the agile practices. It is also recommended to document the requirements at different levels of formality.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Knowledge Spreading:&lt;/span&gt; the team should share their knowledge regarding different domains(business, code, test cases..etc). Alot of tools were developed to reduce the overhead of knowledge-sharing activities. Code/process Repository is a must. the &lt;a href="http://en.wikipedia.org/wiki/Wiki"&gt;Wiki&lt;/a&gt; also is a very important way to share the How-Tos between members. I can't neglect the &lt;a href="http://en.wikipedia.org/wiki/Bugzilla"&gt;Bugzilla&lt;/a&gt; with its role in creating database to help teams report issues and assign priorities.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Short Iterations:&lt;/span&gt; any iteration should not exceed 2 weeks. short iterations help to detect any misunderstandings for the project business and prevent any time waste.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Start with well-understood functionalities:&lt;/span&gt; In order to create the best atmosphere for developers there should be a solid sand to start to be familiar with the processes, tools, and the application. this can be some kind different that the agile which advocates the development of features prioritized as critical by the customer.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Improve Communication:&lt;/span&gt; Synchronized work hours are very important for the team. Also try to make the informal communication be done through formal channels. for example, let it through the emails so that it can be archived. In the distributed Projects it is recommended that the project leader/manager should be involved in the communication and the synchronization process than the Agile practice. finally, some daily mechanisms should be done to maintain minimal communication like morning online meeting.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Building Trust:&lt;/span&gt; trust involves both the team and the customers.&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_e1QpmVrnUc0/RlYJ6NMOSnI/AAAAAAAAACo/MpiQweU9FPY/s1600-h/practices.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_e1QpmVrnUc0/RlYJ6NMOSnI/AAAAAAAAACo/MpiQweU9FPY/s400/practices.jpg" alt="" id="BLOGGER_PHOTO_ID_5068249326230063730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;References: &lt;/span&gt;&lt;br /&gt;1. Ebert, C. and Neve, P.D. Surviving global software development. IEEE Software 18, 2 (Mar./Apr. 2001), 62–69.&lt;br /&gt;2. Highsmith, J. and Cockburn, A. Agile software development: The business of innovation. IEEE Computer 34, 9 (Sept. 2001), 120–122.&lt;br /&gt;3. Matloff, N. Offshoring: What can go wrong? IT Professional (July/Aug.2005), 39–45.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6192053082537071990?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6192053082537071990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6192053082537071990' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6192053082537071990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6192053082537071990'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/agile-process.html' title='Agile Process'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_e1QpmVrnUc0/RlYKNtMOSoI/AAAAAAAAACw/B3tGxQcKrKs/s72-c/challenges.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-8797584484443533115</id><published>2007-05-23T21:30:00.000-07:00</published><updated>2007-05-24T09:58:16.898-07:00</updated><title type='text'>Virtual functions in C++</title><content type='html'>&lt;font style="" face="times new roman" size="3"&gt;&lt;br /&gt;&lt;/font&gt;&lt;blockquote face="times new roman"&gt;&lt;font size="3"&gt;   "In order to implement the concept of &lt;/font&gt;&lt;font style="font-style: italic; font-weight: bold;" size="3"&gt;Polymorphism&lt;/font&gt;&lt;font size="3"&gt; which is a corner-stone of OOP the C++ compiler has to find a way to make it possible."&lt;/font&gt;&lt;/blockquote&gt;&lt;font style="" face="times new roman" size="3"&gt;&lt;br /&gt;&lt;br /&gt;Lets see how the story begins.&lt;br /&gt;&lt;br /&gt;Derived classes inherit member functions of the base class but when some member functions are not exactly appropriate for the derived class they should provide their own version of these functions to override the immediate base class' functions and make their own objects happy. So if any of these functions is called for a derived object the compiler calls its class' version of that function.&lt;br /&gt;&lt;br /&gt;This works quite fine when the types of objects are known at compile time so that the compiler knows which function to call for each particular object. The compiler knows where to find the copy of the function for each class and so the addresses used for these function calls are &lt;/font&gt; &lt;font style="font-style: italic; font-weight: bold;" face="times new roman" size="3"&gt;settled&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt; at compile time. ( &lt;/font&gt;&lt;font style="font-weight: bold;" face="times new roman" size="3"&gt;static binding&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt; )&lt;br /&gt;&lt;br /&gt;Suppose that we have a lot of derived objects at different levels of the inheritance hierarchy that have a common base class and that they need to be instantiated at run time. Here the compiler does not know in advance what derived class objects to expect. These objects would be dynamically allocated and the code for handling these objects should be able to deal with all them.&lt;br /&gt;&lt;br /&gt;It is perfectly legitimate to use base class pointers to point to these objects but that requires the compiler to handle them exactly the same way they would handle their base class objects. So they would call base class versions of member functions and none of the member functions specific for the derived class would be accessible.&lt;br /&gt;&lt;br /&gt;To solve this problem &lt;/font&gt;&lt;font style="font-weight: bold; font-style: italic;" face="times new roman" size="3"&gt;Virtual functions&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt; are used to allow &lt;/font&gt;&lt;font style="font-style: italic; font-weight: bold;" face="times new roman" size="3"&gt;dynamic binding&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;blockquote face="times new roman"&gt;&lt;font size="3"&gt; "...It seems that our friend, the compiler of course, is very resourceful."&lt;/font&gt;&lt;/blockquote&gt;&lt;font style="" face="times new roman" size="3"&gt;&lt;br /&gt;&lt;br /&gt;To support Polymorphism at runtime the compiler builds at compile time &lt;/font&gt;&lt;font style="font-weight: bold; font-style: italic;" face="times new roman" size="3"&gt;virtual function tables&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt; ( &lt;/font&gt;&lt;font style="font-weight: bold;" face="times new roman" size="3"&gt;vtables&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt; ). Each class with one or more virtual functions has a vtable that contains pointers to the appropriate virtual functions to be called for objects of that class. Each object of a class with virtual functions contains a pointer to the vtable for that class which is usually placed at the beginning of the object.&lt;br /&gt;&lt;br /&gt;The compiler then generates code that will:&lt;br /&gt;&lt;br /&gt; 1. dereference the base class pointer to access the derived class object.&lt;br /&gt; 2. dereference its vtable pointer to access its class vtable.&lt;br /&gt; 3. add the appropriate offset to the vtable pointer to reach the desired function pointer.&lt;br /&gt; 4. dereference the function pointer to execute the appropriate function.&lt;br /&gt;&lt;br /&gt;This allows dynamic binding as the call to a virtual function will be &lt;/font&gt;&lt;font style="font-style: italic;" face="times new roman" size="3"&gt;routed&lt;/font&gt;&lt;font style="" face="times new roman" size="3"&gt; at run time to the virtual function version appropriate for the class.&lt;br /&gt;&lt;br /&gt;Impressive isn't it?&lt;br /&gt;&lt;br /&gt;Well that made me try just for fun to write code that would do these steps instead of the compiler.&lt;br /&gt;&lt;br /&gt;But as I did this another question evolved.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;How does member functions get their "this" pointer ?&lt;/font&gt; ( pointer to the object the function is called for )&lt;br /&gt;&lt;br /&gt;I know that the compiler should implicitly pass 'this' as an argument to the member function so that it can use it to access data of the object it is called for.&lt;br /&gt;&lt;br /&gt;I used in my example a single virtual function that takes no arguments and returns void.&lt;br /&gt;So at first I tried calling the destination virtual function with no arguments. The function was called already but the results showed it has used some false value for 'this' that pointed it somewhere other than the object and gave the wrong results.&lt;br /&gt;&lt;br /&gt;So I tried calling the function and passing it the pointer to the object and it seemingly worked just fine.&lt;br /&gt;&lt;br /&gt;Here's the code I tried...&lt;br /&gt;&lt;/font&gt;&lt;pre style="color: blue; background: white; margins: 5px; padding: 5px;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;using std::cout;&lt;br /&gt;using std::endl;&lt;br /&gt;&lt;br /&gt;class Parent {&lt;br /&gt;public:&lt;br /&gt;   Parent( int = 0, int = 0 );  // default constructor&lt;br /&gt;   void setxy( int, int );&lt;br /&gt;   int getx() const { return x; }&lt;br /&gt;   int gety() const { return y; }&lt;br /&gt;   virtual void print();&lt;br /&gt;private:&lt;br /&gt;   int x;&lt;br /&gt;   int y;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Parent::Parent( int a, int b )&lt;br /&gt;{&lt;br /&gt;   setxy( a, b );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Parent::setxy( int a, int b )&lt;br /&gt;{&lt;br /&gt;   x = ( a &amp;gt;= 0 ? a : 0 );&lt;br /&gt;   y = ( b &amp;gt;= 0 ? b : 0 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Parent::print()&lt;br /&gt;{&lt;br /&gt;   cout &amp;lt;&amp;lt; " [ x: " &amp;lt;&amp;lt; x &amp;lt;&amp;lt; ", y: " &amp;lt;&amp;lt; y &amp;lt;&amp;lt; "] ";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Child : public Parent {&lt;br /&gt;public:&lt;br /&gt;   Child( int a = 0, int b = 0, int c = 0 , int d = 0 );&lt;br /&gt;   void setzt( int c, int d );&lt;br /&gt;   int getz() const { return z; }&lt;br /&gt;   int gett() const { return t; }&lt;br /&gt;   virtual void print();&lt;br /&gt;private:&lt;br /&gt;   int z;&lt;br /&gt;   int t;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Child::Child( int a, int b, int c, int d )&lt;br /&gt;   : Parent( a, b )&lt;br /&gt;{&lt;br /&gt;   setzt( c, d );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Child::setzt( int c, int d )&lt;br /&gt;{&lt;br /&gt;   z = ( c &amp;gt;= 0 ? c : 0 );&lt;br /&gt;   t = ( d &amp;gt;= 0 ? d : 0 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Child::print()&lt;br /&gt;{&lt;br /&gt;   Parent::print();&lt;br /&gt;   cout &amp;lt;&amp;lt; " [ z: " &amp;lt;&amp;lt; z &amp;lt;&amp;lt; ", t: " &amp;lt;&amp;lt; t &amp;lt;&amp;lt; "] ";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class GrandChild : public Child {&lt;br /&gt;public:&lt;br /&gt;   GrandChild( int = 0, int = 0, int = 0, int = 0, int = 0);&lt;br /&gt;   void sete( int );&lt;br /&gt;   int gete() const { return e; }&lt;br /&gt;   virtual void print();&lt;br /&gt;private:&lt;br /&gt;   int e;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;GrandChild::GrandChild( int a, int b, int c, int d, int e )&lt;br /&gt;   : Child( a, b, c, d )&lt;br /&gt;{&lt;br /&gt;   sete( e );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void GrandChild::sete( int num )&lt;br /&gt;{&lt;br /&gt;   e = ( num &amp;gt;= 0 ? num : 0 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void GrandChild::print()&lt;br /&gt;{&lt;br /&gt;   Child::print();&lt;br /&gt;   cout &amp;lt;&amp;lt; " [ e: " &amp;lt;&amp;lt; e &amp;lt;&amp;lt; " ]";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   Parent parentObj( 7, 8 );&lt;br /&gt;   Child childObj( 56, 23, 6, 12 );&lt;br /&gt;   GrandChild grandchildObj( 4, 64, 34, 98, 39 );&lt;br /&gt;   &lt;br /&gt;   // declare an array of pointers to Parent&lt;br /&gt;   &lt;br /&gt;   Parent *parentPtr[ 3 ];          &lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "size of Parent = " &amp;lt;&amp;lt; sizeof( Parent ) &amp;lt;&amp;lt; " bytes\n";&lt;br /&gt;   cout &amp;lt;&amp;lt; "size of Child = " &amp;lt;&amp;lt; sizeof( Child ) &amp;lt;&amp;lt; " bytes\n";&lt;br /&gt;   cout &amp;lt;&amp;lt; "size of GrandChild = "&lt;br /&gt;        &amp;lt;&amp;lt; sizeof( GrandChild ) &amp;lt;&amp;lt; " bytes\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   parentPtr[ 0 ] = &amp;parentObj;      // direct assignment&lt;br /&gt;   parentPtr[ 1 ] = &amp;childObj;       // implicit casting&lt;br /&gt;   parentPtr[ 2 ] = &amp;grandchildObj;  // implicit casting&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "\nThe Derived objects accessed by"&lt;br /&gt;         " an array of pointers to Parent:\n\n";&lt;br /&gt;&lt;br /&gt;   for ( int i = 0; i &amp;lt; 3; i++ ) {&lt;br /&gt;      cout &amp;lt;&amp;lt; "Object " &amp;lt;&amp;lt; i + 1 &amp;lt;&amp;lt; " : ";&lt;br /&gt;      cout &amp;lt;&amp;lt; "\tvtable ptr (" &amp;lt;&amp;lt; *( ( void ** ) parentPtr[ i ] ) &amp;lt;&amp;lt; ")\n" ;&lt;br /&gt;                  // vtable ptr at the beginning of the object&lt;br /&gt;    &lt;br /&gt;      // initialize pointer to function&lt;br /&gt;    &lt;br /&gt;      void (* funptr ) ( Parent * ) = NULL;       &lt;br /&gt;&lt;br /&gt;      // assign to it pointer to function in vtable&lt;br /&gt;    &lt;br /&gt;      funptr = *( *( ( void (*** ) ( Parent * ) ) parentPtr[ i ] ) );&lt;br /&gt;    &lt;br /&gt;      cout &amp;lt;&amp;lt "\t\tpointer 1 in vtable is (" &amp;lt;&amp;lt ( void * ) funptr&lt;br /&gt;           &amp;lt;&amp;lt ")\n\t\t( pointer to virtual function 1 'print()' )";&lt;br /&gt;&lt;br /&gt;      cout &amp;lt;&amp;lt; "\n\n\t\tdata: ";&lt;br /&gt;&lt;br /&gt;      funptr( parentPtr[ i ] ); // call the 1st function in vtable&lt;br /&gt;                               // and passing ( this ) to it&lt;br /&gt;                              // without using parentPtr[ i ]-&amp;gt;print();&lt;br /&gt;      cout &amp;lt;&amp;lt; "\n" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;The output should look like this:&lt;br/&gt;&lt;br /&gt;&lt;pre style="background: black; color: white; margins: 5px; padding: 20px;" width="75%"&gt;&lt;br /&gt;size of Parent = 12 bytes&lt;br /&gt;size of Child = 20 bytes&lt;br /&gt;size of GrandChild = 24 bytes&lt;br /&gt;&lt;br /&gt;The Derived objects accessed by an array of pointers to Parent:&lt;br /&gt;&lt;br /&gt;Object 1 :      vtable ptr (0043FD90)&lt;br /&gt;                pointer 1 in vtable is (00401480)&lt;br /&gt;                ( pointer to virtual function 1 'print()' )&lt;br /&gt;&lt;br /&gt;                data:  [ x: 7, y: 8]&lt;br /&gt;&lt;br /&gt;Object 2 :      vtable ptr (0043FD80)&lt;br /&gt;                pointer 1 in vtable is (004015B8)&lt;br /&gt;                ( pointer to virtual function 1 'print()' )&lt;br /&gt;&lt;br /&gt;                data:  [ x: 56, y: 23]  [ z: 6, t: 12]&lt;br /&gt;&lt;br /&gt;Object 3 :      vtable ptr (0043FD70)&lt;br /&gt;                pointer 1 in vtable is (004016E6)&lt;br /&gt;                ( pointer to virtual function 1 'print()' )&lt;br /&gt;&lt;br /&gt;                data:  [ x: 4, y: 64]  [ z: 34, t: 98]  [ e: 39 ]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="" face="times new roman" size="3"&gt;&lt;font size="2"&gt;&lt;br /&gt;&lt;/font&gt;In order to reach the function pointer to the desired function ( print() ) the parentPtr of the object which normally points to its beginning had to be casted to type pointer to pointer to pointer to function before it was dereferenced to give the vtabel pointer and then dereferenced again to give the first pointer to function in the vtable.&lt;br /&gt;&lt;br /&gt; Polymorphism uses virtual functions in another interesting way. Virtual functions enables us to create special classes for which we never intend to instantiate any objects. These classes are called &lt;font style="font-weight: bold; font-style: italic;"&gt;abstract classes&lt;/font&gt; and they only used to provide an appropriate base class that passes a common interface and/or implementation to their derived classes.&lt;br /&gt;&lt;br /&gt;Abstract classes are not specific enough to define objects. &lt;font style="font-style: italic; font-weight: bold;"&gt;Concrete classes&lt;/font&gt; on the other hand have the specifics needed to have a real object. To make a base class abstract it must have one or more &lt;font style="font-style: italic; font-weight: bold;"&gt;pure virtual functions&lt;/font&gt; which are those having = 0 added at the end of its function prototype.&lt;br /&gt;&lt;br /&gt;     virtual void draw() const = 0;&lt;br /&gt;&lt;br /&gt;These pure virtual functions should be all overridden in the derived classes for these to be concrete ones or else they would be abstract classes too.&lt;br /&gt;&lt;br /&gt;Suppose we have a base class Hardware. We can never draw, print the production date or price unless we know the exact type of hardware we're talking about. So it looks that class Hardware could make a good example for an abstract base class.&lt;br /&gt;&lt;br /&gt;Another example could be class Furniture and it might look something like this:&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;pre style="color: blue; background: white; margins: 5px; padding: 5px;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Class Furniture {&lt;br /&gt;public:&lt;br /&gt;   ...&lt;br /&gt;   virtual double getVolume() const = 0; // a pure virtual&lt;br /&gt;                                            function&lt;br /&gt;   virtual void draw() const = 0;       // another one here&lt;br /&gt;   ...                 &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;font style="" face="times new roman" size="3"&gt;&lt;br /&gt;Here class Furniture definition contains only the interface and implementation to be inherited.&lt;br /&gt;It even does not contain any data members.&lt;br /&gt;&lt;br /&gt;That's it.&lt;br /&gt;Hope you liked this article.&lt;br /&gt;&lt;br /&gt;I will be happy to receive your comments.&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-8797584484443533115?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/8797584484443533115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=8797584484443533115' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8797584484443533115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8797584484443533115'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/virtual-functions.html' title='Virtual functions in C++'/><author><name>mshalaby</name><uri>http://www.blogger.com/profile/13133192118777632030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-8147779334041859947</id><published>2007-05-23T02:36:00.000-07:00</published><updated>2007-05-23T02:56:00.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expressions'/><title type='text'>Bullet Proof code using RegExp.</title><content type='html'>Regular expressions is a great way to find those hard to find strings.&lt;br /&gt;Suppose you have a bunch of old code and you want to bullet proof it or you might be interested in auditing it and for starters you want to find those uninitialized variables using eclipse.&lt;br /&gt;&lt;br /&gt;the pattern of uninitialized variable could be in the following format&lt;br /&gt;&lt;br /&gt;(Var)(space or more)(Alphanumeric word)(Possible space or more)(semi-colon)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;to search for (space or more) we use expression&lt;br /&gt;(\s+)&lt;br /&gt;\s means space&lt;br /&gt;+ means one or more&lt;br /&gt;&lt;br /&gt;to search for(Alphanumeric word) we use expression&lt;br /&gt;(\w+)&lt;br /&gt;\w means Alphanumeric character&lt;br /&gt;+ means one or more&lt;br /&gt;&lt;br /&gt;to search for (Possible space or more) we use expression&lt;br /&gt;(\s*)&lt;br /&gt;\s means space&lt;br /&gt;* means zero or more&lt;br /&gt;&lt;br /&gt;so the regular expression would be int(\s+\w+\s*); it will return all uninitialized ints.&lt;br /&gt;&lt;br /&gt;It would be great if we collect those regular expressions and keep them in a library to be our arsenal towards bad code.&lt;br /&gt;&lt;br /&gt;do u have more regular expressions to share?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-8147779334041859947?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/8147779334041859947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=8147779334041859947' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8147779334041859947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8147779334041859947'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/bullet-proof-code-using-regexp.html' title='Bullet Proof code using RegExp.'/><author><name>Hamdy K.</name><uri>http://www.blogger.com/profile/16477230220844362817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-2345850473897118393</id><published>2007-05-22T05:52:00.000-07:00</published><updated>2007-05-22T06:01:31.476-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cartoon'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby_on_Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Ruby on Rails, web development that doesn't h...</title><content type='html'>&lt;object height="350" width="425"&gt;&lt;br /&gt;&lt;param value="http://www.youtube.com/v/H868NSM2yAg" name="movie"&gt;&lt;br /&gt;&lt;param value="transparent" name="wmode"&gt;&lt;br /&gt;&lt;embed wmode="transparent" type="application/x-shockwave-flash" src="http://www.youtube.com/v/H868NSM2yAg" height="350" width="425"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-2345850473897118393?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/2345850473897118393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=2345850473897118393' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/2345850473897118393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/2345850473897118393'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/ruby-on-rails-web-development-that.html' title='Ruby on Rails, web development that doesn&apos;t h...'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7100714516205447912</id><published>2007-05-21T01:51:00.001-07:00</published><updated>2007-05-21T02:07:02.946-07:00</updated><title type='text'>Test Mail Server</title><content type='html'>You are on delivery, you need to test your application, and you need to make sure it sends email notification when the form is filled.. you look around wondering were did the system admin go.. and after a while when you catch him sitting in the buffet, and ask him for a mail server to test your logic, he stares at you for a while before replying " We got no mail server for testing". Well, at this point the degree of frustration reaches its peak, and you start wondering why in the world do we hire those sys admins?&lt;br /&gt;&lt;br /&gt;well you won't need them anymore, just use Gmail, yes you can use your gmail account (sure you have one).. here is the configuration&lt;br /&gt;&lt;br /&gt;address =&gt;        "smtp.gmail.com",&lt;br /&gt;port =&gt;           587,&lt;br /&gt;domain =&gt;         "yourdomain.com",&lt;br /&gt;authentication =&gt; :plain,&lt;br /&gt;user_name =&gt;      "yourgmailaccount",&lt;br /&gt;password =&gt;       "yourgmailpassword"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7100714516205447912?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7100714516205447912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7100714516205447912' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7100714516205447912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7100714516205447912'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/test-mail-server.html' title='Test Mail Server'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-146648106896176627</id><published>2007-05-18T04:37:00.000-07:00</published><updated>2007-05-19T13:16:26.355-07:00</updated><title type='text'>MogileFS revisited</title><content type='html'>So i got this reply on my &lt;a href="http://espaceblogs.blogspot.com/2007/05/mogilefs-storage-engine.html"&gt;recent post&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Please recall that MogileFS has no POSIX file API. All file transfers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;are done via HTTP. So, it really isn't a drop-in replacement for NFS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;or any other network file system. You need to add logic to your&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;application to deal with MogileFS.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Also, you can't do updates to a file; you must overwrite the entire&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;file if you make any changes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;MogileFS is primarily intended for a write-once/read-many setup."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So how would this fit in our system, for a starter I think it won't be of much impact, since we are storing system images. The idea of updating files won't be an issue, as images intend to be very large, and once stored it is either replaced by a newer image or used to restore a system. Also we are going to use  Ruby on Rails to interface with the &lt;a href="http://wiki.systemimager.org/index.php/Main_Page"&gt;system Imager&lt;/a&gt;, our ope source imaging system, and  ruby has a plugin for MogilrFS, so it won't be a problem to integrate it, and  everything seems ok.&lt;br /&gt;&lt;br /&gt;What about other systems, how could be MogileFS useful in other systems.. Would these issues be a problem for application in need for a smart storage? Lets take a Mail system for example, we have multiple servers serving a domain, and users' mail boxes are spread among these servers, The file in this case will be the emails, and since we need no update on the emails, write once/read many condition will be fulfilled. Although if the mail service was not tailored made or customized, it will be hard to integrate MogileFS, meaning if you are using a ready made Mail server like Sendmail or Qmail, you will find difficulties to make MogileFS your storage engine.&lt;br /&gt;&lt;br /&gt;As a conclusion MogileFS is better used with applications that are developed with MogileFS as its storage engine in mind. Although you can use it with out of the box systems, it won't be smooth ride, but fr sure there are some systems which will not benefit from MogileFS like file sharing or workflow systems.&lt;br /&gt;Still I can't wait to try it over, and keeping you updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-146648106896176627?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/146648106896176627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/146648106896176627'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/mogilefs-revisited.html' title='MogileFS revisited'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7338427624705221067</id><published>2007-05-17T08:27:00.000-07:00</published><updated>2007-05-19T07:42:00.562-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Commercial'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby_on_Rails'/><title type='text'>Hi, I'm Ruby on Rails - Part 1</title><content type='html'>What do you get when you cross the Mac vs PC commercials and &lt;a href="http://www.railsenvy.com/"&gt;Rails Envy&lt;/a&gt;? Ruby on Rails ads to get everyone hyped for Railsconf, that's what!&lt;br /&gt;&lt;object height="350" width="425"&gt;&lt;br /&gt;&lt;param value="http://www.youtube.com/v/PQbuyKUaKFo" name="movie"&gt;&lt;br /&gt;&lt;param value="transparent" name="wmode"&gt;&lt;br /&gt;&lt;embed wmode="transparent" type="application/x-shockwave-flash" src="http://www.youtube.com/v/PQbuyKUaKFo" height="350" width="425"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7338427624705221067?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7338427624705221067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7338427624705221067' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7338427624705221067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7338427624705221067'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/hi-im-ruby-on-rails-part-1.html' title='Hi, I&apos;m Ruby on Rails - Part 1'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-3433762005246352627</id><published>2007-05-17T04:37:00.000-07:00</published><updated>2007-05-19T07:46:13.115-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reset_column_information'/><category scheme='http://www.blogger.com/atom/ns#' term='migrations'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Update a newly added column in a migration</title><content type='html'>One of the very interesting features I like about &lt;a href="http://www.rubyonrails.com/"&gt;Rails&lt;/a&gt; is migrations. It is a version control system that keeps track of all database changes. You can easily move your database to any previous version with its schema and data.&lt;br /&gt;&lt;br /&gt;During my last project, I have tried to create a migration that adds a column to a table and then updates that column.&lt;br /&gt;&lt;pre&gt;def self.up&lt;br /&gt;  add_column :file_types, :mime_type, :string&lt;br /&gt;  q = FileType.find_by_name('quicktime')&lt;br /&gt;  q.update_attributes :mime_type =&gt; 'video/quicktime'&lt;br /&gt;end&lt;/pre&gt;If you run that migration, the new column would be added successfully but no data would be updated. Why is that ?!&lt;br /&gt;&lt;br /&gt;The problem is that you are trying to update the column, mime_type, immediately after adding it and before allowing the model, FileType, to detect the new changes (strange, I know, but true).&lt;br /&gt;&lt;br /&gt;The solution, &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Migration.html"&gt;as documented&lt;/a&gt;, is simple. You just need to call&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;reset_column_information&lt;/span&gt; to ensure that the model has the latest column data before the update process.&lt;br /&gt;&lt;br /&gt;Here is the code modified:&lt;br /&gt;&lt;pre&gt;def self.up&lt;br /&gt;  add_column :file_types, :mime_type, :string&lt;br /&gt;  q = FileType.find_by_name('quicktime')&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  FileType.reset_column_information&lt;/span&gt;&lt;br /&gt;  q.update_attributes :mime_type =&gt; 'video/quicktime'&lt;br /&gt;end&lt;/pre&gt;And here is the code of &lt;span style="font-weight: bold;"&gt;reset_column_information&lt;/span&gt;&lt;pre&gt;def reset_column_information&lt;br /&gt;  read_methods.each { |name| undef_method(name) }&lt;br /&gt;  @column_names = @columns = @columns_hash = @content_columns = @dynamic_methods_hash = @read_methods = @inheritance_column = nil&lt;br /&gt;end&lt;/pre&gt;It simply resets all the cached information about columns, which will cause them to be reloaded on the next request.&lt;br /&gt;&lt;br /&gt;Although this problem has a solution, a really worse problem should be mentioned here. In the first case, when you don't call &lt;span style="font-weight: bold;"&gt;reset_column_information&lt;/span&gt;, you don't get any error! The column simply doesn't update. Additionally,  if you go back to the previous version and then re-run the migration, surprise, you get no problems and the column updates successfully!&lt;br /&gt;&lt;br /&gt;I don't know if this is a reported bug, but it is a strange behavior. However, this won't prevent me from developing more and more Rails applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-3433762005246352627?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/3433762005246352627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=3433762005246352627' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3433762005246352627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3433762005246352627'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/update-newly-added-column-in-migration.html' title='Update a newly added column in a migration'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5738912889663433453</id><published>2007-05-16T09:46:00.000-07:00</published><updated>2007-05-16T10:04:04.020-07:00</updated><title type='text'>MogileFS Storage engine!</title><content type='html'>&lt;p class="MsoNormal"&gt;I came across &lt;a href="http://danga.com/mogilefs/"&gt;this&lt;/a&gt; today, It seemed interesting.. MogileFS is intended for storage hungry applications, its all about spreading your files across cheap devices on different hosts, something like RAID+NFS+DataReplication.&lt;br /&gt;&lt;br /&gt;The Idea is very nice and simple, you have multiple servers, and every server has multiple devices, you sum up all these storage units into one big storage, you have a tracker application that you consult when reading or writing to this huge storage, and the tracker take responsibility of saving your data and making sure that your data is available even if multiple hosts went off line. &lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This application just came in time, we just had an idea of a project that takes images from your server and store it on a network storage, so if something wrong happens to your server you can simply take this image and restore it back to &lt;span style=""&gt; &lt;/span&gt;your server, or you can even restore this image on a different server to clone it, or something like that. The challenge was where to store all of these images. By doing a simple calculation, if you have 100 users and every user has a 10 G.B. image, then you are bound to maintain a tera of storage.. and scalability will be an issue.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;With MogileFS you will gain three advantages here, one, you will have cheap disks on cheap servers with your storage distributed on it. Two, you will gain from this distribution by installing the application on all of these servers, and so gaining high availability. Three, scaling will be as simple as adding a server to this farm. So with about half the price of a SAN and its expensive disks, you will get high availability for your storage and application. Ofcourse we will have to manage this distributed environment. One of the ways to tackle it is to create no slave architecture, all servers are masters, and every server can detect on which server the user’s image is stored by consulting the tracker. So when a user logs in, he will first go to any server according to Round and Robin algorithm, and from this server he will be redirected to the server storing his image, where he can get served, while eliminating the network communication overhead. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;This architecture can be implemented with any storage intensive application, or any application that used to rely on NFS, as NFS has proven to be unreliable in heavy production environments. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;I like this tool very much, and I can’t wait to test it on our application.. so I will keep you posted with any &lt;span style=""&gt; &lt;/span&gt;updates.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5738912889663433453?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5738912889663433453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5738912889663433453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5738912889663433453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5738912889663433453'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/mogilefs-storage-engine.html' title='MogileFS Storage engine!'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-8640589097592452809</id><published>2007-05-12T17:19:00.000-07:00</published><updated>2007-06-05T15:11:18.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web Antivirus</title><content type='html'>Web Services are increasingly becoming an essential part of your everyday life. How much time you spend surfing the internet pages?&lt;br /&gt;&lt;div style="text-align: justify;"&gt;To be more specific how much you feel now that Google is too much involved in your daily routine? Can you imagine your life without Google? your search, your Calendar, your email, your blog, ...etc&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Well, it seems that you will look for Google to be your web antivirus. Before you access a page, type the url in google search and pray that you won't get "&lt;i&gt;this site may harm your computer&lt;/i&gt;".&lt;br /&gt;&lt;/div&gt;you have just to obey, otherwise your PC will be affected.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;the story begins with researchers from the firm surveyed billions of sites, subjecting 4.5 million pages to "in-depth analysis". Actually they found 450,000 pages guilty.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It is sufficient only one visit from you to make the attacker able to detect and exploit a browser&lt;br /&gt;&lt;div style="text-align: justify;"&gt;vulnerability. Therefore, the goal of the attacker becomes identifying web applications with vulnerabilities that enable him to insert small pieces of HTML in web pages.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;An example for this is iframes, which can successfully install a malware binary "&lt;span style="font-style: italic;"&gt;drive-by-download&lt;/span&gt;".&lt;br /&gt;&lt;/div&gt;Are the web masters, or the site creators are responsible for this?&lt;br /&gt;The answer is, it is not always the case&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;br /&gt;User Contribution&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Many web sites feature web applications that allow visitors to contribute their own content. This is often in the form of blogs, profiles, comments, or reviews. they usually support only a limited subset of the hypertext markup language, but in some cases poor sanitization or checking allows users to post or insert arbitrary HTML into web pages.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Advertising&lt;/span&gt;&lt;br /&gt;Although web masters have no direct control over the ads themselves, they trust advertisers to show non-malicious content. Sometimes, advertisers rent out part of their advertising space; in this case the web master needs to trust the ads provided from a company that might be trusted by the first advertiser. And so on, you may find nested relations which considered as pitfall in the trust relation by making it a transitive one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Third-Party Widgets&lt;br /&gt;&lt;/span&gt;A third-party widget is an embedded link to an external JavaScript or iframe that a web master uses to provide additional functionality to users.  Example for this, Google Analytics :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Webserver Security&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The contents of a web site are only as secure as the set of applications used to deliver the content, including the actual HTTP server, scripting applications (e.g. PHP, ASP etc.) and database backends. If an attacker gains control of a server, he can modify its content to his benefit. For example, he can simply insert the exploit code into the web server’s templating system. As a result, all web pages on that server may start exhibiting malicious behavior. Although the team has observed a variety of web server compromises, the most common infection vector is via vulnerable scripting applications. They observed vulnerabilities in phpBB2 or InvisionBoard that enabled an adversary to gain direct access to the underlying operating system. That access can often be escalated to super-user privileges which in turn can be used to compromise any web server running on the compromised host. This type of exploitation is particularly damaging to large virtual hosting farms, turning them into malware distribution centers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exploitation Mechanisms&lt;br /&gt;&lt;/span&gt;A popular exploit they encountered takes advantage of a vulnerability in Microsoft’s Data Access Components that allows arbitrary code execution on a user’s computer.&lt;br /&gt;Typical steps taken to leverage vulnerability into remote code execution:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The exploit is delivered to a user’s browser via an iframe on a compromised web page.&lt;/li&gt;&lt;li&gt;The iframe contains Javascript to instantiate an ActiveX object that is not normally safe for scripting.&lt;/li&gt;&lt;li&gt;The Javascript makes an XMLHTTP request to retrieve an executable.&lt;/li&gt;&lt;li&gt;Adodb.stream is used to write the executable to disk.&lt;/li&gt;&lt;li&gt;A Shell.Application is used to launch the newly written executable.&lt;/li&gt;&lt;/ul&gt;Another popular exploit is due to a vulnerability in Microsoft’s&lt;span style="font-weight: bold;"&gt; WebViewFolderIcon&lt;/span&gt;. The exploit Javascript uses a technique called &lt;span style="font-style: italic;"&gt;"heap spraying&lt;/span&gt;" which creates a large number of Javascript string objects on the heap. Each Javascript string contains x86 machine code (shellcode) necessary to download and execute a binary on the exploited system. By spraying the heap, an adversary attempts to create a copy of the shellcode at a known location in memory and then redirects program execution to it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Detecting Dangerous Pages&lt;br /&gt;&lt;/span&gt;Simply, by monitoring the CPU and the processes executed on accessing the page. When some unknown processes are added to the list, this will be a strong sign that a drive-by download has happened.&lt;br /&gt;&lt;br /&gt;Google will be more and more involved into our life, it will report to you malicious sites for free....&lt;br /&gt;anyway, it is not a big deal, you can do it yourself for some levels. but there a little bit sophisticated cases when you need multilevel reverse engineering...&lt;br /&gt;&lt;br /&gt;Reference: &lt;a href="http://www.usenix.org/events/hotbots07/tech/full_papers/provos/provos.pdf"&gt;Google Research Paper&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://googleonlinesecurity.blogspot.com/"&gt;Google online security blog&lt;/a&gt;, the latest news and insights from Google on security and safety on the internet.&lt;/span&gt;&lt;br /&gt;Microsoft &lt;a href="http://www.informationweek.com/windows/showArticle.jhtml?articleID=199901414&amp;cid=RSSfeed_TechWeb"&gt;takes actions&lt;/a&gt; to defend vulnerabilities claim.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-8640589097592452809?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/8640589097592452809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=8640589097592452809' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8640589097592452809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8640589097592452809'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/web-antivirus.html' title='Web Antivirus'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-4773466251131067841</id><published>2007-05-09T15:02:00.000-07:00</published><updated>2007-05-09T15:04:18.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Upgrade your Experience with Google Analytics</title><content type='html'>&lt;p&gt;Few days ago &lt;a href="http://www.google.com/analytics/index.html"&gt;Google Analytics&lt;/a&gt; has released a new version. The new user UI enables easier use of the reports and metrics within the data sets,&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/rustybrick/488630843/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/211/488630843_ef1caf7388.jpg" alt="New Google Analytics Visitor Overview" height="449" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;NEW:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Email reports and improved clarity of graphs allow users to explore and discover new insights&lt;/li&gt;&lt;li&gt;Customizable dashboards ensure the right data gets to the right people at the right time&lt;/li&gt;&lt;li&gt;Plain language descriptions of the data allow users to take action to improve their web site&lt;/li&gt;&lt;/ul&gt;This is awesome :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-4773466251131067841?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/4773466251131067841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=4773466251131067841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4773466251131067841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4773466251131067841'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/upgrade-your-experience-with-google.html' title='Upgrade your Experience with Google Analytics'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/211/488630843_ef1caf7388_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-9145123044928057133</id><published>2007-05-06T14:29:00.000-07:00</published><updated>2007-05-21T10:26:24.105-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Where do you want to go today?</title><content type='html'>&lt;p class="MsoNormal"&gt;I have been conducting systems administration interviews for a while now, and I used to ask that one question in every interview, which is better “Linux” or “Windows”. I used to settle for a simple answer like “Depending on the environment”, this answer could get the guy into our payroll on the spot. This was in the old days when I was still young and foolish. In these old days, &lt;span style=""&gt; &lt;/span&gt;I used to forgive my Windows when it hangs like forever, trying to do something I don’t know about, or when my server bails out of me for no good reason or with no trace, but you know people do grow up.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;For a long period now I have been playing with operating systems, including Linux and Windows. After being a loyal follower to the Microsoft technologies, I had a paradigm shift. I saw the beauty of Linux, and I touched base with the meaning of operating system. And day after day I started to understand how Linux outperforms Windows, lets take for example, why does sometimes, Windows stop responding to your requests, and start playing busy. Your Hard disk lids start blinking, and no matter how much you click anywhere your computer never give you attention. In this article we will try to explain why this happens on Windows and rarely on Linux. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;Lets imagine your process getting into the OS and praying that it reaches the CPU before it starves. according to this &lt;a href="http://widefox.pbwiki.com/Kernel%20Comparison%20Linux%20vs%20Windows"&gt;article&lt;/a&gt;, In Windows, the Kernel scheduler has two queues, a foreground queue with Round and Robin algorithm and a background Queue with First in First out algorithm, and the scheduler uses many priority algorithms along with other algorithms to decide to get your poor process into which queue. The problem here that Windows scheduler works with a multilevel queue technique, meaning once you are in the queue you are stuck there until your time come to get into the CPU or starve to death.. its simple.. but a retarded one too. So, what happens when many background processes get into the background queue? These processes are not time sliced as the ones in the foreground queue, so once they get in, they will never get out until they finish.. and to make things even better the scheduler chooses between the two queues with a probability of 80% for the background queue to 20% for the foreground queues, so if odds are against you, which seems to be always this way with me, your process has to wait a long time until it get served, and so all what you get is the freezing screen and the busy Hard disk signal.&lt;/p&gt;      &lt;p class="MsoNormal"&gt;So what does Linux do, Linux scheduler is a bit smarter, it uses a technique called multilevel queue with feedback. Hmmmm.. Feedback gives the impression that the process is able to discuss its state with the scheduler, and not like windows accept its fate to be doomed in the never lands. Yes, Linux has more than two queues with different algorithms and priority, and processes can move from one queue to another according to its state, so if a process was stuck for a long time in a queue and didn’t get served, its priority increase and it get moved to another VIP queue where processes get served at once.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Some say all this complexity in the Linux scheduler will create an overhead and slow things down when you have a large number of processes. But Linux uses O(1) scheduling algorithms, so as Windows to give it credit, which means its not subject to the number of processes, and its smart, and it really respect your requests and doesn’t give you the sense that the computer is doing a much more important thing than your pathetic request.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;So where do you want to go today? I know where I am going.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-9145123044928057133?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/9145123044928057133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=9145123044928057133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/9145123044928057133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/9145123044928057133'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/where-do-you-want-to-go-today.html' title='Where do you want to go today?'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6653890542472087690</id><published>2007-05-05T14:35:00.000-07:00</published><updated>2007-05-05T14:53:29.131-07:00</updated><title type='text'>Comtinues... The code that changes the world!</title><content type='html'>H here was talking about the code that will change the world. I think that it's not the code itself that will change the world, not the way you write it, or the coding style. What really will change the world of computer is the tendency to write a certain type of code. For example, when the concept of garbage collection is invented, more and more are tending to leave their native frameworks and start investing time learning new Tech. like Java, C#, Ruby. Now if you ask a student from the first year CSE about the pointers, it is probably that he don't know about it at all. That also made the system programmers rare.&lt;br /&gt;&lt;br /&gt;Most of the native language users are Linux gurus, graphics developers, or system programmers. And that very few in Egypt and the Arab world in general. The problem in that is, we tend to follow the path of technology that they draw to us.&lt;br /&gt;&lt;br /&gt;For me, I am not a fan of Managed code, but i have to use it to do most of my job. But the true me is with native code, where there is no abstractions except the fact that your native code is finally translated into some system calls.&lt;br /&gt;&lt;br /&gt;Finally, If we tend to do something new that will make us drive part of the wheel of tech, we can practice with contributions to the managed world. But we need also to invent our own native tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6653890542472087690?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6653890542472087690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6653890542472087690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6653890542472087690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6653890542472087690'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/comtinues-code-that-changes-world.html' title='Comtinues... The code that changes the world!'/><author><name>blue</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_76NUR6_0hJU/SqT4jujwMcI/AAAAAAAAAMQ/cVQE7DQEmxA/S220/vague.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7290101984514525373</id><published>2007-05-03T05:21:00.000-07:00</published><updated>2007-05-03T07:49:11.349-07:00</updated><title type='text'>svn:ignore is disabled in Eclipse!</title><content type='html'>Currently I use &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;, with some plugins, for my &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; development. A cool feature of &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; is that you can have an ignore list to prevent files/folders from being checked when synchronizing with the repository. And Eclipse support that feature. The problem I had was that whenever I right-click on a file, I find the "Add to svn:ignore..." link disabled!&lt;br /&gt;&lt;br /&gt;After some Googles, I found that you cannot add files to svn:ignore once they have been checked in. So, if you create a new file/folder, that doesn't exist in the repository, in your local project, you would find the link enabled for that file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7290101984514525373?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7290101984514525373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7290101984514525373' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7290101984514525373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7290101984514525373'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/svnignore-is-disabled-in-eclipse.html' title='svn:ignore is disabled in Eclipse!'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6060854538542010985</id><published>2007-05-02T02:02:00.000-07:00</published><updated>2007-05-02T09:43:40.224-07:00</updated><title type='text'>Mysql Network Monitor Adviser</title><content type='html'>We had this installed on one of our DataBase servers early today, I had the feeling that this will be JAMT (Just Another Monitoring Tool) telling you CPU utilization, Memory Usage.. and maybe some extra readings on Cache hit ratio and running queries, what else could it be, nothing more then some queries that could be done by some Bash/Perl scripts and shown with a nice web AJAX interface, Nothing I can't do.. or so I thought.&lt;br /&gt;&lt;br /&gt;The installation went smoother than I expected, the idea that it installs Apache, mysql, tomcat and Java beside the instances already running on the server worried me a bit, i feared they might conflict with running production instances, but again I was wrong, the installer detected running services and installed itself somewhere else on different ports.. hmm smart.&lt;br /&gt;&lt;br /&gt;The installation was done by just running a bin file for the server and another for the agent, and  the setup walks you through an interactive installation.. till now i was not that impressed, it was just a clean installation script, something expected from MySQL.&lt;br /&gt;&lt;br /&gt;The server ran smoothly and so did the agent, and ofcourse they communicated without any problems or interference from myside, and then the show began.&lt;br /&gt;&lt;br /&gt;At the beginning it was everything i expected, some monitoring scripts shown on a flashy web interface, until i saw this icon, telling me i have a problem..&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/SAMERE%7E1.ESP/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_r3PSTr3K3fo/RjhY97ph-EI/AAAAAAAAAAM/gA-bMQPdCxQ/s1600-h/monitor.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 427px; height: 215px;" src="http://bp2.blogger.com/_r3PSTr3K3fo/RjhY97ph-EI/AAAAAAAAAAM/gA-bMQPdCxQ/s320/monitor.bmp" alt="" id="BLOGGER_PHOTO_ID_5059892002357901378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Table Scan and Query cache.. Interesting.&lt;br /&gt;Once i clicked on the  Query cache i got this message&lt;br /&gt;"Advice       &lt;div class="itemContents" id="historyInfoAdvice1"&gt;Evaluate whether the query cache is suitable for your application. If you have a high rate of INSERT / UPDATE / DELETE statements compared to SELECT statements, then there may be little benefit to enabling the query cache. Also check whether there is a high value of &lt;b&gt;Qcache_lowmem_prunes&lt;/b&gt;, and if so consider increasing the &lt;b&gt;query_cache_size&lt;/b&gt;."&lt;/div&gt;&lt;br /&gt;Its not JAMT, its an adviser, it detects poor performance and configuration, and walk you through steps to analyze and fix your problems.&lt;br /&gt;&lt;br /&gt;MySQL is impressing me day after day, i don't know if Oracle has such tool, but i know SqlServer doesn't!&lt;br /&gt;&lt;br /&gt;What i see is that MySQL puts the client in mind, this poor DBAdmin who just sits days after days trying to resolve performance issues, and strange application activities, and then MySQL uses technology to serve him well, and make his life easier. On the other hand other Players in this market sector target the business owners, and how they could impress them using eye catching slogans like "High performance", "High availability", "Load balancing".. MySQL knows better that it can't do this without its real clients, the DBadmins and the SYSAdmins, so it keeps things simple and works with them to make MySQL a better place for Data.&lt;br /&gt;&lt;br /&gt;I am really interested to know how MySQL is going to astonish me again next time, I am waiting for this, and i think it will be soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6060854538542010985?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6060854538542010985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6060854538542010985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6060854538542010985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6060854538542010985'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/05/mysql-network-monitor-advisor.html' title='Mysql Network Monitor Adviser'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_r3PSTr3K3fo/RjhY97ph-EI/AAAAAAAAAAM/gA-bMQPdCxQ/s72-c/monitor.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-2722543087624565480</id><published>2007-04-30T15:35:00.000-07:00</published><updated>2007-04-30T19:45:03.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP.'/><title type='text'>Communication over HTTP in FLEX 2.</title><content type='html'>So, it seems that things are not that easy with FLEX2.0 after all.&lt;br /&gt;We need to write a piece of code that sends some ( XML ?) message through an HTTP request to some servlet, get the HTTP response and extract the reply XML message from the response.&lt;br /&gt;&lt;br /&gt;First, create an instance of the &lt;a href="http://livedocs.adobe.com/flex/2/langref/flash/net/URLLoader.html"&gt;URLLoader&lt;/a&gt; class, The URLLoader class downloads data from a URL as text (default), binary data, or URL-encoded variables.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;var requestSender:URLLoader = new URLLoader();&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Second, add event handler for the &lt;a href="http://livedocs.adobe.com/flex/2/langref/flash/events/Event.html#COMPLETE"&gt;complete&lt;/a&gt; event of the loader class:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;requestSender.addEventListener(Event.COMPLETE, completeHandler);&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;We then have to create a &lt;a href="http://livedocs.adobe.com/flex/2/langref/flash/net/URLRequest.html"&gt;URLRequest&lt;/a&gt; instance, taking the URL of the servlet. The URLRequest class captures all of the information in a single HTTP request.&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;var urlRequest :URLRequest = new URLRequest("serverUrl");&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;Next, we create the message to be sent and put it in the "data" property of the URLRequest instance created above, set the value of the URLRequest.method property to URLRequestMethod.POST.&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;var msg:String = “valid XML msg” ;&lt;br /&gt;urlRequest.data = msg;&lt;br /&gt;urlRequest.set_method("POST");&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;After that, the request object is then passed to URLLoader.load(), which does the HTTP request and posts the message:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;requestSender.load(urlRequest);&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;When the URLLoader has finished loading the text file the Event.COMPLETE event fires, triggering the completeHandler() method.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;function completeHandler(event:Event)&lt;br /&gt;{&lt;br /&gt;       var response:URLLoader = URLLoader(event.target);&lt;br /&gt;       String responseData = this.response.data;&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Note that the reply XML message is obtained from the URLoader.data property on the instance obtained from the event.target.&lt;br /&gt;We now have that working piece of code:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;var requestSender:URLLoader = new URLLoader();&lt;br /&gt;var urlRequest :URLRequest = new URLRequest("serverUrl");&lt;br /&gt;var msg:String = “valid XML msg” ;&lt;br /&gt;&lt;br /&gt;requestSender.addEventListener(Event.COMPLETE, completeHandler);&lt;br /&gt;urlRequest.data = msg;&lt;br /&gt;urlRequest.set_method("POST");&lt;br /&gt;requestSender.load(urlRequest);&lt;br /&gt;&lt;br /&gt;function completeHandler(event:Event)&lt;br /&gt;{&lt;br /&gt;       var response:URLLoader = URLLoader(event.target);&lt;br /&gt;       String responseData = this.response.data;&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;As you might already have guessed, the responseData can be then used to construct an XMLDocument instance, where you can perform different XML parsing operations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-2722543087624565480?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/2722543087624565480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=2722543087624565480' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/2722543087624565480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/2722543087624565480'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/04/communication-over-http-in-flex-2-using.html' title='Communication over HTTP in FLEX 2.'/><author><name>luckyboy</name><uri>http://www.blogger.com/profile/04506119854819790516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-896234606532967825</id><published>2007-04-30T15:00:00.000-07:00</published><updated>2007-05-01T03:17:24.370-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='non-technical'/><title type='text'>Communication Barriers</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_e1QpmVrnUc0/RjcTkrazH-I/AAAAAAAAAB4/0F6o-1AtXOQ/s1600-h/Don-t-Listen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_e1QpmVrnUc0/RjcTkrazH-I/AAAAAAAAAB4/0F6o-1AtXOQ/s400/Don-t-Listen.jpg" alt="" id="BLOGGER_PHOTO_ID_5059534227225386978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I think that we are the most skillful people to achieve a team work. I thought that the majority of us have been working in teams since their first academic year, and for me, this was good reason to justify my theory.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ironically, I am totally convinced with my theory, while all other careers look to developers as freaks. Well, I show up hands to agree with this. My theory isn't precise...I should add "teams of developers". At least the freaks can understand each other :)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Team chit chat&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;It should be curious that our teams may still have problems in communication. I got some remarks from my partners, through the projects,  concerning my communication success with them.&lt;br /&gt;&lt;/div&gt;The big majority confirmed that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I have a problem in transferring my knowledge to them.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;I am "expression-less",  so that someone asked me to put a sign indicating my mood whether "I am sad" or "I am happy".&lt;/li&gt;&lt;/ol&gt;The 2nd point is little bit tough. The 1st point can be analyzed and managed.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;It was normal that I spend time thinking about how much people think that I have deficiencies in transferring my knowledge and my talk skills. At the beginning I was trying to evaluate myself and think how can I overcome my problems.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;hence, whenever someone asks me about anything, I make a flash back to the days when I was still learning that thing, memorize all the questions I got at that time, and then start my brief session.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I worked on this thinking that I am overcoming my problems with partners. But I was totally wrong.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;one day, I was making a brief introduction to my partner, he shouted "Fizo, I really don't get you, your explanation is really vague....Why don't you make a flash back to the days when you started to learn this thing and explain to me based on the question you got in your head?"&lt;br /&gt;&lt;/div&gt;"huh...?" That what I am doing all the time.&lt;br /&gt;&lt;br /&gt;Again, there should be something wrong...This time I thought about it in more abstract way.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Evaluation Barrier&lt;br /&gt;&lt;/span&gt;My partner's comment made me notice a small problem...&lt;br /&gt;&lt;div style="text-align: justify;"&gt;It's the "Tendency to Evaluate", this is a human nature, the first reaction of a statement is to evaluate it from "your" point of view. It's a tendency to judge, approve/disapprove person's statement. What was really happening is that my explanation was evaluated by my partner more than listening with understanding.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Listening with Understanding&lt;br /&gt;&lt;/span&gt;You should achieve real communication by avoiding evaluative tendency. This means seeing the attitude from the other person's point of view, touch his/her frame of reference about the subject.&lt;br /&gt;I see that I should answer question, in the contest I can do it. Some efforts should be done by the questioner to get and understand the whole picture. In practical life we are not open books, my head is not indexed like the book, I have no appendices pointing to keywords which the questioner look for.&lt;br /&gt;What will happen when you listen to my answer and analyze it to get your satisfactory answer? Does this sound absurdly simple??&lt;br /&gt;Actually "listening" is not widely used. There are a lot of reasons in my opinion to avoid the "listening" thing.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Most of us have a defensive attitude when it comes to opinions' discussions. We are afraid to get affected and changed by what we hear. Weird, isn't it?&lt;/li&gt;&lt;li&gt;Emotions, in some discussions emotions become strongest, so they forbid us from achieving the frame of reference of the others. (let's not focus on this right now, as we are more involved with technical discussions)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I don't think I am saying something new. What the entry includes is very obvious for all of us, "the importance of listening"...But the fact, is, the problem has endured because it is a basic truth about human interaction.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-896234606532967825?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/896234606532967825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=896234606532967825' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/896234606532967825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/896234606532967825'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/04/communication-barriers.html' title='Communication Barriers'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_e1QpmVrnUc0/RjcTkrazH-I/AAAAAAAAAB4/0F6o-1AtXOQ/s72-c/Don-t-Listen.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-3691816604271767703</id><published>2007-04-30T12:47:00.000-07:00</published><updated>2007-04-30T16:20:36.495-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='XML.'/><title type='text'>XML changes in FLEX 2.0</title><content type='html'>&lt;span style="font-family:times new roman;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:arial;"&gt;I was debugging in an ActionScript 2.0 code using Flex 2.0 SDK before the code was ported to use ActionScript 3.0 (FLEX 2.0). The code uses the wonderful combination of the sendAndLoad method and the onLoad property of the AS2.0 XML class to do communication with an HTTP servlet via XML messages which are sent and received in the HTML body of the requests and responses.&lt;br /&gt;This has been very straight forward:&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:times new roman;font-size:85%;color:#3333ff;"&gt;var login_str:String = "valid xml that contains user info";&lt;br /&gt;var my_xml:XML = new XML(login_str);&lt;br /&gt;var myLoginReply_xml:XML = new XML();&lt;br /&gt;myLoginReply_xml.onLoad = myOnLoad;&lt;br /&gt;my_xml.sendAndLoad("servletURL", myLoginReply_xml);&lt;br /&gt;function myOnLoad(success:Boolean) {&lt;br /&gt;//extract reply message from myLoginReply_xml object&lt;br /&gt;if (success)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:times new roman;font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color:#000000;"&gt;The code has been working under FLEX (AS2.0) SDK. However, when running it under FLEX2.0 SDK, I was shocked with the following exception ! : “onLoad property does not exist for object ..” After looking at the FLEX2.0 changes &lt;a href="http://livedocs.adobe.com/flex/2/langref/migration.html"&gt;here&lt;/a&gt; , it turned out that the XML class has been renamed to XMLDocument and moved under another package (flash.xml) to avoid conflict with the new top-level XML class that implements ECMAScript for XML (E4X).&lt;br /&gt;Not only the class has been moved and renamed, but also it was dramatically changed. For example the sendAndLoad method now does not exist!, and of course the onLoad property that used to set the event handler for the "load" event has been removed (since the new event model of FLEX2.0 now took place, and events could be only set via the addEventListener method).&lt;br /&gt;Now for me to retain the functionality of the above few lines of code, i have to use a combination of 3 classes: URLLoader, URLRequest and of course the new XMLDocument class (The details will be posted in a later post).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;The funny thing is that Adobe claims they made the XMLDocument class for backward compatibility with AS2.0 code, horray!&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color:#000000;"&gt;&lt;a href="http://livedocs.adobe.com/flex/2/langref/migration.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color:#000000;"&gt;&lt;a href="http://livedocs.adobe.com/flex/2/langref/migration.html"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-3691816604271767703?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/3691816604271767703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=3691816604271767703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3691816604271767703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3691816604271767703'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/04/xml-changes-in-flex-20.html' title='XML changes in FLEX 2.0'/><author><name>luckyboy</name><uri>http://www.blogger.com/profile/04506119854819790516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5811241137670866582</id><published>2007-04-01T15:10:00.000-07:00</published><updated>2007-04-01T16:33:36.808-07:00</updated><title type='text'>Me, Myself and MySQL Falcon</title><content type='html'>I have been getting more and more into MySQL for the last couple of months, and to tell you the truth i was really impressed, i can't say i am a database guru, but i had my experience with database engines before, and for my surprise.. MySQL does match up with the big players in this sector.&lt;br /&gt;&lt;br /&gt;I can still remember MySQL from the old days when it was used to be thought of as a light, fast database storage engine, that can only use with personal websites, but now MySQL has everything an enterprise DB engine would need.... and more.&lt;br /&gt;&lt;br /&gt;What got me really dazzled in this engine, is its layered architecture and pluggable storage engine architecture, this DB engine was designed in a way to separate the storage engine from the other system, so you can plug in any engine from a vast list, or even do your own !!&lt;br /&gt;&lt;br /&gt;One of the new players in MySQL's storage is FALCON , this one is to be said the Oracle innodb killer, or isn't it?&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Falcon (code name) is a transactional storage engine, based on &lt;a href="http://en.wikipedia.org/wiki/Netfrastructure" class="external text" title="http://en.wikipedia.org/wiki/Netfrastructure" rel="nofollow"&gt;Netfrastructure&lt;/a&gt; database engine, extended and integrated into MySQL. &lt;/p&gt;&lt;p&gt;The main goals of Falcon are to exploit large memory for more than just a bigger cache, to use threads and processors for data migration. Falcon has a larger row cache with age group scavenging. Falcon is multi-version in memory and single version on disk,            True Multi Version Concurrency Control (MVCC) enables records           and tables to be updated without the overhead associated with           row-level locking mechanisms. The MVCC implementation           virtually eliminates the need to lock tables or rows during           the update process, also  data and index caching provides quick access to data without           the requirement to load index data from disk. &lt;/p&gt;So it seems that it has everything to be the ace of all storages, no? think again, a benchmark was made to compare the performance of this new engine with old MyISAM and InnoDB &lt;a href="http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/"&gt;here&lt;/a&gt;, but regretfully benchmarks are not in the favor of Falcon.. InnoDB and MyISAM scored over Falcon in different queries.&lt;br /&gt;&lt;br /&gt;From what I read I can say that Multi version Concurrent Control system implemented in the new engine, made a draw back in some cases rather than boosting the performance, having multiple snapshots for every session, so achieving better  locking, but at the same time the need to access the data beside the key is needed, and as we know keys are used a lot for optimizing, this is beside the overhead coming from such mechanism.&lt;br /&gt;&lt;br /&gt;We can see also that it has a bug with queries that have LIMIT in it, the performance drops drastically when used.&lt;br /&gt;&lt;br /&gt;The question here lies, will Jim Starkey bring his house into order and make Falcon the number one storage engine as promised? In all ways we are the winners, as we have other alternatives , and as they say.. competition is the consumer's number one friend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5811241137670866582?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5811241137670866582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5811241137670866582' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5811241137670866582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5811241137670866582'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/04/me-myself-and-mysql-falcon.html' title='Me, Myself and MySQL Falcon'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7839081517083744463</id><published>2007-04-01T09:09:00.000-07:00</published><updated>2007-04-01T09:17:12.076-07:00</updated><title type='text'>eSpace.com.eg Revisited</title><content type='html'>&lt;strong&gt;We finally made it!&lt;/strong&gt;&lt;br /&gt;&lt;p&gt;I'm pleased to announce that eSpace's new web site is &lt;a href="http://www.espace.com.eg"&gt;online&lt;/a&gt;. We are on the test stage and your suggestions are welcome.&lt;/p&gt;&lt;br /&gt;Please give it a &lt;a href="http://www.espace.com.eg"&gt;try&lt;/a&gt; and I'm waiting for your feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7839081517083744463?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7839081517083744463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7839081517083744463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7839081517083744463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7839081517083744463'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/04/espacecomeg-revisited.html' title='eSpace.com.eg Revisited'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6451223902413368861</id><published>2007-03-31T15:23:00.000-07:00</published><updated>2007-03-31T15:33:57.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby_on_Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><title type='text'>RJS Templates for Rails</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Ruby_on_Rails"&gt;Ruby on Rails&lt;/a&gt; has excellent support for &lt;a href="http://en.wikipedia.org/wiki/Ajax"&gt;Ajax&lt;/a&gt; baked right into the &lt;a href="http://en.wikipedia.org/wiki/Framework"&gt;framework&lt;/a&gt;. Remote &lt;a href="http://en.wikipedia.org/wiki/Javascript"&gt;JavaScript&lt;/a&gt; (RJS) templates build upon the Ajax support offered by &lt;a href="http://en.wikipedia.org/wiki/Ruby_on_Rails"&gt;Rails&lt;/a&gt;,  allow to easily update multiple page  elements.&lt;br /&gt;This is a quick start to work with RJS.&lt;br /&gt;&lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;$ rails RJS_Example&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Create your controller:&lt;br /&gt;&lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;&lt;br /&gt;RJS_Example&gt; ruby script/generate controller Examples&lt;br /&gt;     exists  app/controllers/&lt;br /&gt;     exists  app/helpers/&lt;br /&gt;     create  app/views/examples&lt;br /&gt;     create  test/functional/&lt;br /&gt;     create  app/controllers/examples_controller.rb&lt;br /&gt;     create  test/functional/examples_controller_test.rb&lt;br /&gt;     create  app/helpers/examples_helper.rb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Let's modify the default controllers now:&lt;br /&gt;&lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;class ExamplesController &lt; ApplicationController &lt;br /&gt;def index &lt;br /&gt;end  &lt;br /&gt;def display    &lt;br /&gt;  @statement = params[:statement] &lt;br /&gt;end&lt;br /&gt;end &lt;/pre&gt;&lt;br /&gt;Now, we should go to create our views.&lt;br /&gt;Create in the $RJS_Example/app/views/examples create your index.rhtml&lt;br /&gt;In the header include this tag&lt;br /&gt;&lt;pre size="12px" color="black" style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204);"&gt;    &lt;%= javascript_include_tag :defaults %&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The :defaults helps to add all the Scriptaculous visual effects and controls.&lt;br /&gt;&lt;br /&gt;In the body, add this code.&lt;br /&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;    &lt;%= form_remote_tag :url =&gt; { :action =&gt; 'display' },&lt;br /&gt;:html =&gt; { :id =&gt; 'display-form' } %&gt;&lt;br /&gt;&lt;%= text_field_tag 'statement', nil, :size =&gt; 40 %&gt;&lt;br /&gt;&lt;%= submit_tag 'submit statement' %&gt;&lt;br /&gt;&lt;%= end_form_tag %&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We use the form_remote_tag() helper instead of the form_tag().&lt;br /&gt;:html option helps to reset the form after completion.&lt;br /&gt;:url option specifies the controller action that receives the form data.&lt;br /&gt;Finally the empty "div id=statement",The id provides a way  to reference the element from the RJS template.&lt;br /&gt;&lt;br /&gt;Create  partial template app/views/examples/_example.rhtml&lt;span style="font-size:0;"&gt;&lt;/span&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;%=h example %&gt;&lt;/pre&gt;&lt;br /&gt;Create the RJS template: app/views/examples/display.rjs&lt;br /&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;page.insert_html :bottom, 'statements', :partial =&gt; 'example'&lt;br /&gt;page.visual_effect :highlight, 'statements'&lt;br /&gt;page.form.reset 'display-form'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The page object is an instance of the Rails JavaScriptGenerator.&lt;br /&gt;the partial template app/views/examples/_example.rhtml is rendered, and the resulting content is inserted into the bottom of the statements div.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6451223902413368861?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6451223902413368861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6451223902413368861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6451223902413368861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6451223902413368861'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/rjs-templates-for-rails.html' title='RJS Templates for Rails'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5657555025025681282</id><published>2007-03-30T09:54:00.000-07:00</published><updated>2007-03-30T09:59:50.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='non-technical'/><category scheme='http://www.blogger.com/atom/ns#' term='skills'/><title type='text'>Leadership User Guide</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Leadership"&gt;Leadership&lt;/a&gt; has becoming more and more important due to the globalization and its effect on the effective workforce in market.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Who is a leader?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A leader is someone who makes things happen by:&lt;br /&gt;&lt;br /&gt;* Knowing the objectives and having a plan to achieve them.&lt;br /&gt;* Building a team committed to achieving the objectives.&lt;br /&gt;* Helping each member to give his best effort.&lt;br /&gt;&lt;br /&gt;A leader must demonstrate two active traits: expertise and empathy. Also he takes active roles in remaking the environment in productive ways.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is Leadership?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Leadership involves cooperation and collaboration activities that can occur only in a conductive context. It is the art of influencing a body of people to follow a certain course of action; the art of controlling them, directing them and getting the best out of them. A major part of leadership is man-management.&lt;br /&gt;Leadership is the capacity to translate vision into reality.&lt;br /&gt;&lt;br /&gt;There is a different between &lt;a href="http://en.wikipedia.org/wiki/Management"&gt;Management&lt;/a&gt; and Leadership.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Leadership Vs Management&lt;i&gt;&lt;u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/i&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;/p&gt;&lt;div align="center"&gt;  &lt;table class="MsoNormalTable" style="width: 374.25pt;" border="0" cellpadding="0" cellspacing="0" width="499"&gt;  &lt;tbody&gt;&lt;tr style="height: 20.75pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1.5pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 20.75pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Leadership &lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1.5pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 20.75pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Management&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 16.65pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 16.65pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;People&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 16.65pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Things&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 17.1pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 17.1pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Empower&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 17.1pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Control&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 16.95pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 16.95pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Effectiveness&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 16.95pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Efficiency&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 16.75pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 16.75pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Principles&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 16.75pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Techniques&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 17.25pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 17.25pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Purpose&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 17.25pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Method &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 16.35pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1pt 1.5pt; padding: 0in; width: 187.5pt; height: 16.35pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Doing the right things&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1pt 1pt; padding: 0in; width: 187.5pt; height: 16.35pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Do things right&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 17.55pt;"&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1pt 1.5pt 1.5pt; padding: 0in; width: 187.5pt; height: 17.55pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Is the ladder against the right   wall??&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid; border-color: black; border-width: 1pt 1.5pt 1.5pt 1pt; padding: 0in; width: 187.5pt; height: 17.55pt;" valign="top" width="250"&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Climbing the ladder fast.&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify; text-indent: 0.25in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div class="Section1"&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Leadership styles.&lt;/span&gt;&lt;i&gt;&lt;u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;  &lt;/div&gt;    &lt;p class="MsoNormal" style="text-align: justify; text-indent: 0.25in;"&gt;Creation of resonance can be done in six ways, leading to Six Leadership Styles. Typically, the most effective leaders can act according to and they can even skillfully switch between the various styles, depending on the situation&lt;span style="font-size:10;"&gt;.(According to &lt;a href="http://en.wikipedia.org/wiki/Daniel_Goleman"&gt;Daniel Goleman&lt;/a&gt;).&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="width: 100%;" border="1" cellpadding="0" width="100%"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 0.75pt; width: 81.8pt;" width="109"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=";font-size:85%;color:black;"  &gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;Visionary Leadership&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;(&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;span style="line-height: 125%;"&gt;Transformational Leadership&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;Coaching Style&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;Affiliative Leadership&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;(People-Oriented)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;Democratic Leadership&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;Pacesetting Leadership&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;(task oriented)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;Commanding Leadership&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;    &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt 0.65pt; width: 81.8pt;" width="109"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;How   style builds resonance&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;He moves people towards   shared dreams.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;Connects what a person wants;   with the organization's goals.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;Creates harmony by connecting   people to each other.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;Appreciates people's input   and gets commitment through participation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;Realizes challenging and   exciting goals.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;He decreases fear by giving   clear direction in an emergency.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt 0.65pt; width: 81.8pt;" width="109"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;The   impact of the style on the (business) climate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;+ + +&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;+ +&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;Often    ―  ―  when used too exclusively or poorly&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: 125%;" align="center"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;Often    ―  ―&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt 0.65pt; width: 81.8pt;" width="109"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="line-height: 125%;font-family:Arial;color:black;"  &gt;When   style is appropriate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;When changes require a new   vision. Or when a clear direction is needed. Radical change.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;To help competent, motivated   employees to improve performance by building long-term capabilities.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;To heal rifts in a team. &lt;/span&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   lang="NL" &gt;T&lt;/span&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;o motivate during stressful times. Or to    strengthen connections.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;To build support or   consensus. Or to get valuable input from employees.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:85%;color:black;"   &gt;To get high-quality results   from a motivated and competent team. Sales.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt 0.65pt;"&gt;   &lt;p class="MsoNormal" style="line-height: 125%;"&gt;&lt;span style="line-height: 125%;font-family:Arial;font-size:9;color:black;"   &gt;&lt;span style="font-size:85%;"&gt;In a grave crisis. Or with   problem employees. To start an urgent organizational turnaround. Traditional   military.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:10;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;u&gt;&lt;o:p&gt;&lt;span style="text-decoration: none;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(to be continued....)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5657555025025681282?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5657555025025681282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5657555025025681282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5657555025025681282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5657555025025681282'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/leadership-user-guide.html' title='Leadership User Guide'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6607363990410969948</id><published>2007-03-30T09:51:00.000-07:00</published><updated>2007-03-30T10:07:15.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby_on_Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Plugins'/><title type='text'>Globalize on Ruby-On-Rails</title><content type='html'>The &lt;a href="http://wiki.rubyonrails.org/rails/pages/Globalize+Plugin"&gt;Globalize&lt;/a&gt; is an internationalization and localization plugin for Rails application.    &lt;ul&gt;&lt;li&gt;Translates both db content and view text.&lt;/li&gt;&lt;li&gt;Supports automatic selection of an alternate, localized template for each view.&lt;/li&gt;&lt;li&gt;Built-in localization and translation of strftime, numbers, and currency formats.&lt;/li&gt;&lt;li&gt;Supports pluralization.&lt;/li&gt;&lt;li&gt;All based on three automatically migrated database tables.&lt;/li&gt;&lt;/ul&gt;It is the best solution to support multi-languages for your rails application.&lt;br /&gt;The &lt;a href="http://globalize.stikipad.com/globalize/"&gt;globalization wiki&lt;/a&gt; is not yet complete. But I think the "&lt;a href="http://globalize.stikipad.com/globalize/show/Getting+started#get-started"&gt;Get Started&lt;/a&gt;" part is fair enough to help you out making your globalized application, it provides very helpful external links.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.artweb-design.de/articles/2006/11/10/get-on-rails-with-globalize-comprehensive-writeup"&gt;Sven’s Globalize Writeup&lt;/a&gt; – has many times been refered to as “the best documentation available for Globalize” .&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.globalize-rails.org/globalize/show/Example+Application"&gt;Example Application&lt;/a&gt; – takes you step by step through the process of creating a Globalized example application.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.globalize-rails.org/globalize/show/Unit-tested+example"&gt;Unit-tested Example&lt;/a&gt; – a walkthrough using a test-driven approach by Josh Harvey.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6607363990410969948?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6607363990410969948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6607363990410969948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6607363990410969948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6607363990410969948'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/globalize-on-ruby-on-rails.html' title='Globalize on Ruby-On-Rails'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-4670662794167399956</id><published>2007-03-26T08:01:00.000-07:00</published><updated>2007-03-28T03:53:40.532-07:00</updated><title type='text'>New Versions of Ruby, Rails and Instant Rails</title><content type='html'>I'm happy that new versions of our cool development tools have been released. This includes Ruby, Rails and my favorite tool, Instant Rails.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ruby-lang.org/"&gt;Ruby 1.8.6&lt;/a&gt; is a steady and reasonable enhancement of the 1.8 series including many bug and security fixes, standard library updates, feature enhancements and performance improvements keeping high backward compatibility with the previous release (1.8.5).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rubyforge.org/frs/?group_id=307"&gt;Rails 1.2.3&lt;/a&gt; was released mainly to support Ruby 1.8.6.&lt;br /&gt;&lt;blockquote&gt;“&lt;span style="font-style: italic;"&gt;Besides the 1.8.6 compatibility, we’ve included few minor fixes. Nothing major. This should be a drop-in replacement for Rails 1.2.2.&lt;/span&gt;” David said.&lt;/blockquote&gt;What makes that even better is &lt;a href="http://instantrails.rubyforge.org/wiki/wiki.pl"&gt;Instant Rails 1.7&lt;/a&gt; that upgrades to the latest versions of Ruby, Rails and even &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin &lt;/a&gt;(version 2.10.0.2). Another cool feature of the new Instant Rails is  automatic &lt;a href="http://www.radrails.org/"&gt;RadRails&lt;/a&gt; configuration.&lt;br /&gt;&lt;br /&gt;Now, just download &lt;a href="http://rubyforge.org/frs/?group_id=904"&gt;Instant Rails 1.7&lt;/a&gt; and enjoy the latest Ruby with the latest Rails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-4670662794167399956?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/4670662794167399956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=4670662794167399956' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4670662794167399956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/4670662794167399956'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/new-versions-of-ruby-rails-and-instant.html' title='New Versions of Ruby, Rails and Instant Rails'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-8790657665013700700</id><published>2007-03-24T07:30:00.000-07:00</published><updated>2007-03-30T10:17:10.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caching'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Assumptions On The Way</title><content type='html'>&lt;div style="text-align: justify;"&gt;When I read &lt;a href="http://espaceblogs.blogspot.com/2007/03/to-cache-or-not-to-cache.html"&gt;this post&lt;/a&gt; of the idea when to cache...I thought, it's not just a &lt;a href="http://en.wikipedia.org/wiki/Caching"&gt;caching&lt;/a&gt; problem. the cache is just a component. Hence, I think that the valid question is "'What 'to do or not to do'?".&lt;br /&gt;&lt;/div&gt;I believe that the key to answer this question is the assumptions.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The caching is very relevant in distributed systems in general. It has many modes and many techniques.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;As mentioned in &lt;a href="http://espaceblogs.blogspot.com/2007/03/to-cache-or-not-to-cache.html"&gt;the post&lt;/a&gt;, I agree that a cache implementation cannot increase the mail server performance. It's obvious that the relation is 1:1 between the client and his mailbox. Thus, the data is just required by only one client.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;To let the wonder aside, and make a simple rule to follow on the implementation, each project should start by setting the "ASSUMPTIONS".&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So, let say that from the beginning I made an assumption that each client on my system is hyperactive. My clients don't cease pressing the refresh button on their browser. This will push the designer to find a way to decrease the time response to each client (by implementing a cache layer)which can be considered as a "Selfish caching".&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Another one would assume that the client are normal users, they access their mail smoothly without any problem. This system doesn't need a cache.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I will give a practical example for assumptions. When I read about &lt;a href="http://en.wikipedia.org/wiki/Google_File_System"&gt;GFS&lt;/a&gt; (Google File System) I felt something wrong, the problem was that I predicted some technical problems and I expected that GFS design is putting an assassination plan to it. But I figured out that I was completely wrong.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When i got back to the assumptions I found that the system is fair to provide a complete solution based on these assumptions. The moral is that the system's design and implementation are always relevant to the assumptions and not to a vague problem statement.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;To be more specific, most of distributed Systems researches are based on a very important assumption which is, concurrent reading is always more frequent than concurrent writing.&lt;br /&gt;&lt;/div&gt;(Once written, files are seldom modified again)&lt;br /&gt;&lt;br /&gt;The GFS Assumptions:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt; The system is built from many inexpensive commodity components that often fail. It must constantly monitor itself and detect, tolerate, and recover promptly from&lt;br /&gt;&lt;/div&gt;component failures on a routine basis.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;The system stores a modest number of large files. We expect a few million files, each typically 100 MB or larger in size. Multi-GB files are the common case and should be managed efficiently. Small files must be supported, but we need not optimize for them.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;The workloads primarily consist of two kinds of reads: large streaming reads and small random reads. In large streaming reads, individual operations typically read hundreds of KBs, more commonly 1 MB or more. Successive operations from the same client often read&lt;br /&gt;&lt;div style="text-align: justify;"&gt;through a contiguous region of a file. A small random read typically reads a few KBs at some arbitrary offset. Performance-conscious applications often batch and sort their small reads to advance steadily through the file rather than go back and forth.&lt;/div&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;The workloads also have many large, sequential writes that append data to files. Typical operation sizes are similar to those for reads. Once written, files are seldom modified again. Small writes at arbitrary positions in a file are supported but do not have to be efficient.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;The system must efficiently implement well-defined semantics for multiple clients that concurrently append to the same file. Our files are often used as producer-consumer queues or for many-way merging. Hundreds of producers, running one per machine, will concurrently append to a file. Atomicity with minimal synchronization overhead is essential. The file may be read later, or a consumer may be reading through the file simultaneously.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;High sustained bandwidth is more important than low latency. Most of our target applications place a premium on processing data in bulk at a high rate, while few have stringent response time requirements for an individual read or write.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-8790657665013700700?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/8790657665013700700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=8790657665013700700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8790657665013700700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/8790657665013700700'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/assumptions-on-way.html' title='Assumptions On The Way'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-1241332028716821173</id><published>2007-03-22T11:02:00.001-07:00</published><updated>2007-03-22T11:04:41.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='non-technical'/><category scheme='http://www.blogger.com/atom/ns#' term='reaction'/><title type='text'>From Consultance to Danger</title><content type='html'>From time to time, I try to remain connected to postgraduates classes. I find pleasure to meet people there and to refresh my head with academic tones.&lt;br /&gt;Among the classes, I prefer the "Advanced Web Programming" the most. Sometimes I contribute as an audit!!! It may look strange, specially that I am a new born in the web technologies world.&lt;br /&gt;The course is under supervision of two professors. One of them was going to chase me out, he thought that I represent a danger to the students. "Students knowing me well can rely on me as a friendly consultant and as a knowledge resource, they are going to be lazy" he thought so.&lt;br /&gt;On the contrary, the other Professor thinks that I am a good guy, giving help to my colleagues, through my business oriented experience.&lt;br /&gt;the third party is the students, they want me to come every Saturday to attend the lectures with them! some of them felt guilty while I was accused by the Professor.&lt;br /&gt;&lt;br /&gt;I really like to help as much as I can, I can't stop this. in the same time I don't like lazy people.&lt;br /&gt;I have a theory about this...The students I deal with are not lazy, all wt I do is providing them the help through our conversations. When I figure out that who I am dealing with is not doing his best I start to to minimize my contribution with him.&lt;br /&gt;I believe that we need to focus more on the keeping connection between different generations. Undergraduates should benefit from graduates experiences. Currently what happens is totally different; Only TAs are the ones involved with undergraduates.&lt;br /&gt;Maybe I am wrong, maybe I am right. but I am convinced in what I am doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-1241332028716821173?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/1241332028716821173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=1241332028716821173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1241332028716821173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1241332028716821173'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/from-consultance-to-danger.html' title='From Consultance to Danger'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-309562843151545401</id><published>2007-03-21T06:54:00.000-07:00</published><updated>2007-03-21T14:27:44.624-07:00</updated><title type='text'>To cache or not to cache</title><content type='html'>I was sitting with a couple of friends of mine, and we were discussing scalable system performance issues, we were specifically discussing  mail system performance issues, when all of a sudden, one of us said "it would be better to eliminate all system caching, then we will have better performance", Wow.. where did this come form?&lt;br /&gt;&lt;br /&gt;Eliminating cache to boost performance? we all know that there are several system caches and buffers that stores last fetched items so that whenever someone asks for them again, the system doesn't need to go there again to fetch them, its like an intermediate faster and smaller storage with most recent viewed blocks..&lt;br /&gt;&lt;br /&gt;Many algorithms, theories govern the best way to cache I/Os,  what to cache and how much to cache,  locality and other cache issues, and they all work for the well fair of decreasing the time to read data, so how come removing our friends here might enhance performance.&lt;br /&gt;In our case its a mail system, with about 3 million users, meaning 3 million mail boxes.. and the read/write activities specially the I/O activities are all on the mail boxes, in matter of fact what is cached here is the user's mail box.. so how often could two users ask for the same mailbox? so the cache is almost not usable, cause everytime a user asks for his mailbox, its fetched from the HD and cached, and then another one does the same, until the cache is full and we need to remove blocks(users mailboxes) to free space, and if we are talking about thousands of visits then the possibility that a user revisits his mailbox and finds it in the cache is very low, Those copies in turn imposes the CPU and memory cost of moving the data from cache to userspace destination buffer for reads, and the other way around for writes.&lt;br /&gt;&lt;br /&gt;At this moment i started to think of a more radical idea, why not tweak the H.D. cache too, I mean the hardware cache on the hard disk itself, or use cheapo Hard Disks with no internal caches, lets make it a cacheless system,  with direct access to data without any unnecessary overheads, no need to use an intermediate zone for any reason, its a cache free world!&lt;br /&gt;But then, what will be the impact of this? how could we use caching in such systems? what are the best practices, what if all of this is just wrong speculations, and that cache do make a difference even in such systems. I think we need to make some tests and benchmarks to validate what we are saying here. maybe i will work on this one day.&lt;br /&gt;&lt;br /&gt;Slayer&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-309562843151545401?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/309562843151545401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=309562843151545401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/309562843151545401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/309562843151545401'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/to-cache-or-not-to-cache.html' title='To cache or not to cache'/><author><name>Samer El Sahn</name><uri>http://www.blogger.com/profile/07314985878394159062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-360306184930530051</id><published>2007-03-19T15:48:00.000-07:00</published><updated>2007-03-19T16:00:12.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>Erlang Review</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_e1QpmVrnUc0/RfwNCboyjqI/AAAAAAAAABs/HnOfOIDTXW0/s1600-h/erlang.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_e1QpmVrnUc0/RfwNCboyjqI/AAAAAAAAABs/HnOfOIDTXW0/s400/erlang.png" alt="" id="BLOGGER_PHOTO_ID_5042920018177855138" border="0" /&gt;&lt;/a&gt;After I got a &lt;a href="http://fizous.blogspot.com/2007/03/quick-look-to-erlang.html"&gt;quick look to Erlang&lt;/a&gt;, I started to feel a little more curios to this language, and I decided to give it a portion of my readings.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The resources of this language are limited, it is very clear that it is still in the "Early Adopter" phase. I already believe that this language can realize a very good hype very soon. Furthermore, I see it has as many advantages as the &lt;a href="http://en.wikipedia.org/wiki/Ruby_programming_language"&gt;Ruby.&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I won't talk about the ordinary features which anybody can figure out by &lt;a href="http://www.informit.com/articles/article.asp?p=482670&amp;seqNum=1&amp;amp;rl=1"&gt;himself&lt;/a&gt;. What I see the most important point is "&lt;a href="http://en.wikipedia.org/wiki/Concurrent_programming"&gt;Concurrent Programming&lt;/a&gt;" in &lt;a href="http://en.wikipedia.org/wiki/Erlang_%28programming_language%29"&gt;Erlang&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;Now, I think of this blog entry as a checkpoint of my digging results in the Erlang World, and not an Erlang Quick Start. this is just an entry to point to the "Erlang Status".&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt; Erlang is a programming language designed for building highly parallel, distributed, fault-tolerant systems. It has been used commercially for many years to build massive fault-tolerant systems which run for years with minimal failures. Erlang combines ideas from the world of functional programming with techniques for building fault-tolerant systems to make a powerful language for building the massively parallel networked applications of the future.&lt;br /&gt;This means that your Erlang program should run X times faster on a X core processor than on a single core processor, without changing a single line in your code. I really appreciate this flexibility. You can use this feature in a very effective way in your application.&lt;br /&gt;I didn't test the Erlang by myself and test its performance, but actually I am very optimistic towards the results, given that the Erlang is heavily used on embedded systems. so, I expect that it has a good performance comparing with other technologies such as Java, Ruby..etc&lt;br /&gt;frankly speaking, I didn't test the Ruby on my PDA. But I expected that the performance won't be pleasant at all. so I decided to save my time for something else. About Java, yes well, I tested it and I am not ready to do it again.&lt;br /&gt;I wondered if anybody used Erlang in web applications!!! The good news I found is that there is a plan to produce a web platform for Erlang. well, there is already a web platform for Erlang but it is not open source and information about it is very limited because it was developed outside of &lt;a href="http://en.wikipedia.org/wiki/Ericsson"&gt;Ericsson.&lt;/a&gt;&lt;br /&gt;I think the &lt;a href="http://www.erlang-consulting.com/"&gt;Erlang consulting and Training Ltd&lt;/a&gt; has used an Erlang web platform. which I think a quite impressive start for the Erlang. When I think about Erlang Platform, I think of powerful concurrency handling of heavy loads (It is the Erlang nature, nothing to do with it), and I certainly remember the fault-tolerance embedded with Erlang (built-in ability to upgrade software during runtime without restarting or failure time) which is something missed in most of frameworks dominating the marketplace nowadays. &lt;span style="text-decoration: underline;"&gt;T&lt;/span&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=1159801&amp;jmp=references&amp;amp;amp;amp;amp;amp;coll=ACM&amp;dl=ACM&amp;amp;CFID=15151515&amp;amp;CFTOKEN=6184618"&gt;his paper&lt;/a&gt; talks in some more details about the status of the Erlang Platform.&lt;br /&gt;&lt;br /&gt;I hope you enjoy your Erlang programming.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-360306184930530051?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/360306184930530051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=360306184930530051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/360306184930530051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/360306184930530051'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/erlang-review.html' title='Erlang Review'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_e1QpmVrnUc0/RfwNCboyjqI/AAAAAAAAABs/HnOfOIDTXW0/s72-c/erlang.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-3437138249281775233</id><published>2007-03-17T09:53:00.001-07:00</published><updated>2007-03-17T09:54:16.596-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>Quick look to Erlang</title><content type='html'>I started to be interested to the &lt;a href="http://en.wikipedia.org/wiki/Erlang_programming_language"&gt;Erlang language&lt;/a&gt;. I read a little about it, and I think I may dedicate some time to it.&lt;br /&gt;There is a short movie giving a quick introduction about ERLANG features.&lt;br /&gt;Erlang has reached a high level of maturity in the telecoms market!!!!&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-5830318882717959520&amp;hl=en" flashvars=""&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-3437138249281775233?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/3437138249281775233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=3437138249281775233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3437138249281775233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3437138249281775233'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/quick-look-to-erlang.html' title='Quick look to Erlang'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-1012961777620106878</id><published>2007-03-16T01:30:00.000-07:00</published><updated>2007-03-16T01:41:48.963-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>Corporate Blogging</title><content type='html'>It's not about the way you spend your leisure time. Blogging or as we can call it here "&lt;a href="http://en.wikipedia.org/wiki/Corporate_blog"&gt;Corporate Bloggings&lt;/a&gt;" is one of the technologies that have great potential impact on the marketplace.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The corporate-blogging is the use of online journals by employees to further company goals.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;It started with nontechnology entries, but the lack of interest was a big factor of disappointments.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2005 was the peak of hype for corporate blogging. Currently it is sliding into the trough replaced by the (&lt;a href="http://en.wikipedia.org/wiki/Social_network"&gt;Social Network Analysis&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Folksonomy"&gt;Folksonomies&lt;/a&gt;, &lt;a href="http://www.cs.unc.edu/%7Edorianm/academics/comp290mc/speech_recog.html"&gt;Speech Recognition for Mobile Devices&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29"&gt;RSS Enterprise&lt;/a&gt;...)&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The corporate-blog can be considered as a tool for projecting the marketing messages in a medium that has large reach and low cost. Furthermore, it creates a good opportunity to make some kind of dialogues with the market(collect feedback from the market).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Expectations are tricky in the blogging world. Although no initial efforts nor technical skills are needed for blogging, it is not easy to effectively achieve it because it requires long-term commitment and consistency.&lt;br /&gt;Behind the scenes, you can expect the intelligent competition, and recruiting processes ;)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-1012961777620106878?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/1012961777620106878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=1012961777620106878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1012961777620106878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1012961777620106878'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/corporate-blogging.html' title='Corporate Blogging'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6562767739041463645</id><published>2007-03-13T21:58:00.000-07:00</published><updated>2007-03-13T23:24:25.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web Usability</title><content type='html'>Usability is not exclusive to the web. It refers to the relationship between tools and their users, so it is applicable to practically any field. Usability is usually defined as the measure of the ease with which particular people can employ a particular tool.&lt;br /&gt;&lt;br /&gt;Within the web development process, usability is the set of techniques used during the design of the web site in order to improve the ease of use to everybody, including those with disabilities. Web usability is based on two main principles:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Visitors only see what they need: Internet  users don’t read in detail, they skim the web trying to find what  they are really interested in. If they can’t find what they are  looking for, they will leave your site.&lt;/li&gt;&lt;li&gt;Visitors are impatient: They want to access  the relevant information as soon as possible. If they can’t find  what they are looking for quickly, they will leave your  site. &lt;/li&gt;&lt;/ul&gt; &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Accessibility vs Usability&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Web accessibility and usability both improve satisfaction, effectiveness, and efficiency of users. But while accessibility is aimed at making the web site open to a wider user population, usability is aimed at making the target population of the web site happier, more efficient, more effective.&lt;br /&gt;Accessibility covers technical issues; usability is experiential. It is about the user’s experience when accessing a web site. Usability is very much like quality: you typically notice it only when it is missing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Usability Factors&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Web usability is about making your web site in such a way that your site users can find what they're looking for quickly and efficiently. A usable web site can reap huge benefits on to your website and your business:&lt;br /&gt;&lt;blockquote&gt;"&lt;span style="font-style: italic;"&gt;A web usability redesign can increase the sales/conversion rate by 100%&lt;/span&gt;" (source: &lt;a href="http://www.useit.com/alertbox/20030107.html"&gt;Jakob Nielson2&lt;/a&gt;)&lt;/blockquote&gt; Web usability is not just about making sure everything on the site works, but also how quickly and easily visitors are able to make use of the site. Web usability covers download time, page layout, graphics, animation, navigation, information architecture, search, etc... it can only be measured by the end user’s experience and satisfaction. Here are some examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The  web site should be easy to find by search engines.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The  web site should be quick to download.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The user should easily find the  information he/she is looking for.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The services offered should be  easy to access and understand.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The  web page layout and design should be consistent throughout the site.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The site should has a logical  structure and efficient navigation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Explanations should be provided on  how the site is organized.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The user should be able to  interact with the site and provide feedback.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The site should offer some search  features.   &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6562767739041463645?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6562767739041463645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6562767739041463645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6562767739041463645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6562767739041463645'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/web-usability.html' title='Web Usability'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5095569017392135590</id><published>2007-03-01T03:07:00.002-08:00</published><updated>2007-03-01T04:30:53.455-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='non-technical'/><title type='text'>Dependencies hurts..</title><content type='html'>I had an experience recently that I like to share with you..&lt;br /&gt;&lt;br /&gt;It started a week ago, the last days of my honeymoon vacation, when i decided to check my email.. i found an email from my mother saying that she has a problem in her college..&lt;br /&gt;&lt;br /&gt;my mother - motivated by me - has joined a PhD program.. she's a doctor.. currently making her PhD at the Institute of Public Health. She and my father are staying in KSA currently where she teaches in a girls college.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Her problem was that the PhD exam will take place on 24th of June 2007 in Alexandria. Her vacation at her workplace in KSA starts 27th of June 2007. she needed a paper that states the exam date to pass it to the people there so she can take her vacation earlier.. so we needed someone to go get that paper and send it.. i used to handle this kind of tasks.&lt;br /&gt;&lt;br /&gt;it was supposed to be a 30-60 minutes thing, two hours max including the journey. so i thought of checking it right away, i have the car it would be easier for me to do. my brother would have done it. but he was at his work that day.. it was thursday.&lt;br /&gt;&lt;br /&gt;i went, didn't find a lot of people due to the funeral of a professor there. the employee at Student Affairs told me there is no one to sign or seal it.. i can pass by on sunday, write a request, and get my paper directly.. i said OK and delegated it to my brother.&lt;br /&gt;&lt;br /&gt;Sunday, my brother called, said he made the request and we can take the paper the next day morning. so i told it is ok, i can pass by early before work and take it.&lt;br /&gt;&lt;br /&gt;Monday, it rained heavily.. all streets was jammed... the journey overhead would have been a disaster so i decided to postpone it..&lt;br /&gt;&lt;br /&gt;Tuesday, i went there to find the paper ready. except that it did not specify the date of the exam explicitly.. i adjusted it in the request.. and it passed the person responsible on typing it on the computer again.. as an early person can expect, the person was there, the PC was off, and "el Dada betnaddaf"... i like that clean place!!!&lt;br /&gt;i knew it had to be signed from the dean after that, sealed and so... so i told the employee that i'll go to my work.. and pass by later in the day to take it.. i was smart enough to take his mobile number so i can check that it was done before i make the journey again. time is valuable as u know!!&lt;br /&gt;&lt;br /&gt;Tuesday Afternoon, i called the guy around 1pm. His phone what out of service. i decided to take my chances and go since i know they finish at 2 pm. His mobile was off till i reached there. the request was still in the computer personnel queue.. she was overwhelmed to add a "Date" to the paper..!!! i asked the guy there to push her.. and get done with all the singing and so.. and decided to take first thing next day..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wednesday, i called the guy early morning before i go... it was typed but not signed yet.. the dean doesn't come at 9 am of course so i went directly to work.... in the middle of the day i tried calling but his mobile was off again... i miss the old land line!!!&lt;br /&gt;he answered at 1:40 pm saying that it was done.. he took off... he won't be there tomorrow.. and that he left it with a colleague there.. and saying that i can go take it now... I have learned the lesson, i knew that i won't find the colleague by the time i reach there... interrupting work is a high overhead..&lt;br /&gt;&lt;br /&gt;Thursday, i went before work... Luckily the colleague had arrived.. but she was not on her desk.. she appeared after 10 minutes... she gave my the paper, and asked me to have it sealed from the office next floor, then copied, the to bring her a copy... sealing went fine.. at the copying stage, as usual, the copying machine was not working, the guy there was trying with it.. adjusting the paper carrier, restarting it... another 10-15 minutes... then it was done..&lt;br /&gt;&lt;br /&gt;the task consumed the time of about one and half working day (because i had experience and some communication)..  was done after a week...&lt;br /&gt;it is really amazing how a 2 hours estimated task can actually consume.&lt;br /&gt;&lt;br /&gt;i had a lot of free time to think while I'm working on this... Analogies... i tried putting my self in their lazy shoes..&lt;br /&gt;what if Larry was in my place and got affected and delayed because i chosed to work first on a bug that is less critical than a bug he really needs..&lt;br /&gt;why do tasks tend to take so longer than they deserve?!!!&lt;br /&gt;in my case... people involved didn't take it seriously enough.. they lack management.. they lack communication....&lt;br /&gt;&lt;br /&gt;applying the same analogies... Outch!!!&lt;br /&gt;&lt;br /&gt;the Morale of this story:&lt;br /&gt;   - Do not apply for PhD&lt;br /&gt;   - Do not motivate people to apply for PhD&lt;br /&gt;&lt;br /&gt;regards,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5095569017392135590?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5095569017392135590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5095569017392135590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5095569017392135590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5095569017392135590'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/03/dependencies-hurts_01.html' title='Dependencies hurts..'/><author><name>mahmoud</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_ntOcR9BKdOg/TP6t53s418I/AAAAAAAAAI8/7MEqFrItL9M/S220/mod3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-3101998239392939969</id><published>2007-02-26T13:52:00.000-08:00</published><updated>2007-02-26T14:02:42.956-08:00</updated><title type='text'>Code that changes the world</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;font-family:times new roman;font-size:180%;"  &gt;T&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:times new roman;"&gt;oday we talk about the code each developer of us would dream of writing, it is the code that changes the whole world. Yes, we are to write code that affects the whole world around us, making the world no longer the same. Just before getting into the details, can you just give it some time of pure thinking, Zen or do whatever you do to concentrate and give it your best shot...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;To be continued.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-3101998239392939969?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/3101998239392939969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=3101998239392939969' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3101998239392939969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/3101998239392939969'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/code-that-changes-world.html' title='Code that changes the world'/><author><name>Simply, H</name><uri>http://www.blogger.com/profile/08584942038540948192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-416359961560727895</id><published>2007-02-26T01:05:00.000-08:00</published><updated>2007-02-26T03:56:58.242-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='WCAG'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>WCAG</title><content type='html'>Web Content Accessibility Guidelines (WCAG) are part of a series of Web accessibility guidelines published by the &lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt;'s Web Accessibility Initiative (&lt;a href="http://www.w3.org/WAI/"&gt;WAI&lt;/a&gt;). They consist of a set of guidelines on making content accessible, primarily for disabled users, but also for all user agents, including highly limited devices, such as mobile phones. &lt;br /&gt;&lt;br /&gt;Web "content" generally refers to the information in a Web page or Web application, including text, images, forms, sounds, and such. More specific definitions are available in the WCAG documents.&lt;br /&gt;&lt;br /&gt;WCAG technical documents are developed by the Web Content Accessibility Guidelines Working Group (WCAG WG), which is part of the World Wide Web Consortium (W3C) Web Accessibility Initiative (WAI). Other accessibility guidelines include the Authoring Tool Accessibility Guidelines (ATAG) and the User Agent Accessibility Guidelines (UAAG).&lt;br /&gt;&lt;br /&gt;The WCAG are intended for all Web content developers (page authors and site designers) and for developers of authoring tools. Following them will make Web content more available to all users, whatever user agent they are using (desktop browser, voice browser, mobile phone, etc.) or constraints they may be operating under (noisy surroundings, hands-free environment, etc.). These guidelines do not discourage content developers from using images, video, etc., but rather explain how to make multimedia content more accessible to a wide audience.&lt;br /&gt;&lt;br /&gt;There are currently two versions of the WCAG. WCAG 1, contains 14 main guidelines with a total of 65 in all. WCAG 2, has reorganized and combined many of the WCAG 1 guidelines to create 21 new ones.&lt;br /&gt;&lt;br /&gt;Each guideline has a one or more ‘checkpoints’ which developers should consider to ensure the accessibility of a Web page. Each checkpoint has a priority level based on its impact on Web accessibility. The WCAG provides a number of examples and techniques to help Web developers to implement the guidelines.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;WCAG Priority Levels&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each checkpoint has a priority level assigned by the Working Group based on the checkpoint's impact on accessibility:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[Priority 1]&lt;/span&gt;&lt;br /&gt;A Web content developer &lt;span style="font-weight: bold;"&gt;must &lt;/span&gt;satisfy this  checkpoint. Otherwise, one or more groups will find it impossible to  access information in the document. Satisfying this checkpoint is a  basic requirement for some groups to be able to use Web documents.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[Priority 2]     &lt;/span&gt;&lt;br /&gt;A Web content developer &lt;span style="font-weight: bold;"&gt;should &lt;/span&gt;satisfy this  checkpoint. Otherwise, one or more groups will find it difficult to  access information in the document. Satisfying this checkpoint will  remove significant barriers to accessing Web documents.    &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[Priority 3]     &lt;/span&gt;&lt;br /&gt;A Web content developer &lt;span style="font-weight: bold;"&gt;may &lt;/span&gt;address this  checkpoint. Otherwise, one or more groups will find it somewhat  difficult to access information in the document. Satisfying this  checkpoint will improve access to Web documents.   &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;WCAG Conformance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The WCAG guidelines have three levels of conformance:&lt;br /&gt;&lt;br /&gt;Conformance Level "&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;": all Priority 1 checkpoints are satisfied. This is known as '&lt;span style="font-weight: bold;"&gt;WCAG A&lt;/span&gt;'  compliant.    &lt;br /&gt;&lt;br /&gt;Conformance Level "&lt;span style="font-weight: bold;"&gt;Double-A&lt;/span&gt;":  all Priority 1 and 2 checkpoints are satisfied. This is known as  '&lt;span style="font-weight: bold;"&gt;WCAG AA&lt;/span&gt;' compliant.    &lt;br /&gt;&lt;br /&gt;Conformance Level "&lt;span style="font-weight: bold;"&gt;Triple-A&lt;/span&gt;": all Priority 1, 2,  and 3 checkpoints are satisfied. This is known as '&lt;span style="font-weight: bold;"&gt;WCAG AAA&lt;/span&gt;'  compliant.   &lt;br /&gt;&lt;br /&gt;Note that conformance levels are even spelled out in text so they may be understood when rendered to speech.&lt;br /&gt;&lt;br /&gt;In the following posts, insha Allah, we will go through the main guidelines of different versions of the WCAG.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-416359961560727895?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/416359961560727895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=416359961560727895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/416359961560727895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/416359961560727895'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/wcag.html' title='WCAG'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5678489375300112195</id><published>2007-02-25T11:41:00.000-08:00</published><updated>2007-02-25T13:33:58.098-08:00</updated><title type='text'>Acts_as_Statable</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have been introduced to rails for about 30 days ago. I really don't spend much time on developing my coding skills. I almost know nothing about the ruby syntax, I took the shortest way and dig into my tasks.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Many people think that the best way is "do it yourself"; don't spend much time on reading tutorials, couple of days are enough and then release your skills to go further. me too, I believe in this. But I think also, that you have a good view to know when to stop digging.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It's true that i did good progress in my programming tasks, but i still find that this is not enough. I believe it's time to make some readings to enlarge my dictionary.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Hunting the best opportunity to do so is the most important part. It's not a silly H.W you do to raise your salary. It's the willingness of tasting some craft.&lt;br /&gt;We were working on a small forum, when it comes to define a forum/thread to be closed, blocked, forbidden..bla, bla...whatever anybody calls these restricted access issues.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Yeah, it's simple. A tiny flag in some few minutes will solve the whole story...."NOW Let's move to another real task".&lt;br /&gt;&lt;/div&gt;I started to think for something different. Why we don't just add some craft to this part; although it doesn't deserve all that panic.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;My proposed solution to go for using a &lt;a href="http://wiki.rubyonrails.org/rails/pages/Plugins"&gt;rails plugin&lt;/a&gt;. I know I may look silly, but Just I felt that I need to make more interaction with plugin.&lt;br /&gt;I made a quick lookup for the &lt;a href="http://agilewebdevelopment.com/plugins"&gt;available plugins&lt;/a&gt;, it was difficult at the beginning as I was looking for something without knowing what it can be called. Finally, I found the &lt;a href="http://wiki.rubyonrails.com/rails/pages/Acts+As+Enumerated+Plugin"&gt;acts_as_enumerated&lt;/a&gt; plugin, it should be the one. I succesfully installed it, at the end it didn't work with me ( I may be missing something) but i decided not to give aq second try for now. I thought it doesn't satisfy my design. Instead i started to think of something which should like this:&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_e1QpmVrnUc0/ReHUzMjGB5I/AAAAAAAAABY/4NZ6MZP8PYg/s1600-h/act_as_statable.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_e1QpmVrnUc0/ReHUzMjGB5I/AAAAAAAAABY/4NZ6MZP8PYg/s400/act_as_statable.jpg" alt="" id="BLOGGER_PHOTO_ID_5035539834383763346" border="0" /&gt;&lt;/a&gt;Did I make something wrong here? It seems no sense to make a relation of many-to-many. Why could any forum have more than one state!!!&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Well, I made this on purpose. What if we want in the future to expand our feature to be supported on the user-level. I mean, we may want to support (for example) "block option" for a forum on the user-level. In this case the forum will have more than one state depending on the user. We will need to add to the staging-table a new column carrying the user_id. Let's keep it simple for now, this is my first plugin, I don't want to get stuck.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Steps to create a plugin:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Note: the following steps are provided as guidance to create plugins.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    1. In your project directory run the following command.&lt;br /&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;br /&gt;$ruby script/generate plugin acts_as_statable&lt;br /&gt;create  vendor/plugins/acts_as_statable/lib&lt;br /&gt;create  vendor/plugins/acts_as_statable/tasks&lt;br /&gt;create  vendor/plugins/acts_as_statable/test&lt;br /&gt;create  vendor/plugins/acts_as_statable/README&lt;br /&gt;create  vendor/plugins/acts_as_statable/Rakefile&lt;br /&gt;create  vendor/plugins/acts_as_statable/init.rb&lt;br /&gt;create  vendor/plugins/acts_as_statable/install.rb&lt;br /&gt;create  vendor/plugins/acts_as_statable/uninstall.rb&lt;br /&gt;create  vendor/plugins/acts_as_statable/lib/acts_as_statable.rb&lt;br /&gt;create  vendor/plugins/acts_as_statable/tasks/acts_as_statable_tasks.rake&lt;br /&gt;create  vendor/plugins/acts_as_statable/test/acts_as_statable_test.rb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. Edit "vendor/plugins/acts_as_statable/init.rb"&lt;vendor plugins="" acts_as_statable="" rb=""&gt; to look like this&lt;br /&gt;&lt;/vendor&gt;&lt;/div&gt;    &lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;br /&gt; require 'acts_as_statable'&lt;br /&gt; ActiveRecord::Base.send(:include,  ActiveRecord::Acts::Statable)&lt;br /&gt; require File.dirname(__FILE__) +  '/lib/stating'&lt;br /&gt; require File.dirname(__FILE__) + '/lib/state'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. your real work will be in this file "vendor/plugins/acts_as_statable/lib/acts_as_statable.rb"&lt;vendor plugins="" ar_default_options="" lib="" rb=""&gt;&lt;br /&gt;you will need to define your methods just right here&lt;br /&gt;&lt;/vendor&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;br /&gt;module ActiveRecord&lt;br /&gt;module Acts&lt;br /&gt; module statable&lt;br /&gt;     ..........&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. create the new classes stating and state&lt;br /&gt;"vendor/plugins/acts_as_statable/lib/stating.rb"&lt;br /&gt;"vendor/plugins/acts_as_statable/lib/state.rb"&lt;br /&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;br /&gt;class Stating &lt; ActiveRecord::Base&lt;br /&gt; belongs_to :state&lt;br /&gt; belongs_to :statable, polymorphic =&gt;true&lt;br /&gt;    ............&lt;br /&gt;    ............&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class State &lt; ActiveRecord::Base&lt;br /&gt; has_many : statings&lt;br /&gt; .......&lt;br /&gt;end  &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5678489375300112195?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5678489375300112195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5678489375300112195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5678489375300112195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5678489375300112195'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/actsasstatable.html' title='Acts_as_Statable'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_e1QpmVrnUc0/ReHUzMjGB5I/AAAAAAAAABY/4NZ6MZP8PYg/s72-c/act_as_statable.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7076254109344932151</id><published>2007-02-21T11:25:00.000-08:00</published><updated>2007-02-21T13:01:16.266-08:00</updated><title type='text'>Two hours with Oracle</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_e1QpmVrnUc0/Rdyrs5gan-I/AAAAAAAAABM/_3v5Yk3Loko/s1600-h/gridAchitecture.bmp"&gt;I attended the &lt;/a&gt;&lt;a href="http://www.oracle.com/index.html"&gt;Oracle&lt;/a&gt; technology day. "&lt;span style="font-style: italic;"&gt;Join Us for an Oracle Technology Day Highlighting        &lt;/span&gt; &lt;span style="font-style: italic;"&gt;Successful Implementations of Grid Computing&lt;/span&gt;".&lt;br /&gt;The title seems very interesting; and the most interesting is that it was in Hilton green plaza, Alex. I decided to go and attend, it is a good chance, I thought so.&lt;br /&gt;&lt;br /&gt;The seminar didn't introduce something new, it was based on the &lt;a href="http://www.oracle.com/technology/software/products/database/oracle10g/index.html"&gt;Oracle10g&lt;/a&gt;. Oh yes, "g" stands for "Grid". It didn't meet my expectations at all.&lt;br /&gt;I couldn't stand for more than two sessions. the seminar was behind schedule by more than 45 minutes at the moment I left!!&lt;br /&gt;&lt;br /&gt;The first session included an example with &lt;a href="http://www.oracle.com/customers/snapshots/amazon-oracle-berkeley-db-casestudy.pdf"&gt;Amazo&lt;/a&gt;n, it was the best part of the seminar probably. The problem facing Amazon is that they have machines:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Order entries: it easy to expect that these machines got the peak load in December.&lt;/li&gt;&lt;li&gt;Financial: dedicated for reporting and statistics. these machines will face the peak load in January to extract the reports needed to put the plan for the next year...etc&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_e1QpmVrnUc0/Rdyrs5gan-I/AAAAAAAAABM/_3v5Yk3Loko/s1600-h/gridAchitecture.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_e1QpmVrnUc0/Rdyrs5gan-I/AAAAAAAAABM/_3v5Yk3Loko/s400/gridAchitecture.bmp" alt="" id="BLOGGER_PHOTO_ID_5034087271332749282" border="0" /&gt;&lt;/a&gt;Enterprise grid computing model for IT&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Anyway, although oracle10g is the most scalable database, it is still lacking when it comes to time and usability concerns.&lt;br /&gt;Number of steps and time in oracle10g is almost 2x or more than &lt;a href="http://en.wikipedia.org/wiki/IBM_DB2"&gt;DB2&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Microsoft_SQL_Server"&gt;SqlServer&lt;/a&gt;.&lt;br /&gt;There are a lot of improvement comparing to 8i, for example Enterprise Manager can be accessed through Browser and PDA clients.&lt;br /&gt;&lt;br /&gt;I will appreciate if they enhance the usability before releasing the next release. I can't think of getting Oracle and wasting  more than double my time, and hiring a DBA with a big salary .&lt;br /&gt;For now, Oracle is forbidden for me.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:85%;"  &gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7076254109344932151?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7076254109344932151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7076254109344932151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7076254109344932151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7076254109344932151'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/two-hours-with-oracle.html' title='Two hours with Oracle'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_e1QpmVrnUc0/Rdyrs5gan-I/AAAAAAAAABM/_3v5Yk3Loko/s72-c/gridAchitecture.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-5717568509576054532</id><published>2007-02-20T05:06:00.000-08:00</published><updated>2007-02-26T03:55:19.121-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web Accessibility</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WkhXQa3SNDY/Rdr258iiR4I/AAAAAAAAAAk/WYPfKrgGt-I/s1600-h/accessibility.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_WkhXQa3SNDY/Rdr258iiR4I/AAAAAAAAAAk/WYPfKrgGt-I/s320/accessibility.jpg" alt="" id="BLOGGER_PHOTO_ID_5033607008903907202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Reference to my last post, &lt;a href="http://espaceblogs.blogspot.com/2007/02/web-standards-movement.html"&gt;Web Standards Movement&lt;/a&gt;, Web Accessibility is a very important issue behind the Web standards: not only does it mean allowing the Web to be fully used by people with disabilities, it also means allowing people with unconventional browsers to have access to any web page.&lt;br /&gt;&lt;br /&gt;The DDA (Disability Discrimination Act) states that service providers must not discriminate against disabled people. A web site is regarded as a service and therefore falls under this law, and as such must be made accessible to everyone.&lt;br /&gt;&lt;br /&gt;Accessibility  involves two key issues: first, how users with disabilities access  electronic information, and second, how web content designers and  developers enable web pages to function with assistive devices used  by individuals with disabilities.&lt;br /&gt;&lt;br /&gt;For the user with a disability, the challenge is to identify tools that provide the most convenient access to web-based and other electronic information. For the web content designer/developer, the challenge is to remove the obstacles that prevent accessibility tools from functioning effectively. In many cases, these challenges are relatively simple to overcome, but sometimes the solutions require some additional thought and effort.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Yes.. Accessibility Has Standards&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Accessibility standards help designers and developers of web content identify and address accessibility issues.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.w3.org/TR/WAI-WEBCONTENT/"&gt;Web Content Accessibility Guidelines&lt;/a&gt; (WCAG) from the W3C represented the first major effort to establish guidelines for accessible design. This standard consists of 14 guidelines, each with three checkpoint levels for web developers to meet: Priority One, Priority Two, and Priority Three.&lt;br /&gt;&lt;br /&gt;In individual countries, national standards emerged later. &lt;a href="http://www.section508.gov/"&gt;Section 508&lt;/a&gt; of the Federal Rehabilitation Act in the United States is based on WCAG Priority One checkpoints. These same checkpoints serve as the basis for standards in Australia, France, Germany, and many other countries. The Common Look and Feel standard in Canada and Guidelines for U.K. Government Web Sites in the United Kingdom are based on Priorities One and Two of the WCAG.&lt;br /&gt;&lt;br /&gt;The World Wide Web Consortium (W3C)'s &lt;a href="http://www.w3.org/WAI/"&gt;Web Accessibility Initiative&lt;/a&gt; (WAI) is an effort to improve the accessibility of the World Wide Web (WWW or Web) for people using a wide range of user agent devices, not just standard web browsers. This is especially important for people with physical disabilities which require such devices to access the Web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-5717568509576054532?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/5717568509576054532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=5717568509576054532' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5717568509576054532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/5717568509576054532'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/web-accessibility.html' title='Web Accessibility'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_WkhXQa3SNDY/Rdr258iiR4I/AAAAAAAAAAk/WYPfKrgGt-I/s72-c/accessibility.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-6088786805619834095</id><published>2007-02-19T21:00:00.000-08:00</published><updated>2007-02-19T10:53:40.176-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web Standards Movement</title><content type='html'>Back in early '96, the Web was no more than a long list of text documents linked together by "a" tags, displaying an occasional image from time to time. In those days, there wasn't much of a need for standardization as we mean it today.&lt;br /&gt;&lt;br /&gt;Nowadays, in this period of tremendous growth, the Web needs a guidance to realize its full potential. Web standards are this guidance. These standards help ensure that everyone has access to the information we are providing, and also make web development faster and more enjoyable.&lt;br /&gt;&lt;br /&gt;Web standards are technologies, established by the World Wide Web Consortium (W3C) and other standards bodies, that are used to create and interpret Web-based content. These technologies are designed to future-proof documents published on the Web and to make those documents accessible to as many as possible.&lt;br /&gt;&lt;br /&gt;Currently, most of the standards have been officially implemented by the W3C. One standard, however, originated at another organization, called ECMA.&lt;br /&gt;&lt;br /&gt;The European Computer Manufacturers Association (ECMA) is an organization officially founded in 1961 in order to meet the need for standardizing computer operational formats, including programming languages and input/output codes. In 1994, the organization’s name was changed to the ECMA - European Association for Standardizing Information and Communication Systems, in order to reflect its broader range of activities.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;W3C  Standards&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hyper Text Markup Language (HTML) is widely used on the Web for adding structure to text documents. Browsers interpret these documents, representing the structure in media-specific ways to the user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Extensible Markup Language (XML) is a markup language like HTML, but instead of having a single, fixed set of elements, it allows you to define your own - or use a set made by someone else.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XHTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;XHTML is a reformulation of HTML as an XML application. XHTML 1.0 can be seen as ideologically coming from HTML 4.01, and being technically stricter because of XML’s influence.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cascading Style Sheets (CSS) is a mechanism for changing the appearance of HTML or XML elements, by assigning styles to element types, self-defined classes of elements or individual instances.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DOM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Document Object Model (DOM) allows the full power and interactivity of a scripting language, such as JavaScript, to be exerted on a web page. In programming terms, the DOM is an Application Programming Interface (API) for interacting with web pages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;ECMA Standards&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ECMAScript&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ECMAScript is a standardized object-based scripting language, based largely on Netscape’s JavaScript.   The main use of ECMAScript is to manipulate the objects in web pages which are specified by the DOM. This lets web developers implement such effects as animated text, graphic roll-overs, and pages that change based on user input without having to be reloaded.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Why should you care?&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The structural information present in compliant documents makes it easy for search engines to access and evaluate the information in those documents, and they get indexed more accurately.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Standards are  written so that old browsers will still understand the basic  structure of your documents. Even if they can’t understand the  newest and coolest additions to the standards, they’ll be able &lt;span&gt;&lt;span&gt;to  display the content of your site.     &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Compliant  documents can easily be converted to other formats, such as  databases or Word documents. This allows for more versatile use of  the information within documents on the World Wide Web, and  simplified migration to new systems - hardware as well as software -  including devices such as TVs and PDAs.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Accessibility  to a wide audience is guaranteed. Web pages are accessible by people  using browsers other than the usual ones - including voice browsers,  Braille browsers, hand-held browsers, teletext displays, and other  unusual output devices.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Web standards  offer a set of rules that every Web developer can follow,  understand, and become familiar with. When one developer designs a  site to the standards, another will be able to pick up where the  former left off.    &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span&gt;As  you see, using web standards will let you build websites in a way  that saves time and money for the developer and provides a better  experience for the visitor. More information is available at the &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://www.w3.org/" target="blank"&gt;W3C&lt;/a&gt; and the &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://www.webstandards.org/" target="blank"&gt;Web Standards Project&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-6088786805619834095?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/6088786805619834095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=6088786805619834095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6088786805619834095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/6088786805619834095'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/web-standards-movement.html' title='Web Standards Movement'/><author><name>Hatem Mahmoud</name><uri>http://www.blogger.com/profile/16852317264499407161</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_WkhXQa3SNDY/Sh08b-JHzzI/AAAAAAAAAC0/MW5V-j9wvlI/s1600-R/avatar.php%3Fsize%3D120%26gravatar_id%3D6eb82d8e8fac3ecdf101180f5dc743e4'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7993457486709373930</id><published>2007-02-19T09:01:00.000-08:00</published><updated>2007-02-19T09:02:43.772-08:00</updated><title type='text'>Acts_as_Taggable Tag Cloud</title><content type='html'>I am using the &lt;a href="http://wiki.rubyonrails.org/rails/pages/Acts+As+Taggable+Plugin"&gt;Acts_AS_Taggable&lt;/a&gt;&lt;a href="http://wiki.rubyonrails.org/rails/pages/Acts+As+Taggable+Plugin"&gt; plugin&lt;/a&gt; in one of my applications. the application is a forum where users can add tags to any thread.&lt;br /&gt;The forum includes a set of forums which in turn include a set of threads.&lt;br /&gt;When a user displays the forum/show.. he should see a tag cloud involving all the tags attached to the threads in this forum.&lt;br /&gt;I found &lt;a href="http://www.juixe.com/techknow/index.php/2006/07/15/acts-as-taggable-tag-cloud/"&gt;this link&lt;/a&gt; describing the code for the tag cloud; but it doesn't satisfy my need as it can be used only on the threads level.&lt;br /&gt;I should confess that the performance was not my concern this time.&lt;br /&gt;in the vendor/plugins/acts_as_taggable/lib/tag.rb file I added this code:&lt;br /&gt;&lt;pre style="border: 1px dotted black; padding: 6px; background-color: rgb(255, 255, 204); font-size: 12px; color: black;"&gt;&lt;br /&gt;def self.tags(options = {})&lt;br /&gt;  query = " select tags.id, tags.name, t1.count"&lt;br /&gt;  query &lt;&lt; " from tags INNER JOIN"        &lt;br /&gt;  query &lt;&lt; " (select tag_id , count(*) as count FROM taggings, posts  "         &lt;br /&gt;  query &lt;&lt; " where"         &lt;br /&gt;  query &lt;&lt; " posts.forum_id=#{options[:forum]} and "if options[:forum] != nil  &lt;br /&gt;  query &lt;&lt; " taggings.taggable_type='Post' and taggings.taggable_id=posts.id" &lt;br /&gt;  query &lt;&lt; " group by tag_id)AS t1 ON t1.tag_id=tags.id"         &lt;br /&gt;  query &lt;&lt; " order by #{options[:order]}" if options[:order] != nil         &lt;br /&gt;  query &lt;&lt; " limit #{options[:limit]}" if options[:limit] != nil         &lt;br /&gt;  tags = Tag.find_by_sql(query)    &lt;br /&gt;end  &lt;/pre&gt;&lt;br /&gt;Following &lt;a href="http://www.juixe.com/techknow/index.php/2006/07/15/acts-as-taggable-tag-cloud/"&gt;the link&lt;/a&gt;, everything should be working well now.&lt;br /&gt;&lt;br /&gt;OOPS...Don't forget to restart the server!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7993457486709373930?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7993457486709373930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7993457486709373930' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7993457486709373930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7993457486709373930'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/actsastaggable-tag-cloud.html' title='Acts_as_Taggable Tag Cloud'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-7888236846220080040</id><published>2007-02-14T11:55:00.000-08:00</published><updated>2007-02-14T11:56:40.659-08:00</updated><title type='text'>Web Roots</title><content type='html'>Reading About &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; applications....It is not something new introduced recently. It's not an innovation, it's an old trend, old standard , it's not &lt;a href="http://en.wikipedia.org/wiki/Web_2"&gt;Web2.0&lt;/a&gt;.&lt;br /&gt;I found &lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html?page=1"&gt;this article&lt;/a&gt; very good. It seems that there are some characteristics which did not get the deserved attention. What is really great, is that Web2.0 represents a return to the essential principles that guided the Web.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Open Source:&lt;/span&gt; Yahoo was built on the foundation of open-source operating system(&lt;a href="http://en.wikipedia.org/wiki/Berkeley_Software_Distribution"&gt;BSD Unix&lt;/a&gt;) and open-source language(&lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;Perl&lt;/a&gt;). The core of the Web was (&lt;a href="http://archive.ncsa.uiuc.edu/mosaic.html"&gt;NCSA&lt;/a&gt;&lt;a href="http://archive.ncsa.uiuc.edu/mosaic.html"&gt; Mosaic&lt;/a&gt; browser, NCSA and CERN HTTP Servers)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Collaboration:&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee"&gt;Tim Berner&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee"&gt;s Lee&lt;/a&gt; inventor of the &lt;a href="http://en.wikipedia.org/wiki/World_Wide_Web"&gt;World Wide Web&lt;/a&gt; and the leader of &lt;a href="http://dig.csail.mit.edu/"&gt;DIG&lt;/a&gt;  put an original design for the Web to  enable researchers to  collaborate.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Simplicity:  &lt;/span&gt;we can find a lot of web2.0 products very elegant, simple, and focusing on only one single point; "make a single focus and do it well". This isn't an innovation. the &lt;a href="http://en.wikipedia.org/wiki/Rocketmail"&gt;RocketMail&lt;/a&gt; was one of the first major free webmail services, and it was focusing just on "e-mail".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Architecture of participation:&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/Epinions"&gt;Epinion.com&lt;/a&gt; is a review site that was established in 1999. we can see now the success story of &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; and &lt;a href="http://www.ebay.com/" title="1999"&gt;eBay&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Lightweight programming model&lt;/span&gt;: many of the Web1.0 generation were built using scripting languages (example: &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;Perl&lt;/a&gt; used in yahoo). Large companies used widely the complex web services stack and forgot the &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; which was originated in 2000. (Amazon provides the web services in both forms &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt; and REST)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Social Software: &lt;/span&gt;in 1994 &lt;a href="http://en.wikipedia.org/wiki/Match.com"&gt;Match.com&lt;/a&gt; was started. The "social software" was called "&lt;a href="http://en.wikipedia.org/wiki/Viral_marketing"&gt;viral market&lt;/a&gt;".&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-7888236846220080040?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/7888236846220080040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=7888236846220080040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7888236846220080040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/7888236846220080040'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/web-roots.html' title='Web Roots'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-9022310994577701161</id><published>2007-02-10T01:12:00.000-08:00</published><updated>2007-02-14T12:08:55.490-08:00</updated><title type='text'>Catching the "A"-Team</title><content type='html'>&lt;p class="MsoNormal" style="direction: ltr; unicode-bidi: embed; text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;    "&lt;span style="font-style: italic;"&gt;I am a geek, I am friendly, I am a designer, I am strict, I am a business guy..Woow, I should be in the company's "A"-team!!&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;div style="text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal" style="direction: ltr; unicode-bidi: embed; text-align: justify;"&gt;If you really think that a company can have different classes of teams, then you are totally wrong. We can prove this by contradiction :)&lt;br /&gt;Let's assume that a client calls for your service; a team will be assigned to provide the client for his needs. If he is lucky, he will get the "A"-team and get what he really expected; otherwise, of course he will be unlucky. When you claim that your company possesses a "A"-team, the later unlucky client will smash your head "Where the hell was that team when my project was under construction?".&lt;br /&gt;On average, your company has not an "A"-team, customers will certainly turnover.&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style="direction: ltr; unicode-bidi: embed; text-align: justify;"&gt;So, we agree that the dilemma is not individual; it's a team work by the end.&lt;/p&gt;&lt;p class="MsoNormal" style="direction: ltr; unicode-bidi: embed; text-align: justify;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="direction: ltr; unicode-bidi: embed; text-align: justify;"&gt;Now, you can start to ask yourself about your chances to catch the world's "A"-team.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;6 Great Factors to catch it&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;span style=""&gt;&lt;span style="font-size:130%;"&gt;    1-Possessing Positive Attraction:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; direction: ltr; unicode-bidi: embed;"&gt;    We are all influenced by the "&lt;span style="font-style: italic;"&gt;Law of Attraction&lt;/span&gt;". Everyone has his own impact on his environment. You should increase your positive impact. Are you trying to deal positively with events which you observe around you? Or you just complain your bad luck and the lack of resources?&lt;span style=""&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/b&gt; You should also have the ability to reject negative thoughts from people surrounding you and substitute it by your own positive ones. Know that what anyone or any source offers you; it is only one view, one description or interpretation of an event or truth. It is only one perspective of an interpretation gained from other third parties who in turn focuses on the topic and did not experience the subject first hand.&lt;b&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=""&gt; Positive attraction will help you more for the team spirit, you will think for the best of the team on the long run. your colleagues will be inspired by your attraction. You will be a good &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;team player &lt;/span&gt;&lt;span&gt;who has a positive effect on his environment&lt;/span&gt;&lt;span style=""&gt;.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/The_Secret_%28film%29"&gt;the Secret&lt;/a&gt; is a very good movie indicating the effect of positive attitude on your life.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;    &lt;/span&gt;&lt;/b&gt;&lt;span style="font-weight: bold;font-family:Verdana;font-size:130%;"  &gt;&lt;span style="font-family:verdana;"&gt;2-Building Trusts&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;                          &lt;p class="MsoNormal" style="text-align: justify; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b  style="font-family:verdana;"&gt;&lt;span style=""&gt;Why trust is important?&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=";font-family:Frutiger-Roman;color:red;"  &gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);"&gt;    " If you don't have trust, people won’t cooperate, won’t be&lt;o:p&gt;&lt;/o:p&gt; committed, and won’t know where they stand.”&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(35, 31, 32);"&gt;&lt;br /&gt;In &lt;i&gt;The 7 Habits of Highly Effective People, &lt;/i&gt;Stephen Covey talks about&lt;o:p&gt;&lt;/o:p&gt; an “emotional bank account”which is the reserves of trust that&lt;o:p&gt;&lt;/o:p&gt; we build up in our relationships with people. T&lt;/span&gt;&lt;span style="color: rgb(35, 31, 32);"&gt;he bank account becomes full&lt;/span&gt;&lt;span style="color: rgb(35, 31, 32);"&gt; when there is a lot&lt;o:p&gt;&lt;/o:p&gt; of trust between people. You feel safe,&lt;o:p&gt;&lt;/o:p&gt; committed, and comfortable with the other person.&lt;o:p&gt;&lt;/o:p&gt; Trust is what makes us feel understood. It’s what makes work groups&lt;o:p&gt;&lt;/o:p&gt; get along. It’s what makes us believe in people, organizations, and&lt;o:p&gt;&lt;/o:p&gt; causes. Trust is the thing that makes us commit and stay committed,&lt;o:p&gt;&lt;/o:p&gt; despite problems and misunderstandings.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;Gaining trust:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Before searching for trust you must trust yourself.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Be reliable and available. Try always to be available when the client wants to talk directly to the people working on his project whenever he wants. Don't let him feel that he has to send 100 emails and 100 phone calls to make you appear online.&lt;/li&gt;&lt;li&gt;Keep your promises and follow through with commitments&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Forgive and move on&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Don't be threatened by people who are different from you&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Tell the truth&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Communicate openly and honestly&lt;/li&gt;&lt;/ul&gt;      &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;Be aware that Trust is bidirectional relation. You should evaluate how much trusting you are in order to make a successful trust construction.&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size:100%;"&gt;Check plenty of resources about building trusts &lt;a href="http://www.amazon.com/s/ref=nb_ss_gw/002-7697218-4066402?url=search-alias%3Daps&amp;field-keywords=building+trust&amp;amp;amp;Go.x=0&amp;Go.y=0&amp;amp;Go=Go"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=";font-family:Verdana;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;3-Self Motivated.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;Why anybody needs self-motivation?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt; Because if you want to improve your self esteem or improve yourself in any way at all you first need the inner desire and will to do it.&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; Of course, anybody may be motivated by external factors, others may encourage you to start something new or begin moving in a positive direction.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;But you cannot always rely on others to encourage you&lt;span style=""&gt;.&lt;/span&gt; To take up a new activity, hobby or challenge. The self-motivation is the way to "&lt;span style="font-style: italic;"&gt;Initiative&lt;/span&gt;", without motivation you can't take any initiative on any level.&lt;a href="http://www.more-selfesteem.com/books1.htm"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Increase your self-motivation&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Focus on what you      really enjoy doing.      Think about giving it priority to start doing what you love doing.&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Always keep a list of things you'd like to improve on and how you're going to do it.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt; from time to time, try to totally forget all the negatives you have faced and review all the success in your life.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Contact positive people.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Give your soul a break to read some good books.(&lt;a href="http://en.wikipedia.org/wiki/Neuro-linguistic_programming"&gt;NLP&lt;/a&gt;, How To increase your energy, Getting things done, Motivated Mind,&lt;/span&gt;&lt;/span&gt;  How   to Raise your Self Esteem&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt; Self   Help Stuff that Works..etc)&lt;/li&gt;&lt;/ul&gt; You can find recommended books &lt;a href="http://www.more-selfesteem.com/books1.htm"&gt;here&lt;/a&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;4-Knowing About Business.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;span style=""&gt;Client-side:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Keep in mind the budgetary and time constraints that the client faces. This will help you define the customer goals and priorities in concrete terms. Further, it will help you to deliver a robust business solution through usable deliveries.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; direction: ltr; unicode-bidi: embed;"&gt;&lt;b&gt;&lt;span style=""&gt;Tools-prespective:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Constitute a cross-industry perspective of the technologies you can consider in developing. You should keep some kind of aim at the different technology trends. Your attention should be varying significantly across industries. This can be done based on continuous data entries for the "&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;benefit Vs mainstream-adoption&lt;/span&gt;" (can be called "&lt;a href="http://www.mindtools.com/pages/article/newHTE_95.htm"&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;Priority Matrix&lt;/span&gt;&lt;/a&gt;") for each technology such as&lt;a href="http://en.wikipedia.org/wiki/Web_2"&gt; Web 2.0&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;Ajax&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Grid_computing"&gt;Grid Computing&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/RFID"&gt;RFID&lt;/a&gt;, &lt;a href="http://computer.howstuffworks.com/dna-computer1.htm"&gt;DNA Logic&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Social_network"&gt;Social Network Analysis&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Wiki"&gt;wikis&lt;/a&gt;..etc&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;The end result should be awareness (or at least prediction) of the following regarding each technology:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=""&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Prevalence:&lt;/span&gt; &lt;/span&gt;How prevalent is it in the current crop ventures.&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Essential:&lt;/span&gt; does this characteristic stem from expediency or is it a core part of competitive advantage, Newness, Longevity.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Newness:&lt;/span&gt; Is this characteristic really new, or just rediscovered or relabeled.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Longevity:&lt;/span&gt; Will this last during the next five years.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;div style="text-align: justify;"&gt;A characteristic can be:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;User:&lt;/span&gt; content, metadata, usability,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Open:&lt;/span&gt; open SRC product, public API, open process, open source platform,&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Lightweight:&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;Ajax&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Scripting_language"&gt;Scripting Languages&lt;/a&gt;,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;decentralized:&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29"&gt;RSS&lt;/a&gt;/Content, Code, Development,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Still Missing:&lt;/span&gt; Security, Transactions, Durability, Global Audience, Mobile.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style=""&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;5-Listening&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;span&gt;&lt;span&gt;    You start a project by learning and listening. The result will be a clear plan that ensures results for you and a great experience for your customers.&lt;br /&gt;Listen is another aspect to the "trust", it is an important key on the building trust journey.&lt;br /&gt;You should know how much you like to involve others and seek their opinions when working on a project.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;When you are talking with someone face to face, don’t answer the  phone, check e-mail, or sort the papers on your desk.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Make time to talk one on one with your spouse or partner.&lt;/li&gt;&lt;li&gt;Be a patient listener. Not everyone thinks or speaks as fast as you do.&lt;/li&gt;&lt;li&gt;Avoid putting words in people's mouths.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;6-Flexibility&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt; Referring to the &lt;a href="http://en.wikipedia.org/wiki/IEEE"&gt;IEEE&lt;/a&gt;, flexibility is the ease with which a system or component can be modified for use in applications or environments other than those for which it was specifically designed. Yess that's right, imagine that you are the system or the component. So, we mainly mean your flexibility to switch between different methodologies and dealing with new concepts and technologies.&lt;br /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;"&lt;span style="font-style: italic;"&gt;There is nothing permanent except change&lt;/span&gt;"; said &lt;a href="http://en.wikipedia.org/wiki/Heraclitus"&gt;Heraclitus&lt;/a&gt;. That has been true throughout the history, but it is especially true in our exciting and ever-changing field. You should value the "&lt;span style="font-style: italic;"&gt;Responding to change&lt;/span&gt;" and may be "&lt;span style="font-style: italic;"&gt;search for it&lt;/span&gt;".&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(255, 0, 0);"&gt;After&lt;/span&gt; evaluating yourself, do the &lt;a href="http://en.wikipedia.org/wiki/Neuro-linguistic_programming"&gt;NLP&lt;/a&gt; H.W to change behaviors.&lt;br /&gt;&lt;br /&gt;First step is to stand outside the 'creative state' and think of a time when you were acting creatively according to your own standards. You should refresh everything you saw, heard and felt while reliving that experience.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_e1QpmVrnUc0/RczDxpgan8I/AAAAAAAAAA8/hdHblD8izGc/s1600-h/Changing+Behaviour.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_e1QpmVrnUc0/RczDxpgan8I/AAAAAAAAAA8/hdHblD8izGc/s400/Changing+Behaviour.png" alt="" id="BLOGGER_PHOTO_ID_5029610141588824002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After you have created 'creative' states follow these steps:&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;ol&gt;&lt;li&gt; Stand in the state that represents 'behavior' and think of a behavior that you would like to change. Make sure that you already have a representation of the behavior in one of the three senses.&lt;/li&gt;&lt;li&gt;Move to the 'intent' state, and then ask the question, 'What is the intent, of the behavior?'. Once you get a sense of the intent for the behavior move into the 'creative state'.&lt;/li&gt;&lt;li&gt;Ask yourself 'how else can I fulfill the intent for the behavior?'. When you get plenty of alternatives behaviors you can go back to the state for 'intent'.&lt;/li&gt;&lt;li&gt;Review the alternatives and select the best three options. Step back into the state for 'behavior'.&lt;/li&gt;&lt;li&gt;Test out each of the three options one at a time by imagining using each new behaviour in the original situation. Check if there are any objections to any of the selected options. If so, step back into the state for 'intent' and repeat the entire process, until all objections are satisfied.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-9022310994577701161?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/9022310994577701161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=9022310994577701161' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/9022310994577701161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/9022310994577701161'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/catching-a-team.html' title='Catching the &quot;A&quot;-Team'/><author><name>A.Abd-ElHaffiez Hussein</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='http://1.bp.blogspot.com/_e1QpmVrnUc0/SRPwl4hQjRI/AAAAAAAAAIE/U9RsCW0yQhs/S220/55337899_1006cfc0d7.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_e1QpmVrnUc0/RczDxpgan8I/AAAAAAAAAA8/hdHblD8izGc/s72-c/Changing+Behaviour.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2858328690300381570.post-1663043023087838681</id><published>2007-02-05T14:30:00.000-08:00</published><updated>2007-02-05T15:13:49.276-08:00</updated><title type='text'>A Fishy Thought . . .</title><content type='html'>&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;&lt;/span&gt;ctually,  It is my first time to blog. I think maybe I have never had enough time to blog, but I intended to cross that barrier and here I am. So, I decided to share that experience. Once Samer published the announcement, "&lt;span style="font-style: italic;"&gt;Here is your chance&lt;/span&gt;", I told myself, and so I clicked the link and started to join our blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;&lt;/span&gt;t was then when the blog asked for the email and password, when my hacker spirit got aroused and remembered the phishing technique at once. "&lt;span style="font-style: italic;"&gt;The barrier is back, again&lt;/span&gt;"; No offense Samer, but I thought you maybe phishing us :)&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;E&lt;/span&gt;&lt;/span&gt;ven if it was a phishing operation, I won't let is  stop me&lt;/span&gt;", and so I created a new G-mail account just for blogging. But what is phishing in the first place, The term phishing is a variant of fishing, probably influenced by phreaking and alludes to the use of increasingly sophisticated lures to "fish" for users' financial information and passwords.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;P&lt;/span&gt;hishers usually duplicate the login forms of the attacked sites, but they change the address to which login info is posted to another address where they extract those info and then redirect the user back to the normal site in order to hide from the victim that he has been freaked. But how would the victim reach the fake site from the first place, this is done by socially manipulating the victim for example via a fake email inviting him to test the new service features but unfortunately he has to login once from the following link.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;A&lt;/span&gt;nother idea of phishing maybe through blog invitations just like Samer did :P.  Kidding with no offense Samer. But what about the blog spot that can collects a lot of email addresses with passwords... "&lt;span style="font-style: italic;"&gt;I think I should destroy that barrier and investigate that topic more&lt;/span&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2858328690300381570-1663043023087838681?l=espaceblogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://espaceblogs.blogspot.com/feeds/1663043023087838681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2858328690300381570&amp;postID=1663043023087838681' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1663043023087838681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2858328690300381570/posts/default/1663043023087838681'/><link rel='alternate' type='text/html' href='http://espaceblogs.blogspot.com/2007/02/fishy-thought.html' title='A Fishy Thought . . .'/><author><name>Simply, H</name><uri>http://www.blogger.com/profile/08584942038540948192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
