<?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>phoenixheart - portfolio &#38; more &#187; javascript</title> <atom:link href="http://www.phoenixheart.net/tag/javascript/feed/" rel="self" type="application/rss+xml" /><link>http://www.phoenixheart.net</link> <description>phoenixheart - portfolio &#38; more</description> <lastBuildDate>Wed, 25 Aug 2010 03:02:03 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <script type="text/javascript">/*<![CDATA[*/if(typeof Meebo=="undefined"){Meebo=function(){(Meebo._=Meebo._||[]).push(arguments)};(function(q){var args=arguments;if(!document.body){return setTimeout(function(){args.callee.apply(this,args)},100);}var d=document,b=d.body,m=b.insertBefore(d.createElement('div'),b.firstChild);s=d.createElement('script');m.id='meebo';m.style.display='none';m.innerHTML='<iframe id="meebo-iframe"></iframe>';s.src='http'+(q.https?'s':'')+'://'+(q.stage?'stage-':'')+'cim.meebo.com/cim/cim.php?network='+q.network;b.insertBefore(s,b.firstChild);})({network:'phoenixheartnet_bo16we'});}/*]]>*/</script> <item><title>php.js &#8211; Javascript equivalents for PHP functions</title><link>http://www.phoenixheart.net/2009/02/phpjs-javascripts-equivalent-for-php-functions/</link> <comments>http://www.phoenixheart.net/2009/02/phpjs-javascripts-equivalent-for-php-functions/#comments</comments> <pubDate>Wed, 11 Feb 2009 15:59:58 +0000</pubDate> <dc:creator>phoenix.heart</dc:creator> <category><![CDATA[Client stuffs]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Server stuffs]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[php]]></category><guid
isPermaLink="false">http://www.phoenixheart.net/?p=227</guid> <description><![CDATA[Being a PHP developer, there must be certain times when you have to deal with Javascript. And if you&#8217;re rather confident with PHP when in the meantime suck at JS just like me, you must have more than once googled for the JS equivalent of that very useful/powerful base64_encode, or htmlentities, or array_merge, or strpos, [...]]]></description> <content:encoded><![CDATA[<p><span
class="drop-cap">B</span>eing a PHP developer, there must be certain times when you have to deal with Javascript. And if you&#8217;re rather confident with PHP when in the meantime suck at JS just like me, you must have more than once googled for the JS equivalent of that very useful/powerful <a
href="http://www.php.net/base64_encode">base64_encode</a>, or <a
href="http://www.php.net/htmlentities">htmlentities</a>, or <a
href="http://www.php.net/array_merge">array_merge</a>, or <a
href="http://www.php.net/strpost">strpos</a>, you_name_it.</p><p>Well, I&#8217;m not any exception, until I got acknowledged of a JS project called <a
href="http://phpjs.org/">php.js</a> originally started by <a
href="http://kevin.vanzonneveld.net/techblog/article/phpjs_licensing/">Kevin van Zonneveld</a>. I have used this in more than one of my projects and it just works perfect for me without any hassles, so maybe I should feature it in return. <span
id="more-227"></span></p><p>You can tell, the project is all about porting PHP functions into Javascript. Yes, many of those are there, but under a different name or one step away &#8211; like PHP&#8217;s <a
href="http://www.php.net/sin">sin</a> and JS&#8217; <a
href="http://www.w3schools.com/jsref/jsref_sin.asp">Math.sin</a>. Some others however, are not that easy to obtain in Javascript &#8211; I&#8217;m talking about md5, date, serialize etc. and those array stuffs. It even deals with file system, with the support of the <a
href="http://www.w3.org/TR/XMLHttpRequest/">XMLHttpRequest object</a> (therefore these functions may fail if the browser doesn&#8217;t support it).</p><p>The project is active and it seems Kevin, with the great help from other contributors, is constantly expanding it. A list of available (successfully ported) methods can be found <a
href="http://phpjs.org/functions/index">here</a> &#8211; nearly 300 (!) each with detailed code and examples. You can just copy the function code and embed it into your script to start using right away, or download the full packages for everything.</p><p>I, for myself, can&#8217;t understand how there are such good people in this world: put huge effort into something just to give away, expecting nothing in return.</p><p>Are you using of this wonderful project in your own? If so how about featuring it?</p> <img
style='display:none' id="post-227-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.phoenixheart.net/2009/02/phpjs-javascripts-equivalent-for-php-functions/',title:'php.js &#8211; Javascript equivalents for PHP functions',tweet:'Being a PHP developer, there must be certain times when you have to deal with Javascript. And if you',description:'Being a PHP developer, there must be certain times when you have to deal with Javascript. And if you'})"><script type='text/javascript'>document.getElementById("post-227-blankimage").onload();</script>]]></content:encoded> <wfw:commentRss>http://www.phoenixheart.net/2009/02/phpjs-javascripts-equivalent-for-php-functions/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Bad practices (and how to avoid them) in web development</title><link>http://www.phoenixheart.net/2008/10/bad-practices-and-how-to-avoid-them-in-web-development/</link> <comments>http://www.phoenixheart.net/2008/10/bad-practices-and-how-to-avoid-them-in-web-development/#comments</comments> <pubDate>Thu, 23 Oct 2008 07:40:15 +0000</pubDate> <dc:creator>phoenix.heart</dc:creator> <category><![CDATA[Client stuffs]]></category> <category><![CDATA[Design]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[css]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[web]]></category><guid
isPermaLink="false">http://www.phoenixheart.net/?p=47</guid> <description><![CDATA[(Yet another post taken from the ruins of Tekaboo) Whether you are a web designer or a server side guy, there are certain times when you must get your hands dirty with HTML codes. Since HTML is rich, and even getting richer with the coming HTML 5, many HTML coders tend to do it improperly [...]]]></description> <content:encoded><![CDATA[<p>(Yet another post taken from the ruins of <a
href="http://tekaboo.com">Tekaboo</a>)</p><p><span
class="drop-cap">W</span>hether you are a web designer or a server side guy, there are certain times when you must get your hands dirty with HTML codes. Since HTML is rich, and even getting richer with the coming <a
href="http://en.wikipedia.org/wiki/HTML_5">HTML 5</a>, many HTML coders tend to do it improperly to achieve what could have done differently (and better). This results in many bad habits that should be avoided.</p><h3>Table designing</h3><p><img
class="shot" title="An internet with tables " src="http://www.phoenixheart.net/wp-content/uploads/2008/10/table.gif" alt="tabletrtd.inter.net" width="478" height="149" /></p><p>No, tables just won’t die (soon), and I’m not insisting them to. They will live happily so long as this internet still has some tabular data to display, or until W3C decides to replace “table” by “chair” which obviously sounds cooler for developers to write.However, for those who are still using tables to align the paragraphs, links, images, and other HTML objects out there, please dust away the cells and begin playing around with CSS design. There are some very good reasons why:</p><ul><li>Codes with table design are almost totally unreadable compared to CSS design</li><li>Tables increase your page’s file size significantly in most cases</li><li>Table design means more work for the browser, especially when you have nested tables (as most of table designers do)</li><li>Finally, regardless of all those conservative heads out there, with all of its advantages, CSS design is the future of the web. Take a look around, now every design job posted on every freelance site includes this line: MUST BE IN CSS AND NOT TABLES, sometimes with 3 or more exclamation marks (!) following.</li></ul><p>So, don’t be easy to yourself. In your next project, begin CSS. Don’t let tables’ “ease of use” prevent you from following the standard. Anyway, who told you that designing using CSS was <em>that </em>difficult to learn?<span
id="more-47"></span></p><h3>Relying on Javascript</h3><p>I bet that you’ve seen this bunch of codes more than once:</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
</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><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;!--</span>
<span style="color: #003366; font-weight: bold;">function</span> MM_swapImgRestore<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;">//v3.0</span>
    <span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">,</span>x<span style="color: #339933;">,</span>a<span style="color: #339933;">=</span>document.<span style="color: #660066;">MM_sr</span><span style="color: #339933;">;</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>a<span style="color: #339933;">&amp;&amp;</span>i<span style="color: #339933;">&lt;</span>a.<span style="color: #660066;">length</span><span style="color: #339933;">&amp;&amp;</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">=</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;&amp;</span>x.<span style="color: #660066;">oSrc</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> x.<span style="color: #660066;">src</span><span style="color: #339933;">=</span>x.<span style="color: #660066;">oSrc</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> MM_preloadImages<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;">//v3.0</span>
    <span style="color: #003366; font-weight: bold;">var</span> d<span style="color: #339933;">=</span>document<span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>d.<span style="color: #660066;">images</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><span style="color: #339933;">!</span>d.<span style="color: #660066;">MM_p</span><span style="color: #009900;">&#41;</span> d.<span style="color: #660066;">MM_p</span><span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> Array<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> i<span style="color: #339933;">,</span>j<span style="color: #339933;">=</span>d.<span style="color: #660066;">MM_p</span>.<span style="color: #660066;">length</span><span style="color: #339933;">,</span>a<span style="color: #339933;">=</span>MM_preloadImages.<span style="color: #660066;">arguments</span><span style="color: #339933;">;</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>a.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">indexOf</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: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> d.<span style="color: #660066;">MM_p</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> Image<span style="color: #339933;">;</span> d.<span style="color: #660066;">MM_p</span><span style="color: #009900;">&#91;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">src</span><span style="color: #339933;">=</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> MM_findObj<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span> d<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//v4.01</span>
  <span style="color: #003366; font-weight: bold;">var</span> p<span style="color: #339933;">,</span>i<span style="color: #339933;">,</span>x<span style="color: #339933;">;</span>  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>d<span style="color: #009900;">&#41;</span> d<span style="color: #339933;">=</span>document<span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>p<span style="color: #339933;">=</span>n.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;?&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">&amp;&amp;</span>parent.<span style="color: #660066;">frames</span>.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    d<span style="color: #339933;">=</span>parent.<span style="color: #660066;">frames</span><span style="color: #009900;">&#91;</span>n.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span>p<span style="color: #339933;">+</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">document</span><span style="color: #339933;">;</span> n<span style="color: #339933;">=</span>n.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">=</span>d<span style="color: #009900;">&#91;</span>n<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;&amp;</span>d.<span style="color: #660066;">all</span><span style="color: #009900;">&#41;</span> x<span style="color: #339933;">=</span>d.<span style="color: #660066;">all</span><span style="color: #009900;">&#91;</span>n<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</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>x<span style="color: #339933;">&amp;&amp;</span>i<span style="color: #339933;">&lt;</span>d.<span style="color: #660066;">forms</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> x<span style="color: #339933;">=</span>d.<span style="color: #660066;">forms</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>n<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</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>x<span style="color: #339933;">&amp;&amp;</span>d.<span style="color: #660066;">layers</span><span style="color: #339933;">&amp;&amp;</span>i<span style="color: #339933;">&lt;</span>d.<span style="color: #660066;">layers</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> x<span style="color: #339933;">=</span>MM_findObj<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span>d.<span style="color: #660066;">layers</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">document</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>x <span style="color: #339933;">&amp;&amp;</span> d.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#41;</span> x<span style="color: #339933;">=</span>d.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">return</span> x<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> MM_swapImage<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;">//v3.0</span>
  <span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">,</span>j<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>x<span style="color: #339933;">,</span>a<span style="color: #339933;">=</span>MM_swapImage.<span style="color: #660066;">arguments</span><span style="color: #339933;">;</span> document.<span style="color: #660066;">MM_sr</span><span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #339933;">;</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: #009900;">&#40;</span>a.<span style="color: #660066;">length</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>i<span style="color: #339933;">+=</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span>
   <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">=</span>MM_findObj<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>document.<span style="color: #660066;">MM_sr</span><span style="color: #009900;">&#91;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span>x<span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>x.<span style="color: #660066;">oSrc</span><span style="color: #009900;">&#41;</span> x.<span style="color: #660066;">oSrc</span><span style="color: #339933;">=</span>x.<span style="color: #660066;">src</span><span style="color: #339933;">;</span> x.<span style="color: #660066;">src</span><span style="color: #339933;">=</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">+</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #006600; font-style: italic;">//--&gt;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div><p>Oh, you’ve not seen it ever? Well, I lost my bet… Under the name of a VERY popular HTML editor, these codes are VERY popularly used, for a VERY popular effect that you must have known (this time I bet, really!!!) &#8211; the rollover, or “image-swapping” animation. Basically, there are 2 images involved: one for “normal” state:</p><p><img
