<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-1473034637572294146</id><updated>2008-11-06T08:42:33.447Z</updated><title type='text'>Blog</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.marcuscobden.co.uk/atom.xml'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-5844206555508232458</id><published>2008-11-04T18:05:00.001Z</published><updated>2008-11-06T08:41:52.671Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Not your regular TI-83</title><content type='html'>&lt;p&gt;I've only ever owned one graphical calculator, a &lt;a href="http://en.wikipedia.org/wiki/TI-83" title="TI-83 series calculator"&gt;TI-83&lt;/a&gt;, which was bought for me around when I started Secondary School. It was the device on which I broke my programming teeth, making crummy games and utilities to make maths exercises less tedious.&lt;/p&gt;
&lt;p&gt;The other week I was experimenting with the HTML &lt;a href="http://en.wikipedia.org/wiki/Canvas_tag" title="HTML Canvas tag"&gt;Canvas element&lt;/a&gt; for another little side-project of mine when I was reminded of the Graph Plot screen which my old calculator has. Essentially it lets you enter a Cartesian equation which it will then plot on the screen.&lt;/p&gt;
&lt;p&gt;Subsequently, over a couple of days I put together a &lt;a href="http://www.marcuscobden.co.uk/stuff/2008-10/plot" title="Javascript &amp;amp; Canvas equation plotter"&gt;&lt;strong&gt;Javascript powered equation plotter&lt;/strong&gt;&lt;/a&gt;, with much the same functionality as my TI-83. Oh and in the process I found a &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=21888"&gt;bug in the WebKit nightly&lt;/a&gt;, which they swiftly fixed.&lt;/p&gt;
&lt;p&gt;You're free to use the &lt;a href="http://www.marcuscobden.co.uk/stuff/2008-10/plot/js/graphPlot.js" title="Javascript equation plotter source code"&gt;source&lt;/a&gt; to the how you wish, if you're that way inclined (it's a client-side web script so it's practically open source off the bat). Under the hood it makes use of the &lt;a href="http://mootools.net/" title="MooTools - a compact javascript framework"&gt;MooTools&lt;/a&gt; javascript framework, though I've not made use of its features extensively, so It would only be a matter of an evening's work to remove this dependancy.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/5844206555508232458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=5844206555508232458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/5844206555508232458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/5844206555508232458'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2008/11/not-your-regular-ti-83.html' title='Not your regular TI-83'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-4619371645821855330</id><published>2008-08-23T22:41:00.000+01:00</published><updated>2008-11-06T08:41:32.649Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>A case of bad cropping</title><content type='html'>&lt;p&gt;Recently, by pure chance, I've been working for two different research projects which both have involved Java Applets.&lt;/p&gt;
&lt;p&gt;The first project ran afoul of &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6669818"&gt;bug #6669818&lt;/a&gt; which prevented the applet from connecting back to the originating server during &lt;a href="http://en.wikipedia.org/wiki/LiveConnect"&gt;LiveConnect&lt;/a&gt; calls, in Mozilla Firefox on a Windows XP platform.&lt;/p&gt;
&lt;p&gt;Fortunately there is a workaround for this; by passing the task off to another thread which was started in a non-LiveConnect part of the &lt;a href="http://java.sun.com/docs/books/tutorial/deployment/applet/lifeCycle.html" title="Applet Lifecycle"&gt;Applet's lifecycle&lt;/a&gt;, the task is then executed in another thread which is not subject to the same malfunctioning security check.&lt;/p&gt;
&lt;p&gt;If you'd rather not have to create a thread just for this, a quick hack is to pass the event off to the applet rendering thread using the &lt;code&gt;SwingUtilities.invokeLater(Runnable);&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;In the second project I've now encountered another platform-specific Applet quirk, this time with Mac OSX.&lt;/p&gt;
&lt;p&gt;Using Javascript it is possible to change the size of an Applet on the page in the same way you would any other DOM element, however on Mac OSX any browser using the &lt;a href="http://javaplugin.sourceforge.net/" title="Java Embedding Plugin"&gt;Java Embedding Plugin&lt;/a&gt; (Firefox, Opera and others) will fail to resize Java Applets correctly.&lt;/p&gt;
&lt;p&gt;I've knocked up a simple &lt;a href="http://marcuscobden.co.uk/stuff/2008-07/applet/" title="Applet resize test page"&gt;test page&lt;/a&gt; which allows this to be tested, and shows a potential workaround.&lt;/p&gt;
&lt;p&gt;There appear to be two problems cropping up; the first is that the Browser does not notify the Applet that it ought to resize. If you leave the "Notify Java" check-box un-checked when submitting the form, the browser expands the area the Applet ought to be using, but the applet continues to draw in it's original position.&lt;/p&gt;
&lt;p&gt;The second issue is that when axis are changed and Java is &lt;strong&gt;manually&lt;/strong&gt; notified the behaviour still does not perform as it ought to. The clipping region of the Java applet rendering is not updated correctly, and thus only part of the applet is correctly rendered.&lt;/p&gt;
&lt;p&gt;There is a temperamental workaround for this, by programatically resizing one axis and then the other in quick succession, but this seems to fail as often as it works, depending on whether the page is being loaded from nothing, refreshed, no-cache refreshed or returned to via the browser 'Back' action.&lt;/p&gt;
&lt;p&gt;In the interest of getting this bug fixed the code to the &lt;a href="http://marcuscobden.co.uk/stuff/2008-07/applet/" title="Applet resize test page"&gt;Applet resize test page&lt;/a&gt; is linked from the test page and free for all to use.&lt;/p&gt;
&lt;p&gt;Bugs:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Java Embedding Plugin tracker: &lt;a href="http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=2030298&amp;amp;group_id=107955&amp;amp;atid=649116"&gt;#2030298&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;Firefox Bugzilla: &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=451882"&gt;#451882&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/4619371645821855330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=4619371645821855330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/4619371645821855330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/4619371645821855330'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2008/08/case-of-bad-cropping.html' title='A case of bad cropping'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-6077437052811584955</id><published>2008-04-01T13:35:00.000+01:00</published><updated>2008-11-06T08:41:34.580Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Urestrict BBC Radio iPlayer</title><content type='html'>&lt;p&gt;As long as I can remember, the &lt;a href="http://www.bbc.co.uk/radio/aod/" title="BBC iPlayer"&gt;BBC's online music&lt;/a&gt; streaming service has restricted the control you have on playback streams, restricting the embedded realplayer controls to allow you pause, skip 5 minutes or skip 15 and change the volume.
I can understand the legal obligations they may have, but from a piracy perspective stopping people skipping tracks is irrelevant, its only use is as a measure to stop people re-listening to the same track without having to go back to the start each time.&lt;/p&gt;

