<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.shapeshed.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en">
    <title type="text">Shape Shed</title>
    <subtitle type="text">Articles on graphic and web design, XHTML, CSS, Photoshop and Illustrator</subtitle>
    <link rel="alternate" type="text/html" href="http://shapeshed.com/journal/" />
    
    <updated>2009-07-02T12:07:02Z</updated>
    <rights>Copyright (c) 2009, George Ornbo</rights>
    <generator uri="http://expressionengine.com/" version="1.6.7">ExpressionEngine</generator>
    <id>tag:shapeshed.com,2009:07:02</id>

    <link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/3.0/" /><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><link rel="self" href="http://feeds.shapeshed.com/shapeshed" type="application/atom+xml" /><feedburner:emailServiceId>shapeshed</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
      <title>Drag and drop in HTML5</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/s3fkhpdC3Ow/" />
      <id>tag:shapeshed.com,2009:journal/1.2356</id>
      <published>2009-07-02T11:22:01Z</published>
      <updated>2009-07-02T12:07:02Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="HTML 5" scheme="http://shapeshed.com/journal/tag/html_5/" label="HTML 5" />
      <content type="html">
        HTML 5 has the ability to create drag and drop events. This example only works in Firefox 3.5 and Safari 4 but here's a quick tour of how it works. &lt;p class="highlight"&gt;Not interested in the explanation? Go straight to the &lt;a href="http://shapeshed.com/examples/drag-and-drop/"&gt;demo page&lt;/a&gt; or &lt;a href="http://github.com/shapeshed/HTML-5/tree/master"&gt;download the source code&lt;/a&gt; from Github&lt;/p&gt;

&lt;h3&gt;Browser based computing&lt;/h3&gt;
&lt;p&gt;The more I explore HTML5 the more I feel that a browser based Operating System is coming sooner rather than later. Drag and drop is another important feature that will make this happen. Granted the spec is still work in progress but in Firefox 3.5 there is a workable API that developers can use and build UIs with. For this simple example I'm proposing that a user will want to drag a file to the trash. Later on I might take this further and implement a light client-side database using &lt;a href="http://dev.w3.org/html5/webstorage/#storage-0"&gt;storage&lt;/a&gt;, but for now you can only drag a file to the trash. This example only works in Firefox 3.5&lt;/p&gt;

&lt;h3&gt;Creating the drag&lt;/h3&gt;

&lt;p&gt;To make an element draggable you can do this.&lt;/p&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;li&amp;nbsp;draggable&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"true"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;id&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"file1"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ondragstart&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"drag(this,&amp;nbsp;event)"&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;span&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;filename&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;txt&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;span&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;li&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;To create a draggable area you can do this.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;div&amp;nbsp;id&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"trash"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ondrop&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"drop(this,&amp;nbsp;event)"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ondragenter&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"return&amp;nbsp;false"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ondragover&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"return&amp;nbsp;false"&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;div&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Then you just need a bit of JavaScript to hook it all up&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;drag&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;target&lt;/span&gt;&lt;span style="color: #007700"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;e&lt;/span&gt;&lt;span style="color: #007700"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;&amp;#123;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;dataTransfer&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;setData&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Text'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;target&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;id&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;&amp;#125;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;drop&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;target&lt;/span&gt;&lt;span style="color: #007700"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;e&lt;/span&gt;&lt;span style="color: #007700"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;&amp;#123;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;var&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;e&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;dataTransfer&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getData&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Text'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;target&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;document&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementById&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;id&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;e&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;preventDefault&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;&amp;#125;&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;A dose of CSS3&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://shapeshed.com/examples/drag-and-drop/"&gt;The example&lt;/a&gt; also features CSS3 (border-radius, box-shadow, text-shadow, rgba) and  @font-face embdding with the excellent &lt;a href="http://www.theleagueofmoveabletype.com/fonts/1-junction"&gt;open source Junction font&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Reservations&lt;/h3&gt;
&lt;p&gt;Because I'm a standards zealot I'm not sure about the inline javascript proposed in the spec. There is also a big issue about what happens for users who cannot use the mouse. These are all expected issues though that I hope will be ironed out.  Great progress has been made already.&lt;/p&gt;

&lt;h3&gt;Further reading&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/#dnd"&gt;HTML5 Drag and Drop Working Draft&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/En/DragDrop/Drag_and_Drop"&gt;Drag and Drop - MDC&lt;/li&gt;
&lt;/ul&gt;

 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=s3fkhpdC3Ow:4byQ9Eck0SI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=s3fkhpdC3Ow:4byQ9Eck0SI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=s3fkhpdC3Ow:4byQ9Eck0SI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=s3fkhpdC3Ow:4byQ9Eck0SI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=s3fkhpdC3Ow:4byQ9Eck0SI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=s3fkhpdC3Ow:4byQ9Eck0SI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=s3fkhpdC3Ow:4byQ9Eck0SI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/s3fkhpdC3Ow" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/drag_and_drop_in_html5/</feedburner:origLink></entry>

    <entry>
      <title>The HTML 5 Video Element</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/QqsCrDRv7VY/" />
      <id>tag:shapeshed.com,2009:journal/1.2355</id>
      <published>2009-06-05T10:35:43Z</published>
      <updated>2009-06-05T10:43:44Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="Browsers" scheme="http://shapeshed.com/journal/tag/browsers/" label="Browsers" />
      <category term="HTML 5" scheme="http://shapeshed.com/journal/tag/html_5/" label="HTML 5" />
      <content type="html">
        HTML 5 makes adding video to your site a great deal easier with video tag. Issues of videos codecs, browser support and accessibility need to be resolved but somewhere down the line video will get a whole lot easier. &lt;p class="highlight"&gt;Not interested in the explanation? &lt;a href="http://shapeshed.com/examples/HTML5-video-element/"&gt;Go straight to the example.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Current best practice&lt;/h3&gt;
