<?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'><id>tag:blogger.com,1999:blog-4032211823627011814</id><updated>2010-03-19T11:35:18.513-04:00</updated><title type='text'>Tanveer's Blog</title><subtitle type='html'>This blog showcases some of the things I love and hate.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default'/><link rel='alternate' type='text/html' href='http://blog.tanveer.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.tanveer.net/atom.xml'/><author><name>Tanveer</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4032211823627011814.post-6625381698453100115</id><published>2010-03-19T09:34:00.001-04:00</published><updated>2010-03-19T11:35:18.523-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gurmukhi'/><category scheme='http://www.blogger.com/atom/ns#' term='GMail'/><category scheme='http://www.blogger.com/atom/ns#' term='Transliteration'/><category scheme='http://www.blogger.com/atom/ns#' term='हिंदी'/><category scheme='http://www.blogger.com/atom/ns#' term='Punjabi'/><category scheme='http://www.blogger.com/atom/ns#' term='Panjabi'/><category scheme='http://www.blogger.com/atom/ns#' term='Devanagari'/><category scheme='http://www.blogger.com/atom/ns#' term='Hindi'/><title type='text'>Using GMail's Transliteration tool to create documents in Punjabi(Gurmukhi) or Hindi or any other supported script</title><content type='html'>One can use GMail's transliteration tool to create documents in Punjabi(Gurmukhi) or Hindi or any other supported script. At the time of this writing GMail supports Arabic, Bangla, Gujrati, Hindi, Kannada, Malayalam, Marathi, Nepali, Punjabi, Tamil, Telugu, Urdu and Farsi. &amp;nbsp;If you are not already doing it, this post explains how you can do it.&lt;br /&gt;&lt;br /&gt;Launch your browser and open GMail. Now compose a new mail. If your browser looks like the following screenshot, then you do not have transliteration enabled at this time.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://www.tanveer.net/blog/uploaded_images/transliterate/1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now click on settings from the top right options and once "Settings" are loaded click on "Show all language options" as shown in the screenshot below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://www.tanveer.net/blog/uploaded_images/transliterate/2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After page loads up, you should be able to see a check box labelled "Enable Transliteration - type using Phonetic English", as shown in the screenshot below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now click on the dropdown and choose your preferred language for transliteration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click on "Save Changes" to enable transliteration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/5.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now compose a mail. You should be able to see an extra button labelled "ਅ" in case you selected "ਪੰਜਾਬੀ" or &amp;nbsp;"अ" in case you chose "हिन्दी" as your preferred language of transliteration, as shown in the following screenshots.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/6.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/6h.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://www.tanveer.net/blog/uploaded_images/transliterate/6h.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now assuming you want to create document in Punjabi, click on Transliteration button and start typing. In the following example, I typed sat sri akal.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/8.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/9.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/10.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://www.tanveer.net/blog/uploaded_images/transliterate/11.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;If you feel the word is incorrectly transliterated, you can fix it by clicking on the text and you will be provided with various options of the word as shown in the following screenshot.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://www.tanveer.net/blog/uploaded_images/transliterate/12.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Following is an example of creating a document in Hindi.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/6h.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://www.tanveer.net/blog/uploaded_images/transliterate/6h.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/7h.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://www.tanveer.net/blog/uploaded_images/transliterate/7h.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you feel the word was incorrectly transliterated, you can fix it by clicking on the text and you will be provided with various options of the word as shown in the following screenshot.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.tanveer.net/blog/uploaded_images/transliterate/8h.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://www.tanveer.net/blog/uploaded_images/transliterate/8h.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now you can not only send emails in Hindi/Punjabi or any other language supported by GMail, but you can also create other documents. Simply cut and paste the text from your browser to the other application and you are good to go.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4032211823627011814-6625381698453100115?l=blog.tanveer.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/6625381698453100115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.tanveer.net/2010/03/using-gmails-transliteration-tool-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/6625381698453100115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/6625381698453100115'/><link rel='alternate' type='text/html' href='http://blog.tanveer.net/2010/03/using-gmails-transliteration-tool-to.html' title='Using GMail&apos;s Transliteration tool to create documents in Punjabi(Gurmukhi) or Hindi or any other supported script'/><author><name>Tanveer</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08610971143354306130'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4032211823627011814.post-5678663182038960905</id><published>2009-10-22T17:26:00.056-04:00</published><updated>2010-01-19T14:34:49.478-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CAPTCHA'/><category scheme='http://www.blogger.com/atom/ns#' term='reverse Turing test'/><title type='text'>Creating a simple CAPTCHA tool</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/CAPTCHA"&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt;CAPTCHA&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt; or a reverse Turing test is used to stop bots or automated programs to spam or register for services such as free email services like GMail or Yahoo mail. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt;There are several types of CAPTCHAs being used. Following is the CAPTCHA being used by Google for it's services. This is a powerful CAPTCHA but not always human solvable. Does it frustrate users? You bet!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://blog.tanveer.net/uploaded_images/gmail_captcha-722982.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://blog.tanveer.net/uploaded_images/gmail_captcha-722979.jpg" style="cursor: pointer; display: block; height: 191px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt;Like Google's CAPTCHA Hotmail/Passport's CAPTCHA is also many times not human solvable. An example is shown below.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://blog.tanveer.net/uploaded_images/hotmail_captcha-752631.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://blog.tanveer.net/uploaded_images/hotmail_captcha-752622.jpg" style="cursor: pointer; display: block; height: 175px; margin: 0px auto 10px; text-align: center; width: 338px;" /&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;Another example of CAPTCHA, this time from Yahoo.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://blog.tanveer.net/uploaded_images/yahoo_captcha-714917.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://blog.tanveer.net/uploaded_images/yahoo_captcha-714913.jpg" style="cursor: pointer; display: block; height: 150px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt;The problem with most CAPTCHAs is that if they are strong enough(read unsolvable) for bots, they are then unsolvable by humans too, as various characters used are overlapped, distorted, sometimes characters get merged with their backgrounds and make them hard to decipher by humans too. Such an example of CAPTCHA I found some time back. Here it's for your viewing pleasure !&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://blog.tanveer.net/uploaded_images/aircanada_contest_captcha-756731.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://blog.tanveer.net/uploaded_images/aircanada_contest_captcha-756728.jpg" style="cursor: pointer; display: block; height: 241px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;In this post I'll explain how to implement a simple yet powerful enough CAPTCHA tool. Though I am trying to explain the concept using &lt;/span&gt;&lt;a href="http://www.php.net/"&gt;&lt;span style="font-size: small;"&gt;PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;, any language/platform can be used which knows how to interpret &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Truetype"&gt;&lt;span style="font-size: small;"&gt;TrueType&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt; fonts, &lt;/span&gt;&lt;a href="http://www.php.net/gd"&gt;&lt;span style="font-size: small;"&gt;create images dynamically&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt; and supports &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Http_session#Web_server_session_management"&gt;&lt;span style="font-size: small;"&gt;(HTTP) session management&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;. This is the first version of my CAPTCHA tool and it was done as a proof of concept.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Create a folder on server and save TrueType fonts you want to use for the CAPTCHA tool, in this folder. Ensure PHP has read permissions for the folder/files. The more the better.&lt;/li&gt;&lt;li&gt;Define an array $captchaChars, this shall hold all the charcters used in CAPTCHA.&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;$captchaChars = array("a", "b", "c", "d", "e", "f",&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt; "g", "h", "i", "j",  "k","l", "m", "n", "o", "p",&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt; "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" ,&lt;br /&gt;"1","2", "3","4", "5", "6", "7", "8", "9", "0",&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt; "A", "B", "C", "D", "E","F", "G", "H", "I", "J",&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt; "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",&lt;br /&gt;"U", "V", "W", "X", "Y", "Z"&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Define a variable to hold CAPTCHA text&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$captchaText = "";&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-size: small;"&gt;Define a variable to hold number of characters in the CAPTCHA(the more the better, but there will be a performance hit)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #ffff99;"&gt;$numChars = 7;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Generate CAPTCHA text by reading characters from&lt;/span&gt; "$captchaChars", randomly.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;for($i=0; $i &amp;lt; $numChars; $i++){ &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$captchaCharNum = rand(0, 61);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$captchaText .= $captchaChars[$captchaCharNum];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Start web session and save CAPTCHA text for validation later.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;session_start();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$_SESSION['captcha'] = $captchaText;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Create an image and then add random lines in the background to confuse bots&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;header("Content-type: image/jpeg");&lt;br /&gt;$im = imagecreate(155,60);&lt;br /&gt;$white = imagecolorallocate($im, rand(175,255),rand(175,255),rand(175,255));&lt;br /&gt;$black = imagecolorallocate($im, rand(0,125),rand(0,125),rand(0,125));&lt;br /&gt;&lt;br /&gt;$numLines = 10;&lt;br /&gt;&lt;br /&gt;for($i = 0; $i &amp;lt; $numLines; $i++){ &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$line_color = imagecolorallocate($im, rand(125,165),rand(0,255),rand(125,165));&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;imageline ($im, rand(0,160), rand(0,125), rand(0,125), rand(0,160), $line_color);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Choose a font randomly to create CAPTCHA text&lt;br /&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$randFont = rand(0, 45)&lt;/span&gt;&lt;span style="font-size: small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Finally add the CAPTCHA text to the image and send it to browser&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;imagettftext($im, 20, 0, 8, 35, $black, "path_to_capctha_fonts/$randFont".".ttf",  $captchaText);&lt;br /&gt;imagejpeg($im);&lt;br /&gt;imagedestroy($im);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Now create an HTML page with following code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;html&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;   &amp;lt;head&amp;gt;  &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt; &amp;lt;/head&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt; &amp;lt;body&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;  &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;form action="validate_user.php" method="post"&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;   &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;img src="captcha.php" /&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;   &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;input type="text" name="captcha_text" maxlength="7" title="Enter text in the image"  style="font-size:8;"&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;   &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;input type="Submit" name="submit"&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;  &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt; &amp;lt;/body&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&amp;lt;/html&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&amp;lt;img src="captcha.php" /&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt; is what renders the CAPTCHA on browser.&lt;/li&gt;&lt;/ul&gt;Now we shall see how server side validation code looks like.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;session_start();&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;$captcha = $_SESSION['captcha'];&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;$userCaptcha = $_POST['captcha_text'];&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The code above starts a session and reads the CAPTCHA text's value which was saved earlier in the session&lt;/li&gt;&lt;li&gt;The value entered by user in CAPTCHA validation field is read from the HTTP request&lt;/li&gt;&lt;li&gt;This CAPTCHA tool forgives users for mistaking i or I for 1, z or Z for 2, o or O for 0 etc&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;$processAdvanced = false;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;if(preg_match("/\B[i|I|1|l|s|S|5|2|z|Z|o|0|O|q|9|g]\B/i", $captcha)){&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;$processAdvanced = true;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;First check if there are any characters present which user can easily make mistakes in reading, if there are then replace these characters for validation.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;if($processAdvanced){&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$patterns[0] = '/[i|I|i|l]/';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$patterns[1] = '/[s|S|5]/';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$patterns[2] = '/[2|z|Z]/';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$patterns[3] = '/[o|O|0]/';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$patterns[4] = '/[q|9|g]/';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$replacements[0] = 'i';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$replacements[1] = 's';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$replacements[2] = 'z';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$replacements[3] = 'o';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$replacements[4] = 'q';&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;//Replace the chars in both $captcha and $userCaptcha&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$captcha = preg_replace($patterns, $replacements, $captcha);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;$userCaptcha = preg_replace($patterns, $replacements, $userCaptcha);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #ffff99;"&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Finally validate and report it to the user/bot that whether validation succeeded or failed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;if(preg_match("/^$captcha$/i", $userCaptcha)){&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;echo "&amp;lt;h3 style="'color:green;background-color:ivory'"&amp;gt;You are indeed human&amp;lt;/h3&amp;gt;&lt;br /&gt;";&lt;br /&gt;} else {&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: pre;"&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #ffff99;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;echo "&amp;lt;h1 style="'color:red;background-color:ivory;font-weight:700'"&amp;gt;Looks like either you entered text incorrectly or you are a bot&amp;lt;/h1&amp;gt;";&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;You can see a demo of this CAPTCHA tool &lt;a href="http://dev.tanveer.net/captcha"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4032211823627011814-5678663182038960905?l=blog.tanveer.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/5678663182038960905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.tanveer.net/2009/10/creating-simple-captcha-tool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/5678663182038960905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/5678663182038960905'/><link rel='alternate' type='text/html' href='http://blog.tanveer.net/2009/10/creating-simple-captcha-tool.html' title='Creating a simple CAPTCHA tool'/><author><name>Tanveer</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08610971143354306130'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4032211823627011814.post-3674888553698241802</id><published>2009-10-09T15:14:00.028-04:00</published><updated>2009-10-10T20:27:42.295-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lacombe'/><category scheme='http://www.blogger.com/atom/ns#' term='Alberta'/><category scheme='http://www.blogger.com/atom/ns#' term='murals'/><category scheme='http://www.blogger.com/atom/ns#' term='locomotive'/><category scheme='http://www.blogger.com/atom/ns#' term='Hwy 2'/><category scheme='http://www.blogger.com/atom/ns#' term='trash bin'/><title type='text'>Murals of Lacombe</title><content type='html'>&lt;div&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Lacombe&lt;/span&gt; is a small town with a population of about 11200 in central Alberta. Its located on Hwy 2 about 120 KM from Edmonton and about 180 KM from Calgary. This town has lots of murals painted in the back alleys around its downtown.&lt;br /&gt;&lt;br /&gt;Here are most of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Lacombe&lt;/span&gt; murals.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/victoria-748190.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/victoria-748174.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/unfinished-748221.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/unfinished-748208.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/railway_xing-774320.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/railway_xing-774306.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;My personal favorite is the following one, train station with two steam locomotives.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/train_stn-774355.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/train_stn-774341.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;It all started with painting of these garbage bins. Various artists have painted these garbage bins, and most of these murals on back alleys of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Lacombe&lt;/span&gt; have been painted by a guy called Tim.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/trash_cat_music-714157.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/trash_cat_music-714134.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/trash_cars-714112.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/trash_cars-714097.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/trash_barn_sky-743038.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://blog.tanveer.net/uploaded_images/trash_barn_sky-743023.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/trash_barn_milk_cans-743003.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/trash_barn_milk_cans-742988.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/pool_tables-748041.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/pool_tables-748025.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/photo_shop-748004.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/photo_shop-747988.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/market_sqr-799703.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/market_sqr-799688.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/kitchen-799668.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/kitchen-799652.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/horse_dog_carts-756755.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/horse_dog_carts-756739.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/horse_family-756807.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/horse_family-756792.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/guys_on_ladder-791723.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://blog.tanveer.net/uploaded_images/guys_on_ladder-791707.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/gen_merchant-791760.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://blog.tanveer.net/uploaded_images/gen_merchant-791744.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/guys_on_ladder-755585.jpg"&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/gen_merchant-755547.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/cottage_mkt_place-757401.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/cottage_mkt_place-757387.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/army_truck-757368.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://blog.tanveer.net/uploaded_images/army_truck-757352.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Tim at work.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.tanveer.net/uploaded_images/tim-734011.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://blog.tanveer.net/uploaded_images/tim-733987.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4032211823627011814-3674888553698241802?l=blog.tanveer.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/3674888553698241802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.tanveer.net/2009/10/murals-of-lacombe.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/3674888553698241802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/3674888553698241802'/><link rel='alternate' type='text/html' href='http://blog.tanveer.net/2009/10/murals-of-lacombe.html' title='Murals of Lacombe'/><author><name>Tanveer</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08610971143354306130'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4032211823627011814.post-922088329250605415</id><published>2008-11-09T18:39:00.008-05:00</published><updated>2010-01-19T14:31:57.238-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='हिंदी'/><category scheme='http://www.blogger.com/atom/ns#' term='phonetic keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='कुंजिपटल'/><category scheme='http://www.blogger.com/atom/ns#' term='Devanagari'/><category scheme='http://www.blogger.com/atom/ns#' term='Hindi'/><title type='text'>Devnagri Keyboard(देवनागरी कुंजीपटल)</title><content type='html'>Devanagri is the script widely used to write Sanskrit, Hindi and other North Indian languages like Marwari, Dogri, Braj Bhasha, Bhojpuri, Nepali and to some extent Konkani and Marathi. Konkani and Marathi are spoken in the Western India. Some Punjabis especially Hindus write Punjabi in Devanagari script.&lt;br /&gt;&lt;br /&gt;I have created a phonetic keyboard for Mircrosoft Windows XP and Microsoft Windows Vista. This article has been written using this keyboard only. Use of this keyboard is very simple as this is a phonetic keyboard. You can download it from &lt;a href="http://www.tanveer.net/downloads/GGS_DNHI.zip"&gt;here&lt;/a&gt;. Most of the consonants are mapped to their Roman transliterated letters such as 'क' is mapped to 'k' (lowercase) while 'ख' is mapped to uppercase 'K'. Similarly vowels are mapped in this fashion. 'ा'  is mapped to 'a' lowercase while 'ां' is mapped to uppercase 'A'. 'ि'  is mapped to 'i' lowercase and 'ी' is mapped to 'I' uppercase etc. Complete mapping keys are provided in the installation guide provided with the download. Download today and start creating Hindi articles and text in Devanagari. A web page created    using Windows is viewable on Mac OS X, and Linux(Ubuntu 09.10) computers too.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Disclaimer:Microsoft, Windows and Vista are registered trademarks of Microsoft Corp, Mac OS X is trademark of Apple Inc, Linux is registerd trademark of Linus Torvalds and I don't intend to declare these my own. :-)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;देवनागरी लिपी का उपयोग मुख्यतः संसकृत । हिंदी और दूसरी उत्तर भारतीय भाषाएं लिखने मे होता है जैसे मारवाड़ी । हरियाणवी । डोगरी । बृज भाषा । भोजपुरी । नेपाली एवं कुछ हद तक कोंकणी और मराठी भी॥ कोंकणी और मराठी पश्चिम भारत मे बोली जाती है॥ कुछ पंजाबी मुख्यतः हिंदू । पंजाबी लिखने के लिए देवनागरी लिपी का उपयोग करते हैं॥ मैने एक देवनागरी का कुंजिपटल(Keyboard) तैयार किया है जो कि एक स्वर सूचक(Phonetic) कुंजिपटल है॥ यह कुंजिपटल माइक्रोसौफ्ट विंडोज़ ऐक्स पी एवं विंडोज़ विस्टा के लिए योग्य है॥ जैसे 'राजा' लिखने के लिए आप को 'raja' शब्द टाईप करने की आवश्यक्ता है॥ इसी तरह 'स्वर' लिखने के लिए आप को 's~vr' शब्द टाईप करने की आवश्यक्ता है॥ कोई भी शब्द अगर आप आधा लिखना चाहते हैं तो उस शब्द के बाद आप '~' टाईप करें॥ उम्मीद करता हूं की आप इस कुंजिपटल का इस्तेमाल कर के हिंदी एवं अन्य भाषाऒं मे लेख लिख सकेंगे एवं पत्राचार कर पाएंगे॥ आप इस कुंजिपटल को &lt;a href="http://www.tanveer.net/downloads/GGS_DNHI.zip"&gt;यहां &lt;/a&gt;से प्राप्त कर सकते हैं॥&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4032211823627011814-922088329250605415?l=blog.tanveer.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/922088329250605415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.tanveer.net/2008/11/blog-post_09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/922088329250605415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/922088329250605415'/><link rel='alternate' type='text/html' href='http://blog.tanveer.net/2008/11/blog-post_09.html' title='Devnagri Keyboard(देवनागरी कुंजीपटल)'/><author><name>Tanveer</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08610971143354306130'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4032211823627011814.post-5326939761858593032</id><published>2008-11-03T22:10:00.006-05:00</published><updated>2010-01-19T14:32:35.578-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gurmukhi'/><category scheme='http://www.blogger.com/atom/ns#' term='Punjabi'/><category scheme='http://www.blogger.com/atom/ns#' term='phonetic keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Panjabi'/><title type='text'>Gurmukhi Keyboard(ਗੁਰਮੂਖੀ ਕੀਬੋਰੱਡ)</title><content type='html'>Punjabi in Eastern Punjab is predominantly written using Gurmukhi script, while in Western Punjab it's usually written in Shamukhi script. I have created a keyboard which works with Microsoft Windows XP and Mircosoft Windows Vista operating systems. This article has been written using this keyboard only. Use of this keyboard is very simple as this is a phonetic keyboard.  You can download it from &lt;a href="http://www.tanveer.net/downloads/gurmukhi.zip"&gt;here&lt;/a&gt;. Most of the consonants are mapped to their Roman transliterated letters such as 'ਕ' is mapped to 'k' (lowercase) while 'ਖ' is mapped to uppercase 'K'. Similarly vowels are mapped in this fashion. 'ਾ'  Kanna is mapped to 'a' lowercase while 'ਾਂ' Kanna with bindi is mapped to uppercase 'A'. 'ਿ' Sihari is mapped to 'i' lowercase and 'ੀ' Bihari is mapped to 'I' uppercase etc. Complete mapping keys are provided in the installation guide provided with the download. Download today and start creating punjabi articles and text in Gurmukhi. A web page created    using Windows is viewable on Mac OS X, and Linux(Ubuntu 09.10) computers too.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Disclaimer:Microsoft, Windows and Vista are registered trademarks of Microsoft Corp, Mac OS X is trademark of Apple Inc, Linux is registerd trademark of Linus Torvalds and I don't intend to declare these my own. :-)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ਪੰਜਾਬੀ ਚੜਦੇ ਪੰਜਾਬ'ਚ ਗੁਰਮੂਖੀ'ਚ ਲਿਖੀ ਜਾਂਦੀ ਹੈ ਪਰ ਲਹਿੰਦੇ ਪੰਜਾਬ'ਚ ਸ਼ਾਹਮੁਖੀ ਦੀ ਹੀ ਵਰਤੋ ਹੁੰਦੀ ਹੈ॥ ਮੈ ਇਕ ਕੀਬੋਰੱਡ ਬਨਾਇਆ ਹੈ ਜੋ ਮਾਈਕ੍ਰੋਸੋਫੱਟ ਵਿੰਡੋਜ਼ ਐਕੱਸ ਪੀ ਅਤੇ ਮਾਈਕ੍ਰੋਸੋਫੱਟ ਵਿੰਡੋਜ਼ ਵਿਸਟਾ'ਚ ਕੰਮ ਕਰਦਾ ਹੈ॥ ਇਹ ਕੀਬੋਰਡ ਸਿਖਨਾ ਬੜਾ ਹੀ ਅਸਾਨ ਹੈ ਕਿਉੰਕਿ ਇਹ ਫੋਨੈਟਿਕ ਕੀਬੋਰਡ ਹੈ॥ ਇਹ ਲੇਖ ਮੈਂ ਇਸੇ ਕੀਬੋਰਡ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਲਿਖਿਆ ਹੈ॥ ਤੁਸੀ ਇਹ ਕੀਬੋਰੱਡ &lt;a href="http://www.tanveer.net/downloads/gurmukhi.zip"&gt;ਏਥੋਂ&lt;/a&gt; ਪਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋਂ॥&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4032211823627011814-5326939761858593032?l=blog.tanveer.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/5326939761858593032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.tanveer.net/2008/11/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/5326939761858593032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4032211823627011814/posts/default/5326939761858593032'/><link rel='alternate' type='text/html' href='http://blog.tanveer.net/2008/11/blog-post.html' title='Gurmukhi Keyboard(ਗੁਰਮੂਖੀ ਕੀਬੋਰੱਡ)'/><author><name>Tanveer</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='08610971143354306130'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