&lt;p&gt;The controls on Mac OS X are less restrictive, but still restrict you to pause, fast forward or stop, however some simple javascript manipulation of the page can enable the regular &lt;a href="http://service.real.com/help/library/guides/production8/media/embed/plugin.htm" title="RealPlayer Controls"&gt;RealPlayer controls&lt;/a&gt;, complete with a seek-bar.&lt;/p&gt;

&lt;p&gt;Bookmark either download the &lt;a href="http://www.marcuscobden.co.uk/stuff/2008-03/R1.js" title="source code"&gt;source file&lt;/a&gt; or view the &lt;a href="http://www.marcuscobden.co.uk/stuff/2008-03/R1-bookmarklet.js" title="bookmarklet"&gt;bookmarklet source&lt;/a&gt;.
Unfortunately blogger won't let me create an actual &lt;a href="http://en.wikipedia.org/wiki/Bookmarklet" title="Wikipedia: Bookmarklet"&gt;bookmarklet&lt;/a&gt; link, so you will manually have to save the bookmarklet into a bookmark in your browser.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/6077437052811584955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=6077437052811584955' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/6077437052811584955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/6077437052811584955'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2008/04/urestrict-bbc-radio-iplayer.html' title='Urestrict BBC Radio iPlayer'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-3146842492768392193</id><published>2008-03-01T10:00:00.003Z</published><updated>2008-11-06T08:41:36.747Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Google Maps Placemark</title><content type='html'>&lt;p&gt;This post has been sitting for quite a while now, pending me having time to sit down and write some text to go alongside the code.
It would appear that I now have the time to write it up.
&lt;/p&gt;&lt;p&gt;
&lt;a href="http://blog.marcuscobden.co.uk/2007/12/spring-mvc-wizards-form-taglib.html" title="Spring MVC Wizards &amp;amp; Form Taglib"&gt;Back when&lt;/a&gt;
I was writing my Google Maps property finder I was using Google's Geocoding API to get a set of co-ordinates based on a search string.
&lt;/p&gt;&lt;p&gt;
Specifically I was using the &lt;code&gt;getLocations&lt;/code&gt; method of the &lt;a href="http://code.google.com/apis/maps/documentation/reference.html#GClientGeocoder" title="Google Maps API - GClientGeocoder"&gt;&lt;code&gt;GClientGeocoder&lt;/code&gt; object&lt;/a&gt;.
This would return a number of &lt;code&gt;Placemark&lt;/code&gt; objects with a bunch of information about the potential matches.
They don't really document this object, but to be honest they don't really need to, below is an example Placemark expressed in JSON-ish notation.
&lt;/p&gt;
&lt;pre&gt;{   "id": "p1",
    "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "AddressDetails": {
        "Country": {
            "CountryNameCode": "US",
            "AdministrativeArea": {
                "AdministrativeAreaName": "CA",
                "SubAdministrativeArea": {
                    "SubAdministrativeAreaName": "Santa Clara",
                    "Locality": {
                        "LocalityName": "Mountain View",
                        "Thoroughfare": {
                            "ThoroughfareName": "1600 Amphitheatre Pkwy"},
                            "PostalCode": {
                                "PostalCodeNumber": "94043"
                            }
                        }
                    }
                }
            },
        "Accuracy": 8
        },
    "Point": {
        "coordinates": [-122.081783,37.423111,0]
    }
}&lt;/pre&gt;
&lt;p&gt;The only thing is, if you want to get a specific element, the tree will not necessarily be the same each time, so traversal is a pain.
The &lt;a href="http://marcuscobden.co.uk/stuff/2008-03/Placemark.js" title=""&gt;code below&lt;/a&gt; will condense all this into the root level of an object, so you can pick out the key/value pairs you want, and easily tell if some aren't there.&lt;/p&gt;

