<?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-4545233652388802981</id><updated>2011-07-30T20:43:45.089-07:00</updated><title type='text'>Mostafa Elkhouly's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4545233652388802981.post-5636769013587471468</id><published>2010-01-17T08:48:00.000-08:00</published><updated>2010-01-17T12:27:35.302-08:00</updated><title type='text'>el talta tabta</title><content type='html'>Finally, after installing Ubuntu and Thunderbird for the third time, it finally worked as it should.&lt;br /&gt;So I tried the code I did for the user interface of the mini-project, and I t also worked. This made me excited to work on the final project bug and the mailto bug also. I started with the mailto bug just to be sure that it really worked :D.&lt;br /&gt;&lt;br /&gt;I add more conditions to the if-statement in line 199, the first one is to check if we have a '.' right after the '@', the second condition is to check if we have more than one consecutive '.' after the '@' sign, the third condition is to check if the address ends with '.', finally we must check if the address starts with the '@' sign.&lt;br /&gt;&lt;br /&gt;After testing I found out that the code had an error&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(inString.CharAt(inString.Length()-1) != '.')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The letter ‘L’ in the method Length was in lower case and it should be in upper case.&lt;br /&gt;&lt;br /&gt;So this is my final modified code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (aInString[pos] == '@')&lt;br /&gt;{&lt;br /&gt;     nsDependentString inString(aInString, aInLength);&lt;br /&gt;     if ( (inString.FindChar('.', pos) != kNotFound) &amp;&amp; &lt;br /&gt;          (inString.CharAt(pos+1) != '.') &amp;&amp;&lt;br /&gt;          (inString.Find("..", pos) == kNotFound) &amp;&amp; &lt;br /&gt;          (inString.CharAt(inString.Length()-1) != '.')&amp;&amp;&lt;br /&gt;          (pos!=0))&lt;br /&gt;     {&lt;br /&gt;       aOutString.AssignLiteral("mailto:");&lt;br /&gt;       aOutString += aInString;&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;After testing it I worked :), I also tested it for common errors, afterwards I created a dummy bug and attached my patch to it. Finally I requested a review from Dr. Fatma.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mG_tl38zkas/S1NykHi1DmI/AAAAAAAAAAs/5jclg3SOUzQ/s1600-h/mailtobug+fixed.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 224px;" src="http://3.bp.blogspot.com/_mG_tl38zkas/S1NykHi1DmI/AAAAAAAAAAs/5jclg3SOUzQ/s320/mailtobug+fixed.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5427807940737568354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As with the Final project bug, it was about checking all mail address in each one of the address fields (to, cc, bcc) before sending a mail.&lt;br /&gt;&lt;br /&gt;In case we write invalid mail address (say, invalidmailaddress) in To/Cc/Bcc etc field, we'll see error dialog saying:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; invalidmailaddress is not a valid e-mail address because it is not of&lt;br /&gt; the form user@host. You must correct it before sending the e-mail.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But if we input at least one valid mail address, other fields will not be checked and thunderbird will send to the invalid mail address.&lt;br /&gt;These are the examples of the normal and invalid behaviors:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mG_tl38zkas/S1NAiLaKNwI/AAAAAAAAAAc/Gnej9fLf0EE/s1600-h/Test2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://4.bp.blogspot.com/_mG_tl38zkas/S1NAiLaKNwI/AAAAAAAAAAc/Gnej9fLf0EE/s320/Test2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5427752931833820930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mG_tl38zkas/S1NAtwLEw2I/AAAAAAAAAAk/6dI8k1Bm8OU/s1600-h/Test3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_mG_tl38zkas/S1NAtwLEw2I/AAAAAAAAAAk/6dI8k1Bm8OU/s320/Test3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5427753130681221986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* found the command that checks for each field (to, cc, bcc)&lt;br /&gt;* edited the code so that it checks for all the emails in each field using the split method and for-loops.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function CheckValidEmailAddress(to, cc, bcc)&lt;br /&gt;{&lt;br /&gt;  var invalidStr = null;&lt;br /&gt;  var i=0;&lt;br /&gt;  var j=0;&lt;br /&gt;  var k=0;&lt;br /&gt;  var arraybcc= bcc.split(",");&lt;br /&gt;  var arraycc= cc.split(",");&lt;br /&gt;  var arrayto= to.split(",");&lt;br /&gt;  if (arraybcc!=null)&lt;br /&gt;  {&lt;br /&gt;    for (k=0;k&lt;arraybcc.length;k++)&lt;br /&gt;    {&lt;br /&gt;      if (arraybcc[k].length &gt; 0 &amp;&amp; (arraybcc[k].indexOf("@") &lt;= 0 ||&lt;br /&gt;          arraybcc[k].indexOf("@") == arraybcc[k].length - 1))&lt;br /&gt;        invalidStr = arraybcc[k];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  if (arraycc!=null)&lt;br /&gt;  {&lt;br /&gt;    for (j=0;j&lt;arraycc.length;j++)&lt;br /&gt;    {&lt;br /&gt;      if (arraycc[j].length &gt; 0 &amp;&amp; (arraycc[j].indexOf("@") &lt;= 0 ||&lt;br /&gt;          arraycc[j].indexOf("@") == arraycc[j].length - 1))&lt;br /&gt;        invalidStr = arraycc[j];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  if (arrayto!=null)&lt;br /&gt;  {&lt;br /&gt;    for (i=0;i&lt;arrayto.length;i++)&lt;br /&gt;    {&lt;br /&gt;      if (arrayto[i].length &gt; 0 &amp;&amp; (arrayto[i].indexOf("@") &lt;= 0 ||&lt;br /&gt;          arrayto[i].indexOf("@") == arrayto[i].length - 1))&lt;br /&gt;        invalidStr = arrayto[i];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  if (invalidStr)&lt;br /&gt;  {&lt;br /&gt;    var bundle = document.getElementById("bundle_composeMsgs");&lt;br /&gt;    if (gPromptService)&lt;br /&gt;      gPromptService.alert(window, bundle.getString("addressInvalidTitle"),&lt;br /&gt;                           bundle.getFormattedString("addressInvalid",&lt;br /&gt;                                                     [invalidStr], 1));&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* tested the code using the Thunderbird build.&lt;br /&gt;* the compose window stopped working when I try to send any email.&lt;br /&gt;* after testing the code [http://writecodeonline.com/javascript/ here] if found out that the error was caused because the method is passed null for each empty field.&lt;br /&gt;* edited the code to avoided null exceptions.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function CheckValidEmailAddress(to, cc, bcc)&lt;br /&gt;{&lt;br /&gt;  var invalidStr = null;&lt;br /&gt;  var i=0;&lt;br /&gt;  var j=0;&lt;br /&gt;  var k=0;&lt;br /&gt;  if (bcc!=null)&lt;br /&gt;  {&lt;br /&gt;    var arraybcc= bcc.split(",");&lt;br /&gt;    for (k=0;k&lt;arraybcc.length;k++)&lt;br /&gt;    {&lt;br /&gt;      if (arraybcc[k].length &gt; 0 &amp;&amp; (arraybcc[k].indexOf("@") &lt;= 0 ||&lt;br /&gt;          arraybcc[k].indexOf("@") == arraybcc[k].length - 1))&lt;br /&gt;        invalidStr = arraybcc[k];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  if (cc!=null)&lt;br /&gt;  {&lt;br /&gt;    var arraycc= cc.split(",");&lt;br /&gt;    for (j=0;j&lt;arraycc.length;j++)&lt;br /&gt;    {&lt;br /&gt;      if (arraycc[j].length &gt; 0 &amp;&amp; (arraycc[j].indexOf("@") &lt;= 0 ||&lt;br /&gt;          arraycc[j].indexOf("@") == arraycc[j].length - 1))&lt;br /&gt;        invalidStr = arraycc[j];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  if (to!=null)&lt;br /&gt;  {&lt;br /&gt;    var arrayto= to.split(",");&lt;br /&gt;    for (i=0;i&lt;arrayto.length;i++)&lt;br /&gt;    {&lt;br /&gt;      if (arrayto[i].length &gt; 0 &amp;&amp; (arrayto[i].indexOf("@") &lt;= 0 ||&lt;br /&gt;          arrayto[i].indexOf("@") == arrayto[i].length - 1))&lt;br /&gt;        invalidStr = arrayto[i];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  if (invalidStr)&lt;br /&gt;  {&lt;br /&gt;    var bundle = document.getElementById("bundle_composeMsgs");&lt;br /&gt;    if (gPromptService)&lt;br /&gt;      gPromptService.alert(window, bundle.getString("addressInvalidTitle"),&lt;br /&gt;                           bundle.getFormattedString("addressInvalid",&lt;br /&gt;                                                     [invalidStr], 1));&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;* tested the code again. (worked)&lt;br /&gt;* created the patch.&lt;br /&gt;* tested the patch for common errors [http://beaufour.dk/jst-review/ here].&lt;br /&gt;* submitted the patch.&lt;br /&gt;* bug fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-5636769013587471468?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/5636769013587471468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2010/01/el-talta-tabta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/5636769013587471468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/5636769013587471468'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2010/01/el-talta-tabta.html' title='el talta tabta'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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://3.bp.blogspot.com/_mG_tl38zkas/S1NykHi1DmI/AAAAAAAAAAs/5jclg3SOUzQ/s72-c/mailtobug+fixed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4545233652388802981.post-4846825066627367152</id><published>2009-11-12T06:18:00.000-08:00</published><updated>2009-11-12T06:28:41.001-08:00</updated><title type='text'>Running Thunderbird</title><content type='html'>After building Thunderbird is finished it was very disappointing that there were no fireworks or even a "congratulations your build was successful" message, all what you get is this screen in the picture below :(.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mG_tl38zkas/SvwaIMfrNHI/AAAAAAAAAAM/8CClETQxHlM/s1600-h/Thunderbird.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_mG_tl38zkas/SvwaIMfrNHI/AAAAAAAAAAM/8CClETQxHlM/s320/Thunderbird.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5403222381033108594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mG_tl38zkas/SvwaUifRsFI/AAAAAAAAAAU/Mv-3mbw6W2o/s1600-h/Thunderbird+bug.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 220px;" src="http://2.bp.blogspot.com/_mG_tl38zkas/SvwaUifRsFI/AAAAAAAAAAU/Mv-3mbw6W2o/s320/Thunderbird+bug.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5403222593095446610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After running Thunderbird I tested it for the "mailto" bug, and as you can see it is still present.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-4846825066627367152?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/4846825066627367152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/11/running-thunderbird.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/4846825066627367152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/4846825066627367152'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/11/running-thunderbird.html' title='Running Thunderbird'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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://2.bp.blogspot.com/_mG_tl38zkas/SvwaIMfrNHI/AAAAAAAAAAM/8CClETQxHlM/s72-c/Thunderbird.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4545233652388802981.post-5334281203777850161</id><published>2009-11-11T18:23:00.000-08:00</published><updated>2009-11-13T07:14:28.976-08:00</updated><title type='text'>Easy to follow steps for building Thunderbird on Ubuntu</title><content type='html'>1. Install cvs:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install cvs&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. Installing build tools:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get build-dep thunderbird&lt;br /&gt;sudo apt-get install mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. To get autoconf version 2.13:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz&lt;br /&gt;tar -xvzf autoconf-2.13.tar.gz&lt;br /&gt;cd autoconf-2.13/&lt;br /&gt;./configure --program-suffix=2.13&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4. Get the source:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hg clone http://hg.mozilla.org/comm-central/&lt;br /&gt;cd comm-central&lt;br /&gt;python client.py checkout&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5. To get missing packages such as mesa or header files such as iwlib.h:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install mesa-common-dev libiw-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;6. Create an empty file in comm-central directory and rename it to ".mozconfig"&lt;br /&gt;&lt;br /&gt;7. Add the following lines in the ".mozconfig" file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ac_add_options --enable-application=mail&lt;br /&gt;mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-tb-release&lt;br /&gt;mk_add_options MOZ_MAKE_FLAGS="-j4"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;8. Start the build:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;make -f client.mk&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It worked for me !!!, I tried to make it as easy as possible without any descriptions for my colleagues who don’t want to get into details of the build :), but if you want to ask about anything just post a comment and I hope that I can help you. Also I would like to thank Eng. Mina Metias for his &lt;a href="http://minametias.blogspot.com/2009/11/thunderbird-build-finally-works-dd.html"&gt; post &lt;/a&gt; about building Thunderbird.&lt;br /&gt;&lt;br /&gt;Note: It takes time to download the source code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-5334281203777850161?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/5334281203777850161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/11/easy-to-follow-steps-for-building.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/5334281203777850161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/5334281203777850161'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/11/easy-to-follow-steps-for-building.html' title='Easy to follow steps for building Thunderbird on Ubuntu'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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-4545233652388802981.post-817435786457809033</id><published>2009-11-08T17:27:00.000-08:00</published><updated>2009-11-08T17:38:16.026-08:00</updated><title type='text'>Fixing the Thunderbird bug</title><content type='html'>The first step in fixing the bug is finding it in the source code, in my approach I used &lt;a href="http://mxr.mozilla.org/comm-central/"&gt; MXR &lt;/a&gt;(Cross-Reference), and you have to cleverly choose the very specific keywords used for searching, because the source code isn’t small. I used "mailto" as my searching keyword, the code related to the bug was in the &lt;a href="http://mxr.mozilla.org/comm-central/source/mozilla/netwerk/streamconv/converters/mozTXTToHTMLConv.cpp"&gt;mozTXTToHTMLConv.cpp&lt;/a&gt; file between lines 194 to 204.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (aInString[pos] == '@')&lt;br /&gt;{&lt;br /&gt;     // only pre-pend a mailto url if the string contains a .domain in it..&lt;br /&gt;     //i.e. we want to linkify johndoe@foo.com but not "let's meet @8pm"&lt;br /&gt;     nsDependentString inString(aInString, aInLength);&lt;br /&gt;     if (inString.FindChar('.', pos) != kNotFound) // if we have a '.' after the @ sign....&lt;br /&gt;     {&lt;br /&gt;       aOutString.AssignLiteral("mailto:");&lt;br /&gt;       aOutString += aInString;&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This part of the code just checks if there is an '.' after the '@' sign and ignores a lot of other invalid cases of an email address.&lt;br /&gt;&lt;br /&gt;Invalid Addresses&lt;br /&gt;a@.&lt;br /&gt;a@..&lt;br /&gt;a@..f&lt;br /&gt;a@....f&lt;br /&gt;@.&lt;br /&gt;@.com&lt;br /&gt;@a.com&lt;br /&gt;@a&lt;br /&gt;@a.&lt;br /&gt;@a..&lt;br /&gt;@a...com&lt;br /&gt;a@a.a..a&lt;br /&gt;&lt;br /&gt;So we must add more conditions to the if-statement in line 199, the first one is to check if we have a '.' right after the '@', the second condition is to check if we have more than one consecutive '.' after the '@' sign, the third condition is to check if the address ends with '.', finally we must check if the address starts with the '@' sign.&lt;br /&gt;So this is my modified code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (aInString[pos] == '@')&lt;br /&gt;{&lt;br /&gt;     nsDependentString inString(aInString, aInLength);&lt;br /&gt;     if ( (inString.FindChar('.', pos) != kNotFound) &amp;&amp; &lt;br /&gt;          (inString.CharAt(pos+1) != '.') &amp;&amp;&lt;br /&gt;          (inString.Find("..", pos) == kNotFound) &amp;&amp; &lt;br /&gt;          (inString.CharAt(inString.length()-1) != '.')&amp;&amp;&lt;br /&gt;          (pos!=0))&lt;br /&gt;     {&lt;br /&gt;       aOutString.AssignLiteral("mailto:");&lt;br /&gt;       aOutString += aInString;&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately I didn’t test or patch it :( for a well known reason :D, so can some one test it for me ??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-817435786457809033?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/817435786457809033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/11/fixing-thunderbird-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/817435786457809033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/817435786457809033'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/11/fixing-thunderbird-bug.html' title='Fixing the Thunderbird bug'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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-4545233652388802981.post-6166179270522490762</id><published>2009-10-26T02:33:00.000-07:00</published><updated>2009-10-26T02:35:12.245-07:00</updated><title type='text'>Processing.js First project</title><content type='html'>In the first Processing.js Project, I worked with Eng. Sarah Nagaty and Eng. Omar Roushdy, we worked on creating an interface to show the contributions of each user in a nice way, but we failed to get the values of the contributions in an array to be used in our Processing.js code, so we tried to get the names only, we got them in an XML file using a query, but unfortunately we couldn’t use it also, so we just entered the users in a static way in an array and used it, hopefully soon we will find out how to do it and we will make an new release ;).&lt;br /&gt;&lt;br /&gt;The project we did just list objects of circles in an ordered way and assigns a name to each one, when the users enters the mouse inside the box of the circle the name of the user assigned to it will appear on the tip of the mouse. The colors of the circles are random degrees of blue.&lt;br /&gt;&lt;br /&gt;Finally, I used the “Get Source” button of the web IDE provided by Processingjs.org to get a file that works without support of any other files, and I changed the code inside of it to our code, and it works :), but for the text to appear you have to use Firefox, in chrome the text didn’t appear :(, and of course on IE it worked perfectly (kidding :D).&lt;br /&gt;&lt;br /&gt;In this post I discussed the work of our group altogether, not my individual work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-6166179270522490762?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/6166179270522490762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/10/processingjs-first-project.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/6166179270522490762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/6166179270522490762'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/10/processingjs-first-project.html' title='Processing.js First project'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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-4545233652388802981.post-3532663380068397376</id><published>2009-10-26T01:59:00.000-07:00</published><updated>2009-10-26T02:08:07.158-07:00</updated><title type='text'>Windows 7</title><content type='html'>I posted this picture on the wiki in the community humor page, but I think no one checks this page, you have to try Eng. Omar Roushdy Ubiquity command to go to this page it is really easy. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://se.bigbuddysociety.net/wiki/images/6/6e/W7.jpg"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 720px; height: 480px;" src="http://se.bigbuddysociety.net/wiki/images/6/6e/W7.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft tried to torpedo the success of the Japan Linux Symposium by launching their Windows 7 product that same day. They even had setup a big promotion booth across the street from the conference center.&lt;br /&gt;&lt;br /&gt;During a break, Linus went over there to make some fun of Microsoft. When he arrived there, Linus was sold immediately on the product as you can see in the picture. At least that's what the sales guy thought. He obviously had no idea who he was dealing with. But in the end Linus surprisingly did not buy a copy.&lt;br /&gt;&lt;br /&gt;Both of them look very funny in this picture :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-3532663380068397376?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/3532663380068397376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/10/windows-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/3532663380068397376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/3532663380068397376'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/10/windows-7.html' title='Windows 7'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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-4545233652388802981.post-8200263330894621816</id><published>2009-10-26T01:40:00.000-07:00</published><updated>2009-10-29T15:38:46.524-07:00</updated><title type='text'>Yet Another Review</title><content type='html'>Today I wrote a review on the reviewers of my review on the Cathedral and the Bazaar review :D, and then one of my reviewers will review my review on the reviewers of my review on the Cathedral and the Bazaar review, and more to come ..., as a very wise man said "till infinity and beyond" my friend Captain Buzz Lightyear, I hope I can see him in Toy Story 3 soon isA, for people who are interested the release date is 16 June 2010.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://vineetnov.files.wordpress.com/2009/05/poster_toystory3.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Back to the Cathedral and the Bazaar review, I think that after a while it will be something worth the wait, I wish Dr. Fatma best of luck in joining all the points together, and I have to say that I really admire your work and effort. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-8200263330894621816?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/8200263330894621816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/10/yet-another-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/8200263330894621816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/8200263330894621816'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/10/yet-another-review.html' title='Yet Another Review'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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-4545233652388802981.post-1743414247140643865</id><published>2009-10-19T12:27:00.000-07:00</published><updated>2009-10-19T13:09:22.746-07:00</updated><title type='text'>g-osc-user-cont (Ubiquity command)</title><content type='html'>function open_usercontributionspage(arguments) {&lt;br /&gt;&lt;br /&gt;      if(arguments.object.text!="")&lt;br /&gt;           Utils.focusUrlInBrowser("http://se.bigbuddysociety.net/wiki/index.php?title=Special:Contributions/" &lt;br /&gt;           + arguments.object.text);&lt;br /&gt;      else&lt;br /&gt;           Utils.focusUrlInBrowser("http://se.bigbuddysociety.net/wiki/index.php?title=Main_Page");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;CmdUtils.CreateCommand({&lt;br /&gt;&lt;br /&gt;	names: ["g-osc-user-cont"],&lt;br /&gt;	author: { name: "Mostafa ELkhouly", email: "mostafa-khouly@hotmail.com"},&lt;br /&gt;	description: "Go to the G-OSC User contributions page.",&lt;br /&gt;        arguments: [{role: "object", nountype: noun_arb_text,label: "Username"}],&lt;br /&gt;	execute: open_usercontributionspage,&lt;br /&gt;	icon: "http://se.bigbuddysociety.net/wiki/images/c/c4/GOSC-Logo-135.png",&lt;br /&gt;        preview: function (pblock){&lt;br /&gt;        pblock.innerHTML = "Go to the G-OSC User contributions page\t"    &lt;br /&gt;        +'&lt;&lt;im src=&lt;blockquote&gt;http://se.bigbuddysociety.net/wiki/images/c/c4/GOSC-Logo-135.png&lt;/blockquote&gt;/&gt;';}&lt;br /&gt;})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is the code of my first Ubiquity command, it is called "g-osc-user-cont", it is a very simple command it takes a username as an argument, and opens the contribution page of this username (if it is a valid username), but if the command is used without an argument it just opens the g-osc home page in a new tab. The command also uses the g-osc logo as an icon and it also appears in the preview window along with some text.&lt;br /&gt;&lt;br /&gt;Now I am going to talk about the implementation of the command, I think that the action of "names", "author", "description" and "icon" are quite obvious, so I am going to start with the "preview" which contains a function that adds some text and g-osc logo to the preview page of the command. The second part is the "execute" which calls the "open_usercontributionspage" with the arguments if any, this function checks the argument and extracts the text from it, if the text is empty it just goes to the g-osc home page, in any other case it uses the text of the argument to open the contributions page for the given text (even if it isn't a valid username), and that's it.&lt;br /&gt;&lt;br /&gt;One more thing I would like to thank Abdallah Elgindy for his blog post about using Utils.focusUrlInBrowser() instead of Utils.openUrlInBrowser().&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-1743414247140643865?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/1743414247140643865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/10/g-osc-user-cont-ubiquity-command.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/1743414247140643865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/1743414247140643865'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/10/g-osc-user-cont-ubiquity-command.html' title='g-osc-user-cont (Ubiquity command)'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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-4545233652388802981.post-5743542878497787522</id><published>2009-10-19T02:51:00.000-07:00</published><updated>2009-10-19T03:13:40.163-07:00</updated><title type='text'>My first post</title><content type='html'>Hello,&lt;br /&gt;First of all I am going to start by introducing myself. My name is Mostafa Elkhouly, I'm a computer science graduate from the GUC and currently I'm doing my pre-masters courses. This is my first post on a blog on my first blog, and I don't even like blogs :D. I'm just going to say what comes to my mind about this course (Open Source Development course), I am going to start by talking about the reviews I hate them !!!, and till now I don't know why are we doing them, and the best thing about the reviews is that my review was removed from the topics :D what an "egoboo". Btw after sharing my feelings towards this course on the blog I feel much better, maybe this blog will help me survive this course :). One more thing, the best thing in course up till now is the cookies : D.&lt;br /&gt;&lt;br /&gt;Soon I will post a feedback about my g-osc-user-cont (ubiquity command), and about the last lab, I didn’t have my laptop so I worked with Eng. Omar Roushdy, he is a very nice person, I hope we stay friends forever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4545233652388802981-5743542878497787522?l=mkhouly.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mkhouly.blogspot.com/feeds/5743542878497787522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mkhouly.blogspot.com/2009/10/my-first-post.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/5743542878497787522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4545233652388802981/posts/default/5743542878497787522'/><link rel='alternate' type='text/html' href='http://mkhouly.blogspot.com/2009/10/my-first-post.html' title='My first post'/><author><name>Khouly</name><uri>http://www.blogger.com/profile/13106180076840480327</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></feed>