title="click_normal" src="http://www.phoenixheart.net/wp-content/uploads/2008/10/click_normal.gif" alt="click_normal Bad practices (and how to avoid them) in web development" width="88" height="25" /></p><p>and the other for “hover” state:</p><p><img
title="click_hover" src="http://www.phoenixheart.net/wp-content/uploads/2008/10/click_hover.gif" alt="click_hover Bad practices (and how to avoid them) in web development" width="88" height="25" /></p><p>When the mouse hovers that gray image, the orange one is shown up, which creates a “lighten up” effect and somehow tells the user: Click me, I’m sexy &amp; ready.</p><p>So what’s wrong with this very cool method, you ask?</p><ul><li>First, the code is huge. See above. And you must implement a “preloading” feature too, or it will take time for the hover-state image to be downloaded and shown up.</li><li>Second, this technique is totally useless if the user disables JavaScript.</li><li>Third, as we have 2 different images here, the number of requests to server is increased.</li><li>And, don’t you know that browser is painfully slow in displaying an image?</li></ul><p>Convinced? Here is the most common solution: Instead of using two images for two different states and make them swap, the HTML experts out there are using just one background image for BOTH states and some attribute of CSS called “<a
href="http://www.w3schools.com/css/pr_background-position.asp">background-position</a>” to create a “rollover” effect that doesn’t hurt. I won’t go into details here, since it will in no doubt lengthen this article unnecessarily, but I have <a
href="http://www.findmotive.com/2006/10/31/simple-css-image-rollover/">a good resource</a> for you. Using this very simple technique, all the disadvantages listed above will just vanish.</p><p>With all this blahblah, however, I’m not stressing on a rollover effect alone. What I’m trying to tell is that sometimes you just don’t have to Javascript at all. We know that not everything can be done in CSS instead of Javascript, as JS has undeniable pros. But keep in mind that pros come with cons, and whenever you can, avoid it.</p><h3>Overusing images</h3><p><img
class="shot" title="Too many images!!!" src="http://www.phoenixheart.net/wp-content/uploads/2008/10/toomuch.jpg" alt="Too many images!!!" width="288" height="203" /></p><p>I know, “A picture speaks a thousand words” as they say. What a pity that doesn’t apply in web designing &#8211; if the term “picture” implies an “text displayed as image”. Following the innovation of Web 2.0 where only content matters, images are being reduced from websites, and yes they have good reasons to do so:</p><ul><li>Images weigh. A small image can easily weigh ~10KB, that is (how coincident) ~1000 words. If you have a busy site, that image can easily cost you gigabytes of bandwidth each month. It’s money. So how to save some of that bandwidth/money? Use some meaningful texts instead. How about replacing that fancy button with the “Click me” text now?</li><li>Those are fat, slow. Images are not an exception. A site loaded with images will load v……e….r…….y s…..l….o……..w…….l…..y. And <a
href="http://www.akamai.com/html/about/press/releases/2006/press_110606.html">researches have shown</a> that 4 seconds is the maximum loading time a web surfer accepts (<a
href="http://www.websiteoptimization.com/speed/1/">some</a> say that it’s 8 sec anyway). Then, if your page takes more than ten seconds to load, unless it has some real pictures about aliens on Mars, users will leave. So, following Mc Donald’s rule: if you want your visitors to stay, don’t make them wait.</li><li>Images are very bad in term of accessibility. Web visitors with limited seeing ability tend to use the built-in “Text Size” tool available in almost all browsers to increase or decrease the size of text, thus can have a better reading experience. With images, they simply can’t. Very bad, I must repeat.</li><li>Pages with images all over the place suck in printing. When the acceptable print resolution is 300dpi, normal web image resolution is only 72 dpi or so. This results in a terrible print quality.</li></ul><p>With all these proofs (and maybe more that I’ve not come up with), along with the fact that 90% of images on your page are totally replaceable by plain text, let there be text!</p><h3>Everything is &lt;p&gt;</h3><p>More than often I encounter websites in which every text content is contained in &lt;p&gt;…&lt;/p&gt; tag pairs, where the titles and headers &lt;p&gt;’s are formatted to be bold, with bigger size, underlines etc. to differentiate from other normal &lt;p&gt; elements.</p><p><img
class="shot" title="Header and paragraph" src="http://www.phoenixheart.net/wp-content/uploads/2008/10/p.gif" alt="Header and paragraph" width="474" height="141" /></p><p>It is a misuse of &lt;p&gt;.</p><p>&lt;p&gt; is intended to display paragraph content, while heading tags like &lt;h1&gt;, &lt;h2&gt;, &lt;h3&gt; etc. are for heading and title texts. Though you can always use CSS to make a specified &lt;p&gt; to stand out of the crowd to be an article title, and it seems to make no difference or problem in displaying or accessibility or readability or whatsoever, it’s perfectly wrong. According to Wikipedia, &lt;h&gt; tags have something to do with “the document’s structure and organization” and “some programs use them to generate outlines and tables of contents”. So, to human eyes, your page may look like a document, but with cyber programs, it may not. Talking about <abbr
title="Search Engine Optimization">SEO</abbr> this misuse will likely result in a low rank in Google.</p><p>So here’s the final line: let &lt;p&gt; be &lt;p&gt;. There’s no special &lt;p&gt; in this web development world, please.</p><h3>“Look what I can do” style</h3><p>(I must admit, this is the bad habit I’m trying to give up too). <img
class="shot" style="margin: 5px; float: right;" title="Please wait while I'm fading in" src="http://www.phoenixheart.net/wp-content/uploads/2008/10/wait.gif" alt="Please wait while I'm fading in" width="297" height="373" /></p><p>Thanks to the open source wave in web development, now creating cool user experiences is easier than ever. Back in the old days, a drop-down menu was a breathtaking effect, and you attracted user attention by making the text blink. Now, it’s a massive number of killing javascript stuffs out there: slide up down right left, fading in and out, shaking, scaling, folding, bouncing, exploding, fish eye, light box, drag and drop… each with one or two lines of code. And you don’t have to care about cross browser compatibility, as they (jQuery, mootools, script.aculo.us, Dojo) have done that already for you. Web developers, we’re at your service!</p><p>Ok, wait…</p><p>Since effects are all cool, you may want to show them off. “Look this, and this, and this, hey, impressed?” that’s how your website is saying. But (I hate this word, <em>but</em> I have to use it yet again), beware, those fancy stuffs may be something that make your site not accessible. Like, a user may have to click on a link and wait for the invisible div to slowly fade in just to read its content. Isn’t it something tiring? Why must the content be one click (and five seconds) away from him? Why wasn’t it there from the beginning?</p><p>Unless you have a very good reason to, don’t ever hide your content from the users. Sure, fading divs are candies for the eyes, but a rushing user’s eyes don’t need any candy. By the way may I ask who’s not rushing today?</p><h3>What else?</h3><p>Actually I had something more in mind before starting this articles, such as “Click me” linking, frame structure, Ajax overuse etc., during writing I got a feeling that those are too much into details, so I decided to omit them. Maybe I will put them back into the table (not <em>that</em> table) in the near future.</p> <img
style='display:none' id="post-47-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.phoenixheart.net/2008/10/bad-practices-and-how-to-avoid-them-in-web-development/',title:'Bad practices (and how to avoid them) in web development',tweet:'(Yet another post taken from the ruins of Tekaboo) Whether you are a web designer or a server side g',description:'(Yet another post taken from the ruins of Tekaboo) Whether you are a web designer or a server side g'})"><script type='text/javascript'>document.getElementById("post-47-blankimage").onload();</script>]]></content:encoded> <wfw:commentRss>http://www.phoenixheart.net/2008/10/bad-practices-and-how-to-avoid-them-in-web-development/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced) (user agent is rejected)
Database Caching 3/11 queries in 0.099 seconds using disk

Served from: www.phoenixheart.net @ 2010-09-08 09:31:20 -->