<?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-6922719475190616477</id><updated>2011-12-18T12:41:28.235+01:00</updated><category term='java se 7'/><category term='solr'/><category term='calendar'/><category term='flash'/><category term='java fx'/><category term='YP-S5'/><category term='FireFly'/><category term='Lucene'/><category term='html5'/><category term='gentoo'/><category term='rtl8187b'/><category term='Amazon'/><category term='development'/><category term='Hibernate'/><category term='upnp'/><category term='remember the milk'/><category term='fullscreen'/><category term='NAS'/><category term='RIA'/><category term='banshee'/><category term='library'/><category term='google docs'/><category term='firefox'/><category term='renderer'/><category term='standard'/><category term='git'/><category term='ati'/><category term='sun'/><category term='todo'/><category term='firmware'/><category term='nosql'/><category term='performance'/><category term='busybox'/><category term='x700'/><category term='JEE'/><category term='ch3WNAS'/><category term='closures'/><category term='ndiswrapper'/><category term='EC2'/><category term='2008'/><category term='gtkam'/><category term='Adobe'/><category term='java7'/><category term='xml'/><category term='virtualbox'/><category term='pulse-audio'/><category term='v1'/><category term='java'/><category term='refactoring'/><category term='wifi'/><category term='photovoltaic panels'/><category term='keynote'/><category term='gsm'/><category term='springone08'/><category term='libusb'/><category term='hal'/><category term='chroot'/><category term='full-text search'/><category term='UMS'/><category term='radeon'/><category term='android'/><category term='corrupt'/><category term='sim'/><category term='JEE6'/><category term='md6500'/><category term='shutdown'/><category term='dropbox'/><category term='mp3'/><category term='network'/><category term='ubuntu'/><category term='itunes'/><category term='USB-player'/><category term='google'/><category term='eID'/><category term='11.4'/><category term='parleys.com'/><category term='zfs'/><category term='client'/><category term='SpringOne'/><category term='devoxx 2009'/><category term='cache'/><category term='9.10'/><category term='power off'/><category term='perl'/><category term='autostart'/><category term='gc'/><category term='sunny beam'/><category term='Devoxx08'/><category term='conference'/><category term='http'/><category term='Oracle'/><category term='wirless mediastore'/><category term='hardy'/><category term='codereview'/><category term='11.10'/><category term='8.04'/><category term='ibm'/><category term='xquery'/><category term='Devoxx'/><category term='sound'/><category term='enterprise'/><category term='sd card readonly'/><category term='computer name'/><category term='grab&apos;n&apos;go'/><category term='surround'/><category term='podcasts'/><category term='tweak'/><category term='compiz'/><category term='text-search'/><category term='mp3 player'/><category term='Devoxx11'/><category term='linux'/><category term='apache'/><category term='springframework'/><category term='boot'/><category term='ubuntu one'/><category term='cloud computing'/><category term='usb'/><category term='Belgium'/><category term='mediatomb'/><category term='optimize'/><category term='programming'/><category term='eGovernement'/><category term='xslt'/><category term='monitoring'/><category term='daap'/><category term='devoxx2009'/><category term='mongodb'/><category term='Google App Engine'/><category term='scratches'/><category term='mass storage'/><category term='jmeter'/><category term='rtl8192se'/><category term='realtek'/><category term='ecostream'/><category term='Rhythmbox'/><category term='fun_plug'/><category term='medion'/><category term='search'/><category term='server'/><category term='djmount'/><category term='RFID'/><category term='MSC'/><category term='jruby'/><category term='nc'/><category term='MTP'/><category term='wireless mediastore'/><category term='gmail'/><category term='netcat'/><category term='md96290'/><category term='jdk7'/><title type='text'>Tech stuff</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>86</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7372002939230601761</id><published>2011-11-16T18:27:00.001+01:00</published><updated>2011-11-16T18:27:20.641+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Performance Anti-Patterns in Hibernate</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Patrycja Wegrzynowicz&lt;/b&gt;&lt;br /&gt;Snippets:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"premature optimization is the root of all evil"&lt;/li&gt;&lt;li&gt;"expect unexpected"...&lt;/li&gt;&lt;li&gt;avoid temporary changes&lt;/li&gt;&lt;li&gt;careful with Collections: inadequate collection mappings can impact resulting # of queries&lt;/li&gt;&lt;li&gt;OneToMany on owning side: lots of unnecessary locking / querying&lt;/li&gt;&lt;li&gt;bulk processing through Hibernate --&amp;gt; use database operations instead&lt;/li&gt;&lt;/ul&gt;Conclusion&lt;br /&gt;&lt;ul&gt;&lt;li&gt;big data = big problems -- my addition: with hibernate :-)&lt;ul&gt;&lt;li&gt;standard mappings don't handle large datasets well&lt;/li&gt;&lt;li&gt;smart model, bulk processing, projections&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;read the manual&lt;ul&gt;&lt;li&gt;hibernate docs&lt;/li&gt;&lt;li&gt;think of consequences&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;hibernate&lt;ul&gt;&lt;li&gt;smart policies / data structures&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Nothing was said of my personal performance finding with Hibernate: maximally use readonly access whenever possible. The support for 'dirty' objects adds a lot of performance overhead if some model-parts are readonly.&lt;br /&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/6922719475190616477-7372002939230601761?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7372002939230601761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7372002939230601761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7372002939230601761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7372002939230601761'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/performance-anti-patterns-in-hibernate.html' title='Performance Anti-Patterns in Hibernate'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1388752099834356616</id><published>2011-11-16T18:26:00.001+01:00</published><updated>2011-11-24T08:20:51.906+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Bleeding Edge HTML5</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Paul Kinlan&lt;/b&gt;&lt;br /&gt;This presentation demonstrated some ongoing - bleeding edge - development in html5:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;details&gt;: section that can be collapsed: no extra javascript required&lt;/details&gt;&lt;/li&gt;&lt;li&gt;&lt;mark&gt;: highlight portions of text&lt;ul&gt;&lt;li&gt;less javascript&lt;/li&gt;&lt;li&gt;easier for to handle&lt;/li&gt;&lt;/ul&gt;&lt;/mark&gt;&lt;/li&gt;&lt;li&gt;input-tag adds support for speech-to-text input&lt;/li&gt;&lt;li&gt;video &amp;amp; animations: check if the current tab is visible. Allows to stop a video when the tab is inactive &lt;/li&gt;&lt;li&gt;a link can suggest the browser to pre-fetch the contents of links the user will likely click --&amp;gt; the page is pre-loaded&lt;/li&gt;&lt;li&gt;intents: loosely coupling/integration of services from different websites. Cfr Android intents: an application asks a photo viewer and Android lets the user choose which one he wants.&lt;/li&gt;&lt;li&gt;check online / offline status in javascript or use a callback. --&amp;gt; clean handling of unconnected status.&lt;/li&gt;&lt;li&gt;paste of images in browser&lt;/li&gt;&lt;li&gt;camera / microphone support&lt;/li&gt;&lt;li&gt;full-screen support, callable from javascript (user must grant permission)&lt;/li&gt;&lt;li&gt;WebRTC: real-time communication: Real time Video / audio for communication&lt;/li&gt;&lt;li&gt;much better audio support&lt;/li&gt;&lt;/ul&gt;check out&amp;nbsp;&lt;a href="http://html5hacks.com/"&gt;http://html5hacks.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1388752099834356616?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1388752099834356616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1388752099834356616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1388752099834356616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1388752099834356616'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/bleeding-edge-html5.html' title='Bleeding Edge HTML5'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2606991194822149702</id><published>2011-11-16T18:24:00.001+01:00</published><updated>2011-11-16T18:25:45.394+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>JDK 7, 8 and 9</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Mark Reinhold&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Java7&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Project Coin: small language improvements&lt;ul&gt;&lt;li&gt;diamond &amp;lt;&amp;gt; operator: easier generics&lt;/li&gt;&lt;li&gt;multi-catch clause&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;invokedynamic: bytecode opperation for dynamic languages (e.g. JRuby) and will be used for Lamba expressions in Java 8.&lt;/li&gt;&lt;li&gt;fork/join framework&lt;/li&gt;&lt;/ul&gt;Java8&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lambda expressions (aka Closures)&lt;/li&gt;&lt;li&gt;Jigsaw: modularity&lt;ul&gt;&lt;li&gt;improve performance:&lt;ul&gt;&lt;li&gt;only load what's needed&lt;/li&gt;&lt;li&gt;more efficient jmod package type&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;dependencies are defined in the module configuration --&amp;gt; better than the current classpath hell&lt;/li&gt;&lt;li&gt;jmod modules will be easily packaged into rpm or deb packages ⁻ JavaFX 3.0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type annotations&lt;/li&gt;&lt;li&gt;new Date/Time library (cfr. JodaTime)&lt;/li&gt;&lt;li&gt;support for Sensors (accelerometer, etc.)&lt;/li&gt;&lt;/ul&gt;Java9 (not decided yet)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;self-tuning JVM's&lt;/li&gt;&lt;li&gt;better JNI&lt;/li&gt;&lt;li&gt;support for Big Data&lt;/li&gt;&lt;li&gt;reified generics&lt;/li&gt;&lt;li&gt;unified types: int &amp;lt;&amp;gt; Integer etc.&lt;/li&gt;&lt;li&gt;optimize tail recursion... finally?&lt;/li&gt;&lt;li&gt;resource management / accounting?&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2606991194822149702?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2606991194822149702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2606991194822149702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2606991194822149702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2606991194822149702'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/jdk-7-8-and-9.html' title='JDK 7, 8 and 9'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-409679928797265828</id><published>2011-11-16T11:57:00.001+01:00</published><updated>2011-11-16T11:57:41.452+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx11: Java EE Keynote</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Cameron Purdy&lt;/b&gt;&lt;br /&gt;Focus on next Java EE versions 7 &amp;amp; 8:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Html 5&lt;/li&gt;&lt;li&gt;Modularity&lt;ul&gt;&lt;li&gt;jigsaw&lt;/li&gt;&lt;li&gt;profiles:JEE providers can choose to&amp;nbsp;&lt;i&gt;not&lt;/i&gt;&amp;nbsp;implement part of the SPEC. Eg. some older specs like EJB CMP &amp;amp; BMP will become optional.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Cloud&lt;ul&gt;&lt;li&gt;elastic&lt;/li&gt;&lt;li&gt;auto provisioning&lt;/li&gt;&lt;li&gt;Paas&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Platform as a Service (Paas) details&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JEE7&amp;nbsp;&lt;i&gt;is&lt;/i&gt;&amp;nbsp;the service&lt;/li&gt;&lt;li&gt;auto-provisioning:&lt;ul&gt;&lt;li&gt;DB (incl. init-script)&lt;/li&gt;&lt;li&gt;LDAP&lt;/li&gt;&lt;li&gt;loadbalancer / clustering settings&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;extensible for frameworks (e.g. Spring, Seam)&lt;/li&gt;&lt;li&gt;Quality of Service (QOS)&lt;/li&gt;&lt;li&gt;API's for the Cloud: Caching ...&lt;/li&gt;&lt;li&gt;Multi-tenant: deploy the same app for multiple / isolated users.&lt;/li&gt;&lt;li&gt;Cloud descriptions in meta in the ear&lt;/li&gt;&lt;/ul&gt;Other:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Timeboxed strategy for providing JEE 7 / 8: : everything not ready for JEE7 will shift to JEE8.&lt;/li&gt;&lt;li&gt;Glassfish provides the reference implementation of latest JEE developments.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-409679928797265828?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/409679928797265828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=409679928797265828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/409679928797265828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/409679928797265828'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-java-ee-keynote.html' title='Devoxx11: Java EE Keynote'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7592910450145130869</id><published>2011-11-16T11:56:00.001+01:00</published><updated>2011-11-16T11:56:39.583+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx11: Java SE Keynote</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Henrik Ståhl&lt;/b&gt;&lt;br /&gt;Java Standard Edition (SE) 7 achievements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;project coin: small language improvements&lt;/li&gt;&lt;li&gt;concurrency: fork/join framework&lt;/li&gt;&lt;li&gt;JavaFx as part of the java language&lt;/li&gt;&lt;/ul&gt;Java SE 8 focus:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jigsaw: modularity&lt;/li&gt;&lt;li&gt;lambda (aka closures): opens the door for easier to use concurrency api's&lt;/li&gt;&lt;li&gt;javaFx 3.0&lt;/li&gt;&lt;li&gt;new devices: multi-touch etc.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-7592910450145130869?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7592910450145130869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7592910450145130869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7592910450145130869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7592910450145130869'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-java-se-keynote.html' title='Devoxx11: Java SE Keynote'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6677599015608440667</id><published>2011-11-15T17:58:00.001+01:00</published><updated>2011-11-15T17:59:53.975+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Devoxx11: Jackpot 3.0 - Large Custom Refactorings</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Jan Lahoda&lt;/b&gt;&lt;br /&gt;Jackpot:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;originally from Sun labs&lt;/li&gt;&lt;li&gt;uses the Abstract Syntax Tree (AST) --&amp;gt; knows java-language / syntax: smarter than simple regexp's&lt;/li&gt;&lt;li&gt;ideal to refactor deprecated API's&lt;/li&gt;&lt;li&gt;remove anti-patterns&lt;/li&gt;&lt;/ul&gt;Jackpot is now included in Netbeans 7.1&lt;br /&gt;&lt;ul&gt;&lt;li&gt;use special 'Hint' syntax: Class.oldMethod =&amp;gt; NewClass.newMethod ;;&lt;/li&gt;&lt;li&gt;completely integrated in standard Netbeans hints / refactoring logic&lt;ul&gt;&lt;li&gt;hints are show in the IDE, directly to the developer&lt;/li&gt;&lt;li&gt;batch refactorings are allowed: completely integrated in the "Inspect and refactor" dialog (incl. managing hints)&lt;/li&gt;&lt;li&gt;run headless from the command line&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;can be highly fine-tuned:&lt;ul&gt;&lt;li&gt;use instanceof checks&lt;/li&gt;&lt;li&gt;match on specific Java constructs: e.g. only look for Fields&lt;/li&gt;&lt;li&gt;check on target java version&lt;/li&gt;&lt;li&gt;combine multiple checks&lt;/li&gt;&lt;li&gt;write repeatable tests in ".test" file&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;definitely worthwhile looking at for large refactorings of legace Java projects!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6677599015608440667?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6677599015608440667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6677599015608440667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6677599015608440667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6677599015608440667'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-jackpot-30-large-custom.html' title='Devoxx11: Jackpot 3.0 - Large Custom Refactorings'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8291604793770031758</id><published>2011-11-15T17:55:00.001+01:00</published><updated>2011-11-15T17:57:18.031+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='java7'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx11: Java 7 toolbox</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;Project coin brought some minor improvements to the Java&amp;nbsp;&lt;/span&gt;language. Most notably:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;easier generics:&lt;ul&gt;&lt;li&gt;diamond operator &amp;lt;&amp;gt;: less copy/paste thanks to smarter compiler&lt;/li&gt;&lt;li&gt;less warnings on vararg's&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;easier error-handling:&lt;ul&gt;&lt;li&gt;multicatch: less copy/paste&lt;/li&gt;&lt;li&gt;'try-with-resource' contstruct: automatic &amp;amp; correct closing and error handling&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;consistency / clarity&lt;ul&gt;&lt;li&gt;Strings in Switch&lt;/li&gt;&lt;li&gt;numbers improvements:&lt;ul&gt;&lt;li&gt;direct binary format: 0b0101001&lt;/li&gt;&lt;li&gt;logical grouping of large number in sub-chunks: 123_435_576L --&amp;gt; java ignores the underscores.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;IDE support&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Netbeans &amp;amp; Intellij have excellent support for Java 7&lt;ul&gt;&lt;li&gt;inline hints and refactorings are offered&lt;/li&gt;&lt;li&gt;batch refactorings throughout the 'inspect and transform' dialog&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Eclipse is somewhat lagging behind.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8291604793770031758?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8291604793770031758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8291604793770031758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8291604793770031758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8291604793770031758'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-java-7-toolbox.html' title='Devoxx11: Java 7 toolbox'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2342879149530941370</id><published>2011-11-15T14:46:00.000+01:00</published><updated>2011-11-15T17:57:56.023+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Devoxx11: Real-world deep-dive into Infinispan - the open source data grid platform</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;&lt;b&gt;Sanne Grinovero, Pete Muir and Mircea Markus&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Infinispan details&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;developed &amp;amp; provided by JBoss&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Open Source license&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;distributed, in-memory data structure&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;High Available: configuration options depending on your safety / performance considerations&lt;ul&gt;&lt;li&gt;Total replication&lt;/li&gt;&lt;li&gt;Partial replication ("distribution mode")&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Elastic:&lt;ul&gt;&lt;li&gt;easy to scale up / down&lt;/li&gt;&lt;li&gt;deal with node stops / crashes&lt;/li&gt;&lt;li&gt;accept additional nodes&lt;/li&gt;&lt;li&gt;managed through JGroups&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Capabilities:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Transactions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Map / Reduce&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Query&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;JMX access&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Two access modes to inifinispan:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;embedded mode: in the JVM&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;client / server mode: different protocols supported:&lt;ul&gt;&lt;li&gt;REST&lt;/li&gt;&lt;li&gt;memcached&lt;/li&gt;&lt;li&gt;hotrod&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Possible setups:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;local cache: Simple Map-like interface, with advanced cache-features (eviction, etc.)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;cluster cache: all caches are kept in sync between JVM's, the developer is responsible for accessing the persistence layer (DB)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;grid cache: the cache itself handles the persisting of the data to the DB.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;JGroups&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;reliable cluster communication&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;developed by JBoss, and used by Infinispan&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;Node / cluster config (incl. auto-discover setup)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;focus on performance: e.g. UDP, but with reliability handled by JGroups&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: sans-serif; font-size: medium;"&gt;support for reliable multicast messages&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2342879149530941370?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2342879149530941370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2342879149530941370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2342879149530941370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2342879149530941370'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-real-world-deep-dive-into.html' title='Devoxx11: Real-world deep-dive into Infinispan - the open source data grid platform'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6083083487866808291</id><published>2011-11-15T14:44:00.000+01:00</published><updated>2011-11-15T14:45:47.450+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='mongodb'/><title type='text'>Devoxx11: Building Web Applications with MongoDB</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: sans-serif; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;&lt;p&gt;&lt;b&gt;Brendan McAdams&lt;/b&gt;&lt;/p&gt;&lt;p&gt;mongoDB is a nosql DB, ie. a "non-relational" DB&lt;/p&gt;&lt;ul&gt;&lt;li&gt;no joins&lt;/li&gt;&lt;li&gt;no referential integrity&lt;/li&gt;&lt;li&gt;no complex transactions --&amp;gt; not suitable for higly transactional apps&lt;/li&gt;&lt;li&gt;but: focus on horizontal scalability&lt;ul&gt;&lt;li&gt;sharding&lt;/li&gt;&lt;li&gt;replica's&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;a scheme-less DB&lt;ul&gt;&lt;li&gt;unique ObjectID is automatically generated (based on time, machine, pid &amp;amp; counter)&lt;/li&gt;&lt;li&gt;flexible structures: adding/omitting elements is easy&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;native JSON support&lt;ul&gt;&lt;li&gt;hierarchical 'documents'&lt;/li&gt;&lt;li&gt;arrays&lt;/li&gt;&lt;li&gt;internally, an optimized format is used: BSON:&lt;a href="http://bsonspec.org"&gt;http://bsonspec.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;support for indexes (+ 'multi-indexes' on arrays)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;technical specifics:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;based on memory mapped files:&lt;ul&gt;&lt;li&gt;OS maps the files in the RAM.&lt;/li&gt;&lt;li&gt;pagefaults are expensive --&amp;gt; keep working set in RAM&lt;ul&gt;&lt;li&gt;provide sufficient RAM&lt;/li&gt;&lt;li&gt;prewarm the DB&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;only use 64bit OS &amp;amp; binaries&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Intel-only (little endian)&lt;/li&gt;&lt;li&gt;filesystem&lt;ul&gt;&lt;li&gt;Ext4 &amp;amp; Xfs: only filesystems with support for posix_fallocate()&lt;/li&gt;&lt;li&gt;set noatime, noadirtime in /etc/fstab&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;'documents' (i.e. objects) have a max. size of 16mb&lt;/li&gt;&lt;li&gt;accessible over tcp/ip: Mongo Wire Protocol&lt;/li&gt;&lt;li&gt;UTF-8&lt;/li&gt;&lt;li&gt;the data is stored in fysical files / 'extents'&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;modeling for mongoDB:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;think of 'documents' instead of 'rows'&lt;/li&gt;&lt;li&gt;favor embedding over referencing -- mongoDB offers no referential integrity (aka foreign keys)&lt;/li&gt;&lt;li&gt;think of the access patterns of your data&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;other specifics:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;support for MapReduce&lt;/li&gt;&lt;li&gt;geospatial indexing&lt;/li&gt;&lt;li&gt;indexes (internally btrees)&lt;/li&gt;&lt;li&gt;query optimization&lt;/li&gt;&lt;li&gt;advanced queries ($lt, $all, $in...)&lt;/li&gt;&lt;li&gt;gridfs:&lt;ul&gt;&lt;li&gt;large 'chunked' files&lt;/li&gt;&lt;li&gt;distributed (sharded)&lt;/li&gt;&lt;li&gt;accessible through a regular java.io.File&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6083083487866808291?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6083083487866808291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6083083487866808291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6083083487866808291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6083083487866808291'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-building-web-applications-with.html' title='Devoxx11: Building Web Applications with MongoDB'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1763094241709101270</id><published>2011-11-14T18:43:00.001+01:00</published><updated>2011-11-14T18:45:35.138+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='codereview'/><title type='text'>Devoxx11: Codereview with GIT / Gerrit</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: sans-serif; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;&lt;p&gt;&lt;b&gt;Matthias Sohn&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Git:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;decentralized source version control&lt;/li&gt;&lt;li&gt;good at merging&lt;/li&gt;&lt;li&gt;cryptographic hashes to prevent modifications to history&lt;/li&gt;&lt;li&gt;works well off-line&lt;/li&gt;&lt;li&gt;personal branches&lt;/li&gt;&lt;li&gt;JGit: written in Java&lt;/li&gt;&lt;li&gt;eGit: eclipse plugin for Git&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Adopters of GIT:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Linux&lt;/li&gt;&lt;li&gt;CVS will be deprecated in 2012&lt;/li&gt;&lt;li&gt;eclipse.org: converting from CVS to Git&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Gerrit:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Code-review based on Git&lt;/li&gt;&lt;li&gt;parallel work-flow based on branches&lt;/li&gt;&lt;li&gt;web based interface&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1763094241709101270?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1763094241709101270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1763094241709101270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1763094241709101270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1763094241709101270'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-codereview-with-git-gerrit.html' title='Devoxx11: Codereview with GIT / Gerrit'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-356602816147117870</id><published>2011-11-14T18:39:00.003+01:00</published><updated>2011-11-14T18:42:20.209+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Devoxx11: Android awesomeness</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: sans-serif; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;&lt;p&gt;&lt;b&gt;Chet Haase, Romain Guy and Philip Milne&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Android 4.0: Tablet (3.0) &amp;amp; Phone (2.3) reunited &lt;/p&gt;&lt;p&gt;GridLayout: powerful &amp;amp; flexible lay-outing -- way too complex explanation.&lt;/p&gt;&lt;p&gt;Tools for profiling / debugging Android apps. "Experience matters"&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Memory&lt;ul&gt;&lt;li&gt;dumpsys: dump info of processes running on the device&lt;ul&gt;&lt;li&gt;adb shell &lt;b&gt;dumpsys meminfo&lt;/b&gt;com.android.Launcher: dumps heap usage details&lt;/li&gt;&lt;li&gt;&lt;b&gt;dumpsys gfxinfo&lt;/b&gt;: graphics chip&lt;/li&gt;&lt;li&gt;&lt;b&gt;dumpsys window&lt;/b&gt;: decompose window objects used&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;DDMS: heap dump&lt;/li&gt;&lt;li&gt;jhat:&lt;ul&gt;&lt;li&gt;generate hprof&lt;/li&gt;&lt;li&gt;convert it with hprof-conv&lt;/li&gt;&lt;li&gt;in eclipse&lt;/li&gt;&lt;li&gt;check out "rootset references" for potentially memory leaks&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;MAT: Eclipse Allocation Tracker - &lt;a href="http://eclipse.org/mat"&gt;http://eclipse.org/mat&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Performance&lt;ul&gt;&lt;li&gt;"use your eyes"&lt;/li&gt;&lt;li&gt;DDMS&lt;/li&gt;&lt;li&gt;track frames per second -&amp;gt; "trackFPS()" call in a PreDrawListener&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;UI&lt;ul&gt;&lt;li&gt;'crazy' stuff like high speed cams: Casio Ex-F1: replay the animation in slow motion&lt;/li&gt;&lt;li&gt;HierarchyViewer:&lt;ul&gt;&lt;li&gt;ViewTree&lt;/li&gt;&lt;li&gt;PixelPerfectTree&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;ViewServer&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-356602816147117870?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/356602816147117870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=356602816147117870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/356602816147117870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/356602816147117870'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/devoxx11-android-awesomeness.html' title='Devoxx11: Android awesomeness'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2711189617854087451</id><published>2011-11-14T14:54:00.002+01:00</published><updated>2011-11-14T18:07:16.617+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx11'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Devoxx11: Android Jumpstart</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: sans-serif; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;&lt;h3&gt;&lt;b style="font-size: medium; "&gt;Lars Vogel&lt;/b&gt;&lt;/h3&gt;&lt;p style="font-size: medium; "&gt;Excellent introduction to the Android development experience.&lt;/p&gt;&lt;ul style="font-size: medium; "&gt;&lt;li&gt;tutorials on Android: &lt;a href="http://www.vogella.de/"&gt;www.vogella.de&lt;/a&gt;&lt;/li&gt;&lt;li&gt;java --&amp;gt; class -- through dx-tool --&amp;gt; dex&lt;/li&gt;&lt;li&gt;development environment: ADT for eclipse.&lt;ul&gt;&lt;li&gt;emulator: QEMU&lt;/li&gt;&lt;li&gt;DDMS: very powerful device debug mode&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API Components:&lt;ul&gt;&lt;li&gt;View for single views &amp;amp; ViewGroup for combining&lt;/li&gt;&lt;li&gt;Activity: app lifecycle - onPause() is the guaranteed last call to persist data&lt;/li&gt;&lt;li&gt;Intent: transitions to other apps&lt;ul&gt;&lt;li&gt;Implicit: Android decides&lt;/li&gt;&lt;li&gt;explicit: hard coded coupling to called app&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Toast class: display quick temporary message&lt;/li&gt;&lt;li&gt;Preferences&lt;/li&gt;&lt;li&gt;DIY Views:&lt;ul&gt;&lt;li&gt;onDraw() method&lt;/li&gt;&lt;li&gt;Path class&lt;/li&gt;&lt;li&gt;selective invalidate() call to improve performance&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;ListActivity &amp;amp; ListAdapter&lt;/li&gt;&lt;li&gt;Threading &amp;amp; Async behaviour:&lt;ul&gt;&lt;li&gt;Threads: use runOnUiThread for async updates of the UI&lt;/li&gt;&lt;li&gt;Services&lt;/li&gt;&lt;li&gt;Broadcast &amp;amp; Receiver&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2711189617854087451?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2711189617854087451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2711189617854087451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2711189617854087451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2711189617854087451'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/11/android-jumpstart.html' title='Devoxx11: Android Jumpstart'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7400514130992293293</id><published>2011-10-28T10:28:00.005+02:00</published><updated>2011-10-28T20:39:19.461+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rtl8192se'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='11.10'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fixing the RTL8191SE wifi under Ubuntu 11.10</title><content type='html'>&lt;div&gt;The RTL8191SEvB wifi chipset is still not working under Ubuntu 11.10. Luckily, it's quite easy to add support for it. Please note that the procedure is slightly different from the &lt;a href="http://michael-peeters.blogspot.com/2011/06/fixing-rtl8191sevb-wifi-under-ubuntu.html"&gt;previous 11.4 steps&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Download the &lt;a href="http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&amp;amp;PNid=48&amp;amp;PFid=48&amp;amp;Level=5&amp;amp;Conn=4&amp;amp;DownTypeID=3&amp;amp;GetDown=false&amp;amp;Downloads=true#RTL8192SE"&gt;latest Linux driver from Realtek&lt;/a&gt;. Choose the Linux driver for kernel 2.6.35 and above. &lt;/li&gt;&lt;li&gt;Extract all files&lt;/li&gt;&lt;li&gt;In a terminal, execute the following commands:&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: monospace; font-size: 11px; line-height: 16px; background-color: rgb(255, 255, 255); "&gt;sudo su&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: monospace; font-size: 11px; line-height: 16px; background-color: rgb(255, 255, 255); "&gt;cd &lt;i&gt;&lt;correct directory=""&gt;&lt;/correct&gt;&lt;/i&gt;&lt;br /&gt;make&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: monospace; font-size: 11px; line-height: 16px; background-color: rgb(255, 255, 255); "&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: monospace; font-size: 11px; line-height: 16px; background-color: rgb(255, 255, 255); "&gt;modprobe rtl8192se&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Wifi should be working now. In order to keep the wifi working after a reboot, add one line with "rtl8192se" to the /etc/modules file.&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: monospace; font-size: 11px; line-height: 16px; background-color: rgb(255, 255, 255); "&gt;gksudo gedit /etc/modules&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-7400514130992293293?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7400514130992293293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7400514130992293293' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7400514130992293293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7400514130992293293'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/10/fixing-rtl8191se-wifi-under-ubuntu-1110.html' title='Fixing the RTL8191SE wifi under Ubuntu 11.10'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4909961458543862349</id><published>2011-06-22T22:45:00.006+02:00</published><updated>2011-10-28T20:33:38.370+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11.4'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rtl8192se'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fixing the RTL8191SEvB wifi under Ubuntu 11.4</title><content type='html'>&lt;p&gt;&lt;b&gt;Remark: If you're running Ubuntu 11.10, please use &lt;a href="http://michael-peeters.blogspot.com/2011/10/fixing-rtl8191se-wifi-under-ubuntu-1110.html"&gt;this new procedure&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Out of the box, Ubuntu 11.4 has no support for the RTL8191SEvB chipset that ships with my Medion Akoya S5612 laptop. Luckily, the manufacturer provides drivers for Linux.&lt;/p&gt;&lt;p&gt;Follow the next steps:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;First, make sure you uninstall ndiswrapper if you experimented with it (check in synaptic)&lt;/li&gt;&lt;li&gt;Download the Linux driver from &lt;a href="http://www.wireless-driver.com/realtek-rtl8191se-rtl8192se-wireless-linux-driver-ver0019/"&gt;http://www.wireless-driver.com/realtek-rtl8191se-rtl8192se-wireless-linux-driver-ver0019/&lt;/a&gt; and untar it in your home directory.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In a Terminal, execute the following commands (*)&lt;br /&gt;&lt;code&gt;cd ~/rtl8192se_linux_2.6.0019.1207.2010&lt;br /&gt;sudo su&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;modprobe r8192se_pci&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;After the modprobe, wifi should work. If everything is OK, you can persist the modprobe command by appending a line with "r8192se_pci" to /etc/modules:&lt;br /&gt;&lt;code&gt;gksudo gedit /etc/modules&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;(*) Don't try to sudo every single command as the 'make install' will give strange compilation errors. Those errors vanish with the recommended (in this case) sudo su approach.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;background:&lt;ul&gt;&lt;li&gt;&lt;a href="http://forum.ubuntu-nl.org/internet-en-draadloos/hoe-de-driver-te-installeren-voor-medion-akoya-voor-draadloos/"&gt;http://forum.ubuntu-nl.org/internet-en-draadloos/hoe-de-driver-te-installeren-voor-medion-akoya-voor-draadloos/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;http://ubuntuforums.org/showthread.php?t=1635892&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4909961458543862349?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4909961458543862349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4909961458543862349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4909961458543862349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4909961458543862349'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/06/fixing-rtl8191sevb-wifi-under-ubuntu.html' title='Fixing the RTL8191SEvB wifi under Ubuntu 11.4'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7599895573011250143</id><published>2011-06-12T21:30:00.011+02:00</published><updated>2011-10-28T20:34:31.033+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11.4'/><category scheme='http://www.blogger.com/atom/ns#' term='medion'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fixing the rt2860 wifi chipset under Ubuntu 11.4</title><content type='html'>I have a Medion Akoya MD96888 that ran ubuntu just fine from day 1. Unfortunately, with the latest Ubuntu versions the wifi connection is really unstable, unreliable and very slow. This post explains how to identify the problem and how to resolve it. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Diagnosis&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The following commands will identify which driver ubuntu uses for your wifi card:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;&lt;b&gt;nm-tool&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;- Device: wlan0 ----------------------------------------------------------------&lt;br /&gt;Type:           802.11 WiFi&lt;br /&gt;Driver:         &lt;b&gt;rt2800pci&lt;/b&gt;&lt;br /&gt;State:          disconnected&lt;br /&gt;Default:        no&lt;br /&gt;HW Address:     00:22:43:13:7F:7B&lt;br /&gt;&lt;br /&gt;Capabilities:&lt;br /&gt;&lt;br /&gt;Wireless Properties&lt;br /&gt;WEP Encryption:  yes&lt;br /&gt;WPA Encryption:  yes&lt;br /&gt;WPA2 Encryption: yes ...&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;b&gt; lsmod | grep rt2800pci&lt;/b&gt;&lt;br /&gt;rt2800pci           18159  0&lt;br /&gt;rt2800lib           43824  1 rt2800pci&lt;br /&gt;rt2x00pci           13986  1 rt2800pci&lt;br /&gt;rt2x00lib           39075  3 rt2800pci,rt2800lib,rt2x00pci&lt;br /&gt;eeprom_93cx6        12653  1 rt2800pci&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;b&gt;sudo lshw -C network&lt;/b&gt;&lt;br /&gt;*-network          &lt;br /&gt; description: Ethernet interface&lt;br /&gt; product: RTL8101E/RTL8102E PCI Express Fast Ethernet controller&lt;br /&gt; vendor: Realtek Semiconductor Co., Ltd.&lt;br /&gt; physical id: 0&lt;br /&gt; bus info: pci@0000:01:00.0&lt;br /&gt; logical name: eth0&lt;br /&gt; version: 02&lt;br /&gt; serial: 00:21:85:4c:75:cc&lt;br /&gt; size: 100Mbit/s&lt;br /&gt; capacity: 100Mbit/s&lt;br /&gt; width: 64 bits&lt;br /&gt; clock: 33MHz&lt;br /&gt; capabilities: pm msi pciexpress msix vpd bus_master cap_list rom ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation&lt;br /&gt; configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3LK-NAPI duplex=full ip=192.168.1.60 latency=0 link=yes multicast=yes port=MII speed=100Mbit/s&lt;br /&gt; resources: irq:42 ioport:d000(size=256) memory:ffd10000-ffd10fff memory:ffd00000-ffd0ffff memory:dfd00000-dfd0ffff&lt;br /&gt;*-network&lt;br /&gt; description: Wireless interface&lt;br /&gt; product: &lt;b&gt;RT2860&lt;/b&gt;&lt;br /&gt; vendor:&lt;b&gt; Ralink corp.&lt;/b&gt;&lt;br /&gt; physical id: 0&lt;br /&gt; bus info: pci@0000:02:00.0&lt;br /&gt; logical name: wlan0&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Conclusion: ubuntu uses the rt2800pci driver for accessing the RT2860 wifi chipset. This driver causes the instability.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Currently the only solution is to download the driver directly from Ralink and manually compiling and installing it. Although the command line steps are quite tedious,  I did get a stable wifi back. The following steps are copied and slightly updated from &lt;a href="http://ubuntuforums.org/showthread.php?t=1592731"&gt;http://ubuntuforums.org/showthread.php?t=1592731&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Download latest RT2860 driver source code from Ralink at &lt;a href="http://www.ralinktech.com/support.php?s=2"&gt;http://www.ralinktech.com/support.php?s=2&lt;/a&gt;. The driver is tagged &lt;i&gt;RT2860PCI/mPCI/CB/PCIe(RT2760/RT2790/RT2860/RT2890). &lt;/i&gt;Put the tar into your home directory.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Extract the tar file and go to the expanded directory (ignore the bz2 extensions, bunzip2 won't work):&lt;code&gt;&lt;pre&gt;tar -xvf ~/2010*&lt;br /&gt;cd ~/2010*&lt;/pre&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Edit the config.mk file:&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;gedit ./os/linux/config.mk &lt;/code&gt;&lt;/pre&gt;  Find the following lines (by default set to "n") and set them to be "y":&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;HAS_WPA_SUPPLICANT=y&lt;br /&gt;HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y&lt;/code&gt;&lt;/pre&gt;Save and close the file.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Back in the terminal window perform the following command&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;gedit ./common/cmm_wpa.c&lt;/code&gt;&lt;/pre&gt;For the warning message choose "Western" then "Retry".&lt;br /&gt;&lt;br /&gt;Use the find command to locate "MIX_CIPHER_NOTUSE". Replace the entire line with this code:&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Save and close the file.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make sure gcc is installed (usually is by default but if not install it via synaptic) then from the terminal window perform the following commands:&lt;pre&gt;&lt;code&gt;sudo make&lt;br /&gt;sudo make install&lt;br /&gt;sudo ifconfig wlan0 down    (on some hardware it is ra0)&lt;br /&gt;sudo rmmod rt2860sta&lt;br /&gt;sudo mv /lib/modules/$(uname -r)/kernel/drivers/staging/rt2860/rt2860sta.ko /lib/modules/$(uname -r)/kernel/drivers/staging/rt2860/rt2860sta.ko.dist&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Still in the terminal window perform the following commands:&lt;pre&gt;&lt;code&gt;sudo depmod -a&lt;br /&gt;sudo modprobe rt2860sta&lt;br /&gt;sudo ifconfig wlan0 up        (on some hardware it is ra0)&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Check that network manager can now select networks and connect to them.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Back in the terminal window perform the following command:&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;sudo cp ./os/linux/rt2860sta.ko /lib/modules/$(uname -r)/kernel/drivers/staging/rt2860/&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;In the terminal window perform the following command:&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;code&gt;gksudo gedit /etc/modules&lt;/code&gt;&lt;/pre&gt;Add "rt2860sta" on a line at the end of the file then save and close it.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Reboot and check that wifi still works&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-7599895573011250143?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7599895573011250143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7599895573011250143' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7599895573011250143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7599895573011250143'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2011/06/fixing-rt2860-wifi-chipset-under-ubuntu.html' title='Fixing the rt2860 wifi chipset under Ubuntu 11.4'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-259752728243292819</id><published>2010-01-27T23:00:00.004+01:00</published><updated>2010-01-27T23:20:46.202+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='dropbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu one'/><title type='text'>Fixing Ubuntu One</title><content type='html'>&lt;a href="https://one.ubuntu.com/"&gt;Ubuntu One&lt;/a&gt; is Ubuntu's first step into Cloud Computing. Like &lt;a href="https://www.dropbox.com/"&gt;dropbox&lt;/a&gt;, it provides automatic file-syncing of a dedicated "ubuntu one" folder over the internet between several computers. Both solutions are running on &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt; virtual servers and both solution have a free starting plan that provides 2 GB of synced storage. The magic syncing and free 2GB provides a convenient alternative to USB sticks for exchanging documents.&lt;br /&gt;&lt;br /&gt;As an Ubuntu 9.10 user, I played a bit with ubuntu one, but I had problems with the syncing on one computer. If you have trouble with ubuntu one, you can experiment with the command line tools. Some useful commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;install command line tools:&lt;br /&gt;$ sudo apt-get install ubuntuone-client-tools&lt;/li&gt;&lt;li&gt;$ u1sync --authorize &lt;/li&gt;&lt;li&gt;$ u1sync --init ~/Ubuntu\ One&lt;/li&gt;&lt;li&gt;$ u1sync --diff ~/Ubuntu\ One&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;At first, I had to uncheck the "limit bandwidth" in the ubuntu one config: ~/.config/ubuntuone&lt;br /&gt;&lt;blockquote&gt;[bandwidth_throttling]&lt;br /&gt;read_limit = -1&lt;br /&gt;write_limit = -1&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;on = False&lt;/span&gt;&lt;/blockquote&gt;This didn't help much, however. These are the relevant ubuntu one directories:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;python sources:&lt;br /&gt;/usr/lib/ubuntuone-client/ubuntuone-syncdaemoncd&lt;br /&gt;/usr/share/pyshared/ubuntuone/*&lt;/li&gt;&lt;li&gt;data dir: ~/.local/share/ubuntuone/syncdaemon &lt;/li&gt;&lt;li&gt;shares dir: ~/.local/share/ubuntuone/shares&lt;/li&gt;&lt;li&gt;logging ~/.cache/ubuntuone/log&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As I couldn't find any relevant errors and get Ubuntu one continue its syncing, I finally re-initialized Ubuntu One:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I killed all ubuntu one processes:&lt;br /&gt;$ pkill ubuntuone&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I removed all ubuntu one configuration files:&lt;br /&gt;$ rm -rf ~/.*/ubuntuone&lt;br /&gt;$ rm -rf ~/.*/*/ubuntuone&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;After logging out / logging back in, ubuntu one just worked fine. I had to remove the conflict files, but apart from that, the syncing is now OK.&lt;br /&gt;&lt;br /&gt;As an additional service, ubuntu one also provides excellent syncing for Tomboy and for Evolution. Simply follow the steps in &lt;a href="https://wiki.ubuntu.com/UbuntuOne/Tutorials/Notes"&gt;https://wiki.ubuntu.com/UbuntuOne/Tutorials/Notes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-259752728243292819?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/259752728243292819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=259752728243292819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/259752728243292819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/259752728243292819'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2010/01/fixing-ubuntu-one.html' title='Fixing Ubuntu One'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5514463855061552986</id><published>2010-01-04T20:23:00.004+01:00</published><updated>2010-01-04T20:27:32.377+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='computer name'/><title type='text'>Ubuntu: Changing the Computer Name</title><content type='html'>When installing Ubuntu, the setup wizard asks for a computer name. By default the computername is based on the first username. It is easy to change the computer name afterwards:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;gksudo gedit /etc/hosts /etc/hostname&lt;/blockquote&gt;&lt;br /&gt;Modify and save both files at the same time&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5514463855061552986?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5514463855061552986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5514463855061552986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5514463855061552986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5514463855061552986'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2010/01/ubuntu-changing-computer-name.html' title='Ubuntu: Changing the Computer Name'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-9010747224255762247</id><published>2009-12-14T18:01:00.007+01:00</published><updated>2009-12-16T19:26:18.425+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='realtek'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='ndiswrapper'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>The Realtek 8191/8192SE under Ubuntu</title><content type='html'>I have a Realtek 8191/8192SE wifi card embedded in my Medion Akoya S5612. As usual for Realtek, this card has only support for Windows. I had to use ndiswrapper to get the card working under Ubuntu 9.10. Steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;download the Realtek 8192SE driver&lt;/li&gt;&lt;li&gt;from Synaptic, install the ndisgtk package (dependencies are automatically selected)&lt;/li&gt;&lt;li&gt;now, in System / Administration / Window Wireless Drivers you can install the windows driver. Select the Win2K driver.&lt;/li&gt;&lt;/ul&gt;That's all. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-9010747224255762247?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/9010747224255762247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=9010747224255762247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/9010747224255762247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/9010747224255762247'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/12/realtek-81918192se-under-ubuntu.html' title='The Realtek 8191/8192SE under Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-928991688826962449</id><published>2009-11-29T20:38:00.014+01:00</published><updated>2009-11-29T22:11:27.149+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsm'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='sim'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Accessing GSM SIM-Cards under Ubuntu</title><content type='html'>I borrowed a cheap GSM SIM-card reader and tried to use it under Ubuntu. The "Zolid" card reader is both a memory-card reader as well as a SIM card reader. The device presents itself to Ubuntu as follows (including the typo):&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;$lsusb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Bus 001 Device 005: ID 0bda:0169 Realtek Semiconductor Corp. Mass Stroage Device&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;The 'Mass Storage Driver' that mounts SD cards just works fine out-of-the-box. I concentrated my experiments on the SIM-card reader. I installed the 'MonoSIM' application to access the device.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.integrazioneweb.com/monosim/"&gt;http://www.integrazioneweb.com/monosim/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;install the debian package. After some google-ing, I found a package at &lt;a href="http://linux.softpedia.com/progDownload/monosim-Download-27949.html"&gt;http://linux.softpedia.com/progDownload/monosim-Download-27949.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;under ubuntu, the package installer is automatically triggered and all associated packages (like libmono) are installed if needed&lt;/li&gt;&lt;li&gt;make sure the 'pcscd" smartcard daemon package is installed - check with Synaptic&lt;/li&gt;&lt;/ul&gt;In Applications/Office you can run the MonoSIM application and manage all phone numbers on it.&lt;br /&gt;&lt;br /&gt;Some scripts that might be useful:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;combine the 'monosim' file records to 1 line per record&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ cat *mono* | while read a; do read b; echo "$a;$b"; done | sort -u &amp;gt; gsm.csv&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I used OpenOffice to filter out old lines and save the file back to csv&lt;br /&gt;&lt;/li&gt;&lt;li&gt;converting the csv back to the 'monosim' format:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ while read a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  echo $a | cut -d '"' -f 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo $a | cut -d '"' -f 4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;done &amp;lt; gsm.csv &amp;gt; gsm.csv.monosim&lt;/gsm.csv&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The MonoSIM application works fine; the trick is to reconnect whenever a menu-item is greyed out.&lt;br /&gt;&lt;br /&gt;see also: &lt;a href="http://www.barrydegraaff.tk/index.php?page=files/Archive/Linux%20Sim%20Card%20reader/index.html"&gt;http://www.barrydegraaff.tk/index.php?page=files/Archive/Linux%20Sim%20Card%20reader/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-928991688826962449?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/928991688826962449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=928991688826962449' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/928991688826962449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/928991688826962449'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/accessing-gsm-sim-cards-under-ubuntu.html' title='Accessing GSM SIM-Cards under Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5341291007548633959</id><published>2009-11-24T22:36:00.018+01:00</published><updated>2010-06-06T09:37:54.653+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='9.10'/><category scheme='http://www.blogger.com/atom/ns#' term='hal'/><category scheme='http://www.blogger.com/atom/ns#' term='mass storage'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><category scheme='http://www.blogger.com/atom/ns#' term='ndiswrapper'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fixing Auto-mount Problems of a USB Device in Ubuntu</title><content type='html'>On one of my laptops with Ubuntu 9.10, USB memory sticks would only mount after several plug/unplug attempts. I investigated the problem and found a solution.&lt;br /&gt;&lt;br /&gt;Diagnosis:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ tail -f /var/log/messages (or call dmesg)&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;Nov 24 21:33:41 michael-laptop2 kernel: [ 2592.748078] usb 2-1: new full speed USB device using uhci_hcd and address 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Nov 24 21:33:44 michael-laptop2 kernel: [ 2595.113326] usb 2-1: configuration #1 chosen from 1 choice&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;→ only after several attempts, the log would display "Initializing USB Mass Storage" and proceed with the auto-mount.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ sudo lsusb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Bus 002 Device 002: ID &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"&gt;041e:200c &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Creative Technology, Ltd&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;→ in this case, the USB stick is an mp3 player&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;$ sudo lshal&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;...&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;udi = '/org/freedesktop/Hal/devices/usb_device_&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"&gt;41e_200c&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;_4002FA76125D8F8A_if0'&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"&gt;  info.linux.driver = 'ndiswrapper'&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;(string)&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;info.parent = '/org/freedesktop/Hal/devices/usb_device_41e_200c_4002FA76125D8F8A'&lt;br /&gt;(string)&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:85%;"&gt;info.product = 'USB Mass Storage Interface'&lt;br /&gt;(string)&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:85%;"&gt;info.subsystem = 'usb' (string)&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;...&lt;/span&gt;&lt;br /&gt;→ the "&lt;span style="font-weight: bold;"&gt;41e_200c&lt;/span&gt;" USB device has been wrongly associated to the ndiswrapper module.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Conclusion: my old &lt;a href="http://michael-peeters.blogspot.com/2008/12/getting-realtek-rtl8187b-wifi-stable.html"&gt;experiments with ndiswrapper&lt;/a&gt; and the rtl8187b wifi device still left traces on my Ubuntu system I upgraded to 9.10.&lt;br /&gt;&lt;br /&gt;Removing ndiswrapper was a bit tricky:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;$ sudo ndiswrapper -l&lt;br /&gt;net8187b : driver installed&lt;br /&gt;device (0BDA:8189) present (alternate driver: rtl8187)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ sudo ndiswrapper -r rtl8187&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;in synaptic: remove all the ndiswrapper-* packages&lt;/li&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;$ sudo rmmod ndiswrapper&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ sudo gedit /etc/modules &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;→ remove ndiswrapper line&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ sudo rm /lib/modules/$(uname -r)/kernel/ubuntu/ndiswrapper/ndiswrapper.ko&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Now, usb sticks mount from the first time.&lt;br /&gt;see also: &lt;a href="https://help.ubuntu.com/community/WifiDocs/Driver/Ndiswrapper"&gt;https://help.ubuntu.com/community/WifiDocs/Driver/Ndiswrapper&lt;/a&gt;&lt;br /&gt;update 25/11/2009: apparently, the ndiswrapper is part of the ubuntu distribution. After applying the latest security-fix, the ndiswrapper module re-appeared.&lt;div&gt;update 6/6/2010: the ndiswrapper bug still exists in Ubuntu 10.4. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5341291007548633959?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5341291007548633959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5341291007548633959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5341291007548633959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5341291007548633959'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/fixing-auto-mount-problems-of-usb.html' title='Fixing Auto-mount Problems of a USB Device in Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1880145015629854459</id><published>2009-11-19T18:55:00.002+01:00</published><updated>2009-11-19T19:06:05.785+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='ibm'/><title type='text'>Devoxx 2009: Performance for the Performance-shy</title><content type='html'>&lt;span style="font-style: italic;"&gt;19/11/2009, Holly Cummins, IBM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;costs of bad performance&lt;ul&gt; &lt;li&gt;electricity &lt;/li&gt;&lt;li&gt;employee productivity &lt;/li&gt;&lt;li&gt;lost business (e.g. slow pages) &lt;/li&gt;&lt;li&gt;hard cash (e.g. trading)&lt;/li&gt;&lt;/ul&gt;tuning technique&lt;ul&gt; &lt;li&gt;find the bottleneck in the application &lt;ul&gt;  &lt;li&gt;cpu → consistently high  &lt;/li&gt;&lt;li&gt;I/O → cpu not consistently high  &lt;/li&gt;&lt;li&gt;lock →  cpu not consistently  high  &lt;/li&gt;&lt;li&gt;space ??? cpu can be low or high  ... &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;what is the JVM doing? → tools … must have: &lt;ul&gt;  &lt;li&gt;visual indicators     &lt;/li&gt;&lt;li&gt;explanation  &lt;/li&gt;&lt;li&gt;suggested solution (command line) &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;measure performance &lt;ul&gt;  &lt;li&gt;risk to make it worse  &lt;/li&gt;&lt;li&gt;get a baseline  &lt;/li&gt;&lt;li&gt;system must be as similar as  possible to production  &lt;/li&gt;&lt;li&gt;how:  &lt;ul&gt;   &lt;li&gt;System.currentTimeMillis()   &lt;/li&gt;&lt;li&gt;warm up your system   &lt;ul&gt;    &lt;li&gt;JIT    &lt;/li&gt;&lt;li&gt;trigger caches   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;tools: IBM Perfomance Tools&lt;ul&gt; &lt;li&gt;for IBM jvm's &lt;/li&gt;&lt;li&gt;free   &lt;/li&gt;&lt;li&gt;IBM Support Assistant: centralized repository for IBM tools&lt;/li&gt;&lt;/ul&gt;space-bound applications: heap&lt;ul&gt; &lt;li&gt;diagnose: &lt;ul&gt;  &lt;li&gt;lower throughput  &lt;/li&gt;&lt;li&gt;crash (out-of-memory exception)  &lt;/li&gt;&lt;li&gt;trigger gc's → higher cpu &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;tools: &lt;ul&gt;  &lt;li&gt;verbosegc: very low overhead →  use on production  &lt;/li&gt;&lt;li&gt;live memory monitoring → IBM  Monitoring &amp;amp; Diagnostic tools for Java  &lt;ul&gt;   &lt;li&gt;GC and Memory Visualizer   &lt;ul&gt;    &lt;li&gt;for Websphere → also works on    Solaris &amp;amp; HP-UX (i.e. sun jvm syntax)    &lt;/li&gt;&lt;li&gt;heap details, including heap    histogram    &lt;/li&gt;&lt;li&gt;get dominator tree    &lt;/li&gt;&lt;li&gt;search inefficiently used data    structures &amp;amp; redundant data    &lt;/li&gt;&lt;li&gt;recommendations         &lt;ul&gt;     &lt;li&gt;increase heap size     &lt;/li&gt;&lt;li&gt;gc takes between 10% - 20% cpu     → tune gc policy          &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;Health Center   &lt;ul&gt;    &lt;li&gt;agent in JVM    &lt;/li&gt;&lt;li&gt;client (IBM Support Assistant)    &lt;/li&gt;&lt;li&gt;visualize gc    &lt;/li&gt;&lt;li&gt;recommendations    &lt;/li&gt;&lt;li&gt;check gc performance   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;Memory Analyzer (not from IBM →  eclipse.org): diagnose footprint issues:  &lt;ul&gt;   &lt;li&gt;heapdumps   &lt;ul&gt;    &lt;li&gt;automatically on out-of-memory    &lt;/li&gt;&lt;li&gt;trigger programmatically    &lt;/li&gt;&lt;li&gt;tool support is essentialµ   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;OS-tools  &lt;ul&gt;   &lt;li&gt;track native memory: perfmon,   vmstart, ps (os-specific)   &lt;/li&gt;&lt;li&gt;use gcmv to visualize   os-specific dump   &lt;/li&gt;&lt;li&gt;some native structures have   java-wrappers in the heap (e.g.  Threads and NIO buffers)  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;cpu-bound applications&lt;ul&gt; &lt;li&gt;target your optimizations → measure &lt;/li&gt;&lt;li&gt;diagnose: &lt;ul&gt;  &lt;li&gt;method trace:     &lt;ul&gt;   &lt;li&gt;System.out.println()       &lt;/li&gt;&lt;li&gt;log4j   &lt;/li&gt;&lt;li&gt;ibm-jvm param   -Xtrace:print=mt,methods=(HW*)  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;method profiler:     &lt;ul&gt;   &lt;li&gt;health center: low overhead   sampler  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;I/O bound applications&lt;ul&gt; &lt;li&gt;gc and memory analyser → long gc times might indicate paging &lt;/li&gt;&lt;li&gt;method trace for network and disk I/O &lt;/li&gt;&lt;li&gt;os-specific tools&lt;/li&gt;&lt;/ul&gt;synchronization issues (concurrency)&lt;ul&gt; &lt;li&gt;sample thread dumps &lt;/li&gt;&lt;li&gt;health center:   &lt;ul&gt;  &lt;li&gt;lock analysis  &lt;/li&gt;&lt;li&gt;identify contended locks &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1880145015629854459?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1880145015629854459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1880145015629854459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1880145015629854459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1880145015629854459'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-performance-for-performance.html' title='Devoxx 2009: Performance for the Performance-shy'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1518146188691596643</id><published>2009-11-19T16:37:00.002+01:00</published><updated>2009-11-19T16:40:41.850+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='jmeter'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx 2009: The not so Dark Art of Performance Tuning</title><content type='html'>&lt;span style="font-style: italic;"&gt;19/11/2009, Kirk Pepperdine &amp;amp; Dan Hardiker&lt;/span&gt;&lt;br /&gt;&lt;ul&gt; &lt;li&gt;loadtest &lt;&gt; stresstest:   &lt;ul&gt;  &lt;li&gt;loadtest:  test user experience  &lt;/li&gt;&lt;li&gt;stresstest:  find when the application breaks &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;performance  anti-patterns &amp;amp; solutions:   &lt;ul&gt;  &lt;li&gt;lack of  stress testing → introduce a stress test harness  &lt;ul&gt;   &lt;li&gt;repeatable   test   &lt;/li&gt;&lt;li&gt;control load  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;shot in the  dark: fix ugly code  &lt;ul&gt;   &lt;li&gt;ugly code   runs just fine   &lt;/li&gt;&lt;li&gt;&lt;b&gt;measure&lt;/b&gt;,   don't guess!  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;Apache JMeter → root node: “Test Plan” &lt;ul&gt;  &lt;ul&gt;   &lt;li&gt;Thread Group   &lt;ul&gt;    &lt;li&gt;set looping    / # threads   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;HTTP Request   &lt;ul&gt;    &lt;li&gt;→    variables: ${var}    &lt;ul&gt;     &lt;li&gt;defeat     cache     &lt;/li&gt;&lt;li&gt;vary     testdata    &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;Timer child   for think-time→ e.g. Uniform Random Timer       &lt;/li&gt;&lt;li&gt;aggregate   report   &lt;/li&gt;&lt;li&gt;view results   tree → captures data of requests: e.g. don't measure 404 errors  &lt;/li&gt;&lt;/ul&gt; &lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;understand the environment, identify dominating consumer → look at the &lt;/span&gt;&lt;i&gt;full &lt;/i&gt;&lt;span style="font-style: normal;"&gt;system&lt;/span&gt; &lt;ul&gt;  &lt;li&gt;&lt;span style="font-style: normal;"&gt;actors:  usage patterns&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;application&lt;/span&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span style="font-style: normal;"&gt;locks&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;external   systems&lt;/span&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;jvm/os&lt;/span&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span style="font-style: normal;"&gt;memory&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;hardware   management&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;tools   e.g.:&lt;/span&gt;   &lt;ul&gt;    &lt;li&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;vmstat&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt;    on hpux&lt;/span&gt;    &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;jps&lt;/span&gt;    &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;jstack&lt;/span&gt;    &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;visual    vm (thread and heap dumps)&lt;/span&gt;   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;hardware&lt;/span&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span style="font-style: normal;"&gt;cpu&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;memory&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;disk   I/O&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;network&lt;/span&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;response time budgets: &lt;/span&gt;  &lt;ul&gt;  &lt;li&gt;&lt;span style="font-style: normal;"&gt;detail  the time of the different components → add customizable time  measures &lt;/span&gt;    &lt;ul&gt;   &lt;li&gt;&lt;span style="font-style: normal;"&gt;database&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;application   server&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;client&lt;/span&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;common problems, demo's:&lt;/span&gt; &lt;ul&gt;  &lt;li&gt;&lt;span style="font-style: normal;"&gt;poor  response times, low cpu&lt;/span&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span style="font-style: normal;"&gt;thread   pools&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;locks&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;→ &lt;span style="font-style: normal;"&gt;&lt;b&gt;VisualVM&lt;/b&gt;&lt;/span&gt;&lt;span style="font-style: normal;"&gt;,   thread dump + plugin thread dump analyzer, identify lock &lt;/span&gt;     &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1518146188691596643?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1518146188691596643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1518146188691596643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1518146188691596643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1518146188691596643'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-not-so-dark-art-of.html' title='Devoxx 2009: The not so Dark Art of Performance Tuning'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-537798394548198043</id><published>2009-11-19T16:34:00.002+01:00</published><updated>2009-11-19T18:00:43.169+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt'/><title type='text'>Devoxx 2009: Using XML with Java: Sploit for Choice?</title><content type='html'>&lt;span style="font-style: italic;"&gt;19/11/2009, Michael Kay, Saxonica&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Xml interfaces in java, from low level to high level&lt;ul&gt; &lt;li&gt;SAX/Stax &lt;ul&gt;  &lt;li&gt;high performance: +/- 40 MB/sec  &lt;/li&gt;&lt;li&gt;low-level  &lt;/li&gt;&lt;li&gt;SAX/Stax: comparable performance  &lt;/li&gt;&lt;li&gt;use pipelines:  &lt;ul&gt;   &lt;li&gt;SAX: push   &lt;ul&gt;    &lt;li&gt;best for multiple output   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;Stax: pull:   &lt;ul&gt;    &lt;li&gt;best for multiple input   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;DOM: tree based &lt;ul&gt;  &lt;li&gt;don't use plain DOM, prefer JDOM,  DOM4J or XOM – I once experienced problems with the XOM-handling  of unicode characters  &lt;/li&gt;&lt;li&gt;uses a lot of memory: +/- 5 times  the document size  &lt;/li&gt;&lt;li&gt;complex, tedious usage &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;databinding: compile to / (un)marshall from java objects &lt;ul&gt;  &lt;li&gt;like JAXB  &lt;/li&gt;&lt;li&gt;fits for simple xml  &lt;/li&gt;&lt;li&gt;not for complex xml or document  xmls → create too much java classes  &lt;/li&gt;&lt;li&gt;give 2 views on the same: xml &amp;lt;&amp;gt;  java objects &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;language support:   &lt;ul&gt;  &lt;li&gt;doesn't exist in Java...  &lt;/li&gt;&lt;li&gt;scala: XQuery-like capabilities &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;XSLT/XQuery &lt;ul&gt;  &lt;li&gt;should be your default choice  &lt;/li&gt;&lt;li&gt;good performance: +/- 10MB/sec  &lt;/li&gt;&lt;li&gt;XSLT:  &lt;ul&gt;   &lt;li&gt;more for documents   &lt;/li&gt;&lt;li&gt;transformations   &lt;/li&gt;&lt;li&gt;richer functionality  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;XQuery:  &lt;ul&gt;   &lt;li&gt;more for data   &lt;/li&gt;&lt;li&gt;xml-database   &lt;/li&gt;&lt;li&gt;easier to optimize&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Architectures&lt;ul&gt; &lt;li&gt;prefer xml pipelines: (xproc pipelines)xml database → xquery → xslt → rest → xforms &lt;/li&gt;&lt;li&gt;don't mix data: objects &amp;amp; xml&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-537798394548198043?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/537798394548198043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=537798394548198043' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/537798394548198043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/537798394548198043'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-using-xml-with-java-sploit.html' title='Devoxx 2009: Using XML with Java: Sploit for Choice?'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5441202564100578153</id><published>2009-11-18T18:48:00.005+01:00</published><updated>2009-11-19T09:17:07.923+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdk7'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='java7'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx 2009: Project Coin</title><content type='html'>&lt;span style="font-style: italic;"&gt;18/11/2009, Joe D. Darcy, Sun&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;slides: &lt;a href="http://blogs.sun.com/darcy/entry/project_coin_devoxx_2009"&gt;http://blogs.sun.com/darcy/entry/project_coin_devoxx_2009&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Project Coin&lt;ul&gt; &lt;li&gt;small language changes in JDK7 &lt;/li&gt;&lt;li&gt;keep broad consideration of java landscape → remain consistent with the Java Language   &lt;/li&gt;&lt;li&gt;bigger language changes, not in scope of Project Coin &lt;ul&gt;  &lt;li&gt;JSR308: annotations to improve  static checkers (e.g. @NotNull)  &lt;/li&gt;&lt;li&gt;JSR294: modularity &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;principles of Project Coin:&lt;ul&gt; &lt;li&gt;reading more important than writing &lt;ul&gt;  &lt;li&gt;'beautiful' code  &lt;/li&gt;&lt;li&gt;don't hide what's happening &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;simplicity matters &lt;/li&gt;&lt;li&gt;no slash-and-burn: remember broad user-base &lt;/li&gt;&lt;li&gt;balance stability versus progress &lt;/li&gt;&lt;li&gt;prefer library / IDE changes over language changes (String.join) &lt;/li&gt;&lt;li&gt;no new keywords &lt;/li&gt;&lt;li&gt;no type system changes &lt;/li&gt;&lt;li&gt;small in specification, implementation and testing&lt;/li&gt;&lt;/ul&gt;methodology: &lt;ul&gt; &lt;li&gt;open: blog entries / white board on Devoxx2008   &lt;/li&gt;&lt;li&gt;call for proposals &lt;/li&gt;&lt;li&gt;prototypes recommended &lt;ul&gt;  &lt;li&gt;lot of work  &lt;/li&gt;&lt;li&gt;very beneficial → learn / find  issues &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;existing requests for enhancement: 120 changes → too much&lt;/li&gt;&lt;/ul&gt;final list of Project Coin enhancements&lt;ul&gt; &lt;li&gt;numbers: &lt;ul&gt;  &lt;li&gt;binary notation: &lt;b&gt;0b&lt;/b&gt;00100100001  &lt;/li&gt;&lt;li&gt;group numbers with '_': long big  = 1_123_456_789; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;switch on a String – really cool! &lt;ul&gt;  &lt;li&gt;specification: only one word  added  &lt;/li&gt;&lt;li&gt;proposal contains a suggested  implementation:  &lt;ul&gt;   &lt;li&gt;uses String.hashCode() for an   initial switch  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;big patch in javac  &lt;/li&gt;&lt;li&gt;lots of tests to validate change  &lt;ul&gt;   &lt;li&gt;reject pre -source 7 classes   &lt;/li&gt;&lt;li&gt;null behavior   &lt;/li&gt;&lt;li&gt;hash collisions   &lt;/li&gt;&lt;li&gt;fall-throughs   &lt;/li&gt;&lt;li&gt;→ comparable to enum switch   control flow  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;diamond &amp;lt;&amp;gt; operator : type interference → e.g. Map &amp;lt;String,String&amp;gt; map = new HashMap&amp;lt;&amp;gt;(); &lt;ul&gt;  &lt;li&gt;a lot of prototyping work  &lt;/li&gt;&lt;li&gt;quantitative analysis     &lt;/li&gt;&lt;li&gt;some concerns on language  evolution were considered &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;JSR292: invokedynamic for dynamic languages &lt;/li&gt;&lt;li&gt;auto-close of Closable types within a special try block (ARM) &lt;ul&gt;  &lt;li&gt;try(File f = new File) {} → f  is automatically closed when leaving the block &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;simplified varargs method invocation, working along with generics &lt;/li&gt;&lt;li&gt;language support for Lists and Maps: &lt;ul&gt;  &lt;li&gt;List&amp;lt;String&amp;gt; list = [“1”,  “2”];  &lt;/li&gt;&lt;li&gt;list[0]  &lt;/li&gt;&lt;li&gt;map{“hello”} &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; retained in Project coin:&lt;ul&gt; &lt;li&gt;Elvis operator:   &lt;ul&gt;  &lt;li&gt;use ?: as a shorthand for testing  on null     &lt;/li&gt;&lt;li&gt;conclusion from building a  prototype→ doesn't fit well in java    &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;multiple exception handling &lt;ul&gt;  &lt;li&gt;disjunctive means of | operator &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;properties:   &lt;ul&gt;  &lt;li&gt;changes the type system  &lt;/li&gt;&lt;li&gt;a &lt;i&gt;lot&lt;/i&gt;&lt;span style="font-style: normal;"&gt;  of work (e.g. reflection api, corner cases …) – the 'enum'  specification is demonstrated as a comparable change that involved  a lot of  rework&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;pseudo-properties  workaround: via annotation-processing → Project Lombok&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;reified generics&lt;/span&gt; &lt;ul&gt;  &lt;li&gt;&lt;span style="font-style: normal;"&gt;source  language compatibility issues – java generic erasure was chosen  for backward compatibility&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;C#  created a separate generic library&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;difficult  for other languages to target the a platform with reified generics&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;extensible enums&lt;/span&gt; &lt;ul&gt;  &lt;li&gt;&lt;span style="font-style: normal;"&gt;most  enums are constant&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: normal;"&gt;low  utility&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5441202564100578153?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5441202564100578153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5441202564100578153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5441202564100578153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5441202564100578153'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-project-coin.html' title='Devoxx 2009: Project Coin'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-3386058249603482844</id><published>2009-11-18T17:59:00.001+01:00</published><updated>2009-11-18T18:00:46.918+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='solr'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='text-search'/><title type='text'>Devoxx 2009: Solr Power with Lucene</title><content type='html'>&lt;span style="font-style: italic;"&gt;18/11/2009, Erik Hatcher&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lucene core&lt;ul&gt; &lt;li&gt;full-text search library &lt;/li&gt;&lt;li&gt;concepts &lt;ul&gt;  &lt;li&gt;inverted index:  &lt;ul&gt;   &lt;li&gt;term + proximity  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;documents  &lt;/li&gt;&lt;li&gt;fields  &lt;ul&gt;   &lt;li&gt;field-ids: e.g. category, title,   name...   &lt;/li&gt;&lt;li&gt;types: number, date, text...   &lt;/li&gt;&lt;li&gt;unique keys: unique id per   document  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;terms (aka tokens):  &lt;ul&gt;   &lt;li&gt;processed through filters   &lt;ul&gt;    &lt;li&gt;synonyms    &lt;/li&gt;&lt;li&gt;ignore words    &lt;/li&gt;&lt;li&gt;stemming   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;scoring relevancy  &lt;ul&gt;   &lt;li&gt;term frequency   &lt;/li&gt;&lt;li&gt;inverse document frequency       &lt;/li&gt;&lt;li&gt;field length normalization →   control how field length / # occurrences affects scoring   &lt;/li&gt;&lt;li&gt;boost factors: favor or boost   some fields (e.g. titles)  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;core   &lt;ul&gt;  &lt;li&gt;standalone jar  &lt;/li&gt;&lt;li&gt;core index &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Apache Solr properties:&lt;ul&gt; &lt;li&gt;search server &lt;/li&gt;&lt;li&gt;based on Apache Lucene   &lt;ul&gt;  &lt;li&gt;→ Lucene exposed over http  &lt;/li&gt;&lt;li&gt;spell checking  &lt;/li&gt;&lt;li&gt;highlighting &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;extensible &lt;/li&gt;&lt;li&gt;scalable &lt;ul&gt;  &lt;li&gt;caching     &lt;/li&gt;&lt;li&gt;replication  &lt;/li&gt;&lt;li&gt;master/slave distributed search →  sharding &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;multiple inputs &lt;/li&gt;&lt;li&gt;version 1.4&lt;/li&gt;&lt;/ul&gt;Using Solr&lt;ul&gt; &lt;li&gt;setup: &lt;ul&gt;  &lt;li&gt;solrconfig.xml:     &lt;ul&gt;   &lt;li&gt;cache settings   &lt;/li&gt;&lt;li&gt;Lucene indexing parameters  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;API: &lt;ul&gt;  &lt;li&gt;RequestHandlers:     &lt;ul&gt;   &lt;li&gt;mini-servlets,       &lt;/li&gt;&lt;li&gt;flexible responses:   &lt;ul&gt;    &lt;li&gt;http GET/POST    &lt;/li&gt;&lt;li&gt;JSON    &lt;/li&gt;&lt;li&gt;SolrJ    &lt;/li&gt;&lt;li&gt;ruby, php, …    &lt;/li&gt;&lt;li&gt;content streams (must be    shielded)   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;indexing / deleting a document  &lt;ul&gt;   &lt;li&gt;through api: xml document with   commands   &lt;/li&gt;&lt;li&gt;POST or GET with request   parameters  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;other actions:     &lt;ul&gt;   &lt;li&gt;commit / rollback: batching   document indexing   &lt;/li&gt;&lt;li&gt;optimize  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;search request: simple GET, with  optional parameters  &lt;ul&gt;   &lt;li&gt;debug       &lt;/li&gt;&lt;li&gt;lucene explanation       &lt;/li&gt;&lt;li&gt;pagination: start / raws   &lt;/li&gt;&lt;li&gt;score: lucene score  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;DataImportHandler &lt;ul&gt;  &lt;li&gt;import from RDBMS, xml and e-mail  &lt;/li&gt;&lt;li&gt;incremental indexing  &lt;/li&gt;&lt;li&gt;extensible  &lt;/li&gt;&lt;li&gt;debug console &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;Solr Cell: uses Lucene Tika: &lt;ul&gt;  &lt;li&gt;index Word, pdf, html ...  &lt;/li&gt;&lt;li&gt;ExtractingRequestHandler &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;Query parser framework with plugable parsers: &lt;ul&gt;  &lt;li&gt;Lucene syntax:     &lt;ul&gt;   &lt;li&gt;powerful   &lt;/li&gt;&lt;li&gt;but user-unfriendly syntax   &lt;/li&gt;&lt;li&gt;exceptions visible to end-users  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;Dismax query parser  &lt;ul&gt;   &lt;li&gt;simplified syntax  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Advanced Solr: Search Components&lt;ul&gt; &lt;li&gt;standard: query, facet, mlt, highlight, stats, debug &lt;/li&gt;&lt;li&gt;others: elevation, clustering, term, term vector &lt;/li&gt;&lt;li&gt;faceting &lt;ul&gt;  &lt;li&gt;counts subset within results  &lt;/li&gt;&lt;li&gt;group 'facets' of a document  (like a category field) &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;spell checking &lt;/li&gt;&lt;li&gt;pluggable distance algorithms: Levenstein or JaroWinkler &lt;/li&gt;&lt;li&gt;highlighting: custom prefix and suffix → response is highlighted &lt;/li&gt;&lt;li&gt;query elevation → elevate.xml: boost or exclude a document &lt;/li&gt;&lt;li&gt;clustering: grouping of documents into labeled sets &lt;/li&gt;&lt;li&gt;enumerate terms for a field &lt;/li&gt;&lt;li&gt;term vectors: term frequency, document frequency, position, offset &lt;/li&gt;&lt;li&gt;statistics: stats.jsp (in RAM); returns xml &lt;/li&gt;&lt;li&gt;scaling: &lt;ul&gt;  &lt;li&gt;replication:     &lt;ul&gt;   &lt;li&gt;master is polled   &lt;/li&gt;&lt;li&gt;replicant pulls Lucene index /   config files   &lt;/li&gt;&lt;li&gt;replicate + load balance  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;distributed search: single index  is too large → sharding &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Staring with Solr&lt;ul&gt; &lt;li&gt;agile, iterative process works best: &lt;ul&gt;  &lt;li&gt;basic schema  &lt;/li&gt;&lt;li&gt;bring in data  &lt;/li&gt;&lt;li&gt;check requirement gaps     &lt;/li&gt;&lt;li&gt;adjust solr &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-3386058249603482844?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/3386058249603482844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=3386058249603482844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/3386058249603482844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/3386058249603482844'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-solr-power-with-lucene.html' title='Devoxx 2009: Solr Power with Lucene'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6752036040116449554</id><published>2009-11-18T15:29:00.002+01:00</published><updated>2009-11-18T15:34:39.184+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><title type='text'>Devoxx 2009: Architecting Robust Applications for Amazon EC2</title><content type='html'>&lt;i&gt;18/11/2009, Chris Richardson, SpringSource (VMware) &lt;a href="http://www.cloudtools.org/"&gt;www.cloudtools.org&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Amazon EC2 cloud computing solution:&lt;ul&gt; &lt;li&gt;choose your virtual machine, with machine images of standard OS's &lt;/li&gt;&lt;li&gt;cloud services &lt;ul&gt;  &lt;li&gt;SQS: Simple Queue Services  &lt;/li&gt;&lt;li&gt;SimpleDB: alternative to  relational DB  &lt;/li&gt;&lt;li&gt;S3: storage  &lt;/li&gt;&lt;li&gt;EC2 firewall: security groups  &lt;/li&gt;&lt;li&gt;Elastic Block Storage:     &lt;ul&gt;   &lt;li&gt;replicated, mounted as device   &lt;/li&gt;&lt;li&gt;snapshots → backup  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;Elastic Relational DB Service:  &lt;ul&gt;   &lt;li&gt;MySQL 5.2   &lt;/li&gt;&lt;li&gt;maintenance window: 4hour/week   &lt;/li&gt;&lt;li&gt;backup window  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;standard software: simply install (with yum or apt) your packages &lt;/li&gt;&lt;li&gt;console &lt;/li&gt;&lt;li&gt;local storage:&lt;/li&gt; &lt;ul&gt;  &lt;li&gt;plenty (160GB → 1690 GB)  &lt;/li&gt;&lt;li&gt;ephemeral  &lt;/li&gt;&lt;li&gt;slow down on first access  &lt;/li&gt;&lt;li&gt;→ Elastic Block Service &lt;/li&gt;&lt;/ul&gt; &lt;li&gt;easy upgrades: &lt;ul&gt;  &lt;li&gt;clone your production environment  &lt;/li&gt;&lt;li&gt;upgrade the clone  &lt;/li&gt;&lt;li&gt;test the clone  &lt;/li&gt;&lt;li&gt;if OK: put the clone in  production  &lt;/li&gt;&lt;li&gt;remove the old clone    &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;regions: &lt;ul&gt;  &lt;li&gt;US  &lt;/li&gt;&lt;li&gt;EU  &lt;/li&gt;&lt;li&gt;Asia  &lt;/li&gt;&lt;li&gt;sub-zones:     &lt;ul&gt;   &lt;li&gt;“availability zones” that   are isolated from each other.   &lt;/li&gt;&lt;li&gt;better availability   &lt;/li&gt;&lt;li&gt;more expensive  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;issues:&lt;ul&gt; &lt;li&gt;security: &lt;ul&gt;  &lt;li&gt;not PCI-compliant  &lt;/li&gt;&lt;li&gt;discomfort of putting your core  data on the cloud  &lt;/li&gt;&lt;li&gt;where is your data &lt;i&gt;really&lt;/i&gt;?  &lt;/li&gt;&lt;li&gt;but:  &lt;ul&gt;   &lt;li&gt;Amazon experience   &lt;/li&gt;&lt;li&gt;unlimited logging   &lt;/li&gt;&lt;li&gt;standard best practices for   security   &lt;/li&gt;&lt;li&gt;isolated instances   &lt;/li&gt;&lt;li&gt;put servers in different   security groups → Amazon EC2 firewall   &lt;/li&gt;&lt;li&gt;encrypt your data and backups  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;cost: &lt;ul&gt;  &lt;li&gt;expensive for large servers  &lt;/li&gt;&lt;li&gt;bandwidth  &lt;/li&gt;&lt;li&gt;but: no extra cost of cooling,  power etc. &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;machines: &lt;ul&gt;  &lt;li&gt;no very small, very big machines  &lt;/li&gt;&lt;li&gt;maintenance windows  &lt;/li&gt;&lt;li&gt;load-balancing:  &lt;ul&gt;   &lt;li&gt;ipbased: no support for sessions   &lt;/li&gt;&lt;li&gt;dns (cname)  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;is it reliable? &lt;ul&gt;  &lt;li&gt;is internal IT better?  &lt;/li&gt;&lt;li&gt;Amazon expertise  &lt;/li&gt;&lt;li&gt;easy to launch a new instance  within a few minutes &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;future: &lt;ul&gt; &lt;li&gt;Platform as a Service: &lt;ul&gt;  &lt;li&gt;complete stack  &lt;/li&gt;&lt;li&gt;simpler scaling, without being  involved into the technical details  &lt;/li&gt;&lt;li&gt;Google Application Engine  &lt;/li&gt;&lt;li&gt;Cloud Foundry:  &lt;ul&gt;   &lt;li&gt;Spring &amp;amp; Grails  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6752036040116449554?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6752036040116449554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6752036040116449554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6752036040116449554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6752036040116449554'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-architecting-robust.html' title='Devoxx 2009: Architecting Robust Applications for Amazon EC2'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-3965712776487817741</id><published>2009-11-18T13:09:00.002+01:00</published><updated>2009-11-18T13:12:36.666+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdk7'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='closures'/><category scheme='http://www.blogger.com/atom/ns#' term='java7'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx 2009: JDK 7 Update</title><content type='html'>&lt;span style="font-style: italic;"&gt;18/11/2009, Mark Reinhold&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;higlight: Closures in java are BACK!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aims of JDK7&lt;ul&gt; &lt;li&gt;modular platform &lt;ul&gt;  &lt;li&gt;JDK7 status:  &lt;ul&gt;   &lt;li&gt;13MB download with pack200   compression   &lt;/li&gt;&lt;li&gt;difficult to support smaller   (embedded) hardware  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;→ Jigsaw project  &lt;ul&gt;   &lt;li&gt;low-level modules, at the rt.jar   level   &lt;/li&gt;&lt;li&gt;language support:   module-info.java file   &lt;ul&gt;    &lt;li&gt;explicit module / version    requirements    &lt;/li&gt;&lt;li&gt;create simpler OS-specific    package, with correct dependencies (e.g. deb-packages)        &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;OSGi interoperability      &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;multi-lingual support &lt;ul&gt;  &lt;li&gt;better JRuby, Jython support on  the JVM  &lt;/li&gt;&lt;li&gt;InvokeDynamic  &lt;/li&gt;&lt;li&gt;“Da Vinci Machine project” &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;productivity enhancement &lt;ul&gt;  &lt;li&gt;“Project Coin”  &lt;/li&gt;&lt;li&gt;language changes that improve  programming experience. E.g.:  &lt;ul&gt;   &lt;li&gt;type inference with the &amp;lt;&amp;gt;   (aka. 'diamond') operator: Map &amp;lt;String,String&amp;gt; m = new &amp;lt;&amp;gt;   HashMap();   &lt;/li&gt;&lt;li&gt;split numbers with '_' for   better readability: int a=123_456_789;   &lt;/li&gt;&lt;li&gt;support binary notation: int   b=&lt;b&gt;0b&lt;/b&gt;&lt;span style="font-weight: normal;"&gt;00100100001;&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Lists:   direct construction and access to set/get with []: a[4] = b[5];&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Map:   direct construction and access to set/get with {}: a{“b”}=”xyz”;&lt;/span&gt;   &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: normal;"&gt;auto-close   Closeable interfaces: try(File f = new File()) where f is always   closed correctly.&lt;/span&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;performance &lt;ul&gt;  &lt;li&gt;multi-cores are there! → java  support needed.  &lt;/li&gt;&lt;li&gt;→ fork/join framework  &lt;/li&gt;&lt;li&gt;Dual-Pivot Quicksort  &lt;/li&gt;&lt;li&gt;Closures: “It's time to add  them” – I thought this was dropped from Java7 plans...  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;needed&lt;/b&gt;:   &lt;ul&gt;    &lt;li&gt;function literals    &lt;/li&gt;&lt;li&gt;function types    &lt;/li&gt;&lt;li&gt;extension methods   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;“doesn't fit in java”:   &lt;ul&gt;    &lt;li&gt;non-local control transfer    &lt;/li&gt;&lt;li&gt;capture non-final vars    &lt;/li&gt;&lt;li&gt;library-defined control    structures   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;When?&lt;ul&gt; &lt;li&gt;Planning shifted &lt;/li&gt;&lt;li&gt;Milestone 10: 2010/09/09: release candidate  &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-3965712776487817741?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/3965712776487817741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=3965712776487817741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/3965712776487817741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/3965712776487817741'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-jdk-7-update.html' title='Devoxx 2009: JDK 7 Update'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8215671926631835359</id><published>2009-11-18T11:41:00.004+01:00</published><updated>2009-11-18T11:48:00.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcasts'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='parleys.com'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='keynote'/><category scheme='http://www.blogger.com/atom/ns#' term='JEE6'/><title type='text'>Devoxx 2009: Keynotes 18/11/2009: Parleys.com, Oracle, Sun (JEE6) and Adobe</title><content type='html'>Stephan Janssen: Devoxx organizer,Parleys.com founder&lt;ul&gt; &lt;li&gt;presented his new Parleys v3 &lt;ul&gt;  &lt;li&gt;support for 'spaces' and channels  in spaces → propose parleys.com as a platform  &lt;/li&gt;&lt;li&gt;monetize:     &lt;ul&gt;   &lt;li&gt;subscription for impatient   viewers (i.e. for immediate access to the talks); talks with free   access are provided within a year   &lt;/li&gt;&lt;li&gt;give private spaces to companies   for education purposes  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;still presented in the  over-Flashy way     &lt;/li&gt;&lt;li&gt;I hope they'll get the podcast  feed – finally – fixed.    &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Oracle slot&lt;ul&gt; &lt;li&gt;mostly boring management talk, with lots of empty words &lt;/li&gt;&lt;li&gt;WebLogic DM: &lt;ul&gt;  &lt;li&gt;heavily based on OSGI  &lt;ul&gt;   &lt;li&gt;'Profiles' group technical   bundles   &lt;/li&gt;&lt;li&gt;'Bundles' are the   application-specific modules  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;possibility to run on a  “bare-metal” hypervisor VMWare:  &lt;a href="http://en.wikipedia.org/wiki/Hypervisor"&gt;http://en.wikipedia.org/wiki/Hypervisor&lt;/a&gt;–  new concept to me &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Sun:&lt;ul&gt; &lt;li&gt;JEE6 &lt;ul&gt;  &lt;li&gt;final release scheduled for  10/12/2009  &lt;/li&gt;&lt;li&gt;→ enterprise development made  simpler     &lt;/li&gt;&lt;li&gt;basic contents (a.o.)  &lt;ul&gt;   &lt;li&gt;new stuff:       &lt;ul&gt;    &lt;li&gt;JAX-RS: annotation-based    RESTfull API    &lt;/li&gt;&lt;li&gt;Bean validation, used in the    full stack (JSF and JPA)    &lt;/li&gt;&lt;li&gt;Dependency Injection (DI) 1.0   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;updates:       &lt;ul&gt;    &lt;li&gt;EJB 3.1    &lt;/li&gt;&lt;li&gt;Servlet 3.0    &lt;/li&gt;&lt;li&gt;JSF 2.0    &lt;/li&gt;&lt;li&gt;…   &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;support for technical profiles:  set of basic, but quite complete JEE components.     &lt;ul&gt;   &lt;li&gt;e.g. WebProfile: Servlet 3.0,   JSF, EJB 3.1 lite, DI  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;pluggable, modular web  applications  &lt;ul&gt;   &lt;li&gt;web.xml is now optional   &lt;/li&gt;&lt;li&gt;web-fragment.xml   &lt;/li&gt;&lt;li&gt;annotations:   &lt;ul&gt;    &lt;li&gt;@WebServlet    &lt;/li&gt;&lt;li&gt;@WebFilter   &lt;/li&gt;&lt;/ul&gt;   &lt;/li&gt;&lt;li&gt;resource jars → finally a   standard way to package static resources   &lt;/li&gt;&lt;li&gt;programmable registration API  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;Dependency Injection 1.0:  &lt;ul&gt;   &lt;li&gt;@Resource   &lt;/li&gt;&lt;li&gt;@Inject → Guice-like standard   solution   &lt;/li&gt;&lt;li&gt;Inject metamodel  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;EJB3.1  &lt;ul&gt;   &lt;li&gt;@Singleton   &lt;/li&gt;&lt;li&gt;@Startup       &lt;/li&gt;&lt;li&gt;@Asynchronous   &lt;/li&gt;&lt;li&gt;EJBContainer API, useable in   Java SE (for testing)   &lt;/li&gt;&lt;li&gt;EJB's, directly useable in   webapps  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;JSF 2.0  &lt;ul&gt;   &lt;li&gt;standard facelets   &lt;/li&gt;&lt;li&gt;autodiscovery of component   libraries   &lt;/li&gt;&lt;li&gt;Ajax &amp;amp; partial view loading   &lt;/li&gt;&lt;li&gt;JavaScript API   &lt;/li&gt;&lt;li&gt;composite components  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;Glassfish demo &lt;ul&gt;  &lt;li&gt;Eclipse &amp;amp; NetBeans support&lt;/li&gt;&lt;li&gt;not sure how Oracle will handle the GlassFish versus WebLogic proposal&lt;br /&gt;&lt;/li&gt;&lt;li&gt;great programmers' experience:     &lt;ul&gt;   &lt;li&gt;fast startup   &lt;/li&gt;&lt;li&gt;incremental deploys applied to a   running application without restarting → JRebel-like feature.  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Adobe stuff&lt;ul&gt; &lt;li&gt;skipped this one – too much flash for me :-)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8215671926631835359?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8215671926631835359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8215671926631835359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8215671926631835359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8215671926631835359'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-keynotes-18112009.html' title='Devoxx 2009: Keynotes 18/11/2009: Parleys.com, Oracle, Sun (JEE6) and Adobe'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4983553005349735362</id><published>2009-11-17T17:31:00.011+01:00</published><updated>2009-11-20T17:41:05.468+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='gc'/><title type='text'>Devoxx 2009: A Year of Monitoring with Java-Monitor</title><content type='html'>&lt;span style="font-style: italic;"&gt;17/11/2009, Tools in Action, Kees Jan Koster&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Slides are available at: &lt;a href="http://java-monitor.com/forum/showthread.php?t=646"&gt;http://java-monitor.com/forum/showthread.php?t=646&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Case-by-case approach from experiences reported on java-monitor.com, from an Operations' perspective.&lt;br /&gt;&lt;br /&gt;Memory Leak:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;diagnose:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Scavenger gc gives up and stop the world gc (= mark and sweep gc) takes over&lt;br /&gt;&lt;/li&gt;&lt;li&gt;monitor # scavenger gc's versus mark and sweep gc's&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;solution:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;profile your app and fix your app&lt;/li&gt;&lt;li&gt;workaround: increase heap&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Misbehaving GC&lt;br /&gt;&lt;ul&gt;&lt;li&gt;problem: System.gc()  in code freezes the JVM!&lt;/li&gt;&lt;li&gt;diagnose:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;many stop the world gc's (= mark and sweep gc)&lt;/li&gt;&lt;li&gt;low heap usage (e.g. 20%)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;solution:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;workaround: -XX-DisableExplicitGC&lt;br /&gt;&lt;/li&gt;&lt;li&gt;use findbugs and fix code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Native threads in 32 bit environments&lt;br /&gt;&lt;ul&gt;&lt;li&gt;problem:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;OutOfMemoryException: Couldn't allocate native Thread&lt;/li&gt;&lt;li&gt;32bit Systems share 4GB with OS Kernel, JVM (heap + perm space) and thread stack space.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;solution:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;workaround: -Xss limitThreadStack&lt;br /&gt;&lt;/li&gt;&lt;li&gt;migrate to 64 bit!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;In verboseGC: "promotion failed"&lt;br /&gt;&lt;ul&gt;&lt;li&gt;problem:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;verboseGC logs "promotion failed" --&gt; stop-the-world GC (mark and sweep) is triggered&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CMS is non-compacting: the heap can end up to be fragmented. Fragmentation can prevent promotion of young heap (eden spaces) to old heap.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;solution:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;bigger heap&lt;br /&gt;&lt;/li&gt;&lt;li&gt;no real solution&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; File Descriptors&lt;br /&gt;&lt;ul&gt;&lt;li&gt;problem:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;"too many open files"&lt;/li&gt;&lt;li&gt;files not properly closed on exceptions --&gt; file description leakage&lt;/li&gt;&lt;li&gt;GlassFish opens file-descriptors for each static file served (efficient usage of FileChannels)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;solution:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;check ulimit / limits of your OS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;fix your application (findbugs)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;others&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hyperthreading doesn't make any significant difference&lt;/li&gt;&lt;li&gt;use the magic "-server" switch&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4983553005349735362?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4983553005349735362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4983553005349735362' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4983553005349735362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4983553005349735362'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-year-of-monitoring-with.html' title='Devoxx 2009: A Year of Monitoring with Java-Monitor'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5301343074394337521</id><published>2009-11-17T16:24:00.004+01:00</published><updated>2009-11-17T16:32:30.868+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='full-text search'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx2009'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Devoxx 2009: Full Text Search for Hibernate</title><content type='html'>&lt;span style="font-style: italic;"&gt;17/11/2009, University sessions, Emmanuel Bernard&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Search solutions:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;categorize upfront&lt;br /&gt; &lt;/li&gt;&lt;li&gt;show detailed search screen&lt;br /&gt; &lt;/li&gt;&lt;li&gt;use single search box (preferred)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Plain SQL search limits:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;performance: like '%...%' causes a full table scan&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no support for approximation nor synonyms&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no proximity concept&lt;br /&gt; &lt;/li&gt;&lt;li&gt;lacking relevance scoring&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no simple multi-column search&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Full-text search solutions:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;word based&lt;br /&gt; &lt;/li&gt;&lt;li&gt;captures / indexes frequency and position&lt;br /&gt; &lt;/li&gt;&lt;li&gt;solutions:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;RDMS: (like Oracle Text):&lt;br /&gt;   &lt;ul&gt;&lt;li&gt;less flexible&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;not portable (vendor-specific API and behavior)&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;standalone: Lucene&lt;br /&gt;   &lt;ul&gt;&lt;li&gt;text-only&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;no synchronization with model objects&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Hibernate Search, general features:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;LGPL&lt;br /&gt; &lt;/li&gt;&lt;li&gt;uses Hibernate core&lt;br /&gt; &lt;/li&gt;&lt;li&gt;uses Lucene under the hood&lt;br /&gt; &lt;/li&gt;&lt;li&gt;solves object vs text mismatch&lt;br /&gt; &lt;/li&gt;&lt;li&gt;convert object to text document (+reverse) → Hibernate application uses objects, not text&lt;br /&gt; documents&lt;br /&gt; &lt;/li&gt;&lt;li&gt;convention over configuration&lt;br /&gt; &lt;/li&gt;&lt;li&gt;heavily built on annotations&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Optimize Lucene access:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;update Lucene docs on commit&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;object graphs are consolidated to single Lucene docs to provide relevant searches&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;avoid flooding Lucene indexer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;batch Lucene updates on commit&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;optionally trigger the Lucene indexer asynchronously&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;support clustering (JMS)&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Hibernate Search Annotations:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;@Indexed&lt;br /&gt; &lt;/li&gt;&lt;li&gt;@Field: tunable how to convert to text with, among others, @FieldBridge. E.g. convert number to 0-padded number.&lt;br /&gt; &lt;/li&gt;&lt;li&gt;@IndexedEmbedded&lt;br /&gt; &lt;/li&gt;&lt;li&gt;@Boost: promote a particular field in the relevance score (can be at indexing time or at query time)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;@Analyzer: e.g. anagram-support&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Lucene Index as used by Hibernate Search:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;event based&lt;br /&gt; &lt;/li&gt;&lt;li&gt;batches updates per transaction (=at commit time)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;sync or async mode (optimize Lucenes' locking mechanism)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Query:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;HQL&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Full Text (Lucene syntax) e.g. with the ~ opperator&lt;br /&gt; &lt;/li&gt;&lt;li&gt;JPA2 criteria&lt;br /&gt; &lt;/li&gt;&lt;li&gt;native SQL&lt;br /&gt; &lt;/li&gt;&lt;li&gt;→ always returns Objects, not Lucene documents.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Advanced stuff:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;tokenizer: split text in words, remove common words&lt;br /&gt; &lt;/li&gt;&lt;li&gt;complex searches: combination of indexing and querying&lt;br /&gt; &lt;/li&gt;&lt;li&gt;fuzzy search:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;“Levenstein distance”: quantifies similarity&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;“n-gram”: word is split in groups of 3 letters → matching groups determines score. (demo looked a bit hackery)&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;phonetic search (soundex-like): disappointing in practice&lt;br /&gt; &lt;/li&gt;&lt;li&gt;synonyms: use your application-specific list&lt;br /&gt; &lt;/li&gt;&lt;li&gt;stemming: → 'reduction'&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;Porter Algorithm&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;Snowball stemmer&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;filters: provide efficient an pluggable support for&lt;br /&gt; &lt;ul&gt;&lt;li&gt;security, categories, temporal data, caching...&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;“explain” query result&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;clustering / Scaling Lucene&lt;br /&gt; &lt;ul&gt;&lt;li&gt;one Lucene writer at a given time&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;use a JMS queue for indexing (→ 'Master')→ small delay, but very scalable.&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;Distributed in-memory index (Infinispan 4.0) – technical preview&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;index optimizations:&lt;br /&gt;   &lt;ul&gt;&lt;li&gt;sharding&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;defragmenting or re-indexing&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5301343074394337521?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5301343074394337521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5301343074394337521' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5301343074394337521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5301343074394337521'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-full-text-search-for.html' title='Devoxx 2009: Full Text Search for Hibernate'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8787530601416605638</id><published>2009-11-17T12:49:00.004+01:00</published><updated>2009-11-20T10:46:38.338+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><title type='text'>Devoxx 2009 – Google Application Engine  - A Real Live Voyage to The Cloud</title><content type='html'>&lt;span style="font-style: italic;"&gt;17/11/2009, University Sessions, Sam Brodkin and Scott Stevenson&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Google Application Engine for Java (GAE/J) is a cloud computing solution that provides&lt;br /&gt; &lt;ul&gt;&lt;li&gt;a JVM&lt;br /&gt; &lt;/li&gt;&lt;li&gt;OS support&lt;br /&gt; &lt;/li&gt;&lt;li&gt;access to the Servlet API&lt;br /&gt; &lt;/li&gt;&lt;li&gt;a management console&lt;br /&gt; &lt;/li&gt;&lt;li&gt;access to Google utilities:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;Logon / Sign up → com.google...User&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;image service: resize images&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;mails&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;building blocks:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;DataStore&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;MemCache&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Cost model is based on actual usage, with a free quota for easy starting: &lt;ul&gt;&lt;li&gt;bandwidth usage (in/out)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;cpu usage&lt;br /&gt; &lt;/li&gt;&lt;li&gt;datastore size&lt;br /&gt; &lt;/li&gt;&lt;li&gt;emails sent&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Management console:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;access to logs&lt;br /&gt; &lt;/li&gt;&lt;li&gt;shows bandwidth / cpu usage → cost&lt;br /&gt; &lt;/li&gt;&lt;li&gt;users with admin role&lt;br /&gt; &lt;/li&gt;&lt;li&gt;statistics&lt;br /&gt; &lt;/li&gt;&lt;li&gt;manage multiple versions: one default, and many test versions (beware of data-incompatibilities)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Limits of GAE/J:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;requests timeout: 30sec&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no background processes allowed&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no server push&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no threads&lt;br /&gt; &lt;/li&gt;&lt;li&gt;read-only file-system&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no transaction&lt;br /&gt; &lt;/li&gt;&lt;li&gt;only access to white-listed classes (e.g. ImageIO class of java is not accessible → use Google Image service)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;a maximum of 3000 static resources per application&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Migrating your application off the GAE/J cloud: difficult, but not impossible → google for “GEA Bar”&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;DataStore for data persisency&lt;br /&gt;&lt;ul&gt;&lt;li&gt;not a relational database&lt;br /&gt; &lt;/li&gt;&lt;li&gt;BigTable → like a big HashMap&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no transaction&lt;br /&gt; &lt;/li&gt;&lt;li&gt;JDO or JPA access&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Development Environment:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;eclipse plugin&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Jetty based emulator → fair emulation, but not 100% relevant&lt;br /&gt; &lt;/li&gt;&lt;li&gt;MemCache&lt;br /&gt; &lt;/li&gt;&lt;li&gt;disk-based datastore&lt;br /&gt; &lt;/li&gt;&lt;li&gt;compile-time checks&lt;br /&gt; &lt;/li&gt;&lt;li&gt;no maven support &lt;i&gt;yet&lt;/i&gt;&lt;/li&gt;&lt;li&gt;DIY ant scripts are possible and recommended.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Demo: “swagswap.org”&lt;br /&gt;&lt;ul&gt;&lt;li&gt;3 tiers:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;DAO&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;service layer&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;4 frontends that use the same&lt;br /&gt;  service layer:&lt;br /&gt;   &lt;ul&gt;&lt;li&gt;jsf 2.0 (+IPhone version)&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;gwt 1.7&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;SmartGwt&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;Spring MVC&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;wired through Spring 3.0&lt;br /&gt; &lt;/li&gt;&lt;li&gt;get detailed cost of a request by setting a special HTTP header&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Quirks:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;BLOB type&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Text type for long Strings&lt;br /&gt; &lt;/li&gt;&lt;li&gt;white-listed classes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;→ find workarounds for blocked classes (e.g. Image services)&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;→ some thirdparty libraries don't work&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;JSF2.0:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;disable threading in web.xml&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;no JNDI: hack WebConfiguration class&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;server side state doesn't work → use client side state&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;RichFaces, IceFaces and Commons FileUpload use non-whitelisted classes → incompatible with GAE&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;GWT:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BLOB and Text are non-serializable&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;GWT &lt;&gt; Spring integration requires a special service class&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;SmartGWT:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;requires 1000 static resources → closer to the max of 3000 of GAE → workaround with zip-file and cache, but increases cpu-cost&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8787530601416605638?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8787530601416605638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8787530601416605638' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8787530601416605638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8787530601416605638'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/devoxx-2009-google-application-engine.html' title='Devoxx 2009 – Google Application Engine  - A Real Live Voyage to The Cloud'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-9154886275489180532</id><published>2009-11-11T22:38:00.005+01:00</published><updated>2010-06-06T09:42:28.395+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='9.10'/><category scheme='http://www.blogger.com/atom/ns#' term='md96290'/><category scheme='http://www.blogger.com/atom/ns#' term='sound'/><category scheme='http://www.blogger.com/atom/ns#' term='pulse-audio'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Sound in Ubuntu 9.10 - Intel 82801G</title><content type='html'>The sound on my Medion MD96290 didn't work after upgrading to Ubuntu 9.10 (Karmik Koala). I experience this glitch on every Ubuntu upgrade - see my &lt;a href="http://michael-peeters.blogspot.com/2008/06/sound-in-ubuntu.html"&gt;previous post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My sound chip:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;$ sudo lspci -v&lt;br /&gt;00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)&lt;br /&gt;  Subsystem: Wistron Corp. Device 4071&lt;br /&gt;  Flags: bus master, fast devsel, latency 0, IRQ 21&lt;br /&gt;  Memory at d8440000 (64-bit, non-prefetchable) [size=16K]&lt;br /&gt;  Capabilities: [50] Power Management version 2&lt;br /&gt;  Capabilities: [60] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-&lt;br /&gt;  Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00&lt;br /&gt;  Capabilities: [100] Virtual Channel&lt;br /&gt;  Capabilities: [130] Root Complex Link&lt;br /&gt;  Kernel driver in use: HDA Intel&lt;br /&gt;  Kernel modules: snd-hda-intel&lt;br /&gt;...&lt;br /&gt;&lt;/blockquote&gt;Fixing is easy:&lt;br /&gt;&lt;ul&gt;&lt;li style="font-family: courier new;"&gt;gksudo gedit /etc/modprobe.d/alsa-base&lt;/li&gt;&lt;li&gt;add one line to the end of the file:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;options snd-hda-intel model=6stack-dig&lt;/span&gt;&lt;/li&gt;&lt;li&gt;save and reboot&lt;/li&gt;&lt;li&gt;rightclick on the volume icon and select &lt;span style="font-weight: bold;"&gt;Sound Preferences&lt;/span&gt;&lt;/li&gt;&lt;li&gt;in the hardware tab, select a profile with "Surround" in it.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;update 6/6/2010: this tip also works for ubuntu 10.4.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-9154886275489180532?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/9154886275489180532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=9154886275489180532' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/9154886275489180532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/9154886275489180532'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/sound-in-ubuntu-910.html' title='Sound in Ubuntu 9.10 - Intel 82801G'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8669331581936959411</id><published>2009-11-08T14:42:00.004+01:00</published><updated>2009-11-08T14:54:31.264+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='fullscreen'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Tweaking the Full-screen Mode of Firefox</title><content type='html'>I like to use Firefox in full-screen mode (hotkey: F11) on my netbook. Unfortunately, Firefox hides the tabs and navigation bar and only shows the bar when your mouse pointer is on the top of the screen.&lt;br /&gt;&lt;br /&gt;Luckily, it's easy to modify this default setting:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;enter 'about:config' in the URL-field&lt;/li&gt;&lt;li&gt;confirm that you &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; will be careful&lt;br /&gt;&lt;/li&gt;&lt;li&gt;set the 'browser.fullscreen.autohide' setting to false (double-click on the line)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This gives me a Chrome-like browser experience with Firefox on Ubuntu, while maximally using the small screen size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8669331581936959411?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8669331581936959411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8669331581936959411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8669331581936959411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8669331581936959411'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/11/tweaking-full-screen-mode-of-firefox.html' title='Tweaking the Full-screen Mode of Firefox'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-3518924650589654774</id><published>2009-08-09T21:43:00.005+02:00</published><updated>2009-08-09T22:01:48.490+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkam'/><title type='text'>Getting a Digital Camera working under Linux</title><content type='html'>My daughter bought a simple Toy Digital Camera. Unfortunately, it doesn't register itself as a universal mass storage device to the OS. The '&lt;code&gt;lsusb&lt;/code&gt;' command returns&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;Bus 002 Device 004: ID 2770:905c NHJ, Ltd Che-Ez Snap SNAP-U/Digigr8/Soundstar TDC-35&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;Luckily, retrieving the photos from the camera is very easy. Install the gtkam GUI:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;sudo apt-get install gtkam&lt;/code&gt;&lt;/blockquote&gt;And start the program from Applications / Graphics / Gtkam. In the Camera / Add camera ... menu, you can press "detect" to register your camera. The application is self-explaining for downloading / deleting the photos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?p=2952334#post2952334"&gt;http://ubuntuforums.org/showthread.php?p=2952334#post2952334&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-3518924650589654774?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/3518924650589654774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=3518924650589654774' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/3518924650589654774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/3518924650589654774'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/08/getting-digital-camera-working-under.html' title='Getting a Digital Camera working under Linux'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4958539813297344813</id><published>2009-06-12T00:48:00.008+02:00</published><updated>2009-06-18T07:48:43.090+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sunny beam'/><category scheme='http://www.blogger.com/atom/ns#' term='photovoltaic panels'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='libusb'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Sunny Beam under Ubuntu: SunnyBeamTool  v0.6.0</title><content type='html'>&lt;a href="http://sourceforge.net/projects/sunnybeamtool/"&gt;&lt;span style="font-size:130%;"&gt;http://sourceforge.net/projects/sunnybeamtool/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://michael-peeters.blogspot.com/2009/05/using-sunny-beam-under-linux-first.html"&gt;sbtool Perl script&lt;/a&gt; of Stefan Arts provides a nice basic setup for accessing the &lt;a href="http://www.sma.de/en/products/monitoring-systems/sunny-beam.html"&gt;Sunny Beam &lt;/a&gt;under Linux. But the Perl solution has some drawbacks: it is quite complex to set up and the codebase, with low-level hex-manipulations, is rather complex to extend, at least for an occasional Perl-developer like me...&lt;br /&gt;&lt;br /&gt;With this in mind I translated the sbtool into C language and put it on sourceforge: &lt;blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;a href="http://sourceforge.net/projects/sunnybeamtool/"&gt;http://sourceforge.net/projects/sunnybeamtool/&lt;/a&gt; &lt;/blockquote&gt;The basic functionalities are included, but additional feedback, testing and extensions are welcome. Of course use at your own risk ! :-).&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;$&lt;span style="FONT-WEIGHT: bold"&gt; sudo ./sunnybeamtool&lt;/span&gt;&lt;br /&gt;Dev #6: 1587 - 002D -SMA Technologie AG -&lt;br /&gt;Serial Number: 00024383&lt;br /&gt;pac: 0.00 W&lt;br /&gt;e-today: 12.37 kWh&lt;br /&gt;e-total: 1551.83 kWh&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ &lt;span style="FONT-WEIGHT: bold"&gt;sudo ./sunnybeamtool -l&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dev #6: 1587 - 002D -SMA Technologie AG - &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Serial Number: 00024383&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pac: 0.00 W&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;e-today: 12.37 kWh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;e-total: 1551.83 kWh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;today:&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;2009-06-11 13:00:00: 756 W&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-11 13:10:00: 888 W&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-11 13:20:00: 569 W&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-11 13:30:00: 205 W&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;last month:&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;2009-06-07: 11.790 kWh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-08: 10.060 kWh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-09: 8.480 kWh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2009-06-10: 12.370 kWh&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;This commandline is much easier and cleaner than running the full blown complex Sunny Data Control application under windows.&lt;br /&gt;&lt;br /&gt;If your Sunny Beam doesn't respond to the USB-communication, try this: unplug the USB cable, switch a few times between daily graph and monthly graph, go to the menu and select 'exit', plug the USB cable. This should 'unfreeze' the USB buffer of the Sunny Beam. I &lt;span style="FONT-STYLE: italic"&gt;never&lt;/span&gt; had to remove the batteries from my Sunny Beam device during all my experiments.&lt;br /&gt;&lt;br /&gt;If you're still having trouble, send the output of 'sudo sunnybeamtool -l -v' in your bug-reports on sourceforge.&lt;br /&gt;&lt;br /&gt;Other background info: I kept the &lt;a href="http://libusb.wiki.sourceforge.net/"&gt;libusb&lt;/a&gt; approach, as this allows the application to run in user mode, outside of the kernel. The development is done wih Netbeans 6.5 and Subversion as development platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4958539813297344813?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4958539813297344813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4958539813297344813' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4958539813297344813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4958539813297344813'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/06/sunny-beam-under-ubuntu-sunnybeamtool.html' title='Sunny Beam under Ubuntu: SunnyBeamTool  v0.6.0'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8843156117009254381</id><published>2009-05-28T22:02:00.012+02:00</published><updated>2009-06-13T08:51:28.084+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sunny beam'/><category scheme='http://www.blogger.com/atom/ns#' term='photovoltaic panels'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='libusb'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Using the Sunny Beam under Linux: first steps!</title><content type='html'>update 13/6/2009: check out my new &lt;a href="http://michael-peeters.blogspot.com/2009/06/sunny-beam-under-ubuntu-sunnybeamtool.html"&gt;sunnybeamtool command line&lt;/a&gt; application.&lt;br /&gt;&lt;br /&gt;In an &lt;a href="http://michael-peeters.blogspot.com/2008/12/using-sunny-beam-under-linux-not-ok.html"&gt;earlier post&lt;/a&gt;, I discussed the missing Linux drivers for the &lt;a href="http://www.sma.de/en/products/monitoring-systems/sunny-beam.html"&gt;Sunny Beam&lt;/a&gt; device. In the '&lt;a href="http://michael-peeters.blogspot.com/2008/12/using-sunny-beam-under-linux-not-ok.html#comments"&gt;comments&lt;/a&gt;' section of that post, Stefan Arts dug deeper into the Sunny Beam protocol by 'snooping' the USB-communication with &lt;a href="http://sourceforge.net/projects/usbsnoop/"&gt;SnoopyPro&lt;/a&gt;. His findings were put in a very basic &lt;a href="http://sourceforge.net/projects/sbtool"&gt;perl script on sourceforge&lt;/a&gt;. In order to run it I had to add some packages to my ubuntu 9.04 install:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;sudo perl -MCPAN -e 'install +YAML'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo perl -MCPAN -e 'install Inline::MakeMaker'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo apt-get  install libusb-dev&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo perl -MCPAN -e 'install Device::USB'&lt;br /&gt;sudo perl -MCPAN -e 'install Digest::CRC'&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;running:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;sudo ./sbtool&lt;/span&gt;&lt;/blockquote&gt;&lt;span&gt;Unfortunately&lt;/span&gt;&lt;span&gt;, I didn't get any data back.&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;Update 1/6/2009:&lt;/span&gt;&lt;br /&gt;The messages sent to the Sunny Beam have a device-dependent 'destination' field. Stefan suggested me to replace one line in the sbtool script:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;my $CMD_GET_DATA="\x7e\xff\x03\x40\x41\x00\x00\xd4\xf5\x10\x00\x0b\x0f\x09\x00\x69\xda\x7e";&lt;/blockquote&gt;And, I get a successful response now:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;$ sudo ./sbtool&lt;br /&gt;Sunny Beam, SMA Technologie AG&lt;br /&gt;Serial number: 00024383&lt;br /&gt;&lt;br /&gt;Pac: 270 Watt&lt;br /&gt;E-Today: 16.38 kWh&lt;br /&gt;E-Total: 1427.98 kWh&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;3/6/2009:&lt;/span&gt;&lt;br /&gt;Stefan now added CRC support and 'destination parsing' to his  '0.0.4' version, so his sbtool script should work on any sunny beam device.&lt;br /&gt;&lt;br /&gt;Cool, isn't it? Next steps:add the 'get daily details' and 'get last 31 days' calls to the script.&lt;span style="font-style: italic;"&gt;Update &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On a parallel track, I also noted that Alexander Morozov provided some &lt;a href="http://wiki.winehq.org/USB"&gt;USB-support to wine&lt;/a&gt;.  This could potentially allow a Windows driver to be emulated in Wine. The fix isn't merged into the git source repositories and I couldn't evaluate it with the Sunny Beam USB driver yet.&lt;br /&gt;&lt;br /&gt;Great to see this area moving forward :-).&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;background info:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Details of the SMA protocol: &lt;a href="http://256.com/solar/scripts/smadat-11-ze2203.pdf"&gt;http://256.com/solar/scripts/smadat-11-ze2203.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;recap of stefans' findings:&lt;/li&gt;&lt;ul&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;data sent: 7e ff 03 40 41 00 00 ff 00 10 00 0b 0f 09 00 07 ac 7e&lt;br /&gt;7e = start flag&lt;br /&gt;ff = address byte (broadcast)&lt;br /&gt;03 = a bit coded HDLC control field, 0x03 stands for unnumbered data blocks&lt;br /&gt;40 41 = protocol used (SMA data telegram)&lt;br /&gt;00 00 ff 00 10 00 0b 0f 09 00 = data telegram content:&lt;br /&gt;00 00 = destination address&lt;br /&gt;00 ff = source address&lt;br /&gt;10 = control 'STRINGFILTER'&lt;br /&gt;00 = packet counter&lt;br /&gt;0b = command 'CMD_GET_DATA'&lt;br /&gt;0f 09 00 = content:&lt;br /&gt;09 0f = channel type&lt;br /&gt;00 = channel Idx&lt;br /&gt;ac 0f = frame check sequence, 16 bit check sum&lt;br /&gt;7e = stop flag&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;data received: 7e ff 03 40 41 ff 00 00 00 50 00 0b 0f 09 00 01 00 f1 cb 09 4a 01 00 00 00 00 00 70 42 29 5c d7 40 ae 47 65 41 be d9 7e&lt;br /&gt;7e = start flag&lt;br /&gt;ff = address byte (broadcast)&lt;br /&gt;03 = a bit coded HDLC control field, 0x03 stands for unnumbered data blocks&lt;br /&gt;40 41 = protocol used (SMA data telegram)&lt;br /&gt;ff 00 00 00 50 00 0b 0f 09 00  01 00 f1 cb 09 4a 01 00 00 00 00 00 70 42 29 5c d7 40 ae 47 65 41 = data telegram content&lt;br /&gt;00 ff = destination address&lt;br /&gt;00 00 = source address&lt;br /&gt;50 = control 'ANSWER'&lt;br /&gt;00 = packet counter&lt;br /&gt;0b = command 'CMD_GET_DATA'&lt;br /&gt;0f 09 00 01 00 f1 cb 09 4a 01 00 00 00 00 00 70 42 29 5c d7 40 ae 47 65 41 = content:&lt;br /&gt;09 0f = channel type&lt;br /&gt;00 = channel Idx&lt;br /&gt;00 01 = number of data records: 1&lt;br /&gt;f1 cb 09 4a = time/date in unix format&lt;br /&gt;01 00 00 00 = time basis (1 sec)&lt;br /&gt;00 00 70 42 = Pac (floating point, 60 WATT)&lt;br /&gt;29 5c d7 40 = E-today (floating point, 6.7 kWh)&lt;br /&gt;ae 47 65 41 = E-Total (floating point 14.3 Kwh)&lt;br /&gt;be d9 = frame check sequence, 16 bit check sum&lt;br /&gt;7e = stop flag&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;it sends the data string:&lt;br /&gt;7e ff 03 40 41 00 00 ff 00 10 00 0b 0f 09 00 07 ac 7e 01 00&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;a result was:&lt;br /&gt;01 60 7e ff 03 40 41 ff 00 00 00 50 00 0b 0f 09 00 01&lt;br /&gt;01 60 00&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt; 64 33 0b 4a&lt;/span&gt;&lt;span style="font-size:85%;"&gt; 01 00 00 00 &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;00 00 00 00&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;ec 51 00 &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;01 60 &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;41&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;33 33 b2 41&lt;/span&gt;&lt;span style="font-size:85%;"&gt; 68 5e 7e&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;where&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;64 33 0b 4a = 4a0b3364 HEX = 1242248036 DEC = Wed, 13 May 2009 20:53:56 GMT&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;00 00 00 00 = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ec 51 00 41 = 8.02&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;33 33 b2 41 = 22.4&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8843156117009254381?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8843156117009254381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8843156117009254381' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8843156117009254381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8843156117009254381'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/05/using-sunny-beam-under-linux-first.html' title='Using the Sunny Beam under Linux: first steps!'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4007325523342562813</id><published>2009-02-08T13:46:00.007+01:00</published><updated>2009-02-08T20:45:34.831+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sd card readonly'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fixing a Readonly SD Card Reader in Ubuntu</title><content type='html'>On one of my laptops running Ubuntu I noticed that my SD card was always mounted in readonly mode. My other Linux-powered laptop mounted the same SD card just fine in read/write mode. As a workaround, I could remove photo's directly from the camera or from the other laptop, but I was intriged and decided to delve deeper into this issue.&lt;br /&gt;&lt;br /&gt;A few relevant commands stumbled upon thanks to Google:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$  dmesg | grep -i sdhci&lt;br /&gt;[   15.122623] sdhci: Secure Digital Host Controller Interface driver&lt;br /&gt;[   15.122627] sdhci: Copyright(c) Pierre Ossman&lt;br /&gt;[   15.194747] sdhci-pci 0000:0a:09.1: SDHCI controller found [1180:0822] (rev 19)&lt;br /&gt;[   15.194768] sdhci-pci 0000:0a:09.1: PCI INT B -&gt; GSI 18 (level, low) -&gt; IRQ 18&lt;br /&gt;[   15.197935] mmc0: SDHCI controller on PCI [0000:0a:09.1] using PIO&lt;br /&gt;&lt;br /&gt;$ lsmod | grep -i sdhci&lt;br /&gt;sdhci_pci              15360  0&lt;br /&gt;sdhci                  23940  1 sdhci_pci&lt;br /&gt;mmc_core               58268  2 mmc_block,sdhci&lt;br /&gt;&lt;br /&gt;$ lspci | grep -i ricoh&lt;br /&gt;...&lt;br /&gt;0a:09.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller&lt;br /&gt;0a:09.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 19)&lt;br /&gt;0a:09.2 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev 0a)&lt;br /&gt;0a:09.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 05)&lt;br /&gt;0a:09.4 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev ff)&lt;br /&gt;&lt;br /&gt;$ tail -f /var/log/syslog&lt;br /&gt;...&lt;br /&gt;Feb  8 13:48:51 michael-laptop2 kernel: [ 3910.801967] mmc0: card lacks mandatory switch function, performance might suffer.&lt;br /&gt;Feb  8 13:48:51 michael-laptop2 kernel: [ 3910.802543] mmc0: new SD card at address b368&lt;br /&gt;Feb  8 13:48:51 michael-laptop2 kernel: [ 3910.805647] mmcblk0: mmc0:b368 E0421 501248KiB (&lt;span style="font-weight: bold;"&gt;ro&lt;/span&gt;)&lt;br /&gt;Feb  8 13:48:51 michael-laptop2 kernel: [ 3910.806012]  mmcblk0: p1&lt;br /&gt;Feb  8 13:48:51 michael-laptop2 hald: mounted /dev/mmcblk0p1 on behalf of uid 1000&lt;br /&gt;&lt;br /&gt;$ cat /etc/mtab&lt;br /&gt;/dev/mmcblk0p1 /media/disk vfat &lt;span style="font-weight: bold;"&gt;ro&lt;/span&gt;,nosuid,nodev,uhelper=hal,shortname=mixed,uid=1000,utf8,umask=077,flush 0 0&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;After a long search on google and in my logs, I couldn't find any clue. The SD read-only-switch was correctly turned off ; my tests on the other laptop confirmed this. Finally I rebooted my laptop under Vista and ... the SD was also mounted read-only. Conclusion: it was not an OS / driver problem and the problem was related to that PC. I then simply blow some air with a "dust remover" into the SD slot and the magic happened: the SD card mounted in read write mode... A trivial solution to a seemingly complex problem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hw_h8sa20nM/SY805nzmBNI/AAAAAAAAIJU/p5XD4r6MgAc/s1600-h/TOL-3M-DR.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 100px; height: 130px;" src="http://2.bp.blogspot.com/_hw_h8sa20nM/SY805nzmBNI/AAAAAAAAIJU/p5XD4r6MgAc/s200/TOL-3M-DR.jpg" alt="" id="BLOGGER_PHOTO_ID_5300513450980934866" 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/6922719475190616477-4007325523342562813?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4007325523342562813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4007325523342562813' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4007325523342562813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4007325523342562813'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/02/fixing-readonly-sd-card-reader-in.html' title='Fixing a Readonly SD Card Reader in Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hw_h8sa20nM/SY805nzmBNI/AAAAAAAAIJU/p5XD4r6MgAc/s72-c/TOL-3M-DR.jpg' height='72' width='72'/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6005269278825827771</id><published>2009-01-02T15:07:00.009+01:00</published><updated>2009-01-08T09:24:36.268+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Developing Beyond localhost by Brian Leonard</title><content type='html'>Brian demoed how combining VirtualBox and ZFS can provide a very flexible and dynamic development and testing platform for web-developers. VirtualBox is a simple, free yet powerful virtualization tool. It allows you to setup very easily virtual machines having multiple OS's and configurations. You don't even have boot those virtual machines over and over again: a snapshot can be saved, and restored almost instantly. After setting up several virtual machines, you quickly get a relevant set of client-machines on which you can test your webapp. All virtual machines get a unique ip address, so connecting to the web server from you virtual client is as simple as finding out your local IP serving the web app. Since all vm's are simple files, you can backup the 'clean' vm's and start playing around with them. Restoring a vm is as simple as restoring the original snapshot file. Virtual Systems can run windows outside of the 'vm-box', or on contrary, you can run the Virtual machine full-screen; that way it's easy to forget that you were actually playing in a virtual environment.&lt;br /&gt;&lt;br /&gt;I really do like the Virtual machine principle and Virtual Box is a pretty neat solution -- for free! The issues however start with closed OS's: Windows e.g. requires new license keys and Mac OS doesn't run on Virtual Box.&lt;br /&gt;&lt;br /&gt;The ZFS (file system) is a crown-jewel of Sun. Its feature-set (security, backup ...) really stands out compared to legacy NFS, ext2/3 etc. In ZFS creating a volume is almost as cheap as creating a directory. Brian used this on his OpenSolaris laptop to create a dedicate ZFS volume under his home directory for Virtual Box snapshots. ZFS-volumes can be configured to take regular snapshots, or to take the snapshot on request. After messing around with his Virtual Box snapshots, he simply undoed everything with a single ZFS "restore snapshot" command in only a few seconds. Truly amazing.&lt;br /&gt;&lt;br /&gt;I really think ZFS should be supported in Linux, although the CDDL license is not compatible with GPL v2. There is a zfs-on-Fuse project (=file system in userspace), but it is still in beta fase and performance should be lower than native kernel support. Although the excellent ntfs-support (ntfs-3g) also uses fuse with good performance.&lt;br /&gt;&lt;br /&gt;references:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.devoxx.com/display/JV08/Developing+Beyond+localhost"&gt;http://www.devoxx.com/display/JV08/Developing+Beyond+localhost&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.virtualbox.org/"&gt;http://www.virtualbox.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ZFS"&gt;http://en.wikipedia.org/wiki/ZFS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zfs-on-fuse.blogspot.com/"&gt;http://zfs-on-fuse.blogspot.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6005269278825827771?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6005269278825827771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6005269278825827771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6005269278825827771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6005269278825827771'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-developing-beyond-localhost-by.html' title='Devoxx: Developing Beyond localhost by Brian Leonard'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8540832302123178594</id><published>2009-01-02T14:52:00.005+01:00</published><updated>2009-01-02T15:05:26.376+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: JRuby by Charles Nutter and Thomas Enebo</title><content type='html'>Charles and Thomas did a good job in getting the java-audience in touch with ruby's beauty. The demos looked really slick and development seems very efficient and intuitive. I still have the impression though that ruby works best if you completely adhere and embrace ruby's principles. The trouble starts when you want to take slightly different approaches than the 'sensible defaults'.&lt;br /&gt;&lt;br /&gt;Some (J)Ruby's features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;closures&lt;/li&gt;&lt;li&gt;operator overloading&lt;/li&gt;&lt;li&gt;Ruby Gems is the repository&lt;/li&gt;&lt;li&gt;'module' = mixins of scala&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ruby on Rails web development platform:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;convention over configuration&lt;/li&gt;&lt;li&gt;DRY don't repeat yourself&lt;/li&gt;&lt;li&gt;'agile': hot deploy, generate basic structure&lt;/li&gt;&lt;li&gt;persistence: ActiveRecord (=driven by DB structure)&lt;/li&gt;&lt;li&gt;rhtml + partial rhtml = (sort of similar to)  jsp and jspf&lt;/li&gt;&lt;li&gt;multi-format support: e.g. xml and html based on http accept header&lt;/li&gt;&lt;li&gt;warble: create standard WAR based on bundle&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;examples of sites using JRuby:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kenai.com/"&gt;http://kenai.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://mix.oracle.com/"&gt;https://mix.oracle.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.trisano.org/"&gt;http://www.trisano.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://studios.thoughtworks.com/mingle-agile-project-management"&gt;http://studios.thoughtworks.com/mingle-agile-project-management&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;references:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.devoxx.com/display/JV08/JRuby"&gt;http://www.devoxx.com/display/JV08/JRuby&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jruby.codehaus.org/"&gt;http://jruby.codehaus.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8540832302123178594?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8540832302123178594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8540832302123178594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8540832302123178594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8540832302123178594'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-jruby-by-charles-nutter-and.html' title='Devoxx: JRuby by Charles Nutter and Thomas Enebo'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8914951184664249707</id><published>2009-01-02T14:38:00.004+01:00</published><updated>2009-01-02T14:49:09.314+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Introduction to Asynchronous I/O (NIO.2) using the Grizzly Framework by Jean-Francois Arcand</title><content type='html'>I was hoping to get a general 'New NIO' overview, but Jean-François concentrated most of his talk discussing low-level Asynchronous IO usage patterns in Grizzly using New-NIO:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;waiting for Java 7&lt;/li&gt;&lt;li&gt;'Selector' and Notify principle&lt;/li&gt;&lt;li&gt;'CompletionHandler' that uses a 'Future' to listen to the socket without wasting threads&lt;/li&gt;&lt;li&gt;thread pools: fixed, cached  thread pools built-in to the kernel (but: risk of blocking the kernel!)&lt;/li&gt;&lt;/ul&gt;Other New NIO features in java.nio.file:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;FileSystem&lt;/li&gt;&lt;li&gt;FileRef for having native symbolic links in Java&lt;/li&gt;&lt;li&gt;Path&lt;/li&gt;&lt;li&gt;FileStore&lt;/li&gt;&lt;/ul&gt;references:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.devoxx.com/display/JV08/Introduction+to+NIO.2"&gt;http://www.devoxx.com/display/JV08/Introduction+to+NIO.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://grizzly.dev.java.net/"&gt;https://grizzly.dev.java.net/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8914951184664249707?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8914951184664249707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8914951184664249707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8914951184664249707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8914951184664249707'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-introduction-to-asynchronous-io.html' title='Devoxx: Introduction to Asynchronous I/O (NIO.2) using the Grizzly Framework by Jean-Francois Arcand'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8575995778964913355</id><published>2009-01-02T13:27:00.006+01:00</published><updated>2009-01-02T14:37:26.046+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Towards a dynamic VM by Brian Goetz and Alex Buckley</title><content type='html'>The JVM and the Java Language should be treated as two decoupled things. The JVM provides the basic infrastructure on which the Java Language builds: Garbage collection, reflection, security, Hotspot ... All those things make the JVM appealing to other languages like JRuby, Jython, Groovy and Scala. Choosing for the JVM as a platform has also tradeoffs like for example the fact that the JVM is stack based (vs. the registry based VM in for example the Davlik VM of Android).&lt;br /&gt;&lt;br /&gt;Dynamic language on the JVM problems and solutions (mostly focusing on JRuby). All this is quite low level for me, I just wrote down some keywords I might investigate further some day:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;'Open classes' --&gt; JSR 292 invokedynamic =consider argument types at runtime = invokevirtual optimized&lt;/li&gt;&lt;li&gt;overhead of reflection and BigInteger&lt;/li&gt;&lt;li&gt;'inline caching' trick to cache 'Method Objects'&lt;/li&gt;&lt;li&gt;'invoke interface'&lt;/li&gt;&lt;li&gt;tail calls&lt;/li&gt;&lt;li&gt;continuations&lt;/li&gt;&lt;li&gt;tuples&lt;/li&gt;&lt;li&gt;value objects&lt;/li&gt;&lt;/ul&gt;references:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.devoxx.com/display/JV08/Towards+a+dynamic+VM"&gt;http://www.devoxx.com/display/JV08/Towards+a+dynamic+VM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;concerning register-based vs. stack-based vm's: &lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://doc.cat-v.org/inferno/4th_edition/dis_VM_design"&gt;http://doc.cat-v.org/inferno/4th_edition/dis_VM_design&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sidhe.org/~dan/blog/archives/000189.html"&gt;http://www.sidhe.org/~dan/blog/archives/000189.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dalvik_virtual_machine"&gt;http://en.wikipedia.org/wiki/Dalvik_virtual_machine&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8575995778964913355?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8575995778964913355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8575995778964913355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8575995778964913355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8575995778964913355'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-towards-dynamic-vm-by-brian.html' title='Devoxx: Towards a dynamic VM by Brian Goetz and Alex Buckley'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6014718668081231344</id><published>2009-01-02T11:08:00.013+01:00</published><updated>2009-01-24T22:10:02.194+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='java se 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx Keynote: Java SE 7 Update by Mark Reinhold</title><content type='html'>In the online schedule this item is titled differently: 'The Modular Java Platform'. Anyway, Mark talks about both the Modular stuff and Java SE 7 features.&lt;br /&gt;&lt;br /&gt;Concerning Modularity in Java 7:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java 6 Update 10 couldn't add any features, but managed to speed up download and startup times thanks to, amongst others, the Java Kernel and &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/deployment/deployment-guide/pack200.html"&gt;pack200 compression&lt;/a&gt;. Still startup time can't compare to other more targeted environments like python for example.&lt;/li&gt;&lt;li&gt;(*) JSR 277 is on hold (frozen?). I suppose there was too much resistance from the OSGI camp as being competing technologies. I do think that explicit language-support for modules is needed in Java, but this is JSR-294's sweet spot.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(*) JSR 294 will contain all &lt;span style="font-style: italic;"&gt;language&lt;/span&gt; modularization efforts for Java 7&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(*) The scope of the 'Jigsaw project', which seems to run outside the JPC, wants to differentiate from OSGI by having different more low-level objectives in applying modularization to the JRE:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;allow the java kernel itself to be modular: e.g. distribute targeted Java 'Profiles': Java FX, applets, full SE...&lt;/li&gt;&lt;li&gt;modularizing the kernel might be a solution to all the deprecated APIs in Java that still have to be provided for backwards compatibility. A possibility could be to provide a basic Java profile without the 'old' classes, and allow a simple module to extend the Java Runtime in order to add the deprecated stuff when needed.&lt;/li&gt;&lt;li&gt;integrate with OS package systems: cfr. JPackage project creates rpm's from jars. --&gt; how to package / deploy reusable modules / JVMs?&lt;/li&gt;&lt;li&gt;what about version collisions?&lt;/li&gt;&lt;li&gt;integrate with the VM, language and native packaging&lt;/li&gt;&lt;li&gt;allow multi-module packages&lt;/li&gt;&lt;li&gt;support "friend" packages (for tighter integration)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;Java SE 7 update:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;JSR 292: better JVM support of dynamic language (JRuby, Jython ...)&lt;/li&gt;&lt;li&gt;JSR 203: New NIO: FileSystem, access to symbolic links ... &lt;/li&gt;&lt;li&gt;small language changes, too be discussed / decided --&gt; Joe Darcy&lt;/li&gt;&lt;ul&gt;&lt;li&gt;safe rethrow &lt;/li&gt;&lt;li&gt;null dereference: shorthand to do chained tests on null in one line:&lt;br /&gt;&lt;code&gt;a?.b()?.c()?.d()&lt;/code&gt;&lt;/li&gt;&lt;li&gt;type inference&lt;/li&gt;&lt;li&gt;multicatch&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;others:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;JSR 296: Swing application framework&lt;/li&gt;&lt;li&gt;upgrade Java 6 Update 10 to Java 7&lt;/li&gt;&lt;li&gt;update supported protocols&lt;/li&gt;&lt;li&gt;enhance classloaders &lt;/li&gt;&lt;li&gt;Unicode 5.0 support&lt;/li&gt;&lt;li&gt;improve HotSpot performance&lt;/li&gt;&lt;li&gt;new G1 garbage collector&lt;/li&gt;&lt;li&gt;compressed 64 bit pointers (use less memory)&lt;/li&gt;&lt;li&gt;support "Multiple VM's" (MVM) --&gt; run light, isolated apps like Java FX applets&lt;/li&gt;&lt;li&gt;JSR 308: standard annotations eg. @NonNull used for static analysis&lt;/li&gt;&lt;li&gt;concurrency update: collections, fork/join ...&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;What will &lt;em&gt;not&lt;/em&gt; be included in Java 7:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Closures: prototypes exist, but too early to dump in java&lt;/li&gt;&lt;li&gt;properties&lt;/li&gt;&lt;li&gt;beans binding: need more time to see if this dependency injection framework fits well in core java&lt;/li&gt;&lt;li&gt;operator overloading&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;references:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.sun.com/theplanetarium/entry/project_jigsaw_modularizing_jdk_7"&gt;http://blogs.sun.com/theplanetarium/entry/project_jigsaw_modularizing_jdk_7&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.sun.com/mr/entry/jigsaw"&gt;http://blogs.sun.com/mr/entry/jigsaw&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://neilbartlett.name/blog/2008/12/08/hope-fear-and-project-jigsaw/"&gt;http://neilbartlett.name/blog/2008/12/08/hope-fear-and-project-jigsaw/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.sun.com/darcy/entry/small_language_changes_jdk_7"&gt;http://blogs.sun.com/darcy/entry/small_language_changes_jdk_7&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Parleys.com now published Mark's talk:&lt;br /&gt;&lt;object width="474" height="443"&gt;&lt;param name="movie" value="http://www.parleys.com/download/attachments/5443/parleysshare.swf?pageId=23691298"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="pageId" value="23691298"&gt;&lt;/param&gt;&lt;embed src="http://www.parleys.com/download/attachments/5443/parleysshare.swf?pageId=23691298" type="application/x-shockwave-flash" allowfullscreen="true" width="474" height="443"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;(*) modified thanks to comments / further reading...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6014718668081231344?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6014718668081231344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6014718668081231344' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6014718668081231344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6014718668081231344'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-keynote-java-se-7-update-by-mark.html' title='Devoxx Keynote: Java SE 7 Update by Mark Reinhold'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2668645015807035636</id><published>2009-01-02T10:59:00.003+01:00</published><updated>2009-01-02T11:48:13.264+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Caching web contents in the browser by Ignacio Coloma</title><content type='html'>Always nice to refresh basic web skills like caching:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;last-modified http header&lt;/li&gt;&lt;li&gt;e-tag header&lt;/li&gt;&lt;li&gt;cache-control header of http1.1&lt;/li&gt;&lt;li&gt;http 304 'not modified' indicator&lt;/li&gt;&lt;li&gt;refresh vs shift-refresh --&gt; the latter ignores the cache&lt;/li&gt;&lt;/ul&gt;Reference:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.devoxx.com/display/JV08/Caching+web+contents+in+the+browser"&gt;http://www.devoxx.com/display/JV08/Caching+web+contents+in+the+browser&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2668645015807035636?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2668645015807035636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2668645015807035636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2668645015807035636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2668645015807035636'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-caching-web-contents-in-browser.html' title='Devoxx: Caching web contents in the browser by Ignacio Coloma'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8834447477593350368</id><published>2009-01-02T10:04:00.006+01:00</published><updated>2009-01-02T10:44:15.766+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: From Concurrent to Parallel by Brian Goetz</title><content type='html'>The trend of getting faster processors every year just stopped a few years ago. Modern CPUs now get more cores, but each single core is actually slower than its single-core ancestor. Buying new hardware won't automatically make your software run faster anymore, unless your software is built for parallel processing. The more cores are added to the cpu, the more important it becomes to find fine-grained parallelism in your apps, in other words, to split coarse-grained request into smaller chunks.&lt;br /&gt;&lt;br /&gt;Java 5 brought the basic concurrency support beyond Threads into Java: Futures + Executors. Those are very powerful concepts, but the resulting code is complex to maintain. Java 7 builds on the existing java.util.concurrent foundation by providing the 'fork-join' framework to Java (&lt;a href="http://jcp.org/en/jsr/detail?id=166"&gt;JSR166&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The concept behind the fork-join framework is "divide and conquer": a job is recursively split in halves, until a manageable size for the sub-jobs is found. The correct size for the chunks is typically determined by the number of cores (=Runtime.availableProcessors()). Another key concept is "work stealing": if one thread finishes its job early, it 'steals' work from other 'double-ended queues' (Deque) of other threads. That way all cores can remain busy while limitting congestion for the queue.&lt;br /&gt;&lt;br /&gt;Java 7 java.util.concurrent.forkjoin:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;basic fork join classes: RecursiveAction, AsyncAction, CyclicAction ...&lt;/li&gt;&lt;li&gt;higher abstraction: ParallelArray offers parallel functions out of the box: filter, map, replace, aggregate ... I like the declarative style use for this class: it chains declarations before firing the action: students.withFilter(isSenior).withMapping(selectGpa).summary();&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Definitively an interesting step for Java, although once you enter a multi-threaded environment, you loose many safety guarantees from Java and &lt;em&gt;you as a developer&lt;/em&gt; has to ensure that concurrency doesn't break your app.  The growing number of cores puts parallel programming research in the spotlight, with the renewed interest in functional languages like &lt;a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)"&gt;haskell&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)"&gt;erlang &lt;/a&gt;and &lt;a href="http://en.wikipedia.org/wiki/Scala_(programming_language)"&gt;Scala&lt;/a&gt; for example.&lt;/p&gt;References:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;(very small) intro &lt;a href="http://www.devoxx.com/display/JV08/From+Concurrent+to+Parallel"&gt;http://www.devoxx.com/display/JV08/From+Concurrent+to+Parallel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;jsr-166: &lt;a href="http://www.infoq.com/news/2008/03/fork_join"&gt;http://www.infoq.com/news/2008/03/fork_join&lt;/a&gt;&lt;/li&gt;&lt;li&gt;research paper: &lt;a href="http://gee.cs.oswego.edu/dl/papers/fj.pdf"&gt;http://gee.cs.oswego.edu/dl/papers/fj.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;IBM: &lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp11137.html"&gt;http://www.ibm.com/developerworks/java/library/j-jtp11137.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;IBM: &lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp03048.html"&gt;http://www.ibm.com/developerworks/java/library/j-jtp03048.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8834447477593350368?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8834447477593350368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8834447477593350368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8834447477593350368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8834447477593350368'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-from-concurrent-to-parallel-by.html' title='Devoxx: From Concurrent to Parallel by Brian Goetz'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2797662399097570385</id><published>2009-01-02T09:31:00.005+01:00</published><updated>2009-01-02T10:05:19.835+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='RFID'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx Keynote: RFID and IBM</title><content type='html'>Devoxx experimented for the first time with RFID tags to monitor talk attendance. In fact, every Devoxx access-badge was an RFID tag and each room had an RFID reader on its entrance that monitored each individual RFID passing through.&lt;br /&gt;&lt;br /&gt;IBM presented their backend processing infrastructure to capture, process and present the RFID information at Devoxx. Looked really very complex -- not sure if such a complex setup was needed or if it was just a way to demo their Tivoli monitoring infrastructure.&lt;br /&gt;&lt;br /&gt;I was more interested by the RFID-technology itself:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the used RFID readers had a 5 meter detection range, but they stilled missed about 20% of all tags. &lt;/li&gt;&lt;li&gt;depending on the frequency used, some RFID tags can be 'shielded' from the readers by water. This can explain the 20% error range because a human body mostly consists of water. &lt;/li&gt;&lt;li&gt;the RFID readers can't tell if you're entering or leaving a room. This is deduced by the backend system by correlating the different individual tag-readings. E.g. if a tag is detected in room A and then in room B after 30 minutes, it supposes that you were out for those 30 minutes&lt;/li&gt;&lt;li&gt;RFID tags exist in several types, each with its own usage patterns and pros and cons: &lt;/li&gt;&lt;ul&gt;&lt;li&gt;'active': the tag has its own battery and radio&lt;/li&gt;&lt;li&gt;'active backscatter': the tag has a battery embedded&lt;/li&gt;&lt;li&gt;'passive': no battery nor radio&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;RFID tags come also in different form factors:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;single use: as 'printed' labels. This was used for the Devoxx badge&lt;/li&gt;&lt;li&gt;rugged reusable tags. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;the RFID readers are actually quite advanced systems that contain a built-in JVM. This provides opportunity to do some basic processing when retrieving the scanned data.&lt;/li&gt;&lt;li&gt;the classical questions on privacy / security / health remain. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It was an interesting experience to get 'live' in touch with the RFID technology, its pros&amp;amp;cons and its technical and ethical issues.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2797662399097570385?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2797662399097570385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2797662399097570385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2797662399097570385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2797662399097570385'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-keynote-rfid-and-ibm.html' title='Devoxx Keynote: RFID and IBM'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2916118891347996573</id><published>2009-01-02T08:45:00.010+01:00</published><updated>2009-01-02T09:27:10.119+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><category scheme='http://www.blogger.com/atom/ns#' term='java fx'/><title type='text'>Devoxx Keynote: JavaFX - The Platform for Rich Internet Applications by Danny Coward</title><content type='html'>Java FX version 1 is out now and looks promising. Although it hits version 1 I don't think it is really ready for prime time:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;no Linux (or OpenSolaris ;-) support &lt;em&gt;yet&lt;/em&gt;. Really a missed opportunity to get 'Java' in a more positive spotlight in the Linux users' mindset. &lt;/li&gt;&lt;li&gt;native Mac and Windows video formats are supported, but to get real cross-platform media, FXM must be used (&lt;a href="http://java.sun.com/javafx/faqs.jsp#19"&gt;http://java.sun.com/javafx/faqs.jsp#19&lt;/a&gt;). Supporting native video formats but claiming full cross-platform support seems contradictive to me. &lt;/li&gt;&lt;li&gt;I could still see some small glitches like small GC-pauses and startup-waits. Not sure if those are relevant or just demo-quirks.&lt;/li&gt;&lt;li&gt;the promise of 'multiple devices, one language' is still very vague to me. I have no clue how full screen apps can run great on small phones without any change.&lt;/li&gt;&lt;li&gt;licensing is still blurred. Although Sun is committed to opensource the Java FX core (&lt;a href="http://openjfx.org/"&gt;http://openjfx.org&lt;/a&gt;). Real open source of Java FX would be a big plus compared to Flash, especially for the Linux distro's, but I doubt Sun will be able to remove all encumbered stuff like the multimedia codec's.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I'm not really a "shiny flashy apps" developer, but once Linux support is there I might delve deeper into Java FX. &lt;/p&gt;&lt;p&gt;References:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;intro: &lt;a href="http://www.devoxx.com/display/JV08/JavaFX+The+Platform+for+Rich+Internet+Applications"&gt;http://www.devoxx.com/display/JV08/JavaFX+The+Platform+for+Rich+Internet+Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;slides: &lt;a href="http://www.devoxx.com/download/attachments/1705921/D8_C_10_08_key_01.pdf"&gt;http://www.devoxx.com/download/attachments/1705921/D8_C_10_08_key_01.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2916118891347996573?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2916118891347996573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2916118891347996573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2916118891347996573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2916118891347996573'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2009/01/devoxx-keynote-javafx-platform-for-rich.html' title='Devoxx Keynote: JavaFX - The Platform for Rich Internet Applications by Danny Coward'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6365326186462396247</id><published>2008-12-31T15:21:00.006+01:00</published><updated>2008-12-31T15:47:47.903+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Profiler, the better debugger? (Heiko W. Rupp)</title><content type='html'>Understanding existing 'legacy' java applications is not always simple. Especially if the original developers left the company and you have to fix a bug or apply some enhancements. Dependency injection frameworks (Spring) and other very dynamic factors like Hibernate make it very difficult to quickly grasp the structure of an application and understand where the 'core business' resides. Traditional tools like a debugger do help, but their view is often too fine-grained or they cause timeouts, breaking the normal program flow.&lt;br /&gt;&lt;br /&gt;A better alternative to understand an opaque java application might be to use a profiler. JProfiler is my favorite, other choices are JProbe or the embedded profiler of NetBeans. When running your application against a profiler, you don't hit timeouts and you quickly get a very useful and in-depth view of the application: cpu an heap usage statistics with detailed call tree graphs immediately point you to the relevant 'hot' parts of the application.&lt;br /&gt;&lt;br /&gt;Conclusion: profilers can be a welcome addition to debuggers and other analysis tools when inheriting a complex codebase. This is the first time that I look at profilers this way, and I must admit, having done many JProfiling sessions that you quickly get an indepth view in the most obscure (generated) code with these tools.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;intro: &lt;a href="http://www.devoxx.com/pages/viewpage.action?pageId=1377607"&gt;http://www.devoxx.com/pages/viewpage.action?pageId=1377607&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6365326186462396247?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6365326186462396247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6365326186462396247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6365326186462396247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6365326186462396247'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/devoxx-profiler-better-debugger-heiko-w.html' title='Devoxx: Profiler, the better debugger? (Heiko W. Rupp)'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8030470480524592992</id><published>2008-12-31T15:11:00.006+01:00</published><updated>2008-12-31T15:20:57.857+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Creating performance test data with the benerator (Volker Bergmann)</title><content type='html'>The Benerator tool focuses on a single problem: generating testdata. Although a simple problem to start, getting good testdata is tough:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;testing extremes&lt;/li&gt;&lt;li&gt;using anonimized production-data&lt;/li&gt;&lt;li&gt;applying complex validations on inputdata (e.g. realistic names, gender, birth date, addresses,...)&lt;/li&gt;&lt;/ul&gt;Benerator has following advantages:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;multiple input/output formats supported: xml, csv, database&lt;/li&gt;&lt;li&gt;highly customizable&lt;/li&gt;&lt;li&gt;free (GPL)&lt;/li&gt;&lt;/ul&gt;I've never used such testdata generation tools, but this is definitely tool I might look at in future testing work...&lt;br /&gt;&lt;br /&gt;Resources:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;intro: &lt;a href="http://www.devoxx.com/display/JV08/Creating+performance+test+data+with+the+benerator"&gt;http://www.devoxx.com/display/JV08/Creating+performance+test+data+with+the+benerator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;slides: &lt;a href="http://www.devoxx.com/download/attachments/1705916/D8_T_09_06_01.pdf"&gt;http://www.devoxx.com/download/attachments/1705916/D8_T_09_06_01.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8030470480524592992?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8030470480524592992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8030470480524592992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8030470480524592992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8030470480524592992'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/devoxx-creating-performance-test-data.html' title='Devoxx: Creating performance test data with the benerator (Volker Bergmann)'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2961817389886059644</id><published>2008-12-31T14:55:00.003+01:00</published><updated>2008-12-31T15:08:33.495+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: GlassFish in Action: forget the app server for a minute!</title><content type='html'>&lt;em&gt;Speakers: Linda Schneider, Jean-Francois Arcand, Paul Sandoz, Alexis Moussine-Pouchkine and Bogdan Stefanescu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This presentation showed an overview of the Glassfish V3 'prelude' features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;core: Apache Felix (OSGi)&lt;/li&gt;&lt;li&gt;hot deploy&lt;/li&gt;&lt;li&gt;embedded API starts &lt;1&gt;&lt;li&gt;WebSynergy: Portal/portlet technology&lt;/li&gt;&lt;li&gt;Grizzly: Async IO (with 'NIO') as an efficient http frontend to glassfish (+AJAX and Comet support)&lt;/li&gt;&lt;li&gt;Metro 1.4 (WebServices)&lt;/li&gt;&lt;li&gt;Jersey: JAX-RS REST support&lt;/li&gt;&lt;li&gt;OpenMQ: JMS provider&lt;/li&gt;&lt;li&gt;Open ESB&lt;/li&gt;&lt;/ul&gt;Resources:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;intro: &lt;a href="http://www.devoxx.com/display/JV08/GlassFish+in+action+-+Forget+the+app+server+for+a+minute%21"&gt;http://www.devoxx.com/display/JV08/GlassFish+in+action+-+Forget+the+app+server+for+a+minute%21&lt;/a&gt;&lt;/li&gt;&lt;li&gt;slides: &lt;a href="http://www.devoxx.com/download/attachments/1705916/D8_U_09_06_02.pdf"&gt;http://www.devoxx.com/download/attachments/1705916/D8_U_09_06_02.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2961817389886059644?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2961817389886059644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2961817389886059644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2961817389886059644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2961817389886059644'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/devoxx-glassfish-in-action-forget-app.html' title='Devoxx: GlassFish in Action: forget the app server for a minute!'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1610440861847836508</id><published>2008-12-31T14:00:00.007+01:00</published><updated>2008-12-31T14:59:40.195+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx'/><category scheme='http://www.blogger.com/atom/ns#' term='Devoxx08'/><title type='text'>Devoxx: Java Performance (Kirk Pepperdine and Holly Cummins)</title><content type='html'>In this University session of Devoxx, Kirk Pepperdine and Holly Cummins detailed java performance issues and optimizations. Kirk concentrated on the Sun JVM while Holly detailed the IBM JVM.&lt;br /&gt;&lt;br /&gt;Tuning Java applications for performance covers the following areas:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;technology: specific JVM details, garbage collector ... &lt;/li&gt;&lt;li&gt;tooling: visualvm, vmstart, verbose gc ... &lt;/li&gt;&lt;li&gt;methodology: identify goals, measure production data, benchmark ... &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Java applications run on a dynamic environment. This is a huge advantage as the HotSpot compiler can adapt and optimize the runtime according to production-time measurements, usage scenarios and available hardware. Static languages like C and C++ don’t have that possibility and can only be optimized at compile time. With this dynamicity in mind, one investigating Java Performance must investigate the complete ‘box’, which consists of these layers: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Actors: batch jobs, users, peak usage … &lt;/li&gt;&lt;li&gt;Application: locks (locks are not always bad: they can preserve CPU), static code, libraries … &lt;/li&gt;&lt;li&gt;JVM / OS: Sun JVM vs IBM, thread implementation … &lt;/li&gt;&lt;li&gt;Hardware: memory, cpu, optimized instruction sets … &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;--&gt; look for the dominant element of performance issues (=break down).&lt;br /&gt;&lt;br /&gt;Some tools to investigate performance: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;OS: vmstat, mpstat, corestat … &lt;/li&gt;&lt;li&gt;JVM: -verbosegc (even on production), gchisto, hpjmeter &lt;/li&gt;&lt;li&gt;specific IBM “monitoring and diagnostic” tools (beta) &lt;/li&gt;&lt;li&gt;java –xtrace: … for simple ‘entering/leaving method’ style logging, built in the jvm &lt;/li&gt;&lt;li&gt;profilers (JProfiler is my favorite)&lt;/li&gt;&lt;li&gt;visualvm &lt;/li&gt;&lt;li&gt;loadtesting tools: JMeter and Grinder (read on) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Although standard Garbage Collectors run well out of the box, they often require optimizations and tuning once ‘real life’ applications run. When using “Generational collectors”, tuning is typically done with visualvm by modifying the eden, generational and old heap spaces at the JVM command line.&lt;br /&gt;&lt;br /&gt;Load-testing Java applications: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;&gt; stress test: load tests an application using production-like load, while a stress test investigates the breaking point of an application. &lt;/li&gt;&lt;li&gt;have a production-like setup &lt;/li&gt;&lt;li&gt;gather relevant expected load figures &lt;/li&gt;&lt;li&gt;avoid caches &lt;/li&gt;&lt;li&gt;avoid ‘noise’ like irrelevant network overhead &lt;/li&gt;&lt;li&gt;use mocks for external systems &lt;/li&gt;&lt;li&gt;tools: e.g. JMeter &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;resources:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;intro: &lt;a href="http://www.devoxx.com/display/JV08/Java+Performance"&gt;http://www.devoxx.com/display/JV08/Java+Performance&lt;/a&gt;&lt;/li&gt;&lt;li&gt;slides: &lt;a href="http://www.devoxx.com/download/attachments/1705916/D8_U_09_08_01.pdf"&gt;http://www.devoxx.com/download/attachments/1705916/D8_U_09_08_01.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1610440861847836508?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1610440861847836508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1610440861847836508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1610440861847836508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1610440861847836508'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/devoxx-java-performance-kirk-pepperdine.html' title='Devoxx: Java Performance (Kirk Pepperdine and Holly Cummins)'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5306781861227601021</id><published>2008-12-19T20:15:00.005+01:00</published><updated>2008-12-20T09:21:06.861+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rtl8187b'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Getting the Realtek RTL8187b WiFi stable under Ubuntu</title><content type='html'>The latest Ubuntu 8.10 with its Linux 2.6.27 kernel supports the Realtek Rtl8187b wifi chipset (USB) natively. In prior versions of Ubuntu, I had to use &lt;a href="https://help.ubuntu.com/community/WifiDocs/Driver/Ndiswrapper"&gt;ndiswrapper&lt;/a&gt; to get the integrated WiFi going on my Medion MD96290 laptop. This is not needed anymore, so I removed the ndiswrapper call from &lt;code&gt;/etc/modules&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately, the native rtl8187 module proves very unstable with the Rtl8187B: although the connection appears fine in the menu bar, the wifi interrupts its connection or is suddenly very slow.&lt;br /&gt;&lt;br /&gt;After some investigation I found a workaround: &lt;a href="http://ubuntuforums.org/showthread.php?t=792092"&gt;http://ubuntuforums.org/showthread.php?t=792092&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;gksudo gedit /etc/rc.local&lt;/code&gt;&lt;/li&gt;&lt;li&gt;add at the end, &lt;span style="font-style: italic;"&gt;before&lt;/span&gt; the &lt;code&gt;exit 0&lt;/code&gt; command:&lt;br /&gt;&lt;code&gt;iwconfig wlan0 rate 5.5M&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Nice to have my wifi up again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5306781861227601021?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5306781861227601021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5306781861227601021' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5306781861227601021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5306781861227601021'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/getting-realtek-rtl8187b-wifi-stable.html' title='Getting the Realtek RTL8187b WiFi stable under Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4866701258047585533</id><published>2008-12-14T20:39:00.005+01:00</published><updated>2009-06-13T08:54:00.624+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sunny beam'/><category scheme='http://www.blogger.com/atom/ns#' term='photovoltaic panels'/><category scheme='http://www.blogger.com/atom/ns#' term='google docs'/><title type='text'>Monitoring the Energy-production of my Solar Panels</title><content type='html'>update 13/6/2009: check out my new &lt;a href="http://michael-peeters.blogspot.com/2009/06/sunny-beam-under-ubuntu-sunnybeamtool.html"&gt;sunnybeamtool command line&lt;/a&gt; application.&lt;br /&gt;&lt;br /&gt;I just retrieved and processed the energy-production details of my photovoltaic panels using &lt;a href="http://michael-peeters.blogspot.com/2008/12/using-sunny-beam-under-linux-not-ok.html"&gt;the SunnyBeam under Windows&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://spreadsheets.google.com/pub?key=p-RDeXNnjn76VJ3dGhgceGA&amp;amp;oid=2&amp;amp;output=image"&gt;&lt;img style="margin: 0px auto 10px; display: block; width: 599px; cursor: pointer; height: 477px; text-align: center;" alt="" src="http://spreadsheets.google.com/pub?key=p-RDeXNnjn76VJ3dGhgceGA&amp;amp;oid=2&amp;amp;output=image" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Google docs offers a great way to &lt;a href="http://spreadsheets.google.com/pub?key=p-RDeXNnjn76VJ3dGhgceGA&amp;amp;gid=1"&gt;share charts and detailed data&lt;/a&gt;; even the &lt;a href="feed://http//spreadsheets.google.com/feeds/list/p-RDeXNnjn76VJ3dGhgceGA/od7/public/basic"&gt;atom feed&lt;/a&gt; is not missing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4866701258047585533?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4866701258047585533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4866701258047585533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4866701258047585533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4866701258047585533'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/monitoring-energy-production-of-my.html' title='Monitoring the Energy-production of my Solar Panels'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7598284323134872610</id><published>2008-12-05T17:01:00.013+01:00</published><updated>2009-06-13T08:54:31.032+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sunny beam'/><category scheme='http://www.blogger.com/atom/ns#' term='photovoltaic panels'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Using the Sunny Beam under Linux: Not OK - yet?</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hw_h8sa20nM/STmYp3IJgoI/AAAAAAAAIIQ/pLpLeVUh4-U/s1600-h/sunnybeam.jpeg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 135px; height: 101px;" src="http://4.bp.blogspot.com/_hw_h8sa20nM/STmYp3IJgoI/AAAAAAAAIIQ/pLpLeVUh4-U/s320/sunnybeam.jpeg" alt="" id="BLOGGER_PHOTO_ID_5276416283381432962" border="0" /&gt;&lt;/a&gt;update 13/6/2009: check out my new &lt;a href="http://michael-peeters.blogspot.com/2009/06/sunny-beam-under-ubuntu-sunnybeamtool.html"&gt;sunnybeamtool command line&lt;/a&gt; application.&lt;br /&gt;&lt;br /&gt;As mentioned in my &lt;a href="http://michael-peeters.blogspot.com/2008/12/photovoltaic-panels-on-my-roof.html"&gt;previous post&lt;/a&gt;, I have a "&lt;a href="http://www.sma.de/en/products/monitoring-systems/sunny-beam.html"&gt;Sunny Beam&lt;/a&gt;" appliance that monitors the electricity production of my solar panels. The &lt;span style="font-style: italic;"&gt;Beam&lt;/span&gt; maintains a wireless connection with the inverter to capture the power data. The clean LCD display offers a nice graph and the module recharges its batteries with solar cells. In addition, the Sunny Beam has a USB connection to send the data to a PC. Unfortunately, the Sunny Beam uses no standard 'USB mass storage' interface, but requires a Windows-only USB-driver. &lt;a href="http://www.sma.de/"&gt;SMA.de&lt;/a&gt; responded to my mail stating that "&lt;span style="font-style: italic;"&gt;The Sunny Beam can only work on windows operating systems. Windows 2000, XP (32 and 64) and Vista (32)&lt;/span&gt;". It is sad to see that succesful companies ignore the fact that other operating systems like MacOS and Linux are becoming increasingly popular. I'm  not a Mac-fanboy, but MacOS has around 9% market share according to &lt;a href="http://marketshare.hitslink.com/report.aspx?qprid=8"&gt;this site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once the USB driver is setup under Windows, you must use the complex Sunny Data Control application to gather the data. It is not a simple program to use, especially for small scaled solar systems. You really need to dive into the manual to get started. SMA informed me that a new, simpler application will be released in the beginning of 2009. According to the &lt;a href="http://www.sma-america.com/en_US/products/monitoring-systems/sunny-beam.html"&gt;sma-america.com&lt;/a&gt; site, this new program will probably be called 'Sunny Beam WebConnect'.&lt;br /&gt;&lt;br /&gt;I tried to install the Sunny Data Control under the latest version of &lt;a href="http://www.winehq.org/"&gt;Wine HQ&lt;/a&gt;. By default Ubuntu provides an outdated version of Wine, but &lt;a href="http://www.winehq.org/site/download"&gt;upgrading&lt;/a&gt; is well documented on the Wine site. The application installs seamingly and starts fine; I even managed to register the USB driver with the following command:&lt;br /&gt;&lt;ul&gt;&lt;code&gt;wine rundll32 setupapi.dll,&lt;wbr&gt;InstallHinfSection DefaultInstall 128 Desktop/sbeamdriver/SBeamUSB.inf&lt;/code&gt;&lt;/ul&gt;Unfortunatly, I found out that &lt;a href="http://www.winehq.org/pipermail/wine-devel/2007-May/056541.html"&gt;USB kernel drivers are not supported&lt;/a&gt; in Wine. Dead end street...&lt;br /&gt;&lt;br /&gt;Next, I found out that SMA provides a C library, &lt;a href="http://www.sma.de/en/products/software/yasdi.html"&gt;YASDI&lt;/a&gt; -- 'Yet Another SMA Device Interface' --  for generic low-level access to their inverter interfaces. The Yasdi-API has everything to convince me: it's LGPL, linux is supported out-of-the box, Java JNI wrappers exist and it has a nice layered architecture where the technical drivers are decoupled from higher layers like the protocol-handling. Unfortunatly, Yasdi has no USB driver. I contacted the &lt;a href="http://www.heiko-pruessing.de/"&gt;author of Yasdi&lt;/a&gt;, to check if the Sunny Beam fits in the standard Yasdi-API framework concept, so it would be easy to add the USB driver to it. Bad luck, Heiko informed me that the protocol used in SunnyBeam is a little bit different from other -- I suppose older -- devices. In order to add the SunnyBeam module to Yasdi, the protocol-layers will have to be adapted. I suppose the YASDI support and development is frozen at SMA.&lt;br /&gt;&lt;br /&gt;The suggestion I got from Heiko is to use VMware or VirtualBox to run a Windows-system. Since my system is dual-boot (Windows is the last -- painful --  option) this doesn't add much value to the setup. Other suggestions are welkom.&lt;br /&gt;&lt;br /&gt;The device presents itself to Ubuntu as follows:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;$ lsusb -v&lt;br /&gt;Bus 001 Device 002: ID 1587:002d SMA Technologie AG&lt;br /&gt;Device Descriptor:&lt;br /&gt;bLength                18&lt;br /&gt;bDescriptorType         1&lt;br /&gt;bcdUSB               1.10&lt;br /&gt;bDeviceClass            0 (Defined at Interface level)&lt;br /&gt;bDeviceSubClass         0&lt;br /&gt;bDeviceProtocol         0&lt;br /&gt;bMaxPacketSize0         8&lt;br /&gt;idVendor           0x1587 SMA Technologie AG&lt;br /&gt;idProduct          0x002d&lt;br /&gt;bcdDevice            2.00&lt;br /&gt;iManufacturer           1 SMA Technologie AG&lt;br /&gt;iProduct                2 Sunny Beam&lt;br /&gt;iSerial                 3 00024383&lt;br /&gt;bNumConfigurations      1&lt;br /&gt;Configuration Descriptor:&lt;br /&gt;bLength                 9&lt;br /&gt;bDescriptorType         2&lt;br /&gt;wTotalLength           32&lt;br /&gt;bNumInterfaces          1&lt;br /&gt;bConfigurationValue     1&lt;br /&gt;iConfiguration          0&lt;br /&gt;bmAttributes         0xa0&lt;br /&gt;(Bus Powered)&lt;br /&gt;Remote Wakeup&lt;br /&gt;MaxPower              200mA&lt;br /&gt;Interface Descriptor:&lt;br /&gt;bLength                 9&lt;br /&gt;bDescriptorType         4&lt;br /&gt;bInterfaceNumber        0&lt;br /&gt;bAlternateSetting       0&lt;br /&gt;bNumEndpoints           2&lt;br /&gt;bInterfaceClass       255 Vendor Specific Class&lt;br /&gt;bInterfaceSubClass    255 Vendor Specific Subclass&lt;br /&gt;bInterfaceProtocol    255 Vendor Specific Protocol&lt;br /&gt;iInterface              2 Sunny Beam&lt;br /&gt;Endpoint Descriptor:&lt;br /&gt;bLength                 7&lt;br /&gt;bDescriptorType         5&lt;br /&gt;bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;bmAttributes            2&lt;br /&gt;  Transfer Type            Bulk&lt;br /&gt;  Synch Type               None&lt;br /&gt;  Usage Type               Data&lt;br /&gt;wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;bInterval               0&lt;br /&gt;Endpoint Descriptor:&lt;br /&gt;bLength                 7&lt;br /&gt;bDescriptorType         5&lt;br /&gt;bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;bmAttributes            2&lt;br /&gt;  Transfer Type            Bulk&lt;br /&gt;  Synch Type               None&lt;br /&gt;  Usage Type               Data&lt;br /&gt;wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;bInterval               0&lt;br /&gt;Device Status:     0x0000&lt;br /&gt;(Bus Powered)&lt;br /&gt;$ dmesg | tail&lt;br /&gt;[ 3100.544038] usb 1-1: new full speed USB device using uhci_hcd and address 2&lt;br /&gt;[ 3100.781392] usb 1-1: configuration #1 chosen from 1 choice&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-7598284323134872610?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7598284323134872610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7598284323134872610' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7598284323134872610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7598284323134872610'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/using-sunny-beam-under-linux-not-ok.html' title='Using the Sunny Beam under Linux: Not OK - yet?'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hw_h8sa20nM/STmYp3IJgoI/AAAAAAAAIIQ/pLpLeVUh4-U/s72-c/sunnybeam.jpeg' height='72' width='72'/><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6929165018297315744</id><published>2008-12-04T20:51:00.012+01:00</published><updated>2009-06-13T08:55:01.320+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sunny beam'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='photovoltaic panels'/><category scheme='http://www.blogger.com/atom/ns#' term='ecostream'/><title type='text'>Photovoltaic Panels on my Roof</title><content type='html'>At home &lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hw_h8sa20nM/STg5INlnwuI/AAAAAAAAIHo/alcBYNVJcKc/s1600-h/PICT6929.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_hw_h8sa20nM/STg5INlnwuI/AAAAAAAAIHo/alcBYNVJcKc/s320/PICT6929.JPG" alt="" id="BLOGGER_PHOTO_ID_5276029776713728738" border="0" /&gt;&lt;/a&gt;I have a reef aquarium that consumes &lt;span style="font-style: italic;"&gt;a&lt;/span&gt; &lt;span style="font-style: italic;"&gt;lot&lt;/span&gt; of electricity. In order to cut my electric bill and thanks to local subsidies and regulations, I decided to install photo-voltaic panels on the southern part of my roof. The planning of the system was executed by &lt;a href="http://www.planeteco.be/"&gt;Planet Eco&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Technical details:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;17 panels from &lt;a href="http://www.ecostream.com/"&gt;EcoStream&lt;/a&gt; ("Atrium");&lt;br /&gt;single panel specs:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;185Wpeak&lt;/li&gt;&lt;li&gt;1628x840x42mm&lt;/li&gt;&lt;li&gt;16,2 kg&lt;/li&gt;&lt;li&gt;polycrystalline cells&lt;/li&gt;&lt;li&gt;frame: aluminium&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;total: 3,145kWp&lt;/li&gt;&lt;li&gt;minimum 2673 kWh&lt;/li&gt;&lt;li&gt;The inverter is a &lt;a href="http://www.sma.de/en/products/solar-inverters/sunny-boy/sunny-boy-2500-3000.html"&gt;SMA "SunnyBoy" 2500&lt;/a&gt;, with a wireless 'piggyback' connection to a standalone '&lt;a href="http://www.sma.de/en/products/monitoring-systems/sunny-beam.html"&gt;SunnyBeam&lt;/a&gt;' unit.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hw_h8sa20nM/STg9cnvs1ZI/AAAAAAAAIH4/JfPewja8xNY/s1600-h/PICT6793.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_hw_h8sa20nM/STg9cnvs1ZI/AAAAAAAAIH4/JfPewja8xNY/s320/PICT6793.JPG" alt="" id="BLOGGER_PHOTO_ID_5276034525379220882" border="0" /&gt;&lt;/a&gt;the SunnyBoy 2500&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hw_h8sa20nM/STg9yvHX1ZI/AAAAAAAAIIA/nnQRXYAvHgg/s1600-h/PICT6792.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_hw_h8sa20nM/STg9yvHX1ZI/AAAAAAAAIIA/nnQRXYAvHgg/s320/PICT6792.JPG" alt="" id="BLOGGER_PHOTO_ID_5276034905314678162" border="0" /&gt;&lt;/a&gt;the official 'green' current meter for getting subsidies&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;As an extra, I bought the wireless '&lt;a href="http://www.sma.de/en/products/monitoring-systems/sunny-beam.html"&gt;SunnyBeam&lt;/a&gt;' module. Once the wireless piggyback is installed  on the inverter by a professional, the SunnyBeam offers a clean way to monitor the  electricity production of the solar panels. The SunnyBeam itself uses solar energy to charge its batteries. The device maintains a detailed graph of the production for one day and the detailed total production for the last 31 days.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hw_h8sa20nM/STg_ZleIo2I/AAAAAAAAIII/pjqpscA8jM4/s1600-h/PICT6930.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_hw_h8sa20nM/STg_ZleIo2I/AAAAAAAAIII/pjqpscA8jM4/s320/PICT6930.JPG" alt="" id="BLOGGER_PHOTO_ID_5276036672252322658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The connection from the inverter to the SunnyBeam is over wifi, although a proprietary protocol is used. There is also a USB connector, but unfortunately, only Windows drivers are available. The "&lt;a href="http://www.sma.de/en/products/software/sunny-data-control.html"&gt;Sunny Data Control&lt;/a&gt;" software is needed to retrieve the data over USB, but the software's interface is rather overloaded and non-intuitive, especially for small-scaled needs. You really need to delve into the manual to get started.&lt;br /&gt;&lt;br /&gt;update 13/6/2009: check out my new &lt;a href="http://michael-peeters.blogspot.com/2009/06/sunny-beam-under-ubuntu-sunnybeamtool.html"&gt;sunnybeamtool command line&lt;/a&gt; application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&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/6922719475190616477-6929165018297315744?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6929165018297315744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6929165018297315744' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6929165018297315744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6929165018297315744'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/photovoltaic-panels-on-my-roof.html' title='Photovoltaic Panels on my Roof'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hw_h8sa20nM/STg5INlnwuI/AAAAAAAAIHo/alcBYNVJcKc/s72-c/PICT6929.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5938110582176448003</id><published>2008-12-01T20:41:00.009+01:00</published><updated>2008-12-01T22:05:03.083+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='java fx'/><title type='text'>The worst RIA-site ever</title><content type='html'>&lt;span style="font-size:100%;"&gt;I've never been a big fan of the 'Rich Internet Application' movement, with it most obvious defender: Flash. There are two contenders that fight for the RIA dominance: Microsoft Silverlight and Suns' Java FX. Flash is currently the only platform that's ready for real use: Silverlight and Java FX are still in beta.&lt;br /&gt;&lt;br /&gt;Java FX has a huge potential as being a real Open Source (GPL) RIA platform compared to its more or less closed source competitors. I know, Flash has &lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;some parts&lt;/span&gt;&lt;span style="font-size:100%;"&gt; of it made 'open', but Flash basically remains a commercial platform, requiring commercial Adobe developer tools for the 'real' work (including the now classic video à la youtube). It remains to see if Sun will be able to maintain the full GPL license for Java FX, since video and sound are usually licensed from third party providers using patented technologies (e.g. &lt;a style="" href="http://www.on2.com/"&gt;On2&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Although RIA apps have a tremendous 'whaw' factor (e.g. &lt;a style="" href="http://www.parleys.com/"&gt;parleys.com&lt;/a&gt;) , I'm quickly bored by all the transitions, fading in/out and other visual magic. It's also very hard developing good RIA applications that are both functionally relevant and appealing to the eye. Developers must combine design skills, good taste and programming talents. Otherwise you end up with disastrous websites like this &lt;a style="" href="http://www.winterbellewaerdepark.be/"&gt;amusement park&lt;/a&gt;. It takes about 15-20s of looking at a shiny progress bar, hearing silly music and looking at stupid animations to finally find the opening hours. Definitely in the top-10 of 'worst-RIA-sites-ever'.&lt;br /&gt;&lt;br /&gt;RIA apps fail to embrace the strengths of the classic web:&lt;br /&gt;&lt;/span&gt;&lt;ul style=""&gt;&lt;li  style=""&gt;&lt;span style="font-size:100%;"&gt;bookmarkability &amp;amp; addressability: In typical RIAs, only the main page has an address; forget to send a to-the-point URL to a friend... Bookmarking individual parts of a RIA app requires the oh-so-stupid 'link this' button. This is opposite to the current "REST" trend where everything is a URL, a resource.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;span style="font-size:100%;"&gt;user driven action: RIA apps tend to limit the users' behavior, forcing them to follow a fixed pattern, where classic webshops let the &lt;span style="font-style: italic;"&gt;user&lt;/span&gt; decide where to click. Have a look at the &lt;a style="" href="http://www.makro.be/"&gt;on-line promotion folder&lt;/a&gt; of a classic brick and mortar shop. It takes about 2-3 seconds to change  to the next page; at least one or 2 minutes of clicking if you're searching a specific item.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;span style="font-size:100%;"&gt;speed: it looks like every RIA app needs its shiny progressbar, tricking the user to wait much longer than he'd be willing  to wait for a classic web-page&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;span style="font-size:100%;"&gt;search engine friendliness: by default RIA apps can not be indexed by google, unless tricking google by offering a 'ghost' site to the search robots. This is how &lt;a style="" href="http://www.parleys.com/"&gt;parleys.com&lt;/a&gt; solves their search ranking problem. Someone said 'hacking'?&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;span style="font-size:100%;"&gt;OS-agnostic: only Java FX &lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;promises&lt;/span&gt;&lt;span style="font-size:100%;"&gt; to target Windows, MacOS &lt;/span&gt;&lt;span style="font-style: italic;"&gt;and&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Linux. Of course, Flash support under Linux has made huge progress, with e.g. the &lt;a style="" href="http://labs.adobe.com/downloads/flashplayer10.html"&gt;Flash 64bit version released under Linux first&lt;/a&gt;. But all RIA platforms try to address the 'fat client' offline problem: running apps while disconnected from internet, even outside the browser (e.g. Adobe AIR or Java Update 10). Unfortunatly, those 'fat client' standalone versions of RIA apps offer a consequent look on all OSes. This might be a plus, but the current trend is to adapt your UI to the OS. Firefox 3 for example has a different look and feel under Gnome than under Vista.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;span style="font-size:100%;"&gt;hackability: I'm addicted to noscript, adblock and firebug, but those tools are useless in a RIA context. Even a simple 'save as', as Firefox provides, is not straightforward. Perhaps the development of gnash might bring some new hacker-tools to the scene. &lt;/span&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;span style="font-size:100%;"&gt;open standards: html4, css, ... why are they missing from the RIA picture? Yes, ActionScript is like EcmaScript, which is like JavaScript. Anyway, in real apps, ActionScript only runs in Flash.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;So do I hate RIA? I generally tend to dislike websites that are mostly made in Flash, unless Flash really adds value. For parleys.com with its highly integrated sound/video and slides Flash adds value, although I preferred the initial version that used standard html and 'Ajax'.&lt;br /&gt;&lt;br /&gt;I do think that Flash and Java FX have their value when used to &lt;/span&gt;&lt;span style="font-style: italic;"&gt;enrich&lt;/span&gt;&lt;span style="font-size:100%;"&gt; standard web pages. You'd be amazed to see what is possible in plain html/javascript/css. Look at the spectacular Apple ITunes store for example. In general everything that's not supported in html4 requires flash: audio/video or drawing. By putting those pieces in a classical webapp you get a tremendous combination. For example, Google Analytics or Google Finance are html pages, but the nice graphs are Flash. The integration is seamless, an end-user can see no difference between the html and the flash parts.&lt;br /&gt;&lt;br /&gt;We'll see what the RIA-future brings: all Flash (flex/air), Java FX, or a "back to the web" reaction?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5938110582176448003?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5938110582176448003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5938110582176448003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5938110582176448003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5938110582176448003'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/12/worst-ria-site-ever.html' title='The worst RIA-site ever'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1805311591377525615</id><published>2008-09-30T20:51:00.008+02:00</published><updated>2008-09-30T21:15:14.570+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='boot'/><title type='text'>Measuring Bootup Time of Ubuntu with Bootchart</title><content type='html'>I just discovered on &lt;a href="http://linux.slashdot.org/article.pl?sid=08/09/30/157211&amp;amp;from=rss"&gt;slashdot&lt;/a&gt; the "&lt;a href="http://www.bootchart.org/index.html"&gt;bootchart&lt;/a&gt;" tool. Installation on Ubuntu is as simple as looking up the bootchart package in Synaptic package manager and installing it.&lt;br /&gt;&lt;br /&gt;After booting, a png file is created in /var/log/bootchart/. Looks like my bootup-time could be improved, but it's not clear to me (yet) how I can optimize. This is my bootchart of the Medion MD96500 laptop (Intel Pentium M 1.73GHZ - linux 2.6.24-21 - Ubuntu 8.04.1:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hw_h8sa20nM/SOJ2a8UYEAI/AAAAAAAAIHQ/GpQ64fJdU8Y/s1600-h/hardy-20080930-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_hw_h8sa20nM/SOJ2a8UYEAI/AAAAAAAAIHQ/GpQ64fJdU8Y/s320/hardy-20080930-1.png" alt="bootchart of Intel Pentium M 1.73 GHZ" id="BLOGGER_PHOTO_ID_5251890320707686402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I did some first experiments with the &lt;a href="http://www.gelato.unsw.edu.au/lxr/source/scripts/show_delta"&gt;showdelta&lt;/a&gt; script that parses the &lt;a href="http://lwn.net/Articles/252037/"&gt;kprint&lt;/a&gt; bootup timings, but bootchart shows &lt;span style="font-weight: bold; font-style: italic;"&gt;parallel&lt;/span&gt; timings of processes fired during boot. Great tool! Suggestions for optimization are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1805311591377525615?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1805311591377525615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1805311591377525615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1805311591377525615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1805311591377525615'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/09/measuring-bootup-time-of-ubuntu-with.html' title='Measuring Bootup Time of Ubuntu with Bootchart'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hw_h8sa20nM/SOJ2a8UYEAI/AAAAAAAAIHQ/GpQ64fJdU8Y/s72-c/hardy-20080930-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-249764505946958596</id><published>2008-09-25T21:40:00.004+02:00</published><updated>2008-09-25T21:51:53.225+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Effective Java - 2nd Edition</title><content type='html'>The second edition of Effective Java (by Joshua Bloch) is now updated for java version 6. This book is a must-read for any serious java-developer. Contains very practical and up-to-date tips for writing great java programs.&lt;br /&gt;&lt;br /&gt;Checkout the &lt;a href="http://java.sun.com/docs/books/effective/"&gt;effective java site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first edition -- still valuable but a bit outdated -- is available on &lt;a href="http://books.google.be/books?id=ZZOiqZQIbRMC&amp;amp;dq=effective+java&amp;amp;pg=PP1&amp;amp;ots=UZMZ5tcN60&amp;amp;sig=px3T644MTtdR6c4sao8CU65BIvs&amp;amp;hl=nl&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;resnum=1&amp;amp;ct=result#PPP1,M1"&gt;google &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Joshua Bloch presents the new version of his book on parleys.com. Highly recommended:&lt;br /&gt;&lt;object width="474" height="443"&gt;&lt;br /&gt; &lt;param name="movie" value="http://www.parleys.com/download/attachments/5443/parleysshare.swf?pageId=18317360"&gt;&lt;br /&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;br /&gt; &lt;param name="pageId" value="18317360"&gt;&lt;br /&gt; &lt;embed src="http://www.parleys.com/download/attachments/5443/parleysshare.swf?pageId=18317360" type="application/x-shockwave-flash" allowfullscreen="true" width="474" height="443"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-249764505946958596?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/249764505946958596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=249764505946958596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/249764505946958596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/249764505946958596'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/09/effective-java-2nd-edition.html' title='Effective Java - 2nd Edition'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7309234870479635518</id><published>2008-09-07T13:42:00.039+02:00</published><updated>2011-06-14T21:18:11.656+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Belgium'/><category scheme='http://www.blogger.com/atom/ns#' term='eID'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='eGovernement'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>eGovernment: Using the Belgian eID under Ubuntu</title><content type='html'>In Belgium, online eGovernment services require the usage of an electronic Identity Card (eID) as a security token. This eID, coupled with a PIN, allows easier paperless interaction with the official services. Last spring 2008 the eID infrastructure was still Windows-only, but now Linux is supported. This post details how to enable the Belgian eID card reader on Ubuntu (8.04). The official info-website is &lt;a href="http://eid.belgium.be/nl/Hoe_installeer_je_de_eID_/Linux/index.jsp"&gt;http://eid.belgium.be/nl/Hoe_installeer_je_de_eID_/Linux/index.jsp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I borrowed an ACR38 card reader. From the command line it displays:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;$ lsusb&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Bus 001 Device 004: ID 072&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;f:9000 Advanced Card Systems, L&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;td ACR38 AC1038-based Smart Card Reader&lt;/span&gt;&lt;/blockquote&gt;Simply install the ACR38U driver from the Synaptic Package Manager:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_hw_h8sa20nM/SMQvPOD1gRI/AAAAAAAAF3Q/Qgc-feO3gdo/s1600-h/ACR38U+synaptic.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img id="BLOGGER_PHOTO_ID_5243367804684828946" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://4.bp.blogspot.com/_hw_h8sa20nM/SMQvPOD1gRI/AAAAAAAAF3Q/Qgc-feO3gdo/s320/ACR38U+synaptic.png" border="0" /&gt;&lt;/a&gt;Synaptic recommends the pcscd as a dependent package.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_hw_h8sa20nM/SMQvtI7GYwI/AAAAAAAAF3Y/4HX6C0lcv0w/s1600-h/pcsdshot.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img id="BLOGGER_PHOTO_ID_5243368318702084866" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://1.bp.blogspot.com/_hw_h8sa20nM/SMQvtI7GYwI/AAAAAAAAF3Y/4HX6C0lcv0w/s320/pcsdshot.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, select the 'beidgui' package and accept all dependencies that are proposed:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_hw_h8sa20nM/SMQwS1GzqAI/AAAAAAAAF3g/DTTddmQfImA/s1600-h/beid+screenshot.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img id="BLOGGER_PHOTO_ID_5243368966217508866" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://1.bp.blogspot.com/_hw_h8sa20nM/SMQwS1GzqAI/AAAAAAAAF3g/DTTddmQfImA/s320/beid+screenshot.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now the standalone application can be run. Select Applications/Accessories/Reading and Administration in the Menu or trigger the command line:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;$ b eigui&lt;/span&gt;&lt;/blockquote&gt;The final step is making firefox accept the external card reader. For this, install the Belgium eID add on for firefox at https://addons.mozilla.org/firefox/addon/belgium-eid/. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you get a "ssl renegotiation error", you should temporarily allow the specific e-government site to accept ssl renegotiations by going to the magic "about:config" url and updating the &lt;b&gt;security.ssl.renego_unrestricted_hosts&lt;/b&gt; key with &lt;b&gt;ccff02.minfin.fgov.be&lt;/b&gt;.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Nice to see Linux-friendly eGov applications!&lt;br /&gt;&lt;br /&gt;More info:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.stroobant.be/belgische-eid-2-5-9-packages-voor-ubuntu-dapper"&gt;http://www.stroobant.be/belgische-eid-2-5-9-packages-voor-ubuntu-dapper&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.grep.be/blog/en/computer/debian/belpic/"&gt;http://www.grep.be/blog/en/computer/debian/belpic/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;update 2011/05/09 for ubuntu 11.4:&lt;/div&gt;&lt;div&gt;- in about:config update the &lt;b&gt;security.ssl.renego_unrestricted_hosts&lt;/b&gt; with &lt;b&gt;ccff02.minfin.fgov.be&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- use the 'belgium eID' firefox addon that registers the correct library instead doing the manual configuration.&lt;/div&gt;&lt;div&gt;update 2011/06/14: unfortunately, the minfin.fgov.be site added a "firefox 3" test instead of fixing the ssl renegotiation error. Luckily, it's easy to circumvent this by installing the User Agent Switcher plugin and activating a new "FireFox 3" header. The following user-agent header worked for me: "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/&lt;b&gt;&lt;u&gt;3.5.0&lt;/u&gt;&lt;/b&gt;"&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-7309234870479635518?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7309234870479635518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7309234870479635518' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7309234870479635518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7309234870479635518'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/09/egovernment-using-belgian-eid-under.html' title='eGovernment: Using the Belgian eID under Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hw_h8sa20nM/SMQvPOD1gRI/AAAAAAAAF3Q/Qgc-feO3gdo/s72-c/ACR38U+synaptic.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2721867701697943378</id><published>2008-09-05T21:41:00.005+02:00</published><updated>2008-09-05T22:24:45.715+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcasts'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Recommended Linux Podcasts</title><content type='html'>When commuting to work, I like to listen to podcasts. Most of the podcasts I listen to are tech-related. Let's review some of those.&lt;br /&gt;&lt;br /&gt;My favorite Linux podcast is "The Linux Action Show" (&lt;a href="http://www.jupiterbroadcasting.com/?cat=4"&gt;http://www.jupiterbroadcasting.com/?cat=4&lt;/a&gt;). At first, the exaggerated intonations of the intro are surprising, but this is just part of the 'format'. The show itself is very entertaining and also great to keep up with the latest Linux news and new devices that run Linux. I like the more reasonable view of the presenters on running non-GPL software on Linux. Always great to hear about new cool Linux apps and products. If they'd talk a bit more about java and openjdk instead of mono (and &lt;a href="http://michael-peeters.blogspot.com/2008/06/banshee-1-on-ubuntu.html"&gt;banshee&lt;/a&gt;), the show would be perfect :-).&lt;br /&gt;&lt;br /&gt;The second (and last) item in my "Linux Podcast top-10" (well, top 2 actually) is the "Lottalinuxlinks podcast" (&lt;a href="http://lottalinuxlinks.com/"&gt;http://lottalinuxlinks.com&lt;/a&gt;). This is the "anti-Linux action show". No great radio-voices and high-end recording studio here: every lottalinuxlinks show is recorded from within a driving car when returning home. The 'cowboy' southern USA accent just adds to the geek-level of this podcast. Cool linux info.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2721867701697943378?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2721867701697943378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2721867701697943378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2721867701697943378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2721867701697943378'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/09/recommended-linux-podcasts.html' title='Recommended Linux Podcasts'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4741603566214922131</id><published>2008-07-24T07:45:00.006+02:00</published><updated>2008-07-24T08:15:32.377+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='todo'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='remember the milk'/><title type='text'>A ToDo list for Gmail and Google Calendars: Remember the Milk</title><content type='html'>I'm a big fan of &lt;a href="http://mail.google.com/"&gt;gmail&lt;/a&gt; and &lt;a href="http://www.google.com/calendar"&gt;google calendar&lt;/a&gt; as my centralized &lt;a href="http://en.wikipedia.org/wiki/Personal_information_manager"&gt;PIM&lt;/a&gt;. One major feature is missing however: there is no support for ToDo lists. You can add a simple &lt;a href="http://http//www.google.com/ig/adde?moduleurl=www.google.com/ig/modules/todo.xml"&gt;ToDo google gadget&lt;/a&gt; on your &lt;a href="http://www.google.nl/ig"&gt;iGoogle&lt;/a&gt; page, but that todo list is only accessible from within iGoogle; there is no integration with gmail or calendar whatsoever.&lt;br /&gt;&lt;br /&gt;Some &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;greasemonkey&lt;/a&gt; scripts also add &lt;a href="http://googlesystem.blogspot.com/2007/04/todo-list-for-google-calendar.html"&gt;todo lists to google calendar&lt;/a&gt;. Unfortunately,  they are very sensitive to site fixes and updates: any update can break those nice scripts.&lt;br /&gt;&lt;br /&gt;As an alternative, I just signed up to &lt;a href="http://www.rememberthemilk.com/"&gt;Remember the Milk&lt;/a&gt;. 'RtM' provides a rich ToDo list that integrates well in gmail and calendar:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;nice ajax input&lt;/li&gt;&lt;li&gt;extensive features&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rememberthemilk.com/services/gmail/"&gt;firefox extension&lt;/a&gt; to integrate the todo list into gmail: your inbox-view is enhanced with a RtM list on the left&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rememberthemilk.com/services/googlecalendar/"&gt;integration with google calendar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Not a perfect solution yet, as you have to logon separately to RtM and the integration with gmail and calendar is a hack -- a very nice one, but still a hack. But it's ok for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4741603566214922131?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4741603566214922131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4741603566214922131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4741603566214922131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4741603566214922131'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/07/todo-list-for-gmail-and-google.html' title='A ToDo list for Gmail and Google Calendars: Remember the Milk'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1202606086415363481</id><published>2008-07-17T20:06:00.008+02:00</published><updated>2008-07-19T15:06:46.226+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcasts'/><category scheme='http://www.blogger.com/atom/ns#' term='Rhythmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3 player'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Podcasts in Rhythmbox: removing special characters from the downloaded files</title><content type='html'>When Rhythmbox downloads podcasts, it uses the URL as a filename. I like to copy/paste the podcasts to my mp3 player with Nautilus. Unfortunately, my mp3 player has trouble with special characters like colons and question marks (':' and '?'). This is probably due to the FAT32 file system.&lt;br /&gt;&lt;br /&gt;I use the following script (triggered from a launcher) to remove those chars from my podcasts:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;#!/bin/bash&lt;br /&gt;find $HOME/Desktop/downloads/ | while read f&lt;br /&gt;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;REN="$(echo "$f" | tr ":" "_" | cut -d '?' -f 1)"&lt;br /&gt;&amp;nbsp;&amp;nbsp;echo "mv $f $REN"&lt;br /&gt;&amp;nbsp;&amp;nbsp;mv "$f" "$REN"&lt;br /&gt;done&lt;/blockquote&gt;After that, copy/paste of my podcasts goes fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1202606086415363481?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1202606086415363481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1202606086415363481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1202606086415363481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1202606086415363481'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/07/podcasts-in-rhythmobx-removing-special.html' title='Podcasts in Rhythmbox: removing special characters from the downloaded files'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2924186582955878585</id><published>2008-06-28T21:27:00.014+02:00</published><updated>2008-06-29T21:17:11.415+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='power off'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='grab&apos;n&apos;go'/><category scheme='http://www.blogger.com/atom/ns#' term='netcat'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='shutdown'/><category scheme='http://www.blogger.com/atom/ns#' term='nc'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless mediastore'/><title type='text'>Remote Power off the CH3WNAS</title><content type='html'>In my &lt;a href="http://michael-peeters.blogspot.com/2008/06/tweaking-ch3wnas-power-off.html"&gt;previous post&lt;/a&gt;, I found out that the CH3WNAS is shutdown by touching a &lt;span style="font-family:courier new;"&gt;/tmp/shutdown&lt;/span&gt; file. It is possible to use the existing web admin pages to trigger a remote shutdown from a script by using 2 wget-commands. One major drawback of this solution is that your admin-password is stored in cleartext in the script.&lt;br /&gt;&lt;br /&gt;In this post I show how you can do a remote shutdown via the LAN, without hard coding your admin password. Since this tweak could be misused for a remote DOS attack, make sure you put the CH3WNAS behind a NAT router.&lt;br /&gt;&lt;br /&gt;Busybox (activated with the fun_plug script) provides a powerful nc (netcat) command that also has a -l listen mode. This listen-mode is ideal for simple lightweight client/server communication.&lt;br /&gt;&lt;br /&gt;Steps for enabling remote shutdown from a script:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;make sure telnet (through busybox) is enabled: &lt;a href="http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/"&gt;http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;create a &lt;span style="font-family:courier new;"&gt;shutdown_listener.sh&lt;/span&gt; script (e.g. with ftp) on the root of HD_a2 with following contents: &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;while true&lt;br /&gt;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;/mnt/HD_a2/busybox nc -l -p 1234 | while read line&lt;br /&gt;&amp;nbsp;&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ "$line" -eq "0" ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    touch /tmp/shutdown&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fi&lt;br /&gt;&amp;nbsp;&amp;nbsp;done&lt;br /&gt;done&lt;br /&gt;&lt;/span&gt;This scripts on the NAS listens in a loop on port 1234. When it reads a "&lt;span style="font-family:courier new;"&gt;0&lt;/span&gt;" it puts a &lt;span style="font-family:courier new;"&gt;/tmp/shutdown&lt;/span&gt; file that triggers the immediate poweroff.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;add the following line to the &lt;span style="font-family:courier new;"&gt;fun_plug&lt;/span&gt; script and restart the CH3WNAS:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/shutdown_listener.sh &amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;from the client-side it's enough to create a nc-script that sends a  "&lt;span style="font-family:courier new;"&gt;0&lt;/span&gt;" to the NAS.&lt;br /&gt;on Ubuntu I created a Launcher on my desktop with following command :&lt;br/&gt; &lt;span style="font-family:courier new;"&gt;bash -c "echo 0 | nc 192.168.1.30 1234 -w 1"&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;If you're stuck with Windows, look out for a Windows version of netcat (nc) and put similar commands in a shortcut (&lt;span style="font-family:courier new;"&gt;cmd /c "..."&lt;/span&gt;). Or better, upgrade to Ubuntu :-)&lt;/li&gt;&lt;/ul&gt;I finally have a script that I can put on all my laptops to trigger a remote shutdown of the NAS. Unfortunately, for powering the device back ON again, you still have to push the powerbutton.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2924186582955878585?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2924186582955878585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2924186582955878585' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2924186582955878585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2924186582955878585'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/remote-power-off-ch3wnas.html' title='Remote Power off the CH3WNAS'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4782108098913910491</id><published>2008-06-20T21:07:00.009+02:00</published><updated>2008-06-29T21:15:54.314+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='medion'/><category scheme='http://www.blogger.com/atom/ns#' term='radeon'/><category scheme='http://www.blogger.com/atom/ns#' term='compiz'/><category scheme='http://www.blogger.com/atom/ns#' term='ati'/><category scheme='http://www.blogger.com/atom/ns#' term='md6500'/><category scheme='http://www.blogger.com/atom/ns#' term='x700'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='hardy'/><category scheme='http://www.blogger.com/atom/ns#' term='8.04'/><title type='text'>Getting Compiz to run on Ubuntu 8.04 with an ATI X700 chipset</title><content type='html'>One of my laptops, a Medion md96500, I couldn't start Compiz after I upgraded it from Ubuntu Gutsy to Hardy (8.04). I remember that when I installed 7.04, I had to do some tweaking to get the video working. Luckily, since Ubuntu 7.10, the display configuration goes really well 'out of the box', but maybe some of my tweaks of last year did survive in my current Hardy install (8.04). This is the video chipset in my MD96500:&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;$ lspci | grep VGA&lt;br /&gt;01:00.0 VGA compatible controller: ATI Technologies Inc M26 [Radeon Mobility X700 XL (PCIE)]&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;I tried to play with the "Hardware Drivers" dialog-box, but this didn't help. Luckily, fixing was rather easy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I removed the proprietary fglrx-driver of ATI and switched back to the open-source driver. This is well documented in: &lt;a href="https://help.ubuntu.com/community/RadeonDriver"&gt;https://help.ubuntu.com/community/RadeonDriver&lt;/a&gt;. The switch went rather smoothly, but compiz still failed when trying to activate it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Next, I ran the excellent&lt;span style="font-family:courier new;"&gt; compiz-check&lt;/span&gt; script &lt;a href="https://help.ubuntu.com/community/RadeonDriver"&gt;http://forlong.blogage.de/article/pages/Compiz-Check&lt;/a&gt;. As you can see in the output, compiz-check not only detects that my x700 is blacklisted, but it also fixes it by letting Compiz ignore the blacklist:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;$ &lt;span style="font-weight: bold;"&gt;./compiz-check&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gathering information about your system...&lt;br /&gt;&lt;br /&gt;Distribution:          Ubuntu 8.04&lt;br /&gt;Desktop environment:   GNOME&lt;br /&gt;Graphics chip:         ATI Technologies Inc M26 [Radeon Mobility X700 XL (PCIE)]&lt;br /&gt;Driver in use:         radeon&lt;br /&gt;Rendering method:      AIGLX&lt;br /&gt;&lt;br /&gt;Checking if it's possible to run Compiz on your system...&lt;br /&gt;&lt;br /&gt;Checking for texture_from_pixmap...               [ &lt;span style="color: rgb(51, 255, 51); font-weight: bold;"&gt;OK&lt;/span&gt; ]&lt;br /&gt;Checking for non power of two support...          [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for composite extension...               [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for FBConfig...                          [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for hardware/setup problems...           [&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;FAIL&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;There has been (at least) one error detected with your setup:&lt;br /&gt;Error: Laptop using radeon driver.&lt;br /&gt;&lt;br /&gt;Would you like to know more? (Y/n) &lt;span style="font-weight: bold;"&gt;Y&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It has been detected, that you are running a laptop with an ATI chip.&lt;br /&gt;The radeon driver supports Compiz out-of-the-box but because of a nasty bug&lt;br /&gt;in the driver that causes X to freeze on some cards, this particular&lt;br /&gt;combination had to be blacklisted in Ubuntu "Hardy Heron".&lt;br /&gt;&lt;br /&gt;In case you already used Compiz successfully on Ubuntu 7.10 (Gutsy), it is&lt;br /&gt;safe to skip the blacklist.&lt;br /&gt;&lt;br /&gt;Do you want to skip blacklist checks by Compiz? (y/N) &lt;span style="font-weight: bold;"&gt;y&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ &lt;span style="font-weight: bold;"&gt;./compiz-check&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gathering information about your system...&lt;br /&gt;&lt;br /&gt;Distribution:          Ubuntu 8.04&lt;br /&gt;Desktop environment:   GNOME&lt;br /&gt;Graphics chip:         ATI Technologies Inc M26 [Radeon Mobility X700 XL (PCIE)]&lt;br /&gt;Driver in use:         radeon&lt;br /&gt;Rendering method:      AIGLX&lt;br /&gt;&lt;br /&gt;Checking if it's possible to run Compiz on your system...&lt;br /&gt;&lt;br /&gt;Checking for texture_from_pixmap...               [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for non power of two support...          [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for composite extension...               [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for FBConfig...                          [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;Checking for hardware/setup problems...           [ &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(51, 255, 51);"&gt;OK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ]&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;Compiz is now fully functional on my laptop, and till now, it seems stable.  gr8 :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4782108098913910491?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4782108098913910491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4782108098913910491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4782108098913910491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4782108098913910491'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/getting-compiz-to-run-on-ubuntu-804.html' title='Getting Compiz to run on Ubuntu 8.04 with an ATI X700 chipset'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8907164613474528814</id><published>2008-06-17T21:28:00.014+02:00</published><updated>2009-01-22T07:44:26.295+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='v1'/><category scheme='http://www.blogger.com/atom/ns#' term='banshee'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Banshee 1 on Ubuntu</title><content type='html'>I listened to the recommendations of the &lt;a href="http://www.jupiterbroadcasting.com/"&gt;Linux Action Show&lt;/a&gt; and installed Banshee v1 on my Ubuntu laptop.  I simply followed the steps in &lt;a href="http://www.simplehelp.net/linux/how-to-install-banshee-10-in-ubuntu/"&gt;http://www.simplehelp.net/linux/how-to-install-banshee-10-in-ubuntu/&lt;/a&gt;. If you hate the command-line, use Synaptic Package Manager for installing the banshee-1 package and it's dependencies.&lt;br /&gt;&lt;br /&gt;I'm not a big fan of the mono environment and its Microsoft origin, but I must admit: starting banshee V1  gives the 'wow'-effect. It looks like a rhythmbox on steroids:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hw_h8sa20nM/SFgbxPDPmbI/AAAAAAAAF08/Xm5sRolsjnA/s1600-h/Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_hw_h8sa20nM/SFgbxPDPmbI/AAAAAAAAF08/Xm5sRolsjnA/s320/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5212947101349026226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As you can see, my muvo v100 is recognized and it shows a nice "memory available" graph. Generic USB devices like the v100 must define a &lt;a href="http://michael-peeters.blogspot.com/2008/06/rhythmbox-meets-mp3-players.html"&gt;.is_audio_player&lt;/a&gt; file in the root to be automatically recognized by banshee or rhythmbox. Banshee also has a user-friendly "eject media device" option in the context-menu.&lt;br /&gt;&lt;br /&gt;And there is built-in podcast support. You cannot import a list of podcasts, but the "add podcast" automatically pastes the url that you copied from another window. You cannot remove older podcast from the list, but you have to "mark them as old". When copy/pasting to the media device, it uses the (usually) bogus "artist" data of the podcast. I couldn't find a way to "autosync" podcasts to my mp3 player yet.&lt;br /&gt;&lt;br /&gt;I didn't try to connect to my &lt;a href="http://michael-peeters.blogspot.com/2008/06/ch3wnas-and-firefly.html"&gt;firefly daap&lt;/a&gt; or &lt;a href="http://michael-peeters.blogspot.com/2008/06/running-mediatomb-on-ch3wnas-natively.html"&gt;mediatomb upnp&lt;/a&gt; server, but mediatomb should work through &lt;a href="http://michael-peeters.blogspot.com/2008/06/upnp-client-under-ubuntu-djmount.html"&gt;djmount&lt;/a&gt; at least. But maybe I'll use samba for read&lt;span style="font-style: italic;"&gt; &amp;amp; write&lt;/span&gt; access.&lt;br /&gt;&lt;br /&gt;I noticed a few minor problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the banshee icon is enlarged when you put the menu-bar on the left (or right) side of the screen (see screenshot above)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;when the usb media player is already mounted, banshee hangs at startup:&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hw_h8sa20nM/SFgXU6eCpDI/AAAAAAAAF00/uZMVAC87n6s/s1600-h/Screenshot-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_hw_h8sa20nM/SFgXU6eCpDI/AAAAAAAAF00/uZMVAC87n6s/s320/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5212942216741430322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I suppose those problems will be fixed soon. And perhaps Ubuntu should update the banshee package in their distro and why not, consider replacing Rhythmbox.&lt;br /&gt;&lt;br /&gt;update 27/6/2008: Unfortunatly banshee hangs / crashes quite often once you use it more. I'm still using Rhythmbox for my 'normal' media player stuff, surviving with Rhythmbox's limitations: single threaded (and buggy) podcast retrieval, picky when media drive is unmounted, too simple media device support, almost no configuration options... But at least Rhythmbox doesn't crash that often.&lt;br /&gt;&lt;br /&gt;update 22/1/2009: Banshee is much more stable now and really usable as a music player, more 'finished' than rhythmbox. Unfortunately, the podcast retriever still has a bug: when the download speed is too low, the download stops; retrying will download the full podcast again and fails again when the bandwidth is still too low (I experience this with e.g. 'Buzz out Loud'). It seems like a core Mono bug since no stacktrace is logged. I reverted to gPodder as my podcast client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8907164613474528814?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8907164613474528814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8907164613474528814' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8907164613474528814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8907164613474528814'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/banshee-1-on-ubuntu.html' title='Banshee 1 on Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hw_h8sa20nM/SFgbxPDPmbI/AAAAAAAAF08/Xm5sRolsjnA/s72-c/Screenshot.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5831520599097834442</id><published>2008-06-17T21:04:00.004+02:00</published><updated>2008-06-18T07:51:56.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='corrupt'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='grab&apos;n&apos;go'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless mediastore'/><title type='text'>Restaging the CH3WNAS</title><content type='html'>Suddenly, after a reboot, my CH3WNAS couldn't start the wireless. It connected to a different ip address than the fixed I assigned it, and the admin-pages didn't react correctly to my actions: e.g. you couldn't see the existing users, but when adding a user I got a "User already exists" error message. Even the ftp server wasn't reacting. Through telnet, I could disable the fun_plug script, but that didn't solve the problem either.&lt;br /&gt;&lt;br /&gt;Finally, I reset the firmware in the admin-pages, and the setup my wireless/ftp again. I re-enabled the fun_plug and everything is OK now: &lt;a href="http://michael-peeters.blogspot.com/2008/05/ch3wnas-grabngo-wireless-media-store.html"&gt;telnet&lt;/a&gt; is available and I can connect to &lt;a href="http://michael-peeters.blogspot.com/2008/06/ch3wnas-and-firefly.html"&gt;firefly&lt;/a&gt; and &lt;a href="http://michael-peeters.blogspot.com/2008/06/running-mediatomb-on-ch3wnas-natively.html"&gt; mediatomb&lt;/a&gt; to access my music...&lt;br /&gt;&lt;br /&gt;As a first prevention measure, I edited the firefly.conf file to log onto the hard drive instead of filling up /var/log:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;logfile = &lt;span style="font-weight: bold;"&gt;/mnt/HD_a2/firefly&lt;/span&gt;/mt-daapd.log&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;We'll see if this helps...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5831520599097834442?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5831520599097834442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5831520599097834442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5831520599097834442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5831520599097834442'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/restaging-ch3wnas.html' title='Restaging the CH3WNAS'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4518315224402852197</id><published>2008-06-16T17:55:00.014+02:00</published><updated>2008-06-17T07:54:08.418+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='power off'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='grab&apos;n&apos;go'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='shutdown'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless mediastore'/><title type='text'>Tweaking the CH3WNAS Power Off</title><content type='html'>On the CH3WNAS, you have to press the power button for an endless 10s before it finally shuts down. Apparently this 10s delay is determined by the &lt;font face="courier new"&gt;/usr/sbin/chkbutton&lt;/font&gt; daemon that polls the power button. There exists a replacement for this process for the dsm-g600 in &lt;a href="http://forum.dsmg600.info/t955-chkbutton-replacement.html"&gt;http://forum.dsmg600.info/t955-chkbutton-replacement.html&lt;/a&gt;.&lt;br /&gt;Unfortunately, I couldn&amp;#39;t download the attachment to try it out on the CH3WNAS. I asked the author to resubmit his binaries. Maybe for a next post...&lt;br&gt;&lt;br&gt;There is also shutdown-option in the web-admin pages. After logon, the shutdown is done by firing a &lt;font face="courier new"&gt;POST /goform/sysShootDown&lt;/font&gt; request onto the CH3WNAS. After some searching in the sourcecode (download it from the &lt;a href="http://www.conceptronic.net/site/desktopdefault.aspx?tabindex=0&amp;amp;tabid=200&amp;amp;Cat=60&amp;amp;grp=6030&amp;amp;ar=452&amp;amp;Prod_ID=2048&amp;amp;Prod=CH3WNAS&amp;amp;subid=555"&gt;conceptronics&amp;#39; site&lt;/a&gt;), I found out that &lt;font face="courier new"&gt;CH3WNAS_GPL/goahead/LINUX/web_api.c&lt;/font&gt; handles the shutdown:&lt;br&gt;&lt;blockquote style="font-family: courier new;"&gt;void sysShootDown(webs_t wp, char_t *path, char_t *query)&lt;br&gt;{&lt;br&gt;&lt;div style="margin-left: 40px;"&gt; if( checkIdleTime(wp) == WEB_IDLE_TIMEOUT )&lt;br&gt; {&lt;br&gt;&lt;div style="margin-left: 40px;"&gt;     websRedirect(wp, T(&amp;quot;web/login.asp&amp;quot;));&lt;br&gt;  return;&lt;br&gt;&lt;/div&gt; }&lt;br&gt;&lt;font style="font-weight: bold;"&gt;    system(&amp;quot;touch /tmp/shutdown&amp;quot;);&lt;/font&gt;&lt;br&gt; websRedirect(wp, T(&amp;quot;web/tools/shutdown.asp&amp;quot;));&lt;br&gt;&lt;/div&gt;}&lt;br&gt;&lt;/blockquote&gt;--&amp;gt; A simple (but unconventional)  &lt;font face="courier new"&gt;touch /tmp/shutdown&lt;/font&gt; triggers the shutdown. I suppose it&amp;#39;s the same &lt;font face="courier new"&gt;chkbutton&lt;/font&gt; daemon process that monitors and picks up the &lt;font face="courier new"&gt;/tmp/shutdown&lt;/font&gt; file.&lt;br&gt;&lt;br&gt;&lt;br /&gt;If you need to do a fast remote shutdown, you can exercise the existing web-interface from command line (the wget is standard under linux; under windows, have a look at &lt;a href="http://gnuwin32.sourceforge.net/packages/wget.htm"&gt;wget for windows&lt;/a&gt;):&lt;br&gt;&lt;blockquote style="font-family: courier new;"&gt;wget -o /tmp/test &amp;quot;&lt;a href="http://192.168.1.30/goform/formLogin?f_LOGIN_NAME=admin&amp;amp;f_LOGIN_PASSWD=xxx&amp;amp;f_login_type=0"&gt;http://&lt;em&gt;192.168.1.30&lt;/em&gt;/goform/formLogin?f_LOGIN_NAME=admin&amp;amp;f_LOGIN_PASSWD=&lt;em&gt;xxx&lt;/em&gt;&amp;amp;f_login_type=0&lt;/a&gt;&amp;quot;&lt;br&gt;wget -o /tmp/test2 &amp;quot;&lt;a href="http://192.168.1.30/goform/sysShootDown"&gt;http://&lt;font style="font-style: italic;"&gt;192.168.1.30&lt;/font&gt;/goform/sysShootDown&lt;/a&gt;&amp;quot;&lt;/blockquote&gt;Replace the ip &amp;amp; password according to your local setup. Put those commands in a script and you get a simple way to shutdown the unit remotely with a simple double-click. The problem with this code is that you have to put your admin-password in cleartext on your pc. I haven&amp;#39;t figured out yet how to circumvent the logon page to remove this security-issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4518315224402852197?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4518315224402852197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4518315224402852197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4518315224402852197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4518315224402852197'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/tweaking-ch3wnas-power-off.html' title='Tweaking the CH3WNAS Power Off'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1613013074820187781</id><published>2008-06-13T13:49:00.005+02:00</published><updated>2008-06-13T14:04:46.928+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Inside SpringSource Application Platform by Rob Harrop</title><content type='html'>The S2AP builds on OSGI and enriches it with a lot of functionality: e.g. combining relating bundles in libraries.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.springsource.com/products/suite/applicationplatform"&gt;SpringSource&lt;/a&gt; for details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1613013074820187781?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1613013074820187781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1613013074820187781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1613013074820187781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1613013074820187781'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-inside-springsource.html' title='SpringOne 2008 - Inside SpringSource Application Platform by Rob Harrop'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8246779198171496189</id><published>2008-06-13T13:26:00.010+02:00</published><updated>2008-06-17T07:37:00.975+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - What's new in Spring MVC 2.5 and beyond by Keith Donald</title><content type='html'>&lt;span style="font-size:130%;"&gt;@MVC (=Spring MVC 2.5)&lt;/span&gt;&lt;br /&gt;The @Controller is now the recommended way to build a controller in Spring-MVC. It allows any pojo to act as a MultiActionController, but without the need to extend any class. In a @Controller class you can group all logical actions together. The classes with the @Controller are found automatically through classpath scanning.&lt;br /&gt;&lt;br /&gt;The @Controller maximally relies on naming-conventions for your classes and methods to intercept URL-patterns (e.g. "Hotels.index()" is accessible through "/hotels/index"). Of course, this is customizable. All action methods have plain java types, but can also, if needed, ask for special parameters like Request, Response,... etc. @MVC detects those parameter types and injects them automatically.&lt;br /&gt;&lt;br /&gt;If the action-methods return a String, then this is assumed to be the view-identifier. If it's a non-string, the returned object is then made available for the view. The modelobject is named by using generics: e.g. List&amp;lt;hotel&gt; will be called 'hotelList' in the view.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Spring JS&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;enhance or decorate existing elements&lt;/li&gt;&lt;li&gt;render subfragments --&gt; uses &lt;a href="http://tiles.apache.org/"&gt;Apache Tiles&lt;/a&gt; for composition&lt;/li&gt;&lt;li&gt;use dojo query() to decorate multiple elements on a page.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;WebFlow 2&lt;/span&gt; (+ 'Deep Dive' session)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lighter, more consise syntax: e.g. first state is start-state by default.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ajax enabled through: ViewScope&lt;fragment&gt;&lt;view-state&gt;&lt;/view-state&gt;&lt;/fragment&gt;&lt;/li&gt;&lt;li&gt;extensive Expression Language use&lt;/li&gt;&lt;li&gt;abstract flows that can be extended&lt;/li&gt;&lt;li&gt;better JSF support&lt;/li&gt;&lt;li&gt;(new) best practice: put flow with associated template (e.g. jsp), messages and resources and in same directory --&gt; relies on simpler defaults&lt;/li&gt;&lt;li&gt;Spring Security&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;WebFlow 3&lt;/span&gt;&lt;br /&gt;Will add a site-definition language to mix non-webflow pages with webflows.&lt;br /&gt;&lt;br /&gt;&lt;/hotel&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8246779198171496189?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8246779198171496189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8246779198171496189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8246779198171496189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8246779198171496189'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-whats-new-in-spring-mvc.html' title='SpringOne 2008 - What&apos;s new in Spring MVC 2.5 and beyond by Keith Donald'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4742918749575140180</id><published>2008-06-13T13:08:00.005+02:00</published><updated>2008-06-13T13:58:08.343+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Using Spring Web Services 1.5 by Arjen Poutsma</title><content type='html'>Contract-first is considered best practice for designing a WebService:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;create a sample xml message&lt;/li&gt;&lt;li&gt;generate the xsd based on the xml: use &lt;a href="http://www.thaiopensource.com/relaxng/trang.html"&gt;trang&lt;/a&gt; or &lt;a href="http://www.altova.com/"&gt;XmlSpy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;tweak the xsd&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Define your Spring-WS endpoints as a POJO with @EndPoint:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;input message&lt;/li&gt;&lt;li&gt;start a business service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;result message&lt;/li&gt;&lt;/ul&gt;Let Spring generate the WSDL-boilerplate around your existing xsd and @Endpoints. For the xml parsing/generation, you can use SAX, DOM or Trax or use a more advanced (un)marshaller with the Spring OXM module: e.g. Jaxb2 or XmlBeans.&lt;br /&gt;&lt;br /&gt;For testing your WS, use &lt;a href="http://www.soapui.org/"&gt;soapUI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Other Spring WS features are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pluggable interceptors: logging, optional validating,...&lt;/li&gt;&lt;li&gt;client WS: WebServiceTemplate&lt;/li&gt;&lt;li&gt;WS over JMS or SMTP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OSGI Bundles&lt;/li&gt;&lt;li&gt;WS Security (see &lt;span class="a"&gt;&lt;a href="http://ws.apache.org/wss4j/"&gt;ws.&lt;b&gt;apache&lt;/b&gt;.org/&lt;b&gt;wss4j&lt;/b&gt;/&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;WS-Addressing&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4742918749575140180?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4742918749575140180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4742918749575140180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4742918749575140180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4742918749575140180'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-using-spring-web.html' title='SpringOne 2008 - Using Spring Web Services 1.5 by Arjen Poutsma'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8453311473204216198</id><published>2008-06-13T12:59:00.005+02:00</published><updated>2008-06-13T13:58:20.154+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Keynote 2 by Adrian Colyer and Rob Harrop</title><content type='html'>Spring Dynamic Modules (formerly called Spring OSGI) extensively builds on OSGI.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bundles can be loaded/replaced dynamically at runtime&lt;/li&gt;&lt;li&gt;multiple versions of bundles can coexist&lt;br /&gt;&lt;/li&gt;&lt;li&gt;with the import-library extension, you can import a &lt;span style="font-style: italic;"&gt;collection&lt;/span&gt; of bundles&lt;/li&gt;&lt;li&gt;most common OSGI bundles are available at &lt;a href="http://springsource.com/repository"&gt;http://springsource.com/repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;it provides IDE integration through Spring IDE&lt;/li&gt;&lt;/ul&gt;The SpringSource Application Platform builds further on the Dynamic Modules concept.&lt;br /&gt;Through 'personalities', the platform only loads what you really need:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;batch: no web / servlet api needed; only jar&lt;br /&gt;&lt;/li&gt;&lt;li&gt;online: servlet api , but perhaps no JMS etc...&lt;/li&gt;&lt;/ul&gt;--&gt; startup time / footprint is minimized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8453311473204216198?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8453311473204216198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8453311473204216198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8453311473204216198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8453311473204216198'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-keynote-2-by-adrian.html' title='SpringOne 2008 - Keynote 2 by Adrian Colyer and Rob Harrop'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5241237968115116603</id><published>2008-06-13T12:54:00.003+02:00</published><updated>2008-06-13T13:58:32.489+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Decorating Web Pages with AJAX using Spring JavaScript by Jeremy Grelle</title><content type='html'>Spring JS provides a javascript layer above &lt;a href="http://dojotoolkit.org/"&gt;Dojo&lt;/a&gt;. The Dojo javascript files are provided by Spring JS in a gzipped format. The dojo-integration is pluggable and will be enhanced with other javascript tool sets (e.g. &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The basic idea is to start from a fully-functional 'classical' webapp and progressively enhance the application with AJAX. But: even with javascript disabled, the page must remain functional, degrading back to it's basic behavior - really interesting, since I'm a big &lt;a href="http://noscript.net/"&gt;noscript&lt;/a&gt; fan :-).  The Ajax page-elements are defined with &lt;a href="http://tiles.apache.org/"&gt;Apache Tiles&lt;/a&gt; and served as a whole or through fragments depending on the request-type. WebFlow support serving separate 'fragments' in one state to allow for example pagination without page-refresh.&lt;br /&gt;&lt;br /&gt;Spring JS also provides a basic CSS from &lt;a href="http://www.contentwithstyle.co.uk/Articles/17/"&gt;Mike Stenhouse&lt;/a&gt; that provides a good basic look and feel that can be easily overridden.&lt;br /&gt;&lt;br /&gt;The Spring JS provides a JavaScript syntax to &lt;span style="font-weight: bold;"&gt;enhance&lt;/span&gt; existing page elements with e.g. client-side validation, tool tips or partial page-refreshes. Again, the idea is that even without Javascript, the page is still OK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5241237968115116603?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5241237968115116603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5241237968115116603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5241237968115116603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5241237968115116603'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-decorating-web-pages.html' title='SpringOne 2008 - Decorating Web Pages with AJAX using Spring JavaScript by Jeremy Grelle'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-7008864073013774040</id><published>2008-06-13T12:51:00.001+02:00</published><updated>2008-06-13T13:59:01.293+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Spring Transaction choices for Performance by Jürgen Höller</title><content type='html'>Tune with the @Transactional annotation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;propagation: "requires", "requires-new" or, the spring-specific, "nested" (=uses save points)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;isolation level: default: read committed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;set the readonly flag --&gt; hint for runtime optimization.&lt;/li&gt;&lt;/ul&gt;Prefer native JDBC transactions over XA transactions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;XA is difficult to setup&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;run a transaction coordinator&lt;/li&gt;&lt;li&gt;XA JDBC driver&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XA Message Broker&lt;/li&gt;&lt;li&gt;put the XA recovery log to a reliable log storage&lt;/li&gt;&lt;/blockquote&gt;&lt;li&gt;XA has a significant run time overhead&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;two phase commit&lt;/li&gt;&lt;li&gt;state tracking&lt;/li&gt;&lt;li&gt;recovery&lt;/li&gt;&lt;li&gt;on restart: complete pending commits/rollbacks --&gt; read the "reliable recovery log"&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;Check if you &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; need XA! Prefer the use of a native transaction or combine two native transaction, with some small extra safety provisions. E. g. Usually the "exactly once" guarantee of an XA JMS can be relaxed --&gt; use a native JMS transaction and detect duplicate messages. --&gt; much higher throughput.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-7008864073013774040?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/7008864073013774040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=7008864073013774040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7008864073013774040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/7008864073013774040'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-spring-transaction.html' title='SpringOne 2008 - Spring Transaction choices for Performance by Jürgen Höller'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6780108301178566181</id><published>2008-06-13T12:49:00.003+02:00</published><updated>2008-06-14T22:41:14.701+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Using Spring Security 2 by Mike Wiesner</title><content type='html'>What?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;formerly Acegi security -- Acegi is an abbreviation for &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;b&lt;span style="font-weight: bold;"&gt;C&lt;/span&gt;d&lt;span style="font-weight: bold;"&gt;E&lt;/span&gt;f&lt;span style="font-weight: bold;"&gt;G&lt;/span&gt;h&lt;span style="font-weight: bold;"&gt;I&lt;/span&gt; :-)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Authentication: URL (coarsegrained) or method (finegrained) authentication&lt;/li&gt;&lt;li&gt;ACL&lt;/li&gt;&lt;li&gt;LDAP support&lt;/li&gt;&lt;li&gt;SSO&lt;/li&gt;&lt;/ul&gt;How?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pluggable filters (through 1 delegating servletfilter); config in security.xml.&lt;br /&gt;Eg: LDAP, JAAS, OpenID plugins&lt;/li&gt;&lt;li&gt;repository for storing (e.g.) additional user details&lt;br /&gt;--&gt; implemented in e.g. JDBC or LDAP&lt;br /&gt;--&gt; combine multiple data sources&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SecurityInterceptor (AOP) for method-based security&lt;/li&gt;&lt;li&gt;@RolesAllowed annotation (JSR-250)&lt;/li&gt;&lt;/ul&gt;gotcha: The &lt;a href="http://images.google.be/imgres?imgurl=http://www.harmfrielink.nl/wiki/images/thumb/350px-RBAC_Core.jpg&amp;amp;imgrefurl=http://www.harmfrielink.nl/wiki/index.php/Harm:Community_Portal&amp;amp;h=152&amp;amp;w=350&amp;amp;sz=18&amp;amp;hl=nl&amp;amp;start=28&amp;amp;sig2=B1NQSVDnqT59q_VLwgtkEQ&amp;amp;um=1&amp;amp;tbnid=EV9XOTSsPJJPWM:&amp;amp;tbnh=52&amp;amp;tbnw=120&amp;amp;ei=4UBSSL6zGZuKwAGSodz8DQ&amp;amp;prev=/images%3Fq%3Drbac%26start%3D18%26ndsp%3D18%26um%3D1%26hl%3Dnl%26client%3Dfirefox-a%26rls%3Dorg.mozilla:en-US:official%26sa%3DN"&gt;RBAC pattern&lt;/a&gt; decouples users from permissions through roles: users &gt;-&amp;lt;roles&gt;-&amp;lt; permissions! Test on &lt;span style="font-weight: bold;"&gt;permissions&lt;/span&gt; and let the repository associate your user with the correct permissions through the assigned roles. Never test on roles in your code.&lt;br /&gt;&lt;br /&gt;Spring security also provides a authz-taglib for querying security-permissions while building a web page. This is helpful, but you still have to secure the basic URLs and methods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6780108301178566181?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6780108301178566181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6780108301178566181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6780108301178566181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6780108301178566181'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-using-spring-security-2.html' title='SpringOne 2008 - Using Spring Security 2 by Mike Wiesner'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1424486680427927711</id><published>2008-06-13T12:47:00.002+02:00</published><updated>2008-06-13T13:59:12.681+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Persistence Tuning for the Spring Environments by Tomas Risberg</title><content type='html'>a few best practices:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;get your DBA involved early&lt;/li&gt;&lt;li&gt;take time to &lt;span style="font-weight: bold;"&gt;design&lt;/span&gt; your db: tables, indexes, data types, normalize, partition,... all have impact on the performance&lt;br /&gt;&lt;/li&gt;&lt;li&gt;consider batch vs online. (consider native db-tools for loading)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit the number of  rows / columns per table -&gt; normalize&lt;/li&gt;&lt;li&gt;avoid nulls in where clause (nulls are not indexed!)&lt;/li&gt;&lt;li&gt;avoid starting with a wildcard in "like '%xyz'" tests (not indexed)&lt;/li&gt;&lt;li&gt;select the proper transaction manager: JTA and XA is the slowest solution --&gt; prefer plain JMS and native JDBC transactions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;avoid 'SERIALIZABLE' transaction isolation&lt;/li&gt;&lt;li&gt;use the readonly-flag (JDBC) whenever possible.&lt;/li&gt;&lt;li&gt;use a proper connection pool: &lt;a href="http://commons.apache.org/dbcp/"&gt;Apache DBCP&lt;/a&gt; or &lt;a href="http://www.rgagnon.com/javadetails/java-0545.html"&gt;Oracle Datasource Connection Pool&lt;/a&gt; (never use the 'standard' DriverManagerDatasource!)&lt;/li&gt;&lt;li&gt;early test your connections at startup: JDBC 4: isValid() or "select 1 from dual;"&lt;/li&gt;&lt;li&gt;use prepared statements --&gt; optimized by db&lt;/li&gt;&lt;li&gt;setFetchSize()&lt;/li&gt;&lt;li&gt;use a RowMapper of BatchJdbcTemplate&lt;/li&gt;&lt;li&gt;caching&lt;/li&gt;&lt;li&gt;sql tuning: run EXPLAIN and ANALYZE commands&lt;/li&gt;&lt;li&gt;tune Oracle memory: SGA (=global + sessions) and disk (blocks/files); put logs on separate volume&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1424486680427927711?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1424486680427927711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1424486680427927711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1424486680427927711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1424486680427927711'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-persistence-tuning-for.html' title='SpringOne 2008 - Persistence Tuning for the Spring Environments by Tomas Risberg'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6811003160135122745</id><published>2008-06-13T12:45:00.004+02:00</published><updated>2008-06-13T13:59:16.572+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Spring 2.5 on the way to 3.0 by Jürgen Höller</title><content type='html'>Part of this talk overlapped with Rod's talk, but Jürgen could go in more detail.&lt;div&gt;&lt;br /&gt;Spring is aligning itself with modern standards / APIs:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;JDK1.6 support: e.g. JDBC 1.4, with better LOB handling&lt;/li&gt;&lt;li&gt;support for JMX and MXBeans&lt;/li&gt;&lt;li&gt;AspectJ loadtime-weaving --&gt; avoids proxy pitfalls; support "new" operator&lt;br /&gt;&lt;/li&gt;&lt;li&gt;JEE5: Servlet API 2.5 &amp;amp; JAX-WS&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;"Self-describing classes" with annotations, removing config. As a general rule, annotations should be descriptive; even if a compiler ignores them (e.g. in tests), they should add documentation to the class:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;JSR 250 @PostConstruct &amp;amp; @PreDestroy: quick wins: explicit initializers&lt;/li&gt;&lt;li&gt;JSR250 @Resource on steroids: standard is JNDI-only, but spring also resolves spring-bean names.&lt;/li&gt;&lt;li&gt;@Autowired (&amp;amp; @Qualifier for more specific rules): elegant way to minimize xml-config, while keeping fine grained control over the DI. It's not an all-or-nothing: mix&amp;amp;match between xml and @autowired makes sense.&lt;/li&gt;&lt;li&gt;autodetectable components with: @Component. Without declaring a bean, the component automatically becomes available in the spring context. &lt;/li&gt;&lt;li&gt;@Configurable (AspectJ) --&gt; use regular new operator and benefit from Spring config! (load-time weaving)&lt;/li&gt;&lt;li&gt;"@MVC": No need to extend a MultiActionController anymore: with @Controller and @RequestMapping, the multi-action controller is now the recommended MVC-way, using simple POJOs. It relies extensively on standard naming of classes and methods to interpret URL paths. But, of course, this can be tweaked to the extreme. Even method-parameter names can be used for auto-passing request params if you built your classes with debug-info enabled. Gr8!&lt;/li&gt;&lt;li&gt;decide what you prefer: 'externalized' xml config complemented with annotations or fully annotated components with embedded config. As usual Spring doesn't impose one view. The xml-config can, for example, be interesting for a service layer, while the MVC-layer could prefer the annotations.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Spring 3.0&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Milestone 1: 8/2008 ???&lt;/li&gt;&lt;li&gt;Java5+: generics &amp;amp; varargs; &lt;/li&gt;&lt;li&gt;extensive use of Expression Language (cfr WebFlow)&lt;/li&gt;&lt;li&gt;remove deprecate stuff like commons attributes&lt;/li&gt;&lt;li&gt;WebSpere 6.1&lt;/li&gt;&lt;li&gt;Rest support&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6811003160135122745?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6811003160135122745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6811003160135122745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6811003160135122745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6811003160135122745'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-spring-25-on-way-to-30.html' title='SpringOne 2008 - Spring 2.5 on the way to 3.0 by Jürgen Höller'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4710857774326551957</id><published>2008-06-13T12:43:00.003+02:00</published><updated>2008-06-13T13:59:21.270+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Keynote by Rod Johnson</title><content type='html'>Spring 2.5&lt;ul&gt;&lt;li&gt;With the new @autowired annotation (+ @qualifier) , auto wiring is now finally usable in real systems. This can help reducing the configuration-overhead to a minimum while keeping maximal control over your code. Looks really great - if you can use Java 5.&lt;/li&gt;&lt;li&gt;JSR-250 support: Rod is less enthusiastic about the @Resource, but the @PostConstruct and @Predestroy annotations are highly recommended --&gt; no need to explicitly set the init-method in your spring configs anymore.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Testing&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;favor JUnit 4.4 or TestNG --&gt; simple annotations; no need for the abstract testing hierarchies.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Spring WebMVC &amp;amp; WebFlow&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;less configuration, more sensible defaults.&lt;/li&gt;&lt;li&gt;annotations instead of extending MultiActionController --&gt; controllers are less tied to Spring MVC&lt;/li&gt;&lt;li&gt;better integration with JSF (Spring Faces)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ajax support&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;support for 'fragments' in a view state: with &lt;a href="http://tiles.apache.org/"&gt;Apache Tiles&lt;/a&gt; all fragments are rendered as a whole (=classic refresh) or individually, triggered by Ajax events&lt;/li&gt;&lt;li&gt;introduction of a new ViewScope in WebFlow: objects in view-scope survive as long as you remain in the same state, surviving multiple Ajax requests. &lt;/li&gt;&lt;li&gt;Spring JavaScript is a new project that builds on &lt;a href="http://dojotoolkit.org/"&gt;Dojo&lt;/a&gt; to provide Ajax support. The accent is on 'clean degradation', where your webapp is fully functional, even with JavaScript turned off.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;SpringSource products&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;the SpringSource platform builds on OSGI to provide a highly modular framework. Very interesting ideas, but maybe a bit too revolutionary? &lt;/li&gt;&lt;li&gt;SpringIDE is now bundled in the Spring Tool Suite. This is an Eclipse distribution that comes with all plugins needed for Spring development embedded. One of the plugins is &lt;a href="http://www.eclipsecon.com/mylyn/"&gt;Mylin&lt;/a&gt; for 'task-based' development. The idea is to deliver a development environment that just works out of the box. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4710857774326551957?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4710857774326551957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4710857774326551957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4710857774326551957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4710857774326551957'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-keynote-by-rod-johnson.html' title='SpringOne 2008 - Keynote by Rod Johnson'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8323488848712562191</id><published>2008-06-13T12:41:00.005+02:00</published><updated>2008-06-13T13:59:25.016+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='springone08'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringOne'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>SpringOne 2008 - Welcome by Stephan Janssen</title><content type='html'>&lt;div&gt;I attended the &lt;a href="http://www.springone.com/"&gt;SpringOne 2008 conference&lt;/a&gt; in Antwerp, Belgium. As a professional Java EE designer and developer, the &lt;a href="http://springframework.org/"&gt;Spring framework&lt;/a&gt; brings a refreshing look to enterprise java development. My interest started with these two, now classical, Rod Johnson books:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1213341751&amp;amp;sr=8-1"&gt;J2EE Design and Development &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-One-One-Development-without/dp/0764558315/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1213341751&amp;amp;sr=8-2"&gt;J2EE Development without EJB&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;In this blog I'll summarize a few highlights of the first day of the conference.&lt;/div&gt;&lt;br /&gt;As usual, Stephan Janssen promoted his new &lt;a href="http://www.parleys.com/"&gt;Parleys.com&lt;/a&gt;, completely written in Flash Air &amp;amp; Flex (GWT and JavaFX versions also exist). Very impressive, especially the tools for creating online web-presentations with synced video, slides an outlines. The business model of parleys will be the 'rent-a-space'-model: any company will be able to buy some 'space' to publish their presentations, benefiting from the extensive and appealing tool set and from using the reliable systems and the huge bandwidth that parleys has. Hopefully, they'll continue to serve the podcast feeds as well.&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;The JavaPolis conference is now rebranded into &lt;a href="http://www.javoxx.com/"&gt;Javoxx&lt;/a&gt;. This is apparently to avoid trademark issues with Sun... Sad.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8323488848712562191?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8323488848712562191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8323488848712562191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8323488848712562191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8323488848712562191'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/springone-2008-welcome-by-stephan.html' title='SpringOne 2008 - Welcome by Stephan Janssen'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-4122423046978536896</id><published>2008-06-08T10:27:00.019+02:00</published><updated>2008-07-18T07:42:42.746+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='autostart'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='renderer'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='djmount'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>UPnP client under Ubuntu: djmount</title><content type='html'>While there are quite a few UPnP servers for Linux out there (MediaTomb, Rhythmbox Coherence Plugin,...), I couldn't find any serious UPnP client (or UPnP-&lt;span style="font-style: italic;"&gt;renderer&lt;/span&gt; in UPnP-speak) for Linux. I did find some promising libraries like the &lt;a href="http://sourceforge.net/projects/platinum/"&gt;C++ Platinum UPnP library&lt;/a&gt; (used in XBMC) or the &lt;a href="http://www.sbbi.net/site/upnp/"&gt;Java UPnpLib&lt;/a&gt;., but as far as I know no Linux MediaPlayer (like Rhythmbox or Amarok) uses those. There is also a UPnP 'controller', &lt;a href="http://www.cidero.com/"&gt;Cidero&lt;/a&gt; written in Java, but it has no playback capabilities. Cidero is very useful for debugging your UPnP setup, however.&lt;br /&gt;&lt;br /&gt;The only relevant linux UPnP-client is &lt;a href="http://djmount.sourceforge.net/"&gt;djmount&lt;/a&gt;, also used in &lt;a href="http://geexbox.org/"&gt;GeexBox&lt;/a&gt;. It is quite primitive: the UPnP devices are mounted as a filesystem. There are no debian packages available for djmount; you have to build it from the sources. The best copy/paste scenario for installing djmount on ubuntu is &lt;a href="http://linuxowns.wordpress.com/2008/06/05/accessing-upnp-server-from-ubuntu/"&gt;http://linuxowns.wordpress.com/2008/06/05/accessing-upnp-server-from-ubuntu/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately the last step '6', ie. autorunning djmount at logon doesn't work -- at least under Ubuntu 8.04. If you have a wlan, djmount fails when no network is up. As a comment by 'anonymous' points out, the Ubuntu NetworkManager fires the &lt;span style="font-family:courier new;"&gt;/etc/NetworkManager/dispatcher.d/01ifupdown&lt;/span&gt; script that runs (with &lt;span style="font-family:courier new;"&gt;run-parts&lt;/span&gt;) all scripts in &lt;span style="font-family:courier new;"&gt;/etc/network/if-up.d&lt;/span&gt; under root.&lt;br /&gt;&lt;br /&gt;The following steps do work for autostarting djmount under ubuntu:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;cd /etc/network/if-up.d&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gksudo gedit ./djmount&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;contents of script:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# Not for loopback!&lt;br /&gt;[ "$IFACE" != "lo" ] || exit 0&lt;br /&gt;&lt;br /&gt;modprobe fuse&lt;br /&gt;fusermount -u /media/upnp&lt;br /&gt;djmount -o allow_other /media/upnp&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;sudo chmod 755 ./djmount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo chown root ./djmount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo chgrp root ./djmount&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Djmount is now (re)mounted whenever the network is up. As stated previously, djmount is a very rudimentary solution because Rhythmbox for example will parse and analyse all mp3s again. Maybe the linux mediaplayers will integrate some of the existing UPnP Libraries in the future. This would be a welcome addition. I'm still hesitating between using djmount or using regular samba-mounts on my laptop.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;update 7/7/2008&lt;/span&gt; &lt;span style="font-style: italic;"&gt;: This fixed version runs djmount after the network is connected. No need for setuid or "sleep 30&lt;span style="font-style: italic;"&gt;" anymore.&lt;/span&gt;  (*) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(*) to remove the old version of the scripts this post in its first form suggested, you must:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;remove the upnp action from the System/Preferences/Sessions&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;sudo rm -f /usr/local/bin/djmount.sh&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;sudo chmod u-s /usr/local/bin/djmount&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;sudo chmod g-s /usr/local/bin/djmount&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-4122423046978536896?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/4122423046978536896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=4122423046978536896' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4122423046978536896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/4122423046978536896'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/upnp-client-under-ubuntu-djmount.html' title='UPnP client under Ubuntu: djmount'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-2795760496728471675</id><published>2008-06-05T16:50:00.032+02:00</published><updated>2008-09-08T09:12:19.998+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='mediatomb'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='grab&apos;n&apos;go'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless mediastore'/><title type='text'>Running Mediatomb on CH3WNAS natively!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;I managed to get MediaTomb running on the Grab'n'Go CH3WNAS &lt;span style="font-weight: bold;"&gt;without gentoo&lt;/span&gt;! There is no need to follow the gentoo steps in &lt;a href="http://forum.dsmg600.info/t916-Installing-mediatomb.html"&gt;http://forum.dsmg600.info/t916-Installing-mediatomb.html&lt;/a&gt; since the MediaTomb project itself provides binaries for  the PPC cpu with no dependencies. MediaTomb provides you a better uPnP Server than the original upnp in the firmware.&lt;br /&gt;&lt;br /&gt;Since uPnP has  &lt;a href="http://en.wikipedia.org/wiki/Universal_Plug_and_Play#Lack_of_Authentication"&gt;no authentication&lt;/a&gt;, make sure you run the CH3WNAS behind a NAT router!&lt;br /&gt;&lt;br /&gt;Those are the steps to setup MediaTomb on the CH3WNAS:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Download the mediatomb build for the ppc-platform:&lt;br /&gt;&lt;a href="http://downloads.sourceforge.net/mediatomb/mediatomb-static-0.11.0-r1-linux-uclibc-ppce300c2.tar.gz"&gt;http://downloads.sourceforge.net/mediatomb/mediatomb-static-0.11.0-r1-linux-uclibc-ppce300c2.tar.gz&lt;/a&gt;&lt;br /&gt;(or, to get the latest version, surf to &lt;a href="http://mediatomb.cc/pages/download#static"&gt;http://mediatomb.cc/pages/download#static&lt;/a&gt; and then click on the latest mediatomb-static*-ppc*tar.gz file)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;unzip the tar.gz and ftp (e.g. with gftp) the full mediatomb-directory to the CH3WNAS under HD_a2 (= &lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/&lt;/span&gt; on the device)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;telnet to the device (scroll down in my &lt;a href="http://michael-peeters.blogspot.com/2008/05/ch3wnas-grabngo-wireless-media-store.html"&gt;previous post for fun_plug'in and enabling telnet&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;make executable:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chmod 775 /mnt/HD_a2/mediatomb/usr/bin/mediatomb&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;chmod mediatomb.sh for easier ftp(*):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chmod 777 /mnt/HD_a2/mediatomb/mediatomb.sh&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;edit (e.g. with ftp mediatomb.sh to start mediatomb as daemon +fix LAUNCHDIR bug):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# if you want to launch this script from a different directory (for example&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# from an another init script or similar, set the LAUNCHDIR variable below&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# to the absolute path of the mediatomb.sh script&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 style="font-weight: bold;"&gt;#&lt;/span&gt;LAUNCHDIR=`pwd`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;LAUNCHDIR=/mnt/HD_a2/mediatomb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;rm -f $LAUNCHDIR/mediatomb.log&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;export MEDIATOMB_DATADIR="$LAUNCHDIR/usr/share/mediatomb"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;export MEDIATOMB_MAGIC_FILE="&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;$LAUNCHDIR/&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;usr/share/file/magic"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$LAUNCHDIR/usr/bin/mediatomb -m $LAUNCHDIR -f config&lt;span style="font-weight: bold;"&gt; -d -l $LAUNCHDIR/mediatomb.log&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;!! &lt;span style="font-weight: bold;"&gt;Remark&lt;/span&gt;: Make sure the script is Unix-encoded (single \n for line-breaks), otherwise you'll get a "&lt;span style="font-family:courier new;"&gt;-ash /mnt/hd_a2/mediatomb/mediatomb.sh&lt;/span&gt;" error. try this command to translate the linebreaks:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/busybox dos2unix /mnt/HD_a2/mediatomb/mediatomb.sh &gt; /mnt/HD_a2/mediatomb/mediatomb.sh.new&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  mv /mnt/HD_a2/mediatomb/mediatomb.sh.new /mnt/HD_a2/mediatomb/mediatomb.sh&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;a first run will create the &lt;span style="font-family:courier new;"&gt;config.xml&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/mediatomb/mediatomb.sh&lt;/span&gt;&lt;br /&gt;then run &lt;span style="font-family:courier new;"&gt;kill `pidof mediatomb`&lt;/span&gt; to stop the daemon&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;for easier editing of the config.xml (*):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chmod 666 /mnt/HD_a2/mediatomb/config/config.xml&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;now modify (ftp) the newly created &lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/mediatomb/config/config.xml&lt;/span&gt; in order to add a fixed ipadres or interface and optional port.&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;config...&gt;&lt;/config...&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;server&gt;&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;    &amp;lt;name&gt;Michael's MediaTomb&amp;lt;/name&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;udn&gt;...&amp;lt;/udn&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    &lt;span style="font-style: italic;"&gt;&amp;lt;ip&gt;192.168.1.30&amp;lt;/ip&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:courier new;" &gt;    &amp;lt;port&gt;50505&amp;lt;/port&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:courier new;" &gt;    &amp;lt;!-- or define port &amp;lt;interface&gt;br0&amp;lt;/interface&gt; --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;home&gt;/mnt/HD_a2/mediatomb/config&amp;lt;/home&gt;&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 style="font-family:courier new;"&gt;&amp;lt;protocolInfo extend="&lt;span style="font-weight: bold;"&gt;yes&lt;/span&gt;"/&gt;&lt;br /&gt;...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;!-- add extra mappings for jpeg / mpeg --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &amp;lt;map from="JPG" to="image/jpeg"/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &amp;lt;map from="jpg" to="image/jpeg"/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &amp;lt;map from="mpg" to="video/mpeg"/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &amp;lt;map from="m4a" to="audio/mpeg"/&gt;&lt;/span&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;The config.xml is well-documented at &lt;a href="http://mediatomb.cc/pages/documentation#id2536421"&gt;http://mediatomb.cc/pages/documentation#id2536421&lt;/a&gt;. Check out the docs in order to support for example PS3 connections.&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;for auto-startup, you can add the following lines your fun_plug:&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;#kill legacy upnp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;kill -9 `pidof upnp`&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#start mediatomb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;/mnt/HD_a2/mediatomb/mediatomb.sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can see, I still run firefly, because I couldn't get a uPnP client working in Ubuntu (Rhythmbox).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;after startup, connect to MediaTomb for configuring the directories to watch: (e.g.) &lt;a href="http://192.168.1.30:50505/"&gt;http://192.168.1.30:50505/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I'm not 100% sure that my config is OK, because I couldn't get Rhythmbox (+python-coherence) connecting to MediaTomb. I can see the uPnP broadcast messages from MediaTomb in WireShark and the &lt;a href="http://www.cidero.com/"&gt;Cidero java client&lt;/a&gt; can connect to MediaTomb and show a tree of media files. Cidero has no playback capabilities, so it's still possible I'll have to tweak the config a bit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;update 9/7/2008:&lt;/span&gt; fixed the config for serving jpeg (see comments below) / using correct 'magic' files. If you used a previous version of this post, delete the bogus &lt;span style="font-family:courier new;"&gt;config.xml&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;mediatomb.db*&lt;/span&gt; files and follow the steps starting with fixing &lt;span style="font-family:courier new;"&gt;mediatomb.sh&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;(*) Close this small security hole: revert to the original protection with a  chmod 440 or 550 afterwards. Of course, with telnet and upnp enabled, you'd better keep the CH3WNAS behind a NAT router.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-2795760496728471675?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/2795760496728471675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=2795760496728471675' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2795760496728471675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/2795760496728471675'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/running-mediatomb-on-ch3wnas-natively.html' title='Running Mediatomb on CH3WNAS natively!'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6274604886326013082</id><published>2008-06-02T20:57:00.006+02:00</published><updated>2008-12-08T23:34:25.022+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='medion'/><category scheme='http://www.blogger.com/atom/ns#' term='md96290'/><category scheme='http://www.blogger.com/atom/ns#' term='sound'/><category scheme='http://www.blogger.com/atom/ns#' term='surround'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Sound in Ubuntu</title><content type='html'>On one of my laptops (Medion MD96290) I  noticed that the sound wasn't working any more under Ubuntu 8.04. A while ago, I managed to get sound going in Ubuntu7.10 (&lt;a href="http://forum.ubuntu-fr.org/viewtopic.php?pid=1290804"&gt;http://forum.ubuntu-fr.org/viewtopic.ph&lt;/a&gt;&lt;a href="http://forum.ubuntu-fr.org/viewtopic.php?pid=1290804"&gt;p?pid=1290804&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;After some research (&lt;a href="http://ubuntuforums.org/archive/index.php/t-765671.html"&gt;http://ubuntuforums.org/archive/index.php/t-765671.html&lt;/a&gt;) I added the following line to &lt;span style="font-family:courier new;"&gt;/etc/modprobe.d/alsa_base&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;options snd-hda-intel model=6stack-dig&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This didn't help. In the same forum, they suggest to enable surround.  In Edit/Preferences you can display the Surround slider.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hw_h8sa20nM/SEREyc7Pn0I/AAAAAAAAF0M/aTE8tselDRQ/s1600-h/Screenshot-Volume+Control:+HDA+Intel+%28Alsa+mixer%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_hw_h8sa20nM/SEREyc7Pn0I/AAAAAAAAF0M/aTE8tselDRQ/s320/Screenshot-Volume+Control:+HDA+Intel+%28Alsa+mixer%29.png" alt="" id="BLOGGER_PHOTO_ID_5207362702695964482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And the magic happened: the sound workz :-). Setting up sound can be quite complex in Ubuntu...&lt;br /&gt;&lt;br /&gt;update 15/11/2008: I had to repeat the same actions after upgrading to Ubuntu 8.10: add line to alsa-base file and enable the surround slider.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6274604886326013082?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6274604886326013082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6274604886326013082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6274604886326013082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6274604886326013082'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/sound-in-ubuntu.html' title='Sound in Ubuntu'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hw_h8sa20nM/SEREyc7Pn0I/AAAAAAAAF0M/aTE8tselDRQ/s72-c/Screenshot-Volume+Control:+HDA+Intel+%28Alsa+mixer%29.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-5687426257656409868</id><published>2008-06-01T21:09:00.006+02:00</published><updated>2008-06-13T14:02:30.665+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rhythmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='standard'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='USB-player'/><title type='text'>Rhythmbox meets MP3 players</title><content type='html'>As stated in my previous post, FireFly is now serving my personal music collection from the CH3WNAS. This is nice for live streaming songs to Rhythmbox, but I also want to put some mp3s on my mp3 player.&lt;br /&gt;&lt;br /&gt;I have 2 USB mass storage mp3 player: the Creative Muvo 100 and the Samsung YP-S5 with Asiatic v1.50 firmware. Rhythmbox has very simple support for those USB devices: simply add a "&lt;span style="font-family:courier new;"&gt;.is_audio_player&lt;/span&gt;" file in the root of the mp3 player (see: &lt;a href="http://live.gnome.org/Rhythmbox/FAQ"&gt;http://live.gnome.org/Rhythmbox/FAQ)&lt;/a&gt;. The mp3 player is now automatically detected by Rhythmbox, and filling the player with songs from the FireFly server is as simple as drag'n'drop. The transfer is terribly slow, but that's probably because I'm connecting through wifi.&lt;br /&gt;&lt;br /&gt;For both the Muvo 100 and the YP-S5 I put the following file in the root: &lt;span style="font-family:courier new;"&gt;.is_audio_player&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;audio_folders=Music/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;folder_depth=2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;output_formats=audio/mpeg&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;As the FAQ above mentions, this overrides the HAL. I didn't check (yet) if the default HAL settings are OK for the 2 devices. Anyway, this works fine for me.&lt;br /&gt;&lt;br /&gt;Tip: with ctrl+H you can display the hidden files (=files that start with a dot '.') in Nautilus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-5687426257656409868?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/5687426257656409868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=5687426257656409868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5687426257656409868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/5687426257656409868'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/rhythmbox-meets-mp3-players.html' title='Rhythmbox meets MP3 players'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-1081608700092523041</id><published>2008-06-01T00:43:00.013+02:00</published><updated>2008-06-21T08:36:36.504+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daap'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='grab&apos;n&apos;go'/><category scheme='http://www.blogger.com/atom/ns#' term='FireFly'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless mediastore'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>CH3WNAS and FireFly</title><content type='html'>I managed to get FireFly running om my CH3WNAS. It's fairly easy if you're not afraid of the command line :-). I was wrong in my post yesterday: you do NOT need Gentoo in order to run firefly! Gentoo is apparently only needed if you want to build FireFly from the sources.&lt;br /&gt;&lt;br /&gt;The info in &lt;a href="http://dsmg600.info/howto:firefly"&gt;http://dsmg600.info/howto:firefly&lt;/a&gt; contains too much steps for the CH3WNAS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;This is the 'real' way to setup firefly on CH3WNAS: &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;enable telnet in fun_plug: &lt;a href="http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/"&gt;http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;download the latest build of FireFly for the CH3WNAS: &lt;a href="http://willie-wortel.nl/ch3wnas/ch3wnas-ff-1696.tgz"&gt;http://willie-wortel.nl/ch3wnas/ch3wnas-ff-1696.tgz&lt;/a&gt;. Unzip the build onto the NAS. (&lt;span style="font-family:courier new;"&gt;/mnt/HD_a2&lt;/span&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I renamed the main directory from &lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/firefly-1696&lt;/span&gt; to &lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/firefly&lt;/span&gt;. This is consequent with the config.&lt;/li&gt;&lt;li&gt;edit the following line in &lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/firefly/mtdaapd.conf&lt;/span&gt; file (e.g. with ftp):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mp3_dir = /mnt/HD_a2/&lt;span style="font-weight: bold;"&gt;media&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;--&gt; replace &lt;span style="font-family:courier new;"&gt;media&lt;/span&gt; with the root-directory to your mp3s.&lt;br /&gt;--&gt; check out the other options like default admin password if you wish.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;add the following lines to your fun_plug:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#kill legacy upnp (if you don't use the upnp ;-)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;kill -9 `pidof upnp`&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#start firefly&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rm -f /mnt/HD_a2/firefly/var/cache/mt-daapd/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/mnt/HD_a2/firefly/sbin/mt-daapd -c /mnt/HD_a2/firefly/mt-daapd.conf&lt;/span&gt;&lt;br /&gt;As you can see, I completely remove the DB before starting FireFly up. This is because while I was testing, the DB went corrupt after a reboot. The indexing at startup is very fast (4000 mp3s in 64 seconds) so this isn't really a problem, I think. Maybe there are more elegant ways to prevent corruption of the DB?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I tested it with Rhythmbox under Ubuntu 8.04 &amp;amp; it works like a charm :-). Make sure the "Multicast DNS service discovery" service (= mDNS) is running in Ubuntu (System/Administration/services) and that the "daap plugin" is checked in rhythmbox (edit/plugins). I'm seriously considering buying the Roku (Pinnacle) Soundbridge now...&lt;br /&gt;&lt;br /&gt;Other tips:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;check out the FireFly admin pages in your browser: go to port 3689 of your CH3WNAS:&lt;br /&gt;e.g. &lt;span style="font-family:courier new;"&gt;http://192.168.1.30:3689/&lt;/span&gt; user: admin; password: mt-daapd (default)&lt;/li&gt;&lt;li&gt;you can follow the logs in &lt;span style="font-family:courier new;"&gt;/var/log/mt-daapd.log&lt;/span&gt; (maybe not the best location :-/):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;tail -f /var/log/mt-daapd.log&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;thanks to &lt;a href="http://forums.fireflymediaserver.org/viewtopic.php?p=20282&amp;amp;sid=5b52a2902da3f5b3462bed5e1bc826fd"&gt;http://forums.fireflymediaserver.org/viewtopic.php?p=20282&amp;amp;sid=5b52a2902da3f5b3462bed5e1bc826fd&lt;/a&gt; and&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; &lt;a href="http://willie-wortel.nl/ch3wnas/"&gt;http://willie-wortel.nl/ch3wnas/&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;(updated: 12/6/2008: corrected willie-wortel links)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-1081608700092523041?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/1081608700092523041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=1081608700092523041' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1081608700092523041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/1081608700092523041'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/06/ch3wnas-and-firefly.html' title='CH3WNAS and FireFly'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-198969281082015941</id><published>2008-05-31T22:36:00.006+02:00</published><updated>2008-07-08T22:36:21.944+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YP-S5'/><category scheme='http://www.blogger.com/atom/ns#' term='podcasts'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='scratches'/><category scheme='http://www.blogger.com/atom/ns#' term='USB-player'/><title type='text'>YP-S5 and scratches</title><content type='html'>The Samsung YP-S5 is particularly prone to scratches. I bought it a month ago, and I have only used it for about 3-4 hours, but there are already a few scratches on the shiny plastic. I think I put the YP-S5 in my pocket next to my keys...&lt;br /&gt;&lt;br /&gt;I found there is a commercial shield to protect the YP-S5:&lt;a href="http://mp3playersandheadphones.co.uk/the-invisible-shield-samsung-yp-k5yp-s5-full-body-shield/"&gt; http://mp3playersandheadphones.co.uk/the-invisible-shield-samsung-yp-k5yp-s5-full-body-shield/&lt;/a&gt; and  &lt;a href="http://www.advancedmp3players.co.uk/shop/product_info.php?products_id=2339&amp;amp;aff=window"&gt;http://www.advancedmp3players.co.uk/shop/product_info.php?products_id=2339&amp;amp;aff=window&lt;/a&gt;. It's not clear to me if these products really help, without altering the the look &amp;amp; feel of the player. Time will tell...&lt;br /&gt;&lt;br /&gt;Concerning the V1.50 firmware, I don't see much improvement compared to the previous V1.07 firmware. It still takes about 10 seconds to startup the device.&lt;br /&gt;&lt;br /&gt;I like to listen to podcasts, but simply playing a few podcasts that are in different folders without manual intervention is almost impossible. I have also a simple Creative Muvo; the Muvo, with its smaller screen, is much better than the YP-S5 for playing podcasts. I like to play the podcasts in a sequential order, respecting the order of the podcasts that are under a directory-structure. On the YP-S5, I first tried to select all songs of style "podcast". But since not all podcasts set their style to 'podcast', it's not possible to use this attribute. I also tried the file-browser, but when the last song in a folder is reached it stops playing. It would have been better that the YP-S5  jumps to the next folder, and plays the first song in that folder.  The only workable solution I found is to go to 'Albums', 'all' and than search for the podcasts. Unfortunatly, music and podcast are not separated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-198969281082015941?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/198969281082015941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=198969281082015941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/198969281082015941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/198969281082015941'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/05/yp-s5-and-scratches.html' title='YP-S5 and scratches'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-8588710830072085978</id><published>2008-05-30T22:01:00.011+02:00</published><updated>2008-07-24T08:21:56.472+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='fun_plug'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='chroot'/><title type='text'>CH3WNAS and Gentoo under chroot</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;Update 28/6/2008&lt;/span&gt;: Although running gentoo is a nice exercise, there's no need for installing gentoo in order to run firefly or mediatomb. A this moment, I disabled gentoo on the ch3wnas. See &lt;a href="http://michael-peeters.blogspot.com/2008/06/running-mediatomb-on-ch3wnas-natively.html"&gt;http://michael-peeters.blogspot.com/2008/06/running-mediatomb-on-ch3wnas-natively.html&lt;/a&gt; and &lt;a href="http://michael-peeters.blogspot.com/search/label/ch3WNAS"&gt;http://michael-peeters.blogspot.com/search/label/ch3WNAS&lt;/a&gt; for other, more useful, hacks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I added the follwing line to my fun_plug script:&lt;br /&gt;&lt;/span&gt; &lt;pre&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;   kill -9 `pidof upnp`&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;  &lt;span style="font-size:100%;"&gt;This kills the standard shaky upnp server that is run on the CH3WNAS and constantly spawns errors in dmesg.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:monospace;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Next, I managed to run Gentoo under chroot on CH3WNAS. For this, I had to follow the steps on an excellent wiki: &lt;a href="http://dsmg600.info/howto:chroot_gentoo"&gt;http://dsmg600.info/howto:chroot_gentoo&lt;/a&gt;. After ftping (i use gFtp) the files to the device and  telneting to it, it's simply a matter of copy pasting the commands one-by-one. The 2 bzcat commands take some time to complete.&lt;br /&gt;&lt;br /&gt;As I understand, the main purpose of running Gentoo under chroot is to have a recent Linux that can start modern binaries like dropbear (ssh), &lt;/span&gt;FireFly(iTunes specific daap), MediaTomb (uPnP), MLDonkey (torrent client), lighthttp (http server),...&lt;br /&gt;&lt;br /&gt;For now, I simply have tried the bash:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   /mnt/HD_a2/chroot /mnt/HD_a2/gentoo /bin/bash&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is currently my fun_plug:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote style="font-family: courier new;"&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;dmesg &gt; /mnt/HD_a2/dmesg.out&lt;br /&gt;&lt;br /&gt;if [ ! -e /mnt/HD_a2/ash ]&lt;br /&gt;then&lt;br /&gt;ln -s /mnt/HD_a2/busybox /mnt/HD_a2/ash&lt;br /&gt;fi&lt;br /&gt;if [ ! `grep root /etc/shadow` ]&lt;br /&gt;then&lt;br /&gt;echo kontroll.`grep admin /etc/shadow` &gt;&gt; /etc/shadow&lt;br /&gt;/mnt/HD_a2/sed -i -e 's/kontroll.admin/root/' /etc/shadow&lt;br /&gt;fi&lt;br /&gt;/mnt/HD_a2/sed -i -e 's/root:.*/root:x:0:0:Linux User,,,:\/:\/mnt\/HD_a2\/ash/' /etc/passwd&lt;br /&gt;cd /dev &amp;amp;&amp;amp; /mnt/HD_a2/busybox makedevs ptyp c 2 0 0 9&lt;br /&gt;cd /dev &amp;amp;&amp;amp; /mnt/HD_a2/busybox makedevs ttyp c 3 0 0 9&lt;br /&gt;/mnt/HD_a2/busybox telnetd &amp;amp;&lt;br /&gt;&lt;br /&gt;#kill legacy upnp&lt;br /&gt;kill -9 `pidof upnp`&lt;br /&gt;&lt;br /&gt;#prepare gentoo stuff&lt;br /&gt;mount -o bind /dev /mnt/HD_a2/gentoo/dev&lt;br /&gt;mount -t proc none /mnt/HD_a2/gentoo/proc&lt;br /&gt;cp /etc/resolv.conf /mnt/HD_a2/gentoo/etc/&lt;br /&gt;&lt;br /&gt;#dropbear (ssh) stuff (not operational yet)&lt;br /&gt;#ln -s /dev/urandom /dev/random&lt;br /&gt;#/mnt/HD_a2/chroot /mnt/HD_a2/gentoo /usr/sbin/dropbear&lt;br /&gt;&lt;br /&gt;dmesg &gt; /mnt/HD_a2/dmesg.out2&lt;br /&gt;&lt;/blockquote&gt;I tried out dropbear (ssh), but I couldn't figure out what user/password to use when ssh-ing to the CH3WNAS. I did some unsuccessful experiments with copy/pasting the /etc/shadow and /etc/passwd under /mnt/HD_a2/gentoo. --&gt; I'll look at it later, but now I have gentoo as a basis to try out other stuff.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Those hacks make the CH3WNAS very appealing for the more advanced user.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;An idea for my future experiments: tweak the power button&lt;br /&gt;&lt;a href="http://forum.dsmg600.info/t955-chkbutton-replacement.html"&gt;http://forum.dsmg600.info/t955-chkbutton-replacement.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:monospace;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-8588710830072085978?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/8588710830072085978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=8588710830072085978' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8588710830072085978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/8588710830072085978'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/05/ch3wnas-and-gentoo-under-chroot.html' title='CH3WNAS and Gentoo under chroot'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6827292340843145586</id><published>2008-05-29T20:15:00.010+02:00</published><updated>2008-12-08T23:34:25.198+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='busybox'/><category scheme='http://www.blogger.com/atom/ns#' term='fun_plug'/><category scheme='http://www.blogger.com/atom/ns#' term='NAS'/><category scheme='http://www.blogger.com/atom/ns#' term='ch3WNAS'/><category scheme='http://www.blogger.com/atom/ns#' term='grab&apos;n&apos;go'/><category scheme='http://www.blogger.com/atom/ns#' term='wirless mediastore'/><title type='text'>CH3WNAS: Grab'n'Go Wireless Media Store</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hw_h8sa20nM/SD71gc7PnzI/AAAAAAAAF0E/1Wlro0Xl4b0/s1600-h/conceptronic_CH3WNAS.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_hw_h8sa20nM/SD71gc7PnzI/AAAAAAAAF0E/1Wlro0Xl4b0/s320/conceptronic_CH3WNAS.jpg" alt="" id="BLOGGER_PHOTO_ID_5205868157156171570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One month ago, I bought a Conceptronic WiFi 500 GB Grab'n'Go Wireless Media Store (CH3WNAS) at about 130 EUR. This is cheap if you look at the features and compare it with other NAS-devices.&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;br /&gt;Check out the &lt;a href="http://www.conceptronic.net/site/desktopdefault.aspx?tabindex=0&amp;amp;tabid=200&amp;amp;Cat=60&amp;amp;grp=6030&amp;amp;ar=452&amp;amp;Prod_ID=2048&amp;amp;Prod=CH3WNAS&amp;amp;subid=559"&gt;Conceptronic's website&lt;/a&gt; for more info.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;I found a few minor glitches in the device. Those are not blocking in my case:&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;There is no way to turn the device automatically on after a power-cut. You have to press 'power on' button manually for starting the device up. The FAQ states this is hardware-related and can not be fixed. This is unfortunate if you want to reach your NAS while you're on holiday, or, if you want to routinely cut off the power to remove latent power consumption.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;For a 'clean' shutdown, you have to keep the power-button pressed during 5s. At first, this gives the impression the device hangs and you have to force the shutdown -- at least that's how I shutdown a laptop when it hangs. This is also documented in the FAQ. I couldn't find any 'chkfs' recommendations in the manual to make sure the data is save.&lt;br /&gt;&lt;br /&gt;There is also a 'shutdown' button in the web-interface that performs a clean remote shutdown. This looks more like a regular 'shutdown' command.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I was planning to use the CH3WNAS to replace my wifi router. Unfortunately, it has no support for NAT (and similar standard router-functionalities). Particularly with the built-in UPnP server, it's wise to keep the device behind your NAT. --&gt; I'll keep my router in place to protect my home network; since the router itself has wifi (like almost any router nowadays), the Wifi server feature of the CH3WNAS is less appealing. Of course, the CH3WNAS could still act as a range extender if I install a long LAN-cable.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I connected a USB drive into the CH3WNAS to perform automatic backups. The web-interface has nice provisions for backing up. This is called 'scheduled downloads'. Not very intuitive, but after selecting 'folder' and clicking on 'local', the device does what it's expected to do: backup.&lt;br /&gt;&lt;br /&gt;Unfortunately, the support for NTFS is very limited: the NTFS drive in the USB port is mounted as readonly and all folders/filenames are in uppercase. I reformatted the drive to FAT32 and now the device is supported correctly. A bit disappointing when you're used to Ubuntu and its out-of-the box ntfs-3g support, but I suppose the Linux-version on the device is a bit too old for NTFS (or the resources are too limited?).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are reports that the built-in UPnP Server is primitive, but I couldn't verify this. I couldn't get the UPnP to work correctly from within Ubuntu.&lt;/li&gt;&lt;/ul&gt;The good news is that the CH3WNAS is a linux-device! There are a lot of tweaks out there:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; enable telnet (make sure you're behind a NAT router: &lt;a href="http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/"&gt;http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The DSM-G600 appears to be a very similar device to the CH3WNAS. That's a good start for interesting hacks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://forum.dsmg600.info/viewforum.php?id=2"&gt;http://forum.dsmg600.info/viewforum.php?id=2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dsmg600.info/"&gt;http://dsmg600.info/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;I'm considering installing gentoo (under chroot) and Firefly, or better(?) MediaTomb. Those look like a killer-solution. --&gt; next blog :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6827292340843145586?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6827292340843145586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6827292340843145586' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6827292340843145586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6827292340843145586'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/05/ch3wnas-grabngo-wireless-media-store.html' title='CH3WNAS: Grab&apos;n&apos;Go Wireless Media Store'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hw_h8sa20nM/SD71gc7PnzI/AAAAAAAAF0E/1Wlro0Xl4b0/s72-c/conceptronic_CH3WNAS.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6922719475190616477.post-6411324155784590305</id><published>2008-05-28T22:14:00.007+02:00</published><updated>2008-07-08T22:35:41.967+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YP-S5'/><category scheme='http://www.blogger.com/atom/ns#' term='UMS'/><category scheme='http://www.blogger.com/atom/ns#' term='MSC'/><category scheme='http://www.blogger.com/atom/ns#' term='MTP'/><category scheme='http://www.blogger.com/atom/ns#' term='USB-player'/><title type='text'>Switch the YP-S5 from MTP to UMS</title><content type='html'>I managed to switch the YP-S5 from MTP to UMS by installing the Korean firmware v1.50. I don't understand why North America and Europe are stuck with the MTP version while Asia and south America get the UMS version. Perhaps Samsung wants to experiment with DRM on a limited scale?&lt;br /&gt;&lt;br /&gt;MTP (Media Transport Protocol specific for Windows Mediaplayer) is really not user-friendly:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    Doesn't work under macos or linux (support through libmtp is still limited). Ubuntu is my main OS .&lt;/li&gt;&lt;li&gt;I couldn't get it work under XP ("error mtp device")&lt;/li&gt;&lt;li&gt;    Does work under Vista, but only after installing the latest patches.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use at your own risk -- not sure if this voids your warrranty&lt;/span&gt;. But the YP-S5 did survive my unsuccesful attempts with the previous firmware v1.07.&lt;br /&gt;&lt;br /&gt;Download the asiatic V1.50 version from Samsung Singapore (it's an English site):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.samsung.com/sg/support/download/supportDown.do?group=&amp;amp;type=&amp;amp;subtype=&amp;amp;model_nm=YP-S5QW&amp;amp;language=&amp;amp;cate_type=all&amp;amp;dType=D&amp;amp;mType=FM&amp;amp;vType=L&amp;amp;prd_ia_cd=03040200&amp;amp;acc_ia_fl=N&amp;amp;disp_nm=YP-S5QW"&gt;http://www.samsung.com/sg/support/download...disp_nm=YP-S5QW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unzip the file and under Vista, put the S5.rom and Config.dat in the root of the S5. I also put he Config.dat file in the subdirectory SYSTEM/ -- not sure if this is needed, but it doesn't harm... I had some trouble with copy/pasting the files. Drag and drop did however work under Vista.&lt;br /&gt;&lt;br /&gt;After unconnecting and starting up the YP-S5, the new firmware is installed. The display shows up in Korean. This is quickly fixed in the Settings/Language menu. The first submenu item allows you to switch the language.&lt;br /&gt;&lt;br /&gt;The S5 is now automatically supported under Ubuntu, but with a small issue: two S5 devices are mounted. No big deal...&lt;br /&gt;&lt;br /&gt;See also &lt;a href="http://www.anythingbutipod.com/forum/showthread.php?t=30155"&gt;http://www.anythingbutipod.com/forum/showthread.php?t=30155&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPDATE: Maybe it's not necessary to start from the Asiatic version; the 'original' V1.50 MTP version can also be switched by altering the Config.dat - this info seems unverified, however: &lt;a href="http://mp3.generationmp3.com/2008/05/25/mise-a-jour-et-ums-pour-le-samsung-s5/" target="_blank"&gt;http://mp3.generationmp3.com/2008/05...le-samsung-s5/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;UPDATE 29/6/2008: apparently, you need a USB 2.0 connection to your YP-S5. See the comment below&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6922719475190616477-6411324155784590305?l=michael-peeters.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michael-peeters.blogspot.com/feeds/6411324155784590305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6922719475190616477&amp;postID=6411324155784590305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6411324155784590305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6922719475190616477/posts/default/6411324155784590305'/><link rel='alternate' type='text/html' href='http://michael-peeters.blogspot.com/2008/05/switch-yp-s5-from-mtp-to-ums.html' title='Switch the YP-S5 from MTP to UMS'/><author><name>Michaël Peeters</name><uri>https://profiles.google.com/106137778924952414801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-BEasi1AAzwM/AAAAAAAAAAI/AAAAAAAAAAA/PQNIb6PPrjU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry></feed>
