<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Cogito, ergo sum</title>
	<atom:link href="http://mnshankar.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mnshankar.wordpress.com</link>
	<description>Here&#039;s hoping my musings can help you out!</description>
	<lastBuildDate>Mon, 30 Nov 2009 21:52:56 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='mnshankar.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/208c8453426b04e6d750cf1de3925615?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Cogito, ergo sum</title>
		<link>http://mnshankar.wordpress.com</link>
	</image>
			<item>
		<title>HTML Email Using Zend_Mail</title>
		<link>http://mnshankar.wordpress.com/2009/11/23/html-email-using-zend_mail/</link>
		<comments>http://mnshankar.wordpress.com/2009/11/23/html-email-using-zend_mail/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 16:29:50 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/11/23/html-email-using-zend_mail/</guid>
		<description><![CDATA[The Zend Framework provides an extremely handy component for sending out Emails from your web applications &#8211; Zend_Mail
You no longer have to struggle with the nitty-gritty of smtp headers. Sending HTML mail using&#160; this component is pretty straight-forward:
$mail = new Zend_Mail();$mail-&#62;setBodyHtml($msg);$mail-&#62;setFrom($from_email);$mail-&#62;setSubject($subject);$mail-&#62;addTo($toAddress);$mail-&#62;send();

The code shown above is the &#8220;minimal&#8221; configuration, and gets the job done in most [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10263&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The Zend Framework provides an extremely handy component for sending out Emails from your web applications &#8211; <strong>Zend_Mail</strong></p>
<p>You no longer have to struggle with the nitty-gritty of smtp headers. Sending HTML mail using&nbsp; this component is pretty straight-forward:</p>
<blockquote><p>$mail = new Zend_Mail();<br />$mail-&gt;setBodyHtml($msg);<br />$mail-&gt;setFrom($from_email);<br />$mail-&gt;setSubject($subject);<br />$mail-&gt;addTo($toAddress);<br />$mail-&gt;send();</p>
</blockquote>
<p>The code shown above is the &#8220;minimal&#8221; configuration, and gets the job done in most cases. However, with spam control being widely adopted, it is imperative that you follow certain guidelines so that your mail does not get blocked or sent to the spam or junk folder (in Outlook). </p>
<p>It took me a day of tweaking to figure out the issues with my code above that were causing MS Outlook to redirect mails, that were generated by the code above, to the &#8220;Junk&#8221; folder. </p>
<p>The first step is to fixing this is to understand the &#8220;internet headers&#8221; that get generated when email is sent. In Outlook 2007, You can view this information by right-clicking on the message and selecting &#8220;Message Options&#8221;. The internet headers are displayed at the bottom in a read-only text area. </p>
<p>Our work email server uses a Barracuda spam filter(additionally). Barracuda uses a set of rules to deduce whether an email is &#8220;spam-like&#8221;.&nbsp; Outlook uses a similar engine to compute the spam probability of EVERY mail that it receives. The higher the score (sum of points), the more likely it is that the email is spam. </p>
<p>The barracuda spam report gets conveniently included in the internet headers for us, and is a good starting point to figure out the problem areas. Here is what my header looks like:</p>
<p>&nbsp;</p>
<blockquote><p>X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.15034<br />&nbsp;&nbsp;&nbsp; Rule breakdown below<br />&nbsp;&nbsp;&nbsp;&nbsp; pts rule name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description<br />&nbsp;&nbsp;&nbsp; &#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />&nbsp;&nbsp;&nbsp; 0.00 NO_REAL_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From: does not include a real name<br />&nbsp;&nbsp;&nbsp; 0.00 HTML_MESSAGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY: HTML included in message<br />&nbsp;&nbsp;&nbsp; 0.00 MIME_HTML_ONLY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY: Message only has text/html MIME parts<br />&nbsp;&nbsp;&nbsp; 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Domain<br /> 
<p>X-MS-Exchange-Organization-SCL: 5<br />X-MS-Exchange-Organization-PCL: 2</p>
</blockquote>
<p>&nbsp;
<p>Note that the X-MS-Exchange-Organization-SCL score is &#8216;5&#8242;. This is the Exchange &#8220;Spam Confidence Level&#8221; on a range of 0-9. A number &gt;=5 automatically classifies the email as Junk.
<p>Notice that the &#8220;points&#8221; assigned for the first 3 items are &#8220;0&#8243;. So, from the Barracuda point of view, it is informational only. However, Outlook assigns different points to these items (and, we have no way of viewing the score assigned by Outlook). So, we need to take a look at ALL the barracuda messages one by one.
<p>1. NO_REAL_NAME : Easy fix.. use the overloaded forms of setFrom, addTo, addCC, addBcc that allow including the real name.
<p>2 &amp; 3. HTML_MESSAGE and MIME_HTML_ONLY:
<p>These messages are linked. Most modern email clients allow users the option of viewing &#8220;text-only&#8221; versions. So, whenever you send out HTML mail, you SHOULD ALSO ALWAYS use the setBodyText() method to send the alternative plain text mail.
<p>4. BSF_SC0_SA_TO_FROM_DOMAIN_MATCH : This means that the domain from where we are sending emails matches the destination. Yes.. we are trying to send emails internally within the organization&#8230; so, we just have to take this as an informational message and move along.
<p>After making the above changes, our code looks like:<br />
<blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail = new Zend_Mail();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail-&gt;setBodyText(strip_tags($msg));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail-&gt;setBodyHtml($msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail-&gt;setFrom($from_email,&#8221;my name&#8221;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail-&gt;setSubject($subject);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail-&gt;addTo(<a href="mailto:$toAddress@ufl.edu','Burne">$toAddress,$toName</a>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $mail-&gt;send();</p>
</blockquote>
<p>I have used the strip_tags PHP function to generate a text only version of the HTML message.
<p>A couple of important pointers here:
<ol>
<li>The html and text version should differ .. Otherwise, it will trigger another rule&nbsp; (Note the MPART_ALT_DIFF message) :<br />
<blockquote>
<p>X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.15146<br />&nbsp;&nbsp;&nbsp; Rule breakdown below<br />&nbsp;&nbsp;&nbsp;&nbsp; pts rule name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description<br />&nbsp;&nbsp;&nbsp; &#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />&nbsp;&nbsp;&nbsp; 0.00 HTML_MESSAGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY: HTML included in message<br />&nbsp;&nbsp;&nbsp; 0.14 MPART_ALT_DIFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY: HTML and text parts are different<br />&nbsp;&nbsp;&nbsp; 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Domain</p>
</blockquote>
<li>Do ensure that the HTML message that you send into in the setBodyHtml is WELL FORMED. Errors in your html will cause the message to be classified as spam.
<li>The &#8220;from address&#8221; MUST be a valid/existing email address.. Using fictitious email addresses is a sure way to increase the spam score.</li>
</ol>
<p>After the modifications, mail was being routed correctly. Here&#8217;s a peek at the internet header of the delievered mail:<br />
<blockquote>
<p>X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.15375<br />&nbsp;&nbsp;&nbsp; Rule breakdown below<br />&nbsp;&nbsp;&nbsp;&nbsp; pts rule name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description<br />&nbsp;&nbsp;&nbsp; &#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />&nbsp;&nbsp;&nbsp; 0.00 HTML_MESSAGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY: HTML included in message<br />&nbsp;&nbsp;&nbsp; 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Domain<br />X-MS-Exchange-Organization-SCL: 4<br />X-MS-Exchange-Organization-PCL: 2</p>
</blockquote>
<p>Ok.. so now, notice that the MS-Exchange-Organization-SCL score is at 4.</p>
<p>&nbsp;</p>
<p><strong>UPDATE (Nov 24, 2009)</strong>: <em>The above process worked yesterday.. but today, the score is back to 5. The kicker is that it is not consistent! Some emails get redirected to the junk and some are delivered ok. </em></p>
<p><em>So, finally, I decided to avoid HTML email altogether. I changed my emails to include only text along with a URL to view detail in all HTML glory. Outlook has made it too cumbersome to dependably send HTML formatted email.</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10263/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10263&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/11/23/html-email-using-zend_mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing Windows 7 (Gateway GT5628)</title>
		<link>http://mnshankar.wordpress.com/2009/08/19/installing-windows-7-gateway-gt5628/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/19/installing-windows-7-gateway-gt5628/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 13:05:08 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>
		<category><![CDATA[gateway 5628]]></category>
		<category><![CDATA[GT5628]]></category>
		<category><![CDATA[Management Engine Driver]]></category>
		<category><![CDATA[PCI Simple Communications Controller]]></category>
		<category><![CDATA[Windows 7 install problem]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/19/installing-windows-7-gateway-gt5628/</guid>
		<description><![CDATA[I just finished doing a fresh install of Windows 7 (X64) on my desktop computer.. Let me tell you, it was quite a struggle! Click here to view the specs of my workstation.
At first, the install process seemed fairly routine.. I restarted the computer after putting in the DVD and booting from it (fresh install). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10242&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just finished doing a fresh install of Windows 7 (X64) on my desktop computer.. Let me tell you, it was quite a struggle! <a href="http://support.gateway.com/s/PC/R/1014737R/1014737Rsp3.shtml" target="_blank">Click here to view the specs</a> of my workstation.</p>
<p>At first, the install process seemed fairly routine.. I restarted the computer after putting in the DVD and booting from it (fresh install). The Win 7 splash screen came up, and I was prompted to select the language. Next, a big &#8220;Install&#8221; button was displayed on the screen. On clicking the install button, the following cryptic error message was displayed:</p>
<p><strong>&#8220;A required CD/DVD drive device driver is missing. If you have a driver floppy disk, CD, DVD, or USB flash drive, please insert it now&#8221;</strong></p>
<p>Now, GT5628 uses an IDE/ATAPI Sony DVD/RW drive, and I have not had any problems it.. The message did not make much sense since the install was from the DVD and the drive seemed to boot and load Windows 7 normally.</p>
<p>A Google search took me to this informative site:</p>
<p><a title="http://www.sevenforums.com/drivers/4872-cd-dvd-driver-missing-install.html" href="http://www.sevenforums.com/drivers/4872-cd-dvd-driver-missing-install.html">http://www.sevenforums.com/drivers/4872-cd-dvd-driver-missing-install.html</a></p>
<p>I tried all suggested remedies:</p>
<ol>
<li>Burn another DVD at a slower speed &#8211; did not help</li>
<li>Set the jumper on the DVD drive to &#8220;Master&#8221; &#8211; did not help</li>
<li>Replaced the dvd drive with another working IDE drive &#8211; Still no luck</li>
<li>Replace the DVD drive with a SATA DVD &#8211; THIS IS THE SOLUTION THAT WORKED! It seems to me that the Win 7 installer is <strong>unable</strong> to work with a system that uses a combination of a SATA hard drive and an ATAPI DVD drive (Microsoft, are you listening?). Strange.. Vista installed on it without any problems!</li>
</ol>
<p>Once the DVD issue was sorted out, the install process completed quite smoothly. I then put back my IDE DVD drive and it works without any issues.</p>
<p>It feels so much snappier. The boot time (and resume time) are substantially smaller. The graphics and fonts are crisper too. Well worth the struggle!</p>
<p>The second problem that I encountered was due to a missing &#8211; &#8220;PCI Simple Communications Controller&#8221; in the &#8220;Device Manager&#8221; (All other 64 bit drivers were installed perfectly.. Kudos to Microsoft for bringing 64 bit OS into the mainstream). After a little searching around, I was able to isolate the missing driver to be &#8220;<strong>Intel® ME: Management Engine Driver</strong>&#8220;.</p>
<p>The latest version of this driver can be <a href="http://downloadcenter.intel.com/confirm.aspx?httpDown=http://downloadmirror.intel.com/13477/eng/MEI_AMT_allOS_3.0.30.1086_PV.zip&amp;agr=N&amp;ProductID=2806&amp;DwnldId=13477&amp;strOSs=All&amp;OSFullName=All Operating Systems&amp;lang=eng" target="_blank">downloaded from the Intel website</a>.</p>
<p>Extract the contents on your hard drive. Launch the &#8220;Setup&#8221; app. This will immediately throw an error that the operating system is incorrect. Win 7 then automagically detects the correct settings and prompts whether you want to install it using &#8220;Compatibility settings&#8221;.. Go ahead and click on that option. Watch the &#8220;Yellow bang&#8221; disappear from the device manager!</p>
<p>I hope my experience with this installation helps you out!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10242/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10242&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/19/installing-windows-7-gateway-gt5628/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>
	</item>
		<item>
		<title>Acer Ferrari 3400 Compatible With Windows 7</title>
		<link>http://mnshankar.wordpress.com/2009/08/15/acer-ferrari-3400-compatible-with-windows-7/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/15/acer-ferrari-3400-compatible-with-windows-7/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 23:38:53 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/15/acer-ferrari-3400-compatible-with-windows-7/</guid>
		<description><![CDATA[
Microsoft provides an application to check whether your computer is capable of running Windows 7 without issues. You can download it from here.
&#160;
Hmm.. So, my Acer Ferrari 3400 (that I purchased way back in 2003) is actually Windows 7 ready! Woo hoo.. I might just upgrade to the latest and best version of Windows.. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10238&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div id="SystemInfo">
<div id="Win7Message">Microsoft provides an application to check whether your computer is capable of running Windows 7 without issues. You can download it <a href="http://www.microsoft.com/windows/windows-7/get/upgrade-advisor.aspx">from here</a>.</div>
<div>&#160;</div>
<div>Hmm.. So, my Acer Ferrari 3400 (that I purchased way back in 2003) is actually Windows 7 ready! Woo hoo.. I might just upgrade to the latest and best version of Windows.. The report generated by the app is pasted below:</div>
<div>&#160;</div>
<div>There are some issues you should take a look at before installing Windows 7.</div>
</p></div>
<table id="report" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<th class="SectionHeader" colspan="4">System Requirements</th>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/excl.png" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Upgrade</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Backup system first </div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">You&#8217;ll need to perform a custom installation of Windows 7 and then reinstall your programs. Make sure to back up your files before you begin. <a href="http://go.microsoft.com/fwlink/?LinkId=148309">Go online to get important information about installing Windows 7. </a></div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">CPU speed</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">2.01 GHz</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">Your CPU meets the 1 GHz minimum requirement.</div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">RAM</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">2.00 GB</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">Your system memory meets the 1 GB requirement for 32-bit Windows 7 and the 2 GB requirement for 64-bit Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Hard Drive Free Space</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">41.47 GB</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">Your hard disk meets the minimum requirement of 16 GB free space for 32-bit Windows 7 and 20 GB free space for 64-bit Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Windows Aero</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Capable</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">Your system can run Windows Aero. </div>
</td>
</tr>
<tr>
<td class="SectionFooter" colspan="4"></td>
</tr>
</tbody>
<tbody>
<tr>
<th class="SectionHeader" colspan="4">Devices</th>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">ATI MOBILITY RADEON 9700</div>
<div class="ObjectDescCompany">ATI Technologies Inc.</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Action recommended</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">Run Windows Update after installing Windows 7 to make this device compatible. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Realtek AC&#8217;97 Audio for VIA (R) Audio Controller</div>
<div class="ObjectDescCompany">Realtek</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Action recommended</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">Run Windows Update after installing Windows 7 to make this device compatible. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Texas Instruments OHCI Compliant IEEE 1394 Host Controller</div>
<div class="ObjectDescCompany">Texas Instruments</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Texas Instruments PCI-4510 CardBus Controller</div>
<div class="ObjectDescCompany">Texas Instruments</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">VIA Bus Master IDE Controller</div>
<div class="ObjectDescCompany">VIA Technologies, Inc.</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">VIA Rev 5 or later USB Universal Host Controller</div>
<div class="ObjectDescCompany">VIA Technologies</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Agere Systems AC&#8217;97 Modem</div>
<div class="ObjectDescCompany">Agere</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">VIA USB Enhanced Host Controller</div>
<div class="ObjectDescCompany">VIA Technologies</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Broadcom NetXtreme Gigabit Ethernet</div>
<div class="ObjectDescCompany">Broadcom</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">WLAN 802.11g mini-PCI Module</div>
<div class="ObjectDescCompany">Broadcom</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/good.gif" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">USB Mass Storage Device</div>
<div class="ObjectDescCompany">Compatible USB storage device</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Compatible</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">This device is compatible with Windows 7. </div>
</td>
</tr>
<tr>
<td class="SectionFooter" colspan="4"></td>
</tr>
</tbody>
<tbody>
<tr>
<th class="SectionHeader" colspan="4">Programs</th>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/excl.png" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">McAfee VirusScan Enterprise</div>
<div class="ObjectDescVersion">version 8.6.0</div>
<div class="ObjectDescCompany">McAfee, Inc.</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Minor issues</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">You might experience minor issues using this program while running Windows 7. For more information, go online to the manufacturer&#8217;s website. </div>
</td>
</tr>
<tr>
<td class="StatusIcon">
<div class="Container"><img src="img/excl.png" width="16" height="16" /></div>
</td>
<td class="ObjectDesc">
<div class="Container">
<div class="ObjectDescTitle">Synaptics Pointing Device Driver</div>
</p></div>
</td>
<td class="ObjectBriefDetails">
<div class="Container">Minor issues</div>
</td>
<td class="ObjectMoreDetail">
<div class="Container">You might experience minor issues using this program while running Windows 7. For more information, go online to the manufacturer&#8217;s website. </div>
</td>
</tr>
<tr>
<td class="SectionFooter" colspan="4"></td>
</tr>
</tbody>
</table>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10238&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/15/acer-ferrari-3400-compatible-with-windows-7/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>

		<media:content url="img/excl.png" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/good.gif" medium="image" />

		<media:content url="img/excl.png" medium="image" />

		<media:content url="img/excl.png" medium="image" />
	</item>
		<item>
		<title>Understanding Zend Captcha</title>
		<link>http://mnshankar.wordpress.com/2009/08/13/understanding-zend-captcha-zend_captcha_image/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/13/understanding-zend-captcha-zend_captcha_image/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 20:23:22 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[CAPTCHA]]></category>
		<category><![CDATA[Zend_Captcha_Image]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/13/understanding-zend-captcha-zend_captcha_image/</guid>
		<description><![CDATA[A CAPTCHA image (Completely Automated Public Turing Test to Tell Computers and Humans Apart) is a novel solution to prevent spam. You will find these being used in almost all user registration pages. The most commonly used Captchas are images that look like :
&#160;
The logic is quite simple.. Present a randomly generated image to the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10232&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A CAPTCHA image (Completely Automated Public Turing Test to Tell Computers and Humans Apart) is a novel solution to prevent spam. You will find these being used in almost all user registration pages. The most commonly used Captchas are images that look like :
<p>&nbsp;<a href="http://mnshankar.files.wordpress.com/2009/08/cap1.png"><img style="border-width:0;" height="64" alt="cap" src="http://mnshankar.files.wordpress.com/2009/08/cap_thumb.png?w=204&#038;h=64" width="204" border="0"></a>
<p>The logic is quite simple.. Present a randomly generated image to the user and request that it be typed back. After the form is submitted, a check is made whether the text entered by the user matches the actual content of the graphic. If they do match, it is a human!
<p>The rendered graphic should have sufficient noise (lines, dots, curved fonts etc) so that simple OCRs (Optical Character Readers) do not bypass it.
<p>The Zend Framework provides a class named Zend_Captcha_Image that does all the heavy lifting required for captcha implementation. A complete working php file that demonstrates the salient points is listed below (the example has deliberately been kept simple by avoiding MVC/Zend_Form components):
<p><em>&lt;?php<br />include_once(&#8220;Zend/Captcha/image.php&#8221;);<br />include_once(&#8220;Zend/loader.php&#8221;);</p>
<p>$captcha=new Zend_Captcha_Image();<br />$captcha-&gt;setWordLen(&#8216;4&#8242;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setHeight(&#8216;60&#8242;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setFont(&#8216;arial.ttf&#8217;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setImgDir(&#8216;captcha&#8217;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setDotNoiseLevel(&#8216;5&#8242;) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setLineNoiseLevel(&#8216;5&#8242;); </em>
<p><em>//do this loop if form has been submitted!<br />if (isset($_POST['captcha']))<br />{<br />&nbsp;&nbsp;&nbsp; if ($captcha-&gt;isValid($_POST['captcha']))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &#8220;Success!&#8221;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(0);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //captcha invalid.. redisplay..<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &#8220;Failed!&#8221;;<br />&nbsp;&nbsp;&nbsp; }<br />}<br />//generate a new image on every loop..note that the location of this statement is important.. <br />//if placed before the if isset command, the captcha check will never result in true! </em>
<p><strong><em>$captchaId=$captcha-&gt;generate(); </em></strong>
<p><em>//display the form..<br />?&gt; </em>
<p><em>&lt;form action=&#8221;&lt;?php echo $_SERVER['PHP_SELF']?&gt;&#8221; method=&#8221;post&#8221;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;p&gt;What does the word below say?&lt;/p&gt;<br />&nbsp;&nbsp;&nbsp; &lt;img src=&#8221;captcha/&lt;?php echo $captchaId?&gt;.png&#8221; alt=&#8221;captcha&#8221;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type=&#8221;text&#8221; name=&#8221;captcha[input]&#8221; /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type=&#8221;hidden&#8221; value=&#8221;&lt;?php echo $captchaId?&gt;&#8221; name=&#8221;captcha[id]&#8221; /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type=&#8221;submit&#8221; value=&#8221;Test me&#8221; /&gt;<br />&lt;/form&gt;</em></p>
<p>Yeah.. it really is that simple!</p>
<p>The first two lines include the required Zend library files for use.</p>
<p>The next couple of lines instantiate the Zend_Captcha_Image object. Note that only the setFont() call is <strong>required</strong>.. All others are optional.</p>
<p>$captcha=new Zend_Captcha_Image();<br />$captcha-&gt;setWordLen(&#8216;4&#8242;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setHeight(&#8216;60&#8242;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setFont(&#8216;arial.ttf&#8217;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setImgDir(&#8216;captcha&#8217;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setDotNoiseLevel(&#8216;5&#8242;) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;setLineNoiseLevel(&#8216;5&#8242;); </p>
<p><strong>setWordLen</strong> : Number of characters in the rendered Captcha<br /><strong>setHeight</strong>: The height of the graphic<br /><strong>setFont</strong>: The font used to render the Captcha (<a href="http://alxr.usatlas.bnl.gov/lxr/source/atlas/Tools/AtlasDoxygen/fonts/ttf/arial.ttf?raw=1" target="_blank">Click here to download and use the Arial true type font</a>)<br /><strong>setImgDir</strong>: The image directory where Zend will create the image files (.png). The webserver should have write permissions to this folder<br /><strong>setDotNoiseLevel</strong>: The noise generated by random dots in the Captcha<br /><strong>setLineNoiseLevel</strong>: The noise generated by random lines in the Captcha</p>
<p>Feel free to play around with these parameters to see the effect they have on the generated captcha image.</p>
<p>The next few lines of code (executed on form submit) does the check using the inbuilt method <strong>isValid</strong>() on the Captcha object. This function expects as parameter, an array containing </p>
<p>1. The input typed in by the user &#8211; captcha['input']<br />2. The md5 hash of the generated captcha text that is conveniently returned by the generate() call and passed back as a hidden form variable &#8211; captcha['id']</p>
<p>The line </p>
<p><strong><em>$captchaId=$captcha-&gt;generate(); </em></strong></p>
<p>accomplishes quite a lot &#8211; It is responsible for the following:<br />1. Generating the captcha image and storing it in the specified image directory. PHP internally uses the gd graphics library to render the image. <br />2. Storing the &#8220;real value&#8221; corresponding to the image in a session variable<br />3. Returning an MD5 hash of the value that is generated. This hash value is used to name both the generated image file <strong>and</strong> the session variable (and that is why it needs to be passed into the isValid() method so the correct session variable can be queried)</p>
<p>The captcha image is created and stored in the folder specified by the <strong>setImgDir</strong>() function. The name follows the convention <strong>&lt;md5&gt;.png</strong>.. So, displaying the captcha to the user is simply a matter of displaying the generated image using an &lt;img src&gt; tag!</p>
<p>Zend_Captcha_Image class automatically deletes old/expired png files from the image directory (for those who don&#8217;t take my word for it, check the <strong>function _gc() </strong>routine in Zend/Captcha/Image.php.. This function is called after the <strong>generate()</strong> method &#8211; A randomization technique is employed to insure that the system does not spend too much time doing cleanup)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10232&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/13/understanding-zend-captcha-zend_captcha_image/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/cap_thumb.png" medium="image">
			<media:title type="html">cap</media:title>
		</media:content>
	</item>
		<item>
		<title>MySql Stored Procedure Invocation from PHP</title>
		<link>http://mnshankar.wordpress.com/2009/08/08/mysql-stored-procedure-invocation-from-php/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/08/mysql-stored-procedure-invocation-from-php/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 18:35:54 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[65536]]></category>
		<category><![CDATA[CLIENT_MULTI_STATEMENTS]]></category>
		<category><![CDATA[invoke from php]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql_connect]]></category>
		<category><![CDATA[stored procedures]]></category>
		<category><![CDATA[stored procs]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/08/mysql-stored-procedure-invocation-from-php/</guid>
		<description><![CDATA[MySQL ver 5.0 introduced the concept of stored procedures and functions. It is possible to write stored procedures that take parameters from your PHP script and return corresponding rows from the database.
Here is an example of a stored procedure named emp_proc(dept, fy) that takes the department and fiscal year as parameters and returns the first [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10231&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>MySQL ver 5.0 introduced the concept of stored procedures and functions. It is possible to write stored procedures that take parameters from your PHP script and return corresponding rows from the database.</p>
<p>Here is an example of a stored procedure named emp_proc(dept, fy) that takes the department and fiscal year as parameters and returns the first and last names of all matching employees in the employee table:</p>
<p>&nbsp;</p>
<p>CREATE&nbsp; PROCEDURE `emp_proc`(dept varchar(10), fy year)<br />begin
<p>SELECT <br />lastname, firstname FROM <br />employee<br />WHERE dept =&nbsp; dept AND fiscal_year=fy; </p>
<p>end;
<p>In the MySQL console, this stored proc can be run using the command:
<p><strong><em>call emp_proc(&#8216;Finance&#8217;,'2009&#8242;)</em></strong>
<p>This stored proc can be easily called from a PHP script too.. <strong>However</strong>, a slight change needs to be made to the Mysql connection to make this happen:
<p>Earlier:
<p>mysql_connect($dbhost, $dbuser, $dbpw);</p>
<p>Modified:</p>
<p><strong>mysql_connect($dbhost, $dbuser, $dbpw,true,65536);</strong></p>
<p>Two new parameters need to added to the <a href="http://us.php.net/function.mysql-connect" target="_blank">mysql_connect statement</a> to facilitate invoking stored procs from the script</p>
<p>&#8216;true&#8217; : signifies open a new connection<br />65536 : Client_Options flag that needs to be used as the last parameter</p>
<p>The following are ALL possible client options &#8211; extracted from the MySQL source code:<br /><tt><br />#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */<br />#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */<br />#define CLIENT_LONG_FLAG 4 /* Get all column flags */<br />#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */<br />#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */<br />#define CLIENT_COMPRESS 32 /* Can use compression protocol */<br />#define CLIENT_ODBC 64 /* Odbc client */<br />#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */<br />#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */<br />#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */<br />#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */<br />#define CLIENT_SSL 2048 /* Switch to SSL after handshake */<br />#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */<br />#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */<br />#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */<br />#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */<br />#define CLIENT_MULTI_STATEMENTS 65536 /* Enable/disable multi-stmt support */<br />#define CLIENT_MULTI_RESULTS 131072 /* Enable/disable multi-results */<br />#define CLIENT_REMEMBER_OPTIONS (((ulong) 1) &lt;&lt; 31)</tt></p>
<h5>Invoking a stored procedure/function from PHP requires the use of the CLIENT_MULTI_STATEMENTS flag.</h5>
<p><tt>The final php code that can access the stored procedure is:</tt></p>
<p>&lt;?php<br />include_once(&#8220;config.php&#8221;);//all dbconfig parameters go here<br /> 
<p>mysql_connect($dbhost, $dbuser, $dbpw,true,65536);<br />mysql_select_db($dbname);
<p>$current_fy = $_POST['year'];<br />$dept = $_POST['dept'];
<p>//execute sp on mysql.. note the modified mysql_connect to support this..<br />$select = &#8220;call emp_proc(&#8216;$dept&#8217;,'$current_fy&#8217;)&#8221;;<br />$result = mysql_query ( $select );<br />while ($row=mysql_fetch_array($result))<br />{<br />//process<br />}<br />?&gt;</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10231&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/08/mysql-stored-procedure-invocation-from-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>
	</item>
		<item>
		<title>Portable Software (U3) on my USB</title>
		<link>http://mnshankar.wordpress.com/2009/08/08/portable-software-u3-on-my-usb/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/08/portable-software-u3-on-my-usb/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 14:22:41 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Portable Chrome]]></category>
		<category><![CDATA[Portable CoreFTP]]></category>
		<category><![CDATA[Portable Irfanview]]></category>
		<category><![CDATA[Portable Keepass]]></category>
		<category><![CDATA[Portable Live Writer]]></category>
		<category><![CDATA[Portable Notepad]]></category>
		<category><![CDATA[Portable PackageFactory]]></category>
		<category><![CDATA[Portable Pidgin]]></category>
		<category><![CDATA[Portable utorrent]]></category>
		<category><![CDATA[Portable VLC]]></category>
		<category><![CDATA[U3]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/08/portable-software-u3-on-my-usb/</guid>
		<description><![CDATA[I recently purchased a Sandisk Cruzer Micro (4GB) USB drive. It comes with U3 on it, and I absolutely love this little piece of software! Now, I do realize that it is a windows-only option, proprietary code, yada, yada, yada.. but for my requirements (and a vast majority of you, I&#8217;m sure), it is a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10230&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I recently purchased a Sandisk Cruzer Micro (4GB) USB drive. It comes with U3 on it, and I absolutely love this little piece of software! Now, I do realize that it is a windows-only option, proprietary code, yada, yada, yada.. but for my requirements (and a vast majority of you, I&#8217;m sure), it is a great fit.</p>
<p>U3 drives are specially formatted and they actually contain a partition that separates the drive into two &#8211; A normal storage area, and a read-only part that emulates a CD containing the U3 code. CD emulation (ISO) is used on the partition to &#8216;trick&#8217; the windows host into launching the &#8216;autorun&#8217; file and displaying the launchpad GUI. </p>
<p>What this effectively means is that you cannot buy a normal USB drive and force it to run U3 by installing a program. You do have the option of deleting U3 from your drive though. </p>
<p><a href="http://portableapps.com/" target="_blank">PortableApps</a> is a competing open-source, free technology and has a similar feature set &#8211; Any application built for PortableApps can be very easily <a href="http://mnshankar.wordpress.com/2009/08/06/create-your-own-u3-apps/" target="_blank">converted</a> to be U3 compliant</p>
<p>When you load the U3 drive, it automatically opens the U3 launcher applet (after authentication of course.. another feature that I think is absolutely necessary in a tiny device with a huge potential to fall into the wrong hands). This is what my U3 launcher looks like:</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image7.png"><img style="border-width:0;" border="0" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb7.png?w=372&#038;h=484" width="372" height="484"></a> </p>
<p>&nbsp;</p>
<p>Over the months, I have collected a bunch of (mostly freeware) programs on my USB drive that I highly recommend:</p>
<p>Please read <a href="http://mnshankar.wordpress.com/2009/08/06/create-your-own-u3-apps/" target="_blank">my earlier post</a> regarding how you can easily make any portable/self contained application U3 compatible.</p>
<ol>
<li><a href="http://keepass.info/" target="_blank">KeePass 2.08</a>: This is an excellent password management suite. Definitely a must-have if you want to avoid sticking post-its all over your workplace <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
<li><a href="http://software.u3.com/Product_Details.aspx?ProductId=405" target="_blank">Pidgin</a>: A free universal chat client. Connects to a whole gamut of talk services. I use it to chat on AIM, Yahoo, Google, and our company XMPP chat.
<li><a href="http://www.irfanview.com/index.htm" target="_blank">Irfanview</a>: Awesome, lightweight image editing software. Great for cropping, reducing file size, adjusting brightness/contrast etc. I use this all the time for resizing/resampling images produced by my 10 MP camera into a more manageable 70 KB before emailing <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
<li><a href="http://stadt-bremerhaven.de/portable-chrome-021510/" target="_blank">Chrome</a>: Blazing fast Internet browser (loads much faster than FireFox). It has been converted to a portable format by a programmer in Denmark. It also includes an updater that you can use to download the latest and greatest version of Chrome (sweet!). <strong>Here is a tip</strong>: When you are creating the U3 software using PackageFactory, use IncognitoLoader.exe instead of the ChromeLoader.exe. This will ensure that your drive space is conserved. Chrome has no mechanism for setting a ceiling on the cache size.. So, it can very easily flood your USB drive (Of course you can clear your cache often, but using incognito mode is so much cleaner and easier!). Also, since there is no file caching in incognito mode, browsing speed is noticeably improved.
<li><a href="http://www.techlifeweb.com/2008/11/08/windows-live-writer-portable-version-3/" target="_blank">Windows Live writer</a>: The best blogging software. Period. Seamlessly connects to my WordPress account and helps me create draft blogs offline.
<li><a href="http://portableapps.com/apps/music_video/vlc_portable" target="_blank">VLC Media player</a> : I have yet to come across a file format that VLC player has refused to play!
<li><a href="http://www.utorrent.com/downloads" target="_blank">uTorrent</a> : Tiny tiny program which does a lot! Prior to using this 600KB program, I was using Azureus, a 50 MB behemoth!
<li><a href="http://portableapps.com/apps/development/notepadpp_portable" target="_blank">Notepad++</a>: Offers color formatting for most code.. Love the easily extensible plugin architecture (especially HexEditor)
<li><a href="http://www.eure.ca/" target="_blank">PackageFactory</a>: Easily make apps U3 compatible.
<li><a href="http://www.coreftp.com/download.html" target="_blank">CoreFTP</a>: Full featured light-weight GUI FTP client with support for SSL </li>
</ol>
<p> If you have any questions regarding any of the U3 apps described above, please drop me a line.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10230&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/08/portable-software-u3-on-my-usb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Bloom Filter</title>
		<link>http://mnshankar.wordpress.com/2009/08/07/bloom-filter/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/07/bloom-filter/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 19:01:07 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>
		<category><![CDATA[bloom filter]]></category>
		<category><![CDATA[hash]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/07/bloom-filter/</guid>
		<description><![CDATA[The Bloom Filter was invented by Burton Bloom in 1970 . The central intent of the algorithm is to answer one seemingly simple question:
&#8220;Is needle contained in haystack?&#8221;
Hmm.. how about using a linear search, binary search or hash search algorithm you ask ?? Well.. all are valid methods.. but the Bloom Filter stands out in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10224&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The Bloom Filter <a href="http://portal.acm.org/citation.cfm?id=362692&amp;dl=ACM&amp;coll=portal" target="_blank">was invented by Burton Bloom in 1970</a> . The central intent of the algorithm is to answer one seemingly simple question:</p>
<p>&#8220;Is <em>needle</em> contained in <em>haystack</em>?&#8221;</p>
<p>Hmm.. how about using a linear search, binary search or hash search algorithm you ask ?? Well.. all are valid methods.. but the Bloom Filter stands out in that it is super efficient at answering this question (especially if the set you are searching is really large).</p>
<p>There is another important difference. Most other search data structures store the data elements themselves.. A Bloom filter DOES NOT STORE DATA! This makes it incredibly space efficient. It only stores an array of bits &#8211; 0&#8217;s and 1&#8217;s. One caveat is that the bloom filter <em>might</em> return incorrect answers &#8211; also known as a false positives. If <em>needle</em> is present in <em>haystack</em>, it will <strong>definitely</strong> return &#8216;true&#8217; .. however, if we query for a non existent element, it might incorrectly return &#8216;true&#8217;. Obviously, for applications that make use of the Bloom filter, that degree of error is acceptable.</p>
<p>Google makes ample use of Bloom Filters.. For example, they are used</p>
<ul>
<li>In Google&#8217;s <a href="labs.google.com/papers/bigtable-osdi06.pdf " target="_blank">BigTable</a> distributed file system to minimize disk lookups</li>
<li>In Google cache routing algorithms for knocking precious milliseconds off their retrieval time</li>
<li>In Google Chrome browser for implementing &#8220;Safe browsing&#8221;</li>
</ul>
<p><a href="http://www.youtube.com/watch?v=947gWqwkhu0" target="_blank">Click here</a> for an informative YouTube video on the Google Tech Talks channel.</p>
<p>Bloom filters basically support two operations:</p>
<p>void bloom_add(&#8220;foo&#8221;);<br />
bool bloom_contains(&#8220;foo&#8221;);</p>
<p>Initially, the filter is set to an array of &#8216;m&#8217; bits (say 20) all initialized to 0 (the actual value of &#8216;m&#8217; is quite critical to the funtioning of the bloom filter and is dependant on the number of elements in the haystack, and the acceptable degree of errors/false positives)</p>
<table border="0" cellspacing="0" cellpadding="2" width="399">
<tbody>
<tr>
<td width="10" valign="top">Index</td>
<td width="15" valign="top">0</td>
<td width="16" valign="top">1</td>
<td width="17" valign="top">2</td>
<td width="17" valign="top">3</td>
<td width="17" valign="top">4</td>
<td width="17" valign="top">5</td>
<td width="17" valign="top">6</td>
<td width="17" valign="top">7</td>
<td width="17" valign="top">8</td>
<td width="17" valign="top">9</td>
<td width="22" valign="top">10</td>
<td width="22" valign="top">11</td>
<td width="22" valign="top">12</td>
<td width="22" valign="top">13</td>
<td width="22" valign="top">14</td>
<td width="22" valign="top">15</td>
<td width="22" valign="top">16</td>
<td width="22" valign="top">17</td>
<td width="22" valign="top">18</td>
<td width="22" valign="top">19</td>
</tr>
<tr>
<td width="10" valign="top">Bitmap</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="22" valign="top">0</td>
<td width="22" valign="top">0</td>
</tr>
</tbody>
</table>
<p>Internally, <em><a href="http://en.wikipedia.org/wiki/Hash_table" target="_blank">hash functions</a></em> are used to map added elements to indices into the filter array. It is important to use high-quality hash functions in the filter to guarantee that output is equally distributed over the entire index space.</p>
<p>Lets say that we use 3 hash functions (h1, h2 and h3) inside our algorithm each of which generates numbers in the range (1..m-1) which is 0 to 19 in our case. There is <a href="http://en.wikipedia.org/wiki/Bloom_filter" target="_blank">some math and probability calculation</a> that goes into determining the number of hash passes required and the optimal filter size.. but we can skip that for the purposes of this tutorial.</p>
<p>(From an implementation perspective, note that <a href="http://www.burtleburtle.net/bob/hash/doobs.html" target="_blank">libraries</a> already exist for generating high quality hash values, and running multiple hash functions simply means using different salts/initialization values in a loop)</p>
<p>Further, let us assume that the following hash values are returned:</p>
<p>h1(&#8220;foo&#8221;)=5<br />
h2(&#8220;foo&#8221;)=7<br />
h3(&#8220;foo&#8221;)=7</p>
<p>Now, the bits at each of these positions/indexes is set to &#8216;1&#8242; like so:</p>
<table border="0" cellspacing="0" cellpadding="2" width="399">
<tbody>
<tr>
<td width="10" valign="top">Index</td>
<td width="15" valign="top">0</td>
<td width="16" valign="top">1</td>
<td width="17" valign="top">2</td>
<td width="17" valign="top">3</td>
<td width="17" valign="top">4</td>
<td width="17" valign="top"><strong>5</strong></td>
<td width="17" valign="top">6</td>
<td width="17" valign="top"><strong>7</strong></td>
<td width="17" valign="top">8</td>
<td width="17" valign="top">9</td>
<td width="22" valign="top">10</td>
<td width="22" valign="top">11</td>
<td width="22" valign="top">12</td>
<td width="22" valign="top">13</td>
<td width="22" valign="top">14</td>
<td width="22" valign="top">15</td>
<td width="22" valign="top">16</td>
<td width="22" valign="top">17</td>
<td width="22" valign="top">18</td>
<td width="22" valign="top">19</td>
</tr>
<tr>
<td width="10" valign="top">Bitmap</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="17" valign="top"><strong>1</strong></td>
<td width="17" valign="top">0</td>
<td width="17" valign="top"><strong>1</strong></td>
<td width="17" valign="top">0</td>
<td width="17" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="23" valign="top">0</td>
<td width="22" valign="top">0</td>
<td width="22" valign="top">0</td>
</tr>
</tbody>
</table>
<p>Note : A particular bit may be set to 1 multiple times due to hash collisions (like position 7 above.. both h2 and h3 map into it).. but that is ok.</p>
<p><strong>A query is positive if and only if ALL bits returned by the hash functions are 1. If any of them is 0, then certainly the search term is not contained in the set.</strong></p>
<p>For example, to check the existance of &#8220;bar&#8221; in our set:<br />
Compute the 3 hashes of &#8220;bar&#8221;, and say, we get values of 1, 4 and 5. Checking the bit at position 1 in the array, we see that it is a &#8216;0&#8242;. So, &#8220;bar&#8221; CANNOT be present. We can return with the value &#8220;FALSE&#8221;.. There is no need to check other bits.</p>
<p>It is easy to see that the probability of false positives is directly proportional to the number of elements that are added to the set &#8211; As elements are added to the set, more bits are flipped.. which then makes it more likely that all hashes on a non-existant value will map to cells containing a &#8216;1&#8242;, thus resulting in false positives.. It is therefore imperative to estimate the size of the data set properly during initialization.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10224&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/07/bloom-filter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>
	</item>
		<item>
		<title>Create Your Own U3 Apps!</title>
		<link>http://mnshankar.wordpress.com/2009/08/06/create-your-own-u3-apps/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/06/create-your-own-u3-apps/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 19:12:28 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>
		<category><![CDATA[KeePass]]></category>
		<category><![CDATA[PackageFactory]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[PortableApps]]></category>
		<category><![CDATA[Thinstall]]></category>
		<category><![CDATA[U3]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/06/create-your-own-u3-apps/</guid>
		<description><![CDATA[It turns out, it is &#8220;really-really-ridiculously&#8221; easy to create your own U3 applications! The good folks at eure.ca have made available a tiny application named &#8220;PackageFactory&#8221; that does this magic (free of cost!).
Note that the application you are trying to convert to U3 must be self contained. i.e., It should not depend on the registry [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10223&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It turns out, it is &#8220;really-really-ridiculously&#8221; easy to create your own U3 applications! The good folks at <a href="http://www.eure.ca/" target="_blank">eure.ca</a> have made available a tiny application named &#8220;PackageFactory&#8221; that does this magic (free of cost!).</p>
<p>Note that the application you are trying to convert to U3 must be self contained. i.e., It should not depend on the registry and/or be tied to absolute directories. Applications that are built for <a href="http://portableapps.com/" target="_blank">PortableApps</a> are therefore excellent candidates for conversion to U3.</p>
<p>(Please be aware that you can create a &#8220;<a href="http://www.thinstall.com" target="_blank">thinstall</a>&#8221; of ANY application.. and then convert the resulting .exe file into a U3p file using PackageFactory!).</p>
<p>Here&#8217;s an example of how you can use PackageFactory to create a U3 version of the wildly popular password storage tool <a href="http://www.keepass.com" target="_blank">KeePass</a>:</p>
<p>1. Download and install PackageFactory</p>
<p>2. Download the Zip package of the latest version of KeePass (ver 2.08 as of this writing) from <a href="http://keepass.info/download.html" target="_blank">the KeePass website</a></p>
<p>3. Extract all the contents of the downloaded zip file into a folder on your computer:</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="153" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb.png?w=225&#038;h=153" width="225" border="0"></a> </p>
<p>4. Launch PackageFactory :</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image1.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="484" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb1.png?w=639&#038;h=484" width="639" border="0"></a>&nbsp;</p>
<p>5. Drag and drop the KeePass.exe file from the downloaded folder into the area marked for the purpose on the PackageFactory screen. Add/Edit the Program name and description fields as required, and then click on the &#8220;Create&#8221; arrow:</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image2.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="484" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb2.png?w=639&#038;h=484" width="639" border="0"></a> </p>
<p>6. The program then creates a .u3p file and prompts for a location to store the newly created file.. Select your desktop, and hit the &#8220;Save&#8221; button.</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image3.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="116" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb3.png?w=96&#038;h=116" width="96" border="0"></a> </p>
<p>7. Click on the U3 icon on your taskbar. Then, click on &#8220;Add Programs&#8221; and select &#8220;Install from my Computer&#8221;: </p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image4.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="484" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb4.png?w=378&#038;h=484" width="378" border="0"></a> </p>
<p>8. In the &#8220;Open File&#8221; dialog box that pops up, select the keepass.u3p file that you created (Step 6)</p>
<p>9. This will create the necessary scaffolding on the portable/USB device for &#8220;Keepass&#8221; &#8230; <strong>note that the application is still not ready to launch</strong> .. We have not yet added the required support files.</p>
<p>10. Navigate to the System/Apps folder on your U3 device, and locate the folder containing the KeePass.u3p file(This is a hidden folder.. so, you may need to update your folder options to show hidden files). It should look like:</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image5.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="484" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb5.png?w=531&#038;h=484" width="531" border="0"></a> </p>
<p>11. Copy the remaining KeePass support files from the extracted Zip file into the &#8220;Data&#8221; subfolder (K:\System\Apps\60F08E21-C250-4FDD-A804-CA25DD2892E2\Data in my case). Finally, the folder should contain ALL the files (and folders) that were present in the Un-Zipped (step 3 above):</p>
<p><a href="http://mnshankar.files.wordpress.com/2009/08/image6.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="414" alt="image" src="http://mnshankar.files.wordpress.com/2009/08/image_thumb6.png?w=644&#038;h=414" width="644" border="0"></a> </p>
<p>That&#8217;s it! You should now be able to launch KeePass from your U3 Launch applet!</p>
<p>Tip: You can actually convert the PackageFactory application into a U3 file using the same process and keep it handy on your USB device for future projects <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10223&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/06/create-your-own-u3-apps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/08/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>MySQL GUI Client (Windows)</title>
		<link>http://mnshankar.wordpress.com/2009/08/02/mysql-gui-client-windows/</link>
		<comments>http://mnshankar.wordpress.com/2009/08/02/mysql-gui-client-windows/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 15:14:27 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/08/02/mysql-gui-client-windows/</guid>
		<description><![CDATA[At work, I use MySql on a daily basis. Over the years, I have tried a lot of GUI clients to manage my database effectively:

MySQL Front: Very lightweight. Good for basic databse manipulation operations. Earlier (2005), this was free software.. now, it is shareware. GUI is not very intuitive
MySQL Workbench: From the MYSql stables.. Quite [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10208&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>At work, I use MySql on a daily basis. Over the years, I have tried a lot of GUI clients to manage my database effectively:</p>
<ol>
<li><a href="http://www.mysqlfront.de/" target="_blank">MySQL Front</a>: Very lightweight. Good for basic databse manipulation operations. Earlier (2005), this was free software.. now, it is shareware. GUI is not very intuitive</li>
<li><a href="http://dev.mysql.com/downloads/workbench/5.1.html" target="_blank">MySQL Workbench</a>: From the MYSql stables.. Quite buggy. Holds a lot of promise but still beta quality</li>
<li><a href="http://www.heidisql.com/?" target="_blank">HeidiSQL</a>: Good basic functionality.. Free software. Small and lightweight. Perfect for basic functionality.</li>
<li><a href="http://webyog.com/en/downloads.php#sqlyog" target="_blank">SQL Yog Community Edition</a>: Very good features.. My second best preference (after Navicat). The query builder on the full version is actually very close to what Microsoft provides for MSSql.</li>
<li><a href="http://www.phpmyedit.org/" target="_blank">PHPMyEdit (Web based)</a>: No GUI coolness.. but accessible from any browser as it is web-based. </li>
<li><a href="http://www.navicat.com/" target="_blank">Navicat 8.0</a> (Not free): Easily the best GUI for MySQL that I have laid my hands on!</li>
</ol>
<p>My vote is for Navicat.. Still not as as good as Microsoft, but by far, one of the most intuitive and feature-complete clients out there:</p>
<ul>
<li>Very windows like – Explorer style with intuitive drag and drop functionality everywhere. There is this little hidden feature to copy a table structure (I use this VERY often). Just drag and drop a table (in the same place or into a different database) and Navicat displays a context menu to copy either the entire table or just the structure! It works great with Vista.</li>
<li>Has options for “Queries” and “Reports”.. Now, these are not really database objects.. they are fully managed by Navicat and rendered on the fly (the files are typically stored on your hard drive at <strong>C:\Program Files\Navicat for MySQL\Home</strong>). Note that “Views” on the other hand are MySQL objects and are stored on the server</li>
<li>The table design mode brings up tabs for “Fields”, “Indexes”, “Foreign Keys” and “Triggers”. All options are very well laid out. Adding fields is very easy.</li>
<li>Nice StoredProc/Function dialog boxes</li>
<li>Very powerful “Import” and “Export” wizards.. It can move an entire MS Access database onto the sql server (and vice-versa). This is a great time-saver.. and it works flawlessly!</li>
<li>The query builder is not comparable to Microsoft but it does a decent job</li>
<li>Good built in User manager module</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10208&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/08/02/mysql-gui-client-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>
	</item>
		<item>
		<title>Setting up Zend Studio (Linux/Ubuntu)</title>
		<link>http://mnshankar.wordpress.com/2009/07/09/setting-up-zend-studio-linuxubuntu/</link>
		<comments>http://mnshankar.wordpress.com/2009/07/09/setting-up-zend-studio-linuxubuntu/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 02:06:14 +0000</pubDate>
		<dc:creator>mnshankar</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Hello World]]></category>
		<category><![CDATA[Setup]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Zend Core]]></category>
		<category><![CDATA[Zend Optimizer]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://mnshankar.wordpress.com/2009/07/09/setting-up-zend-studio-linuxubuntu/</guid>
		<description><![CDATA[Zend Studio, as you all must be aware, is a full featured PHP IDE. It does require a little setup so your Run/Debug experience is painless (after all, that is the true reason for using an IDE!).
The following assumptions are made:
1. You are running a linux OS
2. You already have a (working) LAMP setup on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10201&subd=mnshankar&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Zend Studio, as you all must be aware, is a full featured PHP IDE. It does require a little setup so your Run/Debug experience is painless (after all, that is the true reason for using an IDE!).</p>
<p>The following assumptions are made:</p>
<p>1. You are running a linux OS<br />
2. You already have a (working) LAMP setup on your workstation (http://localhost takes you to the homepage)</p>
<p>Here&#8217;s the process I used to setup zend studio on my system:</p>
<p>1. <a href="http://www.zend.com/en/products/platform/downloads">Download Zend Core</a>. This is REQUIRED for setting breakpoints and debugging web pages. Select &#8220;Zend Core V2.5(Win/Linux)&#8221;.. Be sure to select either 32 bit or 64 bit depending on the version of OS/apache2 installed.</p>
<p>Install the software (I prefer to be in &#8220;su&#8221; mode for all install operations).. Copy the downloaded tar file to the /opt directory. Then, run the following commands to install it..</p>
<p>root@ubuntu:/opt#<strong> tar -zxvf ZendCore-2.5.2-linux-glibc23-amd64.tar.gz </strong><br />
root@ubuntu:/opt# <strong>cd ZendCore-2.5.2-linux-glibc23-amd64</strong><br />
root@ubuntu:/opt/ZendCore-2.5.2-linux-glibc23-amd64# <strong>./install -g</strong></p>
<p>the &#8220;-g&#8221; option does a graphic install.. Please refer to the instructions (pdf) in the downloaded file. I selected the &#8220;Modify apache&#8221; option only. You do not require any other components installed.<br />
You will  be prompted for the location of apache on your computer. For some reason, the installer could not autodetect my main web folder (/var/www).. I entered it into the text field provided. A new directory /usr/local/Zend will be setup with appropriate directives in the apache2.conf file.</p>
<p>2. <a href="http://www.zend.com/en/products/guard/downloads" target="_blank">Download</a> and Install Zend Optimizer. Be sure to select the 32/64 bit version depending on your OS. Zend Optimizer enhances the running speed of php apps. The ZendCore front-end requires this to be installed. Since it is free, we do not complain!</p>
<p>Copy the download file over to the /opt directory<br />
Uncompress/extract the file (tar -zxvf same as in step 1)<br />
Navigate into the directory that is created<br />
Run the install script by using &#8220;sudo ./install&#8221;<br />
You will be prompted for the location of apache, php.ini file etc (it is a graphic installer).. finally it comes back with a confirmation that the setup is complete.</p>
<p>Now, you should be able to navigate to http://localhost/ZendCore and view your server in GUI goodness. Running phpinfo() should display the Zend Optimizer as being installed like so:<br />
<img src="http://mnshankar.files.wordpress.com/2009/07/moz-screenshot1.jpg" alt="" /><br />
3. Now, onto the task of actually setting up Zend Studio. By default, the ZS sets up a default workspace in your home directory:<br />
/home/<strong>username</strong>/Zend/workspaces/DefaultWorkspace</p>
<p>Projects that you create will be created in subfolders under this directory. Now, open up Zend Studio and create a new php project (file-&gt;new-&gt;PHP project). Give the project a name (<strong>phptest</strong>) and accept the default workspace.</p>
<p>Create a new php file inside the project (right click on project, New-&gt;php file).. Name it index.php<br />
Put the following lines in index.php.. It simply displays the php setup on our system:<br />
<em>&lt;?php<br />
phpinfo();<br />
?&gt;<br />
</em><br />
We are ready to test/run/debug our sample application. Before we can do that, we need to make the directory accessible from the web directory. The easiest way to do that is to open the file browser by typing &#8220;<em><span style="text-decoration:underline;"><strong>sudo nautilus</strong></span></em>&#8221; on the console window, navigating to the <strong>phptest</strong> folder, right clicking and selecting the &#8220;Make link&#8221; like so:</p>
<p><img src="http://mnshankar.files.wordpress.com/2009/07/moz-screenshot-11.jpg" alt="" /></p>
<p>This action will create a symbolic link to this folder in the same subdirectory. Go ahead and copy this folder link to the /var/www folder (this is the default web folder setup once apache is installed. Rename the sym link to &#8220;<strong>phptest</strong>&#8220;.</p>
<p>Thats it! Now, we are ready to run our php file within the Zend framework.. Click on the &#8220;Run&#8221; button.. Select &#8220;PHP web page&#8221;<br />
Next, you will be prompted for the Launch URL which in this case is <strong>http://localhost/phptest.</strong> You should now be able to run any php web app (including Zend Framework applications), set breakpoints, watch variables etc..</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mnshankar.wordpress.com/10201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mnshankar.wordpress.com/10201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mnshankar.wordpress.com/10201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mnshankar.wordpress.com/10201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mnshankar.wordpress.com/10201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mnshankar.wordpress.com/10201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mnshankar.wordpress.com/10201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mnshankar.wordpress.com/10201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mnshankar.wordpress.com/10201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mnshankar.wordpress.com/10201/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mnshankar.wordpress.com&blog=8005313&post=10201&subd=mnshankar&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mnshankar.wordpress.com/2009/07/09/setting-up-zend-studio-linuxubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/54eaf4a8492ddeea93a0d826041b3b7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mnshankar</media:title>
		</media:content>

		<media:content url="http://mnshankar.files.wordpress.com/2009/07/moz-screenshot1.jpg" medium="image" />

		<media:content url="http://mnshankar.files.wordpress.com/2009/07/moz-screenshot-11.jpg" medium="image" />
	</item>
	</channel>
</rss>