<?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>Unlimited Edition &#187; Web development</title>
	<atom:link href="http://michaelodden.com/category/webdevelopment/feed/" rel="self" type="application/rss+xml" />
	<link>http://michaelodden.com</link>
	<description>Unlimited views, cleverness and love</description>
	<lastBuildDate>Tue, 08 Mar 2011 20:33:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Review: PHP 5 Social Networking</title>
		<link>http://michaelodden.com/general/review-php-5-social-networking/</link>
		<comments>http://michaelodden.com/general/review-php-5-social-networking/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 20:33:47 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[php 5]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://michaelodden.com/?p=448</guid>
		<description><![CDATA[I was, a few weeks back, asked to review the book &#8220;PHP 5 Social Networking&#8221; by Michael Peacock. As I have partaken in development of several websites with both more and less social elements I found the book&#8217;s title and slogan interesting. About the book The tag line of the book &#8220;Create a powerful and [...]

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/school/new-job-quadcopter-and-more/' rel='bookmark' title='Permanent Link: New job, quadcopter and more'>New job, quadcopter and more</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>I was, a few weeks back, asked to review the book &#8220;<strong><a href="https://www.packtpub.com/php-create-powerful-dynamic-social-networking-website/book"><acronym title="Pre-Hypertext Processing">PHP</acronym> 5 Social Networking</a></strong>&#8221; by <strong>Michael Peacock</strong>. As I have partaken in development of several websites with both more and less social elements I found the book&#8217;s title and slogan interesting.<span id="more-448"></span></p>
<h2>About the book</h2>
<p><a href="http://michaelodden.com/wp-content/uploads/2011/03/PHP.png"><img class="size-full wp-image-450 alignleft" title="PHP 5 Social Networks" src="http://michaelodden.com/wp-content/uploads/2011/03/PHP.png" alt="" width="125" height="152" /></a></p>
<p>The tag line of the book &#8220;<em>Create a powerful and dynamic social networking website in <acronym title="Pre-Hypertext Processing">PHP</acronym> by building a flexible framework</em>&#8221; sums up pretty well the main aims of the book. It starts off by giving an introduction to social networks: the definitions, existing services and software-solutions as well as why and when you might want to develop your own (Chapter 1).</p>
<p>Assuming you need your own solution it then goes on with planning and designing the <strong>framework</strong> which will serve as the platform for the further development of your social network site (Chapter 2). The next chapters (Chapter 3 through 10) goes systematically through how to implement features such as registration, relationships, status stream, events, groups, <acronym title="Application Programming Interface">API</acronym> etc.</p>
<p>It then finishes off with discussions around <em>deployment</em>, <em>security and maintenance</em> (Chapter 12), <em>marketing and monetizing </em>(Chapter 13) and finally a chapter about performance &#8211; Chapter 14: <em>Planning for growth</em>.</p>
<h2>My thoughts</h2>
<p><em>The short version:</em> I like the book. It&#8217;s a recommended read for people wanting to learn more about extensible application frameworks suited for the web as well as examples of developing and implementing social features.</p>
<p><em>The slightly longer version:</em> I like the fact that Michael (Peacock, I do not speak about my self in third person&#8230; usually) follows a systematic approach the whole way through and focuses on well known best practices. These includes data sanitation, <acronym title="Model-View-Controller">MVC</acronym>, design patterns and encourages the reader to  just use the exapmles as inspiration and a starting point.</p>
<p>I would like the chapter about performance (Chapter 14: Planning for growth) to be a little more comprehensive though, but it&#8217;s really more suited for several books of it own and Michael does give a nice overview of some of the options and techniques available which in turn can point the reader in possible directions for further reading.</p>
<p>The nitpicking: The editors should also have done a better job with the typography related to the code examples as they can be a little hard to read sometimes with lot&#8217;s of linewraps etc, as well as some minor typos which sometimes can cause a little confusion.</p>
<p>The <acronym title="HyperText Markup Language">HTML</acronym>-purist in me do feel a little bad about some of the <acronym title="HyperText Markup Language">HTML</acronym>/<acronym title="Cascading Style Sheets">CSS</acronym>-examples though, but that&#8217;s not the focus of the book. <img src='http://michaelodden.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>Who it&#8217;s for</h2>
<p>The author assumes the reader knows the basics of <acronym title="Pre-Hypertext Processing">PHP</acronym> 5, <acronym title="Object Oriented Programming">OOP</acronym> and preferably some knowledge regarding software design patterns but that&#8217;s not required.</p>
<p>Sidenote: The techniques listed in this book is not limited to social networks so there are a lot of good information here about how to develop a framework in general. The &#8220;Social&#8221;-bit is just for the buzz <img src='http://michaelodden.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h2>Useful information</h2>
<p><strong> Title:</strong> <a href="https://www.packtpub.com/php-create-powerful-dynamic-social-networking-website/book"><acronym title="Pre-Hypertext Processing">PHP</acronym> 5 Social Networking</a></p>
<p><strong>Author:</strong> <a title="Michael's personal website" href="http://www.michaelpeacock.co.uk/">Michael Peacock</a></p>
<p><strong>ISBN:</strong> 1849512388</p>
<p><strong>ISBN:</strong> 13 : 978-1-849512-38-1</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src="http://michaelodden.com/?ak_action=api_record_view&id=448&type=feed" alt="" />

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/school/new-job-quadcopter-and-more/' rel='bookmark' title='Permanent Link: New job, quadcopter and more'>New job, quadcopter and more</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/general/review-php-5-social-networking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>URLs should express output-format, not source-format</title>
		<link>http://michaelodden.com/webdevelopment/urls-should-express-output-format-not-source-format/</link>
		<comments>http://michaelodden.com/webdevelopment/urls-should-express-output-format-not-source-format/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 23:14:42 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Tip of the day]]></category>
		<category><![CDATA[User-experience]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[file-extensions]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://michaelodden.com/?p=296</guid>
		<description><![CDATA[I&#8217;m the kind of guy who always tries to optimize my ways, especially when it comes programming. Over the last years I&#8217;ve worked on/against a multitude of CMS, frameworks and API&#8217;s, and quite often make some thoughts how things could be better, easier and more intuitive. One of these things are regarding how to format [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m the kind of guy who always tries to optimize my ways, especially when it comes programming. Over the last years I&#8217;ve worked on/against a multitude of <acronym title="Content Management System">CMS</acronym>, frameworks and <acronym title="Application Programming Interface">API</acronym>&#8217;s, and quite often make some thoughts how things could be better, easier and more intuitive.</p>
<p>One of these things are regarding how to format a <acronym title="Uniform Resource Locator">URL</acronym>.</p>
<p><span id="more-296"></span></p>
<p>This post isn&#8217;t really server-technically focused, as it is more a discussion of an idea. I&#8217;ll none the less assume that the reader has some familiarity with <a href="http://en.wikipedia.org/wiki/MIME_type">mime-types</a>, basic webserver-settings (<a href="http://technet.microsoft.com/en-us/library/cc771240(WS.10).aspx">like</a> <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fhttpd.apache.org%2Fdocs%2F2.0%2Fhandler.html&amp;ei=eppKSsbyL5Ph-QbY3pnfBQ&amp;usg=AFQjCNGlmxT6bNAwOk5cEwUNLfQy5GSSMQ&amp;sig2=GlBSqGjdNkmybxQDDlwSNA">handlers</a> and <a href="http://learn.iis.net/page.aspx/460/using-url-rewrite-module/"><acronym title="Uniform Resource Locator">URL</acronym></a>-<a href="http://httpd.apache.org/docs/2.0/misc/rewriteguide.html">rewrite</a>-<a href="http://www.workingwith.me.uk/articles/scripting/mod_rewrite">techniques</a>).</p>
<h2>Why</h2>
<p>As far as I&#8217;m concerned, any <acronym title="Uniform Resource Locator">URL</acronym> should give a hint of what you will find there, and by stripping the file-extension and just sitting left with something that&#8217;ll look like a directory, or using the scripting-language&#8217;s extension, I believe that we works against this. File-extensions gives an important hint regarding what the content is. What do you expect when you see &#8220;.jpg&#8221;, &#8220;.gif&#8221; or &#8220;.png&#8221;? Yes, images. Then what about &#8220;.html&#8221;, &#8220;.txt&#8221; and &#8220;.odf&#8221;? It&#8217;s most likely some kind of text, perhaps formatted. So what does &#8220;.php&#8221;, &#8220;.py&#8221; and &#8220;.aspx&#8221; tell us? Not much &#8211; it mostly a directive to the webserver, telling it to use some kind of parser to compile/process the contents before outputting it. And it might output html, xml or pdf as well as anything else.</p>
<p>A couple of years ago it had a &#8220;coolism&#8221; about it, saying that &#8220;I know how to develop fancy websites&#8221;, but nowadays people mostly expect some kind of interactivity anyway.</p>
<h2>How</h2>
<p>All relevant webservers today have to possibility to map any kind of extensions to any kind of (supported) language-parsers. I.e. with Apache you can use the AddType-directive like this:</p>
<pre>addhandler php5-script html xml json</pre>
<p>- to  parse all .html-, .xml and .json-files in the given directory as <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.</p>
<p>Now, let&#8217;s say you have an <acronym title="Application Programming Interface">API</acronym> which allows you (or perhaps other users), to query a service for information &#8211; and allows it to be delivered in xml, json and html. This is usually solved by adding some parameter like &#8220;of&#8221; (output-format) or something like that in the request to tell which format you&#8217;d like. I prefer to keep everything as logical and reducing the need to look up in manuals as far as reasonably possible, so instead of sending GET-requests like this:</p>
<pre>http://example.com/gateway.php?id=15&amp;key=11341&amp;of=xml

http://example.com/gateway.php?id=15&#038;key=11341&#038;of=json

http://example.com/gateway.php?id=15&#038;key=11341&#038;of=html</pre>
<p>I&#8217;d rather prefer:</p>
<pre>http://example.com/gateway.xml?id=15&amp;key=11341

http://example.com/gateway.json?id=15&#038;key=11341

http://example.com/gateway.html?id=15&#038;key=11341</pre>
<p>This applies just as much for those <a href="http://mallinson.ca/post/mod_rewrite/">sexy</a> <a href="http://www.highrockmedia.com/blog/web-development/search-engine-friendly-urls-a-key-piece-of-the-seo-pie/comment-page-1">search-friendly</a> URLs &#8211; just append .html to that pretty <acronym title="Uniform Resource Locator">URL</acronym>. <a href="http://www.youtube.com/watch?v=dSG6C33GwsE">Google says</a> that it atleast won&#8217;t affect negatively on your ranking &#8211; so why not?</p>
<h2>Possible problems</h2>
<p>There are some obvious problem to this approach:</p>
<p><strong>1: What if you want different parsers (let&#8217;s say php and python) for different files but which will serve the same kind of output? How do we tell the server which to use when?</strong></p>
<p>- Possible solutions to this is to either separate them in different folders (the cleanest approach), or expand the extension to ie. .php.html and .py.html. Perhaps in combination with some mod_rewrite-kind of tricks.</p>
<p><strong>2: What about the overhead for static files, which still is sent through an interpreter although nothing is changed?</strong></p>
<p>- If you are running a service which is sensitive to these kind of margins, you should just use dedicated servers or CDN&#8217;s to deliver the static content no matter what.</p>
<p><strong>3: How far shall we take it? Should we use extensions like .html5 and .xhtml etc?</strong></p>
<p>-  I do believe that these differences are mostly relevant to the software parsing them, so in these cases it may suffice with keeping with i.e. .html, and use the <acronym title="Multipurpose Internet Mail Extension">MIME</acronym>-type to send further details.</p>
<h2>Summary</h2>
<p>Although all my examples might not pinpoint all the benefits I do believe that there is an idea in keeping the file-extension, both to assist external users as well as might reduce some clutter.</p>
<p>What are the pros and cons of an approach like this? I&#8217;ve barely touched a few in this post, but I hope I was able to mention some of the most essential ones.</p><img src="http://michaelodden.com/?ak_action=api_record_view&id=296&type=feed" alt="" />

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/webdevelopment/urls-should-express-output-format-not-source-format/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>table-row-highlighter.js &#8211; now as jQuery-plugin</title>
		<link>http://michaelodden.com/webdevelopment/table-row-highlighterjs-now-as-jquery-plugin/</link>
		<comments>http://michaelodden.com/webdevelopment/table-row-highlighterjs-now-as-jquery-plugin/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 13:37:07 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Web development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[table-row-highlighter]]></category>

		<guid isPermaLink="false">http://michaelodden.com/?p=234</guid>
		<description><![CDATA[In an effort to make it easier integratable to existing environments, I have now created a jQuery-plugin as well. Thanks to Mats as well for suggesting it! See the original blogpost &#8211; for information of the concept &#8211; or go straight to the demo-page or jquery-demo-page to watch it in action. jQuery has turned out [...]

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/webdevelopment/table-row-highlighterjs/' rel='bookmark' title='Permanent Link: table-row-highlighter.js'>table-row-highlighter.js</a></li>
<li><a href='http://michaelodden.com/development/usability-tips-for-your-application-part-i/' rel='bookmark' title='Permanent Link: Usability-tips for your application (Part I)'>Usability-tips for your application (Part I)</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>In an effort to make it easier integratable to existing environments, I have now created a jQuery-plugin as well. Thanks to <a href="http://e-mats.org">Mats</a> as well for <a href="http://michaelodden.com/webdevelopment/table-row-highlighterjs/comment-page-1/#comment-1844">suggesting it</a>!</p>
<p>See the <a href="http://michaelodden.com/webdevelopment/table-row-highlighterjs/">original blogpost</a> &#8211; for information of the concept &#8211; or go straight to the <a href="http://michaelodden.com/labs/js/table-row-highlighter/">demo-page</a> or <a href="http://michaelodden.com/labs/js/table-row-highlighter/jquery-demo.php">jquery-demo-page</a> to watch it in action.<span id="more-234"></span> <a href="http://jquery.com/">jQuery</a> has turned out to be the tool of choice for many developers out there, both because of it ease of use and it&#8217;s powerful features.  Although jQ might be a little overkill for some applications, it has the sleakest way of packaging a lot of functionality and allowing for modularity through plugins as I&#8217;ve experienced so far. Feel free to contribute if you&#8217;d like <img src='http://michaelodden.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , i.e. adapting it to other frameworks or suggest new neat features.</p>
<p>Please give it a try and let me know what you think!</p>
<h2>Download</h2>
<ul>
<li><a href="http://michaelodden.com/labs/js/table-row-highlighter/jquery.trh-0.3.js">jquery.trh-0.3.js</a> (4.5kB)</li>
<li><a href="http://michaelodden.com/labs/js/table-row-highlighter/jquery.trh-0.3.min.js">jquery.trh-0.3.min.js</a> (1.8kB)</li>
</ul>
<h2>Activation</h2>
<pre class="javascript" name="code">$(document).ready(function() {
  var params = {}; // See the jquery-demo-page for available parameters
  $("table").highlighter(params);
});</pre>
<h2>Known limitations</h2>
<p>You should avoid activating it at more than one table on each page for now &#8211; the next version will have fixed this with several activation-modes. The next version will also include dynamic column-selection as well, allowing i.e. to let the users press any column to match against.</p>
<h2>Possibly related</h2>
<ul>
<li><a href="http://visionwidget.com/toolz/8-web-development/47-10-table-plugin-jquery-learned.html">10 Table Plugin For jQuery Must To Be Learned</a>
</li>
</ul><img src="http://michaelodden.com/?ak_action=api_record_view&id=234&type=feed" alt="" />

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/webdevelopment/table-row-highlighterjs/' rel='bookmark' title='Permanent Link: table-row-highlighter.js'>table-row-highlighter.js</a></li>
<li><a href='http://michaelodden.com/development/usability-tips-for-your-application-part-i/' rel='bookmark' title='Permanent Link: Usability-tips for your application (Part I)'>Usability-tips for your application (Part I)</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/webdevelopment/table-row-highlighterjs-now-as-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>table-row-highlighter.js</title>
		<link>http://michaelodden.com/webdevelopment/table-row-highlighterjs/</link>
		<comments>http://michaelodden.com/webdevelopment/table-row-highlighterjs/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 23:50:22 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[User-experience]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=137</guid>
		<description><![CDATA[This article is about my solution to an issue/request mentioned in my "Usability-tips for your application (Part I)" regarding highlighting corresponding table-rows when keys are pressed.

Take a look at the demo-page and play a little around.

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/webdevelopment/table-row-highlighterjs-now-as-jquery-plugin/' rel='bookmark' title='Permanent Link: table-row-highlighter.js &#8211; now as jQuery-plugin'>table-row-highlighter.js &#8211; now as jQuery-plugin</a></li>
<li><a href='http://michaelodden.com/development/usability-tips-for-your-application-part-i/' rel='bookmark' title='Permanent Link: Usability-tips for your application (Part I)'>Usability-tips for your application (Part I)</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<div class="post-update">
<h2>2009-06-06: Update</h2>
<p>Now also as a jQuery-plugin. <a href="http://michaelodden.com/webdevelopment/table-row-highlighterjs-now-as-jquery-plugin/">Blog-post</a>.</p>
</div>
<p>This article is about my solution to an issue/request mentioned in my &#8220;<a title="Usability-tips for your application (Part I)" href="http://blog.michaelodden.com/development/usability-tips-for-your-application-part-i/">Usability-tips for your application (Part I)</a>&#8221; regarding  highlighting corresponding table-rows when keys are pressed.</p>
<p>Take a look at <a href="http://michaelodden.com/labs/js/table-row-highlighter/">the demo-page</a> and play a little around.</p>
<p><a href="http://michaelodden.com/labs/js/table-row-highlighter/table-row-highlighter_0.2.js">Download the script.</a></p>
<h2>Usage</h2>
<pre class="html" name="code">&lt;style type="text/css"&gt;
table tr.highlight td { background-color: yellow; }
&lt;/style&gt;
&lt;script type="text/javascript" src="table-row-highlighter_0.2.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;&lt;!--
// Should be substituted with your own play-nice-by-adding-events-method
window.onload = function() {
	MIO.highlighter.init(
		document.getElementById("mytable"), // Reference to table-node
		0 // Which column to check against, defaults to 0.
	);
}
// --&gt;&lt;/script&gt;</pre>
<p>More details can be found on the demo-page as referenced above.</p>
<h2>What do you think?</h2>
<p>There are a couple of improvements just around the corner, but thought I&#8217;d just share the idea and an example. Feedback are welcome, and if you improve it, please send me the changes so I can update the code.</p><img src="http://michaelodden.com/?ak_action=api_record_view&id=137&type=feed" alt="" />

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/webdevelopment/table-row-highlighterjs-now-as-jquery-plugin/' rel='bookmark' title='Permanent Link: table-row-highlighter.js &#8211; now as jQuery-plugin'>table-row-highlighter.js &#8211; now as jQuery-plugin</a></li>
<li><a href='http://michaelodden.com/development/usability-tips-for-your-application-part-i/' rel='bookmark' title='Permanent Link: Usability-tips for your application (Part I)'>Usability-tips for your application (Part I)</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/webdevelopment/table-row-highlighterjs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Long live Semantic HTML</title>
		<link>http://michaelodden.com/webdevelopment/long-live-semantic-html/</link>
		<comments>http://michaelodden.com/webdevelopment/long-live-semantic-html/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 23:24:41 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Web development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[semantics]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=205</guid>
		<description><![CDATA[Some time ago when I was hired to refactor an existing CMS, I came across som nice pieces like this: &#60;table border="0" width="100%"&#62; &#60;tr&#62; &#60;td class="h1" align="center"&#62;Page-header&#60;td&#62; &#60;/tr&#62; &#60;/table&#62; Just gotta love it! No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Some time ago when I was hired to refactor an existing <acronym title="Content Management System">CMS</acronym>, I came across som nice pieces like this:</p>
<pre name="code" class="html">&lt;table border="0" width="100%"&gt;
  &lt;tr&gt;
    &lt;td class="h1" align="center"&gt;Page-header&lt;td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>
<p>Just gotta love it!</p><img src="http://michaelodden.com/?ak_action=api_record_view&id=205&type=feed" alt="" />

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/webdevelopment/long-live-semantic-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip of the day: Loose comparisons in PHP gives edgy behaviour</title>
		<link>http://michaelodden.com/webdevelopment/tip-of-the-day-loose-comparisons-in-php-gives-edgy-behaviour/</link>
		<comments>http://michaelodden.com/webdevelopment/tip-of-the-day-loose-comparisons-in-php-gives-edgy-behaviour/#comments</comments>
		<pubDate>Wed, 27 May 2009 09:23:11 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Tip of the day]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=162</guid>
		<description><![CDATA[This is an occasionally recurring issue: Using loose comparison (i.e. &#8220;==&#8221;, &#8220;!=&#8221;), instead of strict (i.e. &#8220;===&#8221;, &#8220;!==&#8221;), in PHP can give some unexpected results. Some of those are pretty logical &#8211; like an empty array compared to 0 or false, returns true &#8211; but others not quite that logical. Example // returns true "string" [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>This is an occasionally recurring issue: Using loose comparison (i.e. &#8220;==&#8221;, &#8220;!=&#8221;), instead of strict (i.e. &#8220;===&#8221;, &#8220;!==&#8221;), in <acronym title="Pre-Hypertext Processing">PHP</acronym> can give some unexpected results.</p>
<p>Some of those are pretty logical &#8211; like an empty array compared to 0 or false, returns true &#8211; but others not quite that logical.</p>
<h2>Example</h2>
<pre name="code" class="c-sharp">
// returns true
"string" == 0;

// returns false, as probably expected of the above as well
"string" === 0;
</pre>
<p>I assume this is because the string is typecasted to integer, and <em>(int) &#8220;string&#8221;</em> will give <em>0</em>. So as we know how <acronym title="Pre-Hypertext Processing">PHP</acronym>&#8217;s typecasting is working, it&#8217;s easy to understand why <em>&#8220;123string&#8221; == 123</em> will return <em>true</em> as well.</p>
<h2>Related reading</h2>
<ul>
<li><a href="http://php.net/types.comparisons"><acronym title="Pre-Hypertext Processing">PHP</acronym> type comparison tables</a></li>
</ul><img src="http://michaelodden.com/?ak_action=api_record_view&id=162&type=feed" alt="" />

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/webdevelopment/tip-of-the-day-loose-comparisons-in-php-gives-edgy-behaviour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usability-tips for your application (Part I)</title>
		<link>http://michaelodden.com/development/usability-tips-for-your-application-part-i/</link>
		<comments>http://michaelodden.com/development/usability-tips-for-your-application-part-i/#comments</comments>
		<pubDate>Mon, 25 May 2009 15:07:20 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[User-experience]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[skip-intro]]></category>
		<category><![CDATA[tabular data]]></category>
		<category><![CDATA[user-interfaces]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=9</guid>
		<description><![CDATA[There are a exponentially growing amount of applications being developed. Some of them vanish at an early stage, while others grow to be quite (and sometimes extremely) popular. What really dazzles me is how sucky many of them (both the popular and the unpopular ones) are regarding how they deal with user-interaction. I&#8217;m not an [...]

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/development/the-whys-hows-and-whens-of-pagination/' rel='bookmark' title='Permanent Link: The whys, hows and whens of pagination'>The whys, hows and whens of pagination</a></li>
<li><a href='http://michaelodden.com/webdevelopment/table-row-highlighterjs/' rel='bookmark' title='Permanent Link: table-row-highlighter.js'>table-row-highlighter.js</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>There are a exponentially growing amount of applications being developed. Some of them vanish at an early stage, while others grow to be quite (and sometimes extremely) popular. What really dazzles me is how sucky many of them (both the popular and the unpopular ones) are regarding how they deal with user-interaction. <span id="more-9"></span> I&#8217;m not an expert in user-interaction-design, but as a user of quite a lot of applications (both web and desktop), I do know when something feels cumbersome or just wrong or missing.  About a year ago, I started to write down some of those situations having ambitions about writing something useful. I started writing the headline &#8220;1000 or so tips for your application&#8221;, so although I still have quite some way to go to reach that goal ( <img src='http://michaelodden.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) I figured I&#8217;d rather start writing about what I&#8217;d already got and take it from there!</p>
<p>Keep in mind that, as I&#8217;m kind of an web-guy, I&#8217;ll mostly keep things related to the web, but much of what I&#8217;m going to write about is easy transferable to the desktop-applications.  And I will also encourage you to mention issues you&#8217;ve encountered as a comment and help me finish my list.</p>
<h3>In this post I&#8217;ll go through:</h3>
<ul>
<li>Make tables sortable</li>
<li>Make sure &#8220;Skip-intro&#8221;-links are visible at once, even before the flash is loaded.</li>
<li>When working with tables, make sure a key-press highlights the first, closest matching row.</li>
</ul>
<h3>Making tables sortable</h3>
<p>In short &#8211; what is the use of organizing tabular data in tables, when you don&#8217;t/won&#8217;t enjoy the full power of it?  When coming to using tables on the web, it should really be up to the UA&#8217;s to implement such features, but until then you&#8217;ll have to do it yourself.  There are mainly two solutions to this case (on the web, that is):</p>
<h4>Backend processing</h4>
<p>Your table-headers are links, with parameters to be sent to the web-server, where your script than sorts the listenings (assuming you have your data in a database-table or an array/hash-table), and then output the correct result.  The query-string sent to the server will probably look something like this: &#8220;field=name&amp;dir=desc&#8221;. The script will then sort the results while taking the parameters into account, and then return a nice dataset ready to be rendered in html.  The downside of this approach is the extra requests to the server and the loading time, which in turn will make the user have to wait. We all know that that&#8217;s not good you bad boy!</p>
<h4>Frontend processing</h4>
<p>This is easily done, if you have used correct markup for your table (thead and th&#8217;s for defining the header-area, and tbody td etc to define the content-part. <a title="Bring on the tables by Roger Johansson" href="http://www.456bereastreet.com/archive/200410/bring_on_the_tables/">Check out this for more info</a>). There are a great amount of javascript-scripts dealing with this issue, although they have their shortcomings. The main functionality of these are to attach javascript-events to the text in the table-headers, and make them sort the table on the corresponding column &#8211; pretty straight-forward and as expected. <img src='http://michaelodden.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The problem, though, is best imagined through an example:  Let us say you have a search-form, which search through an database of articles. The result is in return displayed in a table, with columns for title and creation-date. The searchresults are also grouped in pages of 20 rows each, so to view the next 20 results you&#8217;ll have to click on the neat little &#8220;page 2&#8243;-link. Let us now stay on page one, and click on the &#8220;creation-date&#8221;-header to sort the results after date of creation. The problem here is that your javascript will (usually) only sort the current page, because &#8211; of course &#8211; it doesn&#8217;t know about the remaining pages. This issue is avoided using backend-processing. It is obviously also possible to work around this, but as a default behaviour &#8211; this is usually the result.</p>
<h3>&#8220;Skip-intro&#8221;-links</h3>
<p>While this is an issue I come across quite often, this is also the the situation with one of the easiest solutions.  The situation:  There is this super-fancy site, with an even more super-fancy intro (usually in Flash), to really show off how cool this site really is. And &#8211; as this super-fancy-site-intro-flash is quite heavy with regards to loading images, animations and sound-effects &#8211; they also have to have a status bar to indicate the progress of loading the intro. All in all fair enough, and the solution for those of use who doesn&#8217;t feel like watching this intro and really just want to get on with the real content, is to give us an &#8220;Skip intro&#8221;-link which in turn will send us (hopefully) directly to the main-site.</p>
<p>So the followup-question is &#8220;<strong>Where do I place this link?</strong>&#8220;, which basically has two answers (and only one of them are actually good): Inside the flash-animation (usually with s a getURL-call), or as an <acronym title="HyperText Markup Language">HTML</acronym>-link located somewhere around the intro (above, underneath, left, right, or even diretly onto it (behold the the magic of <acronym title="Cascading Style Sheets">CSS</acronym>) ).  The good solution here is to locate it in the <acronym title="HyperText Markup Language">HTML</acronym> as an anchor. This is for several reasons: It&#8217;s fetchable for search-engines (allthough some SE&#8217;s by now know <a title="SWF searchability FAQ" href="http://www.adobe.com/devnet/flashplayer/articles/swf_searchability.html">how to read swf&#8217;s</a>), and it&#8217;s in reach already before the flash is loaded. On the other side, the worst solution was by someone who had the link inside the flash, and only visible <strong>after</strong> the progress bar was finished. Great!</p>
<p><strong>In short: place the &#8220;skip intro&#8221;-link in the <acronym title="HyperText Markup Language">HTML</acronym>-code, and keep it visible as long as the intro is running. </strong></p>
<h3>Highlight corresponding cell/row on key press</h3>
<p>This is another tip related to tabular data, and are often directly related to the sortable-part. When working with tabular data, and selecting/sorting a certain column, and pressing a key, ie. the letter &#8220;B&#8221;, please jump directly to the closest matching row.</p>
<p>In short: If the user presses a key, make sure to highlight the corresponding row, depending on which column is highlighted/sorted on. If the user presses &#8220;B&#8221; and the table is sorted on surname, jump to the first row with a surname which starts on &#8220;B&#8221;. If there are no rows with matching surname, then highlight the closest matching one. I.e. the first starting with &#8220;C&#8221; etc.</p>
<p>Perhaps not exceptionally relevant for websites yet, but I do think that as more and more content-heavy applications are being developed for the web, it is something to look into. I&#8217;m working on a JavaScript-solution to this and will post about it a little later. Keep following <img src='http://michaelodden.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Related links</h3>
<ul>
<li><a title="sorttable: Make all your tables sortable" href="http://www.kryogenix.org/code/browser/sorttable/">Sorttable.js &#8211; Making <acronym title="HyperText Markup Language">HTML</acronym>-tables sortable via JavaScript </a></li>
<li><a title="tablesorter - a jQuery plugin" href="http://tablesorter.com/docs/">tablesorter &#8211; a jQuery plugin</a></li>
<li><a href="http://michaelodden.com/webdevelopment/table-row-highlighterjs/">table-row-highlighter.js</a> &#8211; My prototype of abovementioned functionality</li>
</ul>
<h2>More to come</h2>
<p>I&#8217;ve got plenty more to come in upcoming posts,  and would also very much like your input on especially the discussed issues as well as proporsitions for coming cases.</p>
<ul>
<li>Does entry-highlightning on tables after key-press have anything to do with the web?</li>
<li>How can this be implemented in a good fashion?</li>
<li>What other magic is reasonably to accomplish with neatly marked up tables?</li>
</ul>
<ul>
<li><a title="tablesorter - a jQuery plugin" href="http://tablesorter.com/docs/"> </a></li>
</ul><img src="http://michaelodden.com/?ak_action=api_record_view&id=9&type=feed" alt="" />

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/development/the-whys-hows-and-whens-of-pagination/' rel='bookmark' title='Permanent Link: The whys, hows and whens of pagination'>The whys, hows and whens of pagination</a></li>
<li><a href='http://michaelodden.com/webdevelopment/table-row-highlighterjs/' rel='bookmark' title='Permanent Link: table-row-highlighter.js'>table-row-highlighter.js</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/development/usability-tips-for-your-application-part-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My look on the web</title>
		<link>http://michaelodden.com/development/my-look-on-the-web/</link>
		<comments>http://michaelodden.com/development/my-look-on-the-web/#comments</comments>
		<pubDate>Sun, 24 May 2009 12:29:56 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=44</guid>
		<description><![CDATA[I feel strongly for the idea of the open web. A web accessible for everyone. Now, this doesn&#8217;t mean that every single page on the web should be 100% identical for everyone, but more like: Relevant information ought to be available and easily accessible by those who need and/or want it, regardless of disabilities. So [...]

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/development/usability-tips-for-your-application-part-i/' rel='bookmark' title='Permanent Link: Usability-tips for your application (Part I)'>Usability-tips for your application (Part I)</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>I feel strongly for the idea of the open web. A web accessible for everyone.</p>
<p>Now, this doesn&#8217;t mean that every single page on the web should be 100% identical for everyone, but more like: Relevant information ought to be available and easily accessible by those who need and/or want it, regardless of disabilities.  So in my view, it is important to separate the thought of <strong>content</strong> and <strong>functionality</strong> on the web.  And as well, in these days of the ever-increasing amount of web-applications this has got to be taken into account. As I&#8217;ll discuss further in a soon-to-come post there are some things to take into consideration whether the &#8220;website&#8221; actually is a website, or a web-application. In short: every web-application doesn&#8217;t necessarily have to be accessible to everyone, regardless of platform, disability etc, while most of the websites does have to be so.</p>
<p>There is a common misunderstanding that idea of the open web mean that every piece of content, associated with every bit of fancy functionality ought to be done in such a way that everyone &#8211; regardless if they&#8217;re using <acronym title="Internet Explorer">IE</acronym> 5, some old Netscape or even Lynx -should be able to enjoy both the content and the functionality.</p>
<h2>How I/to do it</h2>
<p>When I create a website for any company, I do make sure that all of their public content is accessible &#8211; this mean that the webpages are neatly marked up in as meaningful markup as possible, as while as making sure my stylesheets as looking fancy for the waste majority of users, and using javascript just to enchance the experience for those of them who support/enable it. This way it will be accessible for those using supporting UA&#8217;s (ie. those with reduced sight) and also degrades nicely for those with older browsers &#8211; or for some other reasons doesn&#8217;t fully support <acronym title="Cascading Style Sheets">CSS</acronym> and/or JavaScript).</p>
<p>This is not anything new for anyone who&#8217;ve heard for <a title="The Web Standards Project" href="http://webstandards.org/">web-standards</a>, <a href="http://en.wikipedia.org/wiki/Semantic_Web">semantic</a> <a href="http://robertnyman.com/2007/10/29/explaining-semantic-mark-up/">markup</a> and <a href="http://www.alistapart.com/articles/understandingprogressiveenhancement/">progressive enhancement</a> &#8211; which in turn will make sure of <a href="http://en.wikipedia.org/wiki/Graceful_degradation">graceful degradation</a>.</p>
<p>I know there are those out there who will shoot me for not saying that 100% ought to be accessible to everyone, but as we live in a real world &#8211; we have to make real decisions to make real business.</p><img src="http://michaelodden.com/?ak_action=api_record_view&id=44&type=feed" alt="" />

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/development/usability-tips-for-your-application-part-i/' rel='bookmark' title='Permanent Link: Usability-tips for your application (Part I)'>Usability-tips for your application (Part I)</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/development/my-look-on-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy birthday, WWW!</title>
		<link>http://michaelodden.com/general/happy-birthday-www/</link>
		<comments>http://michaelodden.com/general/happy-birthday-www/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 14:20:58 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=94</guid>
		<description><![CDATA[It&#8217;s now 20 years since Tim Berners-Lee propoced the first version of what would later be know as the World Wide Web. http://en.wikipedia.org/wiki/Www Related posts:My look on the web

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/development/my-look-on-the-web/' rel='bookmark' title='Permanent Link: My look on the web'>My look on the web</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s now 20 years since Tim Berners-Lee propoced the first version of what would later be know as the World Wide Web.</p>
<p><a href="http://en.wikipedia.org/wiki/Www">http://en.wikipedia.org/wiki/Www</a></p><img src="http://michaelodden.com/?ak_action=api_record_view&id=94&type=feed" alt="" />

<h2>Related posts:</h2><ul><li><a href='http://michaelodden.com/development/my-look-on-the-web/' rel='bookmark' title='Permanent Link: My look on the web'>My look on the web</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/general/happy-birthday-www/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m not developing for IE6</title>
		<link>http://michaelodden.com/webdevelopment/im-not-developing-for-ie6/</link>
		<comments>http://michaelodden.com/webdevelopment/im-not-developing-for-ie6/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 10:53:48 +0000</pubDate>
		<dc:creator>michaelo</dc:creator>
				<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://blog.michaelodden.com/?p=76</guid>
		<description><![CDATA[I&#8217;m not developing for IE6, and haven&#8217;t done so the last year or two. Don&#8217;t get me wrong: I&#8217;m not saying that users using IE6 will be kicked out of my sites &#8211; that would be harsh for those poor guys and girls who don&#8217;t have a choice &#8211; or know any better. (And as [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not developing for <acronym title="Internet Explorer 6">IE6</acronym>, and haven&#8217;t done so the last year or two. Don&#8217;t get me wrong: I&#8217;m not saying that users using <acronym title="Internet Explorer 6">IE6</acronym> will be kicked out of my sites &#8211; that would be harsh for those poor guys and girls who don&#8217;t have a choice &#8211; or know any better. (And as it still has quite a big share of users I would be a fool to send them of just like that <img src='http://michaelodden.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p><strong>In general this is how I treat IE6:</strong></p>
<p>I&#8217;ll create my site, and while developing I&#8217;ll test it in Opera, Firefox, Safari, IE7 etc.  So, after the <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheets">CSS</acronym> and eventually Javascript is finished, then I&#8217;ll check it in <acronym title="Internet Explorer 6">IE6</acronym>. If the content is easily readable/reachable, the menu is usable and the different parts of the layout is generally in the right places then I won&#8217;t bother at all. If, on the other hand things actually doesn&#8217;t work (although, after quite some years developing for <acronym title="Internet Explorer 6">IE6</acronym>, I do manage to avoid most of the traps) then I&#8217;ll obviously fix until the above requirements are met.</p>
<p>I _won&#8217;t_ patch for min-width, max-width and the other missing features, I&#8217;ll perhaps have to add a little fix for some margin-related bugs (like the double-margin-on-float-bug), and with some designs I&#8217;ll have to add a little rule to fix png-transparency, that&#8217;s it.</p>
<p>Note: <em>Pixel-perfectionism</em> is something I don&#8217;t believe belong to web at all, being the flexible medium it is.</p>
<p>So &#8211; I do not develop _for_ <acronym title="Internet Explorer 6">IE6</acronym>, but I do add support for it.</p><img src="http://michaelodden.com/?ak_action=api_record_view&id=76&type=feed" alt="" />

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://michaelodden.com/webdevelopment/im-not-developing-for-ie6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

