<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-13196181</atom:id><lastBuildDate>Mon, 12 Dec 2011 10:28:24 +0000</lastBuildDate><category>motorbike</category><category>altio</category><category>javascript</category><category>swurl</category><category>swing</category><category>web</category><category>gadgets</category><category>apple</category><category>photgraphy</category><category>japplet</category><category>the gents</category><category>os x</category><category>train</category><category>chrome</category><category>update 10</category><category>download</category><category>travel</category><category>javaone</category><category>uk</category><category>sun</category><category>windows</category><category>jnlp</category><category>asus eee</category><category>bfo</category><category>canada</category><category>altiolive</category><category>linux</category><category>javafx</category><category>scripting</category><category>java</category><category>law</category><category>photography</category><category>san francisco</category><category>edt</category><category>firefox extension</category><category>java version</category><category>music</category><category>applets</category><category>hudson</category><category>website</category><category>fail blog</category><category>book</category><category>pdf</category><category>parallels</category><category>groovy</category><category>flickr</category><category>food</category><category>europe</category><category>mac</category><category>f800gs</category><category>google</category><title>peaky blinder</title><description>Thoughts from Jim</description><link>http://stufffromjim.blogspot.com/</link><managingEditor>noreply@blogger.com (jim)</managingEditor><generator>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/peakyblinder" /><feedburner:info uri="peakyblinder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-6432995963541208555</guid><pubDate>Fri, 25 Sep 2009 13:33:00 +0000</pubDate><atom:updated>2009-09-25T14:37:59.950+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">os x</category><category domain="http://www.blogger.com/atom/ns#">apple</category><title>Apple and Java</title><description>Sigh. Just when you think Apple might be &lt;a href="http://stufffromjim.blogspot.com/2009/04/finally-draggable-applets-on-os-x.html"&gt;getting their act together&lt;/a&gt; with regards to keeping Java on OS X up to date, you install the Snow Leopard upgrade to OS X and find yourself in the following situation:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FcKrVLRyfNc/SrzHknFUdTI/AAAAAAAAAI0/hmXIht4TPfk/s1600-h/Screen+shot+2009-09-25+at+14.32.20.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="http://1.bp.blogspot.com/_FcKrVLRyfNc/SrzHknFUdTI/AAAAAAAAAI0/hmXIht4TPfk/s320/Screen+shot+2009-09-25+at+14.32.20.png" alt="" id="BLOGGER_PHOTO_ID_5385398686208783666" border="0" /&gt;&lt;/a&gt;Apple appear to have upgraded Java to 1.6.0_15, but removed the features from 1.6.0_10, namely the next generation plugin features for applets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-6432995963541208555?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/MCzsuj7EKz8/apple-and-java.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_FcKrVLRyfNc/SrzHknFUdTI/AAAAAAAAAI0/hmXIht4TPfk/s72-c/Screen+shot+2009-09-25+at+14.32.20.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/09/apple-and-java.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-2276011906289875921</guid><pubDate>Tue, 18 Aug 2009 12:19:00 +0000</pubDate><atom:updated>2009-08-18T13:23:13.892+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photgraphy</category><category domain="http://www.blogger.com/atom/ns#">flickr</category><category domain="http://www.blogger.com/atom/ns#">book</category><title>Published</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/raindog/3833546952/"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 164px; height: 240px;" src="http://farm3.static.flickr.com/2591/3833546952_00948c29f5_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;The much anticipated (by me at least) Swedish translation of Maureen O'Brien's 'Close-up on death' is finally out, and the reason I'm so interesting in it is that it uses a photo of mine for the front cover.&lt;br /&gt;&lt;br /&gt;My copy arrived yesterday and I'm pretty pleased with how it turned out - I doubt this is the start of a new career but it's a nice bit of exposure for one of my favourite shots.&lt;br /&gt;&lt;br /&gt;I'm currently planning a bike trip through Sweden and Norway next year...let's hope the international fame that results from this book cover doesn't make it difficult for me to travel without being mobbed :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-2276011906289875921?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/A71QPMLae80/published.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2591/3833546952_00948c29f5_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/08/published.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-8908121207640702295</guid><pubDate>Sat, 25 Jul 2009 16:30:00 +0000</pubDate><atom:updated>2009-07-25T18:09:30.496+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">f800gs</category><category domain="http://www.blogger.com/atom/ns#">europe</category><category domain="http://www.blogger.com/atom/ns#">travel</category><category domain="http://www.blogger.com/atom/ns#">motorbike</category><title>My Grand Tour</title><description>At the start of July I went off for a 2 week motorbike trip around Europe on my new bike, a BMW F800GS.&lt;br /&gt;&lt;br /&gt;The route was dictated by having to end up in Cannes for the Bastille Day weekend to meet up with my brother for a few days, and dropping in on Zurich to meet a friend - apart from that I just wanted to see lots of mountains and get used to the new bike on lots of fun roads.&lt;br /&gt;&lt;br /&gt;I ended up doing 2,250 miles, door-to-door. My final route is below:&lt;br /&gt;&lt;br /&gt;&lt;iframe marginheight="0" marginwidth="0" src="http://www.google.co.uk/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Calais,+France&amp;amp;daddr=Hotel+escurial,+metz+to:Seestrasse+182,+8800+Thalwil,+Switzerland+%28Hotel+Alexander+Am+See%29+to:Route+29+to:Via+Cantonale+to:Via+Mazzini,+44,+10059+Susa+%28TO%29,+Italy+%28Hotel+Napoleon+Susa%29+to:Chiomonte+Turin,+Piedmont,+Italy+to:oulx+to:Pontis,+Alpes-de-Haute-Provence,+Provence-Alpes-C%C3%B4te+d%27Azur,+France+to:Digne-les-Bains,+France+to:grasse,+france+to:All%C3%A9e+des+Clubs+to:Route+de+Narbonne+Plage,+BP+20409,+11104+Narbonne,+France+%28Ch%C3%A2teau+l%27Hospitalet%29+to:N-260%2FCtra+de+Olot+to:hotel+resguard,+ripoll+to:av%2F+generalitat+27,+25560+sort,+Spain+%28hotel+les+brases%29+to:F%C3%ADgols+de+Tremp,+Tremp,+Lerida,+Catalonia,+Spain+to:Graus,+spain+to:bisaurri,+spain+to:biescas,+spain+to:3,+Rue+Gambetta,+64000+Pau,+France+%28Hotel+Bristol+Sarl%29+to:Bilbao+Ferry+Terminal&amp;amp;geocode=%3BFTxY7QIdqixeACE6PZk40CLq7A%3BFYvC0QIdNqeCACFnI16FQT0TFQ%3BFQhGwwIdmrKZAA%3BFdb_vQIdiGGJAA%3BFafBsAIdj4xrACHcwGTPsFNDzA%3BFQJ3sAIdpIdqAA%3B%3BFfgSpwIdlgJhAA%3B%3B%3BFbw_mAIdnt5pAA%3BFfeykgIdeoIvACHrFyHsFi-TWw%3BFXY8hAId8AErAA%3BFQWPhQIdAg4hACFXzkGmCT93vQ%3BFZ4xhwId9UcRACGq9cNOlW1reg%3BFWwzgwIdzGkMAA%3B%3B%3B%3BFdSmlAIdoGn6_yFWifTjjGQhkQ%3BFeQwlQIdLcbR_yHg-lLkp58TOg&amp;amp;hl=en&amp;amp;mra=ls&amp;amp;doflg=ptm&amp;amp;sll=42.167475,0.733337&amp;amp;sspn=1.223448,2.37854&amp;amp;ie=UTF8&amp;amp;ll=47.085085,4.284668&amp;amp;spn=8.991971,19.02832&amp;amp;output=embed" frameborder="0" height="350" scrolling="no" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://www.google.co.uk/maps?f=d&amp;amp;source=embed&amp;amp;saddr=Calais,+France&amp;amp;daddr=Hotel+escurial,+metz+to:Seestrasse+182,+8800+Thalwil,+Switzerland+%28Hotel+Alexander+Am+See%29+to:Route+29+to:Via+Cantonale+to:Via+Mazzini,+44,+10059+Susa+%28TO%29,+Italy+%28Hotel+Napoleon+Susa%29+to:Chiomonte+Turin,+Piedmont,+Italy+to:oulx+to:Pontis,+Alpes-de-Haute-Provence,+Provence-Alpes-C%C3%B4te+d%27Azur,+France+to:Digne-les-Bains,+France+to:grasse,+france+to:All%C3%A9e+des+Clubs+to:Route+de+Narbonne+Plage,+BP+20409,+11104+Narbonne,+France+%28Ch%C3%A2teau+l%27Hospitalet%29+to:N-260%2FCtra+de+Olot+to:hotel+resguard,+ripoll+to:av%2F+generalitat+27,+25560+sort,+Spain+%28hotel+les+brases%29+to:F%C3%ADgols+de+Tremp,+Tremp,+Lerida,+Catalonia,+Spain+to:Graus,+spain+to:bisaurri,+spain+to:biescas,+spain+to:3,+Rue+Gambetta,+64000+Pau,+France+%28Hotel+Bristol+Sarl%29+to:Bilbao+Ferry+Terminal&amp;amp;geocode=%3BFTxY7QIdqixeACE6PZk40CLq7A%3BFYvC0QIdNqeCACFnI16FQT0TFQ%3BFQhGwwIdmrKZAA%3BFdb_vQIdiGGJAA%3BFafBsAIdj4xrACHcwGTPsFNDzA%3BFQJ3sAIdpIdqAA%3B%3BFfgSpwIdlgJhAA%3B%3B%3BFbw_mAIdnt5pAA%3BFfeykgIdeoIvACHrFyHsFi-TWw%3BFXY8hAId8AErAA%3BFQWPhQIdAg4hACFXzkGmCT93vQ%3BFZ4xhwId9UcRACGq9cNOlW1reg%3BFWwzgwIdzGkMAA%3B%3B%3B%3BFdSmlAIdoGn6_yFWifTjjGQhkQ%3BFeQwlQIdLcbR_yHg-lLkp58TOg&amp;amp;hl=en&amp;amp;mra=ls&amp;amp;doflg=ptm&amp;amp;sll=42.167475,0.733337&amp;amp;sspn=1.223448,2.37854&amp;amp;ie=UTF8&amp;amp;ll=47.085085,4.284668&amp;amp;spn=8.991971,19.02832" style="color: rgb(0, 0, 255); text-align: left;"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Highlights were the second day I spent in the Alps, riding from Susa,Italy down to Cannes. A little dirt-road detour to Pontis and the rest of the trip on the N85 were all good fun on the bike.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2498/3751818974_d36ddaeb94.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: left; cursor: pointer; width: 400px; height: 270px;" src="http://farm3.static.flickr.com/2498/3751818974_d36ddaeb94.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Pyrenees were also fantastic - I did a little bit of research before I left and found that the N260 was a good biking road, so I spent about 3 days riding west through the Pyrenees mostly on the N260 - joining at the 44km marker and leaving just after the 500km point. That road varied from 2 lane highways to single lane mountain roads with 30km/h hairpin bends and back again - great sightseeing and biking.&lt;br /&gt;&lt;br /&gt;The bike was great - aside from the seat, which after about 45mins becomes the most uncomfortable seat in the world. Apart from that it is an ideal bike for long trips - it does feel a little unsettled sometimes at high-speed on motorways, or in strong crosswinds, but otherwise it handled everything without any fuss and is ridiculously economical too, returning 70MPG+ for several tanks, giving it a range of nearly 240 miles, although I was only brave enough to take it up to 213 miles before filling up.&lt;br /&gt;&lt;br /&gt;Instead of the £1000+ for the BMW luggage I went with a £130 &lt;a href="http://www.nippynormans.com/WUNDERLICH-TANK-BAG-TOURING-F650GS-08-on-_800GS/productinfo/WUN-1250111/"&gt;Wunderlich tank bag&lt;/a&gt; and a bungeed on rollbag of clothes. The tank bag is designed for the F800GS and it shows: it was essential for stuffing credit cards and toll tickets, as well as holding a map, GPS etc. It's a shame it wasn't secure enough to leave on the bike, but it's so easy to take off and put on that wasn't a big deal.&lt;br /&gt;&lt;br /&gt;Haven't quite finished going through all the photos yet, but they will all be in the &lt;a href="http://www.flickr.com/photos/raindog/sets/72157621174140520/"&gt;Flickr set&lt;/a&gt; in the next few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-8908121207640702295?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/1_X2nEJ72_s/my-grand-tour.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2498/3751818974_d36ddaeb94_t.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/07/my-grand-tour.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-1391308276686014552</guid><pubDate>Fri, 24 Apr 2009 14:05:00 +0000</pubDate><atom:updated>2009-04-24T15:25:29.816+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">os x</category><category domain="http://www.blogger.com/atom/ns#">mac</category><title>Finally, draggable applets on OS X</title><description>&lt;div style="text-align: left;"&gt;Apple have a pre-release Java update available on the &lt;a href="http://developer.apple.com/mac/"&gt;ADC&lt;/a&gt; that updates Java to 1.60_13 on 64-bit platforms, so Mac users can finally take advantage of the new generation applet technology that's been available on Windows and Linux for months now.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I just installed it and tried it with the PDF Viewer applet that we &lt;a href="http://big.faceless.org:80/blog/2009/01/05/new_features_for_java_applets.html"&gt;upgraded&lt;/a&gt; to take advantage of Update 10 features, and it worked fine - I could drag the applet out and create a desktop shortcut with no problems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_FcKrVLRyfNc/SfHLsDQadDI/AAAAAAAAAHk/MzDxK4i9Wso/s320/Picture+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5328263791804838962" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll need OS 10.5.6, Leopard, and Safari 4.0 beta or the latest Firefox 3.1 if you want to try this out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-1391308276686014552?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/nt8ftlTqhzc/finally-draggable-applets-on-os-x.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_FcKrVLRyfNc/SfHLsDQadDI/AAAAAAAAAHk/MzDxK4i9Wso/s72-c/Picture+2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/04/finally-draggable-applets-on-os-x.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-8603369429101633146</guid><pubDate>Fri, 13 Mar 2009 11:22:00 +0000</pubDate><atom:updated>2009-03-13T11:27:43.293Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">swing</category><category domain="http://www.blogger.com/atom/ns#">javaone</category><category domain="http://www.blogger.com/atom/ns#">javafx</category><title>JavaOne</title><description>Rather obviously, there are a lot of JavaFX technical sessions at JavaOne this year. A couple seem to deal with integrating JavaFX and Swing, and &lt;a href="http://www28.cplan.com/cc230/session_details.jsp?isid=305574&amp;amp;ilocation_id=230-1&amp;amp;ilanguage=english"&gt;TS-5574&lt;/a&gt; looks particularly interesting, according to the abstract &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"&lt;span style="font-style:italic;"&gt;The presentation goes into the more technical details of the advantages and limitations of mixing JavaFX technology and Swing. It also explains the correct (supported) way of mixing these, because several people have discussed this in blogs and are not doing it the right way&lt;/span&gt;."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Haven't decided whether I'm attending or not this year, but that session would be on my schedule.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-8603369429101633146?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/hRvwklOwqqU/javaone.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/03/javaone.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-7603660851052340047</guid><pubDate>Tue, 17 Feb 2009 14:14:00 +0000</pubDate><atom:updated>2009-02-18T09:56:09.463Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">firefox extension</category><category domain="http://www.blogger.com/atom/ns#">swing</category><category domain="http://www.blogger.com/atom/ns#">pdf</category><title>A zero-install* cross-platform PDF Viewer</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_FcKrVLRyfNc/SZrGcy7KffI/AAAAAAAAAHU/KxtExSrVd3A/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 202px;" src="http://2.bp.blogspot.com/_FcKrVLRyfNc/SZrGcy7KffI/AAAAAAAAAHU/KxtExSrVd3A/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5303769709190741490" border="0" /&gt;&lt;/a&gt;After the &lt;a href="http://stufffromjim.blogspot.com/2009/01/pdf-viewer-and-java-6-update-10.html"&gt;recent updates to the BFO PDF Viewer applet&lt;/a&gt; to take advantage of the Java 6 Update 10 features we have also changed the applet hosting page so that it accepts parameters and passes them onto the applet.&lt;br /&gt;&lt;br /&gt;The applet already had functionality to open PDF documents passed to it as parameters, but this provides the ability to open a PDF file in a specified viewer, on any operating system, with a single URL.&lt;br /&gt;&lt;br /&gt;For example:&lt;a href="http://bfo.co.uk/pdfviewer.html?pdf=http://bfo.co.uk/products/pdf/docs/userguide.pdf&amp;amp;feature.Menus=false"&gt; http://bfo.co.uk/pdfviewer.html?pdf=http://bfo.co.uk/products/pdf/docs/userguide.pdf&amp;amp;feature.Menus=false&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What would be more useful is if this was integrated into your browser so that you can open any links to PDF documents directly in the PDF Viewer - which is what the Firefox extension that I have written does: any link on a page that ends in .pdf will have an extra "&lt;span style="font-style: italic;"&gt;Open link in PDF Viewer&lt;/span&gt;" context menu option.&lt;br /&gt;&lt;br /&gt;Choosing this menu option will open the PDF document in a separate browser window that contains the PDF Viewer applet. You can install the Firefox extension from here: &lt;a href="http://bfo.co.uk/bfopdfviewer.xpi"&gt;http://bfo.co.uk/bfopdfviewer.xpi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Obviously having Java 6 Update 10 or later makes the applet experience better, although we are specifying that each applet instance runs in its own JVM instance, which might slow down the applet startup a little, but is important for coping with larger PDF documents.&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-size:85%;"&gt;I know Java requires a JVM installation - but I picked up this bit of marketing bollocks from the early days of Altio and figure desktop Java needs all the help it can get these days :-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-7603660851052340047?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/HmfG1ZkrWKE/zero-install-cross-platform-pdf-viewer.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_FcKrVLRyfNc/SZrGcy7KffI/AAAAAAAAAHU/KxtExSrVd3A/s72-c/Picture+4.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/02/zero-install-cross-platform-pdf-viewer.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-99390712551293377</guid><pubDate>Tue, 03 Feb 2009 09:39:00 +0000</pubDate><atom:updated>2009-02-03T09:41:00.827Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">download</category><title>Java 6 Update 12 available</title><description>Go get it today - all you people with 64-bit browsers will be pleased with the 64-bit plugin.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-99390712551293377?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/qHkly7DOXfo/java-6-update-12-available.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/02/java-6-update-12-available.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-6186281618335797305</guid><pubDate>Fri, 09 Jan 2009 11:45:00 +0000</pubDate><atom:updated>2009-01-13T14:24:29.084Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">pdf</category><category domain="http://www.blogger.com/atom/ns#">bfo</category><category domain="http://www.blogger.com/atom/ns#">update 10</category><title>PDF Viewer applet and Java 6 Update 10</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FcKrVLRyfNc/SWc8eRGtgmI/AAAAAAAAAGg/BdwT75is_W4/s1600-h/VIsta.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_FcKrVLRyfNc/SWc8eRGtgmI/AAAAAAAAAGg/BdwT75is_W4/s320/VIsta.png" alt="" id="BLOGGER_PHOTO_ID_5289262778055230050" border="0" /&gt;&lt;/a&gt;I've spent the last few days finally getting round to updating BFO's &lt;a href="http://bfo.co.uk/products/pdf/viewer.jsp"&gt;PDF Viewer&lt;/a&gt; applet to take advantage of the new Java 6 Update 10 features.&lt;br /&gt;&lt;br /&gt;It was mostly straightforward, with most of the time taken up with making the applet look and behave exactly like an application when its dragged out of the browser. We did run into a &lt;a href="http://bugs.sun.com/view_bug.do?bug_id=6572829"&gt;Sun bug&lt;/a&gt; along the way, which means that desktop  icons created when you drag an applet out of the browser look crap on Vista and Ubuntu because Java takes a 32 x 32 icon and scales it up to 48 x 48, even when you provide a 48 x 48 icon.&lt;br /&gt;&lt;br /&gt;I also used another very cool applet to create a video of the applet in action: &lt;a href="http://www.screencast-o-matic.com/"&gt;http://www.screencast-o-matic.com/&lt;/a&gt; - a JavaPosse applet of the week - provides a quick and free way to create screencast videos and host them so that anyone can watch them. Highly recommended. My screencast is here: &lt;a href="http://www.screencast-o-matic.com/watch/cQVQeynE5"&gt;http://www.screencast-o-matic.com/watch/cQVQeynE5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, if you have Java 6 Update 10 or later installed then nip along to &lt;a href="http://bfo.co.uk/products/pdf/viewer.jsp"&gt;http://bfo.co.uk/products/pdf/viewer.jsp&lt;/a&gt; and try it out. If you want more information on how to update an applet to take advantage of the new Update 10 features then there's a blog post over at BFO detailing exactly what was involved: &lt;a href="http://big.faceless.org/blog/2009/01/05/1231151940000.html"&gt;http://big.faceless.org/blog/2009/01/05/1231151940000.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-6186281618335797305?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/CGWCovj79qU/pdf-viewer-and-java-6-update-10.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_FcKrVLRyfNc/SWc8eRGtgmI/AAAAAAAAAGg/BdwT75is_W4/s72-c/VIsta.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2009/01/pdf-viewer-and-java-6-update-10.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-8697216022440371088</guid><pubDate>Sat, 20 Dec 2008 22:39:00 +0000</pubDate><atom:updated>2008-12-20T22:48:47.046Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">swing</category><category domain="http://www.blogger.com/atom/ns#">javafx</category><title>The 'official' way to integrate JavaFX with Swing</title><description>Josh Marinacci has a blog entry on how to integrate Java FX into Swing applications: &lt;a href="http://blogs.sun.com/javafx/entry/how_to_use_javafx_in"&gt;http://blogs.sun.com/javafx/entry/how_to_use_javafx_in&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's good to have a final answer on how to accomplish this in JavaFX 1.0, but to be honest it looks like a nasty hack, which implies it's something Sun either hadn't thought about or didn't consider important. That seems peculiar as it was so &lt;a href="http://stufffromjim.blogspot.com/2008/08/compiled-javafx-in-swing-applications.html"&gt;easy&lt;/a&gt; to do in previous releases, and it seems a dumb move not to make Swing and JavaFX as easily interoperable as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-8697216022440371088?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/FSltTQKFL8o/official-way-to-integrate-javafx-with.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/12/official-way-to-integrate-javafx-with.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-7198217340666565553</guid><pubDate>Sat, 13 Dec 2008 10:41:00 +0000</pubDate><atom:updated>2008-12-13T10:57:58.617Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">swing</category><category domain="http://www.blogger.com/atom/ns#">javafx</category><title>JavaFX and Swing - again</title><description>I've noticed that my &lt;a href="http://stufffromjim.blogspot.com/2008/08/compiled-javafx-in-swing-applications.html"&gt;previous entry about using JavaFX widgets in Swing applications&lt;/a&gt; has been getting a lot of traffic since JavaFX 1.0 was finally released.&lt;br /&gt;&lt;br /&gt;Having finally had time to download and try out the JavaFX 1.0 SDK it seems like Sun have done a good job: the demos and samples are all good, &lt;a href="http://javafx.com/"&gt;JavaFX.com&lt;/a&gt; no longer looks embarrassing and the NetBeans integration is great (there is an &lt;a href="http://blogs.sun.com/octav/entry/eclipse_plugin_for_javafx_script"&gt;Eclipse plugin available&lt;/a&gt; too).&lt;br /&gt;&lt;br /&gt;However, the 1.0 release has removed the javafx.ext.swing.Canvas class, which was crucial in embedding JavaFX widgets in Swing applications, as the Canvas had a method to return a JComponent, so you could simply add it to your Swing application without too much trouble. Now I can't see any way of easily using JavaFX in Swing applications - I have heard some hints that it can be done with some reflection 'hacks', but I haven't seen any more information about this.&lt;br /&gt;&lt;br /&gt;I hope there is a relatively simple way of achieving this, because if &lt;a href="http://weblogs.java.net/blog/editors/archives/2008/12/be_safe.html"&gt;JavaFX really is 'Swing 2' &lt;/a&gt;then they need to make the two interoperate as seamlessly as possible so that people can migrate their existing Swing applications in small steps, rather than having to rewrite in JavaFX.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-7198217340666565553?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/Vvbg2Cg-6W0/javafx-and-swing-again.html</link><author>noreply@blogger.com (jim)</author><thr:total>2</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/12/javafx-and-swing-again.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-8447549338535031526</guid><pubDate>Thu, 20 Nov 2008 19:28:00 +0000</pubDate><atom:updated>2008-11-20T20:26:19.969Z</atom:updated><title>GPS and MapView in Android</title><description>Having spent an evening hacking around writing an Android application that uses the GPS position together with the MapView component to show both your current location latitude/longitude and visually  I spent a lot of time sifting through sites and blogs that used out of date APIs and overlooked crucial steps, so I thought I'd document how to enable GPS access and MapView usage using the Android Eclipse plugin and the emulator. This will then  work when running on an Android device.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Step 1: GPS Access&lt;/span&gt;&lt;br /&gt;Basic GPS access is relatively straightforward. You can use code like this in your Activity.onCreate() to get the current position and register a listener for position updates:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);&lt;br /&gt;&lt;br /&gt;List pro = lm.getAllProviders();&lt;br /&gt;Location l = lm.getLastKnownLocation(LOCATION_SERVICE);&lt;br /&gt;&lt;br /&gt;updatePositionOnScreen(l);&lt;br /&gt;&lt;br /&gt;Intent i = new Intent(LOCATION_CHANGED);&lt;br /&gt;LocationListener ll = new LocationListener() {&lt;br /&gt; public void onLocationChanged(Location location) {&lt;br /&gt;   updatePositionOnScreen(location);&lt;br /&gt; }&lt;br /&gt; public void onProviderDisabled(String provider) {&lt;br /&gt; }&lt;br /&gt; public void onProviderEnabled(String provider) {&lt;br /&gt; }&lt;br /&gt; public void onStatusChanged(String provider, int status, Bundle extras) {&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 100, ll);&lt;br /&gt;&lt;/pre&gt;In addition to this you need to add permissions to your Android manifest file to allow your application access to the location services:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_LOCATION/"&amp;gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_GPS"/&amp;gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&amp;gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For running your application in the Android emulator you will need mock position data, as there is no live GPS data from the emulator.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FcKrVLRyfNc/SSW8TA_5MNI/AAAAAAAAAGA/VD-HblD1S_k/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 113px; height: 320px;" src="http://1.bp.blogspot.com/_FcKrVLRyfNc/SSW8TA_5MNI/AAAAAAAAAGA/VD-HblD1S_k/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5270825973778559186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The easiest way to do this is to launch the emulator from Eclipse and then switch to the DDMS perspective (Window -&gt; Open Perspective -&gt; Other). Your Eclipse should then look something like the picture on the right.&lt;br /&gt;&lt;br /&gt;This shows you a device browser on the left, w ith an Emulator Control tab underneath. Scroll down the Emulator Control tab until you see the Location Controls section. This allows you to enter mock location data to use when running the Emulator - the best way is to use a KML file, which you can create from Google Earth, or download a default location file from &lt;a href="http://www.sunlightlabs.com/earmarks/house_defense_earmarks_08.kml"&gt;http://www.sunlightlabs.com/earmarks/house_defense_earmarks_08.kml&lt;/a&gt;. Once this has been imported click the green play button in the Location Controls (KML) section and your application will receive location updates based on the contents of the KML file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Step 2: Google MapView component&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Google MapView component allows you to embed the Google map component in your application, so we can combine our live location data with a visual display of that location on a map. Embedding the MapView component has a few "tricky" steps:&lt;br /&gt;&lt;br /&gt;Add the MapView component to your Activity:&lt;br /&gt;&lt;pre&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;com.google.android.maps.MapView&lt;br /&gt; android:id="@+id/mapview1"&lt;br /&gt; android:layout_width="fill_parent"&lt;br /&gt; android:layout_height="fill_parent"&lt;br /&gt; android:enabled="true"&lt;br /&gt; android:clickable="true"&lt;br /&gt; android:apiKey="your api key"&lt;br /&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;The apiKey attribute should be the MD5 fingerprint of your Maps API key. In order to deploy your MapView enabled application you need to register for a Google Maps API key, but for debugging you can use the Android SDK's debug key. All the details on Google Maps API keys can be found here &lt;a href="http://code.google.com/android/toolbox/apis/mapkey.html"&gt;http://code.google.com/android/toolbox/apis/mapkey.html&lt;/a&gt;, with details on how to obtain the debug SDK fingerprint here&lt;a href="http://code.google.com/android/toolbox/apis/mapkey.html#getdebugfingerprint"&gt; http://code.google.com/android/toolbox&lt;/a&gt; &lt;a href="http://code.google.com/android/toolbox/apis/mapkey.html#getdebugfingerprint"&gt;/apis/mapkey.html#getdebugfingerprint&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once you have this, then to enable the MapView component you need to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Change your Activity to extend MapActivity rather than Activity.&lt;/li&gt;&lt;li&gt;Add &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;uses-library android:name="com.google.android.maps"/&amp;gt; &lt;/span&gt;as a child of the &lt;application&gt; element in the Android Manifest file.&lt;/application&gt;&lt;/li&gt;&lt;li&gt;Enable Internet access for your application so that it can download map data by adding &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;uses-permission android:name="android.permission.INTERNET"/&amp;gt; &lt;/span&gt;to your manifest file.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;You can then add code to your application's location listener to update the MapView component to reflect the current position, such as:&lt;br /&gt;&lt;pre&gt;MapView mapView = (MapView) findViewById(R.id.mapview1);&lt;br /&gt;MapController mc = mapView.getController();&lt;br /&gt;&lt;br /&gt;GeoPoint p = new GeoPoint((int) (l.getLatitude() * 1E6),&lt;br /&gt;           (int) (l.getLongitude() * 1E6));&lt;br /&gt;mc.animateTo(p);&lt;br /&gt;mc.setZoom(16);          &lt;br /&gt;mapView.invalidate();&lt;br /&gt;&lt;/pre&gt;When you run your application you should see your live MapView control responding to GPS lcoation updates, like below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FcKrVLRyfNc/SSXG0lY5VzI/AAAAAAAAAGI/y4_LbthyTMM/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 230px;" src="http://3.bp.blogspot.com/_FcKrVLRyfNc/SSXG0lY5VzI/AAAAAAAAAGI/y4_LbthyTMM/s200/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5270837545599063858" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-8447549338535031526?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/hQfXfmCWWvk/gps-and-mapview-in-android.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_FcKrVLRyfNc/SSW8TA_5MNI/AAAAAAAAAGA/VD-HblD1S_k/s72-c/Picture+1.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/11/gps-and-mapview-in-android.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-1835143703001635021</guid><pubDate>Thu, 13 Nov 2008 08:32:00 +0000</pubDate><atom:updated>2008-11-13T08:37:46.354Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">java version</category><title>Tracking Java versions of web site visitors</title><description>Gili over at '&lt;a href="http://cowwoc.blogspot.com/"&gt;Where the cows roam free&lt;/a&gt;" has a very interesting post about how to combine Google Analytics and the new Java deployment file to track what version of Java visitors to a website are using:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cowwoc.blogspot.com/2008/11/tracking-java-versions-using-google.html"&gt;http://cowwoc.blogspot.com/2008/11/tracking-java-versions-using-google.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's trivial to add it to an existing Google Analytics-enabled site, and should hopefully yield some interesting and useful results, so I've added it to this site and &lt;a href="http://coolapplets.blogspot.com/"&gt;Cool Applets&lt;/a&gt; too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-1835143703001635021?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/gOX8RPcQwf0/tracking-java-versions-of-web-site.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/11/tracking-java-versions-of-web-site.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-7458262441000057365</guid><pubDate>Mon, 20 Oct 2008 08:20:00 +0000</pubDate><atom:updated>2008-10-20T09:25:18.469+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">update 10</category><title>Java 6 Update 10 released</title><description>Looks like Java 6 Update 10 has been officially released - for some reason Sun seem to be keeping it quiet, which seems a little odd, considering how significant this release should be for client-side Java and Java FX.&lt;br /&gt;&lt;br /&gt;Windows and Linux users go get it: &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/a&gt;. OS X users, bang your head on your desk in frustration at Apple's lousy Java support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-7458262441000057365?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/aKAkRBEIyHU/java-6-update-10-released.html</link><author>noreply@blogger.com (jim)</author><thr:total>1</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/10/java-6-update-10-released.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-1004034556472298552</guid><pubDate>Wed, 08 Oct 2008 20:56:00 +0000</pubDate><atom:updated>2008-10-08T22:01:32.336+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photography</category><category domain="http://www.blogger.com/atom/ns#">fail blog</category><title>Fail blog</title><description>A photo I took is potentially going to be included on &lt;a href="http://failblog.org/vote"&gt;Fail Blog&lt;/a&gt; - it's obviously the best one, so please vote it up!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://failblog.org/vote/"&gt;&lt;img src="http://failblog.wordpress.com/files/2008/10/fail-owned-park-and-shop-fail.jpg" alt="" title="fail-owned-park-and-shop-fail" width="391" height="500" class="alignnone size-full wp-image-6779" /&gt;&lt;/a&gt;&lt;br /&gt;more &lt;a href="http://failblog.org"&gt;fail, owned and pwned pics and videos&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-1004034556472298552?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/GtxilQKhQCw/fail-blog.html</link><author>noreply@blogger.com (jim)</author><thr:total>1</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/10/fail-blog.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-2884228918594042736</guid><pubDate>Wed, 08 Oct 2008 13:36:00 +0000</pubDate><atom:updated>2008-10-08T14:45:09.250+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">os x</category><title>Debugging Applets on OS X</title><description>So, despite Apple's best efforts to hide the Java Preferences dialog in OS X (&lt;span style="font-style: italic;"&gt;Applications/Utilities/Java/Java Preferences&lt;/span&gt; in case you're still looking) enough people must have found it by now for Apple to move to the next step: cripple the dialog itself.&lt;br /&gt;&lt;br /&gt;After installing the latest Java Update from Apple I noticed a redesigned Java Preferences dialog, which was certainly more compact than the previous version, mainly because Apple have removed the Applet runtime parameters field. So, if you want to set up your applet for remote debugging, change the default heap size or pass any other runtime parameter you now have to go an edit a file manually, as described at &lt;a href="http://support.apple.com/kb/HT3210"&gt;http://support.apple.com/kb/HT3210&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This may be fine for developers, although I don't see how it is an improvement over editing via the dialog that was there before this update, but instructing non-technical users on how to set up debugging or heap parameters for applets just got more difficult for no good reason.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-2884228918594042736?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/zat9rrdymnA/debugging-applets-on-os-x.html</link><author>noreply@blogger.com (jim)</author><thr:total>3</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/10/debugging-applets-on-os-x.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-6371038676294445644</guid><pubDate>Sun, 07 Sep 2008 17:11:00 +0000</pubDate><atom:updated>2008-09-07T18:26:01.324+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">chrome</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Google Chrome and Java Applets</title><description>Well, loathe as I am to add yet another blog post to the insane amount of Chrome related items that were blogged and reported last week, I did notice something interesting with regard to Chrome running Java applets.&lt;br /&gt;&lt;br /&gt;Pretty much the first thing I did after installing Chrome was to try it out with an &lt;a href="http://coolapplets.blogspot.com/2008/09/wwwjigzonecom.html"&gt;applet&lt;/a&gt; as I wasn't sure whether Chrome supported applets or not. It did, it all seemed to work and I didn't think much more about it. It was only a day or two later after seeing some Java.net forum posts that I realised that Chrome only works with the latest version of Java SE, version 6 Update 10, which contains all the cool new features to make Java applets run better.&lt;br /&gt;&lt;br /&gt;This could be a good thing - one thing I've said before is that Update 10 has some great features in it, but getting everyone to upgrade to it is going to be hard work. A lot of people, and especially most large corporations, do not regularly upgrade the version of Java SE on their desktop. So, if Chrome forces people to install the very latest version then great.&lt;br /&gt;&lt;br /&gt;However, does Chrome explicitly tell users that they need that version of Java? Does it direct them to the right place to get it? If not, then it's just going to create more client-side Java confusion, and I've seen reports of Chrome not running Java properly even when Update 10 is present, and so it's great in principle to make people install the latest and greatest JRE, but unless it's a seamless and trouble-free experience to do so then it will not help Java's already tarnished client-side reputation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-6371038676294445644?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/SUveoGDVtaM/google-chrome-and-java-applets.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/09/google-chrome-and-java-applets.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-1196876009560865839</guid><pubDate>Sun, 31 Aug 2008 14:51:00 +0000</pubDate><atom:updated>2008-12-20T22:45:58.825Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">swing</category><category domain="http://www.blogger.com/atom/ns#">javafx</category><title>Compiled JavaFX in Swing applications - again</title><description>&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Update&lt;/span&gt;: This doesn't work in the full release of JavaFX. Please &lt;a href="http://stufffromjim.blogspot.com/2008/12/official-way-to-integrate-javafx-with.html"&gt;see here&lt;/a&gt; for how to do this in Java FX 1.0.&lt;br /&gt;&lt;br /&gt;I &lt;a href="http://stufffromjim.blogspot.com/2008/05/compiled-javafx-in-swing-applications.html"&gt;posted&lt;/a&gt; a while ago about problems I was having integrating a compiled JavaFX widget into a Swing application - theoretically it should have been possible, as it's all Java and Swing, but I hit a brick wall that looked like it was due to JavaFX being in early, early alpha/beta stage, so I left it and decided to come back to it when JavaFX was more stable.&lt;br /&gt;&lt;br /&gt;Well, the &lt;a href="http://java.sun.com/javafx/"&gt;preview SDK&lt;/a&gt; for JavaFX is now available, and I had a wet Sunday afternoon to spare, so I tried it again. Of course, as it has been 4 or 5 weeks since I last looked at JavaFX they have completely changed the structure and location of the classes, so it took me a while to get the hang of things again, but once I had done that actually getting a JavaFX widget into a Swing application was trivial really.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FcKrVLRyfNc/SLqxmpm1l6I/AAAAAAAAAEI/RT-u4NFgMqc/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_FcKrVLRyfNc/SLqxmpm1l6I/AAAAAAAAAEI/RT-u4NFgMqc/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5240696393960888226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The screenshot above shows the Stopwatch example from the JavaFX SDK inside a Swing window - the two controls to the left are Swing controls.&lt;br /&gt;&lt;br /&gt;The key to getting JavaFX to operate with Swing is the javafx.ext.swing.Canvas object, which has a &lt;span style="font-weight: bold;"&gt;getJComponent()&lt;/span&gt; method, so all you need to do is place all of your JavaFX content onto a Canvas object, then use the JComponent returned by Canvas.getJComponent() to add the JavaFX widget to any Swing container.&lt;br /&gt;&lt;br /&gt;For the example above, the Stopwatch widget example runs in a JavaFX frame with no Canvas, but all we need to do is write a simple JavaFX Canvas object to wrap the Stopwatch, using the code below:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package stopwatch;&lt;br /&gt;&lt;br /&gt;import javafx.ext.swing.Canvas;&lt;br /&gt;import javax.swing.JComponent;&lt;br /&gt;&lt;br /&gt;public class SWCanvas {&lt;br /&gt;public function getChildComponent() {&lt;br /&gt;      var sw = StopwatchWidget{}&lt;br /&gt;  var c2:Canvas = Canvas {&lt;br /&gt;        content: sw&lt;br /&gt;          width: 400&lt;br /&gt;          height: 400&lt;br /&gt;          visible: true&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       return c2.getJComponent();&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Once we have compiled that, we can use our JavaFX 'SWCanvas' object in our Swing application just like any other Java class, so the simple JFrame example pictured above does just that:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package stopwatch;&lt;br /&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;import java.awt.Dimension;&lt;br /&gt;import java.awt.FlowLayout;&lt;br /&gt;&lt;br /&gt;public class SwingStopwatch {&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;  Runnable r = new Runnable() {&lt;br /&gt;      public void run() {&lt;br /&gt;          new SwingStopwatch().runMe();&lt;br /&gt;      }&lt;br /&gt;  };&lt;br /&gt;  SwingUtilities.invokeLater(r);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void runMe() {&lt;br /&gt;  JFrame jf = new JFrame("Swing and JavaFX Test");&lt;br /&gt;  jf.setPreferredSize(new Dimension(600,400));&lt;br /&gt;  jf.getContentPane().setLayout(new FlowLayout());&lt;br /&gt;&lt;br /&gt;  jf.getContentPane().add(new JButton("Click me"));&lt;br /&gt;  jf.getContentPane().add(new JTextField("Type into me"));&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       // JavaFX widget here!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       stopwatch.SWCanvas c1 = new stopwatch.SWCanvas();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       jf.getContentPane().add(c1.getChildComponent());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  jf.pack();&lt;br /&gt;  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); &lt;br /&gt;  jf.setVisible(true);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And that's all there is to it. The trickiest part of the whole thing was getting the classpath for the JavaFX runtime right when running the Swing application (your CLASSPATH should look something like: &lt;span style="font-weight: bold;"&gt;%JAVAFX_HOME%\lib\javafxgui.jar;%JAVAFX_HOME%\lib\javafxrt.jar;%JAVAFX_HOME%\lib\javafx-swing.jar;%JAVAFX_HOME%\lib\Scenario.jar&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;With JavaFX's ability to create impressive animated user interfaces quickly, and with relatively little code, then the ability to add JavaFX widgets to any Swing container could be a great way to improve Swing applications incrementally, rather than rewriting the whole application in JavaFX.&lt;br /&gt;&lt;br /&gt;I'm definitely not a JavaFX expert though, so if you want some more ideas of the very impressive things that you can do with JavaFX then check out &lt;a href="http://learnjavafx.typepad.com/weblog/"&gt;James Weaver's JavaFX Blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-1196876009560865839?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/hj-T-VUwNWs/compiled-javafx-in-swing-applications.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_FcKrVLRyfNc/SLqxmpm1l6I/AAAAAAAAAEI/RT-u4NFgMqc/s72-c/Picture+2.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/08/compiled-javafx-in-swing-applications.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-7633794104510700084</guid><pubDate>Fri, 01 Aug 2008 08:32:00 +0000</pubDate><atom:updated>2008-09-07T18:27:32.228+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">edt</category><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">swing</category><category domain="http://www.blogger.com/atom/ns#">japplet</category><title>JApplet and the Swing EDT</title><description>So, everyone knows by now that doing anything relating to Swing controls when you're not running in the Swing Event Dispatch Thread (EDT) is a big no-no. Unfortunately this is very easy to do, as Swing doesn't enforce this rule and 90% of the time your code will run with no visible problems if you don't do it (right up until you release it to a customer, at which point bugs will become immediately visible).&lt;br /&gt;&lt;br /&gt;A lot of the time it's reasonable that Swing doesn't force execution onto the EDT, certainly in high-level application classes, although the closer you get to the Swing classes the more sense it makes to actually enforce the rule in some way.&lt;br /&gt;&lt;br /&gt;For instance when writing an application it's up to the developer to get on the Swing EDT before you create and display your Swing controls. However there are other situations in which it's  obvious that Swing controls are going to be used and so Swing should put you on the EDT by default: when you're using JApplet for example.&lt;br /&gt;&lt;br /&gt;I hadn't noticed before now but I was surprised to notice that JApplet.init() is not invoked on the EDT. Try it:&lt;pre&gt;&lt;br /&gt;public class TestApplet extends JApplet {&lt;br /&gt;public void init() {  &lt;br /&gt;   System.out.println("JApplet.init - EDT = " +&lt;br /&gt;SwingUtilities.isEventDispatchThread());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Now if you're using a JApplet you obviously want to do Swing stuff in your applet, so why not help people out and start them off on the Swing EDT?&lt;br /&gt;&lt;br /&gt;I guess the issue with doing it by default is that people who don't know about the EDT rule wouldn't be aware that it is being done for them, so you're just avoiding potential bugs without people learning what is involved in avoiding the bugs, so they may just get into another EDT problem further down the line. That may be true, and Swing is definitely an API not a 'framework', allowing you to write code without any help or guidance on how things should be done correctly along the way, but I still think that you should at least start people off on the right track whenever you can - what they do after that is up to them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-7633794104510700084?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/2uVJVn15L58/japplet-and-swing-edt.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/08/japplet-and-swing-edt.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-1162439393699270249</guid><pubDate>Tue, 15 Jul 2008 10:41:00 +0000</pubDate><atom:updated>2008-12-11T00:06:27.156Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">altio</category><category domain="http://www.blogger.com/atom/ns#">altiolive</category><category domain="http://www.blogger.com/atom/ns#">groovy</category><category domain="http://www.blogger.com/atom/ns#">scripting</category><title>JavaScript and Groovy service functions in AltioLive</title><description>As discussed in the Using AltioLive with JavaScript whitepaper (&lt;a href="http://developers.altio.com/developer/library/JavaScriptwithAltio.pdf"&gt;http://developers.altio.com/developer/library/JavaScriptw&lt;/a&gt;&lt;a href="http://developers.altio.com/developer/library/JavaScriptwithAltio.pdf"&gt;ithAltio.pdf&lt;/a&gt;), Java 6.0 has built in support for dynamic scripting languages, such as JavaScript and Groovy, within the JVM (referred to as JSR 223).&lt;br /&gt;&lt;br /&gt;That document discussed integrating that functionality with the AltioLive client as a custom control, but you can also utilize the same feature to add support for implementing AltioLive Service Functions with scripting languages. We'll take a quick look at how to implement this in Java 6.0 and earlier JVMs by using the Apache Bean Scripting Framework (BSF).&lt;br /&gt;&lt;br /&gt;All that is required is a simple Java service function proxy to handle calling a script and returning the results. There are 2 service functions, one for Java 6 and one for BSF, and the source code is included with the Altio script service function JAR file (&lt;a href="http://developers.altio.com/developer/downloads/scriptsvcfunc.jar"&gt;http://developers.altio.com/developer/downloads/scriptsvcfunc.jar&lt;/a&gt;). Each service function takes the same parameters:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Engine: Name of the script engine to use. e.g. javascript, js, groovy&lt;/li&gt;&lt;li&gt;Script: Name of the script to execute&lt;/li&gt;&lt;li&gt;Function: Name of the function in the script to execute&lt;/li&gt;&lt;/ul&gt;The examples here are in JavaScript and Groovy, but other scripting languages are supported in both approaches, such as Ruby and Python.&lt;br /&gt;&lt;br /&gt;The advantages to using a scripting language for custom Altio Service Functions instead of Java are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Quicker development time (no IDE or compiler required)&lt;/li&gt;&lt;li&gt;Take advantage of particular langauge features to perform tasks. Some languages are better at string handling, XML parsing etc and are better suited for particular tasks than Java.&lt;/li&gt;&lt;/ul&gt;The examples here are in JavaScript and Groovy, but other scripting languages are supported in both approaches, such as Ruby and Python.&lt;br /&gt;&lt;h2&gt;Setup:&lt;/h2&gt;1 - Either:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Run the AltioLive Presentation Server using a Java 6 JDK and use the Java 6 examples.&lt;span style="font-style: italic;"&gt;(You should remove 'eics-client.jar' from Altio\WEB-INF\lib before starting otherwise you will have JSP compilation problems)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;  &lt;/span&gt;Run AltioLive Presentation Server using an older JDK and use the BSF examples&lt;/li&gt;&lt;/ul&gt;2 - Add scripting engines and supporting JARs into the AltioLive Presentation Server CLASSPATH (Altio\WEB-INF\lib).&lt;br /&gt;&lt;u&gt;Java6&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There are lots of engines here: &lt;a href="https://scripting.dev.java.net/files/documents/4957/37593/jsr223-engines.zip"&gt;https://scripting.dev.java.net/files/documents/4957/37593/jsr223-engines.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;For each engine you'll need supporting libraries. &lt;/li&gt;&lt;li&gt;e.g. Groovy libraries can be found here: &lt;a href="http://dist.groovy.codehaus.org/distributions/groovy-binary-1.5.6.zip"&gt;http://dist.groovy.codehaus.org/distributions/groovy-binary-1.5.6.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;BSF&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Altio installs BSF by default, but I had to upgrade to 2.4.0 to get this to work.&lt;/li&gt;&lt;li&gt;To add JavaScript support use Rhino: &lt;a href="http://www.mozilla.org/rhino/download.html"&gt;http://www.mozilla.org/rhino/download.html &lt;/a&gt;(&lt;span style="font-style: italic;"&gt;copy the js.jar into WEB-INF\lib&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Other engine can be found here: &lt;a href="http://jakarta.apache.org/bsf/index.html"&gt;http://jakarta.apache.org/bsf/index.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;3 -  Install the Altio Script Service Function by copying the JAR file (&lt;a href="http://developers.altio.com/developer/downloads/scriptsvcfunc.jar"&gt;http://developers.altio.com/developer/downloads/scriptsvcfunc.jar)&lt;/a&gt; into (Altio\WEB-INF\lib)&lt;br /&gt;4 - Create an Altio\WEB-INF\classes\scripts folder and copy the example scripts (&lt;a href="http://developers.altio.com/developer/downloads/scripts.zip"&gt;http://developers.altio.com/developer/downloads/scripts.zip&lt;/a&gt;) in there.&lt;br /&gt;&lt;h2&gt;Running&lt;/h2&gt;1 - You can reuse the Java Scripting service function proxy to execute any function in any script in any supported scripting engine, as in the examples below. The screenshots below are for the Java 6 implementation - if you are using the BSF then replace the classname with &lt;pre&gt;com.altio.services.scripting.BSFScriptServiceFunction&lt;/pre&gt;&lt;b&gt;Execute JavaScript Service Function&lt;/b&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FcKrVLRyfNc/SHyVD6erNQI/AAAAAAAAADY/sZmF5DbQC0I/s1600-h/tables1.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_FcKrVLRyfNc/SHyVD6erNQI/AAAAAAAAADY/sZmF5DbQC0I/s400/tables1.png" alt="" id="BLOGGER_PHOTO_ID_5223213562312996098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Example JavaScript:&lt;/u&gt;&lt;pre&gt;&lt;br /&gt;function returnSomeXml() {&lt;br /&gt;var result = "&amp;lt;javascript msg="'hello"&amp;gt;"&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;u&gt;Results:&lt;/u&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;RESULT AL_ID="RESULT"&amp;gt;&lt;br /&gt;&amp;lt;javascript msg="hello again from javascript, the time is Tue Jul 15 2008 12:17:02 GMT+0100 (BST)" AL_ID="RESULT-javascript"/&amp;gt;&lt;br /&gt;&amp;lt;/RESULT&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Execute Groovy Service Function&lt;/b&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FcKrVLRyfNc/SHyVRYPA4UI/AAAAAAAAADg/LL2Pg4ztZkQ/s1600-h/tables2.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_FcKrVLRyfNc/SHyVRYPA4UI/AAAAAAAAADg/LL2Pg4ztZkQ/s400/tables2.png" alt="" id="BLOGGER_PHOTO_ID_5223213793638670658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Example Groovy:&lt;/u&gt;&lt;pre&gt;&lt;br /&gt;def returnSomeXml2() {&lt;br /&gt;String result = "&amp;lt;groovy&amp;gt;"&lt;br /&gt;xml = {result+="&amp;lt;groovyitem id='${it}'/&amp;gt;"}&lt;br /&gt;val = (1..10).collect(xml)&lt;br /&gt;result += "&amp;lt;/groovy&amp;gt;"&lt;br /&gt;return result&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;u&gt;Results:&lt;/u&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;RESULT AL_ID="RESULT"&amp;gt;&lt;br /&gt;&amp;lt;groovy AL_ID="RESULT-groovy"&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="1" AL_ID="gi1"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="2" AL_ID="gi2"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="3" AL_ID="gi3"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="4" AL_ID="gi4"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="5" AL_ID="gi5"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="6" AL_ID="gi6"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="7" AL_ID="gi7"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="8" AL_ID="gi8"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="9" AL_ID="gi9"/&amp;gt;&lt;br /&gt;&amp;lt;groovyitem id="10" AL_ID="gi10"/&amp;gt;&lt;br /&gt;&amp;lt;/groovy&amp;gt;&lt;br /&gt;&amp;lt;/RESULT&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;These are trivial examples, but they demonstrate how you can implement Altio Service Functions in dynamic scripting languages. Their advantages of ease of development and deployment should make it simple to start using them for more complicated tasks. Further enhancements to the proxy could include passing parameters to the named script's service function, which would make it possible to send values all the way from the AltioLive client through to a server side script function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-1162439393699270249?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/KYIQL80XdAI/javascript-and-groovy-service-functions.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_FcKrVLRyfNc/SHyVD6erNQI/AAAAAAAAADY/sZmF5DbQC0I/s72-c/tables1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/07/javascript-and-groovy-service-functions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-313691248162777776</guid><pubDate>Fri, 04 Jul 2008 12:11:00 +0000</pubDate><atom:updated>2008-12-11T00:06:27.168Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">swurl</category><title>Swurl</title><description>Yet another social web aggregator site, to compete with FriendFeed and Socialthing, but Swurl does present the aggregated information in a really cool timeline format, which for me gives it the edge over the others, even though it's lacking generic RSS support at the moment.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_FcKrVLRyfNc/SG4UHBh9cOI/AAAAAAAAADI/nmC4FV2TRiw/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_FcKrVLRyfNc/SG4UHBh9cOI/AAAAAAAAADI/nmC4FV2TRiw/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5219131129071497442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Try it out: &lt;a href="http://peakyblinder.swurl.com/timeline"&gt;http://peakyblinder.swurl.com/timeline&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-313691248162777776?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/k2x5jV4ge3E/swurl.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_FcKrVLRyfNc/SG4UHBh9cOI/AAAAAAAAADI/nmC4FV2TRiw/s72-c/Picture+1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/07/swurl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-2534915199653611444</guid><pubDate>Fri, 04 Jul 2008 08:48:00 +0000</pubDate><atom:updated>2008-07-04T09:53:29.449+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">altio</category><category domain="http://www.blogger.com/atom/ns#">javaone</category><category domain="http://www.blogger.com/atom/ns#">altiolive</category><title>AltioLive and Applets at JavaOne</title><description>As I mentioned &lt;a href="http://stufffromjim.blogspot.com/2008/05/javaone-day-1_07.html"&gt;at the time&lt;/a&gt; I was interviewed on video about AltioLive and Applets at the Altio booth at JavaOne. If you can stand to see a slightly 'relaxed' man talk about Applets for 10 minutes then watch the video below!&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://blip.tv/play/Ab+GBgA" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="290" width="300"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-2534915199653611444?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/y-dhjkBUYKM/altiolive-and-applets-at-javaone.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/07/altiolive-and-applets-at-javaone.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-1188205906571368842</guid><pubDate>Fri, 27 Jun 2008 08:19:00 +0000</pubDate><atom:updated>2008-12-11T00:06:27.186Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">hudson</category><title>Hudson CI game - again</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FcKrVLRyfNc/SGSjpJmO0QI/AAAAAAAAACo/kle-D9W8RWc/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_FcKrVLRyfNc/SGSjpJmO0QI/AAAAAAAAACo/kle-D9W8RWc/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5216474195748114690" border="0" /&gt;&lt;/a&gt;Despite the &lt;a href="http://tinyurl.com/5rdzsy"&gt;impressively fast fix&lt;/a&gt; to the Hudson CI game issue with awarding points for breaking a build, I hadn't got around to installing the update before I broke the build yesterday and was awarded 12,800 points for doing so ;-)&lt;br /&gt;&lt;br /&gt;We've fixed the build and upgraded to the fixed version. I'm keeping the points though, they're mine!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-1188205906571368842?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/14sq4EnvpUk/hudson-ci-game-again.html</link><author>noreply@blogger.com (jim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_FcKrVLRyfNc/SGSjpJmO0QI/AAAAAAAAACo/kle-D9W8RWc/s72-c/Picture+4.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/06/hudson-ci-game-again.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-2972394149029897814</guid><pubDate>Wed, 25 Jun 2008 20:32:00 +0000</pubDate><atom:updated>2008-09-07T18:25:29.382+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">applets</category><category domain="http://www.blogger.com/atom/ns#">altio</category><category domain="http://www.blogger.com/atom/ns#">altiolive</category><title>Using Java 6 Update 10 features in AltioLive</title><description>I've just posted an item on the Altio developer's blog about using the new features of Java 6 Update 10 in AltioLive applications. You can read the whole thing here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tinyurl.com/42ntx2"&gt;http://tinyurl.com/42ntx2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The only issue at the moment is the fact that Altio dynamically constructs the APPLET tag, so we need to use a JSP page to generate a JNLP file dynamically. You can simply update the Altio JavaScript file and add in the new JNLP generator to start using cool new features in your AltioLive applications such as bigger heap sizes and separate JVMs per applet.&lt;br /&gt;&lt;br /&gt;One thing that I didn't mention on the Altio blog is I that played around with accessing other domains directly from the applet, which I blogged about &lt;a href="http://stufffromjim.blogspot.com/2008/06/cross-domain-unsigned-applets.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I implemented this in Altio by allowing Image controls to fetch images from Flickr directly, rather then needing a Service Function to act as a proxy, and this worked well. It is probably a feature more useful in consumer internet applications rather than enterprise applications, but not being able to reference images from other websites directly has always been slightly frustrating, so it was a good thing to get working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-2972394149029897814?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/rYdvqVvVCLI/using-java-6-update-10-features-in.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/06/using-java-6-update-10-features-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-507647312902344138</guid><pubDate>Mon, 23 Jun 2008 12:48:00 +0000</pubDate><atom:updated>2008-06-23T13:52:43.915+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">applets</category><title>Cross-domain unsigned applets</title><description>Wow, I completely missed this in the Java 6 Update 10 release notes: it is now possible for unsigned Java applets to connect to servers other than the one it was served from, which means you can easily implement client-side mashups with an applet without having to sign it.&lt;br /&gt;&lt;br /&gt;http://weblogs.java.net/blog/joshy/archive/2008/05/java_doodle_cro.html&lt;br /&gt;&lt;br /&gt;The great thing about this is that it doesn't really break the sandbox security model, which still protects the user's local machine from any damage from malicious applet code, but it makes applets a whole lot more useful in the Web 2.0 world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-507647312902344138?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/Sw5rydliu_A/cross-domain-unsigned-applets.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/06/cross-domain-unsigned-applets.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-13196181.post-2502701179681860936</guid><pubDate>Tue, 17 Jun 2008 20:03:00 +0000</pubDate><atom:updated>2008-06-17T21:15:59.618+01:00</atom:updated><title>Rebranding</title><description>I've had the marketing people in, and they have assessed the synergy of the blog with a view to maximising my ability to incentivize visionary channels. Therefore, out goes 'disagreeable surprises' (which was a pain in the arse to keep typing) and in comes &lt;a href="http://www.peakyblinder.com"&gt;Peaky Blinder&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For those interested, it's the name of a gang that were infamous in Birmingham in the early 20th century. The story is that a lot of my Dad's side of the family were members, and they had a reputation as being pretty nasty. Officially the name comes from them wearing caps low over their eyes, but according to family stories it's actually related to the fact that they kept razor blades in the peaks of their caps, so when a fight kicked off they used their caps as weapons to try and slash their opponents' eyes. Yow!&lt;br /&gt;&lt;br /&gt;So, that's my new brand ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13196181-2502701179681860936?l=stufffromjim.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/peakyblinder/~3/ASBU5wJ5CE8/rebranding.html</link><author>noreply@blogger.com (jim)</author><thr:total>0</thr:total><feedburner:origLink>http://stufffromjim.blogspot.com/2008/06/rebranding.html</feedburner:origLink></item></channel></rss>

