<?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>blog.forret.com &#187; webdev</title>
	<atom:link href="http://blog.forret.com/categories/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.forret.com</link>
	<description>and I mean it</description>
	<lastBuildDate>Tue, 17 Nov 2009 19:00:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>There are no Flash websites</title>
		<link>http://blog.forret.com/2006/12/there-are-no-flash-websites/</link>
		<comments>http://blog.forret.com/2006/12/there-are-no-flash-websites/#comments</comments>
		<pubDate>Wed, 13 Dec 2006 12:08:06 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[advertising]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.forret.com/2006/12/there-are-no-flash-websites/</guid>
		<description><![CDATA[Never say &#8220;we have a Flash website&#8221;; there is no such thing. You might say: we have a website and it features, amongst a lot of relevant information in HTML pages, a Flash movie and/or application. You might say: we did buy a domain and we decided that a real website would be too accessible [...]


Related posts:<ol><li><a href='http://blog.forret.com/2005/01/playing-mp3-with-an-embedded-flash-player/' rel='bookmark' title='Permanent Link: Playing MP3 with an embedded Flash player'>Playing MP3 with an embedded Flash player</a> <small>(There is an updated post at Click to hear the...</small></li><li><a href='http://blog.forret.com/2006/04/adsense-also-looks-at-search-terms/' rel='bookmark' title='Permanent Link: Adsense also looks at search terms'>Adsense also looks at search terms</a> <small>I had been wondering just how much information Google Adsense...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Never say &#8220;we have a Flash website&#8221;; there is no such thing. You might say: we have a website and it features, amongst a lot of relevant information in HTML pages, a Flash movie and/or application. You might say: we did buy a domain and we decided that a real website would be too accessible for our customers, so it only has a Flash blob on the &#8216;homepage&#8217;. </p>
<blockquote><p>Flash is to websites what airconditioning is to a car: you might call it luxury, you might call it indispensable, but you cannot call it a car. It&#8217;s just airco.</p></blockquote>
<p>For some reason, people that have experience with creating Flash applications also think they can make websites. &#8220;Just throw some Javascript on the homepage and it plays beautifully&#8221;, right? Wrong! If you have never heard of proper markup, SEO, the limitations of Javascript and Flash, you should leave making websites to professionals. If you insist that your branding cannot be properly expressed with just HTML/CSS/Ajax, you can add a Flash object to your site. But on its own, it&#8217;s a sorry excuse for a website. </p>
<p><strong>Case: Le Fabuleux Marcel de Bruxelles</strong><br />
<a href="http://www.flickr.com/photos/pforret/321216556/" title="Photo Sharing"><img src="http://static.flickr.com/123/321216556_f4936dd020.jpg" width="500" height="278" alt="Le Fabuleux Marcel de Bruxelles" /></a><br />
Le <a href="http://www.fabuleuxmarcel.be">Fabuleux Marcel de Bruxelles</a> is a new brand of singlets (&#8217;<a href="http://en.wikipedia.org/wiki/Wifebeater_(shirt)">wifebeaters</a>&#8216; in English, or &#8216;marcellekes&#8217; in Bruxellois). The idea is good, the branding is beautiful, the advertising is top-notch (not surprisingly, since the founder is also one of the founders of the ad agency <a href="http://www.lgf.be">LG&#038;F</a>).<br />
<span id="more-572"></span><br />
But then you take a look at the brand&#8217;s URL: it&#8217;s not a website, it&#8217;s a Flash blob. The first page is just a Flash detector with no useful information what-so-ever. For search engines, it might as well be empty:</p>
<ul>
<li>the only information that&#8217;s not style or Javascript is the following line: <code>&lt;title&gt;Le Fabuleux Marcel de Bruxelles&lt;/title&gt;</code>. No hint of what the page is about, what the product is about. No description, no keywords, not a word of text. Not one.</li>
<li>the homepage only checks Flash compatibility and if your browser can do Flash, shows a clickable image to the actual Flash blob. This link,however, is not in HTML, only in Javascript. So it is not recognized as a link by search engines. For non-human readers, the whole site consists of only 1 page, and a useless one at that.</li>
<li>Since Google does show the &#8220;One more click and you will be on Marcel, le site officiel (&#8230;)&#8221; text, which is not in readable HTML on the page, it must be that Google spiders get a different page than regular browsers. That would be <a href="http://en.wikipedia.org/wiki/Cloaking">cloaking</a>, and Google doesn&#8217;t like it.</li>
<li>if the search engines would get to the Flash movie page, it would not help. It is totally devoid of anything resembling meta-data. The movie itself is a auto-running slideshow(!) with pretty pictures.</li>
<li>In the movie there are moments where you can click on words to get the high resolution photos. Those are beautiful, huge (3MB!) and offered in TIFF(!!) format.</li>
</ul>
<p><a href="http://www.flickr.com/photos/pforret/321216558/" title="Photo Sharing"><img src="http://static.flickr.com/139/321216558_131b661692.jpg" width="500" height="151" alt="Le Fabuleux Marcel de Bruxelles" /></a></p>
<p>We can only conclude that &#8220;Le Fabuleux Marcel de Bruxelles&#8221; is determined to stay as obscure as possible. God forbid some interested person would find them in Google.</p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2005/01/playing-mp3-with-an-embedded-flash-player/' rel='bookmark' title='Permanent Link: Playing MP3 with an embedded Flash player'>Playing MP3 with an embedded Flash player</a> <small>(There is an updated post at Click to hear the...</small></li><li><a href='http://blog.forret.com/2006/04/adsense-also-looks-at-search-terms/' rel='bookmark' title='Permanent Link: Adsense also looks at search terms'>Adsense also looks at search terms</a> <small>I had been wondering just how much information Google Adsense...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/12/there-are-no-flash-websites/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Styles should not be referenced by a &lt;link&gt;</title>
		<link>http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/</link>
		<comments>http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/#comments</comments>
		<pubDate>Thu, 14 Sep 2006 12:06:57 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/</guid>
		<description><![CDATA[(If you don&#8217;t work with HTML, this next post will be of no interest to you.)
Rant: the way external CSS stylesheets are included in HTML now is not logical nor convenient.
So: &#60;link type="test/css" href="(...).css" rel="stylesheet" /&#62;  is wrong,
it should be &#60;style type="text/css" src="(...).css" /&#62;. 
Why?

Because src is for now, href is for later
In a [...]


Related posts:<ol><li><a href='http://blog.forret.com/2006/12/there-are-no-flash-websites/' rel='bookmark' title='Permanent Link: There are no Flash websites'>There are no Flash websites</a> <small>Never say &#8220;we have a Flash website&#8221;; there is no...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><em>(If you don&#8217;t work with HTML, this next post will be of no interest to you.)</em></p>
<blockquote><p>Rant: the way external CSS stylesheets are included in HTML now is not logical nor convenient.<br />
So: <code>&lt;link </code><code>type="test/css" </code><code>href="(...).css" rel="stylesheet" /&gt;</code>  is wrong,<br />
it should be <code>&lt;style type="text/css" src="(...).css" /&gt;</code>. </p></blockquote>
<p>Why?</p>
<p><a href="http://www.flickr.com/photos/pforret/243067639/" title="Photo Sharing"><img width="196" height="240" src="http://static.flickr.com/87/243067639_e41df6d6f5_m.jpg" style="float: right;" alt="css Zen Garden" /></a><br />
<strong>Because <code>src</code> is for now, <code>href</code> is for later</strong></p>
<p>In a HTML page, there are a number of files (URLs) that have to be fetched to display:</p>
<ul>
<li>any text in the document, within &lt;h1&gt;, &lt;p&gt; or &lt;div&gt; tags or not</li>
<li>any images, specified as &lt;img src=&#8221;" /&gt; (always external)</li>
<li>any iframes, specified as &lt;iframe src=&#8221;" /&gt; (always external)</li>
<li>any javascript, specified as &lt;script src=&#8221;" /&gt; (external or in-line)</li>
</ul>
<p>There are also links to other URLs that are not for now: maybe one click away, maybe just there to be interpreted by the web browser:</p>
<ul>
<li>anchor links, specified as &lt;a href=&#8221;"&gt;&lt;/a&gt;</li>
<li>links: prev/next, archive links, feed link, specified as &lt;link rel=&#8221;" href=&#8221;" /&gt;</li>
</ul>
<p>So: you need the <code>src=""</code> referenced files immediately, and the <code>href=""</code> ones not. The way stylesheets are referenced now breaks this logic.</p>
<p><strong>Because &lt;style&gt; is for stylesheets</strong></p>
<p>Why can you embed in-line CSS style information within &lt;style&gt; tags, but not external stylesheets? Compare that to Javascript:</p>
<p>Inline JS: <code>&lt;script&gt;...&lt;/script&gt;</code> and<br />
External JS: <code>&lt;script src="" /&gt;</code></p>
<p>That makes sense. The same should be possible for &lt;style&gt;. The way it works now is counter-intuitive and antiquated. So please add it to <a href="http://www.w3.org/TR/xhtml1/">XHTML 1.1</a>.</p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2006/12/there-are-no-flash-websites/' rel='bookmark' title='Permanent Link: There are no Flash websites'>There are no Flash websites</a> <small>Never say &#8220;we have a Flash website&#8221;; there is no...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flickr: combining ALT and TITLE for images</title>
		<link>http://blog.forret.com/2006/09/flickr-combining-alt-and-title-for-images/</link>
		<comments>http://blog.forret.com/2006/09/flickr-combining-alt-and-title-for-images/#comments</comments>
		<pubDate>Tue, 12 Sep 2006 13:11:04 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.forret.com/2006/09/flickr-combining-alt-and-title-for-images/</guid>
		<description><![CDATA[If you want to embed one of your own Flickr pictures into your blog, the Flickr photo page gives you the HTML code for easy copy/paste. They require you to link back to the photo page, so obviously in the HTML they provide, they give your an image with a link, i.e. an &#60;img&#62; tag [...]


Related posts:<ol><li><a href='http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/' rel='bookmark' title='Permanent Link: Styles should not be referenced by a &lt;link&gt;'>Styles should not be referenced by a &lt;link&gt;</a> <small>(If you don&#8217;t work with HTML, this next post will...</small></li><li><a href='http://blog.forret.com/2005/06/using-movies-on-a-web-page/' rel='bookmark' title='Permanent Link: Using movies on a web page'>Using movies on a web page</a> <small> So you recorded those first steps of your youngest,...</small></li><li><a href='http://blog.forret.com/2006/12/there-are-no-flash-websites/' rel='bookmark' title='Permanent Link: There are no Flash websites'>There are no Flash websites</a> <small>Never say &#8220;we have a Flash website&#8221;; there is no...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>If you want to embed one of your own <a href="http://www.flickr.com">Flickr</a> pictures into your blog, the Flickr photo page gives you the HTML code for easy copy/paste. They require you to link back to the photo page, so obviously in the HTML they provide, they give your an image with a link, i.e. an <code>&lt;img&gt;</code> tag in between a <code>&lt;a&gt; &lt;/a&gt;</code> anchor tag pair. A typical example:<br />
<code>&lt;a href="http://www.flickr.com/photos/(...)" title="<em>Photo Sharing</em>"&gt;&lt;img src="http://static.flickr.com/(...).jpg" width="600" height="1200" alt="(image title)" /&gt;&lt;/a&gt;</code><br />
As you can see, they combine both an anchor title (always &#8220;Photo Sharing&#8221;) with an image alt text (Flickr uses the photo title for that). Both fields give more info about the objects they refer to and are very much loved by search engines. It should come as no surprise that the #1 Google result for &#8220;photo sharing&#8221; is Flickr.<br />
<a href="http://www.flickr.com/photos/pforret/241479980/" title="Photo Sharing"><img src="http://static.flickr.com/98/241479980_63fed49bf4.jpg" width="375" height="500" alt="Flickr: img alt vs. a title" /></a><br />
<span id="more-462"></span><br />
The thing is: when you move your mouse pointer over the image (&#8217;hover&#8217;), your browser will show only one of these two texts. Internet Explorer shows the <code>img alt</code> text, while Firefox and Flock show the <code>a title</code> text. So if you&#8217;re using Firefox, every Flickr photo that was embedded with Flickr&#8217;s HTML code, will show &#8220;Photo sharing&#8221; and not the photo&#8217;s title. </p>
<p>Since the attributes <code>alt</code> and <code>title</code> also serve an accessibility purpose: what do screen readers (text-to-speech) make of the combination? Do they cite both, or also choose one of the two?</p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/' rel='bookmark' title='Permanent Link: Styles should not be referenced by a &lt;link&gt;'>Styles should not be referenced by a &lt;link&gt;</a> <small>(If you don&#8217;t work with HTML, this next post will...</small></li><li><a href='http://blog.forret.com/2005/06/using-movies-on-a-web-page/' rel='bookmark' title='Permanent Link: Using movies on a web page'>Using movies on a web page</a> <small> So you recorded those first steps of your youngest,...</small></li><li><a href='http://blog.forret.com/2006/12/there-are-no-flash-websites/' rel='bookmark' title='Permanent Link: There are no Flash websites'>There are no Flash websites</a> <small>Never say &#8220;we have a Flash website&#8221;; there is no...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/09/flickr-combining-alt-and-title-for-images/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rails Conference in London &#8211; who&#8217;s coming?</title>
		<link>http://blog.forret.com/2006/05/rails-conference-in-london-whos-coming/</link>
		<comments>http://blog.forret.com/2006/05/rails-conference-in-london-whos-coming/#comments</comments>
		<pubDate>Wed, 10 May 2006 19:03:30 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Web2.0]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.forret.com/2006/05/rails-conference-in-london-whos-coming/</guid>
		<description><![CDATA[
Who wants to join in for the September Rails Conference in London? Let&#8217;s set up a nice Belgian delegation!
We can get a group discount:

5 or more delegates and get 10% discount
10 or more delegates and get 15% discount

This is the reason why I&#8217;m asking this now:

May 15th and pay just £400/delegate
May 30th and pay just [...]


Related posts:<ol><li><a href='http://blog.forret.com/2005/09/web-20-conference-in-brussels/' rel='bookmark' title='Permanent Link: Web 2.0 conference in Brussels'>Web 2.0 conference in Brussels</a> <small> The guys from Shoob are organising a Belgian Web...</small></li><li><a href='http://blog.forret.com/2006/12/leweb3-the-babel-effect/' rel='bookmark' title='Permanent Link: LeWeb3: the Babel effect'>LeWeb3: the Babel effect</a> <small>I went to see the movie &#8220;Babel&#8221; recently, and I...</small></li><li><a href='http://blog.forret.com/2005/12/two-days-at-lesblogs-paris/' rel='bookmark' title='Permanent Link: Two days at LesBlogs Paris'>Two days at LesBlogs Paris</a> <small>What I saw I just spent 2 days at the...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/pforret/144128155/" title="Photo Sharing"><img src="http://static.flickr.com/56/144128155_c8c1e84cd7.jpg" width="500" height="170" alt="RailsConf Europe" /></a><br />
Who wants to join in for the <a href="http://europe.railsconf.org/">September Rails Conference in London</a>? Let&#8217;s set up a nice Belgian delegation!</p>
<p>We can get a group discount:</p>
<ul>
<li>5 or more delegates and get 10% discount</li>
<li><strong>10 or more delegates and get 15% discount</strong></li>
</ul>
<p>This is the reason why I&#8217;m asking this now:</p>
<ul>
<li>May 15th and pay just £400/delegate</li>
<li><strong>May 30th and pay just £425/delegate</strong></li>
<li>June 30th and pay just £450/delegate</li>
<li>July 30th and pay £475/delegate</li>
<li>August 30th and pay £525/delegate</li>
<li>September 10th and pay £575/delegate</li>
</ul>
<p>So: leave your details here if you want to join: if we get to 5 people by May 15, we take the 10% discount (£360 = 526 euro), if we don&#8217;t, but we get to 10 people by May 30th (<a href="http://barcamp.org/BarCampBrusselsForTheImpatient">Barcamp Brussels</a> might help), we take the 15% discount (also £360), if not, it&#8217;s everyone to themselves.</p>
<p>Confirmed speakers:</p>
<blockquote><p>The conference is already packed with exciting speakers, including the creator of Rails, David Heinemeier Hansson, Pragmatic Programmer Dave Thomas, best-selling author and passion maven Kathy Sierra, Rails core developers Jamis Buck, Marcel Molina, Jr., Thomas Fuchs, Rails authors and trainers David Alan Black, and Chad Fowler, Rake author Jim Weirich and many more to be announced.<br />
(from <a href="http://europe.railsconf.org/">europe.railsconf.org</a>)</p></blockquote>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2005/09/web-20-conference-in-brussels/' rel='bookmark' title='Permanent Link: Web 2.0 conference in Brussels'>Web 2.0 conference in Brussels</a> <small> The guys from Shoob are organising a Belgian Web...</small></li><li><a href='http://blog.forret.com/2006/12/leweb3-the-babel-effect/' rel='bookmark' title='Permanent Link: LeWeb3: the Babel effect'>LeWeb3: the Babel effect</a> <small>I went to see the movie &#8220;Babel&#8221; recently, and I...</small></li><li><a href='http://blog.forret.com/2005/12/two-days-at-lesblogs-paris/' rel='bookmark' title='Permanent Link: Two days at LesBlogs Paris'>Two days at LesBlogs Paris</a> <small>What I saw I just spent 2 days at the...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/05/rails-conference-in-london-whos-coming/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Storing the SQL queries in the database</title>
		<link>http://blog.forret.com/2006/03/storing-the-sql-queries-in-the-database/</link>
		<comments>http://blog.forret.com/2006/03/storing-the-sql-queries-in-the-database/#comments</comments>
		<pubDate>Fri, 31 Mar 2006 20:17:59 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.forret.com/2006/03/storing-the-sql-queries-in-the-database/</guid>
		<description><![CDATA[I want to outline something I developed something like 5 years ago, and that I was kind of happy with at the time: a way of saving all SQL queries inside the database itself. The reason for writing this is that it would really fit in with all the RubyOnRails and other programming frameworks that [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I want to outline something I developed something like 5 years ago, and that I was kind of happy with at the time: a way of saving all SQL queries inside the database itself. The reason for writing this is that it would really fit in with all the RubyOnRails and other programming frameworks that are created these days. If someone feels like creating a component/plug-in for it, that would be so nice&#8230;</p>
<p>If you have no interest in programming and/or database management, go hug somebody and skip this article.</p>
<p><strong>PRINCIPLE</strong><br />
In the most simple version, you have 1 extra table in your database that looks like this:</p>
<pre>query_id   int % unique ID of the query
template   varchar(1000) % or even longer
var_list   varchar(255) % comma separated list of vars</pre>
<p>An example:<br />
<code>[ 33 , "select * from users where user_id = %user_id% AND type = '%status%' " , "%user_id%,%status%" ]</code><br />
Instead of constructing your SQL code in your (PHP) code by making one big string and then executing it, you call a function <code>my_exec_query(query_id,array_params)</code><br />
This function will </p>
<ul>
<li>get the template text </li>
<li>walk through the comma-separated list <code>var_list</code> and for each variable inside, look the corresponding value up in the array <code>array_params</code> (or this can be a dictionary or a hashtable).</li>
<li>when all substitutions are finished, execute the SQL code and return the result as (connected/disconnected) recordset or an array.</li>
</ul>
<p><span id="more-283"></span><br />
The advantages of this approach are (without taking into account all kinds of optimisations that are possible):</p>
<ol>
<li>no SQL code in your programs.</li>
<li>every version of the database contains the correct queries that work on it</li>
<li>the SQL template can be reused in different location of the code</li>
<li>the SQL template can be edited through a web interface</li>
<li>all SQL activity goes through one component, making it the ideal place to add statistics: which are the slow procedures, which ones bring back the most data</li>
</ol>
<p>Main disadvantage: if you execute it in the naive approach as above, you have to execute 2 SQL queries for each function call (1: fetch the query template and build the real SQL, 2: execute the real SQL). But that is easy to fix.</p>
<p><strong>OPTIMISATION #1: caching of the templates</strong><br />
You keep the whole table of queries in memory. When a specific query template or parameter list is updated, the new version is loaded into memory. Even if you would have 500 different queries, this would take something like 600KB in memory. That is normally not a problem (if the application servers have e.g. 2GB memory).<br />
If you have more than 1 application server, and a query template is edited from server A, the other servers (B, C) should be instructed to reload too. This smells like we need some versioning.</p>
<p><strong>OPTIMISATION #2: version control</strong></p>
<pre>query_id   int % unique ID of the query
template   varchar(1000) % or even longer
var_list   varchar(255) % comma separated list of vars
version   int % version number
created   datetime % creation time of the query
modified   datetime % last modification date
remarks   varchar(100) % can contain author, ...</pre>
<p>Every time we execute a query, we check if it was constructed with the current template version. If not, the template and parameter list are reloaded, and the query is reconstructed with the new template. If you&#8217;re gonna do this every time, you might put it in a stored procedure.<br />
Another advantage: if we make an error while editing, chances are the procedure will not compile properly. That&#8217;s alreadya good way of avoiding sloppy updates.</p>
<p><strong>OPTIMISATION #3: stored procedure</strong><br />
For each query, a stored procedure is created with variable @parameters.</p>
<pre>CREATE PROC procedure_name
    [ { @parameter data_type }
    ] [ ,...n ]
AS sql_statement [ ...n ] </pre>
<p>This stored procedure will check versions, but more importantly it can be precompiled (so your SQL server already knows which indexes and joins to use and in which sequence), and will run faster. But what significant name can we give it? <code>query_33</code> doesn&#8217;t mean a lot to a database admin or a programmer.</p>
<p><strong>OPTIMISATION #4: taxonomy/significant names</strong><br />
We give each query a name. What I did was the following:</p>
<pre>query_id   int % unique ID of the query
<strong>category  varchar(20)</strong>
<strong>name  varchar(20)</strong>
template   varchar(1000) % or even longer
var_list   varchar(255) % comma separated list of vars
(...)</pre>
<p>The &#8216;category&#8217; is something like &#8216;user_management&#8217; or &#8217;statistics&#8217; and the &#8216;name&#8217; is the name of the individual query: e.g. &#8216;insert_user&#8217; or &#8216;top-tags&#8217;. You can also use the &#8216;category&#8217; to decide on who is responsible for editing. Or you could set-up a stronger authorisation scheme, with authors having editing rights on certain queries and not on others.<br />
The stored procedures that are automatically created will now have understandable name &#8216;user</p>
<p><strong>OPTIMISATION #5: how to give a variable number of parameters to a function</strong><br />
I started with a Dictionary (VBScript style) for the parameters: I created it, filled it with the variables I needed (maybe one, maybe 10) and used it as a parameter in the function call <code>my_exec_query(query_id,dict_params)</code>. This can also be done with (a pointer to) an array, a RecordSet, &#8230; Anything that maps &#8216;keys&#8217; onto &#8216;values&#8217; would work.<br />
Wordpress uses another trick: they use the URLencoding or <a href="http://codex.wordpress.org/Template_Tags/How_to_Pass_Tag_Parameters#Tags_with_query-string-style_parameters">query string syntax</a>: <code>wp_list_cats('exclude=10,11,12');</code>. This is basically a well-known way to do serialisation into a string; you could put them in an XML document too, but that&#8217;s a lot of overhead.</p>
<p><strong>OPTIMISATION #6: error checking</strong><br />
When the substitution of variables in the template is done, you can still check for obvious errors: a <code>%PARAMETER%</code> that has not been substituted (forgotten?), a string where there should be a number (no enclosing quotes). You could think about ways to distinguish between required parameters (e.g. <code>SELECT * FROM users WHERE id = %ID%</code>) and optional parameters (e.g. <code>INSERT INTO log VALUES ('%PLACE%', '%ERROR%' )</code>). This can be done by adding a &#8216;!&#8217; after the name in the parameter list: <code>ID!</code> is obligatory, <code>PLACE</code> is not.<br />
One can also wonder wether we need the list of parameters as a separate field, we could also search the template text for any occurrence of <code>%[A-Z][A-Z0-9_]*%</code>. I just used the list because it made the substitution faster.</p>
<p>And I&#8217;m still forgetting truckloads of enhancements.</p>
<p>Now if someone is attracted by the advantages of this method, and wants to create a PHP/Python/Ruby component that neatly puts all this functionality into one package, let me know! </p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/03/storing-the-sql-queries-in-the-database/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Web-based web development</title>
		<link>http://blog.forret.com/2006/03/web-based-web-development/</link>
		<comments>http://blog.forret.com/2006/03/web-based-web-development/#comments</comments>
		<pubDate>Wed, 22 Mar 2006 16:17:56 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Web2.0]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.forret.com/2006/03/web-based-web-development/</guid>
		<description><![CDATA[Writing code in your browser, it&#8217;s coming this way, I tell you! Some indications:

my own WikiRAD article (July 2005)
Playing around with PHP and wikis at the same time made me think on how web-based editing and compiling would be a good way to develop and run web applications
Feed43
Create an RSS feed out of any web [...]


Related posts:<ol><li><a href='http://blog.forret.com/2005/12/rad-frameworks-development-bliss-in-20-min-or-less/' rel='bookmark' title='Permanent Link: RAD frameworks: development bliss in 20 min or less'>RAD frameworks: development bliss in 20 min or less</a> <small>Ruby On Rails started a nice trend: post a screencast...</small></li><li><a href='http://blog.forret.com/2005/07/online-software-development-the-wikirad/' rel='bookmark' title='Permanent Link: Online software development: the WikiRAD'>Online software development: the WikiRAD</a> <small> I love the idea of social software. Specifically, while...</small></li><li><a href='http://blog.forret.com/2007/02/pipes-sql-structured-web-query-language-swql/' rel='bookmark' title='Permanent Link: Pipes + SQL = Structured Web Query Language'>Pipes + SQL = Structured Web Query Language</a> <small>Let&#8217;s remix 2 original observations: In Yahoo! Pipes, what used...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Writing code in your browser, it&#8217;s coming this way, I tell you! Some indications:</p>
<dl>
<dt>my own <a href="http://blog.forret.com/2005/07/online-software-development-the-wikirad/">WikiRAD article</a> (July 2005)</dt>
<dd>Playing around with PHP and wikis at the same time made me think on how web-based editing and compiling would be a good way to develop and run web applications</dd>
<dt><a href="http://feed43.com">Feed43</a></dt>
<dd>Create an RSS feed out of any web page by using regular expressions with a nifty Web2.0 user interface. Lots of services are based on URLs and use RSS as input, so this can be the start of a first application. E.g. I just created an <a href="http://feed43.com/stubru_playlists.xml">RSS feed</a> for the <a href="http://www.stubru.be/html/stubru_web/programmas/playlist/index.html">Stubru playlist pages</a> out of a Stubru Javascript file. Imagine I could now tell Feed43:<br />
<code>for each item in feed_that_I_just_created {<br />
parse_the item_url<br />
publish an rss feed for this item_url as feed_url_X<br />
}</code><br />
and then start working with that content too.</dd>
<dt><a href="http://aws.amazon.com/s3">Amazon S3</a></dt>
<dd>web-based outsourced storage for any application, which made <a href="http://jkeyes.com/2006/03/ten_ideas_for_amazon_s3_applic.php">John Keyes</a> and <a href="http://poorbuthappy.com/ease/archives/2006/03/14/3086/can-you-use-amazon-s3-to-create-the-new-flickr-killer">Peter Van Dijck</a> to ask themselves: &#8220;Can you use Amazon S3 to create the new Flickr killer?&#8221;, and which made me think: but what if not only the storage, but the whole program was run by a 3rd party?</dd>
<dt><a href="http://iamalpha.com">Iamalpha</a> (via <a href="http://www.readwriteweb.com/archives/aols_new_module.php">Richard McManus</a>)</dt>
<dd>AOL&#8217;s new initiative for building microformat-based applications. It&#8217;s a bit early to grasp the extent what what they&#8217;re trying to accomplish, but I think it&#8217;s potentially more than just widgets. They don&#8217;t have a web-based IDE yet, but they do have a copy/paste <a href="http://iamalpha.com/.developer/validate.jsp">code-validator</a>. Most importantly: the applications are run by AOL!</dd>
<dt><a href="http://www.youos.com">YouOS</a> (via <a href="http://jeremy.zawodny.com/blog/archives/006495.html">Jeremy Zawodny</a>)</dt>
<dd><a href="http://www.flickr.com/photos/pforret/116327567/" title="Photo Sharing"><img src="http://static.flickr.com/41/116327567_416a2a0cb1_m.jpg" width="240" alt="YouOS: web-based IDE" /></a><br />
a web-based OS that allows you to develop Javascript-based applications in a web-based IDE, with version control and compiling. It&#8217;s one of the products coming out of <a href="http://www.paulgraham.com/">Paul Graham</a>&#8217;s <a href="http://www.ycombinator.com/">Y-combinator</a> startup incubator.</dd>
</dl>
<p><span id="more-286"></span><br />
For me, these are all indicators of a trend: there will be a day when you don&#8217;t need your own machines to run your complete (complex) web applications: the storage, the authentication, the aggregation, the statistics will all run on 3rd party servers, some of which you pay, some of which you don&#8217;t. I&#8217;m not talking about service providers like <a href="http://www.ning.com">Ning</a>: they allow you to configure/customize a web app that <em>they</em> developed, not you.<br />
I see a <a href="http://www.deveiate.org/projects/JohnHenry">web-based IDE for RubyOnRails</a> coming, I think <a href="http://developer.yahoo.com/">Yahoo</a>, <a href="http://code.google.com/">Google</a> and <a href="http://aws.typepad.com/">Amazon</a> will building the bricks too, and pretty soon you will be able to develop a Flickr-like photo management application and run it without having a machine of your own:</p>
<ul>
<li>user/group management: Yahoo or Google or Microsoft&#8217;s single sign-on</li>
<li>photo storage: Amazon S3</li>
<li>database: some future version of <a href="http://base.google.com/">Google Base</a></li>
<li>email: some future version of Yahoo or Google groups</li>
<li>photo tags/folksonomy: some future version of del.icio.us (see my <a href="http://blog.forret.com/2005/02/folksonomizer-generic-folksonomy-service/">Folksonomizer</a> post)</li>
<li>comments: some future version of <a href="http://www.google.com/talk/">Gtalk</a> or <a href="http://www.campfirenow.com/">Campfire</a> (mental note to self: write something about commentalizer and use of URI as web API)</li>
</ul>
<p>Give it another year.</p>
<p><small>Technorati Tags: <a href="http://technorati.com/tag/rss" rel="tag">rss</a>, <a href="http://technorati.com/tag/feed" rel="tag">feed</a>, <a href="http://technorati.com/tag/ruby" rel="tag">ruby</a>, <a href="http://technorati.com/tag/webdev" rel="tag">webdev</a>, <a href="http://technorati.com/tag/web2.0" rel="tag">web2.0</a>, <a href="http://technorati.com/tag/yahoo" rel="tag">yahoo</a>, <a href="http://technorati.com/tag/google" rel="tag">google</a>, <a href="http://technorati.com/tag/amazon" rel="tag">amazon</a>, <a href="http://technorati.com/tag/aol" rel="tag">aol</a></small></p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2005/12/rad-frameworks-development-bliss-in-20-min-or-less/' rel='bookmark' title='Permanent Link: RAD frameworks: development bliss in 20 min or less'>RAD frameworks: development bliss in 20 min or less</a> <small>Ruby On Rails started a nice trend: post a screencast...</small></li><li><a href='http://blog.forret.com/2005/07/online-software-development-the-wikirad/' rel='bookmark' title='Permanent Link: Online software development: the WikiRAD'>Online software development: the WikiRAD</a> <small> I love the idea of social software. Specifically, while...</small></li><li><a href='http://blog.forret.com/2007/02/pipes-sql-structured-web-query-language-swql/' rel='bookmark' title='Permanent Link: Pipes + SQL = Structured Web Query Language'>Pipes + SQL = Structured Web Query Language</a> <small>Let&#8217;s remix 2 original observations: In Yahoo! Pipes, what used...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/03/web-based-web-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Barcamp Brussels: May 2006</title>
		<link>http://blog.forret.com/2006/03/barcamp-brussels-may-2006/</link>
		<comments>http://blog.forret.com/2006/03/barcamp-brussels-may-2006/#comments</comments>
		<pubDate>Sun, 19 Mar 2006 21:51:20 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Belgium]]></category>
		<category><![CDATA[Web2.0]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[brussels]]></category>

		<guid isPermaLink="false">http://peter.forret.com/2006/03/19/barcamp-brussels-may-2006/</guid>
		<description><![CDATA[
Last year we organised a fairly successfull blogger&#8217;s dinner in Brussels, and now we&#8217;re gonna try something different:
next May we will have a Barcamp Brussels event.
WHAT IS A BARCAMP?

(photo by miss_rogue)
Barcamp was first organised in LA by Chris Messina and some buddies.
BarCamp is an ad-hoc un-conference born from the desire for people to share and [...]


Related posts:<ol><li><a href='http://blog.forret.com/2006/04/barcamp-brussels-may-20-2006/' rel='bookmark' title='Permanent Link: Barcamp Brussels: May 20 2006'>Barcamp Brussels: May 20 2006</a> <small>So there it is: after some feedback on my Barcamp...</small></li><li><a href='http://blog.forret.com/2006/05/barcamp-brussels-10-days-to-go/' rel='bookmark' title='Permanent Link: Barcamp Brussels: 10 days to go!'>Barcamp Brussels: 10 days to go!</a> <small>Saturday 20 May Like M.A.R.R.S. said: &#8220;Countdown is progressive&#8220;. Ten...</small></li><li><a href='http://blog.forret.com/2007/11/barcamp-brussels-4-10-days-to-go/' rel='bookmark' title='Permanent Link: Barcamp Brussels #4: 10 days to go'>Barcamp Brussels #4: 10 days to go</a> <small> Barcamp Brussels #4 is coming closer: Saturday Dec 1st...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://static.flickr.com/51/109839111_d466a8216d_m.jpg" alt="Barcamp Brussel" style="float: right" /><br />
Last year we organised a fairly successfull <a href="http://peter.forret.com/2005/09/19/brussels-bloggers-meeting-on-oct-7/">blogger&#8217;s dinner</a> in Brussels, and now we&#8217;re gonna try something different:<br />
<strong>next May we will have a <a href="http://barcamp.org/BarCampBrusselsForTheImpatient">Barcamp Brussels</a> event.</strong></p>
<p><strong>WHAT IS A BARCAMP?</strong></p>
<p style="font-size: 0.7em; float: right; width: 240px"><a href="http://www.flickr.com/photos/missrogue/87916932/"><img src="http://static.flickr.com/43/87916932_a5261d1b75_m.jpg" alt="Barcamp NY" /></a><br />
(photo by <a href="http://www.flickr.com/photos/missrogue/">miss_rogue</a>)</p>
<p>Barcamp was first organised in LA by <a href="http://barcamp.org/BarPlanners">Chris Messina and some buddies</a>.</p>
<blockquote><p><a href="http://barcamp.org/">BarCamp is an ad-hoc un-conference</a> born from the desire for people to share and learn in an open environment. It is an intense event with discussions, demos, and interaction from attendees.</p></blockquote>
<p>It is not your regular conference:</p>
<ul>
<li><strong>No spectators, only participants</strong>: Attendees must give a demo, a session, or help with one. All presentions are scheduled the day they happen. Prepare in advance, but come early to get a slot on the wall.</li>
<li><strong>No fixed agenda</strong>: talks, demos and topics are proposed by the attendees when they arrive on a central whiteboard.</li>
</ul>
<p><span id="more-281"></span><br />
<strong>ORGANISATION</strong></p>
<p style="font-size: 0.7em; float: right; width: 240px"><a href="http://www.flickr.com/photos/nickgray/85269868/"><img src="http://static.flickr.com/6/85269868_0d7fcf5633_m.jpg" alt="Barcamp badge" /></a><br />
(photo by <a href="http://www.flickr.com/photos/nickgray/">nickgray</a>)</p>
<p>The way it&#8217;s probably gonna be (lots of details still have to be filled in): everyone arrives in the morning, gets a badge and a T-shirt and add their stuff to the presentation wall. After some breakfast chatting, presentations start in 4 separate rooms. Between (and during) sessions people escape to the central space for coffee and gossip. There is a small lunch, and afterwards the presentations continue. Around 17h there is a closing session and all return happily home.</p>
<p><strong>WHO SHOULD ATTEND</strong></p>
<p style="font-size: 0.7em; float: right; width: 240px"><a href="http://www.flickr.com/photos/breyten/53150416/"><img src="http://static.flickr.com/31/53150416_4694953cd7_m.jpg" alt="Barcamp Amsterdam" /></a><br />
(photo by <a href="http://www.flickr.com/photos/breyten/">Breyten</a>)</p>
<blockquote><p>When you come, be prepared to share with barcampers.<br />
When you leave, be prepared to share it with the world.</p></blockquote>
<p>You should be willing to learn and meet new people. The central topic is &#8220;<em>technology and its influence on life/society</em>&#8220;, so you should have at least some interest/experience in topics like: blogging, group dynamics, CMS, Webdesign, digital photography, &#8216;long tail&#8217;, blogger&#8217;s psychology, Bubble 2.0, guerilla marketing, mobile, interactive TV, Web APIs, aggregation, podcasting, timeshifting, (electronic) music &#8230; (more details on <a href="http://barcamp.org/BarCampBrusselsForTheImpatient">Barcamp Brussels</a>)<br />
Just remember: No spectators, only participants!</p>
<p><strong>HOW TO PARTICIPATE</strong></p>
<p style="font-size: 0.7em; float: right; width: 120px"><a href="http://www.flickr.com/photos/blake4tx/92324430/in/pool-barcamp/"><img src="http://static.flickr.com/40/92324430_a8285fa185_t.jpg" alt="Barcamp Dallas" /></a><br />
(photo by <a href="http://www.flickr.com/photos/blake4tx/">blakeburris</a>)</p>
<p>You can register by <strong>adding your name to the <a href="http://barcamp.org/BarCampBrusselsForTheImpatient">Barcamp Brussels</a> page</strong>. That&#8217;s all. And actually show up, of course.</p>
<p>If you&#8217;re gonna join, please spread the word by adding this badge to your blog or one of your blogposts:</p>
<p style="text-align: center"><a href="http://www.wordofblog.net/redirect.php?id=775&amp;uid=1336"><img border="0" width="240" src="http://www.wordofblog.net/ad_images/7751336.jpg" /></a><br />
<font size="1"><a href="http://www.wordofblog.net/info.php?id=775">Want this badge?</a></font></p>
<p><strong>DETAILS</strong><br />
We already kind of have a location, but we first have to fix the date. Good candidates, by looking at the <a href="http://barcamp.org/BarCampBrusselsForTheImpatient">page</a>, are May 19 or May 20. Participation is free and we will try to get all catering and apparel sponsored. More details will follow on the <a href="http://barcamp.org/BarCampBrusselsForTheImpatient">Barcamp Brussels</a> page and on this blog.<br />
All feedback and suggestions are welcome and can be added to the wiki page or by contacting me through <code>peter @ forret.com</code> .<br />
See you there!</p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2006/04/barcamp-brussels-may-20-2006/' rel='bookmark' title='Permanent Link: Barcamp Brussels: May 20 2006'>Barcamp Brussels: May 20 2006</a> <small>So there it is: after some feedback on my Barcamp...</small></li><li><a href='http://blog.forret.com/2006/05/barcamp-brussels-10-days-to-go/' rel='bookmark' title='Permanent Link: Barcamp Brussels: 10 days to go!'>Barcamp Brussels: 10 days to go!</a> <small>Saturday 20 May Like M.A.R.R.S. said: &#8220;Countdown is progressive&#8220;. Ten...</small></li><li><a href='http://blog.forret.com/2007/11/barcamp-brussels-4-10-days-to-go/' rel='bookmark' title='Permanent Link: Barcamp Brussels #4: 10 days to go'>Barcamp Brussels #4: 10 days to go</a> <small> Barcamp Brussels #4 is coming closer: Saturday Dec 1st...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2006/03/barcamp-brussels-may-2006/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Jakob Nielsen: design mistake #5</title>
		<link>http://blog.forret.com/2005/10/jakob-nielsen-design-mistake-5/</link>
		<comments>http://blog.forret.com/2005/10/jakob-nielsen-design-mistake-5/#comments</comments>
		<pubDate>Thu, 20 Oct 2005 13:45:00 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://peter.smoothouse.com/2005/10/20/jakob-nielsen-design-mistake-5/</guid>
		<description><![CDATA[
Jakob Nielsen has published his updated Weblog Usability: The Top Ten Design Mistakes. One that I recently have tried to fix (before Jakob published his article, honestly!) is #5: &#8220;Classic Hits are Buried&#8221;.
Highlight a few evergreens in your navigation system and link directly to them. For example, my own list of almost 300 Alertbox columns [...]


Related posts:<ol><li><a href='http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/' rel='bookmark' title='Permanent Link: Styles should not be referenced by a &lt;link&gt;'>Styles should not be referenced by a &lt;link&gt;</a> <small>(If you don&#8217;t work with HTML, this next post will...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.pixagogo.com/S5vpfnjbBPdPkNwJho!EsYCy3VKcssBFnOIZTCeMkbqROQfLuimLzN3bbhggPxmERc2ydQVDT8zX3SSbDbnrK5riXMJQTmM1vo8hLK52YxjVWppbsldbFJvUXgg9LVllWiqIdJSsbQkGiLpc!r6m-3eA__/jakob_nielsen.jpg" /><br />
Jakob Nielsen has published his updated <a href="http://www.useit.com/alertbox/weblogs.html">Weblog Usability: The Top Ten Design Mistakes</a>. One that I recently have tried to fix (before Jakob published his article, honestly!) is #5: &#8220;Classic Hits are Buried&#8221;.</p>
<blockquote><p>Highlight a few evergreens in your navigation system and link directly to them. For example, my own list of almost 300 Alertbox columns starts by saying, &#8220;Read these first: Usability 101 and Top Ten Mistakes of Web Design.&#8221;<br />
Also, remember to link to your past pieces in newer postings. Don&#8217;t assume that readers have been with you from the beginning; give them background and context in case they want to read more about your ideas.</p></blockquote>
<p>As you can see in the sidebar on the right (if I haven&#8217;t changed my layout by the time you read this), <em>&#8220;This blog covers stuff like [...]&#8220;</em> and then I have some links that show up when you click the [...] button. I list some of the more typical posts (<a href="http://blog.forret.com/blog/2004/10/how-to-podcast-with-blogger-and.html">Podcasting with Blogger and Feedburner &#8211; Oct 2004</a> as well as <a href="http://blog.forret.com/blog/2005/02/tango-steps-and-twister.html">tango moves</a>) and some ideas/projects I launched (<a href="http://blog.forret.com/blog/2005/02/folksonomizer-generic-folksonomy.html">folksonomy</a>, <a href="http://blog.forret.com/blog/2005/08/photofeed-image-podcasting.html">photofeed</a>).</p>
<p>So what kind of links to your own posts could you make:</p>
<ul>
<li><strong>&#8216;classic&#8217; posts</strong>: posts that are typical for the subjects you address</li>
<li><strong>&#8216;remarkable&#8217; posts</strong>: posts that are are maybe not typical, but that you are somehow proud of (in my case, &#8220;<a href="http://blog.forret.com/blog/2004/08/imperial-time-units-here-come-nunes.html">Imperial time units</a>&#8221; comes to mind)</li>
<li><strong>&#8216;popular&#8217; posts</strong>: the posts that people visit most, link most to, have most comments on, &#8230;</li>
</ul>
<p>The first 2 are probably links you better indicate yourself, the last one could be based upon aggregated stats. Let&#8217;s say you want to make each list as an RSS feed, so you can display it through <a href="http://www.rss2html.com/">PHP</a> or <a href="http://itde.vccs.edu/rss2js/build.php">Javascript</a> on each blog page.</p>
<ul>
<li>handpicked (&#8217;classic&#8217;, &#8216;remarkable&#8217;, &#8216;controversial&#8217;) posts: put them in del.icio.us or furl and use the RSS feed</li>
<li>&#8216;popular&#8217; posts: imagine a statcounter of somekind, that measures the #page hits and visitors, that also checks Technorati, Google Blog Search and Yahoo stats, that also uses the Feedburner item stats (if any) and the # of comments per post (don&#8217;t know where that could come from) and that aggregates these together according to your own wishes. The end result should be the Top 20 of your own blog posts, in RSS format.</li>
</ul>
<p>Any ideas on this?</p>
<p>UPDATE: I created <a href="http://blog.forret.com/blog/overview.html">an overview page for my blog</a>, linked from the blog homepage.</p>
<p>Technorati: <a rel="tag" href="http://technorati.com/tag/blog">blog</a> &#8211; <a rel="tag" href="http://technorati.com/tag/stats">stats</a> &#8211; <a rel="tag" href="http://technorati.com/tag/design">design</a> &#8211; <a rel="statistics" href="http://technorati.com/tag/statistics">stats</a> &#8211; <a rel="tag" href="http://technorati.com/tag/nielsen">nielsen</a> &#8211; <a rel="tag" href="http://technorati.com/tag/usability">usability</a></p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2006/09/styles-should-not-be-referenced-by-a-link/' rel='bookmark' title='Permanent Link: Styles should not be referenced by a &lt;link&gt;'>Styles should not be referenced by a &lt;link&gt;</a> <small>(If you don&#8217;t work with HTML, this next post will...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2005/10/jakob-nielsen-design-mistake-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8216;Moroccan Blue&#8217; Leads Top Fashion Colors (RGB)</title>
		<link>http://blog.forret.com/2005/07/moroccan-blue-leads-top-fashion-colors-rgb/</link>
		<comments>http://blog.forret.com/2005/07/moroccan-blue-leads-top-fashion-colors-rgb/#comments</comments>
		<pubDate>Fri, 29 Jul 2005 00:42:54 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[color]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://peter.smoothouse.com/2005/07/29/moroccan-blue-leads-top-fashion-colors-rgb/</guid>
		<description><![CDATA[Moroccan Blue topped the list of colors at New York Fashion Week&#8217;s Fall 2005 collections, according to Pantone, Inc., the global authority on color and provider of professional color standards for the design industries.
Each season, Pantone surveys designers showing at New York Fashion Week and collects feedback on prominent collection colors, color inspiration, color philosophy [...]


Related posts:<ol><li><a href='http://blog.forret.com/2006/02/when-if-spring-comes-these-are-its-pantone-colors/' rel='bookmark' title='Permanent Link: When (if) Spring comes, these are its Pantone colors'>When (if) Spring comes, these are its Pantone colors</a> <small>According to Pantone, Inc., the global authority on color and...</small></li><li><a href='http://blog.forret.com/2007/02/shades-of-purple/' rel='bookmark' title='Permanent Link: Shades of purple'>Shades of purple</a> <small>Have you ever gotten into a discussion with a woman...</small></li><li><a href='http://blog.forret.com/2004/10/poor-mans-sepia-conversion/' rel='bookmark' title='Permanent Link: Poor-man&#8217;s sepia conversion'>Poor-man&#8217;s sepia conversion</a> <small> Working for Pixagogo makes digital imagery my daily bread,...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<blockquote><p><a href="http://www.forret.com/tools/color.asp?C=1&amp;M=.5&amp;Y=0.200&amp;K=0.40&amp;name=Moroccan+Blue">Moroccan Blue</a> topped the list of colors at New York Fashion Week&#8217;s Fall 2005 collections, according to <a href="http://www.pantone.com">Pantone, Inc.</a>, the global authority on color and provider of professional color standards for the design industries.<br />
Each season, Pantone surveys designers showing at New York Fashion Week and collects feedback on prominent collection colors, color inspiration, color philosophy and each designer&#8217;s signature shades. This information is used to create the <a href="http://www.pantone.com/products/products.asp?idArticle=716&amp;idArea=14">PANTONE Fashion Color Report</a>.<br />
The top 10 most directional women&#8217;s ready-to-wear colors for Fall 2005 (along with printing values) are<br />
<em>(converted by me to RGB)</em>: </p></blockquote>
<table border="0" cellspacing="6" cellpadding="0">
<tr>
<th>Color
</th>
<th>Name
</th>
<th>Pantone
</th>
<th>RGB
</th>
</tr>
<tr>
<td bgcolor="#004D7A">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=1&amp;M=.5&amp;Y=0.200&amp;K=0.40&amp;name=Moroccan+Blue">Moroccan Blue</a>
</td>
<td>PANTONE 19-4241
</td>
<td>#004D7A
</td>
</tr>
<tr>
<td bgcolor="#BA5D00">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=0&amp;M=0.500&amp;Y=1&amp;K=0.27&amp;name=Glazed+Ginger">Glazed Ginger</a>
</td>
<td>PANTONE 18-1154
</td>
<td>#BA5D00
</td>
</tr>
<tr>
<td bgcolor="#BF0000">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=0&amp;M=1&amp;Y=1&amp;K=0.25&amp;name=American+Beauty">American Beauty</a>
</td>
<td>PANTONE 19-1759
</td>
<td>#BF0000
</td>
</tr>
<tr>
<td bgcolor="#730028">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=0&amp;M=1&amp;Y=.65&amp;K=0.55&amp;name=Ruby+Wine">Ruby Wine</a>
</td>
<td>PANTONE 19-1629
</td>
<td>#730028
</td>
</tr>
<tr>
<td bgcolor="#B2A68F">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=0&amp;M=.07&amp;Y=.2&amp;K=0.3&amp;name=Atmosphere">Atmosphere</a>
</td>
<td>PANTONE 16-1406
</td>
<td>#B2A68F
</td>
</tr>
<tr>
<td bgcolor="#466900">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=.5&amp;M=.25&amp;Y=1&amp;K=0.45&amp;name=Burnt+Olive">Burnt Olive</a>
</td>
<td>PANTONE 18-0521
</td>
<td>#466900
</td>
</tr>
<tr>
<td bgcolor="#5600A6">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=.48&amp;M=1&amp;Y=0&amp;K=0.35&amp;name=Gloxinia">Gloxinia</a>
</td>
<td>PANTONE 19-3022
</td>
<td>#5600A6
</td>
</tr>
<tr>
<td bgcolor="#DACE3D">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=.1&amp;M=.15&amp;Y=.75&amp;K=0.05&amp;name=Rattan">Rattan</a>
</td>
<td>PANTONE 14-1031
</td>
<td>#DACE3D
</td>
</tr>
<tr>
<td bgcolor="#9DA600">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=.05&amp;M=0&amp;Y=1&amp;K=0.35&amp;name=Moss">Moss</a>
</td>
<td>PANTONE 16-0532
</td>
<td>#9DA600
</td>
</tr>
<tr>
<td bgcolor="#ED7700">
</td>
<td><a href="http://www.forret.com/tools/color.asp?C=0&amp;M=.5&amp;Y=1&amp;K=0.07&amp;name=Burnt+Orange">Burnt Orange</a>
</td>
<td>PANTONE 16-1448
</td>
<td>#ED7700
</td>
</tr>
</table>
<p>from <a href="http://www.creativepro.com/story/news/22610.html">creativepro.com</a></p>
<p>Technorati: <a href="http://technorati.com/tag/pantone" rel="tag">pantone</a> &#8211; <a href="http://technorati.com/tag/color" rel="tag">color</a> &#8211; <a href="http://technorati.com/tag/webdesign" rel="tag">webdesign</a> &#8211; <a href="http://technorati.com/tag/graphical" rel="tag">graphical</a></p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2006/02/when-if-spring-comes-these-are-its-pantone-colors/' rel='bookmark' title='Permanent Link: When (if) Spring comes, these are its Pantone colors'>When (if) Spring comes, these are its Pantone colors</a> <small>According to Pantone, Inc., the global authority on color and...</small></li><li><a href='http://blog.forret.com/2007/02/shades-of-purple/' rel='bookmark' title='Permanent Link: Shades of purple'>Shades of purple</a> <small>Have you ever gotten into a discussion with a woman...</small></li><li><a href='http://blog.forret.com/2004/10/poor-mans-sepia-conversion/' rel='bookmark' title='Permanent Link: Poor-man&#8217;s sepia conversion'>Poor-man&#8217;s sepia conversion</a> <small> Working for Pixagogo makes digital imagery my daily bread,...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2005/07/moroccan-blue-leads-top-fashion-colors-rgb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Online software development: the WikiRAD</title>
		<link>http://blog.forret.com/2005/07/online-software-development-the-wikirad/</link>
		<comments>http://blog.forret.com/2005/07/online-software-development-the-wikirad/#comments</comments>
		<pubDate>Fri, 15 Jul 2005 19:30:23 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://peter.smoothouse.com/2005/07/15/online-software-development-the-wikirad/</guid>
		<description><![CDATA[
I love the idea of social software. Specifically, while it has been several years since I first encountered the wiki concept (Ward Cunningham&#8217;s c2.com), and I have been a Wikipedia contributor for a while, it is only since I checked out the emerging wiki hosting sites (see Google and social software: wikis) that I realize [...]


Related posts:<ol><li><a href='http://blog.forret.com/2006/03/web-based-web-development/' rel='bookmark' title='Permanent Link: Web-based web development'>Web-based web development</a> <small>Writing code in your browser, it&#8217;s coming this way, I...</small></li><li><a href='http://blog.forret.com/2004/08/my-online-charmap-of-html-character-entities/' rel='bookmark' title='Permanent Link: My online charmap of HTML character entities'>My online charmap of HTML character entities</a> <small>Geeky as hell, but I need it quite often, and...</small></li><li><a href='http://blog.forret.com/2004/06/port-redirection-in-windows/' rel='bookmark' title='Permanent Link: Port redirection in Windows'>Port redirection in Windows</a> <small>We use port redirection/proxy often on our platforms. In the...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.pixagogo.com/S5vpfnjbBPdPlrwuygMfdob-olIWIff6oBbPIZ4PT!HpEhgBfpfirYoi0ej8YwpLktVKNV7bWm9IjrgSfcPbOcjtDDhu29ZUL3MqLzKQuagDilby21y3R-rQjQXVcBnyvKwQ!3gEocuWELoBa!X5AHZw__/colorcoded.jpg" /><br />
I love the idea of <a href="http://en.wikipedia.org/wiki/Social_software">social software</a>. Specifically, while it has been several years since I first encountered the <a href="http://en.wikipedia.org/wiki/Wiki">wiki</a> concept (<a href="http://en.wikipedia.org/wiki/Ward_Cunningham">Ward Cunningham</a>&#8217;s <a href="http://c2.com/cgi/wiki">c2.com</a>), and I have been a <a href="http://en.wikipedia.org">Wikipedia</a> contributor for a while, it is only since I checked out the emerging wiki hosting sites (see <a href="http://blog.forret.com/blog/2005/06/google-and-social-software-wikis.html">Google and social software: wikis</a>) that I realize that wikis are becoming mainstream. Sites like <a href="http://www.wikispaces.org/">Wikispaces</a>, <a href="http://www.jot.com/">JotSpot</a> and <a href="http://pbwiki.com">PbWiki</a> are providing anyone with the tools to safely and effortlessly develop a body of knowledge.</p>
<p>On a seemingly unrelated point, I am currently developing some stuff in PHP (codeword &#8216;<em>photcasting</em>&#8216; but more on that later) and I realise my development environment is so amateuristic: I use a text-editor with FTP support (the last couple of years it has always been <a href="http://www.editplus.com">Editplus</a>), and everytime I save some code, I overwrite the older version on the &#8216;live&#8217; server. I also develop on different PCs in a typical week (easily 3) and so I don&#8217;t have 1 development PC with PHP running where I could stage everything before I deploy it to my &#8216;production&#8217; site. With a bad broadband connection, when a &#8217;save&#8217; operation goes wrong, you end up with a &#8216;crucialstuff.php&#8217; script file that is empty (0 bytes) and brings your whole site down. Unfortunately, I know this from (repeated) experience.</p>
<p>Earlier today, I was thinking about these 2 issues one right after the other and bam: they collided. I have a new development paradigm: the <strong>WikiRAD</strong>.</p>
<h3>&#8216;WikiRAD&#8217; development</h3>
<p><strong>WRITE CODE</strong></p>
<ul>
<li>you write your code with your browser in a Wiki-style editor, with <a href="http://en.wikipedia.org/wiki/Syntax_highlighting">syntax colouring</a> added (haven&#8217;t seen that in a Wiki editor yet). The code resides on a WikiRAD server (with <a href="http://en.wikipedia.org/wiki/Redundant_array_of_independent_disks">RAID5</a> disks, daily backups, &#8230;). You need no other software on your PC to be able to develop software.
</li>
<li>the Wiki system takes care of <a href="http://en.wikipedia.org/wiki/Revision_control">version management</a> and comparing of sources (Wikis already do this). Check in, check out, rollback, branching, merging, several developers on 1 codebase, &#8230; all possible!
</li>
<li>you can search your whole codebase for certain keywords, jump to class definitions &#8211; just like normal <a href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a>
</li>
<li>when you look at your code, the names of classes, templates, libaries, .. become clickable, just like in a &#8230; wiki!
</li>
<li>there are tools to make writing code easier (class wizard, sample code, forum for questions)
</li>
<li>there&#8217;s a Google-like crawler that indexes code so it becomes available for other developers &#8211; this is real &#8220;open source&#8221;!
</li>
</ul>
<p><strong>COMPILE AND RUN</strong></p>
<ul>
<li>the WikiRAD server lets you develop in a &#8217;stage&#8217; mode (separate from your real system) and lets you deploy it to &#8216;production&#8217; once you&#8217;re sure. The production server can be your own server, with deployment via FTP or SSH.
</li>
<li>for the most popular languages, you also have a <a href="http://en.wikipedia.org/wiki/Lint_programming_tool">lint</a> system that can detect obvious errors in your code before compiling.
</li>
<li>if the language you write in requires <a href="http://en.wikipedia.org/wiki/Compiler">compiling</a> (like C++, C#, VB.NET, &#8230;) the server takes care of that &#8211; probably faster than on your own Pentium III.
</li>
<li>you no longer need to set up a &#8217;similar&#8217; server to test your software, it will run on the same kind of system, behind the same combination of routers and firewalls, with the same libraries installed.
</li>
<li>you can add breakpoints, see the console output, view values of variables, &#8230;
</li>
</ul>
<p>So take <a href="http://sourceforge.net/">Sourceforge</a>, drop in a Wiki system for writing the code, a system for online debugging and profiling and tada: life has just become so much easier for a programmer. </p>
<p>All remarks are welcome!</p>
<p>Technorati: <a href="http://technorati.com/tag/social%20software" rel="tag">social software</a> &#8211; <a href="http://technorati.com/tag/wiki" rel="tag">wiki</a> &#8211; <a href="http://technorati.com/tag/software" rel="tag">software</a> &#8211; <a href="http://technorati.com/tag/open%20source" rel="tag">open source</a></p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2006/03/web-based-web-development/' rel='bookmark' title='Permanent Link: Web-based web development'>Web-based web development</a> <small>Writing code in your browser, it&#8217;s coming this way, I...</small></li><li><a href='http://blog.forret.com/2004/08/my-online-charmap-of-html-character-entities/' rel='bookmark' title='Permanent Link: My online charmap of HTML character entities'>My online charmap of HTML character entities</a> <small>Geeky as hell, but I need it quite often, and...</small></li><li><a href='http://blog.forret.com/2004/06/port-redirection-in-windows/' rel='bookmark' title='Permanent Link: Port redirection in Windows'>Port redirection in Windows</a> <small>We use port redirection/proxy often on our platforms. In the...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2005/07/online-software-development-the-wikirad/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Using movies on a web page</title>
		<link>http://blog.forret.com/2005/06/using-movies-on-a-web-page/</link>
		<comments>http://blog.forret.com/2005/06/using-movies-on-a-web-page/#comments</comments>
		<pubDate>Thu, 09 Jun 2005 12:21:00 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[media]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://peter.smoothouse.com/2005/06/09/using-movies-on-a-web-page/</guid>
		<description><![CDATA[
So you recorded those first steps of your youngest, your first public milonga performance, uncle Tom falling backwards into that cake, or auntie Janet dressed like a man. Now you want to show into to the world. You save the movie into a .WMV (Windows Media &#8211; Video), .RM (Real Media), .MOV (Quicktime), .MPG or [...]


Related posts:<ol><li><a href='http://blog.forret.com/2005/01/podcasting-trick-5-play-it-now-buttons/' rel='bookmark' title='Permanent Link: Podcasting trick #5: play-it-now buttons'>Podcasting trick #5: play-it-now buttons</a> <small> While working with Jurriaan on a podcast for BeyondJazz.net...</small></li><li><a href='http://blog.forret.com/2005/02/quoteplay-and-portable-smil/' rel='bookmark' title='Permanent Link: QuotePlay and portable SMIL'>QuotePlay and portable SMIL</a> <small> Matt Round had released QuotePlay, a Flash-based MP3 player...</small></li><li><a href='http://blog.forret.com/2006/12/there-are-no-flash-websites/' rel='bookmark' title='Permanent Link: There are no Flash websites'>There are no Flash websites</a> <small>Never say &#8220;we have a Flash website&#8221;; there is no...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.pixagogo.com/S5vpfnjbBPdPlCvid7b390cO6czXTj2jFS29bvFmpspo4!AMIiMqFtHjGKqNnzx7UPd3xe4oZmN8!YKenVSHMhsmrUYBooIsWYntV3qODCHtivlCmKPbX6P7!RUwq3ZK42VyzahLk71WHKeTN2qxDiOg__/tango_dance.jpg"/><br />
So you recorded those first steps of your youngest, your first public milonga performance, uncle Tom falling backwards into that cake, or auntie Janet dressed like a man. Now you want to show into to the world. You save the movie into a .WMV (<a href="http://en.wikipedia.org/wiki/WMV">Windows Media &#8211; Video</a>), .RM (<a href="http://en.wikipedia.org/wiki/RealMedia">Real Media</a>), .MOV (<a href="http://en.wikipedia.org/wiki/QuickTime">Quicktime</a>), .MPG or .MP4 (<a href="http://en.wikipedia.org/wiki/MPEG">MPEG-2 or MPEG-4</a>) , .SWF (<a href="http://en.wikipedia.org/wiki/Swf">Shockwave/Flash</a>) or .AVI (<a href="http://en.wikipedia.org/wiki/AVI">Microsoft Video for Windows</a>) file, sprinkled some Sorenson or DivX magic on it (if you&#8217;re not familiar with these terms, don&#8217;t worry. It&#8217;s another topic alltogether), upload it to your web server, and then what? What is the best way to present it to your visitors?</p>
<dl>
<dt>ANCHOR tag &#8211; a plain link</p>
<dd><strong>Works</strong>: everywhere
</dd>
<dd><strong>Description</strong>: Provide just a link to the movie file, and count on the user&#8217;s browser to figure out which application it should give the URL to. WMV files will generally open in Windows Media Player, MOV files in Quicktime, but there is no way to be sure what AVI and MPG files will open in. This depends on the client&#8217;s configuration. An additional disadvantage is that a lot of browsers will first download the whole file and only then play it, so you lose the quasi-immediate start of a streaming experience.
</dd>
<dd><textarea cols="65" rows="3"><a href="http://www.example.com/movie.mpg" title="The movie">Click to play</a></textarea></p>
<dt><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/embed.asp">EMBED</a> tag</p>
<dd><strong>Works</strong>: everywhere
</dd>
<dd><strong>Description</strong>: even if it is not part of the HTML specification, it should work everywhere. It can be as minimal as <code>&lt;embed src="http://www.example.com/movie.avi"&gt;</code>, but also allows the specifying of size, <a href="http://en.wikipedia.org/wiki/MIME">mime-type</a> and player controls. It does not allow you to specify what program (and what version) should be used to play it. It&#8217;s again the user&#8217;s (browser) configuration that decides.
</dd>
<dd><textarea cols="65" rows="7">&lt;embed width=320 height=250 src=&#8221;http://www.example.com/movie.wmv&#8221; name=&#8221;player&#8221; id=&#8221;player&#8221; pluginspage=&#8221;http://www.microsoft.com/windows/windowsmedia/download/&#8221; type=&#8221;video/x-ms-wmv&#8221; ShowControls=&#8221;1&#8243; ShowDisplay=&#8221;0&#8243; ShowStatusBar=&#8221;0&#8243; autostart=&#8221;1&#8243; autorewind=0 ShowPositionControls=&#8221;1&#8243; ShowTracker=&#8221;0&#8243; &gt;&lt;/embed&gt;<br />
</textarea></p>
<dt><a href="http://www.w3.org/TR/REC-html40/struct/objects.html#h-13.3">OBJECT</a> tag</p>
<dd><strong>Works</strong>: everywhere
</dd>
<dd><strong>Description</strong>: this is the official way to do it (according to the HTML specs). You create an <code>&lt;OBJECT&gt; ... &lt;/OBJECT&gt;</code> pair with a bunch of <code>PARAM</code> in between. Here is the way to do it with <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmplay10/mmp_sdk/paramtags.asp">Windows Media Player</a>, <a href="http://service.real.com/help/library/guides/production8/htmfiles/control.htm">RealPlayer</a>, <a href="http://developer.apple.com/documentation/QuickTime/Conceptual/QTScripting_HTML/QTScripting_HTML_Document/chapter_1000_section_3.html">QuickTime</a> and <a href="http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_4150">Shockwave/Flash</a>. A very common practice is to combine the <code>EMBED</code> with <code>OBJECT</code>, like in the example below.
</dd>
<dd><textarea cols="65" rows="11">&lt;OBJECT CLASSID=&quot;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&quot; CODEBASE=&quot;http://www.apple.com/qtactivex/qtplugin.cab&quot; HEIGHT=&quot;250&quot; WIDTH=&quot;320&quot; &gt; &lt;PARAM NAME=&quot;src&quot; VALUE=&quot;http://www.example.com/movie.mov&quot; &gt; &lt;PARAM NAME=&quot;AutoPlay&quot; VALUE=&quot;true&quot; &gt; &lt;PARAM NAME=&quot;Controller&quot; VALUE=&quot;false&quot; &gt; &lt;EMBED SRC=&quot;http://www.example.com/movie.mov&quot; HEIGHT=&quot;250&quot; WIDTH=&quot;320&quot; TYPE=&quot;video/quicktime&quot; PLUGINSPAGE=&quot;http://www.apple.com/quicktime/download/&quot; AUTOPLAY=&quot;true&quot; CONTROLLER=&quot;false&quot; /&gt; &lt;/OBJECT&gt;</textarea></p>
<dt><a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/dynsrc.asp">IMG with dynsrc</a></p>
<dd><strong>Works</strong>: only in Internet Explorer (Windows)
</dd>
<dd><strong>Description</strong>: very easy to use, but poorly supported. Allows for combining the classic <code>SRC</code> with the <code>DYNSRC</code> property, so that even if the browser does not show the movie, it can still show an image.
</dd>
<dd><textarea cols="65" rows="4"><img width="160" height="120" alt="The movie"/></textarea></p>
<dt>MEDIAPLAYER page</p>
<dd><strong>Works</strong>: everywhere (if it&#8217;s done right)
</dd>
<dd><strong>Description</strong>: if you&#8217;re a bit handy, you can create a wrapper page for your streaming media. I use my <a href="http://www.forret.com/tools/cinema.asp">Cinema Tool</a> to show movies. I just input the URL, the format and the size, and the rest is automatic. On podcasts like <a href="http://traxsource.blogspot.com/">Traxsource</a>, I use a special audio-only player page (not yet generally available) that shows the playlist (a web page) within the media player (<a href="http://www.w3.org/TR/REC-smil/">SMIL</a> for Real &amp; QuickTime/<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmplay10/mmp_sdk/creatingmetafileplaylists.asp">ASX</a> for WMV).
</dd>
<dd><textarea cols="65" rows="5"><a href="http://www.forret.com/tools/cinema.asp?w=320&amp;h=260&amp;type=video&amp;format=WMF&amp;url=http%3A%2F%2Fwww.example.com%2Fmovie.wmv">Click to play</a></textarea></p>
<dt>IFRAME with MEDIAPLAYER</p>
<dd><strong>Works</strong>: everywhere (but watch out for Javascript scripts like Adsense/counter pages &#8211; they can give errors in frames)
</dd>
<dd><strong>Description</strong>: If you don&#8217;t want to send your visitors to a new or a popup page, consider inserting a <code>IFRAME</code> into your page. You can then even trigger new movies by just adding a link with the right <code>TARGET</code>. Remark: if you add a link like described in the <code>ANCHOR</code> example above, even with the right <code>TARGET</code> specified, the file will probably open outside of the browser, and not in the <code>IFRAME</code> where you want it. Webmastering shouldn&#8217;t be THAT easy!
</dd>
<dd><textarea cols="65" rows="11"><a href="http://www.forret.com/tools/cinema.asp?w=320&amp;h=260&amp;type=video&amp;format=WMF&amp;url=http%3A%2F%2Fwww.example.com%2Fmovie.wmv">Movie 1</a> &#8211; <a href="http://www.forret.com/tools/cinema.asp?w=320&amp;h=260&amp;type=video&amp;format=WMF&amp;url=http%3A%2F%2Fwww.example.com%2Fmovie2.wmv">Movie 2</a> &lt;br /&gt; </textarea>
</dd>
</dt>
</dd>
</dt>
</dd>
</dt>
</dd>
</dt>
</dd>
</dt>
</dd>
</dt>
</dl>
<p>Also see: <a href="http://www.fluffbucket.com/html/videolink.htm">fluffbucket.com</a> &#8211; <a href="http://en.wikipedia.org/wiki/Comparison_of_media_players">Comparison of media players</a></p>
<p>Technorati: <a href="http://technorati.com/tag/media" rel="tag">media</a> &#8211; <a href="http://technorati.com/tag/html" rel="tag">html</a> &#8211; <a href="http://technorati.com/tag/blog" rel="tag">blog</a> </p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2005/01/podcasting-trick-5-play-it-now-buttons/' rel='bookmark' title='Permanent Link: Podcasting trick #5: play-it-now buttons'>Podcasting trick #5: play-it-now buttons</a> <small> While working with Jurriaan on a podcast for BeyondJazz.net...</small></li><li><a href='http://blog.forret.com/2005/02/quoteplay-and-portable-smil/' rel='bookmark' title='Permanent Link: QuotePlay and portable SMIL'>QuotePlay and portable SMIL</a> <small> Matt Round had released QuotePlay, a Flash-based MP3 player...</small></li><li><a href='http://blog.forret.com/2006/12/there-are-no-flash-websites/' rel='bookmark' title='Permanent Link: There are no Flash websites'>There are no Flash websites</a> <small>Never say &#8220;we have a Flash website&#8221;; there is no...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2005/06/using-movies-on-a-web-page/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tricks to fight right-click image copying</title>
		<link>http://blog.forret.com/2005/02/tricks-to-fight-right-click-image-copying/</link>
		<comments>http://blog.forret.com/2005/02/tricks-to-fight-right-click-image-copying/#comments</comments>
		<pubDate>Sat, 26 Feb 2005 11:31:00 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://peter.smoothouse.com/2005/02/26/tricks-to-fight-right-click-image-copying/</guid>
		<description><![CDATA[
An image like the one on the right (using the standard &#60;img&#62; tag) can easily be copied by any visitor: right-click the image and select &#8220;Save Picture As&#8221; or &#8220;Copy Image&#8221;. In cases where the author wants to protect his images from copying, there are a couple of ways to make the copying harder. Not [...]


Related posts:<ol><li><a href='http://blog.forret.com/2005/09/flickr-changes-image-urls-with-some-glitches/' rel='bookmark' title='Permanent Link: Flickr changes image URLs with some glitches'>Flickr changes image URLs with some glitches</a> <small> Old URL: photos23.flickr.com New URL: static.flickr.com/23 Just this week...</small></li><li><a href='http://blog.forret.com/2005/01/playing-mp3-with-an-embedded-flash-player/' rel='bookmark' title='Permanent Link: Playing MP3 with an embedded Flash player'>Playing MP3 with an embedded Flash player</a> <small>(There is an updated post at Click to hear the...</small></li><li><a href='http://blog.forret.com/2005/06/using-movies-on-a-web-page/' rel='bookmark' title='Permanent Link: Using movies on a web page'>Using movies on a web page</a> <small> So you recorded those first steps of your youngest,...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.pixagogo.com/S5uRuA-TyxopgHO98HAn!ET!A3jeWTJKCp!EtHLDV786CiHHHuGrgF5Gwr9XM!K8CKB62mq!0Su4O0rWL6ufbi4sFVYSDw7Nghr1-k5LLRo-8_/Gabriela_2756.JPG"/><br />
An image like the one on the right (using the standard <code>&lt;img&gt;</code> tag) can easily be copied by any visitor: right-click the image and select &#8220;Save Picture As&#8221; or &#8220;Copy Image&#8221;. In cases where the author wants to protect his images from copying, there are a couple of ways to make the copying harder. Not make it impossible, just less trivial.<br />
The fact that you can get the image by checking the HTML (&#8221;View Source&#8221;) is something that is difficult to avoid, and in any case, the vistor could always take a screen shot and trim the result to have only the image. So I&#8217;ll just focus on disabling the &#8220;Save/Copy Image&#8221; functionality.</p>
<p>Remark: there are ways to make all Right-Click functionality inaccessible. I think this is a bad practice (for the reasons, check <a href="http://blogs.msdn.com/jeffdav/archive/2004/05/06/127443.aspx">jeffdav</a>), so I will not cover these methods.</p>
<p><b>Trick #1: Table Background</b></p>
<div>
<table cellpadding="0" STYLE="background-image: url(http://www.pixagogo.com/S5uRuA-TyxopgHO98HAn!ET!A3jeWTJKCp!EtHLDV786CiHHHuGrgF5Gwr9XM!K8CKB62mq!0Su4O0rWL6ufbi4sFVYSDw7Nghr1-k5LLRo-8_/Gabriela_2756.JPG)" width="130" height="190" >
<tr>
<td><img width="130" height="190" src="http://www.pixagogo.com/brand/pixagogo/images/spacer.gif"/></td>
</tr>
</table>
</div>
<p>You use the image as the table background: <code>&lt;TABLE STYLE="background-image: url(...)"&gt;</code>. If you do just that, the &#8220;Save Picture As&#8221; option goes away, but a new &#8220;Save Background&#8221; is created. So you cover up the image by placing a transparent gif before it, in the <code>&lt;TD&gt;</code> cell. </p>
<p>The end effect is that is looks like you can copy or save the picture, but you will be saving the GIF file. </p>
<p>Remark: you have to explicitly specify the dimensions of the table, it will not autoscale to the size of the image.</p>
<p><b><br />
Trick #2: Div Background</b></p>
<div>
<div><img src="http://www.pixagogo.com/S5uRuA-TyxopgHO98HAn!ET!A3jeWTJKCp!EtHLDV786CiHHHuGrgF5Gwr9XM!K8CKB62mq!0Su4O0rWL6ufbi4sFVYSDw7Nghr1-k5LLRo-8_/Gabriela_2756.JPG"/></div>
</div>
<p>You can do basically the same thing with a <code>&lt;div&gt;</code>: you use the picture as the background image, and you put another &lt;DIV&gt; above it with the transparent GIF. </p>
<p>You would again need to specify the exact dimensions of the whole thing, but wait, there&#8217;s another trick: put the image in an <code>&lt;IMG&gt;</code> tag inside the second DIV and give it a <code>visibility: hidden</code>. This way it takes up the size of the picture without actually showing up, or appearing right-clickable.</p>
<p><b><br />
Trick #3: Flash image</b></p>
<div></div>
<p>The third is a no-brainer: using a Flash object. Almost 100% of browsers have Flash built-in, so compatibility problems are limited. For the exact <code>OBJECT</code> and <code>EMBED</code>, check the HTML source of this text or the <a href="http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_4150">Macromedia site</a>.<br />
Here also, you need to give the right dimensions to the Flash object, otherwise it will take a default (square) size.</p>
<p>Remark: using the <code>menu="false"</code> option ensures that the only options showing up on a right-click are: &#8220;Settings&#8230;&#8221; (disabled) and &#8220;About Macromedia Flash Player &#8230;&#8221;.</p>
<p><b><br />
Conclusion</b><br />
It is possible to use some simple tricks to make right-click copy or save functionality impossible. I wouldn&#8217;t go as far as to call this &#8216;copyright protection&#8217;, but it helps. At least no one can claim they just copied it because they thought it would be OK.<br />
I used the last option (Flash) on my <a href="http://tango.forret.com/tango/steps/?figure=Basico">Tango Steps site</a>, to protect the images I use from my teachers, <a href="http://www.marisayoliver.com">Marisa and Oliver</a>.</p>
<p>Technorati: <a href="http://technorati.com/tag/css" rel="tag">css</a> &#8211; <a href="http://technorati.com/tag/copyright" rel="tag">copyright</a></p>


<p>Related posts:<ol><li><a href='http://blog.forret.com/2005/09/flickr-changes-image-urls-with-some-glitches/' rel='bookmark' title='Permanent Link: Flickr changes image URLs with some glitches'>Flickr changes image URLs with some glitches</a> <small> Old URL: photos23.flickr.com New URL: static.flickr.com/23 Just this week...</small></li><li><a href='http://blog.forret.com/2005/01/playing-mp3-with-an-embedded-flash-player/' rel='bookmark' title='Permanent Link: Playing MP3 with an embedded Flash player'>Playing MP3 with an embedded Flash player</a> <small>(There is an updated post at Click to hear the...</small></li><li><a href='http://blog.forret.com/2005/06/using-movies-on-a-web-page/' rel='bookmark' title='Permanent Link: Using movies on a web page'>Using movies on a web page</a> <small> So you recorded those first steps of your youngest,...</small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.forret.com/2005/02/tricks-to-fight-right-click-image-copying/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 4.957 seconds -->