&lt;p&gt;Current best practice is to use &lt;a href="http://blog.deconcept.com/swfobject/"&gt;SWFObject&lt;/a&gt; to write a player like the &lt;a href="http://www.longtailvideo.com/players/jw-flv-player/"&gt;JW FLV Media Player&lt;/a&gt; or &lt;a href="http://flowplayer.org/"&gt;Flow Player&lt;/a&gt;. Both of these are Flash players so if users don't have Flash or JavaScript they get no video. Web authors can offer alternative HTML content through this method but it has always felt clunky.&lt;/p&gt; 

&lt;h3&gt;A shiny new element&lt;/h3&gt;
&lt;p&gt;Enter HTML 5 and the video element. No need to use a third party player - video is available within the HTML specification. Here's how you would add a video to your page:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;video&amp;nbsp;src&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"/video/your_video.ogg"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;controls&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"true"&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;Your&amp;nbsp;browser&amp;nbsp;doesnt&amp;nbsp;support&amp;nbsp;the&amp;nbsp;video&amp;nbsp;tag&lt;/span&gt;&lt;span style="color: #007700"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;You&amp;nbsp;can&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"/video/your_video.ogg"&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;download&amp;nbsp;the&amp;nbsp;video&amp;nbsp;here&lt;/span&gt;&lt;span style="color: #007700"&gt;.&amp;lt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;a&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;video&lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;The following attributes are available:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;src&lt;/dt&gt;
&lt;dd&gt;The gives the address of the video&lt;/dd&gt;
&lt;dt&gt;poster&lt;/dt&gt;
&lt;dd&gt;This gives the address of an image to show when video data is not available&lt;/dd&gt;
&lt;dt&gt;autobuffer&lt;/dt&gt;
&lt;dd&gt;This hints to the user agent that the content is likely to be used&lt;/dd&gt;
&lt;dt&gt;autoplay&lt;/dt&gt;
&lt;dd&gt;This auto starts the video&lt;/dd&gt;
&lt;dt&gt;loop&lt;/dt&gt;
&lt;dd&gt;This will loop the video&lt;/dd&gt;
&lt;dt&gt;controls&lt;/dt&gt;
&lt;dd&gt;Choose whether to show video controls or not&lt;/dd&gt;
&lt;dt&gt;width&lt;/dt&gt;
&lt;dd&gt;The width of the video&lt;/dd&gt;
&lt;dt&gt;height&lt;/dt&gt;
&lt;dd&gt;The height of the video&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Issues&lt;/h3&gt;
&lt;p&gt;There are ongoing issues that need to be resolved, not least of which is browser support.  Currently Firefox supports the ogg codec whilst Safari supports h.264. Opera is also supporting the .ogg format. Secondly anyone who has worked with videos will understand the plethora of codecs. Some of these are open formats, others are proprietary. For the proprietary codecs browser vendors will need to decide whether to fork out for expensive licenses or just support open codecs. Finally the accessibility question needs to be addressed. Should accessibility be embedded in the browser player (subtitles, transcript) or should this be handled another way?&lt;/p&gt;

&lt;h3&gt;Likely to be a while&lt;/h3&gt;
&lt;p&gt;Ubiquitous support for the video element is likely to be a long way off but at some point using video on a site is going to be much easier and developers won't need to rely on third party players - it will be part of the browser. &lt;/p&gt;

&lt;p class="highlight"&gt;&lt;a href="http://shapeshed.com/examples/HTML5-video-element/"&gt;See the HTML 5 video demo.&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/#video"&gt;HTML 5 Working Draft - The Video Element&lt;/a&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/html5"&gt;YouTube’s HTML5 Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.dailymotion.com/2009/05/27/watch-videowithout-flash/"&gt;The Dailymotion HTML5 Demo&lt;/a&gt;
&lt;li&gt;&lt;a href="http://sandfly.net.nz/blog/2009/05/the-html5-video-tags-fatal-flaw/"&gt;The HTML5 Video Tag's Fatal Flaw&lt;/a&gt;
&lt;/ul&gt; 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=QqsCrDRv7VY:wPOzjhDfTU8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=QqsCrDRv7VY:wPOzjhDfTU8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=QqsCrDRv7VY:wPOzjhDfTU8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=QqsCrDRv7VY:wPOzjhDfTU8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=QqsCrDRv7VY:wPOzjhDfTU8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=QqsCrDRv7VY:wPOzjhDfTU8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=QqsCrDRv7VY:wPOzjhDfTU8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/QqsCrDRv7VY" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/HTML5-video-element/</feedburner:origLink></entry>

    <entry>
      <title>The continued need for semantic HTML</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/fpWWIF4L4BU/" />
      <id>tag:shapeshed.com,2009:journal/1.2354</id>
      <published>2009-06-04T12:11:42Z</published>
      <updated>2009-06-04T12:17:43Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="Google" scheme="http://shapeshed.com/journal/tag/google/" label="Google" />
      <category term="Opinion" scheme="http://shapeshed.com/journal/tag/opinion/" label="Opinion" />
      <category term="Web Standards" scheme="http://shapeshed.com/journal/tag/web_standards/" label="Web Standards" />
      <category term="XHTML" scheme="http://shapeshed.com/journal/tag/xhtml/" label="XHTML" />
      <category term="Yahoo" scheme="http://shapeshed.com/journal/tag/yahoo/" label="Yahoo" />
      <content type="html">
        Two new search tools in &lt;a href="http://www.wolframalpha.com/"&gt;Wolfram&lt;/a&gt; and &lt;a href="http://www.google.com/squared"&gt;Google Squared&lt;/a&gt; have been released that demonstrate the need for a standards based approach to web semantics and data.&lt;h3&gt;HTML is king&lt;/h3&gt;
&lt;p&gt;From &lt;a href="http://www.w3.org/People/Raggett/book4/ch02.html"&gt;its invention&lt;/a&gt; in 1989 to &lt;a href="http://dev.w3.org/html5/spec/Overview.html"&gt;present day developments&lt;/a&gt;, HTML has been the foundation for documents on the web. Documents are marked up by humans or machines using HTML and pushed into the ether of the web where they are subsequently consumed by humans and robots. Initially the &lt;a href="http://www.w3.org/TR/html4/"&gt;HTML specification&lt;/a&gt; worked well for creators and consumers alike and &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;, the most ubiquitous search service, grew out of the ability to parse and intelligently index HTML content. Google did this so well the company name became a verb synonymous with discovering things via the internet. Fait accompli you might think. &lt;/p&gt;

