<?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/"
	>

<channel>
	<title>Design Shack &#187; Kishore Nallan</title>
	<atom:link href="http://designshack.net/author/kishore/feed" rel="self" type="application/rss+xml" />
	<link>http://designshack.net</link>
	<description>Inspiration, CSS Gallery &#38; Community News</description>
	<lastBuildDate>Thu, 09 Feb 2012 06:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Detecting Location Using Google AJAX API</title>
		<link>http://designshack.net/articles/javascript/detecting-location-using-google-ajax-api/</link>
		<comments>http://designshack.net/articles/javascript/detecting-location-using-google-ajax-api/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 13:48:17 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[maps]]></category>

		<guid isPermaLink="false">http://designshack.co.uk/?p=1546</guid>
		<description><![CDATA[There are times when one needs to find out which part of the world a particular visitor is coming from. There are plenty of IP-to-Location lookup providers out there, who offer this service at a reasonable cost (depending on how much detail you require). Google's AJAX Maps API offers this look up for you free of cost (so long your needs are non-commercial).]]></description>
			<content:encoded><![CDATA[<p><img src="http://designshack.net/wp-content/uploads/map.png" alt="map" title="map" width="229" height="319" class="right" />There are times when one needs to find out which part of the world a particular visitor is coming from. There are plenty of IP-to-Location  lookup providers out there, who offer this service at a reasonable cost (depending on how much detail you require).</p>
<p>Google&#8217;s AJAX Maps API offers this look up for you free of cost (so long your needs are non-commercial). You can even use the latitude and longitude information returned by the API to plot the user&#8217;s location on a Google Map. Nifty eh? Let&#8217;s now look at a simple example &#8211; we will be detecting the user&#8217;s location based on his IP address and rendering it on a map.</p>
<p>Before we begin, you might want to check out the <a href="http://designshack.net/tutorialexamples/location/demo.html">demo</a>.</p>
<p><span id="more-1546"></span></p>
<p>You will first need to obtain an <a href="http://code.google.com/apis/ajaxsearch/signup.html">AJAX Search API Key</a> (it&#8217;s free, just sign up using your domain name, and you will be given a unique key, which is applicable for all pages hosted within your domain). Once you have that ready, fire up your favorite editor. We don&#8217;t need any server side code to be able to use the Maps API &#8211; so a plain HTML document is enough.</p>
<p>First, let&#8217;s place the &#8220;hooks&#8221; in the page, where the map and a caption will appear.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;map&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;location&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>The Google AJAX API consists of a collection of individual APIs. By using a <code>&lt;script&gt;</code> tag in the head of the document, we will first load a single  method, <code>google.load</code>, using which we can load any or all of the APIs we need individually.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://www.google.com/jsapi?key=&lt;em&gt;YOUR_API_KEY&lt;/em&gt;&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>In our case, we just need the Maps API, so we do:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">google.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;maps&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;2&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>callback<span style="color: #339933;">:</span> initialize<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The load function above takes the API name, its version and an optional callback function (which is called once the Maps API has finished loading) as parameters. In the init() function, we will first define a default location to be displayed on the map, in case the Maps API is not able to decode the IP address of the visitor. Since the Maps API basically matches the user&#8217;s IP address to a location, there might be instances when this mapping is not possible, and hence the need for a default.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> zoom <span style="color: #339933;">=</span> <span style="color: #CC0000;">4</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> latlng <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> google.<span style="color: #660066;">maps</span>.<span style="color: #660066;">LatLng</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> location <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Showing default location for map.&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Next, we check if the client location was filled in by the API loader. If properly filled, the google.loader.ClientLocation object has the following properities:</p>
<ul>
<li>ClientLocation.latitude</li>
<li>ClientLocation.longitude</li>
<li>ClientLocation.address.city</li>
<li>ClientLocation.address.country</li>
<li>ClientLocation.address.country_code</li>
<li>ClientLocation.address.region</li>
</ul>
<p>Using this information, we can easily load a map, centred on the user&#8217;s location.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;location&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> location<span style="color: #339933;">;</span>		<span style="color: #006600; font-style: italic;">// location as text caption</span>
<span style="color: #003366; font-weight: bold;">var</span> map <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> google.<span style="color: #660066;">maps</span>.<span style="color: #660066;">Map2</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'map'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
map.<span style="color: #660066;">setCenter</span><span style="color: #009900;">&#40;</span>latlng<span style="color: #339933;">,</span> zoom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
map.<span style="color: #660066;">addControl</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> GLargeMapControl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
map.<span style="color: #660066;">addControl</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> GMapTypeControl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>That&#8217;s it, <a href="http://designshack.net/tutorialexamples/location/demo.html">see it in action</a>. As I have already stated above, the client location information returned by this API is not perfect, as IP mapping can often be tricky, and might result in incorrect, or partially accurate information. While you should consider going for an enterprise ready solution for serious uses, I hope this API will be handy for your personal needs!</p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/javascript/detecting-location-using-google-ajax-api/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>37 Beautiful Letterpress Business Cards</title>
		<link>http://designshack.net/articles/37-beautiful-letterpress-business-cards/</link>
		<comments>http://designshack.net/articles/37-beautiful-letterpress-business-cards/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 13:43:12 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[business card]]></category>
		<category><![CDATA[letterpress]]></category>

		<guid isPermaLink="false">http://designshack.co.uk/?p=1318</guid>
		<description><![CDATA[Designing business cards can be tricky, because it&#8217;s always difficult to make one which stands out from the hundreds of others in circulation! Letterpress definitely brings a new dimension to business cards. If you are looking to have a few printed, here are a range of catchy letterpress designs for inspiration. The idea of depth [...]]]></description>
			<content:encoded><![CDATA[<p>Designing business cards can be tricky, because it&#8217;s always difficult to make one which stands out from the hundreds of others in circulation! Letterpress definitely brings a new dimension to business cards.</p>
<p>If you are looking to have a few printed, here are a range of catchy letterpress designs for inspiration. The idea of depth and an embossed logo add a completely new element, and could well be the best way to really make an impression.</p>
<p><span id="more-1318"></span></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card1.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2319266591/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card2.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3248720119/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card3.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2687477448/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card4.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2686662819/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card5.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2969851319/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card6.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3478170119/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card7.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://jontangerine.com/log/2007/10/letterpress-print-design">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card8.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/8145349@N05/3082471405/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card9.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2794173321/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card10.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2588846956/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card11.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/8145349@N05/3118505847/in/photostream/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card12.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/supaflydesigns/3175477639/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card13.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3249671020/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card14.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/8145349@N05/3234076887/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card15.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3381166416/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card16.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/2378853558/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card17.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3252145724/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card18.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/8145349@N05/3308585731/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card19.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3252049272/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card20.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3466334595/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card21.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/messengerbirdpress/2144866853/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card22.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3436643920/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card23.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/smokeproof/3481903685/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card24.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3432423248/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card25.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3195756614/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card26.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/editorialpinch/2286835656/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card27.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/folkloreye/2865697065/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card28.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/crankypressman/3315731144/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card29.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/whativeffffound/3369119333/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card30.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/crankypressman/3025253474/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card31.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/smokeproof/3219212316/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card32.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/smokeproof/3219677852/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card33.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.beastpieces.com/2009/04/narrow-format-cards-with-day-glo-color/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card34.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.beastpieces.com/2009/04/electric-green-edges/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card35.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/crankypressman/3026549066/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card36.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/dolcepress/3101877860/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_card37.gif" alt="letterpress card" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/29768112@N04/3426152185/">View Example</a></p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/37-beautiful-letterpress-business-cards/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>27 Inspiring Letterpress Posters</title>
		<link>http://designshack.net/articles/graphics/27-inspiring-letterpress-posters/</link>
		<comments>http://designshack.net/articles/graphics/27-inspiring-letterpress-posters/#comments</comments>
		<pubDate>Tue, 12 May 2009 17:20:57 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[artwork]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[letterpress]]></category>
		<category><![CDATA[posters]]></category>

		<guid isPermaLink="false">http://designshack.co.uk/?p=1225</guid>
		<description><![CDATA[There has been a rather sudden revival of letterpress artwork in the past few years. No matter how much technology advances or how fast our laser printers get, one can&#8217;t help but admire the texture and beauty of this medium. This week, we want to show you some brilliant letterpress posters. Some of these are [...]]]></description>
			<content:encoded><![CDATA[<p>There has been a rather sudden revival of letterpress artwork in the past few years. No matter how much technology advances or how fast our laser printers get, one can&#8217;t help but admire the texture and beauty of this medium. </p>
<p>This week, we want to show you some brilliant letterpress posters. Some of these are printed using handmade wooden reliefs, some using metal type, some even using photopolymer plates (the preferred medium for letterpress plates these days). Whichever medium is employed &#8211; all of them are most certainly breathtaking!</p>
<p><span id="more-1225"></span></p>
<h2>Letterpress posters</h2>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster2.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.jharrisdesign.com/portfolio/letterpress_posters.php">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster3.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/kenthenderson/6824864/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster4.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://jacksoncreek.wordpress.com/2008/04/12/posters-for-type-and-letterpress-junkies/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster5.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.seadogpress.com/seadog/posters-cards-prints/posters/index.shtml">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster6.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://massartpress.org/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster7.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://blog.typoretum.co.uk/2009/02/18/the-occasional-print-club/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster8.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://ideas.veer.com/portfolio/533">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster9.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/71175064@N00/3406925502/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster10.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/rollandtumblepress/3188607204/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster11.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/mikeyburton/3367186824/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster12.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/cricketcam2000/394770173/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster13.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/36208657@N07/3344345320/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster1.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://syncop8.chattablogs.com/archives/2007/09/crabtree-farms-event.html">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster14.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/rollandtumblepress/3278115932/in/photostream/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster15.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/mightypop/2934827082/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster16.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/mightypop/2934832414/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster17.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/23916975@N07/3236197190/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster18.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/juniperberry/3188739649/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster19.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/solsken/2048191497/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster20.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/french_press/3082491362/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster21.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/smokeproof/3221255338/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster22.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/widgetsandstone/3267673676/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster23.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/superheroes/2679617611/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster24.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/designbyok/378432295/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster25.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/71175064@N00/3426980648/">View Example</a></p>
<p><img class="aligncenter size-full wp-image-1226" src="http://designshack.net/wp-content/uploads/lp_poster26.gif" alt="letterpress art" /></p>
<p><a class="smallbox" href="http://www.flickr.com/photos/ackmanu/3337488935/">View Example</a></p>
<p>I hope you enjoy the collection. Stay tuned for more letterpress inspiration from us over the coming weeks!</p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/graphics/27-inspiring-letterpress-posters/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Creating a Shaking Login Form</title>
		<link>http://designshack.net/articles/creating-a-shaking-login-form/</link>
		<comments>http://designshack.net/articles/creating-a-shaking-login-form/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 14:46:56 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[buzzing]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[shaking]]></category>
		<category><![CDATA[vibrating]]></category>

		<guid isPermaLink="false">http://designshack.co.uk/?p=944</guid>
		<description><![CDATA[Tired of the plain old boring login forms? How about we add some jazz! If you have ever typed in your password wrongly on your Mac, you would have seen that the login screen will vibrate and kinda shriek to indicate that the password you entered is wrong. I always found that rather cool! It’s [...]]]></description>
			<content:encoded><![CDATA[<p>Tired of the plain old boring login forms? How about we add some jazz! If you have ever typed in your password wrongly on your Mac, you would have seen that the login screen will vibrate and kinda shriek to indicate that the password you entered is wrong. I always found that rather cool! It’s surprising how little this trick is being used in web applications today. So, I thought I will write up a tutorial on how to get this going.</p>
<p><span id="more-944"></span></p>
<p>Before we get started, feel free to check out the <a href="http://designshack.net/tutorialexamples/buzzinglogin/index.html">finished example</a>.</p>
<p>As you might have already guessed, this will require some JavaScript magic, or more specifically jQuery vodoo. I am trying my best not to go into a rant on the wonderfulness of jQuery right now (I am sure you already knew that anyway!), so let me just say that it gets the job done, and easily.</p>
<p>So, here goes! As I got started on this, the first thing I did was to have a look at how best to implement the shaking or vibrating effect on the login form. I suspected that it might be part of the jQuery effects library, and yes, there was a shake() function, but  I also stumbled on a nice plugin by <a href="http://exscale.se/archives/2008/03/27/jquery-vibrate-plug-in/">Andreas Lagerkvist</a>, which did just about the same thing. I chose the plugin approach as it was the lightweight way to go.</p>
<p>The actual implementation is pretty straightforward.  We have a plain form, wrapped in a DIV which we will label as login.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;login&quot;</span>&gt;</span>	
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Buzzing Login form<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;username&quot;</span>&gt;</span>Username:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span>
&nbsp;
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pwd&quot;</span>&gt;</span>Password:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span>
&nbsp;
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span>			
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>We next include the jQuery related JavaScript files in the head of the document.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery-1.3.2.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;vibrate.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Using jQuery, we will then set-up an onclick event handler on the submit button . We will process the login form and take an appropriate action using this function.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#submit_butt&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// configurations for the buzzing effect. Be careful not to make it too annoying!</span>
		<span style="color: #003366; font-weight: bold;">var</span> conf <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
				frequency<span style="color: #339933;">:</span> <span style="color: #CC0000;">5000</span><span style="color: #339933;">,</span>
				spread<span style="color: #339933;">:</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span>
				duration<span style="color: #339933;">:</span> <span style="color: #CC0000;">500</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">/* do your AJAX call and processing here...
			....
			....
		*/</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// this is the call we make when the AJAX callback function indicates a login failure </span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#login&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">vibrate</span><span style="color: #009900;">&#40;</span>conf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// let's also display a notification</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#errormsg&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#loginform&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;p id=&quot;errormsg&quot;&gt;Invalid username or password!&lt;/p&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// clear the fields to discourage brute forcing :)</span>
&nbsp;
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#username&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#pwd&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Define a set of configuration variables that define the nature of the buzzing effect. In case the login fails, just make a call to the vibrate() function using the configuration variables as parameter. A general word of caution – make sure you don’t have the buzzing effect in action for too long, as it might be irritating to the user if the form buzzes for a long time! I found a duration of 500ms comfortable. In addition, we also display a warning message to the user, and then proceed to clear the input fields. </p>
<p>And it’s as simple as that! <a href="http://www.designshack.net/tutorialexamples/buzzinglogin/">You have a nifty login form ready.</a></p>
<p>On a final note, I have made a minor modification to Andreas’ original plugin to suit our application. The changes are documented on the code. </p>
<p>Try it out, and let us know how it works. If you get this implemented somewhere, do post up a link in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/creating-a-shaking-login-form/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Smart File Type Detection Using PHP</title>
		<link>http://designshack.net/articles/php-articles/smart-file-type-detection-using-php/</link>
		<comments>http://designshack.net/articles/php-articles/smart-file-type-detection-using-php/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 08:59:51 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[detection]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.designshack.co.uk/?p=689</guid>
		<description><![CDATA[In most web applications today, there is a need to allow users to upload images, audio and video files. Sometimes, we also need to restrict certain types of files from being uploaded &#8211; an executable file being an obvious example. Security aside, one might also want to prevent users from misusing the upload facility, e.g. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.designshack.net/wp-content/uploads/padlock.jpg" alt="padlock" title="padlock" width="200" height="200" class="right size-full wp-image-722" />In most web applications today, there is a need to allow  users to upload images, audio and video files. Sometimes, we also need to  restrict certain types of files from being uploaded &#8211; an executable file being an obvious example.</p>
<p>Security aside, one might also want to prevent users from misusing  the upload facility, e.g. uploading copyrighted music files illegally and using the service to promote piracy! In this article, we&#8217;ll look into a few ways in which we can achieve this.</p>
<p><span id="more-689"></span></p>
<h2>File  type detection using extension and MIME types</h2>
<p>I am not going to talk about this in too much detail as  after all, this is what we normally do when we want to restrict certain files.  We simply get the MIME type of the file using  <code>$_FILES['myFile']['type']</code> and check if it’s of a  valid type.</p>
<p>Or we might scan the last few characters of the file name  and reject files ending with a certain extension.  Unfortunately, these methods are hardly  sufficient, as one can easily change the extension of a file to bypass this  restriction. Furthermore, MIME type information is given by the browser and most browsers, if not all, determine the mime type based upon the  file&#8217;s extension! Hence MIME types can be pretty easily spoofed too.</p>
<p>Let&#8217;s now explore some others ways which offer better fool-proofness.</p>
<h2>Using Magic Bytes</h2>
<p>The best way to determine the file type is by examining the first few bytes of a file &#8211; referred to as &#8220;magic bytes&#8221;. Magic bytes are essentially signatures that vary in length between 2 to 40 bytes in the file headers, or at the end of a file. There are several hundred types of files, and quite a few of them have several file signatures associated with them. You can see a list of file signatures <a href="http://www.garykessler.net/library/file_sigs.html">over here</a>.</p>
<p>Although inconsistent, this is our best bet in detecting file types reliably. This seemingly difficult task has been made really easy by a PECL extension called <a href="http://pecl.php.net/package/Fileinfo">Fileinfo</a>. As of PHP 5.3, Fileinfo is shipped with the main distribution and is enabled by default, so this is definitely a robust and simple way to detect and impose restrictions on the types of files uploaded.</p>
<p>Let&#8217;s now see how we can detect a file type using Fileinfo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/path/to/file&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// in PHP 4, we can do:</span>
<span style="color: #000088;">$fhandle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">finfo_open</span><span style="color: #009900;">&#40;</span>FILEINFO_MIME<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mime_type</span> <span style="color: #339933;">=</span> <span style="color: #990000;">finfo_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fhandle</span><span style="color: #339933;">,</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// e.g. gives &quot;image/jpeg&quot; </span>
&nbsp;
<span style="color: #666666; font-style: italic;">// in PHP 5, we can do:</span>
&nbsp;
<span style="color: #000088;">$file_info</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> finfo<span style="color: #009900;">&#40;</span>FILEINFO_MIME<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// object oriented approach!</span>
<span style="color: #000088;">$mime_type</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$file_info</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">buffer</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// e.g. gives &quot;image/jpeg&quot;</span>
&nbsp;
<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$mime_type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/jpeg&quot;</span><span style="color: #339933;">:</span>
		<span style="color: #666666; font-style: italic;">// your actions go here...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Handling image uploads</h2>
<p>If you intend to allow only image uploads, then you can use  the inbuilt <code>getimagesize()</code> function to ensure that the user is actually uploading a valid image file. This functions returns false, if the file is not a valid image file.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//  Let's assume that the name attribute of the file input field you have used is &quot;myfile&quot;</span>
&nbsp;
<span style="color: #000088;">$tempFile</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'myFile'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tmp_name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// path of the temp file created by PHP during upload</span>
<span style="color: #000088;">$imginfo_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tempFile</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// returns a false if not a valid image file</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$imginfo_array</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mime_type</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$imginfo_array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mime'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$mime_type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
&nbsp;
	<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/jpeg&quot;</span><span style="color: #339933;">:</span>
		<span style="color: #666666; font-style: italic;">// your actions go here...</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;This is not a valid image file&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Reading and interpreting magic bytes manually</h2>
<p>If for some reason, you are not able to install Fileinfo, then you can still manually determine the file type by reading the first few bytes of a file and comparing them with known magic bytes associated with the particular file type. This process definitely has an element of trial and error, because there is still a chance that there are a few undocumented magic bytes associated with legitimate file formats. As a result, valid files could be rejected by your system. However it&#8217;s not impossible as a couple of years back, I was asked to work on a script that allowed only genuine mp3 files to be uploaded, and since we could not use Fileinfo, we resorted to this manual scanning. It took me a  while to account for some of the undocumented magic bytes for mp3, but pretty soon, I got a stable upload script running.</p>
<p>Before I end, I would just like to part with a general word of caution: Make sure that you never call an <code>include()</code> with a file that was uploaded, as PHP  code can very well be hidden as part of the picture, and the picture would pass your tests for file validation just fine, only to cause havoc when executed by the server.</p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/php-articles/smart-file-type-detection-using-php/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Best of 2008 &#8211; JavaScript</title>
		<link>http://designshack.net/articles/best-of-2008-javascript/</link>
		<comments>http://designshack.net/articles/best-of-2008-javascript/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 11:57:21 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[top]]></category>

		<guid isPermaLink="false">http://localhost:8888/?p=545</guid>
		<description><![CDATA[In the last part of our summary series, it is time to see some of the JavaScript Goodies of 2008. Some of the following are resources, some are useful tutorials, some opinions and others just plain fun interesting stuff. There is always a lesson or two to take away from these, and it could help [...]]]></description>
			<content:encoded><![CDATA[<p> In the last part of our summary series, it is time to see some of the JavaScript Goodies of 2008. Some of the following are resources, some are useful tutorials, some opinions and others just plain fun interesting stuff.</p>
<p>There is always a lesson or two to take away from these, and it could help you enter the New Year with a variety of new skills in your portfolio.</p>
<p><span id="more-545"></span></p>
<h2>sIFR Lite </h2>
<p><em>&ldquo;</em>Once upon a time some really good web developers created sIFR. Their goal was to seamlessly convert HTML headlines into nice fonts. Well, these developers did a great job getting it to work nicely. Looking at their code, I decided I would create a &quot;lite&quot; version of sIFR using a more object-oriented approach. sIFR Lite is a bit easier to read, and more intuitive to use.&rdquo;</p>
<p><a href="http://www.allcrunchy.com/Web_Stuff/sIFR_lite/" class="smallbox">Visit site</a></p>
<h2>DD_belatedPNG</h2>
<p>Support for 24-bit PNG alpha-translucency background-image + background-position + background-repeat for IE 6 at last!</p>
<p><a href="http://dillerdesign.com/experiment/DD_belatedPNG/" class="smallbox">Visit site</a></p>
<h2>The EqualHeights jQuery Plugin</h2>
<p>&ldquo;Creating equal-height columns with CSS is sometimes a bear. But who  needs the hassle of faux columns, &ldquo;clear&rdquo; divs and the rest? With this  bit of jQuery, you can easily equalize the heights of any group of  elements.&rdquo;</p>
<p><a href="http://www.cssnewbie.com/equalheights-jquery-plugin/" class="smallbox">Visit site</a></p>
<h2>jQuery.popeye &#8211; an inline lightbox alternative</h2>
<p>&ldquo;The plugin transforms an unoredered list of images into a box  displaying only one preview image at a time. The box has controls to  skim through the preview images and to enlarge a given image. The box  expands to accomodate the enlarged version, while the controls are  hidden in full image size mode. A simple click on the image returns the  box to its compact state.&quot;</p>
<p><a href="http://herr-schuessler.de/blog/jquerypopeye-an-inline-lightbox-alternative/" class="smallbox">Visit site</a></p>
<h2>DD_roundies</h2>
<p>An easy way to implement round corners in IE. </p>
<p>&ldquo;No 9-cell tables for one round box. No images. Doesn&#8217;t add a half-dozen or more HTML nodes to a container element (more like one, maximum of two, and only in IE).&rdquo; </p>
<p><a href="http://dillerdesign.com/experiment/DD_roundies/" class="smallbox">Visit site</a></p>
<h2>Niceforms</h2>
<p><strong>&ldquo;</strong>Niceforms is a script that will replace the most commonly used form  elements with custom designed ones. You can either use the default  theme that is provided or you can even develop your own look with  minimal effort.&rdquo;</p>
<p><a href="http://www.emblematiq.com/projects/niceforms/" class="smallbox">Visit site</a></p>
<h2>jQuery Corners 0.3</h2>
<p>&ldquo;This jQuery plugin will easily create beautifully rounded corners.            No images or obtrusive markup necessary.&rdquo;</p>
<p> Another round corner script for your benefit! </p>
<p><a href="http://www.atblabs.com/jquery.corners.html" class="smallbox">Visit site</a></p>
<h2>Superfish jQuery menu plugin</h2>
<p>&ldquo;Superfish is an enhanced Suckerfish-style menu jQuery plugin that takes  an existing pure CSS drop-down menu (so it degrades gracefully without  JavaScript) and adds the following much-sought-after enhancements.&rdquo;</p>
<p><a href="http://users.tpg.com.au/j_birch/plugins/superfish/" class="smallbox">Visit site</a></p>
<h2>JavaScript Will Save Us All</h2>
<p>Eric Meyer&#8217;s opinion on why we should look to JavaScript to extended standard support badly lacking in many browsers, instead of waiting for the browser vendors to implement them.</p>
<p><a href="http://meyerweb.com/eric/thoughts/2008/10/22/javascript-will-save-us-all/" class="smallbox">Visit site</a></p>
<h2>CSS Sprites2 &#8211; It&#8217;s JavaScript Time</h2>
<p>&ldquo;A sense of movement is often the differentiator between Flash-heavy web  sites and standards-based sites. Flash interfaces have always seemed  more alive&mdash;responding to the user&#8217;s interactions in a dynamic way that  standards-based web sites haven&#8217;t been able to replicate. Lately that&#8217;s been changing, of course, with a resurgence in dynamic  interface effects, helped along by JavaScript libraries that make it  easy&mdash;libraries such as Prototype, Scriptaculous, Moo, YUI, MochiKit (and I could go on). It&#8217;s high time to revisit the CSS Sprites technique from four years ago, and see if we can&#8217;t interject a little bit of movement of our own.&rdquo;</p>
<p><a href="http://alistapart.com/articles/sprites2" class="smallbox">Visit site</a></p>
<h2>jParallax</h2>
<p>&ldquo;jParallax turns a selected element into a &#8216;window&#8217;, or viewport, and  all its children into absolutely positioned layers that can be seen  through the viewport. These layers move in response to the mouse, and,  depending on their dimensions (and options for layer initialisation),  they move by different amounts, in a parallaxy kind of way.&rdquo;</p>
<p>Pure joy! </p>
<p><a href="http://webdev.stephband.info/parallax.html" class="smallbox">Visit site</a></p>
<h2> Fixed Footers without JavaScript</h2>
<p>A pure CSS technique to position fixed footers, tested down to IE 5.5. </p>
<p><a href="http://boagworld.com/technology/fixed_footers_without_javascri/" class="smallbox">Visit site</a></p>
<h2>Dynamic Layout</h2>
<p>&ldquo;Dynamic Layout is a simple JavaScript library that allows you to easily adjust page layout based on the current browser width.&rdquo;</p>
<p><a href="http://fortes.com/projects/dynamiclayout/" class="smallbox">Visit site</a></p>
<h2>Stop using Ajax!</h2>
<p>&ldquo;Ajax is a sound and useful idea. But every idea comes down to a  practical implementation &#8211; a technology that makes it happen &#8211; and in  this case the technology is immature, because it  leaves groups of users behind. Most notable and greatly affected are  those using assistive technologies, but also those using less capable  browsers that don&#8217;t support the necessary scripting objects, or don&#8217;t  support scripting at all. &rdquo;</p>
<p><a href="http://dev.opera.com/articles/view/stop-using-ajax/" class="smallbox">Visit site</a></p>
<h2>This is how you get sIFR to work</h2>
<p>&ldquo;The goal of this tutorial is to distill the information at the official site for sIFR into a simple step-by-step process of how to implement sIFR on your site.</p>
<p>After following this tutorial you will have a basic understanding of how sIFR works and will be able to expand into more advanced areas.&rdquo;</p>
<p><a href="http://designintellection.com/2008/this-is-how-you-get-sifr-to-work/" class="smallbox">Visit site</a></p>
<h2> FancyZoom</h2>
<p>Smooth Javascript Image Zooming For Your Web Pages.&nbsp;</p>
<p><a href="http://www.cabel.name/2008/02/fancyzoom-10.html" class="smallbox">Visit site</a></p>
<h2>Rotating 3D cube in JavaScript </h2>
<p>Nothing more, nothing less! Check it out. </p>
<p><a href="http://maettig.com/code/javascript/3d_dots.html" class="smallbox">Visit site</a></p>
<h2>Super Mario in 14kB Javascript</h2>
<p><strong>&ldquo;</strong>Here&#8217;s an experiment in keeping things small and confined to one  Javascript file. There are no external image files or anything,  everything is rendered with Javascript using either canvas elements or  old fashioned div-making tactics (for IE). The sprites are stored in  custom encoded strings in a format that only allows 4 colors for each  sprite but in turn only takes up around 40-60 bytes per sprite.<strong>&rdquo;</strong></p>
<p><a href="http://blog.nihilogic.dk/2008/04/super-mario-in-14kb-javascript.html" class="smallbox">Visit site</a></p>
<h2>10 Smart Javascript Techniques to Improve Your UI</h2>
<p>&ldquo;Javascript is typically used as an aesthetic language in web  development. This means that web developers should almost always be  using Javascript for one thing only: Improving the visitor&#8217;s experience.  There are many clever and useful ways to improve a site from the user  interface perspective. A developer can find nearly any snippet of  Javascript to achieve what he or she wants to accomplish.&rdquo;</p>
<p><a href="http://nettuts.com/javascript-ajax/10-rare-but-clever-javascript-techniques/" class="smallbox">Visit site</a></p>
<h2>25 Amazing JavaScript Games (Some Fun And Inspiration)</h2>
<p>&ldquo;JavaScript, with the rise of Ajax, is definitely a must-know-well for every web designer/developer.</p>
<p>Besides form controls, alerts &#038; similar simple JavaScript usage, you can almost do anything with the help of JavaScript (&#038; Canvas).&rdquo;</p>
<p><a href="http://www.webresourcesdepot.com/25-amazing-javascript-games-some-fun-and-inspiration/" class="smallbox">Visit site</a></p>
<h2>Top 5 Favorite Bookmarklets</h2>
<p>&ldquo;Bookmarklets are the JavaScript-enabled links you can pull into your  bookmarks that interact with whatever page you find yourself on. The  best bookmarklets act as you would typically expect a toolbar to, by  extending your browsing experience. However, since they&rsquo;re written in  JavaScript, they all by working within the browser and without  requiring installation. Here are 5 highly recommended bookmarklets you can drag to your  browser&rsquo;s toolbar or to your bookmarks to extend your browsing  experience.&rdquo;</p>
<p><a href="http://www.webmonkey.com/blog/Top_5_Favorite_Bookmarklets" class="smallbox">Visit site</a></p>
<h2>10 Promising JavaScript Frameworks</h2>
<p>&ldquo;Popular JavaScript frameworks/libraries like jQuery,  MooTools, Prototype, and YUI (to name a few of the <a href="http://royal.pingdom.com/?p=305" title="Royal Pingdom - Javascript framework usage among top websites">most  popular JavaScript frameworks out there</a>)  definitely have a solid foothold in the JavaScript framework arena. But  for the more adventurous developers looking for new or alternative  frameworks/libraries &ndash; there are some excellent frameworks outside the  popular ones that&rsquo;s worth checking out.&rdquo;</p>
<p><a href="http://sixrevisions.com/javascript/promising_javascript_frameworks/" class="smallbox">Visit site</a></p>
<h2>5 Useful Coding Solutions For Designers and Developers</h2>
<p>	  &ldquo;Often creative and truly remarkable design solutions remain unknown because we, designers, simply overlook them. Being busy  with our own projects, we sometimes try to grasp the intuition behind  (probably) complex and cluttered code of other designers to understand  how they manage to implement particular design ideas. In fact, by just  observing the code of other developers we can learn a lot from them; we  can find interesting ideas and improve the quality of our work.&rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/08/11/5-useful-coding-solutions-for-designers-and-developers/" class="smallbox">Visit site</a></p>
<h2>Calling WebServices via AJAX </h2>
<p>This tutorial will give you a good idea of how to use JavaScript to interact with WebServices. </p>
<p><a href="http://blogs.msdn.com/kaevans/archive/2008/04/03/calling-webservices-via-ajax-part-1.aspx" class="smallbox">Visit site</a></p>
<h2> JavaScript Pretty Date</h2>
<p>&ldquo;&#8230; A simple way to format old JavaScript dates in a &quot;pretty&quot; way. &rdquo;</p>
<p><a href="http://ejohn.org/projects/javascript-pretty-date/" class="smallbox">Visit site</a></p>
<h2> JavaScript iPhone Apps</h2>
<p>	  I&#8217;ve been watching, with interest, developers create new applications  for the iPhone. Owning one myself &#8211; and being knowledgeable in  JavaScript &#8211; I&#8217;ve been wondering what options there were for creating  downloadable JavaScript applications or the iPhone. In doing some  research I found a number of solutions, some simpler than others, some  requiring more knowledge of Objective-C than others. &rdquo;</p>
<p><a href="http://ejohn.org/blog/iphone-javascript-apps/" class="smallbox">Visit site</a></p>
<h2>Most Wanted Ajax Techniques: 50+ Examples and Tutorials </h2>
<p>	  Web applications have made huge leaps and bounds in improving user  experience thanks to a lot of recently developed Ajax technology. When  you combine some neat functionality courtesy of PHP with the cleverness  of javascript you can produce some pretty cool results. In an effort to  help you take it up a notch, we&rsquo;d like to share some methods for  helping your site anticipate a user&rsquo;s next move.&rdquo;</p>
<p><a href="http://www.noupe.com/javascript/most-wanted-ajax-techniques-50-ajax-examples-and-tutorials.html" class="smallbox">Visit site</a></p>
<h2> 50 Excellent AJAX Tutorials</h2>
<p>	  AJAX provides Web developers with plenty of opportunities to enhance the user experience and improve the performance of their websites. There are countless ways that AJAX can be used, and fortunately there are plenty of good and useful AJAX tutorials out there to help you with your own implementation.</p>
<p>This post serves as a collection of useful tutorials on working with AJAX in a wide variety of ways. &rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/10/16/50-excellent-ajax-tutorials/" class="smallbox">Visit site</a></p>
<h2>  10 things IT needs to know about Ajax</h2>
<p>	  The introduction of any new Web technology will affect a network&#8217;s infrastructure in ways that range from inconsequential     to earth shattering. Ajax is one of the more disruptive new Web technologies traveling across networks today. To help you     minimize future surprises on your network, we&#8217;ve outlined the 10 things you should take to heart about Ajax.  &rdquo;</p>
<p><a href="http://www.networkworld.com/research/2008/033108-ajax.html?nw" class="smallbox">Visit site</a></p>
<h2> jQuery timepickr </h2>
<p>	  <em>jquery.timepickr</em> was created in a attempt to make the process of inputing time in a form as                      easy and natural as possible.&rdquo;</p>
<p><a href="http://haineault.com/media/jquery/ui-timepickr/page/" class="smallbox">Visit site</a></p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/best-of-2008-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Best of 2008 &#8211; Typography</title>
		<link>http://designshack.net/articles/best-of-2008-typography/</link>
		<comments>http://designshack.net/articles/best-of-2008-typography/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 11:58:46 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Typography]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[top]]></category>
		<category><![CDATA[type]]></category>

		<guid isPermaLink="false">http://localhost:8888/?p=550</guid>
		<description><![CDATA[Typography is beginning to come to the fore as one of the most crucial elements of web design as people start to understand its importance. There&#8217;s no doubt that if you perfect the size, style and position of type on your page, the rest of the design will flow much easier. In part one of [...]]]></description>
			<content:encoded><![CDATA[
<p>Typography is beginning to come to the fore as one of the most crucial elements of web design as people start to understand its importance. There&#8217;s no doubt that if you perfect the size, style and position of type on your page, the rest of the design will flow much easier.</p>
<p>In part one of our 2008 roundup, we saw some of the <a href="http://designshack.net/tutorials/best-of-2008-graphic-design-tutorials">most useful graphic design tutorials</a> of the year. This second section will walk you through a selection of the best typography related resources and articles of 2008 &#8211; tutorials, downloads, fonts, and everything you need to perfect the use of type in your design.</p>
<p><span id="more-550"></span></p>
<div class="toptutorial">
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/1_ten_most.jpg" alt="10 common typography mistakes" width="150" height="150" />10 Common Typography Mistakes</h2>
<p><em>&ldquo;</em>The goal of this post is to help designers and clients understand the  importance of good type skills, while avoiding some common mistakes&#8230; a list of 10 common mistakes used in type design/layout that can make a huge difference in the effectiveness and appearance of  your designs, in addition to saving you time and money when printing.&rdquo;</p>
<p><a href="http://www.thedesigncubicle.com/2008/12/10-common-typography-mistakes/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/2_twenty_typefaces.jpg" alt="Twenty typefaces" width="150" height="150" />20 Typefaces To Start A Designer&#8217;s Career</h2>
<p>&nbsp;&ldquo;As a design student myself, I notice that typography is one of the  hardest parts that students seem to face&hellip; most students are able to  come up with extremely creative, innovative and well designed material  however as soon as type is needed&hellip; well, let&rsquo;s just say, it could need  some more work&#8230; I was also guilty of having every font under the sun, however, after  the first year of University I quickly learned otherwise &#8211; it is best  to master a few faces. &ldquo;</p>
<p><a href="http://justcreativedesign.com/2008/11/11/20-typefaces-to-start-a-designers-career/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/3_fifty_incredible.jpg" alt="50 Incredible fonts" width="150" height="150" />50 Incredible Fonts for Professional Web &#038; Print Design</h2>
<p>&ldquo;The web is rich with creative and amazing fonts, and the choice is enormous. So today we would like to present 50 incredible <span class="caps">FONT</span> which you can use for web or print design. This collection will sure  help you improve your typography skills! Let&rsquo;s take a close look at  some of the most beautiful fonts we&rsquo;ve found on the web.&rdquo;</p>
<p><a href="http://www.noupe.com/fonts/50-free-fonts-for-professional-designs.html" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/4_seven_fonts_die.jpg" width="150" height="150" alt="" />7 Fonts that should die</h2>
<p>&ldquo;The problem with being a fontwhore is that you begin to recognize some  of the tired, overused fonts that no designer seems to want to let go.  If you see them, let out a scream and shoot them on sight.&quot;</p>
<p> Despite its overuse, I personally think that Trajan is a great font and should not be on this list. Bu what about Comic Sans?! :D </p>
<p><a href="http://www.10000words.net/2008/08/7-fonts-that-should-die.html" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/5_thirty_fonts.jpg" width="150" height="150" alt="" />30 Fonts That <span class="caps">ALL</span> Designers Must Know &amp; Should Own</h2>
<p>&ldquo;Here are 30 of the Best Fonts / Typefaces that every designer must / should own sorted by alphabetical order. There are 15 serif fonts and 15 sans-serif fonts. These fonts will last you your whole career!</p>
<p>A brief description of what each font is best suited for is provided however are not limited to this.&rdquo; </p>
<p><a href="http://justcreativedesign.com/2008/03/02/30-best-font-downloads-for-designers/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/6_dingbats.jpg" width="150" height="150" alt="" />16 Incredibly Detailed, Useful (and free) Dingbat Fonts</h2>
<p><strong>&ldquo;</strong>Now, before I start, not everyone is going to think these are all useful, so if you don&#8217;t ever use tree silhouettes, fine. But some of us do. Personally, I love dingbats because (most of the time) I convert them to vectors in Illustrator and use them as very large elements in some cases. &rdquo;</p>
<p><a href="http://www.bittbox.com/fonts/dingbats-roundup-16-incredibly-detailed-useful-and-free-dingbat-fonts/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/7_deviantart_fonts.jpg" alt="40+ Extremely Beautiful FONTS Hand-picked from deviantART" width="150" height="150" />40+ Extremely Beautiful <span class="caps">FONTS</span> Hand-picked from deviantART</h2>
<p>&ldquo;The web is rich with creative and amazing fonts, and one of the most unusual source of Beautiful Fonts are those you can find on deviantART fonts gallery. Today we would like to present 40 incredible <span class="caps">FONT</span> which you can use for web or print design. Let&#8217;s take a close look at some of the most beautiful fonts we&#8217;ve found on deviantART.&rdquo;</p>
<p> Beautiful collection.     </p>
</p>
<p><a href="http://www.noupe.com/fonts/40-extremely-beautiful-fonts-hand-picked-from-deviantart.html" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/8_color_typo.jpg" width="150" height="150" alt="" />Color and Typography in Good Design</h2>
<p>&ldquo;Typography is a significant issue for designers. On many projects,  finding just the right font, size, spacing, etc. can require  considerable time and attention. In addition to typography, color is  also a major factor in the success of the design. What is sometimes  overlooked is the combination of color and typography and the effect  that it has on the overall project.&rdquo;</p>
<p><a href="http://www.colourlovers.com/blog/2007/12/19/color-and-typography-in-good-design/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/9_thirty_inspiring.jpg" width="150" height="150" alt="" />30 inspiring type treatments</h2>
<p>&ldquo;For a while now, I&rsquo;ve been tagging type-related work on deviantArt. I thought I&rsquo;d share them with you<strong>&rdquo;</strong></p>
<p>Stunning.</p>
<p><a href="http://ilovetypography.com/2008/12/04/30-inspiring-type-treatments/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/10_breathtaking_posters.jpg" width="150" height="150" alt="" />Breathtaking Typographic Posters</h2>
<p>&ldquo;You can&#8217;t design without type. However, yon can use only type (or mostly only type) to create breath-taking designs. In fact, many graphic designers and artists take exactly this route to communicate their ideas through their works. The results are sometimes crazy, sometimes artsy, sometimes beautiful, but often just different from things we&#8217;re used to. Thus designers explore new horizons and we explore new viewing perspectives which is what inspiration is all about.&rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/02/25/breathtaking-typographic-posters/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/11_retro.jpg" width="150" height="150" alt="" />Vintage and Retro Typography Showcase</h2>
<p>&ldquo;Typography talks the talk, to go along with the  overall work&rsquo;s walk, speaking volumes for the artist. This important  design element surrounds people daily as they move through their  routines, rarely taking notice. In this article, we go retro, finding beautiful examples of vintage typography and the modern work they&#8217;ve inspired. &rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/10/26/retro-and-vintage-typography-showcase/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/12_big_typo.jpg" width="150" height="150" alt="" />The Showcase Of <span class="caps">BIG</span> Typography &#8211; Second Edition</h2>
<p>&ldquo;In Web typography doesn&#8217;t have to support the overall design. It can dominate. It can be loud. It can be bold. And it can be everywhere on a web-site. In many situations it&#8217;s reasonable to give the typography the prominent position it deserves, leaving visual cues in the background or removing them at all. &rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/05/20/the-showcase-of-big-typography-second-edition/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/13_typo_tales.jpg" width="150" height="150" alt="" />The Right Type: 5 Inspiring Typography Tales</h2>
<p>&ldquo;Nowadays, typefaces are a dime a dozen; there&#8217;s certainly no shortage of free fonts. But as in any artistic field, the standouts are rare, and understanding why they excel takes gradual experience.</p>
<p>In this yarn, we&#8217;ll take a closer look at inspiring stories behind the design of typefaces that you may have seen or used but didn&#8217;t know the history of. We&#8217;ll explore the nooks and crannies &#8216; both literal and figurative &#8216; of the evolving printed word. By the end, we hope you come away with a better appreciation of how things came to be.&rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/12/08/the-right-type-5-inspiring-typography-tales/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/14_top_web_typo_mistakes.jpg" width="150" height="150" alt="" />Top Ten Web Typography Sins</h2>
<p>&ldquo;While many designers have been quick to embrace web standards, it&#8217;s surprising how often the basic standards of typography are neglected. Here are ten deadly sins to avoid in your web typography. &rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/08/11/top-ten-web-typography-sins/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/15_guide_web_typo.jpg" width="150" height="150" alt="" />A Guide to Web Typography</h2>
<p>&ldquo;Perhaps because of the overtones of freshness and vitality,  water-based effects are always in demand. In this tutorial, Nik Ainley provides  step-by-step guidance on how to make a stunning, dynamic effect that recreates  the look of a figure dissolving in water, with some clever use of Photoshop and  some found images. Although the finished image appears hi-tech, it is just a  very clever photomontage constructed from just two images, using relatively  simple Photoshop techniques.&rdquo;</p>
<p><a href="http://ilovetypography.com/2008/02/28/a-guide-to-web-typography/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/16_on_choosing.jpg" width="150" height="150" alt="" />On Choosing Type </h2>
<p>&ldquo;There&#8217;s nothing better than to play with the tool if you  want to learn it&hellip;. I think the best way to learn is trying to recreate images  and effects we like. Here I list my 10 tips to improve your skills in  Photoshop, but they can be applied to other tools as well.&rdquo;</p>
<p><a href="http://ilovetypography.com/2008/04/04/on-choosing-type/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/17_from_moleskin.jpg" width="150" height="150" alt="" />Newzald: From Moleskine to Market</h2>
<p>&ldquo;In this article I will attempt to illustrate my design process&#8217;from typeface concept to a marketable font. Not many folks are willing to write about this. Perhaps they find it boring, irrelevant or just a little bit personal. I suspect it is a mix of all the above.</p>
<p>I&#8217;ll try to remain as concise as possible. Some of the individual steps can be a lot more complex and involved than they seem. I&#8217;ll try not to gloss over too many things. One thing is certain, typeface design is a long, involved process with many hours of seemingly endless tedium.&rdquo;</p>
<p><a href="http://ilovetypography.com/2008/03/12/newzald-moleskine-to-market/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/18_flickr_types.jpg" width="150" height="150" alt="" />Friday Flickr Found Type</h2>
<p><strong>&ldquo;</strong>Invariably, these kinds of post are couched in grandiloquence, &#8216;The World&#8217;s Best, most stunningly awesome typographically awe-inspiring found type.&#8217; And although, the search engines might love it, I just can&#8217;t do it. So here&#8217;s some stuff I found that I rather like&#8217;and I hope it inspires you.<strong>&rdquo;</strong></p>
<p><a href="http://ilovetypography.com/2008/09/27/friday-flickr-found-type/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/19_letterpress.jpg" width="150" height="150" alt="" />Letterpress From Scratch</h2>
<p>&ldquo;The letterpress printing process is one of the oldest ways of getting the printed word on to a page. It relies on a physical representation of each letter being inked and then pressed against the paper&#8217;and this is why it&#8217;s both interesting and expensive.This article looks briefly at this resurgence of interest in letterpress, why you might like it and some help to begin enjoying this fascinating&nbsp;pastime.&rdquo;</p>
<p><a href="http://ilovetypography.com/2008/07/24/letterpress-from-scratch/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/20_extreme_terminology.jpg" width="150" height="150" alt="" />eXtreme Type Terminology</h2>
<p>&ldquo;Our modern English alphabet is a child of the Latin alphabet or Roman alphabet, which evolved from a western version of the Greek alphabet approximately 2,700 years ago. The profession of typography was essentially born in Germany with Johannes Gutenberg&#8217;s invention of a movable metal type printing press in the early 1450s. The individual pieces of metal type that Gutenberg worked with were not letters, but letterforms.&rdquo;</p>
<p>Very informative article. </p>
</p>
<p><a href="http://ilovetypography.com/2008/03/21/extreme-type-terminology/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/21_web_typo_best.jpg" width="150" height="150" alt="" />15 Great Examples of Web Typography</h2>
<p>&ldquo;It may be that not all the sites listed here are to your taste, but  it&rsquo;s hoped that something&mdash;even a detail somewhere&mdash;will inspire you.&rdquo;</p>
<p><a href="http://ilovetypography.com/2008/05/07/15-great-examples-of-web-typography-q2-2008/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/22_small_caps.jpg" width="150" height="150" alt="" />Small Caps</h2>
<p>&ldquo;Small caps are uppercase glyphs drawn at a  lowercase scale. A common misconception&mdash;unfortunately reinforced by  most word processing programs as well as by <span class="caps">CSS</span> on the web&mdash;is that a  small cap is just a regular capital letter scaled uniformly down to a  smaller size. In actuality, a proper small cap is a carefully crafted  glyph that differs in significant ways from a uniformly-scaled-down  capital&nbsp;letter.&rdquo;</p>
<p><a href="http://ilovetypography.com/2008/02/20/small-caps/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/23_stamp_font.jpg" width="150" height="150" alt="" />Tutorial: The Worn/Weathered/Stamped Look</h2>
<p>	  &ldquo;There are quite a few quality stamped or distressed fonts available&#8230;Unfortunately ready-made stamp fonts present a number of drawbacks: repeating characters are identical (unless you have alternate glyphs), and the amount of detail is limited due to restrictions in the possible number of Bézier anchor points per glyph. To remedy this I developed a trick in Adobe Photoshop for distressing type. This technique allows you to apply a convincing stamped or weathered look to any typeface.&rdquo;</p>
<p><a href="http://fontfeed.com/archives/tip-the-wornweatheredstamped-look/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/24_dexter.jpg" width="150" height="150" alt="" />The Typography of Dexter, Serial Cover Star</h2>
<p>A commentary on the promotional advertisements for for Dexter, the television series, and the different typographic techniques employed. </p>
<p><a href="http://fontfeed.com/archives/dexter-serial-cover-star/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/25_osf_lf.jpg" width="150" height="150" alt="" />Figuring It Out: <span class="caps">OSF</span>, LF, and TF Explained</h2>
<p>&ldquo;Numerals (or figures) can take various forms. The figure style you  choose ought to be appropriate to the project you are working on.  Readability is key. But which style is best for which purpose&#8217; There  are two main forms, oldstyle figures (<span class="caps">OSF</span>) and lining figures (LF). Each can come in tabular and proportional widths.&rdquo;</p>
<p><a href="http://fontfeed.com/archives/figuring-it-out-osf-lf-and-tf-explained/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2><img src="http://www.designshack.net/postimages/top2008type/26_fonts_market.jpg" width="150" height="150" alt="" />Taking Your Fonts to Market: Foundry, Reseller, or Go Solo&#8217;</h2>
<p>	  &#8216;I am a new type designer. What&#8217;s the best way to get my fonts on the market&#8221;</p>
<p>Here is the best answer I can muster, drawn from over 10 years of examining the retail font industry (in what some might call disturbing detail). This advice is intended to be as unbiased as possible, but my perspective is inevitably shaped by four years as a type director at FontShop.</p>
<p><a href="http://typographica.org/001157.php" class="smallbox">Visit tutorial</a></p>
</div>
<p>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/best-of-2008-typography/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Best of 2008 &#8211; Graphic Design Tutorials</title>
		<link>http://designshack.net/articles/best-of-2008-graphic-design-tutorials/</link>
		<comments>http://designshack.net/articles/best-of-2008-graphic-design-tutorials/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 12:00:23 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[best]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[graphic]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://localhost:8888/?p=554</guid>
		<description><![CDATA[As we arrive at the last month of yet another year, it&#8217;s time we revise and reflect on all the goodies this year had to offer. At the same time&#160; it&#8217;s great to practice the tips and lessons learnt for the years to come! &#160;We have brought together a series of what we feel are [...]]]></description>
			<content:encoded><![CDATA[<p>    As we arrive at the last month of yet another year, it&#8217;s time we revise and reflect on all the goodies this year had to offer. At the same time&nbsp; it&#8217;s great to practice the tips and lessons learnt for the years to come! &nbsp;We have brought together  a series of what we feel are some of the best tutorials of 2008 from around the web. </p>
<p>    We&#8217;re starting off with the most useful graphic design tutorials of the past year. In no particular order, read on to see 33 that have stood out in particular.</p>
<p><span id="more-554"></span></p>
<div class="toptutorial">
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/11_green_type.jpg" width="150" height="150" />Creating  an Environmentally Friendly Green Type Treatment</h2>
<p>&ldquo;With oil prices the way they are today, everybody is  thinking Green&hellip; In the following Illustrator tutorial, I&#8217;ll teach you how to  create a Green type treatment. It works great for logos and other design  elements.&rdquo; </p>
<p>	  Excellent tutorial, great use of highlights and shadows to  create depth.</p>
<p><a href="http://vectortuts.com/text-effects/creating-an-environmentally-friendly-green-type-treatment/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/1_illustrate_magazines.jpg" alt="Illustrate for magazine" width="150" height="150" />Illustrate  for magazines</h2>
<p><em>&ldquo;</em>Illustration is a constantly  changing field, especially in today&rsquo;s digital age. It&rsquo;s easy to modify your  work quickly and efficiently by using the available tools&hellip;. <em>Wired</em> and <em>Men&rsquo;s  Health</em> illustrator Ronald  Kurniawan shares the secrets of his artistic success, revealing how he creates  his stunning editorial illustrations.&rdquo;</p>
<p><a href="http://www.computerarts.co.uk/tutorials/2d__and__photoshop/illustrate_for_magazines" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/2_xray_effect.jpg" alt="X-ray effect" width="150" height="150" />X-ray  effects in Photoshop</h2>
<p>&nbsp;&ldquo;Capturing the inner  beauty of an object with an X-ray is not an easy task. Only a handful of  photographers combine photography as an art form with radiology &ndash; which might  have something to do with the fact that achieving the effect requires  highly-specialized equipment. Unsurprisingly, this doesn&rsquo;t come cheap, so in  this tutorial, we save you some pennies by inviting Mark Mayers to show you how  to achieve a similar effect in Photoshop. &ldquo;</p>
<p><a href="http://www.digitalartsonline.co.uk/tutorials/index.cfm?FeatureID=1777" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/3_lighting_effect.jpg" alt="Magic Lighting" width="150" height="150" />Magic lighting  effect</h2>
<p>&ldquo;Create a nice light and magic effect.&rdquo; </p>
<p>	  Simple tutorial, brilliant effect.</p>
<p><a href="http://abduzeedo.com/magic-lighting-effect-photoshop" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/4_comic_strip.jpg" alt="Inking and coloring comic strip" width="150" height="150" />Inking  and Coloring the Comic Strip &ldquo;The Brads&rdquo;</h2>
<p>&ldquo;In this tutorial, we&#8217;ll walk through the steps of creating  a comic strip using Illustrator&#8217;s Pen Tool, custom brushes and masking  features. This is a fun tutorial that covers the process I use, while  showcasing the comic strip I write called &quot;The Brads.&quot;</p>
<p><a href="http://vectortuts.com/illustration/inking-and-coloring-the-comic-strip-the-brads/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/7_ps_shortcuts.jpg" width="150" height="150" /></a>Top 10 Killer Photoshop Combo Moves</h2>
<p>&ldquo;Is time kickin&rsquo; your ass? Well, learn to defend yourself!  Master these killer Photoshop keyboard combos and you&rsquo;ll find yourself with  more time for the important things (e.g. Facebook trivia questions). These  combos assume you&rsquo;re using Photoshop CS3 on Windows platform with default  keyboard shortcuts.&rdquo;</p>
<p>      Killer moves alright!</p>
<p><a href="http://www.smashingmagazine.com/2008/08/13/top-10-killer-photoshop-combo-moves/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/5_filter_less.jpg" width="150" height="150" />Filter-free  art in Photoshop</h2>
<p>&ldquo;In this  step-by-step tutorial, we&rsquo;ll create a photomontage in Adobe Photoshop CS3 using  only the layer palette. Our goal is to achieve stunning results without using  any of Photoshop&rsquo;s filter options.&rdquo; </p>
<p><a href="http://www.digitalartsonline.co.uk/tutorials/index.cfm?featureID=1683" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/14_frilly_type.jpg" width="150" height="150" />Super Cool Frilly  Bits Typography</h2>
<p><strong>&ldquo;</strong>In this tutorial I will show you  how to mix some vectors with letters to create a really nice design.&rdquo;</p>
<p>Another creative tutorial on fiddling with typography to  create interesting effects.<strong> </strong></p>
<p><a href="http://abduzeedo.com/super-cool-frilly-bits-typography" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/8_3D_text.jpg" width="150" height="150" />The  new way to create 3D text</h2>
<p>&ldquo;Typography is huge at the moment in illustration, and 3D  text is a big part of that. It literally gives the artist another dimension to  play with, and the power of 3D programs provides a sense of realism that 2D  typography just can&rsquo;t match. This allows for seamless blending with photos and  other renders. 3D text needs the right depth,  lighting and texture. Nik Ainley tells you how to do this without re-rendering  nightmares.&rdquo;</p>
<p><a href="http://www.computerarts.co.uk/tutorials/3d__and__animation/the_new_way_to_create_3d_text" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/9_crash_effect.jpg" width="150" height="150" />Speedy  shatter effects</h2>
<p>&ldquo;This technique, which its creator Eric Sin calls the &lsquo;layer  duplication effect&rsquo;, is perfect for creatives who need to spice up a photo in a  hurry. Give your photos an edgy, shattered makeover  in under an hour, using layer duplication.<strong>&rdquo;</strong></p>
<p><a href="http://www.digitalartsonline.co.uk/tutorials/index.cfm?featureID=1753&amp;pn=1" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/10_vivid.jpg" width="150" height="150" />Vivid Imagery In Modern Web Design</h2>
<p>&ldquo;By using  vivid images designers can draw user&rsquo;s attention, communicate a  message effectively and leave a memorable first impression. Practically all websites  use images in their design, but few use vivid images to achieve maximum  results.&rdquo;</p>
<p><a href="http://www.smashingmagazine.com/2008/07/29/vivid-imagery-in-modern-web-design/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/12_metal_gun.jpg" width="150" height="150" />GunMetal  Interface</h2>
<p>&ldquo;&hellip;A rather simple Photoshop&nbsp;tutorial. &nbsp;However, it  does give quite a good foundation to those who are interested in starting  metallic interfaces with Photoshop&hellip; You can really do a lot with this tutorial  using different shapes and methods.&nbsp;This is just the basic introduction,  the same way that you start to learn animation with the beginner&rsquo;s step of  adapting the color to change under a sequence of frames.&rdquo;</p>
<p><a href="http://www.pstut.info/tutorials/simple-gunmetal-interface/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/13_composting.jpg" width="150" height="150" />Seamless  compositing in Photoshop</h2>
<p>&ldquo;No matter how many tricks and shortcuts you know, Photoshop  has plenty more, making complex and fiddly tasks far more straightforward. In  this tutorial, Jeric&oacute; Santander shows how you can make use of a few of these  tricks to create a stunning surrealist-style image, giving a chameleon a Mad  Max makeover and making him stalk through a mountain range.&rdquo;</p>
<p><a href="http://www.digitalartsonline.co.uk/tutorials/index.cfm?FeatureID=1750" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/15_photomontage.jpg" width="150" height="150" />Create  amazing photomontages</h2>
<p>&ldquo;Perhaps because of the overtones of freshness and vitality,  water-based effects are always in demand. In this tutorial, Nik Ainley provides  step-by-step guidance on how to make a stunning, dynamic effect that recreates  the look of a figure dissolving in water, with some clever use of Photoshop and  some found images. Although the finished image appears hi-tech, it is just a  very clever photomontage constructed from just two images, using relatively  simple Photoshop techniques.&rdquo;</p>
<p><a href="http://www.digitalartsonline.co.uk/tutorials/index.cfm?featureID=1704" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/16_collage.jpg" width="150" height="150" />Complex  Collages</h2>
<p>	  Create a complicated collage using various Photoshop  techniques.</p>
<p><a href="http://www.jeremyshuback.com/tutorials/ComplexCollages.php" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/17_improve_tips.jpg" width="150" height="150" />How to improve  your Photoshop skills</h2>
<p>&ldquo;There&#8217;s nothing better than to play with the tool if you  want to learn it&hellip;. I think the best way to learn is trying to recreate images  and effects we like. Here I list my 10 tips to improve your skills in  Photoshop, but they can be applied to other tools as well. &ldquo;</p>
<p><a href="http://abduzeedo.com/how-improve-your-photoshop-skills" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/18_beauty.jpg" width="150" height="150" />40  Cool Beauty Amplifying Photoshop Effects</h2>
<p>&ldquo;Beauty retouching is one of the most sought-after skills in  Photoshop arts today. The techniques here are used not only on magazine covers,  but in advertising campaigns, digital artwork and professional photography.  Here are 40 excellent tutorials to help you add this skill to your arsenal.&rdquo;</p>
<p><a href="http://psdtuts.com/articles/web/40-cool-beauty-amplifying-photoshop-effects/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/25_grid.jpg" width="150" height="150" />Grid masking</h2>
<p>&ldquo;This grid masking seems like an interesting technique to  take a closer look at. I&rsquo;m sure there are many ways to excecute this technique  and you could do this both in Illustrator or Photoshop&hellip; In my version of this  technique I decided to use both Illustrator and Photoshop to my benefit and  create the mask in Illustrator and then apply it on the photo(s) in Photoshop.&rdquo;</p>
<p><a href="http://veerle.duoh.com/blog/comments/grid_masking/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/19_neon.jpg" width="150" height="150" />Create  cool neon effects</h2>
<p>&ldquo;Whether it&rsquo;s the speeded-up glow of car headlights in a  night-time city scene, an alien spacecraft or a deep-sea jellyfish you&rsquo;re  recreating, this far-out neon look is a highly useful trick to master. It  conveys a sense of movement and energy, and the colours can be tweaked to give  a surprising range of effects.&rdquo;</p>
<p><a href="http://www.digitalartsonline.co.uk/tutorials/index.cfm?featureID=1709" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/20_rainbow.jpg" width="150" height="150" />Create  a magical rainbow color flame in Photoshop</h2>
<p>&ldquo;One of the things I&rsquo;ve seen around quite a bit lately is a  transparent rainbow gradient effect on a dark background. It seems to me that  flashy transparent gradients are in these days. They make me think about magic.  Today I&rsquo;ll show you how you can create a magical rainbow color flame. OK, maybe  I&rsquo;m using too many words in a row here, but it&rsquo;s the best I can do to describe  this.&rdquo;</p>
<p><a href="http://veerle.duoh.com/blog/comments/create_a_magical_rainbow_color_flame_in_photoshop/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/21_artistic_poster.jpg" width="150" height="150" />Make  an Inspiring Artistic Poster with Drawn Elements</h2>
<p>&ldquo;In this tutorial, we&#8217;ll create drawn elements, use design  brushes, bring them into Photoshop, and merge them into a unique poster  composition that feels hand-made, stylistically unified, and personalized. The  techniques here are focused on creating an original artistic illustration.&rdquo;</p>
<p><a href="http://psdtuts.com/tutorials/designing-tutorials/make-an-inspiring-artistic-poster-with-drawn-elements/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/22_grunge.jpg" width="150" height="150" />How  to Create a Grunge Web Design in Photoshop</h2>
<p>&ldquo;Photoshop is often the right tool for web design,  especially if you&#8217;re creating a design using numerous images and brush effects.  In this tutorial, I&#8217;ll show you how to create a complete grunge home page  design. We&#8217;ll design the header, sidebar, body, footer, and style everything to  work together in a heavily textured and worn design.&rdquo;</p>
<p><a href="http://psdtuts.com/tutorials/interface-tutorials/how-to-create-a-grunge-web-design-in-photoshop/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/23_badass.jpg" width="150" height="150" />Badass  Bling Effect in Photoshop</h2>
<p>&ldquo;This tutorial will show you step by step on how to create a  &ldquo;Badass Bling Effect&rdquo; using layer styles in Photoshop. Once you create the  layer style, you can easily &ldquo;blingify&rdquo; any layer. There is also a video  tutorial as well.&rdquo;</p>
<p><a href="http://www.gomediazine.com/tutorials/badass-bling-effect-in-photoshop/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/24_slow_shutter.jpg" width="150" height="150" />Slow shutter 2</h2>
<p>	  Shotgun Mag teaches you how to create this beautiful slow  shutter text effect. </p>
<p><a href="http://shotgunfront.com/mag/2008/10/30/slow-shutter-2/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/26_stock_texture.jpg" width="150" height="150" />Add  Stock Textures to Images for extra &lsquo;Oomph&rsquo;</h2>
<p>&ldquo;In this little Photoshop tutorial we&rsquo;ll be designing a  quick art piece, then we&rsquo;ll be adding some texture to it, this is to  demonstrate the use of texture in artwork&hellip; Obviously this method will work  better with some things and not so well with others, so please try to use it in  moderation, if you will.</p>
<p><a href="http://www.photoshopstar.com/effects/add-texture-to-improve-artwork/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/27_peel.jpg" width="150" height="150" />Peeled Back  Sticker Effect II</h2>
<p>	  This tutorial shows you how to create a peeled back sticker  effect using Photoshop.</p>
<p><a href="http://pshero.com/archives/peeled-back-sticker-effect-ii" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/28_scanline.jpg" width="150" height="150" />Scanline  Text</h2>
<p>	  This tutorial does a great job of &ldquo;&hellip;teaching you how to  achieve the all important glowing effect which people can&rsquo;t seem to get enough  of. Here we will create a style I&rsquo;ve named &lsquo;Scanline Text&rsquo; which is basically  text which glows like bright scanlines, with a smart reflection as well.&rdquo;</p>
<p><a href="http://psdlearning.com/2008/08/scanline-text/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/29_energy_sphere.jpg" width="150" height="150" />Creating Energy  Spheres in Photoshop</h2>
<p>&ldquo;For this tutorial you&rsquo;ll want to find a photo of someone  doing something that looks a bit larger than life.&rdquo; :) Nice one!</p>
<p><a href="http://www.developertutorials.com/blog/design/photoshop-design/creating-energy-spheres-in-photoshop-119/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/30_funky_sticker.jpg" width="150" height="150" />Funky  Stickers</h2>
<p>&ldquo;This will show you how to create that slapped on sticker  effect I&rsquo;m sure you&rsquo;ve seen popping up around the internet. It&rsquo;s simple to make  but looks really good in pieces of art and also on webpages for example as an  image link to an RSS feed.&rdquo;</p>
<p><a href="http://psdlearning.com/2008/08/funky-stickers/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/31_space_lighting.jpg" width="150" height="150" />Space  Lighting Effects in 10 Steps</h2>
<p>&ldquo;In this Photoshop tutorial I will show you how to create a  space scene with some nice Lighting Effects in 10 Steps.&rdquo;</p>
<p>	  Amazing effect.</p>
<p><a href="http://www.abduzeedo.com/space-lighting-effects-10-steps-photoshop-tutorial" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/32_luminiscent.jpg" width="150" height="150" />Luminescent Lines</h2>
<p>&ldquo;Here we will create some thin flowing lines that look as if  they emit light. This technique is fairly simple and is a great way to create  an abstract wallpaper or looks good integrated into another image. This  tutorial will mainly explore the brush engine and you will also learn how to  create custom brushes and use them effectively, combined with some interesting  layer styles.&rdquo;</p>
<p><a href="http://psdlearning.com/2008/06/luminescent-lines/" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/33_retro_text.jpg" width="150" height="150" />Retro Text</h2>
<p>&ldquo;Retro Text and Video Layers Retro text like this looks  great but isn&#8217;t easy to create in Photoshop alone so here we use a mix of  Photoshop and Illustrator, raster and vector to create some unique text. The  second part of this tutorial explains video layers, something which is  relatively new to most people. The final result will be an animated image that  could be used for a web header.&rdquo;</p>
<p><a href="http://photoshoptutorials.ws/photoshop-tutorials/text-effects/retro-text.html" class="smallbox">Visit tutorial</a></p>
</div>
<div class="toptutorialitem">
<h2>
<img src="http://www.designshack.net/postimages/top2008/6_text_effects.jpg" width="150" height="150" />50  Creative Photoshop Text Effects</h2>
<p><strong>&ldquo;</strong>Learn how to soak your text in  bubbles, splatter it with blood, turn it to glass, then to ice, melt it into  water, grow it into grass, cut it from metal and riddle it with bullets. These  50 incredible Photoshop effects will create text that explodes from the page  (or the screen).&rdquo; </p>
<p>	  Yes yes, it&rsquo;s more of a list than a tutorial but this was  too good a list to let go!</p>
<p><a href="http://psdtuts.com/tutorials-effects/50-creative-photoshop-text-effects/" class="smallbox">Visit tutorial</a></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/best-of-2008-graphic-design-tutorials/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Creating Fading Site Dividers</title>
		<link>http://designshack.net/articles/graphics/creating-fading-site-dividers/</link>
		<comments>http://designshack.net/articles/graphics/creating-fading-site-dividers/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 20:42:29 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://localhost:8888/?p=50</guid>
		<description><![CDATA[You might have seen these fading dividers/separators on various sites, which seem to fade both horizontally and vertically. Here is an example of what I mean: They provide a great way to split content up, doing so in a subtle and non-intrusive manner. I would like to share a simple way to create these fading [...]]]></description>
			<content:encoded><![CDATA[<p>You might have seen these fading dividers/separators on various sites, which seem to fade both horizontally and vertically. Here is an example of what I mean:</p>
<p><img src="http://www.designshack.net/postimages/faders_example.gif" /></p>
<p>They provide a great way to split content up, doing so in a subtle and non-intrusive manner. I would like to share a simple way to create these fading dividers using Photoshop. </p>
<p><span id="more-50"></span></p>
<h2>Step 1</h2>
<p>First, create a new layer. By using the pencil tool, draw a 1px solid horizontal line. Hold the SHIFT key as you click and drag the line to keep it straight. This is the basis for the whole fade effect.</p>
<p><img src="http://www.designshack.net/postimages/faders_step1.gif" /></p>
<h2>Step 2</h2>
<p>Select the eraser tool. Choose a very soft brush setting. The larger the brush size, the longer the fade (you can experiment to find the size that works best for your needs).</p>
<p><img src="http://www.designshack.net/postimages/faders_step2.gif" /></p>
<h2>Step 3</h2>
<p>Erase the left and right ends of the line. This makes the line fade near the ends.</p>
<p><img src="http://www.designshack.net/postimages/faders_step2b.gif" /></p>
<p><img src="http://www.designshack.net/postimages/faders_step2c.gif" /> </p>
<h2>Step 4</h2>
<p>Duplicate the layer containing the line (right click the layer in the right hand panel, then select &#8216;duplicate&#8217;). Select the lower of the two layers. </p>
<h2>Step 5</h2>
<p>Select filter>blur>Gaussian blur. Choose a radius of 3px to create the fade effect (or pick one which suits you!).</p>
<p><img src="http://www.designshack.net/postimages/faders_step5.gif" /></p>
<h2>Step 6</h2>
<p>Use the marquee tool to select everything on or above the solid line (with the blurred layer selected). Hit delete key. </p>
<p><img src="http://www.designshack.net/postimages/faders_step6.gif" /></p>
<h2>Step 7</h2>
<p>Adjust the opacity of the solid line and/or the shadow to suit your preference. Here is what it looks in the end.</p>
<p><img src="http://www.designshack.net/postimages/faders_final.gif" /></p>
<p>As a final note, if you want a greater amount of shading (like the one shown in the example at the top of the page), you can achieve that by duplicating the blurred layer multiple times (right after applying the Gaussian blur) until you are happy with the extent and intensity of the blur (and then, merge the blurred layers).</p>
<p>You can use this technique to create both horizontal and vertical content dividers. And with a little bit of tinkering around, it’s not too hard to come up with something like:</p>
<p><img src="http://www.designshack.net/postimages/faders_roundedcorners.gif" /> </p>
<p>So go on and spice up your borders, separators and edges! If you know of any other sites using this technique (or would like to share your own), please let us know in the comments. You never know, if we like your design it may end up being featured on the site!</p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/graphics/creating-fading-site-dividers/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Creating a Virtual jQuery Keyboard</title>
		<link>http://designshack.net/articles/javascript/creating-a-virtual-jquery-keyboard/</link>
		<comments>http://designshack.net/articles/javascript/creating-a-virtual-jquery-keyboard/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 11:15:48 +0000</pubDate>
		<dc:creator>Kishore Nallan</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://localhost:8888/?p=28</guid>
		<description><![CDATA[For those of us who travel often, we often end up accessing our emails and other confidential web accounts on public computers. In such circumstances, we are completely at the mercy of keyloggers and other malicious software that track our keystrokes and record our passwords. Yet, very few websites provide their users with the option [...]]]></description>
			<content:encoded><![CDATA[<p class="lead"><img src="http://www.designshack.net/postimages/jquerykeyboard.gif" alt="jQuery Keyboard" class="right" />For those of us who travel often, we often end up accessing our emails and other confidential web accounts on public computers. In such circumstances, we are completely at the mercy of keyloggers and other malicious software that track our keystrokes and record our passwords.</p>
<p>Yet, very few websites provide their users with the option of using a virtual keyboard to key in (at the bare minimum) their passwords. Yes, a few banks do it, but considering how much personal information we store in various web applications these days, the safety of these accounts are of no less significance to us. This tutorial will explain how we can implement a simple virtual keyboard with some (well, okay, lots of!) help from jQuery.</p>
<p>Before I begin, let me show you <a href="http://designshack.net/tutorialexamples/vkeyboard/">how it will all look in the end</a>.</p>
<p><span id="more-28"></span></p>
<h2>Basic HTML and CSS Setup</h2>
<p>Ok, let&#8217;s get started. We start off with a plain, old login form with username and password fields and a login button. We add a link which will show/hide the virtual keyboard when clicked.</p>
<p>Note: For the purpose of demonstration, I have actually used a normal text field instead of a password type text field!</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Login form<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;loginform&quot;</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;username&quot;</span>&gt;</span>Username:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pwd&quot;</span>&gt;</span>Password:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pwd&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pwd&quot;</span><span style="color: #66cc66;">/</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;showkeyboard&quot;</span> <span style="color: #000066;">title</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Type in your password using a virtual keyboard.&quot;</span>&gt;</span>Keyboard<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span> <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Submit&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit_butt&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Submit&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></td></tr></table></div>

<p>Next, it&#8217;s time to put in the XHTML for the keyboard in place. I just wanted to take a very simple approach, and thus ruled out generating the keys dynamically. I have just the four main rows of the standard keyboard (each enclosed in a DIV), along with their shift equivalents. So that means, a total of 8 rows, of which at any time (depending on whether the shift key is pressed or not), four of the rows would be visible, and the other four hidden.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;keyboard&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row0&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;accent&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;`&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;2&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;2&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;4&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;4&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;5&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;5&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;6&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;6&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;7&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;7&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;8&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;9&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;9&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; - &quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; - &quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;=&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;=&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;backspace&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Backspace&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row0_shift&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tilde&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;~&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;exc&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;!&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;at&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;@&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hash&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;dollar&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;$&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;percent&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;%&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;caret&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;^&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;ampersand&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&amp;&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;asterik&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;*&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;openbracket&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;(&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;closebracket&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;)&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;underscore&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;_&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;plus&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;+&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;backspace&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Backspace&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row1&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;q&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;q&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;w&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;w&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;e&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;e&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;r&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;r&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;t&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;t&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;y&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;y&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;o&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;o&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;p&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;p&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;[&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;[&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;]&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;]&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;\&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;\&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row1_shift&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Q&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Q&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;W&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;W&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;E&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;E&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;R&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;R&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;T&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;T&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Y&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Y&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;U&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;U&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;I&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;I&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;O&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;O&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;P&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;P&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;{&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;{&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;}&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;}&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;|&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;|&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row2&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;a&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;a&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;s&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;s&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;d&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;d&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;g&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;g&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;h&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;h&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;j&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;j&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;k&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;k&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;l&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;l&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;;&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;;&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;’&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;’&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> 
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row2_shift&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;a&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;A&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;s&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;S&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;d&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;D&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;F&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;g&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;G&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;h&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;H&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;j&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;J&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;k&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;K&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;l&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;L&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;;&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;:&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;’&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span>’<span style="color: #ff0000;">&quot;’ /&gt;</span></span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row3&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Shift&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Shift&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;shift&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;z&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;z&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;x&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;x&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;c&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;c&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;v&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;v&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;b&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;b&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;n&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;n&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;m&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;m&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;,&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;,&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;row3_shift&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Shift&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Shift&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;shifton&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Z&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Z&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;X&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;X&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;C&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;C&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;V&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;V&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;B&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;B&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;N&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;N&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;M&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;M&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lt&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&amp;lt;&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;gt&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&amp;gt;&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;?&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;?&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;spacebar&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;spacebar&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; &quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>I have taken care to represent characters which have special meaning in HTML, like “&lt;” using entities.</p>
<h2>The CSS</h2>
<p>I have kept the CSS styling very minimal. Of course, if you want your keyboard to look like a dragon, you can go ahead and all that jazz! We set the display property of div enclosing the keyboard to be “none” initially, as we don’t want it to show up till the user activates it by clicking on the “Keyboard” link.  In addition, we also hide the “shift” keys, i.e. the keys which get activated only when the shift button is down. I have named these rows with a div id ending “_shift”. We will bring them back into view when the user presses the shift key (we will see later).</p>
<p>The rest of the CSS involves basic formatting to make the keys look like as they are on a standard QWERTY keyboard.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#keyboard</span> <span style="color: #00AA00;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">560px</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> move<span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#spacebar</span> input <span style="color: #00AA00;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">180px</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">150px</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#shift</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#shifton</span> <span style="color: #00AA00;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">70px</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#row0_shift</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#row1_shift</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#row2_shift</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#row3_shift</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#row0</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#row0_shift</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">20px</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#row1</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#row1_shift</span> <span style="color: #00AA00;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">60px</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#row2</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#row2_shift</span> <span style="color: #00AA00;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">70px</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#shifton</span> <span style="color: #00AA00;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">border-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span> 
<span style="color: #000000; font-weight: bold;">border-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<h2>jQuery</h2>
<p>Let&#8217;s now get to the most important part &#8211; the JavaScript that controls the behavior of the keyboard. We will be using two jQuery extensions &#8211; one to make the keyboard draggable, and the other to aid in the selection and manipulation of the password field. I have made some additions to the original <a href="http://blog.0xab.cd/?action=view&#038;url=jquery-plugin-fieldselection">fieldSelection JQuery plugin</a> by <a href="http://blog.0xab.cd/">Alex Brem</a> to suit our additional needs. vkeyboard.js contains our custom code.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery-1.2.6.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery-ui-personalized-1.5.2.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery-fieldselection.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;vkeyboard.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>In vkeyboard.js, we place all our code within jQuery’s ready function to ensure that the code runs only after the document is fully loaded.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">// all our code goes here</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Let me just walk you through the underlying logic behind the code.  We first add an “onclick” event handler which causes the keyboard to toggle (i.e. show up if hidden, hide if already shown) when the user clicks on the “Keyboard” link.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#showkeyboard&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> height <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span>’#keyboard’<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> width <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span>’#keyboard’<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">width</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
leftVal<span style="color: #339933;">=</span>e.<span style="color: #660066;">pageX</span><span style="color: #339933;">-</span><span style="color: #CC0000;">40</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #339933;">;</span>
topVal<span style="color: #339933;">=</span>e.<span style="color: #660066;">pageY</span><span style="color: #339933;">+</span><span style="color: #CC0000;">20</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span>’#keyboard’<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>left<span style="color: #339933;">:</span>leftVal<span style="color: #339933;">,</span>top<span style="color: #339933;">:</span>topVal<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Next up, we make the keyboard draggable, so that the user can drag it and keep in anywhere on the screen such that it does not obstruct the text underneath. We do this by calling the draggable(), courtesy of the jQuery UI + draggable plugin.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>quot<span style="color: #339933;">;</span>#keyboard<span style="color: #339933;">&amp;</span>quot<span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">draggable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>We need to next define a function that toggles between the default rows on the keyboard and the rows which get activated when the “Shift” key is pressed.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> onShift<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>e<span style="color: #339933;">==</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">4</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> rowid <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#row&quot;</span> <span style="color: #339933;">+</span> i<span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span>rowid<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span>rowid<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;_shift&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">4</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> rowid <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#row&quot;</span> <span style="color: #339933;">+</span> i<span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span>rowid<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span>rowid<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;_shift&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Lastly, we define a function that’s called whenever any of the keys on the keyboard are pressed.</p>
<p>This function checks if the key pressed is Backspace. If it is, then it calls the replaceSelection function from the fieldSelection plugin with an empty string as a parameter, to indicate that a backspace operation (replacing preceding character to the current cursor location by an empty string – i.e. deleting the preceding character) must be performed.</p>
<p>If the “Shift” key had been pressed, then the function sets the “shifton” variable to be true to indicate that the shift key has been pressed and calls onShift(1). However if the shift key has already been pressed, the function deactivates the shift rows by calling onShift(0). </p>
<p>If some other key had been pressed, then we simply insert the character in between the current cursor position. The replaceSelection()handles the case when some characters have already been selected by the user. In that case, the selected characters would be replaced by the character that is represented by the key pressed.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#keyboard input&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> ‘Backspace’ <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$<span style="color: #009900;">&#40;</span>’#pwd’<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replaceSelection</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;Shift&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>shifton <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
onShift<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
shifton <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
onShift<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
shifton <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span>’#pwd’<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replaceSelection</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>shifton <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
onShift<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
shifton <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>And&#8230; we are done! Check out the <a href="http://www.designshack.net/tutorialexamples/vkeyboard/">demo</a> and <a href="http://www.designshack.net/tutorialexamples/vkeyboard/vkeyboard.zip">download full source code here</a>. </p>
<p>As you can see, most of the actual hard work is handled by the jQuery plugins. If you are interested in reading up more on the challenges involved with field selection and replacement using Javascript, you should check out <a href="http://www.quirksmode.org/dom/range_intro.html">this article on Quirksmode</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://designshack.net/articles/javascript/creating-a-virtual-jquery-keyboard/feed/</wfw:commentRss>
		<slash:comments>138</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Object Caching 665/774 objects using disk: basic

Served from: designshack.net @ 2012-02-09 23:52:06 -->
