<?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>chemicaloliver</title>
	<atom:link href="http://chemicaloliver.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://chemicaloliver.net</link>
	<description>experimentation, criticism and geekyness</description>
	<lastBuildDate>Sun, 05 Sep 2010 22:10:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>An MQTT/Websocket based Thermometer using the html5 meter tag</title>
		<link>http://chemicaloliver.net/internet/mqtt-and-websocket-thermometer-using-the-html5-meter-tag/</link>
		<comments>http://chemicaloliver.net/internet/mqtt-and-websocket-thermometer-using-the-html5-meter-tag/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 20:10:11 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=699</guid>
		<description><![CDATA[In this post I will show the latest in a line of mini examples using html5 and websockets &#8211; an example of how future home monitoring dashboards should be created. At present they commonly use a combination of flash dials and JavaScript canvasy bits and pieces to create representations of data obtained via ajax. This has the inherent disadvantage [...]]]></description>
			<content:encoded><![CDATA[<p>In this post I will show the latest in a line of mini examples using html5 and websockets &#8211; an example of how future home monitoring dashboards should be created. At present they commonly use a combination of flash dials and JavaScript canvasy bits and pieces to create representations of data obtained via ajax. This has the inherent disadvantage that the browser polls the server rather than the server pushing values to the browser when available. Also there is very little in the way of accessibility as far as canvas and flash are concerned. In this post I will show a simple example of using data via a web socket and displays it via the meter.</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/09/themometer3.png"><img class="size-thumbnail wp-image-715 aligncenter" title="MQTT, websocket and html5 meter based thermometer" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/09/themometer3-300x155.png" alt="Screen shot of my MQTT, websocket and html5 meter based thermometer" width="300" height="155" /></a></p>
<p>While nothing demonstrated here is rocket science it&#8217;s something that&#8217;s not being focused on enough, developers seem to be getting lost in the shinyness of the canvas and forgetting the built in meter functionality along with it&#8217;s inbuilt accessibility. Having said all that it is only displayed by the more bleeding edge browsers and things may pick up as the html spec matures.</p>
<p><span id="more-699"></span></p>
<h2>HTML5 Meter</h2>
<p>Of the new features introduced by the HTML5 spec one that particularly sparks my interest is the meter tag, in the words of the <a href="http://dev.w3.org/html5/spec/Overview.html#the-meter-element">spec:</a></p>
<blockquote><p>&#8220;The meter element represents a scalar measurement within a known range, or a fractional value; for example disk usage, the relevance of a query result, or the fraction of a voting population to have selected a particular candidate.&#8221;</p></blockquote>
<p style="text-align: center;"><img class="size-full wp-image-701 aligncenter" title="HTML5 Meter" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/09/meter.png" alt="HTML5 Meter" width="119" height="23" /></p>
<p>However in simple terms (at present) it just produces a single bar meter with the length of the bar defined by the value attribute and maximum and minimum values defined thus, high and low values can also be defined which effect the colour of the bar depending on the value. They seem to have omited the possibility of dynamic content from their main definition. For browsers which don&#8217;t support the meter tag fall-back content can be inserted before the end tag.</p>
<pre class="brush: xml;">
&lt;meter min=&quot;0&quot; max=&quot;40&quot; value=&quot;20&quot; id=&quot;meter&quot;&gt;&lt;/meter&gt;
</pre>
<p>The purpose of explaining this here is, as will most html elements, the attributes can be manipulated with javascript so here I will use a number sent via a web socket to set the value attribute of the meter (and also update the text).</p>
<h2>Server Side</h2>
<p>On the server I will be using pywebsocket and it&#8217;s included web server to subscribe to an MQTT broker topic which contains temperature data. The code is identical to that used in my <a href="http://chemicaloliver.net/linux/a-simple-mqtt-to-websocket-bridge-using-mosquitto-and-pywebsocket/">previous example</a>. The data could however come from any source which provides numerical data.</p>
<h2>Client Side</h2>
<p>The code used here again is very similar to my previous examples except values are take from the body of the message and then given to the value attribute of the meter element (using jquery). I have added some CSS to make it look a bit nicer too:</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style type=&quot;text/css&quot;&gt;
fieldset {
width:400px;
}

#debug {
height:70px;
width: 400px;
display: block;
}

#msg {
width: 160px;
height:40px;
float:left;
padding:20px;
}

#meter2 {
float:left;
width: 160px;
height:40px;
padding:20px 20px 20px 10px;
}
meter {
padding:0 5px 0 5px;
width:110px;
}
&lt;/style&gt;
&lt;script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'&gt;&lt;/script&gt;
&lt;script&gt;
    $(document).ready(function() {
/* Define handler for websocket debug information*/
	function debug(str) {
		$(&quot;#debug_txt&quot;).html(&quot;&lt;p&gt;&quot;+str+&quot;&lt;/p&gt;&quot;);
		};
/* Create a websocket connection */
ws = new WebSocket(&quot;ws://localhost:8080/echo&quot;);

/* Define websocket handlers */
      ws.onmessage = function(evt) {
				//set the text value
				$(&quot;#temp&quot;).text(evt.data);
				//set the value of the meter
				$(&quot;#meter&quot;).attr(&quot;value&quot;, evt.data);
				};
      ws.onclose = function() {
				debug(&quot;socket closed&quot;);
				};
      ws.onopen = function() {
				debug(&quot;connected...&quot;);
				ws.send(&quot;Hello.\n&quot;);
   			};
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;fieldset&gt;&lt;legend&gt;Temperature Monitor&lt;/legend&gt;

            &lt;div id=&quot;meter2&quot;&gt;
		0&amp;deg;
			&lt;meter min=&quot;0&quot; max=&quot;40&quot; value=&quot;20&quot; high=&quot;90&quot; id=&quot;meter&quot;&gt;20&lt;/meter&gt;
		40&amp;deg;
	    &lt;/div&gt;

	    &lt;div id=&quot;msg&quot;&gt;The current temperature is &lt;span id=&quot;temp&quot;&gt;&lt;/span&gt;&amp;deg C&lt;/div&gt;

	&lt;/fieldset&gt;

	&lt;fieldset id=&quot;debug&quot;&gt;&lt;legend&gt;Debug:&lt;/legend&gt;&lt;div id=&quot;debug_txt&quot;&gt;&lt;/div&gt;&lt;/fieldset&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Moving On</h2>
<p>Hopefully in the future developers both of browsers and web applications will make use of the meter element rather than non standard solutions especially once the html5 spec is finalised and there is (hopefully) going to be proper CSS hooks available to create more beautiful meters.</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/internet/mqtt-and-websocket-thermometer-using-the-html5-meter-tag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A simple MQTT to Websocket Bridge using Mosquitto and pywebsocket</title>
		<link>http://chemicaloliver.net/linux/a-simple-mqtt-to-websocket-bridge-using-mosquitto-and-pywebsocket/</link>
		<comments>http://chemicaloliver.net/linux/a-simple-mqtt-to-websocket-bridge-using-mosquitto-and-pywebsocket/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 18:07:38 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[mqtt]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=659</guid>
		<description><![CDATA[UPDATE: I have now isolated the problems to just my particular configuration of apache, ubuntu and mod_python, the setup described here does work without using the standalone web server and using apache&#8230;just not on my main system! Following on from my experiences installing and testing pywebsocket I now move to the main reason why I bothered&#8230;to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE: I have now isolated the problems to just my particular configuration of apache, ubuntu and mod_python, the setup described here does work without using the standalone web server and using apache&#8230;just not on my main system!</strong></p>
<p>Following on from my experiences<a href="http://chemicaloliver.net/programming/getting-started-web-sockets-using-pywebsocket-mod_python-and-apache-in-ubuntu/"> installing and testing pywebsocket </a>I now move to the main reason why I bothered&#8230;to create a bridge to allow a user to view a web page showing a live stream of MQTT messages.</p>
<p>It should be noted that despite making the effort to setup pywebocket with Apache this time I will be using the standalone web/websocket server provided with pywebsocket (standalone.py) as I&#8217;m still trying to debug why this code doesn&#8217;t work with apache!</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/08/mqtt.png"><img class="size-medium wp-image-672 aligncenter" title="Screen shot of MQTT messages received via a websocket" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/08/mqtt-300x187.png" alt="Screen shot of MQTT messages received via a websocket" width="300" height="187" /></a></p>
<p><span id="more-659"></span></p>
<h2>Server Side Code</h2>
<p>On the server it is a simple matter of writing a websocket handler file in python to subscribe to an mqtt topic then stream the messages through the web socket. Here I use the python MQTT client library included with <a href="http://mosquitto.org/">mosquitto</a>.</p>
<p>I defined the callbacks required by mosquitto then pynotify,  <code>web_socket_transfer_data(request)</code> being where all the cool stuff happens, this function is called on connection to the web socket and then loops waiting for MQTT messages.</p>
<p>To use this code save it in your websocket handler folder was a file ending in _wsh.py then access it using the filename without the ending.</p>
<pre class="brush: python;">
import mosquitto
from mod_pywebsocket import msgutil

#create global variable for the request object
#(Holds details of ws connection)
g_request = &quot;&quot;

#define callbacks for mosquitto
def on_connect(rc):
	print &quot;connected&quot;

def on_message(msg):
	global g_request
	#send mqtt message to socket using the connection specified in g_request
	msgutil.send_message(g_request, &quot;&lt;strong&gt;&quot; + msg.topic + &quot;&lt;/strong&gt; - &quot; + msg.payload + &quot;&quot;)

def on_subscribe(mid, granted_qos):
	print &quot;subscribe&quot;

#define callback for pywebsocket

#allows for extra handshaking
def web_socket_do_extra_handshake(request):
	pass  # Always accept.

#main web socket function called on starting connection
def web_socket_transfer_data(request):
	global g_request
	g_request=request

	#create mosquitto object
	mqttc = mosquitto.Mosquitto(&quot;python_sub&quot;)

	#assign callbacks
	mqttc.on_message = on_message
	mqttc.on_connect = on_connect
	mqttc.on_subscribe = on_subscribe

	#connect to mqtt broker on localhost
	mqttc.connect(&quot;127.0.0.1&quot;, 1883, 60, True)

	#subscribe to topic &quot;test&quot;
	mqttc.subscribe(&quot;test&quot;, 2)

	#keep web socket connected while mqtt is connected
	while mqttc.loop() == 0:
		pass
</pre>
<p>As already mentioned this code doesn&#8217;t work when using pywebsocket with apache &#8211; to launch the included standalone webserver launch standalone.py with the following command (when in pywebsocket/src/mod_pywebsocket/):</p>
<pre class="brush: bash;">
python standalone.py -p 8080 -d &lt;web server root path&gt; -w &lt;websocket handler path&gt;
</pre>
<p>so in my case I use</p>
<pre class="brush: bash;">
python standalone.py -p 8080 -d /home/oliversmith/public_html/ -w /home/oliversmith/public_html/websock_handlers/
</pre>
<h2>Front End</h2>
<p>I used the same html file as detailed in my previous post, it&#8217;s simply a matter of browsing to the appropriate url not forgetting that it&#8217;s on port 8080 (or whatever port you define) to avoid conflicting with apache.</p>
<p>To send test MQTT messages I used the Java Client included in the <a href="http://www-01.ibm.com/support/docview.wss?rs=171&amp;uid=swg24006006&amp;loc=en_US&amp;cs=utf-8&amp;lang=en">ia92 package</a> provided by IBM as pictured.</p>
<p>If anyone knows why this doesn&#8217;t work with apache I would appreciate them telling me! At the moment I suspect it&#8217;s some privileges thing but I may be wrong</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/linux/a-simple-mqtt-to-websocket-bridge-using-mosquitto-and-pywebsocket/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Getting started web sockets using pywebsocket, mod_python and apache in Ubuntu</title>
		<link>http://chemicaloliver.net/internet/getting-started-web-sockets-using-pywebsocket-mod_python-and-apache-in-ubuntu/</link>
		<comments>http://chemicaloliver.net/internet/getting-started-web-sockets-using-pywebsocket-mod_python-and-apache-in-ubuntu/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 13:30:23 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mqtt]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[pywebsocket]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web sockets]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=645</guid>
		<description><![CDATA[Since my initial posts on websockets I&#8217;ve moved to pywebsocket, this is a python based project which provides a websocket extension to apache via mod_python. It can also run a standalone web server/websocket server if required. I made the move from node.js based systems as I was more comfortable developing using python and apache (even [...]]]></description>
			<content:encoded><![CDATA[<p>Since my initial posts on websockets I&#8217;ve moved to pywebsocket, this is a python based project which provides a websocket extension to apache via mod_python. It can also run a standalone web server/websocket server if required.</p>
<p>I made the move from node.js based systems as I was more comfortable developing using python and apache (even though I don&#8217;t know much python) and also most of the other systems I wish to integrate work well with python. I also feel that using a python extension to apache is a more sensible solution which is able to work on most webservers without major reconfiguration.</p>
<p><span id="more-645"></span></p>
<h2>Installation</h2>
<p>The install process for apache, mod_python and pywebsocket is quite trivial, I followed <a href="http://www.travisglines.com/web-coding/how-to-set-up-apache-to-serve-html5-websocket-applications-with-pywebsocket">instructions written by Travis Glines</a>, care should taken to make sure you use the correct apache config files, I didn&#8217;t and as a result spent ages wondering why it didn&#8217;t work!</p>
<p>A websocket compatible browser is also required (i.e. daily build of Firefox 4, Chrome/Chromium v 6.0.414+) earlier versions of chrome can be used however they use an older handshake protocol not enabled in pywebsocket by default, if you wish to use an older browser the you need to add:</p>
<pre class="brush: bash;">PythonOption mod_pywebsocket.allow_draft75 On</pre>
<p>to the appropriate apache conf file (the same one you added all the other stuff to!).</p>
<h2>Testing</h2>
<p>pywebsocket comes with an example in /src/example however these are aimed at the standalone mode, however the supplied handler echo_wsh.py can be used to test the apache version.</p>
<ol>
<li>Place echo_wsh.py in the websocket handler folder defined during installation.</li>
<li>Check it has permission to be executed</li>
<li>Use the following html/JS to connect to your new handler, it will connect then on clicking the window will send a message with string &#8220;Click!&#8221; down the websocket and display anything returned, in this case the sent message is echoed so you should see &#8220;Click!&#8221; appended to #msg on every click:
<pre class="brush: xml;">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'&gt;&lt;/script&gt;
&lt;script&gt;
    $(document).ready(function() {
			function debug(str) {
				$(&quot;#debug&quot;).append(&quot;&lt;p&gt;&quot;+str+&quot;&lt;/p&gt;&quot;);
				};
			ws = new WebSocket(&quot;ws://localhost/echo&quot;);

/* Define websocket handlers */
      ws.onmessage = function(evt) {
				$(&quot;#msg&quot;).append(&quot;&lt;p&gt;&quot;+evt.data+&quot;&lt;/p&gt;&quot;);
				};
      ws.onclose = function() {
				debug(&quot;socket closed&quot;);
				};
      ws.onopen = function() {
				debug(&quot;connected...&quot;);
				ws.send(&quot;Hello.\n&quot;);
   			};
			});
/* Define click handler */

	$(document).click(function () {
				ws.send(&quot;Click!&quot;);
			});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;debug&quot;&gt;&lt;/div&gt;
	&lt;div id=&quot;msg&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
</li>
</ol>
<p>Once that&#8217;s working you can go on to write your own handlers with the filenames being suffixed with _wsh.py eg: ws://localhost/foo will point to foo_wsh.py</p>
<h2>Moving On</h2>
<p>I&#8217;ve already got a few ideas in mind for what I&#8217;d like to implement using web sockets although at the moment debugging _wsh.py files is proving very tricky as there is no simple debugging available and I&#8217;m working blind with a minimal knowledge of python!</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/internet/getting-started-web-sockets-using-pywebsocket-mod_python-and-apache-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>First steps using Python and MQTT (using pynotify on Ubuntu)</title>
		<link>http://chemicaloliver.net/programming/first-steps-using-python-and-mqtt/</link>
		<comments>http://chemicaloliver.net/programming/first-steps-using-python-and-mqtt/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 21:43:21 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mqtt]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=633</guid>
		<description><![CDATA[Until recently developing MQTT clients in anything but perl was a little tricky due to a selection of badly documented, restrictively licensed client libraries (in PHP, Java and C). After a lot of hard work on the part of Roger Light (@ralight developer behind the OSS MQTT Broker Mosquitto) there is now another solution available. An MQTT pubsub client [...]]]></description>
			<content:encoded><![CDATA[<p>Until recently developing MQTT clients in anything but perl was a little tricky due to a selection of badly documented, restrictively licensed client libraries (in PHP, Java and C). After a lot of hard work on the part of Roger Light (@<a href="http://twitter.com/ralight">ralight</a> developer behind the OSS MQTT Broker <a href="http://mosquitto.org">Mosquitto</a>) there is now another solution available.</p>
<p>An MQTT pubsub client library written in C is now included along with a basic python wrapper. To me this greatly improves the situation as it now means it&#8217;s possible to quickly and simply develop real applications or web applications without wrestling with some of the more complex APIs traditionally used. After attempting to get to grips with the IBM ia92 java client library this was a breath of fresh air.</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/08/Screenshot-1.png"><img class="size-medium wp-image-635 aligncenter" title="Ubuntu notification triggered by an MQTT Message" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/08/Screenshot-1-300x159.png" alt="Ubuntu notification triggered by an MQTT Message" width="300" height="159" /></a></p>
<p>As an initial toe in the water exercise I looked at the included sub.py script (after compiling and installing <a href="http://mosquitto.org/">mosquitto 0.8.2</a>)  and wrote the code below so that all messages on the &#8220;test&#8221; topic display a notification in ubuntu. While only a minor coding exercise this is a potentially useful application when MQTT is being used for monitoring systems.</p>
<p><em>Note: Recently others have noticed problems with installation of the python libraries, if you have such problems check to ensure that the appropriate files are in /usr/local/lib/python2.6/dist-packages/</em></p>
<p><span id="more-633"></span></p>
<p>To enable me to display notifications simply I chose the built in <a href="https://wiki.ubuntu.com/NotificationDevelopmentGuidelines#examples">Ubuntu notifications system</a> which can be hooked into with pynotify. Notifications are displayed as shown above.</p>
<p>Control of mosquitto is a simple matter of defining callbacks for the required events, in this case just connection and receiving a message.</p>
<p>The code is shown below and is really self explanatory:</p>
<pre class="brush: python;">
#!/usr/bin/python

import pynotify
import mosquitto

#define what happens after connection
def on_connect(rc):
	print &quot;Connected&quot;

#On recipt of a message create a pynotification and show it
def on_message(msg):
	n = pynotify.Notification (msg.topic, msg.payload)
	n.show ()

#create a broker
mqttc = mosquitto.Mosquitto(&quot;python_sub&quot;)

#define the callbacks
mqttc.on_message = on_message
mqttc.on_connect = on_connect

#connect
mqttc.connect(&quot;&lt;your broker ip address&gt;&quot;, 1883, 60, True)

#subscribe to topic test
mqttc.subscribe(&quot;test&quot;, 2)

#keep connected to broker
while mqttc.loop() == 0:
	pass
</pre>
<p>Hopefully this short illustration will prove useful to those just getting started. This won&#8217;t be the end of working with mosquitto libraries&#8230;now just to work out python&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/programming/first-steps-using-python-and-mqtt/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>When web sockets won&#039;t work (Web socket handshaking updates)</title>
		<link>http://chemicaloliver.net/internet/when-web-sockets-wont-work/</link>
		<comments>http://chemicaloliver.net/internet/when-web-sockets-wont-work/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 12:01:49 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web sockets]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=624</guid>
		<description><![CDATA[This post serves as a update to my previous post: Getting started with Node.js and Web Sockets on Ubuntu 10.04 In which I stated various problems I had encountered. In this post I will explain why most of them occurred. In this post I refer mostly to the server side handshake, the client side processing is [...]]]></description>
			<content:encoded><![CDATA[<p>This post serves as a update to my previous post: <a href="http://chemicaloliver.net/programming/getting-started-with-web-sockets-on-ubuntu/">Getting started with Node.js and Web Sockets on Ubuntu 10.04</a> In which I stated various problems I had encountered. In this post I will explain why most of them occurred. In this post I refer mostly to the server side handshake, the client side processing is a 45 step process which looks pretty nightmarish to me!</p>
<p>After more in depth research I&#8217;ve discovered the cause of many the examples I tried in my previous post. On the 6th June 2010 the handshake for the web sockets protocol was <a title="Latest Web Socket Protocol" href="http://www.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol-00.txt">changed </a>and broke backwards compatibility with earlier implementations. This means that now you have to ensure the browser version you are using supports the same handshake as server. I suspect due to me not knowing this that many examples failled to work as I sporadically switched between builds of chromium and node.js &#8211; to guarantee support you need to use the latest version of Node.js and Chromium/Chrome 6.0.414.0 or above.</p>
<p>I also attempted to use the <a href="http://github.com/razerbeans/WebSocket-Arduino">Arduino websockets library </a>without success which I now find uses an old protocol, it is my intention to attempt to remedy this when I have time.</p>
<p><span id="more-624"></span></p>
<p>The new server &gt; client handshake was summerised by <a href="http://blog.new-bamboo.co.uk/2010/6/7/living-on-the-edge-of-the-websocket-protocol">Makoto</a> in 7 steps:</p>
<ol>
<li>Extract numbers at Key1(eg: 4 @1 46546xW%0l 1 5) and concatenate them</li>
<li>Count number of spaces at Key1</li>
<li>Devide #1 by #2</li>
<li>Change the format of #3 into &#8220;big-<a href="http://en.wikipedia.org/wiki/Endianness">endian</a> 32 bit integer&#8221;</li>
<li>Repeat #1 by #4 for Key2(eg: 12998 5 Y3 1 .P00)</li>
<li>Concatenate #4, #5, and the body(eg: <code>^n:ds[4U</code>) of the request</li>
<li>Digest the result in MD5 format</li>
</ol>
<p>The new server handshake is not complex but is a bit heavyweight for microcontrollers. A nice example of implementation of this in PHP can be found here:</p>
<p><a href="http://webreflection.blogspot.com/2010/06/websocket-handshake-76-simplified.html">http://webreflection.blogspot.com/2010/06/websocket-handshake-76-simplified.html</a></p>
<p>and the full, latest details of the handshake can be found here:</p>
<p><a href="http://www.whatwg.org/specs/web-socket-protocol/">http://www.whatwg.org/specs/web-socket-protocol/</a> (currently on page 6)</p>
<p>I have mixed opinions on this update, on one hand it means the web sockets protocol is no longer strictly initiated by an http GET request as it has extra data in the header, on the other hand it seems sensible to incorporate some kind of validation mechanism for clients. What it may mean for Arduino implementations of the protocol I don&#8217;t yet know, it is my gut feeling that the server part may be too complex to easily implement. It is less likely for an Arduino client to be required but I would not like to attempt implementing the 45 step handshake required for a client on an Arduino.</p>
<p>Rather than using Node.js I have moved to using <a href="http://code.google.com/p/pywebsocket/">pywebsocket</a> for my experiments as it seems to be used by the Google team working on web sockets and thus is very quickly updated in line with the newest developments. So far I have tried using both Chromium and Firefox 4 daily build as clients.</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/internet/when-web-sockets-wont-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting started with Node.js and Web Sockets on Ubuntu 10.04</title>
		<link>http://chemicaloliver.net/linux/getting-started-with-web-sockets-on-ubuntu/</link>
		<comments>http://chemicaloliver.net/linux/getting-started-with-web-sockets-on-ubuntu/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 21:06:48 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[gettin started]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web sockets]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=606</guid>
		<description><![CDATA[Having spent the past few hours taking my first steps into the glorious unknown world of web sockets I&#8217;ve drawn a few conclusions about web sockets: The principals are very easy It is an area of great interest and development There are seeming 101 different implementations many of which are out of date and broken [...]]]></description>
			<content:encoded><![CDATA[<p>Having spent the past few hours taking my first steps into the glorious unknown world of web sockets I&#8217;ve drawn a few conclusions about web sockets:</p>
<ul>
<li>The principals are very easy</li>
<li>It is an area of great interest and development</li>
<li>There are seeming 101 different implementations many of which are out of date and broken</li>
</ul>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/08/Screenshot-3.png"><img class="size-medium wp-image-612 aligncenter" title="Screenshot of Node.js running Web Socket Server on Ubuntu" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/08/Screenshot-3-300x178.png" alt="Screenshot of Node.js running Web Socket Server on Ubuntu" width="300" height="178" /></a></p>
<p>So this post I want to document a simple demonstration of the use of web sockets with node.js  which works now (August 2010) to serve as simple demonstration to those wanting to dip their toe in the water before going further. Many examples and demos were outdated and failed to run for a variety of reasons, mainly due to node.js being updated and the examples not being changed to reflect this. I did all this on ubuntu but there is no reason why it shouldn&#8217;t work on any other Linux system.</p>
<p><span id="more-606"></span></p>
<h2>Requirements</h2>
<p>For this demonstration you will need:</p>
<ol>
<li>A computer running a recent version of linux</li>
<li>A web socket compatible browser (probably chrome/chromium v4 plus)</li>
<li>Appropriate compilers (Obtained on ubuntu/debian using <code>apt-get install build-essential</code>)</li>
<li>Git (Obtained on ubuntu/debian using <code>apt-get install git-core</code>)</li>
<li>A basic idea about compiling things, some basic JavaScript or a healthy sense of adventure!</li>
</ol>
<h2>Getting Node.js</h2>
<p><a href="http://nodejs.org/">Node.js </a> is an event driven JavaScript framework for building server side applications such as web servers and web socket servers. A large proportion of web socket examples use it as a base for the server component of the system so the first thing we need to do is get it and compile it:</p>
<ol>
<li>Get the latest code by cloning the git repo:
<pre class="brush: bash;">git clone git://github.com/ry/node.git</pre>
<p>This will get the code for node.js and place it in a folder called node.</li>
<li>Now we&#8217;ve got the code we need to compile it which should go smoothly:
<pre class="brush: bash;">
cd node
./configure
make
sudo make install
</pre>
<p>Now, assuming everything went well node.js will be launched if we type node in the terminal, if compiling hasn&#8217;t worked it&#8217;s probably worth looking at the output from the ./configure command as there may be some missing dependencies&#8230;.I was fine though!</li>
<li>When required it can be invoked by
<pre class="brush: bash;">node &lt;script&gt;</pre>
</li>
</ol>
<p>In itself node.js is not very useful without some javascript to kick it into action, thankfully many people have put together implementations of web socket servers using node.js.</p>
<h2>Getting a Web Socket Server</h2>
<p>This is the area where I had most trouble, I found that many people have written similar posts to this and they had quickly become dated and broken, mine may indeed follow them but at least for the present will remain working.</p>
<p>The best simple web socket library with examples I came accross was <a href="http://github.com/miksago/node-websocket-server">miksago&#8217;s node-websocket-server</a>, it seemed to fill all my criteria of being simple, up to date, well maintained and including working examples. The main example being a server which sits and waits for the included client page to connect and then prints a message to the terminal, the server then sends a message back to the web page showing the id of the client. Useless but very understandable code upon which to base a simple application. To get get this:</p>
<ol>
<li>Again we start by cloning the git repo:http://github.com/miksago/node-websocket-server
<pre class="brush: bash;">git clone http://github.com/miksago/node-websocket-server.git</pre>
</li>
<li>Then change to the new directory and go into the example folder</li>
<li>Launch the server :
<pre class="brush: bash;">node echo-server.js</pre>
<p>This will start the server listening on port 8000.</li>
<li>Launch the client.html file in your browser&#8230;from there on it should be self explanatory and you should be able to send messages through web sockets.</li>
</ol>
<p><em>Note: If you&#8217;re running the server on a separate machine you&#8217;ll need to change the host name in the client.html file.</em></p>
<h2>Moving On</h2>
<p>Once you&#8217;ve used this demo and looked at the code, I found at least, that it becomes clear how simple web sockets are to implement. When you go on to create your own applications this example provides a good starting point.</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/linux/getting-started-with-web-sockets-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Secure Graphs &#8211; Using Google Charts API over https using PHP and cURL</title>
		<link>http://chemicaloliver.net/internet/secure-graphs-using-google-charts-api-over-https-using-php-and-curl/</link>
		<comments>http://chemicaloliver.net/internet/secure-graphs-using-google-charts-api-over-https-using-php-and-curl/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 10:48:07 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=546</guid>
		<description><![CDATA[Currently a project I&#8217;m involved in at work requires a dashboard to show the current status of orders within our automated workflow so for part of this I decided to use the google charts API, then I reliased that Google didn&#8217;t offer charts over https. However the problem is fairly simple to circumvent by caching [...]]]></description>
			<content:encoded><![CDATA[<p>Currently a project I&#8217;m involved in at work requires a dashboard to show the current status of orders within our automated workflow so for part of this I decided to use the google charts API, then I reliased that Google didn&#8217;t offer charts over https.</p>
<p>However the problem is fairly simple to circumvent by caching the graph to a file and then loading the file over https from your own site, indeed an example has already been published <a title="Google chart over HTTPS/SSL by jestep" href="http://www.saynotoflash.com/archives/google-chart-over-httpsssl/">here</a> but that example uses functions disabled on many web hosts (including mine) : <code>file_get_contents()</code> and <code>file_put_contents()</code>. These functions can pose a security risk when enabled so I decided to use a similar solution but using cURL which is supported by most hosting providers.</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/06/chart.png"><img class="size-medium wp-image-547 aligncenter" title="Example Google Chart" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/06/chart-300x128.png" alt="Example Google Chart" width="300" height="128" /></a></p>
<p>The basic principal of this is to form the URL in the normal way then to save the graph as a file and load it as a normal <code>&lt;img&gt;</code>. In the other example I referred to caching is used, in my application the graph will change so regularly and the number of hits will be low that it&#8217;s not worth doing this.</p>
<p><span id="more-546"></span></p>
<p>This process centres on one function which saves the image:</p>
<pre class="brush: php;">
function saveImage($chart_url,$local_image_path,$image_name)
{
    //initialize curl
    $ch = curl_init($chart_url);
    //open file to write image to
    $fp = fopen($local_image_path.$image_name, &quot;wb&quot;);

    // set URL and other appropriate options
    $options = array(CURLOPT_FILE =&gt; $fp,
                     CURLOPT_HEADER =&gt; 0,
                     CURLOPT_FOLLOWLOCATION =&gt; 1,
                         CURLOPT_TIMEOUT =&gt; 60);

    curl_setopt_array($ch, $options);
    //get the image
    curl_exec($ch);
    //close the connection
    curl_close($ch);
    //finish writing to the file
    fclose($fp);
}
</pre>
<p>This then leaves you with a png file in the path you specified (which you need write permissions on), this can then be inserted into your page using the normal methods.</p>
<p>This only works with the http chart API not the newer javascript based interactive graphs, if absolute privacy of your data is required then using the new API would be a better solution as no data is sent to the Google servers &#8211; the graph is generated using a javascript library locally , as long as the libraries are loaded securely there should be no complaints from any browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/internet/secure-graphs-using-google-charts-api-over-https-using-php-and-curl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sheevaplug &#8211; Why Globalscale suck</title>
		<link>http://chemicaloliver.net/electronics/sheevaplug-why-globalscale-suck/</link>
		<comments>http://chemicaloliver.net/electronics/sheevaplug-why-globalscale-suck/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 20:54:18 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=538</guid>
		<description><![CDATA[In my previous post Sheevaplug – An ideal home server I described why I loved the sheevaplug, now in this post I&#8217;m going to discuss why I now have fallen out of love with it. The main reason is shown in the following photo: For the past six months I&#8217;ve been using the unit for 24/7 IRC using [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post <a title="Sheevaplug – An ideal home server" rel="bookmark" href="http://chemicaloliver.net/linux/sheevaplug-an-ideal-home-server/">Sheevaplug – An ideal home server</a> I described why I loved the sheevaplug, now in this post I&#8217;m going to discuss why I now have fallen out of love with it. The main reason is shown in the following photo:</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/06/4373443411_0b96e8b2d5_b.jpg"><img class="size-medium wp-image-540 aligncenter" title="Inside the Sheevaplug Power Supply" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/06/4373443411_0b96e8b2d5_b-300x225.jpg" alt="Inside the Sheevaplug Power Supply" width="300" height="225" /></a></p>
<p>For the past six months I&#8217;ve been using the unit for 24/7 IRC using irssi, running an MQTT server and broadcasting to pachube, along with allowing me to ssh tunnel into a secure internet connection when using public wifi. So far so good. However during the middle of last week I noticed my pachube feeds had frozen, I tried to ssh into the device and that failed so being at work at the time I was miffed and couldn&#8217;t wait to go home to find out what was wrong.</p>
<p><span id="more-538"></span></p>
<p>On examining the unit in person everything looked fine, I rebooted and everything worked fine&#8230;.but only for ten minutes before the same symptoms occurred again except this time I noticed the usb hub was losing power (usb powered). I tried rebooting once again but this time the unit was dead only flashing network lights and 0W power consumption using my power meter. Deeply annoyed that my sheevaplug may have had the fabled failed power supply described many times on the <a href="http://plugcomputer.org">plugcomputer.org</a> forums.</p>
<p>Since it wasn&#8217;t working I took it apart and found the psu was indeed dead and only outputting &lt;0.5v rather than the usual 3v and 5 v.  I then proceeded to look inside the PSU and found the large capacitor on the top right bulging suspiciously &#8211; as I&#8217;m no expect I steered clear of testing the capacitor in question and contacted the supplier NewIT.</p>
<p>NewIT first directed me to contact Grace Wu of Globalscale who is responsible for sheevaplug warranty issues technologies who still has not responded in line with GlobalScales line in bad customer support. If you require customer support she is supposedly the person to vent your anger on, she can be contacted at gwu@globalscaletechnologies.com.</p>
<p>I had to point out to NewIT my legal right to have the unit repaired before I was offered this.</p>
<p>This tale serves to highlight some issues that would make me very wary of buying another Globalscale product, first the bad design which caused the problem.  second they have never rectified this and new Guruplugs get even hotter and finally the level of customer service I received from Globalscale was none exisitant, if you buy from NewIT then you&#8217;re probably ok but buy from Globalscal then you&#8217;re on your own!</p>
<p>All in all this makes me sad as the concept is great and while the unit worked I loved it &#8211; now I don&#8217;t trust it and it&#8217;s going to be replaced, probably by something atom based.</p>
<p>/*End of Rant!*/</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/electronics/sheevaplug-why-globalscale-suck/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Testing Ubuntu Unity on my eeepc 901 (with screenshots)</title>
		<link>http://chemicaloliver.net/linux/ubuntu-unity-on-eeepc/</link>
		<comments>http://chemicaloliver.net/linux/ubuntu-unity-on-eeepc/#comments</comments>
		<pubDate>Tue, 11 May 2010 22:03:44 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[901]]></category>
		<category><![CDATA[eeepc]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=519</guid>
		<description><![CDATA[At the Ubuntu Developers Summit this week one of the major announcements so far is Ubuntu Unity, a new lightweight GUI. The aim being to take the best features from instant on type Linux systems while still providing a fully featured system, this type of system being ideal for netbooks and appliance type computing. This GUI will [...]]]></description>
			<content:encoded><![CDATA[<p>At the Ubuntu Developers Summit this week one of the major announcements so far is Ubuntu Unity, a new lightweight GUI. The aim being to take the best features from instant on type Linux systems while still providing a fully featured system, this type of system being ideal for netbooks and appliance type computing. This GUI will form the basis of a currently OEM only distro; ubuntu light designed for instant boot appliance or netbook computers.</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/black.png"><img class="size-medium wp-image-521 aligncenter" title="Ubuntu Unity on eeepc" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/black-300x175.png" alt="Ubuntu Unity on eeepc" width="300" height="175" /></a></p>
<p>Despite only being in its infancy there is already a ppa available to install unity on ubuntu 10.04 so I decided to try it on my eeepc 901 on which I currently use vanilla ubuntu 10.04 as I don&#8217;t get on with the current Ubuntu Netbook Remix interface. One of the things that I&#8217;ve never quite got right is fitting everything on my 9&#8243; netbook screen so I had high hopes that this new interface with vertical dock might do better in this respect.</p>
<p>In this post I&#8217;ll quickly detail how to install it and then quickly look at it&#8217;s features and shortcomings, I won&#8217;t repeat everything which has <a href="http://www.markshuttleworth.com/archives/383">already been written</a> regarding what plans are for the future.</p>
<p><span id="more-519"></span></p>
<h3>Installation</h3>
<p>As there is a ppa installation on ubuntu is a simple matter of adding the ppa and using apt-get to install the package:</p>
<pre class="brush: bash;">sudo add-apt-repository ppa:canonical-dx-team/une &amp;&amp; sudo apt-get update &amp;&amp; sudo apt-get install unity</pre>
<p>Then just logout and  login choosing Ubuntu Unity Netbook Edition as the session.</p>
<h3>Interface</h3>
<p>The first thing that strikes you after login is the diminutive size of the toolbars and new dock. The new dock behaves in a similar way to the OSX dock and to my mind is much better than the current cumbersome application chooser in UNR. Currently there is no way to add applications to the dock that I found, but I&#8217;m sure that&#8217;s coming.</p>
<p>On launching an application such as Firefox the increase in vertical screen space is apparent even though it&#8217;s only tens of pixels but still a welcomed change:</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/Screenshot.png"><img class="size-medium wp-image-524 aligncenter" title="Firefox Screenshot in Ubuntu Unity" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/Screenshot-300x175.png" alt="Firefox Screenshot in Ubuntu Unity" width="300" height="175" /></a></p>
<p>Another nice change over UNR is that applications launch using their natural window size rather than being forced to be maximised into a horrible widescreen format:</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/gwibber.png"><img class="size-medium wp-image-525 aligncenter" title="Screenshot of Gwibber in Ubuntu Unity" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/gwibber-300x175.png" alt="Screenshot of Gwibber in Ubuntu Unity" width="300" height="175" /></a></p>
<p>At the moment there is no applications menu as such but just a link to a folder of short-cuts to all applications installed on the system, with no categorisation.</p>
<p>Previously it had been mentioned (on<a title="Ubuntu UK Podcast" href="http://podcast.ubuntu-uk.org/"> uupc </a>I believe) that Google Chromium will become the default browser of UNR however here firefox is still the default, as shown above. While the improved vertical screen space is appreciated I still feel Google Chromium is a much better choice for netbook screens:</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/google-chrome.png"><img class="size-medium wp-image-528 aligncenter" title="Screenshot of Google Chromium in Ubuntu Unity" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/google-chrome-300x175.png" alt="Screenshot of Google Chromium in Ubuntu Unity" width="300" height="175" /></a></p>
<p>However cherry on the top of this generally nice but until here not spectacular interface is the implementation of an OSX stype expose clone which allows all open windows to be viewed simultaneously along with some nice fading. Activated by clicking the ubuntu logo in the corner.</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/winds.png"><img class="size-medium wp-image-529 aligncenter" title="Screenshot of Ubuntu Unity fancy bit" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/05/winds-300x175.png" alt="Screenshot of Ubuntu Unity fancy bit" width="300" height="175" /></a></p>
<h3>Performance</h3>
<p>It&#8217;s probably not the fairest point to comment on performance but I have nothing bad to report, installation is smooth and performance is on a par with normal gnome on eeepc. All to be expected as it&#8217;s running on top of a vanilla 10.04 installation.</p>
<h3>In Conclusion</h3>
<p>It&#8217;s obvious that Unity is at a very early stage of development, however it is still very usable and I had none of the problems reported by some of crashing and errors on login and logout. probably due to my fairly standard hardware of the eeepc. I will however refrain from pointing out the shortcomings of the dock that <a href="http://www.webupd8.org/2010/05/taking-ubuntu-unity-interface-for-test.html">others have</a> as I expect it will improve a great deal before final release.</p>
<p>I really like the new dock and the screen to view all windows, once the dock has been finished it should be a really nice alternative to the default gnome interface, especially if it&#8217;s combined with an even faster booting system. I also look forward to integration of Unity and the newer gnome features.</p>
<p>That said I think I&#8217;ll stick with the normal gnome interface while Unity continues to improve.</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/linux/ubuntu-unity-on-eeepc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solecreator.com &#8211; a good idea, terribly executed (updated with response)</title>
		<link>http://chemicaloliver.net/internet/solecreator-a-good-idea-terribly-executed/</link>
		<comments>http://chemicaloliver.net/internet/solecreator-a-good-idea-terribly-executed/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 18:29:59 +0000</pubDate>
		<dc:creator>chemicaloliver</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://chemicaloliver.net/?p=491</guid>
		<description><![CDATA[In response to a comment below from solecreator.com I feel I should clarify that the site is in beta and issues are still being resolved. Personally I don&#8217;t feel this excuses the problems described although it does go some way towards explaining them. To my mind using a BETA product as a public release for [...]]]></description>
			<content:encoded><![CDATA[<p><em>In response to a comment below from solecreator.com I feel I should clarify that the site is in beta and issues are still being resolved. Personally I don&#8217;t feel this excuses the problems described although it does go some way towards explaining them.</em></p>
<p><em>To my mind using a BETA product as a public release for an ecommerce system is reckless and that paying customers should not be used as guinea pigs, if you know something isn&#8217;t right (indicated by it being labelled beta) then you should wait till it is before releasing, clearly our opinions differ.</em></p>
<p><em>I do however appreciate the time take to respond to my opinions. The original review:</em></p>
<p>Having an interest in cool websites, shoes and making things, a website that enables you to design a pair of shoes online and have them arrive at your door sounded a very appealing idea. If only the reality of solecreator was that good.</p>
<h4>Online Experience</h4>
<p>On arriving at solecreator you are met with a largely flash based website which I feel is acceptable for a site that&#8217;s going to have this level of interactivity, the initial process involves choosing your sex, size and model of shoe from a selection of named and unnamed brands including Converse and Vans. On completion of basic shoe selection you can decide if you want a quick tutorial, I opted not to use this and didn&#8217;t regret the choice. Now the main designer page is reached (shown below).</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/Screenshot-1.jpg"><img class="size-medium wp-image-492 aligncenter" title="Solecreator Screenshot" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/Screenshot-1-300x180.jpg" alt="Solecreator Screenshot" width="300" height="180" /></a></p>
<p>The designer emulates a generic image editor and is logically laid out with appropriate tool tips to explain the essentials.</p>
<p>I started out by trying to place one of my photos, which took three attempts to upload the image, the application freezing on previous attempts. The system also does not recognise uppercase file extensions so will not allow the upload of images with a .JPG extension on an operating system which uses case sensitive filenames (like osx/linux etc). Alarm bells also started ringing when the optimal image size was given as 50kB 200px x 200px which seemed to my mind very low for an (apparently) high quality print application.</p>
<p><span id="more-491"></span></p>
<p>Once the upload has succeeded the image is inserted onto one side of the shoe and can be scaled, rotated  and repositioned. This aspect of the editor makes it very difficult to get an idea of how the image will look on the shoe as it does not make any attempt to wrap the image to the shape and just shows a cutout image floating infront:</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/Screenshot-2.jpg"><img class="size-medium wp-image-493 aligncenter" title="Solecreator image upload" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/Screenshot-2-300x181.jpg" alt="Solecreator image upload" width="300" height="181" /></a></p>
<p>While as a web developer I appreciate this is not an easy thing to do the application makes it very difficult to get an exact idea and no refunds are given for bad design! After you have completed battling with the editor you go through a normal paypal type checkout and given an estimated delivery date then just sit back and wait. I paid my £28.98 for the cheapest paid and then sat back and waited.</p>
<p>In addition to my experience I&#8217;ve since noted other annoyances with the website like address form allows submission of the form with the placeholders in it, so my address on my invoice is listed as &lt;my address&gt; &#8220;Your address 2 (optional)&#8221;&#8230;..etc.</p>
<h4>The Finished Product</h4>
<p>Today the shoes arrived, 2 days after I ordered, all good. Except when I looked at them:</p>
<p style="text-align: center;"><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/IMG_2955.jpg"><img class="size-medium wp-image-494 aligncenter" title="Solecreator finished shoes" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/IMG_2955-300x199.jpg" alt="Solecreator finished shoes" width="300" height="199" /></a><a href="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/IMG_2958.jpg"><img class="size-medium wp-image-495 aligncenter" title="Solecreator shoe closeup" src="http://chemicaloliver.net/wordpress/wp-content/uploads/2010/04/IMG_2958-300x199.jpg" alt="Solecreator shoe closeup" width="300" height="199" /></a></p>
<p>A cheap Dek branded plimsole (available online for around £5.95 a pair) with some shoddy printing which looks like I might have done it carelessly with some t shirt paper and an iron! Also my suspicions about it being hard to visualise where and how the image was going to end up were realised and the image is badly placed, even compared to my design.</p>
<p>In short if you&#8217;re considering buying from Solecreator.com don&#8217;t waste your £28.98 (minimum). It&#8217;s an example of careless web design and a poor quality product.</p>
<p>Oh and they can&#8217;t even spell their own address right &#8211; it&#8217;s Aston not Aton! The invoice is also printed on the back of a piece of Kings of Neon paper an associated company but still it looks unprofessional.</p>
]]></content:encoded>
			<wfw:commentRss>http://chemicaloliver.net/internet/solecreator-a-good-idea-terribly-executed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