&lt;h3&gt;Innovation&lt;/h3&gt;
&lt;p&gt;Google produced a product that killed others, but with the emergence of &lt;a href="http://oreilly.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;Web 2.0&lt;/a&gt; (a much maligned term if ever there was one) Google's standard search engine is beginning to look behind the times for a number of reasons. Content is being generated more quickly and more frequently. Services like Twitter are quicker to &lt;a href="http://www.telegraph.co.uk/scienceandtechnology/technology/twitter/4269765/New-York-plane-crash-Twitter-breaks-the-news-again.html"&gt;return results in nearly real-time&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/API"&gt;APIs&lt;/a&gt; are allowing developers in userland to create &lt;a href="http://findth.at/"&gt;custom views&lt;/a&gt; and &lt;a href="http://searchmashup.com/"&gt;mashups&lt;/a&gt; of disparate sets of data.&lt;/a&gt; 

&lt;h3&gt;Huge effort for low return&lt;/h3&gt;
&lt;p&gt;Of course Google continues to innovate but in using &lt;a href="http://www.google.com/squared"&gt;Google Squared&lt;/a&gt; I couldn't help feeling that a massive amount of human and computational effort had been extended on my search of &lt;a href="http://www.google.com/squared/search?q=british+beer"&gt;British Beer&lt;/a&gt;.  I can only imagine the data harvesting and algorithms that are going on behind the scenes to give me three results. Granted of course that &lt;a href="http://www.google.com/squared"&gt;Google Squared&lt;/a&gt; is still a labs product.&lt;/p&gt;

&lt;p&gt;The same is true of Wolfram which is &lt;a href="http://www.wolframalpha.com/about.html"&gt;attempting to make search computational&lt;/a&gt;. In terms of aggregating disparate pieces of information it must be reliant on some hefty algorithms and a lot of processing power. &lt;/p&gt;


&lt;h3&gt;More complex than it should be&lt;/h3&gt;
&lt;p&gt;Indexing, storing and processing data seems more complex than it should be. &lt;a href="http://developer.yahoo.com/yql/"&gt;Yahoo's YQL&lt;/a&gt; seems to turn the data harvesting and algorithm heavy model on its head. By making data available through &lt;a href="http://datatables.org/"&gt;Open Tables&lt;/a&gt; there is a &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;RESTful&lt;/a&gt; route to the primary source data that is available to anyone. Essentially the World Wide Web becomes its own database. The web exists as the data and a giant &lt;a href="http://en.wikipedia.org/wiki/Relational_database"&gt;relational database&lt;/a&gt; with the ability to create meta views of that data. There is no need for it to exist in multiple instances in search engine datacentres. I am not saying that traditional search engines are going to go away, but that from a design pattern perspective the Open Tables model seems a cleaner and more efficient way of retrieving data from the web.&lt;/p&gt;

&lt;p&gt;In addition to APIs and YQL (which is essentially an attempt to standardise an interface to APIs) is a long-standing move to add more semantic meaning to HTML. &lt;a href="http://microformats.org/"&gt;Microformats&lt;/a&gt; have emerged as a genuine means of adding additional semantic meaning to HTML and allowing third party services access to data in a standardised, structured way. Microformats exist for &lt;a href="http://microformats.org/wiki/hcard"&gt;contact information&lt;/a&gt;, &lt;a href="http://microformats.org/wiki/hcalendar"&gt;calendars&lt;/a&gt; and &lt;a href="http://microformats.org/wiki/hreview"&gt;reviews&lt;/a&gt;. This allows parsers to access the primary source of data and use it however they like.&lt;/p&gt; I even produced &lt;a href="http://shapeshed.com/examples/hcardme/"&gt;an example&lt;/a&gt; of how Microformats can return contact details from a URL. No need for a third party search engine - instant access to the primary data source in real time. &lt;/p&gt;

&lt;h3&gt;Standards needed&lt;/h3&gt;
&lt;p&gt;What struck me about Google Squared in particular was that pretty much everything it was trying to do could be solved by giving HTML more semantic meaning. Of course defining this is a massive task but in &lt;a href="http://www.mckinsey.com/"&gt;a previous job&lt;/a&gt; as an Information Professional, I learned that for good reason there are international standards for indexing books, journals and data that knowledge professionals rely on. In my opinion the web is still badly lacking these standards and frameworks for giving content semantic meaning.&lt;/p&gt; 

&lt;p&gt;Google's &lt;a href="http://www.google.com/corporate/"&gt;goal&lt;/a&gt; is "to organize the world's information and make it universally accessible and useful". The goal of the World Wide Web in general should now be to make world's data universally accessible. The means for &lt;a href="http://oauth.net/"&gt;controlling&lt;/a&gt; &lt;a href="http://openid.net/"&gt;access&lt;/a&gt; to open data are coming along nicely and as a community I feel we should redouble our efforts to make sure data is open to all. YQL and Microformats show that standardising APIs and Semantic HTML respectively can be done at a meta level. For me harvesting massive amounts of data in the search space is not the way to go. Instead we should work towards creating a standards based approach to open data on the web.&lt;/p&gt;

 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=fpWWIF4L4BU:PIJrICVBnm4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=fpWWIF4L4BU:PIJrICVBnm4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=fpWWIF4L4BU:PIJrICVBnm4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=fpWWIF4L4BU:PIJrICVBnm4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=fpWWIF4L4BU:PIJrICVBnm4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=fpWWIF4L4BU:PIJrICVBnm4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=fpWWIF4L4BU:PIJrICVBnm4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/fpWWIF4L4BU" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/the_continued_need_for_semantic_html/</feedburner:origLink></entry>

    <entry>
      <title>Techno kittens love HTML5</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/KcTHPN_mcic/" />
      <id>tag:shapeshed.com,2009:journal/1.2353</id>
      <published>2009-06-01T16:15:34Z</published>
      <updated>2009-06-01T16:20:35Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="HTML 5" scheme="http://shapeshed.com/journal/tag/html_5/" label="HTML 5" />
      <content type="html">
        The kittens are jumping up and down. Why? HTML 5 offers an open set of standards for drawing animations and complex user interfaces. &lt;p&gt;&lt;a href="http://shapeshed.com/examples/techno-kittens/"&gt;View the demo page&lt;/a&gt; or &lt;a href="http://github.com/shapeshed/HTML-5/tree/master"&gt;download the source code&lt;/a&gt;&lt;/p&gt;

