<?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-36992961</id><updated>2012-02-01T20:35:08.948-08:00</updated><category term='Personal'/><category term='firefox'/><category term='close'/><category term='script stack space quota is exhausted'/><category term='javascript'/><category term='java'/><category term='browser'/><category term='dynamic'/><category term='toolbars'/><category term='facts'/><category term='highlight'/><category term='html'/><category term='interesting'/><category term='search'/><category term='IE'/><category term='event'/><category term='Fckeditor'/><category term='custom replace'/><category term='settings'/><category term='learning'/><title type='text'>Bits and pieces</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36992961.post-7583125831465419508</id><published>2009-07-17T03:59:00.000-07:00</published><updated>2009-07-17T04:45:59.060-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='script stack space quota is exhausted'/><category scheme='http://www.blogger.com/atom/ns#' term='Fckeditor'/><title type='text'>FCKeditor v2.4.3 Firefox "script stack space quota is exhausted" fixed !</title><content type='html'>&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Hi all,&lt;br /&gt;&lt;br /&gt;I was uploading a document of about 10 MB doc in &lt;a href="http://www.fckeditor.net/"&gt;FCKeditor v 2.4.3&lt;/a&gt; from server. In IE it works fine but for the Firefox v&gt;2.0 , I was getting this strange bug "script stack space quota is exhausted" . Thought it was inherent &lt;a href="http://forums.mozillazine.org/viewtopic.php?t=633782&amp;amp;sid=300328d711e563ca741b049d5f8885a8"&gt;firefox problem&lt;/a&gt;, But why did FCKeditor caused it ?&lt;br /&gt;&lt;br /&gt;After reading the code and having some inline tests , I found that the following code  in &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;fckeditorcode_ie.js &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt; FCKeditor  start function caused this problem,&lt;br /&gt;&lt;br /&gt;           &lt;code&gt;&lt;br /&gt;   /* Buggy regex match for body contents*/&lt;br /&gt;   /* Results in "script stack space quota is exhausted" for large documents*/&lt;br /&gt;&lt;br /&gt;           var G=A.match(FCKRegexLib.BeforeBody);&lt;br /&gt;   var H=A.match(FCKRegexLib.AfterBody);&lt;br /&gt;   if (G&amp;amp;&amp;amp;H){&lt;br /&gt;       var I=A.substr(G[1].length,A.length-G[1].length-H[1].length);&lt;br /&gt;       A=G[1]+' '+H[1];&lt;br /&gt;       if (FCKBrowserInfo.IsGecko&amp;amp;&amp;amp;(I.length==0||FCKRegexLib.EmptyParagraph.test(I)))&lt;br /&gt;            I='&lt;br /&gt;';&lt;br /&gt;       this._BodyHTML=I;&lt;br /&gt;   }else&lt;br /&gt;       this._BodyHTML=A;&lt;br /&gt;   };&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here the regex match for stripping the before body and after body elements is the main problem which makes the firefox browser to run out of the memory for large documents.&lt;br /&gt;&lt;br /&gt;I replaced the regex match with indexOf to find out start and end of the body tags and stripped it , it solved this problem.&lt;br /&gt;&lt;br /&gt;Here is the fixed code.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;          /*fixed the memory problem using indexOf in mozilla browsers*/&lt;br /&gt;   if (FCKBrowserInfo.IsIE)&lt;br /&gt;        A=A.replace(/(&lt;base[^&gt;]*?)\s*\/?&gt;(?!\s*&lt;\/base&gt;)/gi,'$1&gt;');&lt;br /&gt;   else if (!B){&lt;br /&gt;   var G=A.indexOf("");&lt;br /&gt;   var H=A.indexOf("");&lt;br /&gt;   if (G!=-1&amp;amp;&amp;amp;H!=-1){&lt;br /&gt;       var I=A.substr(G,H);&lt;br /&gt;       //A=G[1]+' '+H[1];&lt;br /&gt;       if (FCKBrowserInfo.IsGecko&amp;amp;&amp;amp;(I.length==0||FCKRegexLib.EmptyParagraph.test(I)))&lt;br /&gt;            I='&lt;br /&gt;';&lt;br /&gt;       this._BodyHTML=I;&lt;br /&gt;   }else&lt;br /&gt;       this._BodyHTML=A;&lt;br /&gt;   };&lt;br /&gt;&lt;/base[^&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I don't see a fix for this in the future versions also , Is this fixed in &lt;a href="http://ckeditor.com/"&gt;CKEditor3.0&lt;/a&gt; ? If not please FCKeditor guys save the developer man days ..............&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-7583125831465419508?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/7583125831465419508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=7583125831465419508&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/7583125831465419508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/7583125831465419508'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2009/07/fckeditor-v243-firefox-script-stack.html' title='FCKeditor v2.4.3 Firefox &quot;script stack space quota is exhausted&quot; fixed !'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-6182820003173829413</id><published>2009-07-07T05:39:00.000-07:00</published><updated>2009-07-07T05:47:40.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Good to be back.</title><content type='html'>Reasons for my inactivity for past few months,&lt;br /&gt;&lt;br /&gt;Reason 1: Have been involved in lots of projects.&lt;br /&gt;Reason 2: Have been involved in hours of learning.&lt;br /&gt;Reason 3: Have been involved in self-building and introspecting myself.&lt;br /&gt;Reason 4: Found how a small dream can grow so much in span of months of hard-work and persistence.&lt;br /&gt;&lt;br /&gt;What's the good news ?&lt;br /&gt;&lt;br /&gt;Not being posting for a long time ?? :). Just joking . Good News is that there are lots of small things in store to share with you all.&lt;br /&gt;&lt;br /&gt;Now I feel good to be back. So Keep checking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-6182820003173829413?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/6182820003173829413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=6182820003173829413&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/6182820003173829413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/6182820003173829413'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2009/07/good-to-be-back.html' title='Good to be back.'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-6394705958284583554</id><published>2008-09-12T06:29:00.000-07:00</published><updated>2008-09-14T23:57:57.074-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='custom replace'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>HTML Search Text and Highlight</title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;Jumping straight to the solution:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;//modified search function&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;1.&lt;span style="color: rgb(153, 51, 153);"&gt;function&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;searchtext(inputText, searchString)&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;2.        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;3.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;4.     &lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;//building RegExp object for the search text g-global match,i-ignore case&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;5.  var &lt;span style="color: rgb(0, 102, 0);"&gt;myregexp&lt;/span&gt; = &lt;span style="color: rgb(153, 51, 153);"&gt;new RegExp&lt;/span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 102, 0);"&gt;searchString&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;, "gi");&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;6.        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;7.   &lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;//custom replace function just to highlight the match word in the html source&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;8.   &lt;span style="color: rgb(153, 51, 153);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;myNewString &lt;/span&gt;= &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 102, 0);"&gt;inputText&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;.&lt;span style="color: rgb(153, 51, 153);"&gt;replace(&lt;/span&gt;myregexp,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;9.    &lt;span style="color: rgb(153, 51, 153);"&gt;    function&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;matchTxt,key,txt)&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;10.                &lt;span style="color: rgb(153, 51, 153);"&gt;return&lt;/span&gt; "&amp;lt;span style='background-color:red;&amp;gt;'" + matchTxt + "&amp;lt;/span&amp;gt;"; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;11.       &lt;span style="color: rgb(204, 0, 0);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;)&lt;/span&gt;;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;12.       &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;13.       &lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;//return the new highlighted text&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;14.       &lt;span style="color: rgb(153, 51, 153);"&gt;return&lt;/span&gt; myNewString;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;15.        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;16.&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;I think going through the code will be just self explanatory as the solution is straight-forward.But did you see some weird implementation ? Bingo! you found it :)  It's the custom replace function.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Let's get dirty with some syntax explanation and we will be soon back with the explanation of its implementation here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;7.   &lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;//custom replace function just to highlight the match word in the html source&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;8.   &lt;span style="color: rgb(153, 51, 153);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;myNewString &lt;/span&gt;= &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 102, 0);"&gt;inputText&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;.&lt;span style="color: rgb(153, 51, 153);"&gt;replace(&lt;/span&gt;myregexp,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;9.    &lt;span style="color: rgb(153, 51, 153);"&gt;    function&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;matchTxt,key,txt)&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;10.                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="color: rgb(153, 51, 153);"&gt;return&lt;/span&gt; "&amp;lt;span style='background-color:red;&amp;gt;'" + matchTxt + "&amp;lt;/span&amp;gt;"; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;11.       &lt;span style="color: rgb(204, 0, 0);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;)&lt;/span&gt;;    &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Here we have written a custom replace function to replace the matching text.We will see how it works.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;First it will match the regular expression and it passes the matched text to the first argument of the replace custom function , the second argument is the runtime unique key , the third is whole text to which the search has been made.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;So here is the steps that will be followed while executing the code,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1. Match the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;mySearchField with &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;myregexp and find the match&lt;br /&gt;2. Pass the match to matchTxt field of the custom function.&lt;br /&gt;3. Wrap the matchTxt with some background color and return the modified text.&lt;br /&gt;4. Replace the match with the modified text .&lt;br /&gt;5. Repeat the steps 1-4 till no match is found.&lt;br /&gt;&lt;br /&gt;Thus the explanation of the solution.&lt;br /&gt;&lt;br /&gt;Alternatives:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;1.We can just write the implementation as mySearchField.replace(myregexp,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;"&lt;span style=""&gt;" + textse + "&lt;/span&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Here,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 51, 153);"&gt;&lt;span style="font-weight: bold;"&gt;textse&lt;/span&gt;&lt;/span&gt; - &lt;span style="color: rgb(153, 51, 0);"&gt;is the user entered search string&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;But the problem is the alphabets lower case and upper case of the original content will not be preserved, so our implementation will be a neat solution for this problem.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 51);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;2. We can use indexOf and lastIndexOf of the search strings and replace the content to highlight search.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;As shown in this page &lt;/span&gt;&lt;a style="color: rgb(0, 0, 0);" href="http://www.nsftools.com/misc/SearchAndHighlight.htm"&gt;indexOf implementation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;But when compared for efficiency ours O(n) algorithm and indexOf would be O(n*m)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Here,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;&lt;span style="color: rgb(153, 51, 153); font-weight: bold; font-style: italic;"&gt;n&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; &lt;/span&gt;- is the number of search string match in the given content&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;&lt;span style="color: rgb(153, 51, 153); font-weight: bold; font-style: italic;"&gt;m&lt;/span&gt; - is the number of tag matches&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;So our solution holds good for this case.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Hope this helps and will meet you &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;soon&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;" &gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; with another  cool post fo custom replace method implementation :) . &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;An alternate efficient implementation  posted by h3 for this code is&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;function&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;highlight(i, s)&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;    return &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;i.&lt;span style="color: rgb(153, 51, 153);"&gt;replace&lt;/span&gt;((&lt;span style="color: rgb(153, 51, 153);"&gt;new RegExp&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 0);"&gt;'('+s+')', 'gi'&lt;/span&gt;)), '&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;span class="higlight"&amp;gt;$1&amp;lt;/span&amp;gt;&lt;/span&gt;')&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This bit straight forward and more efficient . Thanks h3 for your comment. :)&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:verdana;" &gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-6394705958284583554?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/6394705958284583554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=6394705958284583554&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/6394705958284583554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/6394705958284583554'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2008/09/html-search-text-and-highlight.html' title='HTML Search Text and Highlight'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-592032581655746126</id><published>2008-01-07T21:57:00.000-08:00</published><updated>2008-01-07T21:57:41.818-08:00</updated><title type='text'>Bits and pieces: Detecting browser event closing in Javascript</title><content type='html'>&lt;a href="http://mehmoodbluffs.blogspot.com/2007/10/detecting-browser-event-closing-in.html#links"&gt;Bits and pieces: Detecting browser event closing in Javascript&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-592032581655746126?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mehmoodbluffs.blogspot.com/2007/10/detecting-browser-event-closing-in.html#links' title='Bits and pieces: Detecting browser event closing in Javascript'/><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/592032581655746126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=592032581655746126&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/592032581655746126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/592032581655746126'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2008/01/bits-and-pieces-detecting-browser-event.html' title='Bits and pieces: Detecting browser event closing in Javascript'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-2451315379030756311</id><published>2007-10-02T04:23:00.000-07:00</published><updated>2007-10-02T05:15:21.127-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='close'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Detecting browser event closing in Javascript</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;             I've been working on a feature where the user must be prompted to take up certain action when he leaves a page by closing the browser window or by clicking an external URL,though I searched for the best possible solution but unfortunately couldn't find one.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  The first thing that got my attention is the browser's  "onbeforeunload" event and here is the implementation of it,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    window.onbeforeunload=confirmExit;&lt;br/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     function confirmExit(){&lt;br/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        return "Do u want to close this page?"&lt;br/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     }&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;   So here the user will be prompted when he clicks the close button of the browser and when the user clicks "cancel" in prompt, it stays the same page.So far works fine.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  When testing is on the way , suddenly problems getting piled up and I need to reconsider the solution above, since the requirement is  to "prompt the user only when he leaves the current domain (website)" and here for the above code, the user is prompted whenever he clicks any of the links that points to other pages in the same website.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  So the above code is to prompt the user, whenever he leaves the current page by refreshing it or by clicking the close button.But this was not what I wanted to implement.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; So the user should not be prompted whenever,&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;   1.An link to the same website is clicked&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;   2.Refreshes the current page&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;   3.Clicks mailto anchors&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;   4.clicks the navigators containing "#" for the same page&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Now to avoid these conditions, we need the anchors to be tested for the pages of the current website and external links. So the following code solves all of these problems and prompts the user only when ,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  1.He clicks an external link&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  2.Closes the current window.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;window.onbeforeunload = confirmExit;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  var aClick=false;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  function confirmExit(e)&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  {&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    if(document.all)e = event;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    if(!e)e=window.event;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    if (e)&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    {&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        if(aClick==false &amp;amp;&amp;amp; (e.target==document || e.clientX&lt;0 || e.clientY&lt;0)){                &lt;br/&gt;&lt;br /&gt;            return "You have attempted to leave this page.  Are you sure you want to exit this page?";           &lt;br/&gt;&lt;br /&gt;        }         &lt;br/&gt;&lt;br /&gt;    }&lt;br/&gt;&lt;br /&gt; }  &lt;br/&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-family:verdana;" &gt;The following code should be strictly placed below all the contents of the current page .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;function setAClick(){&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        aClick=true;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;function cancelAClick(){&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        aClick=false;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;var aList=document.getElementsByTagName("a");&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;if(aList &amp;amp;&amp;amp; aList.length&gt;0){&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    for(i=0;i &amp;lt; alist.length;i++){&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        var a=aList[i];&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        if(checkForLocal(a.href)){&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;          a.onclick=setAClick;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        }else{&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;          a.onclick=cancelAClick;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        }&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     }&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;function checkForLocal(src){&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    return (src.indexOf("localhost")!=-1 || &lt;br/&gt;src.indexOf("urdomain")!=-1 || src.indexOf("javascript")!=-1         ||src.indexOf("mailto") !=-1 || src.indexOf("#")==0);&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;This eliminates all the above problems and confirms with the user only when navigating to the external URL's or closing the browser. :)&lt;br /&gt;&lt;br /&gt;And may be this is an really odd solution for this problem  and your comments are always expected. :)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-2451315379030756311?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/2451315379030756311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=2451315379030756311&amp;isPopup=true' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/2451315379030756311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/2451315379030756311'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2007/10/detecting-browser-event-closing-in.html' title='Detecting browser event closing in Javascript'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-6115770014729348212</id><published>2007-06-26T03:24:00.000-07:00</published><updated>2007-06-26T05:56:57.283-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='facts'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='interesting'/><title type='text'>Java - Interesting Stuffs</title><content type='html'>&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;br /&gt;I am just still an admirer and constant learner of JAVA, So here are some interesting stuffs .I will try to constantly update once I come across some interesting things (atleast to me:) ),&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;To resurrect an object(to make the object alive again) instead of reassigning in the object in finalize method "create a clone"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Java Object are created in heap while in C++ ,they are created in Stack&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Object persistence can be done using object serialization and DATA ACCESS OBJECTS(DAO)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Making an object alive in finalize method is useful when we use JNI for a c++ class and do it with a "termination condition"(when there is a code to check whether all the object references in the program has been  made null) during garbage collection.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;System.gc() may or may not run finalize() of for the orphans (object that holds no reference) but Runtime.runFinalizersonExit(true) and System.runFinalizersonExit(true) will surely make the objects ready for the garbage collected.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Java supports only pass by value, either for  an object or a primitive type.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; Suprising,regertfull!!!&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;            Let's discuss,&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;        &lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;        Actually when we call a method swap(p1,p2) and the method definition goes like this&lt;br /&gt;&lt;br /&gt;   public void swap(Point p,Point q){&lt;br /&gt;         Point temp=p;&lt;br /&gt;         p=q;&lt;br /&gt;         q=temp;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;Simple swap isn't but here there are lot more to analyse if p1.i=10,p2.i=11 what&lt;br /&gt;will happen if we call&lt;br /&gt;      swap(p1,p2);&lt;br /&gt;      p1.i is 11 and p2.i is 10 ???  NO..&lt;br /&gt;&lt;br /&gt;    when we call swap(p1,p2) the reference value is passed not the object itself&lt;br /&gt;      (note it passes   only                     reference value) so in method swap&lt;br /&gt;     p--&gt;p1 and q--&gt;p2           (Note: --&gt; synonymous to 'refers')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     so for this snippet,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                   Point temp=p;  // temp--&gt;p--&gt;p1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                   p=q; // p--&gt;q&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                   q=temp; // q--&gt;temp--&gt;p--&gt;q ( as by above step)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    So both p and q refers to p2 now ... so we will get the output p1.i is 10 and p2.i is 10.&lt;br /&gt;&lt;/span&gt;                    &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Since the Java uses objects to be created in heap.It's not fast to access as in C++ ( it uses stack ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;            The memory model goes like this,&lt;br /&gt;&lt;br /&gt;       1.&lt;span style="font-weight: bold;"&gt;Processor Registers&lt;/span&gt; - faster access since they live in processor itself and they are limited&lt;br /&gt;       2.&lt;span style="font-weight: bold;"&gt;Stack&lt;/span&gt; - They live in RAM but has direct support from processor using "stack pointers".&lt;br /&gt;           It is needed to know the size of the storage element ,since we are in need to move the pointers.So                      object references are stored in stack not the object.&lt;br /&gt;Object references are 4 bytes for 32 bit computers and 8 bytes for 64 bit computers.&lt;br /&gt;3.&lt;span style="font-weight: bold;"&gt;Heap&lt;/span&gt; - It is a memory pool that living in RAM area.It's flexible since the compiler need not to know&lt;br /&gt;the amount and life of storage.but it is slower when it compared to stack storage allocations.&lt;br /&gt;4.&lt;span style="font-weight: bold;"&gt;Static storage&lt;/span&gt; - "fixed location" in java the static members of the object are stored in these&lt;br /&gt;      locations but not the object itself.They also live in RAM.&lt;br /&gt;5.&lt;span style="font-weight: bold;"&gt;Constant Storage&lt;/span&gt; - The constant values are placed directly in the program code, which is safe sice they can never change&lt;br /&gt;               but optionally they are stored in ROM(in embedded systems).        &lt;br /&gt;6.Non-RAM Storage - external file where persistent object mechanisms are used to store the object in the secondary memory&lt;br /&gt;       files and in streaming where object are sent to another machine.&lt;br /&gt;&lt;br /&gt;Since the heap holds the objects, the garbage collection can be expensive and the compiler must be built with effective algorithm to solve this. This can be achieved in the following ways,&lt;br /&gt;- Like a conveyor belt the object can be allocated with the help of "heap pointer" so it will function like a stack&lt;br /&gt;(but there is still overhead for book-keeping(maintaining heap pointer) operations but effective&lt;br /&gt;than searching for a memory ) but this might lead to paging it can be avoided like compacting the memory once a while&lt;br /&gt;the garbage collectior steps in.&lt;br /&gt;&lt;br /&gt;- There is simple method called 'reference counting' each object has a constant with no. of reference made in it.&lt;br /&gt;If one reference goes null then the object's referece count is decreased by 1.Likewise , when the reference countof an object goes 0 it is garbage collected.&lt;br /&gt;One drawback in this is if there is a circular reference like a-&gt;b b-&gt;a we can find the fault in&lt;br /&gt;it by putting a-&gt;b-&gt;a so this is equal to just a,so the reference count of a is 1 , but this just implies it has no&lt;br /&gt;meaning full reference and it has to be garbage collected.&lt;br /&gt;So these type of checks needs special algorithm to do it and this method is seldom used.&lt;br /&gt;&lt;br /&gt;- Actually the JVM uses an adaptive method for garbage collection,&lt;br /&gt;&lt;br /&gt;   It is the combination of STOP AND COPY , MARK AND SWEEP&lt;br /&gt;&lt;br /&gt;"STOP AND COPY" involves stop the current execution and copy the live objects&lt;br /&gt;(found out by tracing the path of references in stack and static storage) to another heap while leaving the&lt;br /&gt;dead objects(those have no references in the stack or static storage) in the old heap for garbage collection.&lt;br /&gt;&lt;br /&gt;Two issues are in this method:&lt;br /&gt;1.Copy-collectors : since we need to allocate two heaps of same size to copy the live objects.&lt;br /&gt;2.Copying : sometimes the program gets stabilized and no or only few objects needs to be garbage collected&lt;br /&gt; at that time the its really in-efficient to copy the whole heap to another heap of same size.&lt;br /&gt;&lt;br /&gt; So this method can be used when there is large amount of objects need to be garbage collected.&lt;br /&gt;&lt;br /&gt;"MARK AND SWEEP":&lt;br /&gt;Finds the live objects as in STOP AND COPY but the garbage collection is different.&lt;br /&gt;It marks each live object by setting a flag.&lt;br /&gt;Here only the marking process is finished the sweep(releasing dead objects) occur.&lt;br /&gt;It is generally slow but if it is used with small no. of garbage then its pretty fast.&lt;br /&gt;&lt;br /&gt;So the JVM can switch to any one of these methods depending upon the no. of garbage.&lt;br /&gt;Thats why it is called adaptive method.It can switch to any method in middle of the garbage collection.&lt;br /&gt;&lt;br /&gt;A better alternative available for garbage collection is JIT(Just in time).&lt;br /&gt;which converts the byte code(.class files) partially or fully to native codes.&lt;br /&gt;but it has 2 drawbacks:&lt;br /&gt;1.the conversions slows the execution.&lt;br /&gt;2.It increases the exectuble memory size resulting fragments(paging) to occur which will still reduce the execution speed.&lt;br /&gt;&lt;br /&gt;So it uses "lazy evaluation" technique where it is not compiled to native code until it is asked for.&lt;br /&gt;The recent JDK's uses similar approaches to optimize the code like more code it executes faster it gets.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; un-initialized member variable are assigned to proper startup value according to the types and if they are local variables they are assigned with garbage values instead compiler error is thrown.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; If we have same method with same signature in a abstract class and an interface extended and implemented respectively in a class , it doesn't cause any error but if they have return types different then they give a compile time error this is one of the problems we may face and the possible is to create a inner class with implements or extends depending upon its enclosing class's usage.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; equals and hascode method of object should always comply to the following contracts,&lt;br /&gt;&lt;br /&gt;-Reflexive,Symmetric,Transitive,Consistent,Systematic treatment of null values.&lt;br /&gt;If two objects are equal then their hashcode should always be equal and its not necessary that if objects have same&lt;br /&gt;hascode can't be equal.&lt;br /&gt;-when implementing ur own equals method give Object as its argument not ur own class 'coz if u use ur own class&lt;br /&gt;then it will just overload the equal method but not override,so it always safe to have equals method with object&lt;br /&gt;argument in order avoid weird beahviours&lt;br /&gt;&lt;br /&gt;Here are some useful guidelines for implementing the hashCode method correctly.&lt;br /&gt;&lt;br /&gt;1. Store an arbitrary non-zero constant integer value (say 7) in an int variable, called hash.&lt;br /&gt;2. Involve significant variables of your object in the calculation of the hash code, all the variables that are part of equals comparison should be considered for this. Compute an individual hash code int var_code for each variable var as follows -&lt;br /&gt;  1. If the variable(var) is byte, char, short or int, then var_code = (int)var;&lt;br /&gt;  2. If the variable(var) is long, then var_code = (int)(var ^ (var &gt;&gt;&gt; 32));&lt;br /&gt;  3. If the variable(var) is float, then var_code = Float.floatToIntBits(var);&lt;br /&gt;  4. If the variable(var) is double, then -&lt;br /&gt;     long bits = Double.doubleToLongBits(var);&lt;br /&gt;     var_code = (int)(bits ^ (bits &gt;&gt;&gt; 32));&lt;br /&gt;  5. If the variable(var) is boolean, then var_code = var ? 1 : 0;&lt;br /&gt;  6. If the variable(var) is an object reference, then check if it is null, if yes then var_code = 0; otherwise invoke the hashCode method recursively on this object reference to get the hash code. This can be simplified and given as -&lt;br /&gt;     var_code = (null == var ? 0 : var.hashCode());&lt;br /&gt;3. Combine this individual variable hash code var_code in the original hash code hash as follows -&lt;br /&gt;hash = 31 * hash + var_code;&lt;br /&gt;4. Follow these steps for all the significant variables and in the end return the resulting integer hash.&lt;br /&gt;5. Lastly, review your hashCode method and check if it is returning equal hash codes for equal objects. Also, verify that the hash codes returned for the object are consistently the same for multiple invocations during the same execution.&lt;br /&gt;&lt;br /&gt;The guidelines provided here for implementing equals and hashCode methods are merely useful as guidelines, these are not absolute laws or rules. Nevertheless, following them while implementing these two methods will certainly give you correct and consistent results.&lt;br /&gt;&lt;br /&gt;TIPS,&lt;br /&gt;*  Equal objects must produce the same hash code as long as they are equal, however unequal objects need not produce distinct hash codes.&lt;br /&gt;* The equals method provides "deep comparison" by checking if two objects are logically equal as opposed to the "shallow comparison" provided by the equality operator ==.&lt;br /&gt;* However, the equals method in java.lang.Object class only provides "shallow comparison", same as provided by the equality operator ==.&lt;br /&gt;* The equals method only takes Java objects as an argument, and not primitives; passing primitives will result in a compile time error.&lt;br /&gt;* Passing objects of different types to the equals method will never result in a compile time error or runtime error.&lt;br /&gt;* For standard Java wrapper classes and for java.lang.String, if the equals argument type (class) is different from the type of the object on which the equals method is invoked, it will return false.&lt;br /&gt;* The class java.lang.StringBuffer does not override the equals method, and hence it inherits the implementation from java.lang.Object class.&lt;br /&gt;* The equals method must not provide equality comparison with any built in Java class, as it would result in the violation of the symmetry requirement stated in the general contract of the equals method.&lt;br /&gt;* If null is passed as an argument to the equals method, it will return false.&lt;br /&gt;* Equal hash codes do not imply that the objects are equal.&lt;br /&gt;* return 1; is a legal implementation of the hashCode method, however it is a very bad implementation. It is legal because it ensures that equal objects will have equal hash codes, it also ensures that the hash code returned will be consistent for multiple invocations during the same execution. Thus, it does not violate the general contract of the hashCode method. It is a bad implementation because it returns same hash code for all the objects. This explanation applies to all implementations of the hashCode method which return same constant integer value for all the objects.&lt;br /&gt;* In standard JDK 1.4, the wrapper classes java.lang.Short, java.lang.Byte, java.lang.Character and java.lang.Integer simply return the value they represent as the hash code by typecasting it to an int.&lt;br /&gt;* Since JDK version 1.3, the class java.lang.String caches its hash code, i.e. it calculates the hash code only once and stores it in an instance variable and returns this value whenever the hashCode method is called. It is legal because java.lang.String represents an immutable string.&lt;br /&gt;* It is incorrect to involve a random number directly while computing the hash code of the class object, as it would not consistently return the same hash code for multiple invocations during the same execution.&lt;br /&gt;&lt;br /&gt;ref:&lt;a href="http://www.geocities.com/technofundo/tech/java/equalhash_cartoon.html"&gt;http://www.geocities.com/technofundo/tech/java/equalhash_cartoon.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;                                                     &lt;blockquote style="font-family: georgia;"&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-6115770014729348212?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/6115770014729348212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=6115770014729348212&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/6115770014729348212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/6115770014729348212'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2007/06/java-interesting-stuffs.html' title='Java - Interesting Stuffs'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-1472120381829518637</id><published>2007-01-26T00:01:00.000-08:00</published><updated>2007-02-06T23:03:13.892-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='toolbars'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic'/><category scheme='http://www.blogger.com/atom/ns#' term='settings'/><category scheme='http://www.blogger.com/atom/ns#' term='Fckeditor'/><title type='text'>Fckeditor - removing tool bar items</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I was working around for a couple of days to enable  a feature were we can remove the tool bar items depending upon some permissions like hiding Style and Bold for a particular user group.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I don't find any feature in-built in the FCKeditor to do this , so thought of trying some hack on it.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The possible workaround I tried was this,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;        In the FCKeditor the editor/fckeditor.html page loads up all the configurations while start-up , so we can possibly remove the tool bar items for a specific Toolbarset before creating it.Here is how I did it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;        In LoadToolbar() function in the fckeditor.html page I added the following lines,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;function LoadToolbar()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; var removeToolBarSet=FCKURLParams['RemoveToolBarSet'] || '';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; if ( oToolbarSet.IsLoaded )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  StartEditor() ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  oToolbarSet.OnLoad = StartEditor ;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-style: italic;"&gt;  //get the current tool bar from the URL and look up in the FCKConfig.js&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-style: italic;"&gt;  hyCurrentToolBar=FCKURLParams['Toolbar'] || 'Default' ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  var toolBarArray=FCKConfig.ToolbarSets[hyCurrentToolBar];&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-style: italic;"&gt;  if(removeToolBarSet.indexOf('upload')!=-1){ //disable the upload Tab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    FCKConfig.ImageUpload = false ; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  }&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-style: italic;"&gt;  //Remove the tool bar items specified in the list&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  var strippedToolBar=RemoveToolBarItems(toolBarArray,removeToolBarSet);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  if(strippedToolBar){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   FCKConfig.ToolbarSets[hyCurrentToolBar]=strippedToolBar;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  } &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;function RemoveToolBarItems(toolBarArray,removeToolBarSet){&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    if(removeToolBarSet &amp;&amp;amp; removeToolBarSet.length&gt;0){&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="font-style: italic;"&gt; for(i=0;i&amp;lt;toolBarArray.length;i++){&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-style: italic;"&gt;      var rowStrip=toolBarArray[i];&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-style: italic;"&gt;      for(j=0;j&amp;lt;rowStrip.length;j++){&lt;/span&gt;&lt;br /&gt;     &lt;br /&gt;&lt;span style="font-style: italic;"&gt;     if(removeToolBarSet.indexOf(rowStrip[j])!=-1){&lt;/span&gt;&lt;br /&gt;     &lt;br /&gt;&lt;span style="font-style: italic;"&gt;   toolBarArray[i].splice(j,1);//dynamically removes  the array item and re-arranges it&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;&lt;span style="font-style: italic;"&gt;   j--;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     }  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; }&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; return toolBarArray;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;In JAVA , in the FCKeditorTag.java add the following lines,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;private String removeToolBarSet=null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;//add its getters and setters&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;in doStartTag() add,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt; if(removeToolBarSet!=null){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;            fcked.setRemoveRoolBarSet(removeToolBarSet);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;        }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;then perform the same definitions in the FCKEditor.java and append the appropriate query string in the createIFrameHTML().&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;And all over just don't forget to give the attribute setting in tld specifications and also in the custom tag in JSP page!!! :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;   It's as simple is it 8-) ..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; Please feel free to comment me if any doubts and also If i am wrong..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-1472120381829518637?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/1472120381829518637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=1472120381829518637&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/1472120381829518637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/1472120381829518637'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2007/01/fckeditor-removing-tool-bar-items.html' title='Fckeditor - removing tool bar items'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-116288295819989899</id><published>2006-11-06T20:51:00.000-08:00</published><updated>2007-01-25T23:58:29.575-08:00</updated><title type='text'>The HaCkERdOm-A ViEw</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/648/4146/1600/hacker-emblem.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/648/4146/320/hacker-emblem.jpg" alt="" border="0" /&gt;&lt;/a&gt; "&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Hacker Emblem&lt;/span&gt;".&lt;br /&gt;      &lt;br /&gt;It's an article which changed my perception about technology Vs Life !!! .I am bit got  attached  to the world of hackers and their culture.(&lt;span style="font-weight: bold;"&gt;P.S&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; Hacker is one who build systems and the Cracker is one who breaks it&lt;/span&gt;) It's all about the world of fascinating technology!!..&lt;br /&gt;&lt;br /&gt;The Words I found in this link &lt;a href="http://catb.org/%7Eesr/faqs/hacker-howto.html"&gt;http://catb.org/~esr/faqs/hacker-howto.html&lt;/a&gt; by &lt;span class="firstname"&gt;Eric&lt;/span&gt; &lt;span class="othername"&gt;Steven&lt;/span&gt; &lt;span class="surname"&gt;Raymond&lt;br /&gt;&lt;/span&gt;captured most of my interests .I thank Eric for this wonderful page. He has explained about who is an hacker and what he should do to be labelled as hacker(this label is not stick by him but by others reputation on his work!!).&lt;br /&gt;&lt;br /&gt;Now as a first step I have decided to learn all and everything about linux,python(the most simple and wonderful language I have ever seen 'coz I have some previous exp. in this language but not fully) and JAVA(the most respected language by me, once I thought this is my life and still it is) now have to move forward with it by learning v1.5 .. and also I am learning Struts along with these , 'coz I have started learning before itself and can't leave it all together now and moreover I love this framework too :)&lt;br /&gt;&lt;br /&gt;So for linux I don't find any good books here especially in coimby but had to go chennai or b'lore to get a nice one and I  will get it soon.. But for now I have decided to learn it from the web.&lt;br /&gt;&lt;br /&gt;Though I know some basics about linux , I decided to start it from scratch.To begin with , http://www.linux.org/lessons/beginner/index.html is a good link,&lt;br /&gt;Another interesting and a very good project for linux documentation!!! can be found in this link&lt;br /&gt;http://kernelbook.sourceforge.net/.Then for all about linux kernel architecture, see here http://plg.uwaterloo.ca/~itbowman/CS746G/a2/. and also don't forget about &lt;a href="http://mehmoodbluffs.blogspot.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://mehmoodbluffs.blogspot&lt;wbr&gt;.com/ &lt;/a&gt;  I will be more interested about sharing your thoughts regarding these subjects and also regarding anything that catches your interest.&lt;br /&gt;&lt;br /&gt;ok Now I can see clearly thru my dreams uppps.. and will make it true one day.huh.. but how much I have to learn!!! hmmm.. thats the way .. I love it..... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-116288295819989899?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/116288295819989899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=116288295819989899&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/116288295819989899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/116288295819989899'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2006/11/hackerdom-my-dream.html' title='The HaCkERdOm-A ViEw'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36992961.post-116245731629216131</id><published>2006-11-02T00:40:00.000-08:00</published><updated>2006-11-06T23:30:52.701-08:00</updated><title type='text'>TeChNiQuEs-DiStRiBuTeD</title><content type='html'>Hey folks,&lt;br /&gt;  &lt;br /&gt;     I like to share what I learn and Where I went wrong . I like to be more out of box in programming and I am very much interested in mile stone technologies and softwares.I like to share more about Fckeditor,eclipse PDE,Mozilla extensions,Python cool stuffs and much more..&lt;br /&gt;&lt;br /&gt;     K see you then within a short while .. have fun..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36992961-116245731629216131?l=mehmoodbluffs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mehmoodbluffs.blogspot.com/feeds/116245731629216131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36992961&amp;postID=116245731629216131&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/116245731629216131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36992961/posts/default/116245731629216131'/><link rel='alternate' type='text/html' href='http://mehmoodbluffs.blogspot.com/2006/11/techniques-distributed.html' title='TeChNiQuEs-DiStRiBuTeD'/><author><name>M3hm0^2d:</name><uri>http://www.blogger.com/profile/08120930237205969359</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_Udzep9fr2wo/SNnXwjZ-fYI/AAAAAAAAADQ/Kh9F1lsIt3A/S220/DSC00734+(1).JPG'/></author><thr:total>0</thr:total></entry></feed>
