<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9136190872788402613</id><updated>2011-04-22T05:20:17.572+03:00</updated><category term='toolkit'/><category term='it mill'/><category term='5800'/><category term='javascript'/><category term='nokia'/><category term='java'/><category term='howto'/><category term='itmill'/><category term='me blog'/><category term='pattern'/><category term='gwt'/><category term='ux'/><category term='testing'/><category term='usability'/><category term='reader'/><category term='google'/><category term='gesture'/><title type='text'>ME Blog</title><subtitle type='html'>Bits &amp;amp; Pixels by Marc Englund</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-4348219599681919353</id><published>2009-04-24T09:43:00.013+03:00</published><updated>2009-04-24T21:16:18.735+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='gesture'/><category scheme='http://www.blogger.com/atom/ns#' term='itmill'/><title type='text'>Gesture recognition in GWT and IT Mill Toolkit: SimpleGesture</title><content type='html'>&lt;span style="font-weight: bold;"&gt;SimpleGesture&lt;/span&gt; is a pure &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; (and &lt;a href="http://www.itmill.com/itmill-toolkit/"&gt;IT Mill Toolkit&lt;/a&gt;) implementation of the mouse gesture recognition &lt;a href="http://www.bytearray.org/?p=91"&gt;method described by Didier Brun at bytearray.org&lt;/a&gt; (as I understand it). It allows you to register easy to understand (human readable) gestures, and receive events when these occur. Additionally, SimpleGesture can record new gestures, so that you don't have to write them by hand.&lt;br /&gt;&lt;br /&gt;Here is a short demo video - I'm using a Wii (as a mouse, no special integration) to control &lt;a href="http://marc.virtuallypreinstalled.com/SimpleGesture"&gt;a simple demo application&lt;/a&gt;, and you can see me record a new gesture as well:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LEvJdTuZ8sc&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/LEvJdTuZ8sc&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;You can try the demo application live here: &lt;a href="http://marc.virtuallypreinstalled.com/SimpleGesture"&gt;http://marc.virtuallypreinstalled.com/SimpleGesture&lt;/a&gt;&lt;br /&gt;The demo application is made using IT Mill Toolkit - SimpleGesture is actually a component for IT Mill Toolkit, but it uses GWT on the client side and the actual GWT widget is made to be stand-alone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 255, 255);"&gt;SimpleGesture was made using my "10% time" here at IT Mill (yes, we're only half Google, but that's not half bad, if you ask me...;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Applications&lt;/span&gt;&lt;br /&gt;Mouse gestures have their place, and are not always appropriate - for instance, for regular desktop use you might find that keyboard shortcuts are often better. But if the pointing device is your main input device, or you do not have a keyboard, gestures might be the way to go. The video demo, using the Wii, should demonstrate this quite clearly. Also, hitting a small button in the upper left corner with the Wii controller can be quite a challenge, while the gestures work quite well (hello &lt;a href="http://en.wikipedia.org/wiki/Fitts%27_law"&gt;Fitt's Law&lt;/a&gt;!)&lt;br /&gt;I'd imagine there are a few uses for touch -based interfaces as well... ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Technical details&lt;/span&gt;&lt;br /&gt;I had used the bytearray mouse gesture library for a Flash project before, and I love how simple the method is, and yet it works very well, so I decided to try to implement it in pure GWT.&lt;br /&gt;&lt;br /&gt;The method works by assigning a number depending on which direction the mouse moves in (moving right will produce "0", moving down will produce "2", and so on), and comparing the resulting string of numbers to the registered gestures. The gesture with the lowest &lt;a href="http://en.wikipedia.org/wiki/Levenshtein_distance"&gt;Levenshtein distance&lt;/a&gt; (and below a set threshold),  is considered a match.&lt;br /&gt;&lt;br /&gt;For instance, the "&lt;span style="font-style: italic;"&gt;rotate clockwise&lt;/span&gt;" gesture used in the demo looks like this: "&lt;span style="font-style: italic;"&gt;7001&lt;/span&gt;"&lt;br /&gt;How is that for simplicity?&lt;br /&gt;&lt;br /&gt;SimpleGesture uses the Levenshtein Distance method from &lt;a href="http://commons.apache.org/"&gt;Jakarta Commons&lt;/a&gt; (getLevenshteinDistance() from &lt;a href="http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/StringUtils.java?view=markup"&gt;StringUtils&lt;/a&gt;) on the client-side, without modifications, compiled using GWT. I think this shows one of the strengths of GWT - the ability to make use of existing Java code in the browser.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use it!&lt;/span&gt;&lt;br /&gt;Feel free to use and improve SimpleGesture - it uses the Apache License, just as IT Mill Toolkit and Jakarta Commons. Hopefully you'll send me some patches... :-)&lt;br /&gt;&lt;br /&gt;If you're using IT Mill Toolkit, you can &lt;a href="http://dev.itmill.com/browser/incubator/SimpleGesture"&gt;get the whole demo project from SVN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To use it in "plain" GWT, (w/o  IT Mill Toolkit), just &lt;a href="http://dev.itmill.com/browser/incubator/SimpleGesture/WebContent/WEB-INF/src/com/itmill/incubator/simplegesture/gwt"&gt;get the GWT stuff from SVN&lt;/a&gt; (or just ISimpleGesture.java). ISimpleGesture a GWT Widget, and there are only two IT Mill Toolkit specific things (which you can remove): "implements Paintable", and the "updateFromUIDL()" -method.&lt;br /&gt;&lt;br /&gt;Note that SimpleGesture currently uses EventPreview and listens to the whole window, which is not ideal - event preview is somewhat problematic, and it would be nice to be able to use different gestures in different parts of the window. This is one area that should be improved (patches, anyone?), and it could be made more configurable as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Feedback&lt;/span&gt;&lt;br /&gt;Please feel free to comment here, &lt;a href="http://forum.itmill.com/posts/list/0/789.page"&gt;discuss&lt;/a&gt; at the IT Mill Toolkit forums, or email me at marc.englundÄTitmill.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-4348219599681919353?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/4348219599681919353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=4348219599681919353' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/4348219599681919353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/4348219599681919353'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2009/04/gesture-recognition-in-gwt-and-it-mill.html' title='Gesture recognition in GWT and IT Mill Toolkit: SimpleGesture'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-4680207686217901527</id><published>2009-02-20T20:15:00.005+02:00</published><updated>2009-02-20T22:09:03.419+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reader'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='5800'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>iPhone Google Reader on Nokia 5800</title><content type='html'>I'm used to the&lt;span style="font-style: italic;"&gt; iPhone&lt;/span&gt; version of &lt;span style="font-style: italic;"&gt;Google Reader&lt;/span&gt; on my &lt;span style="font-style: italic;"&gt;iPod Touch&lt;/span&gt;, so I was quite disappointed when I first tried Google Reader on my &lt;span style="font-style: italic;"&gt;Nokia 5800&lt;/span&gt;: it gave me the basic stripped down webpage with tiny links. Boo.&lt;br /&gt;&lt;br /&gt;Then it dawned on me: the 5800 runs webkit, and Google will probably be happy to serve the iPhone Reader... Simple:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/reader/i/"&gt;http://www.google.com/reader/i/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_spqMx3D8dys/SZ72BkAryzI/AAAAAAAAAGA/XTMs70DMLyw/s1600-h/Scr000021.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_spqMx3D8dys/SZ72BkAryzI/AAAAAAAAAGA/XTMs70DMLyw/s400/Scr000021.jpg" alt="" id="BLOGGER_PHOTO_ID_5304947917795871538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Works like a charm!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-4680207686217901527?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/4680207686217901527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=4680207686217901527' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/4680207686217901527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/4680207686217901527'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2009/02/iphone-google-reader-on-nokia-5800.html' title='iPhone Google Reader on Nokia 5800'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_spqMx3D8dys/SZ72BkAryzI/AAAAAAAAAGA/XTMs70DMLyw/s72-c/Scr000021.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-1370793235519876220</id><published>2008-10-28T09:23:00.004+02:00</published><updated>2008-10-28T09:39:36.278+02:00</updated><title type='text'>Searching Trac from Firefox</title><content type='html'>Not often, but every once in a while one stumbles across something that's so easy to use, and right under your nose, you wonder how you could have missed it (the reason, of course, is that you assume it can't be that simple, because usually it's not). This is one of those occasions. Please don't laugh...&lt;br /&gt;&lt;br /&gt;I just realized how easy it is to add &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt; search to the Firefox search engine widget. Yes, it's a not even "a small step for man", but it speeds one task up every-so-litte, which is always nice. And one image should be enough to explain:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_spqMx3D8dys/SQbAyaHJkMI/AAAAAAAAAFc/0y5oNXRew1s/s1600-h/FirefoxTracSearch.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 98px;" src="http://3.bp.blogspot.com/_spqMx3D8dys/SQbAyaHJkMI/AAAAAAAAAFc/0y5oNXRew1s/s400/FirefoxTracSearch.png" alt="" id="BLOGGER_PHOTO_ID_5262105186864304322" 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/9136190872788402613-1370793235519876220?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/1370793235519876220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=1370793235519876220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/1370793235519876220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/1370793235519876220'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2008/10/searching-trac-from-firefox.html' title='Searching Trac from Firefox'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_spqMx3D8dys/SQbAyaHJkMI/AAAAAAAAAFc/0y5oNXRew1s/s72-c/FirefoxTracSearch.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-1249493682588968203</id><published>2008-10-10T14:55:00.008+03:00</published><updated>2008-10-13T10:48:00.636+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='ux'/><category scheme='http://www.blogger.com/atom/ns#' term='it mill'/><category scheme='http://www.blogger.com/atom/ns#' term='itmill'/><title type='text'>UI patterns part 1; ComboBox variations</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_spqMx3D8dys/SO9K53WuByI/AAAAAAAAAFU/-NZmLSiONlM/s1600-h/Screenshot-Mozilla+Firefox-4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_spqMx3D8dys/SO9K53WuByI/AAAAAAAAAFU/-NZmLSiONlM/s200/Screenshot-Mozilla+Firefox-4.png" alt="" id="BLOGGER_PHOTO_ID_5255501648136898338" border="0" /&gt;&lt;/a&gt;I've been accumulating some usage and usability patterns for some time (mostly for&lt;a href="http://www.itmill.com/itmill-toolkit/"&gt; IT Mill Toolkit&lt;/a&gt;, but the ideas are pretty generic, I think), and it's time to start purging the backlog.&lt;br /&gt;One might say that these are "patterns" in two ways: as a way of using components, and in a broader sense as usability/user interface patterns. Hopefully these examples, although simple, will inspire and show some possibilities you might not have thought of.&lt;br /&gt;&lt;br /&gt;Some of the components in IT Mill Toolkit are very versatile, and some possibilities might not be immediately obvious. It's possible to create very (re)usable "patterns" just by configuring a component into a certain mode, adding a little CSS, or just using it in a novel way.&lt;br /&gt;&lt;br /&gt;The new "FeatureBrowser" to be included in next version of IT Mill Toolkit will also include patterns, and over all be a much better source for cut-and-paste code than the previous version.&lt;br /&gt;&lt;br /&gt;Anyway, first up are a few suggest and inplace-editing -examples, made with a ComboBox and some CSS - no client side gwt coding needed. You can&lt;a href="http://marc.virtuallypreinstalled.com/pattern/suggestions"&gt; try the examples here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let's take a look at the details, one example at a time...&lt;br /&gt;(SORRY Blogger screwed up code formatting - I have no idea how to post code here...)&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_spqMx3D8dys/SO9KpmEQ2sI/AAAAAAAAAE0/Y4PvBmDDgRc/s1600-h/Screenshot-Mozilla+Firefox.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_spqMx3D8dys/SO9KpmEQ2sI/AAAAAAAAAE0/Y4PvBmDDgRc/s200/Screenshot-Mozilla+Firefox.png" alt="" id="BLOGGER_PHOTO_ID_5255501368618179266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first one is a ComboBox: immediate, new items allowed, null selection disallowed.&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;ComboBox cb = new ComboBox();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   cb.setImmediate(true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   cb.setNewItemsAllowed(true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   cb.setNullSelectionAllowed(false);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   cb.addStyleName("search");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   cb.addListener(new ComboBox.ValueChangeListener() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       public void valueChange(ValueChangeEvent event) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           // do search&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   });&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;The following is the CSS used to hide the regular ComboBox arrow and make it look like a textfield:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-search .i-filterselect-button {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    background-position: right 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    width: 5px;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_spqMx3D8dys/SO9K5lD-RwI/AAAAAAAAAE8/WSn2U8x9OWg/s1600-h/Screenshot-Mozilla+Firefox-1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_spqMx3D8dys/SO9K5lD-RwI/AAAAAAAAAE8/WSn2U8x9OWg/s200/Screenshot-Mozilla+Firefox-1.png" alt="" id="BLOGGER_PHOTO_ID_5255501643226433282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The second one is basically the above field, but the entered "tag" is added to the layout before the ComboBox, as a Button that removes itself when clicked:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;span style=";font-family:courier new;font-size:85%;"  &gt;cb = new ComboBox();&lt;br /&gt;  cb.setImmediate(true);&lt;br /&gt;  cb.setNewItemsAllowed(true);&lt;br /&gt;  cb.setNullSelectionAllowed(false);&lt;br /&gt;  cb.addStyleName("search");&lt;br /&gt;  cb.addListener(new ComboBox.ValueChangeListener() {&lt;br /&gt;   public void valueChange(ValueChangeEvent event) {&lt;br /&gt;Object val = event.getProperty().getValue();&lt;br /&gt;if (val != null) {&lt;br /&gt;Button b = new Button(val + " ⊠",&lt;br /&gt;  new Button.ClickListener() {&lt;br /&gt;     public void buttonClick(ClickEvent event) {&lt;br /&gt;                  tokenLayout.removeComponent(event.getButton());&lt;br /&gt;                  tokenCount--;&lt;br /&gt;             }&lt;br /&gt;       });&lt;br /&gt;     b.setStyleName(Button.STYLE_LINK);&lt;br /&gt;     tokenLayout.addComponent(b, tokenCount++);&lt;br /&gt;     event.getProperty().setValue(null);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  });&lt;/span&gt;&lt;br /&gt;  &lt;tokens.length;i++){&gt;&lt;/tokens.length;i++){&gt;&lt;/blockquote&gt;&lt;br /&gt;The CSS is the same as in the previous example.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_spqMx3D8dys/SO9K54GIloI/AAAAAAAAAFE/4H5fYMLD8H0/s1600-h/Screenshot-Mozilla+Firefox-2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_spqMx3D8dys/SO9K54GIloI/AAAAAAAAAFE/4H5fYMLD8H0/s200/Screenshot-Mozilla+Firefox-2.png" alt="" id="BLOGGER_PHOTO_ID_5255501648335771266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The third example is basically the previous one, vertically oriented and using FILTERINGMODE_CONTAINS instead of the default FILTERINGMODE_STARTSWITH to match anywhere (when entering last name or domain).&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;[...]&lt;br /&gt;cb.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);&lt;br /&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The CSS is still the same as above.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_spqMx3D8dys/SO9K52rJloI/AAAAAAAAAFM/4W-G45Vgmq4/s1600-h/Screenshot-Mozilla+Firefox-3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_spqMx3D8dys/SO9K52rJloI/AAAAAAAAAFM/4W-G45Vgmq4/s200/Screenshot-Mozilla+Firefox-3.png" alt="" id="BLOGGER_PHOTO_ID_5255501647954155138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The forth one is a little different; it's styled as a text that turns into a suggesting ComboBox when focused; hovering shows an arrow to indicate the text can be changed.&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;[...]&lt;br /&gt;  cb.setImmediate(true);&lt;br /&gt;  cb.setNullSelectionAllowed(false);&lt;br /&gt;  cb.setNewItemsAllowed(true);&lt;br /&gt;  cb.addStyleName("inplace");&lt;br /&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The CSS is the interesting part; IE requires some special attention too (IE6 actually shows the arrow all the time, since it does not support :hover on divs):&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;.i-filterselect-inplace  {&lt;br /&gt;background: transparent none;&lt;br /&gt;}&lt;br /&gt;.i-filterselect-inplace input {&lt;br /&gt;font-size: 18px;&lt;br /&gt;border: 1px solid none;&lt;br /&gt;}&lt;br /&gt;.i-filterselect-inplace:hover input {&lt;br /&gt;font-style: italic;&lt;br /&gt;}&lt;br /&gt;.i-filterselect-inplace input:focus {&lt;br /&gt;background: #fff url(../default/textfield/img/bg.png) repeat-x;&lt;br /&gt;border: 1px solid #b6b6b6;&lt;br /&gt;border-top-color: #9d9d9d;&lt;br /&gt;border-bottom-color: #d6d6d6;&lt;br /&gt;border-right-color: #d6d6d6;&lt;br /&gt;font-style: inherit;&lt;br /&gt;font-size: inherit;&lt;br /&gt;}&lt;br /&gt;.i-filterselect-inplace .i-filterselect-button {&lt;br /&gt;background: transparent none;&lt;br /&gt;}&lt;br /&gt;* html .i-filterselect-inplace .i-filterselect-button {&lt;br /&gt;/* IE6 does not support :hover on div */&lt;br /&gt;background: #f0f0f0 url(../default/select/img/arrow-down.png) no-repeat center 10px;&lt;br /&gt;}&lt;br /&gt;.i-filterselect-inplace:hover .i-filterselect-button,&lt;br /&gt;.i-filterselect-inplace input:focus + .i-filterselect-button {&lt;br /&gt;background: #f0f0f0 url(../default/select/img/arrow-down.png) no-repeat center 10px;&lt;br /&gt;}&lt;br /&gt;.i-filterselect-inplace input:focus + .i-filterselect-button {&lt;br /&gt;background-color: transparent;&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_spqMx3D8dys/SO9K53WuByI/AAAAAAAAAFU/-NZmLSiONlM/s1600-h/Screenshot-Mozilla+Firefox-4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_spqMx3D8dys/SO9K53WuByI/AAAAAAAAAFU/-NZmLSiONlM/s200/Screenshot-Mozilla+Firefox-4.png" alt="" id="BLOGGER_PHOTO_ID_5255501648136898338" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt; &lt;span style=";font-family:courier new;font-size:85%;"  &gt;cb = new ComboBox();&lt;br /&gt;cb.setWidth("70px");&lt;br /&gt;for (int i=0; i&lt;icons.length; new="" png="" icon=""&gt;&lt;/icons.length;&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Again, the CSS is the main attraction - sporting the same IE workarounds:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-icon {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; height: auto;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-icon,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-icon .i-filterselect-button  {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; background: transparent none;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-icon input {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; visibility: hidden;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-icon:hover .i-filterselect-button,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.i-filterselect-icon input:focus + .i-filterselect-button {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; background: #ffffff url(../default/select/img/arrow-down.png) no-repeat center 10px;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; border: 1px solid #eeeeee;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; margin-top: -25px;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;* html .i-filterselect-icon .i-filterselect-button {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* IE6 does not support :hover on div */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; background: #ffffff url(../default/select/img/arrow-down.png) no-repeat center 10px;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; border: 1px solid #eeeeee;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; margin-top: -25px;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;As you probably noticed, the code samples are not complete; &lt;a href="http://marc.virtuallypreinstalled.com/SuggestionsExample.java"&gt;the full source can be found here&lt;/a&gt;.&lt;br /&gt;The CSS is complete, though, and that might be all you need - there is nothing particularly complicated going on in javaland...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-1249493682588968203?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/1249493682588968203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=1249493682588968203' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/1249493682588968203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/1249493682588968203'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2008/10/ui-patterns-part-1-combobox-variations.html' title='UI patterns part 1; ComboBox variations'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_spqMx3D8dys/SO9K53WuByI/AAAAAAAAAFU/-NZmLSiONlM/s72-c/Screenshot-Mozilla+Firefox-4.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-5870515215018500682</id><published>2008-03-20T07:50:00.001+02:00</published><updated>2008-10-13T10:52:38.658+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='it mill'/><category scheme='http://www.blogger.com/atom/ns#' term='itmill'/><title type='text'>Press Play on Test with IT Mill TestingTools</title><content type='html'>Testing ajax and RIA UIs can be a major &lt;del&gt;pita&lt;/del&gt; annoyance, and manual testing is often required. &lt;a href="http://www.itmill.com/testing-tools/"&gt;IT Mill TestingTools&lt;/a&gt; was released yesterday, and though it does not make all Test Engineers obsolete in one swift blow, it hopefully eases UI testing significantly, leading to more testing and better quality. RIA testing is now point-click-save-run, or as the TestingTools slogan puts it: "Press Play on Test".&lt;br /&gt;I've been working on TestingTools (as well as the &lt;a href="http://www.itmill.com/itmill-toolkit/"&gt;IT Mill Toolkit&lt;/a&gt;), and thought I'd make a quick video, showing the basic functionality that's great for Joe Tester and me:&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/woV3SmaG4dM&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/woV3SmaG4dM&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;(&lt;del&gt;excuse the bad quality on youtube, I'll see if I can put the full-sized swf somewhere soon...&lt;/del&gt;)&lt;br /&gt;Update: it wasn't too hard to get the my recording hosted at IT Mill - it's even featured as a quick tour. &lt;a href="http://www.itmill.com/videos/The%20IT%20Mill%20Testing%20Tools%20Quick%20Tour.html"&gt;Watch the full-size version.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No programming skills required, no more &lt;a href="http://agiletesting.blogspot.com/2006/03/ajax-testing-with-selenium-using_21.html"&gt;waitForCondition&lt;/a&gt; scripting - the boss can do it too.&lt;br /&gt;And it's quick enough to be useful for programmers like me; I can record my own tests to make sure my changes to Label.java do not break HelloWorld - so quickly and easily my attention span can actually handle it. (TT replays tests as quickly as possible, as you can see in the video)&lt;br /&gt;But perhaps the biggest potential benefit is for all those projects that do not have the means or will to set up real testing.&lt;br /&gt;A testing tool for non-testers, if you will.&lt;br /&gt;&lt;br /&gt;IT Mill TestingTools does not replace all other testing tools - you'll probably still want to use your favorite &lt;a href="http://en.wikipedia.org/wiki/JUnit"&gt;unit-tests&lt;/a&gt;, &lt;a href="http://jakarta.apache.org/jmeter/"&gt;performance-&lt;/a&gt; and &lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;profiling&lt;/a&gt; tools for your server-side stuff (we do). But I do think it fills a gap in the toolchain, and hopefully the end result will be more testing and better quality.&lt;br /&gt;&lt;br /&gt;A final note: Although TestingTools is especially good for testing IT Mill Toolkit applications (it knows about the components, and is able to wait for ajaxy tasks to complete), you can actually test other sites as well. For security reasons, you must first enable testing in the application/site, mainly to get around browser domain restrictions (no, sorry, you can't test google.com with the &lt;a href="http://www.itmill.com/itmill-toolkit/demos.htm#tt"&gt;online demo&lt;/a&gt;) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-5870515215018500682?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/5870515215018500682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=5870515215018500682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/5870515215018500682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/5870515215018500682'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2008/03/press-play-on-test-with-it-mill.html' title='Press Play on Test with IT Mill TestingTools'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-6813204299520890067</id><published>2008-03-19T21:22:00.002+02:00</published><updated>2008-03-19T21:25:50.957+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Lightboxd - A lightbox with direct links</title><content type='html'>Quicklink for the impatient: &lt;a href="http://www.subdoc.com/marc/code/lightboxd/#img1"&gt;try Lightboxd.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just love &lt;a href="http://en.wikipedia.org/wiki/Lightbox_%28JavaScript%29"&gt;the "lightbox" -pattern&lt;/a&gt; for displaying images, and I've tried quite a few implementations. However, there is one feature I've been missing from all of them (admittedly, I should perhaps have rtfm more in some instances), and that feature is &lt;a href="http://www.subdoc.com/marc/code/lightboxd/#img1"&gt;&lt;span style="font-weight: bold;"&gt;direct linking&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For instance, I might want to send a link saying "here, this is the image I was talking about",  or the newlyweds I photographed might want to send me a link saying "this is the shot we want printed big".&lt;br /&gt;&lt;br /&gt;Being lazy, I tried complaining first, but since that did not seem to work very well, I decided to add this functionality to my favourite lightbox implementation, &lt;a href="http://www.huddletogether.com/projects/lightbox2/"&gt;Lightbox2&lt;/a&gt; by Lokesh Dhakar (I just happen to think it has a very good 'feel'. That, and it was easy to modify... &lt;a href="http://www.nickstakenburg.com/projects/lightview/"&gt;Lightview&lt;/a&gt; is looking good too, but it's license does not allow any modifications or derivate work.) &lt;span style="font-style: italic;"&gt;However, I'm fully expecting all lightboxes to follow suit and add support for direct linking by the end of next week...&lt;/span&gt; ;-)&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.subdoc.com/marc/code/lightboxd"&gt;Lightboxd&lt;/a&gt; is a slightly modified &lt;a href="http://www.huddletogether.com/projects/lightbox2/"&gt;Lightbox2&lt;/a&gt;, with added direct linking support. It uses standard HTML anchors, so it kind of works even if javascript is disabled (the page jumps to the anchor, but does not open the linked image).&lt;br /&gt;A direct link looks like this (try it!): &lt;a href="http://www.subdoc.com/marc/code/lightboxd/#img1"&gt;http://www.subdoc.com/marc/code/lightboxd/#img1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's by no means perfect - but it's a 1.0.&lt;br /&gt;&lt;br /&gt;And for the record: I'm totally hoping this will make it into the original 'distribution' some day - the world does not really need one more lightbox -implementation ;-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.subdoc.com/marc/code/lightboxd/"&gt;&lt;span style="font-weight: bold;"&gt;Go get Lightboxd&lt;/span&gt; »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-6813204299520890067?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/6813204299520890067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=6813204299520890067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/6813204299520890067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/6813204299520890067'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2008/03/lightboxd-lightbox-with-direct-links.html' title='Lightboxd - A lightbox with direct links'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-7007149533860731374</id><published>2008-03-11T22:04:00.008+02:00</published><updated>2008-03-14T11:16:34.098+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Slice animation in plain JavaScript, minus data-uri</title><content type='html'>I made &lt;a href="http://www.subdoc.com/marc/code/slice/"&gt;a slightly more dynamic version&lt;/a&gt; of &lt;a href="http://www.jole.fi/"&gt;Joonas Lehtinen&lt;/a&gt;'s &lt;a href="http://www.jole.fi/?p=28"&gt;Slice animation in plain JavaScript.&lt;/a&gt; &lt;br /&gt;Joonas' example creates a 3d animation by using &lt;a href="http://en.wikipedia.org/wiki/Data:_URI_scheme"&gt;data-uris&lt;/a&gt; to embed 1px wide image slices in html. It's a fun animation example and an interesting use of data-uris, but data-uris are a bit of a pain to encode (though you could of course automate the process server-side).  I wanted to see if I could keep the fun part while making the script a little more dynamic by getting rid of the need to encode data-uris.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.subdoc.com/marc/code/slice/"&gt;The resulting example animates any image&lt;/a&gt;, in the browser (no server needed), using plain javascript (only the initialization is changed, the animation code is basically unmodified).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.subdoc.com/marc/code/slice/"&gt;&lt;span style="font-weight: bold;"&gt;Try it »&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have yet to find a use for this, other than checking how quickly your browser (and computer) slows down when you feed it a bigger image - but I find it interesting nonetheless.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.subdoc.com/marc/code/slice/"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-7007149533860731374?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/7007149533860731374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=7007149533860731374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/7007149533860731374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/7007149533860731374'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2008/03/slice-animation-in-plain-javascript.html' title='Slice animation in plain JavaScript, minus data-uri'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9136190872788402613.post-1356618817919254805</id><published>2008-03-10T10:09:00.000+02:00</published><updated>2008-03-10T10:27:54.401+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='me blog'/><title type='text'>ME Blog is online!</title><content type='html'>Jup, I finally configured the blog, and here's the first post. I'm actually new to blogging, so I'm sure there will be some changes once I figure out what's possible.&lt;br /&gt;&lt;br /&gt;The main idea with this blog is to post about updates to my stuff around the web (like&lt;a href="http://www.subdoc.com/marc/"&gt; my main site&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/emarc/"&gt;my flickr photos&lt;/a&gt;), and whenever I contribute to other sites, but I'm sure I'll start posting some stuff exclusively on the blog as well, once I get used to it. Actually, I would not be surprised if the point with separate 'main site' is lost completely at some point, and everything is moved here.&lt;br /&gt;&lt;br /&gt;Time will tell...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9136190872788402613-1356618817919254805?l=marcenglund.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcenglund.blogspot.com/feeds/1356618817919254805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9136190872788402613&amp;postID=1356618817919254805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/1356618817919254805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9136190872788402613/posts/default/1356618817919254805'/><link rel='alternate' type='text/html' href='http://marcenglund.blogspot.com/2008/03/me-blog-is-online.html' title='ME Blog is online!'/><author><name>emarc</name><uri>http://www.blogger.com/profile/13536819925318351856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