&lt;img src="http://shapeshed.com/images/uploads/techno-kittens.jpg" alt="Techno Kittens love HTML 5" /&gt;


&lt;h3&gt;Browser Support&lt;/h3&gt;
&lt;p&gt;The latest versions of Safari, Firefox, Opera, or Chrome all support the canvas element. Internet Explorer doesn't. If you are reading this using Internet Explorer you are probably in the wrong place anyway. &lt;/p&gt;

&lt;h3&gt;Why is this good?&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;There are no third-party plugins like &lt;a href="http://get.adobe.com/flashplayer/"&gt;Flash&lt;/a&gt; or &lt;a href="http://silverlight.net/"&gt;Silverlight needed.&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;It is made using &lt;a href="http://en.wikipedia.org/wiki/Open_standard"&gt;open standards&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;You can view the source&lt;/li&gt;
	&lt;li&gt;Because it uses open standards machines and people will be able to easily read and understand it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=xIxDJof7xxQ"&gt;Ian Hickson's talk on HTML 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/"&gt;HTML 5 Draft Standard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en/Canvas_tutorial"&gt;Mozilla Developer Center - Canvas Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Canvas_(HTML_element)"&gt;Canvas (HTML element) - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=KcTHPN_mcic:qFMcMguaZ5o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=KcTHPN_mcic:qFMcMguaZ5o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=KcTHPN_mcic:qFMcMguaZ5o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=KcTHPN_mcic:qFMcMguaZ5o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=KcTHPN_mcic:qFMcMguaZ5o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=KcTHPN_mcic:qFMcMguaZ5o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=KcTHPN_mcic:qFMcMguaZ5o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/KcTHPN_mcic" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/techno_kittens_love_html5/</feedburner:origLink></entry>

    <entry>
      <title>ExpressionEngine permissions shell script</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/TDs5AGopkiI/" />
      <id>tag:shapeshed.com,2009:journal/1.2352</id>
      <published>2009-05-03T10:33:54Z</published>
      <updated>2009-05-03T10:43:55Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="ExpressionEngine" scheme="http://shapeshed.com/journal/tag/expressionengine/" label="ExpressionEngine" />
      <category term="Linux" scheme="http://shapeshed.com/journal/tag/linux/" label="Linux" />
      <category term="OSX" scheme="http://shapeshed.com/journal/tag/osx/" label="OSX" />
      <content type="html">
        Every ExpressionEngine install requires that a number of permissions are set on folders and files. Here's a shell script to do the hard work for you. &lt;h3&gt;Download&lt;/h3&gt;

&lt;p&gt;If you are comfortable using shell scripts you can &lt;a href="http://shapeshed.com/downloads/exp_permissions.sh"&gt;download the file here&lt;/a&gt;. The file sets all the necessary permissions on a default installation of ExpressionEngine and allows you to specify a custom system folder name if you have set one. If you are not comfortable using shell scripts I've written a &lt;a href="http://shapeshed.com/journal/using_custom_shell_scripts_on_osx_or_linux/"&gt;how to article for OSX and Linux&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Script usage&lt;/h3&gt;

&lt;p&gt;To use the script change directory to the root of your ExpressionEngine install and run:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;exp_permissions&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sh&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;You'll be asked for the system folder name. If you have changed this for any reason enter it here. If you have not changed it just hit return.&lt;/p&gt;

&lt;p&gt;If all goes well you won't see anything. If for any reason the script cannot find the folders it will tell you.&lt;/p&gt; 

&lt;h3&gt;What it does&lt;/h3&gt;

&lt;p&gt;The script sets file permssions as detailed on the &lt;a href="http://expressionengine.com/docs/installation/installation.html"&gt;ExpressionEngine installation page.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;License&lt;/h3&gt;

&lt;p&gt;The script is licensed under an &lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License, Version 2.0&lt;/a&gt;.&lt;/p&gt; 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=TDs5AGopkiI:Zlq_E-QYIAc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=TDs5AGopkiI:Zlq_E-QYIAc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=TDs5AGopkiI:Zlq_E-QYIAc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=TDs5AGopkiI:Zlq_E-QYIAc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=TDs5AGopkiI:Zlq_E-QYIAc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=TDs5AGopkiI:Zlq_E-QYIAc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=TDs5AGopkiI:Zlq_E-QYIAc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/TDs5AGopkiI" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/expressionengine_permissions_shell_script/</feedburner:origLink></entry>

    <entry>
      <title>Using custom shell scripts on OSX or Linux</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/Ujz1TUShbLc/" />
      <id>tag:shapeshed.com,2009:journal/1.2351</id>
      <published>2009-05-03T10:19:32Z</published>
      <updated>2009-05-03T10:25:33Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="Linux" scheme="http://shapeshed.com/journal/tag/linux/" label="Linux" />
      <category term="OSX" scheme="http://shapeshed.com/journal/tag/osx/" label="OSX" />
      <content type="html">
        Custom shell scripts allow you to do pretty much anything. Here's a short tutorial on how to set up either OSX or Linux so you can use custom shell scripts on your system.
&lt;h3&gt;Configuring your environment&lt;/h3&gt;

&lt;p&gt;I'm assuming here that you are on a POSIX compliant system (namely OSX or Linux). First let's make sure we are in our home directory. On OSX or Linux in a terminal run: &lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;cd&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Standard practice is to keep user shell scripts in a bin folder in your home directory. You may or may not have this folder depending on your operating system. If it doesn't exist create it:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;mkdir&amp;nbsp;bin&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;So on OSX the folder path will be /Users/george/bin. On Linux it will be /home/george/bin. Remember 'george' will be whatever your username is.&lt;/p&gt; 


&lt;h3&gt;Ensuring bin is in your path&lt;/h3&gt;