&lt;pre class="javascript"&gt;&lt;span class='storage storage_type storage_type_js'&gt;var&lt;/span&gt; Placemark &lt;span class='keyword keyword_operator keyword_operator_js'&gt;=&lt;/span&gt; &lt;span class='meta meta_class meta_class_instance meta_class_instance_constructor'&gt;&lt;span class='keyword keyword_operator keyword_operator_new keyword_operator_new_js'&gt;new&lt;/span&gt; &lt;span class='entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js'&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;{&lt;/span&gt;
 &lt;span class='meta meta_function meta_function_json meta_function_json_js'&gt;&lt;span class='entity entity_name entity_name_function entity_name_function_js'&gt;initialize&lt;/span&gt;: &lt;span class='storage storage_type storage_type_function storage_type_function_js'&gt;function&lt;/span&gt;(&lt;span class='variable variable_parameter variable_parameter_function variable_parameter_function_js'&gt;placemark&lt;/span&gt;)&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;{&lt;/span&gt;
  &lt;span class='variable variable_language variable_language_js'&gt;this&lt;/span&gt;&lt;span class='meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js'&gt;.&lt;/span&gt;traverse&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;placemark&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt;;
 &lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;}&lt;/span&gt;&lt;span class='meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js'&gt;,&lt;/span&gt;
 &lt;span class='meta meta_function meta_function_json meta_function_json_js'&gt;&lt;span class='entity entity_name entity_name_function entity_name_function_js'&gt;traverse&lt;/span&gt;: &lt;span class='storage storage_type storage_type_function storage_type_function_js'&gt;function&lt;/span&gt;(&lt;span class='variable variable_parameter variable_parameter_function variable_parameter_function_js'&gt;item, key&lt;/span&gt;)&lt;/span&gt; &lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;{&lt;/span&gt;
  &lt;span class='keyword keyword_control keyword_control_js'&gt;for&lt;/span&gt; &lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;&lt;span class='storage storage_type storage_type_js'&gt;var&lt;/span&gt; key &lt;span class='keyword keyword_operator keyword_operator_js'&gt;in&lt;/span&gt; item&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt; &lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;{&lt;/span&gt;
   
   &lt;span class='keyword keyword_control keyword_control_js'&gt;if&lt;/span&gt; &lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;key &lt;span class='keyword keyword_operator keyword_operator_js'&gt;==&lt;/span&gt; &lt;span class='string string_quoted string_quoted_single string_quoted_single_js'&gt;'prototype'&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt;
    &lt;span class='keyword keyword_control keyword_control_js'&gt;continue&lt;/span&gt;;
    
   &lt;span class='keyword keyword_control keyword_control_js'&gt;if&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;typeof&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;item&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;[&lt;/span&gt;key&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;]&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt; &lt;span class='keyword keyword_operator keyword_operator_js'&gt;!&lt;/span&gt;&lt;span class='keyword keyword_operator keyword_operator_js'&gt;=&lt;/span&gt; &lt;span class='string string_quoted string_quoted_single string_quoted_single_js'&gt;'object'&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt;
    &lt;span class='variable variable_language variable_language_js'&gt;this&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;[&lt;/span&gt;key&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;]&lt;/span&gt; &lt;span class='keyword keyword_operator keyword_operator_js'&gt;=&lt;/span&gt; item&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;[&lt;/span&gt;key&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;]&lt;/span&gt;;
   &lt;span class='keyword keyword_control keyword_control_js'&gt;else&lt;/span&gt;
    &lt;span class='variable variable_language variable_language_js'&gt;this&lt;/span&gt;&lt;span class='meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js'&gt;.&lt;/span&gt;traverse&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;(&lt;/span&gt;item&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;[&lt;/span&gt;key&lt;span class='meta meta_brace meta_brace_square meta_brace_square_js'&gt;]&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt;;
  &lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;}&lt;/span&gt;
 &lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;}&lt;/span&gt;
&lt;span class='meta meta_brace meta_brace_curly meta_brace_curly_js'&gt;}&lt;/span&gt;&lt;span class='meta meta_brace meta_brace_round meta_brace_round_js'&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;One thing to note is that this was written for to use the &lt;a href="http://mootools.net/" title="mootools"&gt;Mootools&lt;/a&gt; class system, though it shouldn't be very hard to remove this dependancy.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/3146842492768392193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=3146842492768392193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/3146842492768392193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/3146842492768392193'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2008/03/google-maps-placemark.html' title='Google Maps Placemark'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-2423860910091300796</id><published>2008-01-29T11:25:00.001Z</published><updated>2008-11-06T08:41:38.566Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='censorship'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='leak'/><title type='text'>Leaked UK National ID Register Document</title><content type='html'>In response to a post on &lt;a href="http://boingboing.net/"&gt;boingboing&lt;/a&gt; &lt;a href="http://www.boingboing.net/2008/01/29/leaked-uk-govt-doc-r.html"&gt;requesting mirrors&lt;/a&gt; for a &lt;a href="http://www.marcuscobden.co.uk/stuff/NIS_Options_Analysis_Outcome.pdf"&gt;leaked document&lt;/a&gt;, here is my &lt;a href="http://www.marcuscobden.co.uk/stuff/NIS_Options_Analysis_Outcome.pdf"&gt;mirror copy&lt;/a&gt;.
Enjoy :)
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/2423860910091300796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=2423860910091300796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/2423860910091300796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/2423860910091300796'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2008/01/leaked-uk-national-id-register-document.html' title='Leaked UK National ID Register Document'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-194879638575661549</id><published>2008-01-26T16:30:00.000Z</published><updated>2008-11-06T08:41:40.630Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='spring framework'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Spring MVC Wizards &amp; Form Taglib</title><content type='html'>&lt;p&gt;I've been building a JSP based website for a course module titled "Technologies for Electronic Commerce". It's finished now, but I've only just got round to writing up this post.&lt;/p&gt;&lt;p&gt;As part of this I was trying to make a multi-page form, using &lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt;'s &lt;a href="http://static.springframework.org/spring/docs/2.5.x/api/index.html"&gt;AbstractWizardFormController&lt;/a&gt; and spent an hour or so trying to make the form submission change the form page. My problem was that it wasn't immediately obvious how to use the &lt;a href="http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html#mvc-formtaglib"&gt;form taglib&lt;/a&gt; with the Wizard architecture.&lt;/p&gt;&lt;p&gt;The docs mentioned using request parameters, which was a bit confusing as I was using a POST form submission, however all you actually need to do is add one of these parameters to the form data (usually using a button).&lt;/p&gt;&lt;blockquote&gt;Finish and cancel actions can be triggered by request parameters, named PARAM_FINISH ("_finish") and PARAM_CANCEL ("_cancel"), ignoring parameter values to allow for HTML buttons. The target page for page changes can be specified by PARAM_TARGET, appending the page number to the parameter name (e.g. "_target1"). The action parameters are recognized when triggered by image buttons too (via "_finish.x", "_abort.x", or "_target1.x").&lt;/blockquote&gt;&lt;p&gt;For example:&lt;pre&gt;&lt;code&gt;&amp;lt;input value="Submit" name="_target1" type="submit"/&amp;gt;&lt;/code&gt;&lt;/pre&gt;This will request to change to page 2 of the form (remember Array base is 0).
Because of the way forms work, you can have a number of these (either as clickable images or buttons) and only the one the user eventually selects will be submitted with the request.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/194879638575661549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=194879638575661549' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/194879638575661549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/194879638575661549'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2007/12/spring-mvc-wizards-form-taglib.html' title='Spring MVC Wizards &amp;amp; Form Taglib'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-3514642894755861031</id><published>2008-01-05T22:08:00.001Z</published><updated>2008-11-06T08:41:42.630Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Making the most of Pandora.com</title><content type='html'>&lt;a href="http://www.pandora.com/"&gt;Pandora.com&lt;/a&gt; is pretty cool, it's been around for a while now but I just went back to it for some easy listening background music to work to.

