<?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>Strangeparty</title>
	<atom:link href="http://www.strangeparty.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.strangeparty.com</link>
	<description>A blog about life, linux and photography</description>
	<lastBuildDate>Mon, 16 Jan 2012 14:44:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Message Broker v8: Record, Replay and REST</title>
		<link>http://www.strangeparty.com/2012/01/06/message-broker-v8-record-replay-and-rest/</link>
		<comments>http://www.strangeparty.com/2012/01/06/message-broker-v8-record-replay-and-rest/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 09:06:59 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[IBM]]></category>
		<category><![CDATA[Message Broker]]></category>
		<category><![CDATA[My Job]]></category>
		<category><![CDATA[messagebroker]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=880</guid>
		<description><![CDATA[<p>IBM WebSphere Message Broker v8 was released in December last year &#8211; There is an announcement and comparison of versions on the IBM website.</p> <p>IBM WebSphere Message Broker introduced Record and Replay as part of its version 8 release. I thought I would just write a brief quickstart guide to getting running with record and replay, and <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2012/01/06/message-broker-v8-record-replay-and-rest/">Message Broker v8: Record, Replay and REST</a></span>]]></description>
			<content:encoded><![CDATA[<p>IBM WebSphere Message Broker v8 was released in December last year &#8211; There is an <a href="http://www-01.ibm.com/common/ssi/ShowDoc.jsp?docURL=/common/ssi/rep_ca/1/897/ENUS211-391/index.html&amp;lang=en">announcement</a> and <a href="http://www-01.ibm.com/software/integration/messagebrokerproductline/versions/index.html">comparison of versions</a> on the IBM website.</p>
<p>IBM WebSphere Message Broker introduced Record and Replay as part of its version 8 release. I thought I would just write a brief quickstart guide to getting running with record and replay, and in particular with working with the new REST interface which comes with it. There is actually a <a href="ftp://public.dhe.ibm.com/software/integration/wbibrokers/docs/V8.0/Record_and_replay.pdf">Record and Replay specific PDF</a> available too, which contains all the details you might want for using Record and Replay (far more detail than I cover here). The main reason I am writing this, is it can be a little daunting trying to get Record and Replay going, as it does have a fair bit of configuration, and involves a few areas of a quite large product.</p>
<p><span id="more-880"></span></p>
<h3>Setting up Recording</h3>
<p>From your WMB install dir, run the db2 schema file to create the sample database for Record and Replay. Edit the file if you want to use a database name other than MB8RECORD, a specific schema or increase the storage size per message above 5mb.</p>
<blockquote>
<pre>db2 -tvf ddl/db2/DataCaptureSchema.sql</pre>
</blockquote>
<p>Set the password for your database</p>
<blockquote>
<pre>mqsisetdbparms MB8BROKER -n MBRECORD -u username -p password</pre>
</blockquote>
<p>Set the DataCaptureStore configurable service to set where to record to and which EG to do the recording (You can also do any of these configurable service steps via the Message Broker Explorer gui)</p>
<blockquote>
<pre>mqsicreateconfigurableservice MB8BROKER -c DataCaptureStore -o MyCaptureStore \
   -n "dataSourceName,egForRecord" -v "MBRECORD,default"</pre>
</blockquote>
<p>Define where to record messages from. Use a wildcard to set all configurable services. Note that double quotes (&#8220;&#8221;) are required on unix, windows will want single quotes (&#8221;)</p>
<blockquote>
<pre>mqsicreateconfigurableservice MB8BROKER -c DataCaptureSource -o MyCaptureSource \
   -n "dataCaptureStore,topic" -v "MyCaptureStore,$SYS/Broker/MB8BROKER/Monitoring/#"</pre>
</blockquote>
<p>Alternatively you can list the flows explicitly with topics like &#8220;<em>$SYS/Broker/MB8BROKER/Monitoring/ExecutionGroupName/FlowName</em>&#8221; While we are configuring everything, set a replay destination too. Set EG default to replay to queue &#8220;REPLAY&#8221; on queue manager MB8QMGR</p>
<blockquote>
<pre>mqsicreateconfigurableservice MB8BROKER -c DataDestination -o MyDestination \
   -n "egForReplay,endpoint,endpointType" -v "default,wmq:/msg/queue/REPLAY@MB8QMGR,WMQDestination"</pre>
</blockquote>
<h3>Setting up Monitoring</h3>
<p>Now your broker is configured for recording, you will need to setup something to be recorded. Event Monitoring is used to emit data to record, so either follow the monitoring sample, read the docs on <a href="http://publib.boulder.ibm.com/infocenter/wmbhelp/v7r0m0/topic/com.ibm.etools.mft.doc/ac60386_.htm">Event Monitoring</a> or edit the sample monitoring profile in <em>sample/RecordReplay/basicMonitoringProfile.xml </em>to replace NODENAME with the name of your flow&#8217;s input node. Of course you can also configure event monitoring from within the flow editor in the toolkit &#8211; simply select a node and you will find monitoring in the properties view. If you have the flow source already, it is much easier to set the monitoring in the toolkit than it is to do it via the command line. You can also then use the <em>mqsireportflowmonitoring</em> command afterwards to give you the xml monitoring profile being used (which is basically what you are setting in the toolkit when setting the monitoring options on a flow)</p>
<p>There are two specific properties which are worth mentioning when it comes to monitoring for Record and Replay.<br />
If you tick the include bitstream option in the toolkit then the body of your message will be recorded. Choose a sensible encoding, as if you select CDATA and your body will not be a valid XML element, you will break the monitoring and no event will be emitted. If in doubt, use the hexbinary or base64 encoding. It is worth saying that if you record MQ headers, and replay that message, the headers will be attempted to be reused. Other transport headers will just end up in the body of your message.<br />
The other option I wanted to mention was the UserData area of Event Monitoring. If you include $ExceptionList in your monitoring settings, then if an error occurs and an event is emitted, the exception list will be included in the monitoring message. This will be recorded, and will be available from the Record and Replay web interface and REST Api.</p>
<p>If you used a monitoring profile you will need to configure the profile with the following commands:</p>
<blockquote>
<pre>mqsicreateconfigurableservice MB8BROKER -c MonitoringProfiles -o MyProfile</pre>
<pre>mqsichangeconfigurableservice MB8BROKER -c MonitoringProfiles -o MyProfile \
   -n profileProperties -p "sample/RecordReplay/basicMonitoringProfile.xml"</pre>
<pre>mqsichangeflowmonitoring MB8BROKER -e default -f MyFlow -m  MyProfile</pre>
</blockquote>
<p>Monitoring normally defaults to off, so you will probably need to turn it on with:</p>
<blockquote>
<pre>mqsichangeflowmonitoring MB8BROKER -e default -f MyFlow -c active</pre>
</blockquote>
<p>You can check that monitoring is correctly active with the command</p>
<blockquote>
<pre>mqsireportflowmonitoring MB8BROKER -n -e default -f MyFlow</pre>
</blockquote>
<p>You should see output like</p>
<blockquote>
<pre>BIP8911I: Monitoring settings for flow 'MyFlow' in execution group 'default' -  State?: active, ProfileName: 'MyProfile'.
BIP8912I: Event: 'IN.transaction.End',  Event name: 'IN.transaction.End',  Configured?: yes,  State?: enabled.
BIP8912I: Event: 'IN.transaction.Rollback',  Event name: 'IN.transaction.Rollback',  Configured?: yes,  State?: enabled.</pre>
</blockquote>
<p>You can now put messages through your flow and they will be recorded.</p>
<h3>Enabling the REST interface and Web UI</h3>
<p>To enable the REST interface and Web UI you need to enable the HTTP server and set the port for it to run on. You will also need to set which ExecutionGroup will process requests to view recorded messages. (You can also do this via the MBX properties, see the properties for your broker, and for your DataCaptureStore ConfigurableService)</p>
<blockquote>
<pre>mqsichangeproperties MB8BROKER -b webadmin -o server -n enabled -v true
mqsichangeproperties MB8BROKER -b webadmin -o HTTPConnector -n port -v 8080
mqsichangeproperties MB8BROKER -o DataCaptureStore -c MyCaptureStore -n egForView -v default</pre>
</blockquote>
<p>You can also configure HTTPS if you prefer, details are in the product documentation.</p>
<h3>Viewing recorded data</h3>
<p>You can of course view all the data via a web browser by pointing to the url <em>http://localhost:8080</em> but you can also do it all via the command line. The following will get back the most recent 30 recorded pieces of data from your captureStore MyCaptureStore.</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/MyCaptureStore/"</pre>
</blockquote>
<p>This returns quite a large XML list of messages, so let&#8217;s try getting just one message.</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/DefaultCaptureStore/?numberOfEntriesPerPage=1"
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;DataCaptureStore TotalResults="92" NumberOfEntriesPerPage="1" PageNumber="1"&gt;
&lt;DataCaptureEntry wmb_msgkey="414d51204d4238514d475220202020203d1bc14e4d290020:414d51204d4238514d475220202020203d1bc14e1b3a0020"
  has_bitstream="Y" has_exception="N" has_userdata="N" event_type="IN.transaction.End"
  event_name="IN.transaction.End" event_srcaddr="IN.transaction.End" broker_name="MB8BROKER"
  broker_uuid="d405fc08-0ec6-11e1-9d9b-7f0000010000" exgrp_name="default" exgrp_uuid="7fd654a2-3301-0000-0080-d4d9103989f9"
  msgflow_name="MyFlow" msgflow_uuid="0a4555a2-3301-0000-0080-e2ed33c9dfcd" appl_name="" appl_uuid="" library_name=""
  library_uuid="" node_name="IN" node_type="ComIbmMQInputNode" detail="IN" terminal_name="" key_fld_1_nm=""
  key_fld_2_nm="" key_fld_3_nm="" key_fld_4_nm="" key_fld_5_nm="" event_timestamp="2011-11-16 11:25:00.647"
  local_transaction_id="9f228bde-1045-11e1-9fac-7f0000010000-1" parent_transaction_id="" global_transaction_id=""/&gt;
&lt;/DataCaptureStore&gt;</pre>
</blockquote>
<p>You can of course filter on any of the data fields above as follows.</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/DefaultCaptureStore/?numberOfEntriesPerPage=1&amp;has_bitstream=Y"</pre>
</blockquote>
<p>Filtering is possible on all the above columns, with the addition that you can also set a timestamp range with The REST Api has documentation at <em>docs/REST/index.html </em>which covers all these options.</p>
<p>You can also query which DataCaptureStores are setup for viewing by loading the base url &#8220;http://localhost:8080/datacapturestore/&#8221;</p>
<p>You may then want to download the body of a recorded message. (My example has a shortened url as the message key rather long. Use the wmb_msgkey from your above list requests) Depending on how you set the data to be recorded in your monitoring profile, you will get back a different encoding data</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/DefaultCaptureStore/12345"
&lt;Data encoding="base64Binary"&gt;SGVsbG8gV29ybGQK&lt;/Data&gt;</pre>
</blockquote>
<p>You don&#8217;t have to get the data back as encoded payloads wrapped in XML. If you set download=true then you will just get the decoded bitstream</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/DefaultCaptureStore/12345?download=true"
HelloWorld</pre>
</blockquote>
<p>You can also download an ExceptionList if your message has one recorded; set payload=exceptionlist to get the exceptionlist instead of the bitstream. This can also be combined with download=true</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/DefaultCaptureStore/12345?payload=exceptionlist&amp;download=true"</pre>
</blockquote>
<h3>Replaying recorded data</h3>
<p>As we already defined a DataDestination called <em>MyDestination</em> above, we have somewhere we can replay to. Again, you can do this via the web browser quite easily, but doing it with curl isn&#8217;t hard either.</p>
<blockquote>
<pre>$curl "http://localhost:8080/datacapturestore/DefaultCaptureStore/12345" -d "replaydestination=MyDestination"</pre>
</blockquote>
<h3>Viewing more about your broker</h3>
<p>There are lots of other details about your broker and what is deployed on it available via &#8220;http://localhost:8080/admin&#8221;. See the REST Api documentation for full details</p>
<blockquote>
<pre>$curl "http://localhost:7101/admin"
&lt;?xml version="1.0"?&gt;
&lt;brokerResponse brokerName="MB8BROKER" completionCode="ok"&gt;
&lt;executiongroup name="default" runstate="running" path="/admin/executiongroup/default"&gt;&lt;/executiongroup&gt;
&lt;executiongroup name="test" runstate="running" path="/admin/executiongroup/test"&gt;&lt;/executiongroup&gt;
&lt;log name="Log" runstate="" path="/admin/log/Log"&gt;&lt;/log&gt;
&lt;adminqueue name="Administration Queue" runstate="" path="/admin/adminqueue/Administration Queue"&gt;&lt;/adminqueue&gt;
&lt;/brokerResponse&gt;</pre>
<pre>$curl "http://localhost:7101/admin/executiongroup/test/"
&lt;?xml version="1.0"?&gt;
&lt;brokerResponse brokerName="MB8BROKER" completionCode="ok"&gt;
&lt;application name="TestXpath" runstate="running" path="/admin/executiongroup/test/application/TestXpath"&gt;&lt;/application&gt;
&lt;/brokerResponse&gt;</pre>
<pre>$curl "http://localhost:7101/admin/executiongroup/test/properties"
&lt;?xml version="1.0"?&gt;
&lt;brokerResponse brokerName="MB8BROKER" completionCode="ok"&gt;
&lt;Name&gt;test&lt;/Name&gt;&lt;ShortDescription&gt;&lt;/ShortDescription&gt;&lt;LongDescription&gt;&lt;/LongDescription&gt;
&lt;Type&gt;ExecutionGroup&lt;/Type&gt;&lt;UUID&gt;3adf66ca-3301-0000-0080-814338bb17bb&lt;/UUID&gt;&lt;FlowDebugPort&gt;0&lt;/FlowDebugPort&gt;
&lt;TraceNodes&gt;on&lt;/TraceNodes&gt;&lt;Running&gt;true&lt;/Running&gt;
&lt;/brokerResponse&gt;</pre>
</blockquote>
<p>&#8220;http://localhost:7101/admin/executiongroup/test/extendedproperties&#8221; will return a very large amount of information.</p>
<p>Several /admin paths also support recurse=true, for example to see everything deployed on your broker use &#8221;http://localhost:8080/admin?recurse=true&#8221;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This was only a brief introduction to Record and Replay in WMB 8, and there is much more detail in the normal documentation. Hopefully a future update to WMB will bring more power and functionality to this area, as well as some more database support. Obviously I can&#8217;t say what will be added, let alone when, but I hope you get some value out of what is there currently.</p>
<p><em>edit 16/01/12 &#8211; corrections as supplied by Sebastian</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2012/01/06/message-broker-v8-record-replay-and-rest/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Message Broker v8 with MySQL</title>
		<link>http://www.strangeparty.com/2011/12/15/message-broker-v8-with-mysql/</link>
		<comments>http://www.strangeparty.com/2011/12/15/message-broker-v8-with-mysql/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 09:22:30 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Message Broker]]></category>
		<category><![CDATA[My Job]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[messagebroker]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[odbc]]></category>
		<category><![CDATA[wmb]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=884</guid>
		<description><![CDATA[<p>Now that you know that you can use Message Broker v8 on Ubuntu for development, you may be wondering if you can use some of the databases that are more common on Linux, such as MySQL. You can!</p> <p>IBM WebSphere Message Broker now uses UnixODBC to connect to many databases. Though not supported by IBM, <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/12/15/message-broker-v8-with-mysql/">Message Broker v8 with MySQL</a></span>]]></description>
			<content:encoded><![CDATA[<p>Now that you know that you can use <a href="http://www.strangeparty.com/2011/12/14/websphere-message-broker-on-ubuntu/">Message Broker v8 on Ubuntu</a> for development, you may be wondering if you can use some of the databases that are more common on Linux, such as MySQL. You can!</p>
<p>IBM WebSphere Message Broker now uses UnixODBC to connect to many databases. Though not supported by IBM, you can actually connect to MySQL from Message Broker using UnixODBC.</p>
<p><span id="more-884"></span></p>
<p>If you are on Ubuntu, you can install the MySQL UnixODBC dirver and the MySQL server with apt-get:</p>
<blockquote>
<pre>apt-get install libmyodbc mysql-server</pre>
</blockquote>
<p>Your environment variable <em>$ODBCINI</em> should point to your <em>odbc.ini</em>, mine points to /var/mqsi/odbc/odbc.ini and the base file was copied from <em>/opt/IBM/mqsi/8.0.0.0/ODBC/unixodbc/odbc.ini</em></p>
<p>You need to set a database definition for a mysql database, something like the following (assuming &#8220;wmb&#8221; is the name of your MySQL database created later)</p>
<blockquote>
<pre>[MYSQL]
Description     = MYSQL DB
Driver          = MySQL
Database        = wmb
Server          = 127.0.0.1
Port            = 3306</pre>
</blockquote>
<p>You also need to make sure your <em>$ODBCSYSINI</em> points to the folder (not the file) where your <em>odbcinst.ini</em> file has been copied to. Mine is set to <em>/var/mqsi/odbc</em> and the <em>odbcinst.ini</em> file was copied from <em>/opt/mqsi/8.0.0.0/ODBC/unixodbc/odbcinst.ini</em>, you also need to add a definition to explain to UnixODBC how to connect to a mysql database</p>
<p>The following should be enough to get UnixODBC working with MySQL</p>
<blockquote>
<pre>#Sample from package libmyodbc
[MySQL]
Description     = MySQL driver
Driver          = /usr/lib/odbc/libmyodbc.so
Setup           = /usr/lib/odbc/libodbcmyS.so
CPTimeout       =
CPReuse         =</pre>
</blockquote>
<p>Now create a mysql database (<em>mysqladmin create wmb</em>). You may need to GRANT some permissions to your user in MySQL, or add yourself to the mysql group and logout and back in again.</p>
<p>You can now check the database connection using the WMB mqsicvp command, which will also describe which database functions are available:</p>
<pre>mqsicvp -n MYSQL -u anton -p password</pre>
<pre>BIP8270I: Connected to Datasource 'MYSQL' as user 'anton'. The datasource platform is 'MySQL', version '5.1.58-1ubuntu1'.
===========================
databaseProviderVersion      = 5.1.58-1ubuntu1
driverVersion                = 05.01.0006
driverOdbcVersion            = 03.51
driverManagerVersion         = 03.52.0002.0002
driverManagerOdbcVersion     = 03.52
databaseProviderName         = MySQL
datasourceServerName         = 127.0.0.1 via TCP/IP
databaseName                 = wmb
odbcDatasourceName           = MYSQL
driverName                   = libmyodbc5.so
supportsStoredProcedures     = Yes
procedureTerm                = stored procedure
accessibleTables             = No
accessibleProcedures         = No
identifierQuote              = `
specialCharacters            = None
describeParameter            = No
schemaTerm                   =
tableTerm                    = table
sqlSubqueries                = 31
activeEnvironments           = 0
maxDriverConnections         = 0
maxCatalogNameLength         = 192
maxColumnNameLength          = 192
maxSchemaNameLength          = 0
maxStatementLength           = 8192
maxTableNameLength           = 192
supportsDecimalType          = Yes
supportsDateType             = Yes
supportsTimeType             = No
supportsTimeStampType        = No
supportsIntervalType         = No
supportsAbsFunction          = Yes
supportsAcosFunction         = Yes
supportsAsinFunction         = Yes
supportsAtanFunction         = Yes
supportsAtan2Function        = Yes
supportsCeilingFunction      = Yes
supportsCosFunction          = Yes
supportsCotFunction          = Yes
supportsDegreesFunction      = Yes
supportsExpFunction          = Yes
supportsFloorFunction        = Yes
supportsLogFunction          = Yes
supportsLog10Function        = Yes
supportsModFunction          = Yes
supportsPiFunction           = Yes
supportsPowerFunction        = Yes
supportsRadiansFunction      = Yes
supportsRandFunction         = Yes
supportsRoundFunction        = Yes
supportsSignFunction         = Yes
supportsSinFunction          = Yes
supportsSqrtFunction         = Yes
supportsTanFunction          = Yes
supportsTruncateFunction     = Yes
supportsConcatFunction       = Yes
supportsInsertFunction       = Yes
supportsLcaseFunction        = Yes
supportsLeftFunction         = Yes
supportsLengthFunction       = Yes
supportsLTrimFunction        = Yes
supportsPositionFunction     = Yes
supportsRepeatFunction       = Yes
supportsReplaceFunction      = Yes
supportsRightFunction        = Yes
supportsRTrimFunction        = Yes
supportsSpaceFunction        = Yes
supportsSubstringFunction    = Yes
supportsUcaseFunction        = Yes
supportsExtractFunction      = Yes
supportsCaseExpression       = Yes
supportsCastFunction         = Yes
supportsCoalesceFunction     = Yes
supportsNullIfFunction       = Yes
supportsConvertFunction      = No
supportsSumFunction          = Yes
supportsMaxFunction          = Yes
supportsMinFunction          = Yes
supportsCountFunction        = Yes
supportsBetweenPredicate     = Yes
supportsExistsPredicate      = Yes
supportsInPredicate          = Yes
supportsLikePredicate        = Yes
supportsNullPredicate        = Yes
supportsNotNullPredicate     = Yes
supportsLikeEscapeClause     = Yes
supportsClobType             = Yes
supportsBlobType             = Yes
charDatatypeName             = char
varCharDatatypeName          = varchar
longVarCharDatatypeName      = long varchar
clobDatatypeName             = N/A
timeStampDatatypeName        = N/A
binaryDatatypeName           = binary
varBinaryDatatypeName        = varbinary
longVarBinaryDatatypeName    = long varbinary
blobDatatypeName             = N/A
intDatatypeName              = integer
doubleDatatypeName           = double
varCharMaxLength             = 0
longVarCharMaxLength         = 0
clobMaxLength                = 0
varBinaryMaxLength           = 0
longVarBinaryMaxLength       = 0
blobMaxLength                = 0
timeStampMaxLength           = 0
identifierCase               = Mixed
escapeCharacter              = \
longVarCharDatatype          = -1
clobDatatype                 = 0
longVarBinaryDatatype        = -4
blobDatatype                 = 0

BIP8273I: The following datatypes and functions are not natively 
supported by datasource 'MYSQL' using this ODBC driver:
Unsupported datatypes: 'TIME, TIMESTAMP, INTERVAL' Unsupported functions: 'CONVERT'</pre>
<pre>Examine the specific datatypes and functions not supported
natively by this datasource using this ODBC driver.
When using these datatypes and functions within ESQL, the
associated data processing is done within WebSphere Message
Broker rather than being processed by the database provider.  

Note that "functions" within this message can refer to functions or predicates. 

BIP8071I: Successful command completion.</pre>
<p>There &#8211; done! Now you can use MySQL with WebSphere Message Broker on Ubuntu. Don&#8217;t forget to set the database password with <em>mqsisetdbparms</em> before trying to actually connect from your database nodes.</p>
<p>Also, the name of the database according to WMB is &#8220;MYSQL&#8221; as that is what I defined in the odbc.ini. The name of the database according to mysql is &#8220;wmb&#8221;. They don&#8217;t need to be different, but it might help having unique names if you are trying to track down a database connection issue.</p>
<p>Of course, the mysql database server does not need to be local to the broker &#8211; The mysql odbc driver should allow you connect to any accessible tcpip mysql server.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/12/15/message-broker-v8-with-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebSphere Message Broker on Ubuntu</title>
		<link>http://www.strangeparty.com/2011/12/14/websphere-message-broker-on-ubuntu/</link>
		<comments>http://www.strangeparty.com/2011/12/14/websphere-message-broker-on-ubuntu/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 09:22:13 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Message Broker]]></category>
		<category><![CDATA[My Job]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[messagebroker]]></category>
		<category><![CDATA[mq]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wmb]]></category>
		<category><![CDATA[wmq]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=714</guid>
		<description><![CDATA[<p>WebSphere Message Broker v8 now supports Ubuntu for development systems (i.e. not production use) - http://www-01.ibm.com/support/docview.wss?uid=swg27023600#Ubuntu</p> <p>I have been running MQ and Message Broker on Ubuntu and Debian since shortly after I joined IBM in 2005, and it seems there are lots of other people doing this too despite it not being a supported platform before <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/12/14/websphere-message-broker-on-ubuntu/">WebSphere Message Broker on Ubuntu</a></span>]]></description>
			<content:encoded><![CDATA[<p>WebSphere Message Broker v8 now supports Ubuntu for development systems (i.e. not production use) - <a href="http://www-01.ibm.com/support/docview.wss?uid=swg27023600#Ubuntu">http://www-01.ibm.com/support/docview.wss?uid=swg27023600#Ubuntu</a></p>
<p>I have been running MQ and Message Broker on Ubuntu and Debian since shortly after I joined IBM in 2005, and it seems there are <a href="http://www.google.co.uk/search?q=mq+on+ubuntu">lots of other people doing this too</a> despite it not being a supported platform before now.</p>
<p>Lots of people have advice on how to install MQ and WMB, and it is worth mentioning them in case you have problems.</p>
<p><a href="http://www.reidmorrison.com/linux/install-websphere-mq-on-ubuntu">http://www.reidmorrison.com/linux/install-websphere-mq-on-ubuntu</a></p>
<p><a href="http://www.gefira.pl/blog/2010/07/03/websphere-mq-and-ubuntu-howto/">http://www.gefira.pl/blog/2010/07/03/websphere-mq-and-ubuntu-howto/</a></p>
<p><a href="http://blog.herbert.groot.jebbink.nl/2009/06/wmb-61-ubuntu-904.html">http://blog.herbert.groot.jebbink.nl/2009/06/wmb-61-ubuntu-904.html</a></p>
<p>The best advice I can give for installing MQ and WMB on Ubuntu is:</p>
<ul></ul>
<ul>
<li>change the /bin/sh symlink to point to /bin/bash &#8211; MQ Doesn&#8217;t like installing with dash as the default shell.</li>
<p>
</ul>
<ul>
<li>use rpm to install MQ &#8211; Alien is a bit of a hack, and does not work well. You will need to use the &#8220;&#8211;force-debian&#8221; flag on rpm to make it install.</li>
<p>
</ul>
<ul>
<li>One other thing which might help is to run the mqlicense.sh script with the &#8216;-console&#8217; flag as it may not find your X applications properly.</li>
<p>
</ul>
<p>Some user&#8217;s have noticed that chown on Debian and Ubuntu strips the setuid bit from the binaries (Debian and Ubuntu consider leaving setuid set on an executable when you change it&#8217;s owner a security flaw, whereas Redhat and SuSE appear not to) so you may need to fix the permissions (best to check the permissions of the same level of MQ from a RHEL or SLES box and set them the same) though I have not seen this with recent versions of MQ.</p>
<p>Message Broker v8 installs quite happily on Ubuntu. The only issues that I know of are that some of the eclipse based gui applications do not draw everything correctly. This is a known eclipse-GTK bug, and is more common on releases after Lucid Lynx (10.04). A workaround is to set the environment variable  <em>GDK_NATIVE_WINDOWS=1</em></p>
<p>Update 05/01/12 &#8211; I have just noticed that the script &#8216;mqsicreateworkpath&#8217; which is used to initialise /var/mqsi correctly still uses ksh. Either install ksh on your system or edit the script to say bash in the first line instead of ksh (it should work fine then)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/12/14/websphere-message-broker-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Frequently Asked Questions about the GNU GPL</title>
		<link>http://www.strangeparty.com/2011/12/08/frequently-asked-questions-about-the-gnu-gpl/</link>
		<comments>http://www.strangeparty.com/2011/12/08/frequently-asked-questions-about-the-gnu-gpl/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 11:18:45 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[IBM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rights]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[patents]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=250</guid>
		<description><![CDATA[<p>I have been flicking through the following FAQ on the GNU GPL: Frequently Asked Questions about the GNU GPL &#8211; GNU Project &#8211; Free Software Foundation (FSF). I am trying to understand the risks that we are told about regularly in IBM of working with/on Open Source code.</p> <p>I have to say that most of <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/12/08/frequently-asked-questions-about-the-gnu-gpl/">Frequently Asked Questions about the GNU GPL</a></span>]]></description>
			<content:encoded><![CDATA[<p>I have been flicking through the following FAQ on the GNU GPL: <a href="http://www.gnu.org/copyleft/gpl-faq.html">Frequently Asked Questions about the GNU GPL &#8211; GNU Project &#8211; Free Software Foundation (FSF)</a>. I am trying to understand the risks that we are told about regularly in IBM of working with/on Open Source code.</p>
<p>I have to say that most of the risks are rather undefined, and no real examples are given. I am having trouble figuring out why IBM is so scared of its employees working with Open Source, and yet at the same time encouraging it (I run Debian on my laptop, and in fact run a Debian server distributing internal tools packaged specially for other Debian users).</p>
<p>The one big concern is of course patents. Personal views on software patents aside, if I were to code a patented idea into some GPL&#8217;d code and release it (as an IBM employee) then quite likely that patent will be considered GPL&#8217;d and could be used by others &#8211; the extent of patents in GPL&#8217;d code is untested in court, hence the reason for v3 of the GPL, which will probably explicitly state that any patents are given away under the terms of the GPL if in GPL&#8217;d code.</p>
<p>However, even if not modifying the code there is still a huge concern about working with it. Even releasing code that is dynamically linked against a LGPL&#8217;d library is incredibly hard to get approved. Why should it be? The FAQ above makes clear that if the library is LGPL&#8217;d, then dynamic linking (i.e. using a JAR file in Java) means that the library source must be available and some reverse engineering of the interaction between the two is allowed (in case someone wanted to rewrite the library). Your code does not have to be Open Sourced. Is it simply that shipping the source code is too much effort? Surely if I use a prebuilt JAR, and dump a zip of the corresponding source of a LGPL&#8217;d library in the zip I am shipping then that is it. I am complying with the terms of the GPL.</p>
<p>The only thing I can think of is the other side of Patents &#8211; somebody else has a patent on something in the GPL code, but the authors of the GPL code were not aware of this. If IBM were to ship GPL&#8217;d code that a competitor had a Patent on part of then indeed they would be liable for infringement, not just the author of the code. Is this risk likely? Well, SuSE have just signed a deal with Microsoft for this reason, but RedHat and Ubuntu have declined the deal. Maybe with the GPLv3 this will be less of a problem, as if another company releases GPL code then they will be explicitely releasing any patents on it too.</p>
<p>What if the patent holder is another third party. IBM could still be in trouble if a competitor finds they have a patent on some GPL&#8217;d code we are shipping. They won&#8217;t bother suing small linux vendors, but IBM has lots of money to claim from, that would be worth going to court for. Could they claim only for IBM and not all the little guys who have already been using it?</p>
<p>Is it too much risk to work on the fact that we could always change the code to avoid the patent at a later date?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/12/08/frequently-asked-questions-about-the-gnu-gpl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle-ing a desire to read</title>
		<link>http://www.strangeparty.com/2011/12/07/kindle-ing-a-desire-to-read/</link>
		<comments>http://www.strangeparty.com/2011/12/07/kindle-ing-a-desire-to-read/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 14:12:56 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Reading]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[fiction]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=818</guid>
		<description><![CDATA[<p>This post was originally drafted in May when I actually bought my kindle &#8211; I finally got round to actually publishing it&#8230;</p> <p>Earlier this year I finally gave in. I felt a moment of regret about buying into an enormous DRM machine as I clicked purchase on my new Amazon Kindle 3G. I felt a <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/12/07/kindle-ing-a-desire-to-read/">Kindle-ing a desire to read</a></span>]]></description>
			<content:encoded><![CDATA[<p><em>This post was originally drafted in May when I actually bought my kindle &#8211; I finally got round to actually publishing it&#8230;</em></p>
<p><em></em>Earlier this year I finally gave in. I felt a moment of regret about buying into an enormous DRM machine as I clicked purchase on my new Amazon Kindle 3G. I felt a little dirty because of the DRM. Still, I wasn&#8217;t buying Sony so I can live with it.</p>
<p>Then theft next day it arrived. So simply packaged, entirely in recycled cardboard, that I forgot about that dirty DRM feeling and tore open the packaging. I pulled out my new kindle and just sat there admiring the instructions showing on the screen. A screen which could show that image for months without charging. It was beautiful.</p>
<p>DRM aside the kindle is an incredible thing.</p>
<p>There are a few hiddenkindle gems including shortcut keys, minesweeper and how to change the screensaver pictures at the following site: <a href="http://blog.diannegorman.net/2010/09/kindle-3-keyboard-shortcuts-et-al/">From down the hill : Kindle 3 Keyboard Shortcuts et al</a>.</p>
<p>Since then I have been averaging just over a book a month. Some were free, some were £0.71, most are around the £5/£6 mark and one was nearly £10. DRM aside, I have been reading way more than I normally do, as getting to the end of a book is not such an obstacle. The hardest part is choosing what to read next, but while in the middle of a series it is only a 15 second delay to get on to the next book.</p>
<p>I am looking forward to UK lending and eLibraries which support Kindle. Though even without that, I am still reading more than I ever used to and am really loving the fact that I have so much available to read with so little effort. In some ways it is slightly worrying how easy it is to purchase a new book, but at least they are generally cheap.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/12/07/kindle-ing-a-desire-to-read/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Upgrading cyanogenmod</title>
		<link>http://www.strangeparty.com/2011/12/05/upgrading-cyanogenmod/</link>
		<comments>http://www.strangeparty.com/2011/12/05/upgrading-cyanogenmod/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 13:48:00 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cyangenmod]]></category>
		<category><![CDATA[roms]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=887</guid>
		<description><![CDATA[<p>I previously wrote about rooting a HTC Desire and installing CyanogenMod 7. A month or so ago, a new CyanogenMod rom was released, and I finally found the time to upgrade it.</p> <p>Of course I first did a full backup, as described in my previous post, using the recover mod.</p> <p>I first tried updating the <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/12/05/upgrading-cyanogenmod/">Upgrading cyanogenmod</a></span>]]></description>
			<content:encoded><![CDATA[<p>I previously wrote about<a href="http://www.strangeparty.com/2011/06/23/cyanogenmod-on-htc/"> rooting a HTC Desire and installing CyanogenMod 7</a>. A month or so ago, a new <a href="http://www.cyanogenmod.com/">CyanogenMod</a> rom was released, and I finally found the time to upgrade it.</p>
<p>Of course I first did a full backup, as described in my previous post, using the recover mod.</p>
<p>I first tried updating the rom via <a href="https://market.android.com/details?id=com.koushikdutta.rommanager&amp;hl=en">RomManager</a>, which is apparently the preferred way to upgrade CyangonMod roms. Updating the Clockwork Recovery Mod went fine, and the app allows very easy downloading of alternate roms, however actually intalling did not go so well. It failed due to some error in the upgrade script. I decided to simply report the error and move on to a manual upgrade.</p>
<p>Manually updating was pretty much the same as installing the roms in my previous post. Using the reovery mod I installed the new Rom from the zip which was downloaded via RomManager, followed by the Google Aps zip. Then I cleared the Dalvik cache, as I wasnt sure if it would interfere (it doesn&#8217;t hurt to clear it anyway).</p>
<p>The update was quite smooth, and after a reboot or two nearly everything was working as before, though it took a while for all the app icons to come back on my desktops. As I did not reset any application data I did not have to reinstall any of my apps or restore the data.</p>
<p>The only issue I found is that the calendar would crash upon starting. I installed <a href="https://market.android.com/details?id=com.nolanlawson.logcat">CatLog</a>, which allows you to view the android system logs, and very quickly found a stack trace from the calendar app saying it could not find a database column.<br />
<img style="display: block; margin-right: auto; margin-left: auto;" src="http://www.strangeparty.com/wordpress/uploads/2011/12/wpid-screenshot-1323091961687.png" alt="image" width="288" height="480" /><br />
I guessed that the storage format must have changed, and as it is all synced from my Google calendar anyway, I thought I would just clear the data and let it resync. Under System-&gt;Applications I found the app CalendarStorage, and simply deleted all its data. After a moment to resync from the cloud, everything looks fine.</p>
<p>The latest CyanogenMod 7.1 seems to have some fixes I have been waiting for. In particular, I quite liked the dual lockscreen. A shorter timeout for a swype unlock, where the lockscreen has a music widget. The longer timeout is the unlock pattern. This was not possible in the older CyanogenMod 7.0.3 as a bug seemed to only show the pattern unlock screen.</p>
<p>There is quite a list of new fixes, but I don&#8217;t think I needed any of them. One new thing I noticed is that holding down the power button gives not only the usual shutdown/reboot options, but also a screenshot option, which is quite useful and removes the need for a separate app to do this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/12/05/upgrading-cyanogenmod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It feels like a new house!</title>
		<link>http://www.strangeparty.com/2011/11/03/it-feels-like-a-new-house/</link>
		<comments>http://www.strangeparty.com/2011/11/03/it-feels-like-a-new-house/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 09:55:49 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=874</guid>
		<description><![CDATA[<p>We had some trees removed yesterday, mostly because of their proximity to the house, but they did block a lot of light. Some of the before and after shots really give a striking contrast of how the trees change the property.</p> <p>We need some time to get used to the new look, but will probably <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/11/03/it-feels-like-a-new-house/">It feels like a new house!</a></span>]]></description>
			<content:encoded><![CDATA[<p>We had some trees removed yesterday, mostly because of their proximity to the house, but they did block a lot of light. Some of the before and after shots really give a striking contrast of how the trees change the property.</p>
<p>We need some time to get used to the new look, but will probably end up planting something, probably some trees (oh, the irony of getting rid of trees to plant some), though certainly nothing like the ones we had. Something smaller and more decorative maybe, if it doesn&#8217;t block too much light. Of course keeping it pruned is probably the most important thing to stop them overgrowing like the old ones.</p>
<p>&nbsp;</p>
<p><a title="P1010144" href="http://farm7.static.flickr.com/6233/6308790028_f9a14391ec_b.jpg"><img src="http://farm7.static.flickr.com/6233/6308790028_f9a14391ec_m.jpg" alt="P1010144" width="240" height="180" border="0" /></a> <a title="P1010151" href="http://farm7.static.flickr.com/6219/6308791736_6554e52d79_b.jpg"><img src="http://farm7.static.flickr.com/6219/6308791736_6554e52d79_m.jpg" alt="P1010151" width="240" height="180" border="0" /></a></p>
<p><a title="P1010143" href="http://farm7.static.flickr.com/6117/6308269365_584ccdd530_b.jpg"><img src="http://farm7.static.flickr.com/6117/6308269365_584ccdd530_m.jpg" alt="P1010143" width="240" height="180" border="0" /></a> <a title="P1010152" href="http://farm7.static.flickr.com/6092/6308790184_ce1fe7559f_b.jpg"><img src="http://farm7.static.flickr.com/6092/6308790184_ce1fe7559f_m.jpg" alt="P1010152" width="240" height="180" border="0" /></a></p>
<p>&nbsp;</p>
<p><a title="P1010145" href="http://farm7.static.flickr.com/6238/6308790844_e514eb985f_b.jpg"><img src="http://farm7.static.flickr.com/6238/6308790844_e514eb985f_m.jpg" alt="P1010145" width="180" height="240" border="0" /></a> <a title="P1010150" href="http://farm7.static.flickr.com/6056/6308270291_32f88095cb_b.jpg"><img src="http://farm7.static.flickr.com/6056/6308270291_32f88095cb_m.jpg" alt="P1010150" width="180" height="240" border="0" /></a></p>
<p>&nbsp;</p>
<p>There are also a few shots partway through:</p>
<p>&nbsp;</p>
<p><a title="P1010147" href="http://farm7.static.flickr.com/6236/6308791276_9c9c094f02_b.jpg"><img src="http://farm7.static.flickr.com/6236/6308791276_9c9c094f02_m.jpg" alt="P1010147" width="180" height="240" border="0" /></a> <a title="P1010146" href="http://farm7.static.flickr.com/6056/6308791860_e2dfdbc08d_b.jpg"><img src="http://farm7.static.flickr.com/6056/6308791860_e2dfdbc08d_m.jpg" alt="P1010146" width="240" height="180" border="0" /></a></p>
<p><a title="P1010149" href="http://farm7.static.flickr.com/6050/6308791052_d1926c8624_b.jpg"><img src="http://farm7.static.flickr.com/6050/6308791052_d1926c8624_m.jpg" alt="P1010149" width="240" height="180" border="0" /></a> <a title="P1010148" href="http://farm7.static.flickr.com/6042/6308269197_8fbbfb17d9_b.jpg"><img src="http://farm7.static.flickr.com/6042/6308269197_8fbbfb17d9_m.jpg" alt="P1010148" width="240" height="180" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/11/03/it-feels-like-a-new-house/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reduce wordpress comment spam with .htaccess rules</title>
		<link>http://www.strangeparty.com/2011/10/02/reduce-wordpress-comment-spam-with-htaccess-rules/</link>
		<comments>http://www.strangeparty.com/2011/10/02/reduce-wordpress-comment-spam-with-htaccess-rules/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 07:33:36 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=866</guid>
		<description><![CDATA[<p>I get quite a lot of spam comments on my wordpress blog, and even with things like akismet to try and detect and block spam I still get a lot. Some people have suggested using a mod_rewrite rule in apache to detect very obvious attempts to post unsolicited comments. The basic idea is that if <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/10/02/reduce-wordpress-comment-spam-with-htaccess-rules/">Reduce wordpress comment spam with .htaccess rules</a></span>]]></description>
			<content:encoded><![CDATA[<p>I get quite a lot of spam comments on my wordpress blog, and even with things like akismet to try and detect and block spam I still get a lot. Some people have suggested using a mod_rewrite rule in apache to detect very obvious attempts to post unsolicited comments. The basic idea is that if anyone tries to submit a comment and they have not set a referrer in the HTTP headers of your site, then they probably aren&#8217;t doing anything near normal browsing. Also, a blank user agent is also only common if you have gone to the effort of not setting one.</p>
<p>Based on the mod_rewrite hack from<a href=" http://www.wprecipes.com/reduce-spam-on-your-wordpress-blog-by-using-htaccess"> http://www.wprecipes.com/reduce-spam-on-your-wordpress-blog-by-using-htaccess</a>, I have my own slightly different version</p>
<blockquote>
<pre>&lt;IfModule mod_rewrite.c&gt;
  RewriteEngine On

  RewriteCond %{REQUEST_METHOD} POST
  RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
  RewriteCond %{HTTP_REFERER} !.*YOURSITE\.COM.* [OR]
  RewriteCond %{HTTP_USER_AGENT} ^$
  RewriteRule .* / [R=301,L]
&lt;/IfModule&gt;</pre>
</blockquote>
<p>This basically rewrites the url back to / (edit the last line if you want to set it to somewhere else). The rule only works if the request is a POST request and for the wp-comments-post.php file, and either the referrer url was not your site or the user agent is empty. I can&#8217;t think of anything that sends blank user agents, so this should be pretty safe. All browsers should also send the referrer url, so again this should be pretty safe.</p>
<p>Don&#8217;t forget to change &#8220;YOURSITE\.COM&#8221; to your domain name</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/10/02/reduce-wordpress-comment-spam-with-htaccess-rules/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guest presenting on the Ubuntu UK PodCast</title>
		<link>http://www.strangeparty.com/2011/09/28/guest-presenting-on-the-ubuntu-uk-podcast/</link>
		<comments>http://www.strangeparty.com/2011/09/28/guest-presenting-on-the-ubuntu-uk-podcast/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 20:41:00 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[IBM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[southackton]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[UUPC]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/2011/09/28/guest-presenting-on-the-ubuntu-uk-podcast/</guid>
		<description><![CDATA[<p>I was a guest presenter on this weeks Ubuntu UK PodCast. I talked about Southackton, and IBM&#8217;s use of Ubuntu on the desktop. Listen to the podcast at http://t.co/vVL5M3YJ </p> ]]></description>
			<content:encoded><![CDATA[<p>I was a guest presenter on this weeks Ubuntu UK PodCast. I talked about Southackton, and IBM&#8217;s use of Ubuntu on the desktop.<br />
Listen to the podcast at <a href="http://t.co/vVL5M3YJ"><br />
http://t.co/vVL5M3YJ</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/09/28/guest-presenting-on-the-ubuntu-uk-podcast/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rooting and upgrading a HTC Desire to android 2.3 (CyanogenMod 7)</title>
		<link>http://www.strangeparty.com/2011/06/23/cyanogenmod-on-htc/</link>
		<comments>http://www.strangeparty.com/2011/06/23/cyanogenmod-on-htc/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 20:20:28 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[htc]]></category>
		<category><![CDATA[phone]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=848</guid>
		<description><![CDATA[<p>I started writing this as I was actually doing this to my phone. The problem I found with most existing instructions is they seem to slightly contradict other instructions you find. Many have steps which are not well laid out and often don&#8217;t give a reason for doing things which can be a bit annoying. Often the <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/06/23/cyanogenmod-on-htc/">Rooting and upgrading a HTC Desire to android 2.3 (CyanogenMod 7)</a></span>]]></description>
			<content:encoded><![CDATA[<p>I started writing this as I was actually doing this to my phone. The problem I found with most existing instructions is they seem to slightly contradict other instructions you find. Many have steps which are not well laid out and often don&#8217;t give a reason for doing things which can be a bit annoying. Often the instructions are from ancient Android OS version days, so steps like installing hboot versions, and recovery roms are now all covered with the one unrevoked3 step, but not all instructions are clear that this is the case.</p>
<p>These instructions are heavily based on the instructions from CyanogenMod 7 for HTC Desire:<a href=" http://wiki.cyanogenmod.com/wiki/HTC_Desire_(GSM):_Full_Update_Guide"> http://wiki.cyanogenmod.com/wiki/HTC_Desire_(GSM):_Full_Update_Guide</a> but also some other sites I found along the way, often for other phone models so only parts apply. I also had some direct feedback from various IRC channels.</p>
<p>The following links were useful to me, so I mention in case you want to read some more:<br />
<a href="http://forum.xda-developers.com/forumdisplay.php?f=628">http://forum.xda-developers.com/forumdisplay.php?f=628</a><br />
<a href="http://forum.xda-developers.com/showthread.php?s=ea2964d1e59f99d394ca758037ee6bc1&amp;t=696189">http://forum.xda-developers.com/showthread.php?s=ea2964d1e59f99d394ca758037ee6bc1&amp;t=696189</a><br />
<a href="http://forum.xda-developers.com/showthread.php?t=788044">http://forum.xda-developers.com/showthread.php?t=788044</a></p>
<h2>1. Preparations</h2>
<p>The first thing that may be of use, especially if you are checking other instructions, is to grab a few version numbers of the rom levels on your phone:</p>
<p>power off, hold vol down and power &#8211; get hboot version page, includes radio version<br />
mine was hboot 0.93.0001<br />
and my radio version is 5.11.05.27<br />
hboot version shouln&#8217;t matter for unrevoked3 though unless on very new phone like EVO4<br />
You can also check the radio version from &#8220;Settings-&gt;About Phone-&gt;Software information&#8221;.<br />
You should see &#8220;Basebane version&#8221;, mine is 32.49.00.32U_5.11.05.27<br />
The last part of that, after the _, is the radio rom version</p>
<h2>2. Rooting your phone</h2>
<p>Go to <a href="http://unrevoked.com/recovery/">http://unrevoked.com/recovery</a>/ and download the rooting program.</p>
<p>This uses an exploit in the phone to install a new recovery rom, the &#8220;clockwork recovery&#8221; rom, which can then be used to do complete phone backups and install new roms.</p>
<p>You will need the &#8220;usb debugging&#8221; enabled on the phone, and the phone connected only to charge, not as disk access or tethering</p>
<p>It is straight forward on linux (run the downloaded file, and follow the instructions on screen), but I believe on windows there are soe extra drivers to install so check the unrevoked site for more instructions if you are on windows. .</p>
<p>I tried unrevoked3 with only 14mb available, and got &#8220;internal error: installing package failed&#8221;. Getting the space up to 25mb and it worked fine (I just uninstalled the gmail updates)</p>
<h2>3. Backup your current OS (nandroid backup)</h2>
<p>Reboot into the hboot screen as in step 1 for version numbers, then use use vol up/down to select &#8220;recovery&#8221;. The power button acts as the &#8220;ok&#8221; button here.</p>
<p>This boots the clockwork recovery rom which was installed when you ran unrevoked.</p>
<p>Then use trackball to select backup.</p>
<p>This does a complete backup to SD, also referrred to as a &#8220;nandroid backup&#8221; which should include the system OS, all installed apps and user data.<br />
You probably need as much space as your phone has on internal memory (512mb for desire).<br />
This will take a little while, so do it on power or a full battery.</p>
<p>The backup should appear in your sdcard in /sdcard/clokworkmod/backups/</p>
<p>Then press back and select the reboot option.</p>
<h2>4. Backup apps and app data for migration</h2>
<p>Why do you need this if you just did a complete backup? Well, when you install the new OS you will be erasing everything from the internal memory, so this backs up your apps so you can install them again, and also the app-data so you don&#8217;t lose it all.</p>
<p>I used the free version of &#8220;<a href="https://market.android.com/details?id=com.keramidas.TitaniumBackup&amp;feature=search_result">Titanium Backup</a>&#8221; but &#8220;<a href="https://market.android.com/details?id=com.metago.astro&amp;feature=search_result">Astro File manager</a>&#8221; has been suggested too, and it looks like &#8220;<a href="https://market.android.com/details?id=com.seasmind.android.gmappmgr&amp;feature=search_result">Gemini App manager</a>&#8221; can do this as well.<br />
It is pretty straightforward, but see <a href="http://www.incredibleforum.com/forum/htc-incredible-hacks/7893-titanium-backup-how.html">http://www.incredibleforum.com/forum/htc-incredible-hacks/7893-titanium-backup-how.html</a> if you want specific steps.</p>
<h2>5. Backup your whole SD card</h2>
<p>Ok, maybe I am paranoid, but at this point I plugged in my phone via USB and zipped up the entire SD card onto my computer. This way I have a backup of my SD card, which includes all the above backups, so if anything goes badly wrong I still have the restore files</p>
<p>I had to disable the usb debug mode to get the disk to mount</p>
<h2>6. Update radio rom</h2>
<p>Before applying the cyanogenmod, or any other, you may need to update your radio rom version.</p>
<p>According to <a href="http://wiki.cyanogenmod.com/wiki/HTC_Desire_(GSM):_Full_Update_Guide">http://wiki.cyanogenmod.com/wiki/HTC_Desire_(GSM):_Full_Update_Guide</a> the version of mine is good enough for CM7, so I didn&#8217;t update it.</p>
<h2>7. Now install new rom</h2>
<p>Installing the mod is straightfowrard (there are<a href="http://wiki.cyanogenmod.com/wiki/HTC_Desire_(GSM):_Full_Update_Guide"> instructions in the first link of this page</a>).</p>
<p>Basically download the mod, and google apps if you want it, and drop the zip files in the root folder of the SD card.<br />
Then use the clockwork recovery mod as we did earlier and select &#8220;Wipe data/factory reset&#8221; to clear the flash (I have seen reports that this may not be required, but as it is such a large change of version numbers, I decided to do a full wipe), then &#8220;Wipe cache partition&#8221; to clear that too.</p>
<p>Then simply select &#8220;install zip from SD card&#8221; and install the new mod, and google apps if you wanted it.</p>
<p>Alternatively, you can use <a href="https://market.android.com/details?id=com.koushikdutta.rommanager">Rom Manager</a> to do it as an app.</p>
<p>After the reboot, use your chosen backup program to then restore all your apps and data, however read the next step first as you may find space to still be an issue.</p>
<h2>8. Space savings with CyanogenMod 7</h2>
<p>After rebooting into the new OS, I had over 100mb free for base image (out of 148mb capacity reported by OS). 83mb free after installing a similar set of google apps from the market.</p>
<p>After then restoring all my backed up apps and data I found out I only had 25mb free, which is only about 10mb better than on the original android 2.2 from HTC.</p>
<p>You will probably find you have to install an app to force apps to install on SD card by default. Note that CyanogenMod 7 has an option to force all apps there by default, but it will put apps with widgets on there, which breaks the widgets.</p>
<p><strong>There is a way to get even more space for apps with CM7:</strong></p>
<p>All you have to do is add an ext4 partition to your SD card and then install &#8220;<a href="https://market.android.com/details?id=ru.krikun.s2e">simple2ext</a>&#8221; from the android market.</p>
<p>This is a feature only available on the CyanogenMod 7 roms, and allows you to move all apps, app data, and caches to SD card. There is a performance hit for this, but it seems worth it.</p>
<p>I used a microSD adapter to plug in my SD card into my PC and used &#8220;gparted&#8221; on Ubuntu (a Live CD will do fine) to shrink the current partition and add an ext4 one<br />
without losing data (but you backed up above in any case, right?)</p>
<p>I created a 1GB partition and after installing simple2ext, I set it to move my apps and dalvik cache to the ext4 partition.</p>
<p>After a reboot I now have loads of space for apps to install to, about 80mb free despite installing another dozen apps without bothering to move them to SD.</p>
<p>To help you decide what to move, the Dalvik cache appears to be a binary cache for the Android implementation of Java. There is a performance hit to moving anything to SD unless you have quite a fast card (<a href="http://forum.xda-developers.com/showthread.php?t=1175707">http://forum.xda-developers.com/showthread.php?t=1175707</a> recommends ﻿minimum class 4, better yet a class 6). Mine is class 2, and I found that moving the application data seems to<br />
cause the phone to be very noticably slower, so it is probably best avoided unless you have a fast SD card.</p>
<p>Moving the Davlik cache did slow things down a little, but mostly only the boot time and first launch of an app. I decided that for an extra 80mb of space that I could live with that (I have also just ordered a new class 6 SD card, so that should help).</p>
<h2>Conclusions</h2>
<p>Rooting, and modding was actually incredibly simple. It sounds so scary, but I think it is actually very, very hard to mess it up to a point where you cannot just overwrite with a new mod (or your backup) and start again. Once you get to the nandoid backup point you have a very good recovery strategy!</p>
<p>I have loads more space, which is good, because counting the bytes is annoying. I now don&#8217;t have to worry about if I have space to install something.</p>
<p>You do lose the HTC apps and widgets, but I found I could live without them fairly easily (I haven&#8217;t used peep since I discovered TweetDeck, and that was my most used HTC app). If you miss the clock widget, search for &#8220;<a href="https://market.android.com/details?id=factory.widgets.SenseAnalogGlass&amp;feature=search_result">sense analog glass clock</a>&#8221; on the android market, that is a nice replacement for me. &#8220;<a href="https://market.android.com/details?id=dk.nicolai.buch.andersen.glasswidgets">glass widgets</a>&#8221; is a replacement calendar widget, which I now actually prefer.</p>
<p>The battery manager in the new rom is awesome compared to the old 2.2 one. It really shows where the battery is going. I think I possibly get longer battery life with this rom too.</p>
<p>I much prefer the android 2.3 native keyboard to the HTC sense one.</p>
<p>There are some niggles &#8211; I have a few gui glitches which cause me to reboot the phone every few weeks, but I am hoping they will be fixed in the next stable build (I have not been brave enough to try the nightly builds :-s )</p>
<p>Overall, I quite like the new UI though it did take some getting used to. The fact I dont have to worry about space is the biggest reason I will keep this rom, though it does sound like <a href="http://starburst.droidzone.in/">starburst rom</a> which is much closer to vanilla HTC sense branded android also allows the &#8220;data2sd&#8221; hack to get more space</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/06/23/cyanogenmod-on-htc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Time is short. (Or why piracy is not the problem)</title>
		<link>http://www.strangeparty.com/2011/05/10/time-is-short-or-why-piracy-is-not-the-problem/</link>
		<comments>http://www.strangeparty.com/2011/05/10/time-is-short-or-why-piracy-is-not-the-problem/#comments</comments>
		<pubDate>Tue, 10 May 2011 19:46:41 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=831</guid>
		<description><![CDATA[<p>We are constantly being bombarded by claims that the music and film industries are being destroyed by rampant piracy eating away at their profits. This whole argument really annoys me, and partly because of the following really well illustrated point.</p> <p class="wp-caption-text">Click to load</p> <p style="text-align: left;">I pay for a DVD and then waste loads <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/05/10/time-is-short-or-why-piracy-is-not-the-problem/">Time is short. (Or why piracy is not the problem)</a></span>]]></description>
			<content:encoded><![CDATA[<p>We are constantly being bombarded by claims that the music and film industries are being destroyed by rampant piracy eating away at their profits. This whole argument really annoys me, and partly because of the following really well illustrated point.</p>
<div class="wp-caption aligncenter" style="width: 330px"><a href="http://www.makeuseof.com/tech-fun/pirated-dvd-vs-legal-dvd/"><img title="Pirated DVD Vs. Legal DVD" src="http://main.makeuseoflimited.netdna-cdn.com/tech-fun/wp-content/uploads/2010/02/pirateddvd1.png" alt="" width="320" /></a><p class="wp-caption-text">Click to load</p></div>
<p style="text-align: left;">I pay for a DVD and then waste loads of time being told not to pirate DVDs. If I had pirated the DVD, I wouldn&#8217;t have had to put up with all that.</p>
<p>So how does that fit with a title of &#8220;Time is short&#8221;? Well&#8230; You may have noticed that I did not write a single blog post last month &#8211; I haven&#8217;t had the time. I also haven&#8217;t had the time to go to the cinema, the last film I saw was the penultimate Harry Potter and it not only cost an arm and a leg, but a drink and some nibbles nearly cost me the other arm.</p>
<p>I also have not bought much music in a while &#8211; I haven&#8217;t heard much I particularly like on the radio, and haven&#8217;t really had time to go out looking for anything new, so just stuck with my iPod. If I did buy music, it would probably be a digital download for only a few pounds per album.</p>
<p>You might have guessed that I haven&#8217;t bought a DVD in a while &#8211; My lovefilm subscription gives me two DVDs a month to watch, and that keeps me busy enough with a little trashy tv.</p>
<p>I <strong><em>have</em></strong> bought a few X-Box games, and am likely to buy some more &#8211; Quite shocking really, as they are about £40 or £45 each. So that is eating up a lot of my time as I work my way through Crysis 2 (which is a truly awesome game) and try to resist handing over my wallet Portal 2.</p>
<p>I am also hacking away at Arduinos, rebuiling my media PC and hanging out on twitter and facebook. I wish I could say I even read some of my friends blog&#8217;s, but sadly the only items in my reader feed being read are lolcats, failblog, dilbert and xkcd.</p>
<p>As I have already said my blog barely gets updated as it is.</p>
<p>I bought a kindle a few months ago, and so have been reading a lot of books, which really is fantastic and of course consumes huge amounts of my time.</p>
<p>And next month (or possibly sooner) I will be a father, so that will take away all the free time I had for all the above activities!</p>
<p>So where am I supposed to find the time to watch all these films and DVDs that the industry says are being pirated? Piracy is not the problem &#8211; Crap films, high prices and, yes, time. They are what is causing me to spend less money on films and music. Instead I am spending more on games, books, gadgets, toys, and soon children.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/05/10/time-is-short-or-why-piracy-is-not-the-problem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cactus flowers</title>
		<link>http://www.strangeparty.com/2011/03/26/cactus-flowers/</link>
		<comments>http://www.strangeparty.com/2011/03/26/cactus-flowers/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 16:22:34 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[cactus]]></category>
		<category><![CDATA[flowers]]></category>
		<category><![CDATA[macro]]></category>
		<category><![CDATA[yellow]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=821</guid>
		<description><![CDATA[<p>I finally got round to posting some photos I took last year of the cactus I have flowering. It has only done it twice in the ~6 years I have had it, and this time it had quite a few flowers. The macro photos of it came out the best, helped by sheets of A4 <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/03/26/cactus-flowers/">Cactus flowers</a></span>]]></description>
			<content:encoded><![CDATA[<p>I finally got round to posting some photos I took last year of the cactus I have flowering. It has only done it twice in the ~6 years I have had it, and this time it had quite a few flowers. The macro photos of it came out the best, helped by sheets of A4 paper as light reflectors (and in some photos backgrounds). I cannot remember if I used a wireless flash or not, but I suspect I probably did.</p>
<p><a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11807" href="http://farm6.static.flickr.com/5063/5560969891_40b040ed11_b.jpg"><img src="http://farm6.static.flickr.com/5063/5560969891_40b040ed11.jpg" border="0" alt="IMG_11807" width="500" height="333" /></a> <a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11809" href="http://farm6.static.flickr.com/5222/5561545168_0b6f58bcab_b.jpg"><img src="http://farm6.static.flickr.com/5222/5561545168_0b6f58bcab.jpg" border="0" alt="IMG_11809" width="500" height="333" /></a><br />
<a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11806" href="http://farm6.static.flickr.com/5300/5561544504_fb50a6cc99_b.jpg"><img src="http://farm6.static.flickr.com/5300/5561544504_fb50a6cc99.jpg" border="0" alt="IMG_11806" width="500" height="333" /></a> <a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11804" href="http://farm6.static.flickr.com/5267/5560969505_94c8bb223d_b.jpg"><img src="http://farm6.static.flickr.com/5267/5560969505_94c8bb223d.jpg" border="0" alt="IMG_11804" width="500" height="333" /></a> <a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11803" href="http://farm6.static.flickr.com/5027/5561544120_fa6e7ec70f_b.jpg"><img src="http://farm6.static.flickr.com/5027/5561544120_fa6e7ec70f.jpg" border="0" alt="IMG_11803" width="500" height="333" /></a> <a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11800" href="http://farm6.static.flickr.com/5254/5560969125_692eaafcd7_b.jpg"><img src="http://farm6.static.flickr.com/5254/5560969125_692eaafcd7.jpg" border="0" alt="IMG_11800" width="500" height="333" /></a> <a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11788" href="http://farm6.static.flickr.com/5310/5560968961_da41804139_b.jpg"><img src="http://farm6.static.flickr.com/5310/5560968961_da41804139.jpg" border="0" alt="IMG_11788" width="333" height="500" /></a> <a class="tt-flickr tt-flickr tt-flickr-Medium" title="IMG_11787" href="http://farm6.static.flickr.com/5251/5561543578_9f17816531_b.jpg"><img src="http://farm6.static.flickr.com/5251/5561543578_9f17816531.jpg" border="0" alt="IMG_11787" width="333" height="500" /><br />
</a><a title="IMG_11808" href="http://farm6.static.flickr.com/5252/5560970193_fe16b8a228_b.jpg"><img src="http://farm6.static.flickr.com/5252/5560970193_fe16b8a228.jpg" border="0" alt="IMG_11808" width="333" height="500" /></a> <a title="IMG_11810" href="http://farm6.static.flickr.com/5144/5560970621_e875335232_b.jpg"><img src="http://farm6.static.flickr.com/5144/5560970621_e875335232.jpg" border="0" alt="IMG_11810" width="333" height="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/03/26/cactus-flowers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blue Fusion 2011</title>
		<link>http://www.strangeparty.com/2011/03/15/blue-fusion-2011/</link>
		<comments>http://www.strangeparty.com/2011/03/15/blue-fusion-2011/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 08:24:26 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Blue Fusion]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[bluefusion]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[science]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=810</guid>
		<description><![CDATA[<p>As it is National Science and Engineering week, IBM Hursley are running Blue Fusion 2011 - The official press release summed it up quite well, and also contains a list of this year&#8217;s activities:</p> <p>HURSLEY, U.K. - 11 Mar 2011: More than 450 students from 80 schools across the South of England will be celebrating National Science <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/03/15/blue-fusion-2011/">Blue Fusion 2011</a></span>]]></description>
			<content:encoded><![CDATA[<p>As it is <a href="http://www.britishscienceassociation.org/web/NSEW/">National Science and Engineering week</a>, <a href="http://www-03.ibm.com/press/uk/en/pressrelease/34021.wss">IBM Hursley are running Blue Fusion 2011</a> - The official press release summed it up quite well, and also contains a list of this year&#8217;s activities:</p>
<blockquote><p><strong>HURSLEY, U.K.	 -	 11 Mar 2011: </strong>More than 450 students from 80 schools across the South of England will be celebrating National Science and Engineering Week at IBM&#8217;s 16th annual Blue Fusion event. The students will need to use quick thinking, scientific knowledge and teamwork in a number of fun activities, designed to inspire and encourage young people to develop their interest in Science, Technology and Engineering.</p>
<p>“Communication” is the theme for National Science and Engineering Week 2011 and volunteers from IBM Hursley, Europe’s largest software development lab, have put together a wealth of fun, inspiring and engaging activities.</p>
<p>Each day, teams from 16 schools will participate in a variety of specially-designed activities promoting innovation, teamwork, problem solving and communication skills. Students solve puzzles and technological challenges that explore basic concepts in some of the most interesting areas of modern technology. The activities will include building network communications to cracking codes to designing an ecologically friendly house. The students will experience first hand how science benefits our everyday lives and how instrumented, interconnected and intelligent technology can help build a smarter planet.</p>
<p>Approximately 200 IBM employees volunteer their time and experience to Blue Fusion, many of whom are recent graduates who can share their passion and experience of working in the industry with the next generation. Local dignitaries will be attending the event throughout the week to see the impact and success of Blue Fusion in inspiring young people into Science, Technology and Engineering.</p></blockquote>
<p>I look forward to hosting schools on Thursday &#8211; it has been fun being involved for the last five years, so should be great this year too! I wrote briefly about <a href="http://www.strangeparty.com/2007/03/18/bluefusion-2007-done/">Blue Fusion</a> and <a href="http://www.strangeparty.com/2007/03/11/bright-sparks/">Bright Sparks</a> in 2007 (I can&#8217;t remember if that was the year I organised and ran <a href="http://www.danharrison.co.uk/">Blue Fusion with Dan</a>)</p>
<p>There are one or two videos about Blue Fusion which really show what the event is about:</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/as4Da-iU5ec" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/as4Da-iU5ec"></embed></object></p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/oX-xD6NFvbY" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/oX-xD6NFvbY"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/03/15/blue-fusion-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Infra-red photowalk</title>
		<link>http://www.strangeparty.com/2011/02/01/infra-red-photowalk/</link>
		<comments>http://www.strangeparty.com/2011/02/01/infra-red-photowalk/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 18:46:04 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[infrared]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[photowalk]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=734</guid>
		<description><![CDATA[<p>It seems I never put the photos from the Southampton Photo Walk 2010 on my blog&#8230; Oh well, better late than never I suppose.</p> <p>The blog page that talked about last year&#8217;s walk seems to have disappeared, but there is still a flickr group</p> <p>Here&#8217;s what I took (in with my infra-red camera)</p> <p style="text-align: center;"> </p> <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/02/01/infra-red-photowalk/">Infra-red photowalk</a></span>]]></description>
			<content:encoded><![CDATA[<p>It seems I never put the photos from the Southampton Photo Walk 2010 on my blog&#8230; Oh well, better late than never I suppose.</p>
<p>The blog page that talked about last year&#8217;s walk seems to have disappeared, but there is still a <a href="http://www.flickr.com/groups/soton_wwpw/">flickr group</a></p>
<p>Here&#8217;s what I took (in with my infra-red camera)</p>
<p style="text-align: center;"><a class="tt-flickr tt-flickr tt-flickr-Medium" title="CRW_109958" href="http://farm5.static.flickr.com/4112/4846038746_0159a75e3b_b.jpg"><img src="http://farm5.static.flickr.com/4112/4846038746_0159a75e3b.jpg" border="0" alt="CRW_109958" width="333" height="500" /></a><br />
<a class="tt-flickr tt-flickr tt-flickr-Medium" title="CRW_109957" href="http://farm5.static.flickr.com/4144/4845420453_6940fce56d_b.jpg"><img src="http://farm5.static.flickr.com/4144/4845420453_6940fce56d.jpg" border="0" alt="CRW_109957" width="500" height="333" /><br />
</a> <a class="tt-flickr tt-flickr tt-flickr-Small" title="CRW_109921" href="http://farm5.static.flickr.com/4153/4846032968_52dffdce74_b.jpg"><img src="http://farm5.static.flickr.com/4153/4846032968_52dffdce74_m.jpg" border="0" alt="CRW_109921" width="160" height="240" /></a> <a class="tt-flickr tt-flickr tt-flickr-Small" title="CRW_109920" href="http://farm5.static.flickr.com/4111/4846032702_b78b61b7b0_b.jpg"><img src="http://farm5.static.flickr.com/4111/4846032702_b78b61b7b0_m.jpg" border="0" alt="CRW_109920" width="160" height="240" /><br />
</a> <a class="tt-flickr tt-flickr tt-flickr-Small" title="CRW_99899" href="http://farm5.static.flickr.com/4128/4846030762_5200635b60_b.jpg"><img src="http://farm5.static.flickr.com/4128/4846030762_5200635b60_m.jpg" border="0" alt="CRW_99899" width="160" height="240" /></a> <a class="tt-flickr tt-flickr tt-flickr-Small" title="CRW_99875" href="http://farm5.static.flickr.com/4125/4846027316_066200ae72_b.jpg"><img src="http://farm5.static.flickr.com/4125/4846027316_066200ae72_m.jpg" border="0" alt="CRW_99875" width="160" height="240" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/02/01/infra-red-photowalk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BT Infinity &#8211; Initial Speed</title>
		<link>http://www.strangeparty.com/2011/02/01/bt-infinity-initial-speed/</link>
		<comments>http://www.strangeparty.com/2011/02/01/bt-infinity-initial-speed/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 12:37:30 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[broadband]]></category>
		<category><![CDATA[bt]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=801</guid>
		<description><![CDATA[<p>The engineer has just left and I now have BT Infinity broadband.</p> <p>The speed below will probably fluctuate (a lot) over the next few days, but 36Mbit/s is pretty impressive:</p> <p></p> <p>Certainly an improvement from my previous Virgin broadband</p> ]]></description>
			<content:encoded><![CDATA[<p>The engineer has just left and I now have BT Infinity broadband.</p>
<p>The speed below will probably fluctuate (a lot) over the next few days, but 36Mbit/s is pretty impressive:</p>
<p><img src="http://www.speedtest.net/result/1137383839.png" alt="" /></p>
<p>Certainly an improvement from my <a href="http://www.strangeparty.com/2009/09/29/virgin-broadband-not-so-fast/">previous Virgin broadband</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/02/01/bt-infinity-initial-speed/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Arduino talking to an I2C LCD display</title>
		<link>http://www.strangeparty.com/2011/01/17/arduino-talking-to-an-i2c-lcd-display/</link>
		<comments>http://www.strangeparty.com/2011/01/17/arduino-talking-to-an-i2c-lcd-display/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 19:33:05 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[i2c]]></category>
		<category><![CDATA[lcd]]></category>
		<category><![CDATA[matrixorbital]]></category>
		<category><![CDATA[serial]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=782</guid>
		<description><![CDATA[<p>I had a spare Matrix Orbital 20&#215;4 character LCD floating about so I decided to try and connect it up to my Arduino. The display is a LK204-25, which is a brilliant little serial display, with support for a 25 button keypad and six outputs that can be used to control power to something else.</p> <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/01/17/arduino-talking-to-an-i2c-lcd-display/">Arduino talking to an I2C LCD display</a></span>]]></description>
			<content:encoded><![CDATA[<p>I had a spare <a href="http://www.matrixorbital.com/">Matrix Orbital</a> 20&#215;4 character LCD floating about so I decided to try and connect it up to my Arduino. The display is a <a href="http://www.matrixorbital.com/Intelligent-Display-Character-LCDs/c39_3/p25/LK204-25/product_info.html">LK204-25</a>, which is a brilliant little serial display, with support for a 25 button keypad and six outputs that can be used to control power to something else.</p>
<p>Being a serial display, I could just write to it from my Arduino using the serial interface, but that would mean that I lose the ability to communicate with my Arduino from my computer over serial. Fortunately the display also supports I2C as an interface (some similar, but newer, models also contain a 1-wire interface and a temperature sensor built in).</p>
<p>It turns out that getting the display to work with my Aruino Uni, using I2C is rather trivial. The display needs power, that is easy enough, and then there are just two wires to connect from the Arduino &#8211; Analog pin 4 for is SDA, analog pin 5 is SCL. Connect those two up to the display (the display docs show which pins SDA and SCL are) and you are ready to write the code to control it.</p>
<p>It turns out that I2C has fantastic support in Arduino, Wire.h contains all you need. The code below will read a character from the serial connection from your computer and write it to the display. Easy, eh?</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Note the space after the . in the imports below - This blog seems to object to not having it there</span>
<span style="color: #339933;">#include &lt; wire.h&gt;</span>
<span style="color: #666666; font-style: italic;">// default MatrixOrbital lcd address (0x5C) converted from 8bit to 7bit</span>
<span style="color: #339933;">#define LCD (0x2E) </span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Wire.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Initialise display with clear command</span>
  Wire.<span style="color: #202020;">beginTransmission</span><span style="color: #009900;">&#40;</span>LCD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Wire.<span style="color: #202020;">send</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">254</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Wire.<span style="color: #202020;">send</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">88</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Wire.<span style="color: #202020;">endTransmission</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Serial.<span style="color: #202020;">available</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> c <span style="color: #339933;">=</span> Serial.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Serial.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Wire.<span style="color: #202020;">beginTransmission</span><span style="color: #009900;">&#40;</span>LCD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Wire.<span style="color: #202020;">send</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Wire.<span style="color: #202020;">endTransmission</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/01/17/arduino-talking-to-an-i2c-lcd-display/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>process forking in perl</title>
		<link>http://www.strangeparty.com/2011/01/06/process-forking-in-perl/</link>
		<comments>http://www.strangeparty.com/2011/01/06/process-forking-in-perl/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 10:14:19 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=771</guid>
		<description><![CDATA[<p>This is a very geeky topic, but I was having a conversation at work today with someone who was trying to do several really simple things in parallel in perl because they didn&#8217;t want to wait several minutes for each one to finish. They had knocked up a change to the existing perl, but had <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2011/01/06/process-forking-in-perl/">process forking in perl</a></span>]]></description>
			<content:encoded><![CDATA[<p>This is a very geeky topic, but I was having a conversation at work today with someone who was trying to do several really simple things in parallel in perl because they didn&#8217;t want to wait several minutes for each one to finish. They had knocked up a change to the existing perl, but had tried to do it using perl threads. Normally, that would be fine for most boxes, but when you are running rather old perl on various unixes, including under USS on the IBM z/OS Mainframe, you tend to find out that perl was not compiled with thread support (and recompiling perl for the mainframe is not the easiest thing in the world).</p>
<p>I suggested that they simply use fork() to do the same thing with multiple perl processes, and having not done this in quite a while I tried to search for a good example but couldn&#8217;t find anything that looked both complete and simple enough to explain quickly &#8211; Hence this post&#8230;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl </span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> main
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@children</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066;">reverse</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">..</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$pid</span> <span style="color: #339933;">=</span> <span style="color: #000066;">fork</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$pid</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">#If $pid is non zero, then the parent is running</span>
      <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;PID $pid forked ($i)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
      <span style="color: #000066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@children</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$pid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;"># Else we are a child process ($pid == 0)</span>
      <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$rc</span> <span style="color: #339933;">=</span> child<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000066;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$rc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@children</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$pid</span> <span style="color: #339933;">=</span> <span style="color: #000066;">waitpid</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$n</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># waitpid returns the pid that finished, see perldoc -f waitpid</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$rc</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$?</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># remove signal / dump bits from rc</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;PID $pid finished with rc $rc<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> child
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$arg</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
  <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$arg: start<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #000066;">sleep</span> <span style="color: #0000ff;">$arg</span><span style="color: #339933;">;</span>
  <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$arg: end<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #000066;">return</span> <span style="color: #0000ff;">$arg</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">exit</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>And the output of running the above code is as follows:</p>
<pre>PID 16767 forked (3)
PID 16768 forked (2)
PID 16769 forked (1)
3: start
2: start
1: start
1: end
2: end
3: end
PID 16767 finished with rc 6
PID 16768 finished with rc 4
PID 16769 finished with rc 2
</pre>
<p>It is worth remembering that because each process gets an entire copy of the memory, you have to do more clever things to actually get the processes to talk to each other &#8211; but if all you want to do is run something and get a return code back, the above example should get you going pretty quickly.</p>
<p>For what it is worth, the example at <a href="https://wiki.bc.net/atl-conf/pages/viewpage.action?pageId=20548191">https://wiki.bc.net/atl-conf/pages/viewpage.action?pageId=20548191</a> isn&#8217;t too bad actually, and compares perl threads with process forking, and a php example.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2011/01/06/process-forking-in-perl/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fix your Arduino Uno for Linux</title>
		<link>http://www.strangeparty.com/2010/12/13/fix-your-arduino-uno-for-linux/</link>
		<comments>http://www.strangeparty.com/2010/12/13/fix-your-arduino-uno-for-linux/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 17:25:46 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=764</guid>
		<description><![CDATA[<p>Are you using an Arduino Uno on Linux? If so, you may have noticed that writing to the serial port in a loop can cause the Arduino Editor/Programmer software to appear to lock up, or even Linux having trouble using the serial port for your Uno.</p> <p>It turns out there was a bug in the <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2010/12/13/fix-your-arduino-uno-for-linux/">Fix your Arduino Uno for Linux</a></span>]]></description>
			<content:encoded><![CDATA[<p>Are you using an Arduino Uno on Linux? If so, you may have noticed that writing to the serial port in a loop can cause the Arduino Editor/Programmer software to appear to lock up, or even Linux having trouble using the serial port for your Uno.</p>
<p>It turns out there was a bug in the USB-&gt;Serial firmware on the chip which caused this [1], and it is quite easy to update your arduino to fix it. According to the author of the USB-&gt;Serial firmware, it is not possible to break your Arduino permenantly doing this [1], but I can&#8217;t promise anything (though it worked fine for me and others)</p>
<p>From <a href="https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/arduino-usbserial/">https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/arduino-usbserial/</a> download your hex file for your board, i.e. either <em>Arduino-usbserial-mega.hex</em> or <em>Arduino-usbserial-uno.hex</em>. As it is github, click on the file in the list then right click on &#8220;<em>raw</em>&#8221; and click &#8220;<em>Save as</em>&#8220;.</p>
<p>The md5sum of the Arduino Uno file from the 4th December is 8e01ee236e70bbea43f7eb4e11c9688a</p>
<p>You will need the dfu programmer tools, which are conveniently in Lucid/Universe, so just run</p>
<blockquote>
<pre>sudo aptitude install dfu-programmer</pre>
</blockquote>
<p>You need to do a hardware-reset to put the chip into the correct DFU programming mode, which is simply best explained with the picture at <a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285962838/10#10">http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285962838/10#10</a> (you will need to register on the arduino site to login, but a picture speaks a thousand words)</p>
<p>The Uno&#8217;s use a AT90USB82 serial-usb chip, so we then reflash the firmware with the following commands</p>
<blockquote>
<pre>sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash --debug 1 Arduino-usbserial-uno.hex
sudo dfu-programmer at90usb82 reset</pre>
</blockquote>
<p>Finally, just disconnect the USB lead and reconnect to reset the device back to normal mode.</p>
<p>Done &#8211; You no longer have to worry about writing to your serial port on your Arduino.</p>
<blockquote><p><em>References:<br />
[1] <a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286088093/38#38">http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286088093/38#38 &#8211; Author of Arduino USB stack talks about</a><br />
[2] <a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286088093/34#34">http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286088093/34#34 &#8211; First person to find fix and author of instructions that these are heavily based on</a></em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2010/12/13/fix-your-arduino-uno-for-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arduino 1-wire temperature sensors</title>
		<link>http://www.strangeparty.com/2010/12/13/arduino-1-wire-temperature-sensors/</link>
		<comments>http://www.strangeparty.com/2010/12/13/arduino-1-wire-temperature-sensors/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 08:42:01 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[1-wire]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[electronics]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=736</guid>
		<description><![CDATA[<p>So you have played a bit with your Arduino, and have heard about other people using it to monitor the temperature, but weren&#8217;t sure how they did it &#8211; Here is how I did.</p> <p>Maxim make a very simple 1-wire temperature sensor &#8211; the DS18B20 (the replacement to the DS1820). This 3 pin sensor looks <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2010/12/13/arduino-1-wire-temperature-sensors/">Arduino 1-wire temperature sensors</a></span>]]></description>
			<content:encoded><![CDATA[<p>So you have played a bit with your <a href="http://www.arduino.cc/">Arduino</a>, and have heard about other people using it to monitor the temperature, but weren&#8217;t sure how they did it &#8211; Here is how I did.</p>
<p>Maxim make a very simple <a href="http://en.wikipedia.org/wiki/1-Wire">1-wire</a> temperature sensor &#8211; the <a href="http://www.maxim-ic.com/datasheet/index.mvp/id/2812">DS18B20</a> (the replacement to the DS1820). This 3 pin sensor looks just like a transistor, and can work with only two wires, combined data+power and ground. You can put several on the same wire and address them all separately.</p>
<p>The DS18B20 is <a href="http://uk.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&amp;R=5402805P">less that £4 from RS</a>, so not exactly expensive.</p>
<p>Wiring up the 1-wire sensors is fairly simple:</p>
<p>You can power them with either dedicated power wires (exercise for the reader), or use their &#8220;parasitic mode&#8221; where they use power from the same wire as data. To wire them this way you need to wire pins 1 and 3 (ground and Vcc) from the DS18B20 both to ground. Pin 2 goes to your Arduino (any digital I/O pin), and also 5v DC through a 4.7kΩ resistor (if you have a lot of 1-wire devices, there are reports that you may need to reduce this down to 2kΩ).<br />
If you have long wires you may need to start looking at dedicated power, but certainly for testing parasitic power will be fine.</p>
<p>Stringing multiple 1-wire sensors together is as simple as connecting all the pins up in parallel.</p>
<p><a href="http://www.strangeparty.com/wordpress/uploads/2010/12/DS18B20.png"><img class="alignnone size-full wp-image-752" title="Wiring DS18B20" src="http://www.strangeparty.com/wordpress/uploads/2010/12/DS18B20.png" alt="Wiring DS18B20" width="500" height="250" /></a></p>
<p>To actually query the devices on your Arduino, you will need the <a href="http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library#Latest">1-wire and Dallas temperature sensor libraries</a> (unzip them to your Arduino editors&#8217; libraries/ folder).</p>
<p><a href="http://www.arduino.cc/playground/Learning/OneWire">Examples</a> of <a href="http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library#Example">using the sensors</a> are <a href="http://arduinotronics.blogspot.com/">all over the place</a> (also <a href="http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html">examples of querying the ID&#8217;s of the devices</a>), or you can try mine below which prints to the serial connection the hex ID&#8217;s for each 1-wire device found, and the temperature of each every 10 sec.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// OneWire and DallasTemperature libraries from</span>
<span style="color: #666666; font-style: italic;">//   http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library</span>
<span style="color: #666666; font-style: italic;">// Code based on examples from above and at</span>
<span style="color: #666666; font-style: italic;">//   http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html</span>
<span style="color: #666666; font-style: italic;">// See also http://www.arduino.cc/playground/Learning/OneWire</span>
&nbsp;
<span style="color: #339933;">#include &lt;onewire .h&gt;</span>
<span style="color: #339933;">#include &lt;dallastemperature .h&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Data wire is plugged into pin 2 on the Arduino (can be any digital I/O pin)</span>
<span style="color: #339933;">#define ONE_WIRE_BUS 2</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Setup a oneWire instance to communicate with any OneWire devices</span>
<span style="color: #666666; font-style: italic;">// (not just Maxim/Dallas temperature ICs)</span>
OneWire oneWire<span style="color: #009900;">&#40;</span>ONE_WIRE_BUS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Pass our oneWire reference to Dallas Temperature.</span>
DallasTemperature sensors<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>oneWire<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> numberOfSensors<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// start serial port</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;1-Wire DS18B20 example code&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Start up the library</span>
  sensors.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//important on linux as serial port can lock up otherwise</span>
  numberOfSensors <span style="color: #339933;">=</span> discoverOneWireDevices<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  printTemperaturesToSerial<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">10000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//wait 10 sec</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> printTemperaturesToSerial<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// call sensors.requestTemperatures() to issue a global temperature</span>
  <span style="color: #666666; font-style: italic;">// request to all devices on the bus</span>
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Requesting temperatures...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  sensors.<span style="color: #202020;">requestTemperatures</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Send the command to get temperatures</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;DONE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Read each of our sensors and print the value</span>
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numberOfSensors<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Temperature for Device &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span> i <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; is: &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">// Why &quot;byIndex&quot;? You can have more than one IC on the same bus. </span>
   <span style="color: #666666; font-style: italic;">// 0 refers to the first IC on the wire</span>
   Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span> sensors.<span style="color: #202020;">getTempCByIndex</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Based on http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html</span>
<span style="color: #993333;">int</span> discoverOneWireDevices<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  byte i<span style="color: #339933;">;</span>
  byte present <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  byte data<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">12</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  byte addr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> count <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Looking for 1-Wire devices...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>oneWire.<span style="color: #202020;">search</span><span style="color: #009900;">&#40;</span>addr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Found <span style="color: #000099; font-weight: bold;">\'</span>1-Wire<span style="color: #000099; font-weight: bold;">\'</span> device with address: &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;0x&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>addr<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>addr<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> HEX<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;, &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> OneWire<span style="color: #339933;">::</span><span style="color: #202020;">crc8</span><span style="color: #009900;">&#40;</span> addr<span style="color: #339933;">,</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> addr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;CRC is not valid!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    count<span style="color: #339933;">++;</span>
  <span style="color: #009900;">&#125;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;That's it.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  oneWire.<span style="color: #202020;">reset_search</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> count<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>I get the following output on the serial connection</p>
<blockquote><pre>1-Wire DS18B20 example code
Looking for 1-Wire devices...
Found '1-Wire' device with address: 0x28, 0xCE, 0x85, 0xBB, 0x02, 0x00, 0x00, 0xC1
Found '1-Wire' device with address: 0x28, 0xEF, 0x7F, 0xBB, 0x02, 0x00, 0x00, 0x5B
That's it.

Requesting temperatures...DONE
Temperature for Device 0 is: 21.31
Temperature for Device 1 is: 21.37

Requesting temperatures...DONE
Temperature for Device 0 is: 21.37
Temperature for Device 1 is: 21.37
...</pre>
</blockquote>
<p>There you have it &#8211; A very quick Arduino temperature sensor, using pretty cheap 1-wire devices. The only problem you have now is how to get the wires everywhere you might want to read the temperature of.</dallastemperature></onewire></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2010/12/13/arduino-1-wire-temperature-sensors/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Who came up with eBook pricing</title>
		<link>http://www.strangeparty.com/2010/08/07/who-came-up-with-ebook-pricing/</link>
		<comments>http://www.strangeparty.com/2010/08/07/who-came-up-with-ebook-pricing/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 10:34:09 +0000</pubDate>
		<dc:creator>Anton Piatek</dc:creator>
				<category><![CDATA[Reading]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[drm]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://www.strangeparty.com/?p=737</guid>
		<description><![CDATA[<p>Seriously&#8230; Who decided how to price eBooks?</p> <p>A friend at work recently recommended I read Richard Morgan&#8217;s Altered Carbon. The Kindle app on android allowed me to find it quickly and download the first 3 chapters free to read &#8211; I loved it and decided I wanted to read the rest of it&#8230; However when <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.strangeparty.com/2010/08/07/who-came-up-with-ebook-pricing/">Who came up with eBook pricing</a></span>]]></description>
			<content:encoded><![CDATA[<p>Seriously&#8230; Who decided how to price eBooks?</p>
<p>A friend at work recently recommended I read Richard Morgan&#8217;s Altered Carbon. The Kindle app on android allowed me to find it quickly and download the first 3 chapters free to read &#8211; I loved it and decided I wanted to read the rest of it&#8230; However when checking the prices I was left the feeling that eBooks are just too expensive for what they are</p>
<p><a href="http://www.play.com/Books/Books/4-/196726/Altered-Carbon/Product.html">Play.com £5.99</a><br />
<a href="http://www.amazon.co.uk/Altered-Carbon-Gollancz-Richard-Morgan/dp/0575081244/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1281176341&amp;sr=8-1">Amazon UK £5.19<br />
</a><span style="font-size: 13.3333px;"><a href="http://www.amazon.co.uk/Orion-Publishing-Group-Altered-Carbon/dp/B002U3CBZM/ref=sr_1_2?ie=UTF8&amp;s=digital-text&amp;qid=1281176341&amp;sr=8-2">Kindle (Amazon UK) £4.88</a></span></p>
<p><span style="font-size: 13.3333px;">I went with Play as their free delivery normally takes about 2 days, so that was great. But seriously, nearly the same price for Kindle? For a book I cannot resell, lend or give away?</span></p>
<p><span style="font-size: 13.3333px;">Digital books should be much, much cheaper &#8211; There is no printing cost involved, so the book should be significantly cheaper, but this is not what I am seeing.</span></p>
<p><span style="font-size: 13.3333px;">If I choose to keep the book and reread it again in a few years, the price may be fine. But I am more likely to read it once, and then give it to a friend to read. Why should i pay nearly the same price for something I cannot lend, sell, or give to a charity shop?</span></p>
<p><span style="font-size: 13.3333px;">Also, how on earth does a paper book qualify for no VAT, yet as soon as that book has no paper involved I have to pay VAT?!?</span></p>
<p>There are lots of Kindle books for £3 or less, and for these I will probably just buy it digitally as its incredibly cheap. But if I wanted to buy a recent release, then I really am paying a lot more for a digital book just to have it early? Why?<br />
I can understand pricing getting lower for older books as they have to compete with people lending books, libraries and second-hand sales, however none of that is possible for DRM protected eBooks, so they should all be priced the same as older releases</p>
]]></content:encoded>
			<wfw:commentRss>http://www.strangeparty.com/2010/08/07/who-came-up-with-ebook-pricing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