&lt;p&gt;To be able to use the shell scripts from our bin folder we need to make sure that this folder is in the $PATH variable. The shell looks in this folder when you issue a command.&lt;/p&gt; 

&lt;p&gt;If you are comfortable with vi use these commands. If you are not comfortable with vi you can use &lt;a href="http://www.tech-recipes.com/rx/2618/os_x_easily_edit_hidden_configuration_files_with_textedit/"&gt;textedit&lt;/a&gt; in OSX or gedit on Linux.

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;cd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;#change&amp;nbsp;to&amp;nbsp;home&amp;nbsp;directory&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vi&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bash_profile&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt; 

&lt;p&gt;Add the following line to this file&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;PATH&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$PATH&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$HOME&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bin&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;For the changes to take effect you need to reload your profile. I'm assuming you are still in your home directory.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;.&amp;nbsp;./.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bash_profile&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;Adding scripts&lt;/h3&gt;

&lt;p&gt;Now we can just drop shell scripts into the bin folder. To use them we must make sure they are executable:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;chmod&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;+&lt;/span&gt;&lt;span style="color: #0000BB"&gt;x&amp;nbsp;yourshellscript&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sh&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;That's it. Now you can call your shell script from the command line using&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;yourshellscript&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sh&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;


&lt;h3&gt;Related reading&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Shell_script"&gt;Shell Script - Wikipedia&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://developer.apple.com/documentation/opensource/Conceptual/ShellScripting/index.html"&gt;Shell Scripting Primer&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.tech-recipes.com/rx/2621/os_x_change_path_environment_variable/"&gt;OS X: Change your PATH environment variable&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.everyjoe.com/newlinuxuser/howto-add-a-directory-to-my-path-statementvariable/"&gt;HOWTO: Add a Directory to my Path Statement/Variable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Ujz1TUShbLc:XrYcRge1kVQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Ujz1TUShbLc:XrYcRge1kVQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Ujz1TUShbLc:XrYcRge1kVQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Ujz1TUShbLc:XrYcRge1kVQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Ujz1TUShbLc:XrYcRge1kVQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Ujz1TUShbLc:XrYcRge1kVQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Ujz1TUShbLc:XrYcRge1kVQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/Ujz1TUShbLc" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/using_custom_shell_scripts_on_osx_or_linux/</feedburner:origLink></entry>

    <entry>
      <title>Ubuntu 9.04 Jaunty Jackalope Released</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/Rhv_PGXEFdo/" />
      <id>tag:shapeshed.com,2009:journal/1.2350</id>
      <published>2009-04-23T13:04:10Z</published>
      <updated>2009-04-23T13:07:11Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="Linux" scheme="http://shapeshed.com/journal/tag/linux/" label="Linux" />
      <category term="Ubuntu" scheme="http://shapeshed.com/journal/tag/ubuntu/" label="Ubuntu" />
      <content type="html">
        The latest release of Ubuntu is now available, featuring faster boot times, a growl-style notification system and updates to bundled software. &lt;h3&gt;Desktop Linux + Usability&lt;/h3&gt;

&lt;p&gt;A fair critism of Linux Desktops is that they are not particularly usable. In short they fail the Mum test - it is unlikely your Mum could turn on a Linux machine and start using it. &lt;/p&gt;

&lt;p&gt;The &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu project&lt;/a&gt; recognises that historically Desktop Linux has not been particularly usable and has been working hard to build on UI improvements. Bundled with the 9.04 release is a new desktop notification system, specific to Ubuntu. The design and positioning of notices suggest that the idea is heavily borrowed from Growl notifications in OSX but the implementation is neat. In my experience it works really well for Twitter, music and mail notifications. This is just the kind of UI improvement that will invaluable to non-technical users.&lt;/p&gt;

&lt;img src="http://shapeshed.com/images/uploads/notification.jpg" alt="New notifications in Ubuntu" /&gt;

&lt;h3&gt;Free Software&lt;/h3&gt;

&lt;p&gt;Ubuntu comes with a wealth of free software that makes it a real contender for cash-stapped students, businesses and individuals. You get the latest version of &lt;a href="http://www.openoffice.org/"&gt;Open Office&lt;/a&gt;, a mail client, Instant Messaging and much more installed by default. With a bit of training for users I don't see why businesses (especially small businesses) would not consider this a viable option. Furthermore a vast array of additional software is available via the very easy to use Package Manager.&lt;/p&gt;

&lt;h3&gt;Access for all&lt;/h3&gt;

&lt;p&gt;The Ubuntu project has stated that it wants to change the status quo in computing. They want to open up computing and the internet to everyone, regardless of wealth or education. I really applaud this ethos and feel that web designers sitting behind £2000 Apple machines often forget that there is a growing digital divide in society and the world in general. Yes the Ubuntu project is utopian in its aspirations but I do agree that the internet should be available to all regardless of wealth or geographical location.&lt;/p&gt;

&lt;h3&gt;Eye candy anyone?&lt;/h3&gt;

&lt;p&gt;Not specific to Ubuntu (it is available on most Linux desktops) is a dazzling and sometimes overwhelming array of Desktop effects via &lt;a href="http://www.compiz.org/"&gt;Compiz&lt;/a&gt;. &lt;a href="http://www.apple.com/"&gt;Apple&lt;/a&gt; has long led the market in terms of visual appearance but Linux is catching up and I'd argue pushing the envelope. Here's a quick video of some of what's on offer:&lt;/p&gt;

&lt;object width="640" height="363"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4277921&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4277921&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="363"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/4277921"&gt;Ubuntu 9.04&lt;/a&gt; from &lt;a href="http://vimeo.com/user472031"&gt;George Ornbo&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.

&lt;h3&gt;Congratuations&lt;/h3&gt;