Supposedly they've begun to use IP filtering to limit the audience to the US. Either this is no longer in place or they've made a mistake in a regex somewhere, as this is definitely not the US.

I'd forgotten about the limit to the unpaid service, which stops playback after so many songs, but it was quite a while before I actually encountered it.
This may be a Mac OS X bug in the flash implementation, but it seems that if you keep the Firefox window containing the player minimised in the Dock, the music doesn't stop playing!
Of course this does get in the way of the whole feedback system slightly, but I'm sure there are those who won't mind too much.

Once I did encounter the limit I couldn't just refresh the page and go back to listening again as they're smart enough to stop you doing that.

But not &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; smart.

To completely stop this you would require either some heinous DRM-spawn system describable as cookies which you can't delete, or some kind of unique client ID, effectively voiding all browser privacy. So to be fair, from the technologies they had to work with, they've done the best they could. ;)

So once you've been shut out of the Pandora player try the following:
&lt;ol&gt;&lt;li&gt;Delete your cookies from their domains.&lt;/li&gt;&lt;li&gt;Delete any data stored within Adobe Flash for their domain.&lt;/li&gt;&lt;/ol&gt;The latter can be achieved by opening the Adobe Flash client settings and changing the data limit for the domain to 0KB, which will take effect upon refreshing the page, upon which the flash applet will request to store data in your browser again, and you're back listening, but without any of your stations.
&lt;h3&gt;Update:&lt;/h3&gt;It appears that the region filtering will go live on January 15th, not quite yet.
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/3514642894755861031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=3514642894755861031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/3514642894755861031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/3514642894755861031'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2008/01/making-most-of-pandoracom.html' title='Making the most of Pandora.com'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1473034637572294146.post-5258481064511658724</id><published>2007-12-19T23:00:00.000Z</published><updated>2008-11-06T08:41:44.804Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='requirements'/><category scheme='http://www.blogger.com/atom/ns#' term='hello'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Hello World!</title><content type='html'>I've been here before, set up a new blog and then proceeded to ignore it.
There's still a chance of that happening, but this time I'm not deluding myself that this is the new awesome thing (TM), perhaps I'll get into the habit but likely I won't.

The difference this time is that I've given up on using Wordpress for my own blog. I should clarify (after such a flame-bait-ish statement) this isn't due to anything I dislike about Wordpress, rather my own observations about my needs (read: user requirements).

Part of this comes from my ill-advised creation of a university society web-page through a large mangling of Wordpress categories and templates. It really was not needed. Sure the website needed a refresh, but only visually, we weren't that busy a society to warrant a plethora of categories. So, back to basics and reign in the enthusiasm. :)
&lt;h4&gt;Maintenance&lt;/h4&gt;I said before, I have a tendency not to come back to blogging very often, so while I'm usually in favor of updates for the sake of updates, installing a new version every time I come back to blog briefly is not something I can be bothered to do, but paradoxically rather than ignore it, I opt to not blog instead.
&lt;h4&gt;Spam&lt;/h4&gt;Spam is a pain and I'd much rather let someone else deal with it than moderate my own comments or find the right plugin to install.
&lt;h4&gt;Features&lt;/h4&gt;Features are lovely, everyone loves features, but frankly they're wasted on me, I probably don't use most of Wordpress's features anyway.

So, the answer is clearly some managed solution, the few candidates that come to mind:
&lt;dl&gt;&lt;dt&gt;&lt;a href="http://wordpress.com/"&gt;Wordpress.com&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Wordpress is Ok but to be honest I fancy a change, and there's no point having my domain if I don't use it.&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://www.livejournal.com/"&gt;Livejournal&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Livejournal is for some reason too old fashioned for my tastes, plus it's got a whole layer of social networking and crap which I waste enough time with on Facebook.
&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;It's Google for a start,  so they get the benefit of the doubt in the new features department, plus they have a handy thing which lets them publish via SCP to my domain.&lt;/dd&gt;
&lt;/dl&gt;Hardly a convincing argument I know, but that's about as far as I bothered to look.
Anyways, goodbye for now blogosphere, let's keep in touch.
</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/5258481064511658724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1473034637572294146&amp;postID=5258481064511658724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/5258481064511658724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1473034637572294146/posts/default/5258481064511658724'/><link rel='alternate' type='text/html' href='http://blog.marcuscobden.co.uk/2007/12/hello-world.html' title='Hello World!'/><author><name>Marcus</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>