&lt;p&gt;So congratulations to Canonical for getting another release out of the door and if you haven't given Ubuntu a go yet &lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;why not try out the new release?&lt;/a&gt;&lt;/p&gt; 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Rhv_PGXEFdo:NTAzRnir5iQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Rhv_PGXEFdo:NTAzRnir5iQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Rhv_PGXEFdo:NTAzRnir5iQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Rhv_PGXEFdo:NTAzRnir5iQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Rhv_PGXEFdo:NTAzRnir5iQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Rhv_PGXEFdo:NTAzRnir5iQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Rhv_PGXEFdo:NTAzRnir5iQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/Rhv_PGXEFdo" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/ubuntu_9.04_jaunty_jackalope_released/</feedburner:origLink></entry>

    <entry>
      <title>Testing with IE6, IE7 and IE8 on VirtualBox</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/SpjVGCElVlg/" />
      <id>tag:shapeshed.com,2009:journal/1.2349</id>
      <published>2009-04-14T13:37:58Z</published>
      <updated>2009-04-14T13:41:59Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="Apple" scheme="http://shapeshed.com/journal/tag/apple/" label="Apple" />
      <category term="Browsers" scheme="http://shapeshed.com/journal/tag/browsers/" label="Browsers" />
      <category term="Linux" scheme="http://shapeshed.com/journal/tag/linux/" label="Linux" />
      <category term="Ubuntu" scheme="http://shapeshed.com/journal/tag/ubuntu/" label="Ubuntu" />
      <content type="html">
        I've recently moved from using &lt;a href="http://www.parallels.com/uk/"&gt;Parallels&lt;/a&gt; for browser testing to Sun's Open Source &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;. Here's a walkthrough on how to get a browser testing suite for free on OSX or Ubuntu. 


&lt;h3&gt;Microsoft's Virtual Hard Drives&lt;/h3&gt;

&lt;p&gt;Microsoft make a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&amp;amp;displaylang=en"&gt;series of downloads available&lt;/a&gt; for web developers to ensure browser compatibility. Currently you can download IE6-8 on XP and IE7 on Vista. The good news is that they are also free so there is no need to buy a Windows license if all you want to do is browser test. The images generally expire at the end of each quarter but it is fairly trivial to download a new version. &lt;/p&gt;

&lt;h3&gt;Extracting the .exe&lt;/h3&gt;

&lt;p&gt;The downloads are available as .exe files so you will need to extract them first. On OSX I use &lt;a href="http://my.smithmicro.com/mac/stuffit/index.html"&gt;Stuffit&lt;/a&gt; which extracts .exe files on the free version. &lt;a href="http://blog.affirmix.com/2009/04/01/ie6-ie7-and-ie8-on-mac-os-x-step-by-step/"&gt;Andrew Odri&lt;/a&gt; also has a write up on this and he recommends using &lt;a href="http://wakaba.c3.cx/s/apps/unarchiver.html"&gt;The Unarchiver&lt;/a&gt; although this didn't work for me.&lt;/p&gt;

&lt;p&gt;On Ubuntu you can use Wine:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;apt&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;get&amp;nbsp;install&amp;nbsp;wine&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Once installed you can use Wine to extract the exe:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;wine&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;path&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;to&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;yourexe&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;exe&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;Get VirtualBox&lt;/h3&gt;

&lt;p&gt;Next download and install VirtualBox. On OSX you can &lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;download a .dmg file&lt;/a&gt;. On Ubuntu the following will install it for you:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;apt&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;get&amp;nbsp;install&amp;nbsp;virtualbox&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;Fixing Microsoft's duplicate identifiers&lt;/h3&gt;

&lt;p&gt;The Microsoft images all &lt;a href="http://forums.virtualbox.org/viewtopic.php?f=7&amp;amp;t=14976"&gt;share the same Hard Disk Identifier&lt;/a&gt; which means that VirtualBox will only let you add one of the hard drives to the Media Manager. So we need to fix that. Hat tip to &lt;a href="http://blog.affirmix.com/2009/04/01/ie6-ie7-and-ie8-on-mac-os-x-step-by-step/"&gt;Andrew Odri&lt;/a&gt; for documenting this.&lt;/p&gt;

&lt;p&gt;For OSX &lt;a href="http://www.kju-app.org/"&gt;Download Q&lt;/a&gt; and then for each vhds we need to convert it to a vdi. This will allow us to test in parallel. On OSX run:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;Applications&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;Q&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;app&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;Contents&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;MacOS&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;qemu&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;img&amp;nbsp;convert&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;O&amp;nbsp;raw&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;f&amp;nbsp;vpc&amp;nbsp;yourVHD&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vhd&amp;nbsp;RAWimage&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;raw&lt;br /&gt;VBoxManage&amp;nbsp;convertdd&amp;nbsp;RAWImage&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;raw&amp;nbsp;NewVDIImage&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vdi&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;For Ubuntu get QEMU:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;apt&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;get&amp;nbsp;install&amp;nbsp;qemu&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Once installed on Ubuntu you can then convert the .vhd to a .vdi&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;qemu&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;img&amp;nbsp;convert&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;O&amp;nbsp;raw&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;f&amp;nbsp;vpc&amp;nbsp;yourVHD&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vhd&amp;nbsp;RAWimage&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;raw&lt;br /&gt;VBoxManage&amp;nbsp;convertdd&amp;nbsp;RAWImage&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;raw&amp;nbsp;NewVDIImage&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vdi&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;Fixing drivers&lt;/h3&gt;

&lt;p&gt;Once you have set up your Virtual Machine and booted you will see a blue screen of death. This is because we still need to install some drivers. When booting hold down F8 and boot into Safe Mode with Command Prompt. Cancel any prompts that come up and at the DOS prompt enter&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;cd&amp;nbsp;\WINDOWS\system32\drivers&lt;br /&gt;ren&amp;nbsp;processr&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sys&amp;nbsp;processr&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;old&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Restart the machine and then in the VirtualBox menu go to Devices &gt; Install Guest Additions. Follow the prompts and install the additions. On Ubuntu I found I had to manually download the iso from the link supplied, then mount it in the machine settings before booting.  Reboot when you are done. &lt;/p&gt;

&lt;p&gt;Once rebooted at the DOS prompt type&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;D&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;/span&gt;&lt;span style="color: #0000BB"&gt;\VBoxWindowsAdditions&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;x86&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;exe&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;extract&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;D&lt;/span&gt;&lt;span style="color: #007700"&gt;=&lt;/span&gt;&lt;span style="color: #0000BB"&gt;C&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;/span&gt;&lt;span style="color: #0000BB"&gt;\Drivers&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;This will extract the VirtualBox drivers&lt;/p&gt; 

&lt;p&gt;Then within Windows do&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start &gt; Administrative Tools &gt; Computer Management&lt;/li&gt;
&lt;li&gt;Select Device Manager.&lt;/li&gt;
&lt;li&gt;Select Batteries, Unknown Device -&gt; Disable&lt;/li&gt;
&lt;li&gt;Select Network Adapters, Ethernet Controller -&gt; Update Driver&lt;/li&gt;
&lt;li&gt;Select Yes, now and every time, click Next&lt;/li&gt;
&lt;li&gt;Select Install from a list or specific location, click Next&lt;/li&gt;
&lt;li&gt;Enter location "C:\Drivers\x86\Network\AMD"&lt;/li&gt;
&lt;li&gt;Click Finish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All done - repeat this method on the other vhds and you will then have a full IE6-8 testing suite that you can run side-by-side if you wish.&lt;/p&gt;

&lt;h3&gt;Credits&lt;/h3&gt;
&lt;p&gt;This article draws on knowledge gained from the following posts and I'm very grateful to the authors&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://primeval-soup.blogspot.com/2009/02/ie8-in-ubuntu-intrepid-with-virtual-box.html"&gt;IE8 in Ubuntu Intrepid with VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zytzagoo.net/blog/2009/03/20/howto-running-ie6-ie7-and-ie8-on-ubuntu-intrepid-810-using-virtualbox/"&gt;HOWTO: Running IE6, IE7 and IE8 On Ubuntu Intrepid (8.10) Using VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.affirmix.com/2009/04/01/ie6-ie7-and-ie8-on-mac-os-x-step-by-step/"&gt;IE6, IE7 And IE8 On Mac OS X Step By Step&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mozmonkey.com/2008/vpc-ie6-ie7-ie8-on-mac-os-x/"&gt;Running IE6, IE7 and IE8 on your Mac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;





 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=SpjVGCElVlg:d0LA47W65oQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=SpjVGCElVlg:d0LA47W65oQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=SpjVGCElVlg:d0LA47W65oQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=SpjVGCElVlg:d0LA47W65oQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=SpjVGCElVlg:d0LA47W65oQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=SpjVGCElVlg:d0LA47W65oQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=SpjVGCElVlg:d0LA47W65oQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/SpjVGCElVlg" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/testing_with_ie6_ie7_and_ie8_on_virtualbox/</feedburner:origLink></entry>

    <entry>
      <title>Chroot SFTP users on Ubuntu Intrepid</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/Za65jfoGZRE/" />
      <id>tag:shapeshed.com,2009:journal/1.2348</id>
      <published>2009-03-31T15:16:34Z</published>
      <updated>2009-04-01T13:29:35Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="Linux" scheme="http://shapeshed.com/journal/tag/linux/" label="Linux" />
      <category term="Ubuntu" scheme="http://shapeshed.com/journal/tag/ubuntu/" label="Ubuntu" />
      <content type="html">
        Newer versions of OpenSSH come with the ChrootDirectory directive that makes it easy to jail SFTP users to a directory. I've written about &lt;a href="http://shapeshed.com/journal/adding_sftp_users_with_a_limited_shell_in_centos_5.2/"&gt;giving users a limited shell with older versions of OpenSSH&lt;/a&gt; but if you can run OpenSSH 4.9 or greater I recommend using this method. &lt;h3&gt;Usual warning&lt;/h3&gt;

&lt;p&gt;This article is written for Ubuntu Intrepid 8.10 and should work for Linux distributions running OpenSSH 4.9 or greater. No responsibility is taken for data loss. You know the score - take backups and try it out of a test server if possible. &lt;/p&gt;

&lt;h3&gt;Create an sftp group&lt;/h3&gt;

&lt;p&gt;First we need to create an sftp group. This group will hold users who we want to chroot. &lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;groupadd&amp;nbsp;sftp&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;This group is used in the ssh config file so in future we can easily add more users if we want to.&lt;/p&gt; 

&lt;h3&gt;Create a user&lt;/h3&gt;

&lt;p&gt;Now we create a user that we want to have sftp access only. This user won't be able to login on a standard ssh login but will be able to login using sftp to transfer files. Replace user with whatever you wish. Set the home directory (in this case /var/www/vhosts/theirsite.com) to the folder you want the user to have access to. &lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;useradd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;d&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;/var/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;www&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vhosts&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;theirsite&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;com&amp;nbsp;user&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Now set a password for the user:&lt;/p&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;passwd&amp;nbsp;user&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Change the user's primary group to the sftp group we just created&lt;/p&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;usermod&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;g&amp;nbsp;sftp&amp;nbsp;user&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Then we need to set the user's shell to /bin/false&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;usermod&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bin&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;false&amp;nbsp;user&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;Configuring OpenSSH&lt;/h3&gt;

&lt;p&gt;Now we need to configure OpenSSH.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;sudo&amp;nbsp;vi&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;etc&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ssh&lt;/span&gt;&lt;span style="color: #007700"&gt;/&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sshd_config&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Change the Subsystem:&lt;/p&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #FF8000"&gt;#Subsystem&amp;nbsp;sftp&amp;nbsp;/usr/lib/openssh/sftp-server&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;Subsystem&amp;nbsp;sftp&amp;nbsp;internal&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sftp&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;At the bottom of the file add&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;Match&amp;nbsp;group&amp;nbsp;sftp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X11Forwarding&amp;nbsp;no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ChrootDirectory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;%&lt;/span&gt;&lt;span style="color: #0000BB"&gt;h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AllowTcpForwarding&amp;nbsp;no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ForceCommand&amp;nbsp;internal&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sftp&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;h3&gt;Correct permissions&lt;/h3&gt;

&lt;p&gt;OpenSSH is sensitive to permissions so you need to make sure permissions are correct.&lt;/p&gt;

&lt;p&gt;My vhost layout is:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;theirsite&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;com&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;conf&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;logs&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;httpdocs&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;httpdocs&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;nbsp;private&lt;br /&gt;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;subdomains&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;The important thing here is that the folder theirsite.com must be owned by root and in the root group. Providing you want to allow write access everything else must be owned by the user and in the sftp group. You could of course set custom permissions on sub-folders as you wish.&lt;/p&gt; 

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #0000BB"&gt;chown&amp;nbsp;user&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sftp&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&lt;/span&gt;&lt;span style="color: #0000BB"&gt;R&amp;nbsp;theirsite&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;com&lt;br /&gt;chown&amp;nbsp;root&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;/span&gt;&lt;span style="color: #0000BB"&gt;root&amp;nbsp;theirsite&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;com&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;In order for jailing to work correctly every folder above the theirsite.com directory must also be owned by root and in the root group. In this case this means the following folders. &lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;
&lt;span style="color: #007700"&gt;/&lt;br /&gt;-&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;www&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vhosts&amp;nbsp;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;If these folders are not owned by root and in the root group the user login will fail. &lt;/p&gt;

&lt;p&gt;So that's it the user should be able to login using sftp and you should have an extensible chrooted SFTP system.&lt;/p&gt; 
 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Za65jfoGZRE:3J_TCLuRaOc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Za65jfoGZRE:3J_TCLuRaOc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Za65jfoGZRE:3J_TCLuRaOc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Za65jfoGZRE:3J_TCLuRaOc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Za65jfoGZRE:3J_TCLuRaOc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=Za65jfoGZRE:3J_TCLuRaOc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=Za65jfoGZRE:3J_TCLuRaOc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/Za65jfoGZRE" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/chroot_sftp_users_on_ubuntu_intrepid/</feedburner:origLink></entry>

    <entry>
      <title>Magento and ePDQ - Part 2</title>
      <link rel="alternate" type="text/html" href="http://feeds.shapeshed.com/~r/shapeshed/~3/jef4G0KFEww/" />
      <id>tag:shapeshed.com,2009:journal/1.2347</id>
      <published>2009-03-24T12:43:08Z</published>
      <updated>2009-04-07T07:43:09Z</updated>
      <author>
            <name>George Ornbo</name>
            <email>no-reply@shapeshed.com</email>
                  </author>

      <category term="ePDQ" scheme="http://shapeshed.com/journal/tag/epdq/" label="ePDQ" />
      <category term="Magento" scheme="http://shapeshed.com/journal/tag/magento/" label="Magento" />
      <content type="html">
        Having successfully set up a Magento install I have now moved onto integrating ePDQ with Magento. I discovered there is no off the shelf gateway available for ePDQ so I had to write my own. &lt;h3&gt;No ePDQ module available&lt;/h3&gt;

&lt;p&gt;After the initial excitement that an &lt;a href="http://www.magentocommerce.com/extension/530/barclays-epdq/"&gt;ePDQ module&lt;/a&gt; was available for Magento this turned out not to be true. The module stopped development a couple of versions ago so is no longer compatible with the latest version of Magento.&lt;/p&gt; 

&lt;h3&gt;Steep learning curve&lt;/h3&gt;

&lt;p&gt;Developing for Magento is not straightforward. I had thought that a working knowledge of the &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; would stand me in good stead but the Magento developers have extended this framework to bring some excellent features into play. These are not really documented anywhere however so I had to pick my way through a fair bit of source code to understand how Namespacing and the configuration setup worked for modules.&lt;/p&gt;

&lt;p&gt;I used the Wiki article on creating a &lt;a href="http://www.magentocommerce.com/wiki/custom_module_with_custom_database_table"&gt;Custom Module with Custom Database Table&lt;/a&gt; and also used the excellent Module Creator available on that page. This set up a bare bones module and also helped me to understand how Magento works.&lt;/p&gt;

&lt;h3&gt;Hacking an ePDQ module&lt;/h3&gt;

&lt;p&gt;I worked through the PayPal module and within a couple of days understood how Magento manages code and also front end templates. I have to confess that this was a bit painful at times. There isn't a great deal of documentation available other than the &lt;a href="http://docs.magentocommerce.com/"&gt;phpDocs&lt;/a&gt;. Coming from a product like &lt;a href="http://expressionengine.com/"&gt;ExpressionEngine&lt;/a&gt; the forums are much less busy so I found a couple of questions I had went unanswered.&lt;/p&gt;

&lt;h3&gt;ePDQ support&lt;/h3&gt;

&lt;p&gt;On the ePDQ side the supporting documents are pretty good, although the support model relies on speaking to a developer at ePDQ. I found the support excellent once they did respond to my enquiries, but that it did take a little time. I wonder why they don't have forums where users can help each other out? I was incorrect in part one of this series that ePDQ doesn't have a sandbox available. Once I requested one this was set up pretty quickly.&lt;/p&gt;

&lt;h3&gt;A working module&lt;/h3&gt;

&lt;p&gt;So now I have a working module that I've shown to the client and that they are happy with. With a bit of tarting up I might even package it up as a product.&lt;/p&gt;

&lt;h3&gt;Impressed with Magento&lt;/h3&gt;

&lt;p&gt;Now that I've got my head around the architecture and namespacing (which is an great extension to PHP's native capabilities) I'm very impressed with Magento. For an Open Source project it is highly customisable and extendible. I'm now moving onto working with the client to define a structure for their products. I'll post about this process shortly.&lt;/p&gt;

&lt;p&gt;My impressions so far are that even a relatively experienced PHP coder will need to take a day or so to become familiar with the architecture and setup of Magento. Once the learning curve is over it seems a very powerful piece of kit.&lt;/p&gt; 
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=jef4G0KFEww:G-YsU2KK5N8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=jef4G0KFEww:G-YsU2KK5N8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=jef4G0KFEww:G-YsU2KK5N8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=jef4G0KFEww:G-YsU2KK5N8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=jef4G0KFEww:G-YsU2KK5N8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.shapeshed.com/~ff/shapeshed?a=jef4G0KFEww:G-YsU2KK5N8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/shapeshed?i=jef4G0KFEww:G-YsU2KK5N8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/shapeshed/~4/jef4G0KFEww" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://shapeshed.com/journal/megento_and_epdq_part_2/</feedburner:origLink></entry>

</feed>
