<?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-8474871406958844140</id><updated>2012-01-26T18:29:33.085Z</updated><category term='teamwork'/><category term='flash'/><category term='bpel'/><category term='key/value storage'/><category term='stackoverflowerror'/><category term='java io'/><category term='free'/><category term='soa'/><category term='strategy'/><category term='selenium'/><category term='upgrade'/><category term='pmd'/><category term='second level cache'/><category term='criteria'/><category term='jabber xmpp'/><category term='data portability'/><category term='cglib'/><category term='extension'/><category term='15july-21july2007'/><category term='distance'/><category term='yap'/><category term='pns'/><category term='openajax'/><category term='same origin policy'/><category term='android developer console'/><category term='segmented button'/><category term='code generation'/><category term='maintenance policy'/><category term='facebook'/><category term='flashing'/><category term='versioncode'/><category term='google wave'/><category term='java'/><category term='xsd'/><category term='webservices'/><category term='facebook connect'/><category term='guid'/><category term='24february-02march2008'/><category term='22july-28july2007'/><category term='unittesting'/><category term='social web'/><category term='root mounts'/><category term='24june-30june2007'/><category term='mvc'/><category term='astoria'/><category term='load balancing'/><category term='html formatting'/><category term='functional testing'/><category term='subdomains'/><category term='dime'/><category term='design'/><category term='governance'/><category term='browser performance'/><category term='activity lifecycle'/><category term='ConcurrentModificationException'/><category term='ubuntu'/><category term='compiler'/><category term='sha1'/><category term='mail'/><category term='cryptography'/><category term='introduction'/><category term='discoverability'/><category term='many to many'/><category term='back key'/><category term='messaging'/><category term='canonical message model'/><category term='eosl'/><category term='search engine'/><category term='spring mvc'/><category term='serialization'/><category term='geeks'/><category term='10december-15december2007'/><category term='james gosling'/><category term='application server'/><category term='composite key'/><category term='jars'/><category term='bigtable'/><category term='evaluation'/><category term='description'/><category term='ios'/><category term='plugin'/><category term='pdt'/><category term='versionname'/><category term='browser security'/><category term='preformance'/><category term='tester'/><category term='tuning'/><category term='16december-23december2007'/><category term='eclipse europa'/><category term='code'/><category term='apache foundation'/><category term='iplayer'/><category term='transactions strategy'/><category term='social network'/><category term='data binding'/><category term='applicationn layering'/><category term='cto'/><category term='eclipse 3.3'/><category term='asf'/><category term='geronimo'/><category term='cons'/><category term='java appstore'/><category term='main'/><category term='scm'/><category term='yslow'/><category term='web framework'/><category term='technical debt'/><category term='misconceptions'/><category term='gpl3'/><category term='jboss application server'/><category term='retag'/><category term='assocation'/><category term='forking'/><category term='jruby'/><category term='31march-06april2008'/><category term='caching'/><category term='wave protocol'/><category term='webpage'/><category term='mylar'/><category term='description field'/><category term='segmented control'/><category term='mobile'/><category term='solr'/><category term='push notification service'/><category term='swipe'/><category term='continuous integration'/><category term='installation'/><category term='feisty fawn'/><category term='10june-16june2007'/><category term='firebug'/><category term='junit'/><category term='donate'/><category term='storage'/><category term='struts2'/><category term='boilerplate'/><category term='s2ap'/><category term='smash'/><category term='programming errors'/><category term='xmlhttprequest'/><category term='density'/><category term='encryption'/><category term='oracle open world'/><category term='screensizes'/><category term='web 2.0'/><category term='07april-12april2008'/><category term='luntbuild'/><category term='shift'/><category term='sun'/><category term='cloud tools'/><category term='sca'/><category term='performance'/><category term='cio'/><category term='clonezilla'/><category term='generator'/><category term='safari'/><category term='asp'/><category term='deployment tips'/><category term='xml'/><category term='scala'/><category term='worst practice'/><category term='large projects'/><category term='esb'/><category term='toolbar'/><category term='pros'/><category term='jme'/><category term='UISegmentedControl'/><category term='technology trends'/><category term='software architecture types'/><category term='model driven development'/><category term='adf'/><category term='android'/><category term='friend connect'/><category term='integration'/><category term='firefox 3'/><category term='mtbf'/><category term='software'/><category term='persistence'/><category term='errors'/><category term='memcached'/><category term='swf'/><category term='23september-29september2007'/><category term='topology'/><category term='ria'/><category term='nice URLs'/><category term='chess'/><category term='generation'/><category term='itunes'/><category term='open stack'/><category term='servlet 3.0'/><category term='dragonfly'/><category term='google app engine'/><category term='yahoo'/><category term='17december-29december2007'/><category term='jcr'/><category term='mobile website'/><category term='appfuse'/><category term='jira'/><category term='thumbnails'/><category term='bitmaps'/><category term='javaone 2009 summary'/><category term='stack overflow'/><category term='watch out'/><category term='gpl'/><category term='improvement tips'/><category term='online editor'/><category term='ws-cdl'/><category term='download'/><category term='java nio'/><category term='2D'/><category term='amazon'/><category term='monitor'/><category term='windows'/><category term='background'/><category term='oauth'/><category term='09september-16september2007'/><category term='17march-24march2008'/><category term='addon'/><category term='test framework'/><category term='openhub'/><category term='cassandra'/><category term='google analytics'/><category term='cvs'/><category term='29july-04august2007'/><category term='patterns'/><category term='process'/><category term='lwuit'/><category term='synapse'/><category term='hype cycle'/><category term='monitoring'/><category term='bbc'/><category term='website'/><category term='instant messaging'/><category term='bluetooth'/><category term='high volume'/><category term='web2.0'/><category term='sns'/><category term='https'/><category term='mozilla'/><category term='myths'/><category term='guidelines'/><category term='open source software'/><category term='tools'/><category term='s3'/><category term='ria frameworks'/><category term='bugs'/><category term='dtd'/><category term='yql'/><category term='case studies'/><category term='rpx'/><category term='threading'/><category term='opensocial'/><category term='chrome'/><category term='user friendly URLs'/><category term='restarting'/><category term='TDD'/><category term='resource management'/><category term='git'/><category term='320x480'/><category term='oexchange'/><category term='11g'/><category term='social graph'/><category term='android market'/><category term='reliability'/><category term='jta'/><category term='xss'/><category term='redeploying'/><category term='actionscript'/><category term='mashup'/><category term='jee'/><category term='mobile friendliness'/><category term='2008'/><category term='ondestroy'/><category term='dynamic scripting languages'/><category term='anti patterns'/><category term='4.5.0'/><category term='seam'/><category term='aop'/><category term='sproc'/><category term='22october-28october2007'/><category term='2007'/><category term='number of downloads'/><category term='mxhr'/><category term='spring web flow'/><category term='37signals'/><category term='webservice'/><category term='rest'/><category term='reusable code'/><category term='parallel processing'/><category term='recommendations engine'/><category term='problems'/><category term='report'/><category term='fat client'/><category term='javascript partitioning'/><category term='joda time'/><category term='mobile web app'/><category term='sharding'/><category term='content management systems'/><category term='oocss'/><category term='education'/><category term='nio'/><category term='support'/><category term='skills'/><category term='mep'/><category term='19may-25may2008'/><category term='ebay'/><category term='nightly builds'/><category term='solutions'/><category term='echo2'/><category term='session lost'/><category term='personalisation'/><category term='splash'/><category term='acquisitions'/><category term='hippo cms'/><category term='20may-26may2007'/><category term='software developer'/><category term='osb'/><category term='togaf'/><category term='continuum'/><category term='test driven development'/><category term='06november-11november2007'/><category term='mmog'/><category term='cross domain'/><category term='learning'/><category term='vaadin'/><category term='markup'/><category term='usability'/><category term='database architecture'/><category term='pitfalls'/><category term='friendconnect'/><category term='bruce schneier'/><category term='cloud computing'/><category term='air'/><category term='mylyn'/><category term='null references'/><category term='deployment'/><category term='interoperability'/><category term='cmm'/><category term='quiz'/><category term='03september-08september2007'/><category term='gae'/><category term='tip'/><category term='vmware workstation'/><category term='ruby on rails'/><category term='infrastructure'/><category term='handson'/><category term='diagram'/><category term='example code'/><category term='paypal'/><category term='hardening'/><category term='identity'/><category term='textview'/><category term='mobile web'/><category term='duplicate code'/><category term='cyclic dependency'/><category term='canonical model'/><category term='efficient java code'/><category term='dateformat'/><category term='identity management'/><category term='validators'/><category term='web 2.0 diagrams'/><category term='owf'/><category term='gwt'/><category term='camel'/><category term='open source'/><category term='apache cxf'/><category term='mapreduce'/><category term='validation'/><category term='mvc1'/><category term='licensing verification library'/><category term='11february-17february2008'/><category term='gfs'/><category term='insight'/><category term='firefox'/><category term='ejb'/><category term='spring'/><category term='bjarne stroustrup'/><category term='27may-02june2007'/><category term='system backup'/><category term='eclipse'/><category term='zx-81'/><category term='touchless'/><category term='software engineer'/><category term='mvc2'/><category term='resource bundles'/><category term='maintainable code'/><category term='ami'/><category term='certificates'/><category term='foursquared'/><category term='threads'/><category term='refactoring'/><category term='higgins'/><category term='vmware'/><category term='security'/><category term='file locking'/><category term='comparable devices'/><category term='continuous'/><category term='12may-18may2008'/><category term='inflate'/><category term='rsscloud'/><category term='dataload'/><category term='maven2'/><category term='game'/><category term='improvements'/><category term='flex'/><category term='details'/><category term='implementations'/><category term='chrome os'/><category term='hands-on'/><category term='additional column'/><category term='amazon machine image'/><category term='sign'/><category term='digg'/><category term='mobile enterprise platform'/><category term='jboss esb'/><category term='pubsubhubbub'/><category term='reference'/><category term='scroll'/><category term='version control'/><category term='14october-21october2007'/><category term='jms'/><category term='architecture'/><category term='vcs'/><category term='app store'/><category term='adf faces'/><category term='12may-19may2007'/><category term='wiki'/><category term='five months'/><category term='workflow'/><category term='apple'/><category term='oracle open world summary'/><category term='64bit'/><category term='woa'/><category term='ebr'/><category term='ipad'/><category term='distributed database'/><category term='yos'/><category term='agile'/><category term='searchable'/><category term='sdk'/><category term='cms'/><category term='issues'/><category term='javaone'/><category term='enterprise'/><category term='kanban'/><category term='decade'/><category term='bugtracking'/><category term='gigaspaces xap'/><category term='16june-22june2008'/><category term='ebs'/><category term='browser tabs'/><category term='code review'/><category term='jee 6'/><category term='mootools'/><category term='vulerability'/><category term='dependency injection'/><category term='hibernate'/><category term='branching'/><category term='soap'/><category term='data availability'/><category term='mixi'/><category term='programming'/><category term='syslog'/><category term='protocol buffers'/><category term='decoupling'/><category term='mapping'/><category term='canonical'/><category term='4.5'/><category term='jee 5'/><category term='versioning'/><category term='vmware workstation 6.02'/><category term='xfn'/><category term='software architecture'/><category term='wtp'/><category term='apollo 11'/><category term='contacts API'/><category term='jboss'/><category term='toolkit'/><category term='web application'/><category term='page load'/><category term='clustering'/><category term='sonar'/><category term='media types'/><category term='static analysis'/><category term='webapplication'/><category term='outstanding issues'/><category term='taste'/><category term='privacy'/><category term='linkedin'/><category term='lbs'/><category term='asynchronous processing'/><category term='software development'/><category term='sqlserver'/><category term='vertical scaling'/><category term='mouse'/><category term='push'/><category term='14january-20january2008'/><category term='richfaces'/><category term='email'/><category term='myspace'/><category term='xhtml'/><category term='development environment'/><category term='mdd'/><category term='closures'/><category term='maturity'/><category term='difference'/><category term='i18n'/><category term='visualize'/><category term='uuid'/><category term='factory helper'/><category term='engineering'/><category term='best practices'/><category term='distributed applications'/><category term='mobile internet'/><category term='castor'/><category term='poco'/><category term='concurrency'/><category term='internet OS'/><category term='which'/><category term='internet operating system'/><category term='jericho'/><category term='groovy'/><category term='flickr'/><category term='25march-30march2008'/><category term='saas'/><category term='fix'/><category term='google browser'/><category term='performance optimization'/><category term='j2ee'/><category term='mahout'/><category term='json'/><category term='svn'/><category term='google'/><category term='space'/><category term='ruby'/><category term='virtualization'/><category term='multi-touch'/><category term='jazz'/><category term='resolutions'/><category term='builder pattern'/><category term='07january-13january2008'/><category term='poja'/><category term='status'/><category term='htc wildfire'/><category term='template'/><category term='css reset'/><category term='transaction models'/><category term='guice'/><category term='frameworks'/><category term='survey'/><category term='keyboard api'/><category term='best practice'/><category term='animation'/><category term='laszlo'/><category term='clickjacking'/><category term='maintenance'/><category term='19november-25november2007'/><category term='programming language'/><category term='roi'/><category term='lessons learned'/><category term='elastic block store'/><category term='tricks'/><category term='silverlight'/><category term='marketshare'/><category term='basecamp'/><category term='java resources'/><category term='api design'/><category term='html parsing'/><category term='libraries'/><category term='viewflipper'/><category term='jquery'/><category term='when'/><category term='container'/><category term='service oriented architecture'/><category term='twitter'/><category term='hardware architecture'/><category term='standards'/><category term='simpledb'/><category term='horizontally'/><category term='out of memory'/><category term='bpm'/><category term='drawables'/><category term='documentation'/><category term='html5'/><category term='rup'/><category term='business process modeling'/><category term='profiler'/><category term='gridview'/><category term='takeover'/><category term='annotations'/><category term='methodology'/><category term='mobile phones'/><category term='spring integration'/><category term='distributed systems'/><category term='upgrading'/><category term='library'/><category term='hadoop'/><category term='grails'/><category term='jni'/><category term='css'/><category term='this week'/><category term='osde'/><category term='cqrs'/><category term='28january-10february2008'/><category term='sop'/><category term='03june-09june2007'/><category term='testing tools'/><category term='mysql'/><category term='jre'/><category term='webcam'/><category term='30september-07october2007'/><category term='gtw'/><category term='03december-09december2007'/><category term='intellij'/><category term='galleryview'/><category term='18february-23february2008'/><category term='OpenFire'/><category term='jpa'/><category term='relational databases'/><category term='code quality'/><category term='concepts'/><category term='ssl'/><category term='modeling'/><category term='redundancy'/><category term='w3c'/><category term='wso2'/><category term='cachr'/><category term='csrf'/><category term='obfuscation'/><category term='cleanup'/><category term='design patterns'/><category term='uml 2.0'/><category term='roo'/><category term='jdbc'/><category term='javascript'/><category term='scanners'/><category term='xmlbeans'/><category term='xpi'/><category term='good code'/><category term='youtube'/><category term='deadlocks'/><category term='java classes'/><category term='dynamo'/><category term='outage'/><category term='owasp'/><category term='ci'/><category term='redundancy checker'/><category term='oha'/><category term='social platform'/><category term='grid view'/><category term='screenshots'/><category term='operating system'/><category term='ibatis'/><category term='harddisk backup'/><category term='oss'/><category term='ant'/><category term='mod4j'/><category term='05august-12august2007'/><category term='tool'/><category term='php'/><category term='internet explorer'/><category term='client-server'/><category term='experience'/><category term='sliding'/><category term='cdn'/><category term='springmvc'/><category term='host proof hosting'/><category term='jws'/><category term='log4j'/><category term='naming conventions'/><category term='comet'/><category term='13april-20april2008'/><category term='retagging'/><category term='17june-23june2007'/><category term='zx81'/><category term='generics'/><category term='google guice'/><category term='history'/><category term='saml'/><category term='ror'/><category term='pattern'/><category term='javaone 2010 summary'/><category term='layered testing'/><category term='persistence frameworks'/><category term='31may-08june2008'/><category term='gartner'/><category term='images'/><category term='performance tips'/><category term='case study'/><category term='jaxer'/><category term='pirating'/><category term='jaxb'/><category term='gentoo'/><category term='firefox beta'/><category term='development'/><category term='htmlunit'/><category term='coding standards'/><category term='archimate'/><category term='5.1'/><category term='maven'/><category term='hosting'/><category term='pulsating'/><category term='jee containers'/><category term='api'/><category term='add-on'/><category term='resolution'/><category term='sessions'/><category term='listadapter'/><category term='code generation criteria'/><category term='push vs pull'/><category term='osgi'/><category term='fireunit'/><category term='configuration'/><category term='horizontal scaling'/><category term='rss'/><category term='nosql'/><category term='listactivity'/><category term='stateless'/><category term='endpoint'/><category term='jax-rs implementations'/><category term='miscelleneaous'/><category term='lvl'/><category term='closing resources'/><category term='jsf'/><category term='authentication'/><category term='spring 3.0'/><category term='jboss as'/><category term='openid 2.0'/><category term='jsonrequest'/><category term='jax-rs'/><category term='mini collectible special edition'/><category term='schemas'/><category term='jse'/><category term='activemq'/><category term='xtp'/><category term='build'/><category term='gizzard'/><category term='Smack'/><category term='optimization'/><category term='selection'/><category term='teamlead'/><category term='soapui'/><category term='design by contract'/><category term='summary'/><category term='framework'/><category term='ipod touch'/><category term='windowx xp'/><category term='openid providers'/><category term='subversion'/><category term='fire eagle'/><category term='xhr'/><category term='ioc'/><category term='thesis'/><category term='doom'/><category term='amazon web services'/><category term='social software'/><category term='oracle coherence'/><category term='ec2'/><category term='web frameworks'/><category term='locale'/><category term='01july-14july2007'/><category term='joshua bloch'/><category term='tomcat'/><category term='wsdl'/><category term='downloads'/><category term='xmlspy'/><category term='summer 2011'/><category term='iphone 3g'/><category term='05may-11may2008'/><category term='jetty'/><category term='user interface'/><category term='eclipse plugin'/><category term='cruisecontrol'/><category term='uml'/><category term='apollo'/><category term='differences'/><category term='comments'/><category term='hardware'/><category term='tapestry'/><category term='stored procedures'/><category term='21january-27january2008'/><category term='jsfunit'/><category term='perspective'/><category term='externalization'/><category term='densities'/><category term='high availability'/><category term='migration'/><category term='recommended resolution'/><category term='ubuntu 7.04'/><category term='hudson'/><category term='version'/><category term='sql injection scanners'/><category term='scbcd tips'/><category term='semantic gap'/><category term='stripes'/><category term='memory leaks'/><category term='sans'/><category term='gpl v3'/><category term='drizzle'/><category term='dynamic proxies'/><category term='ddd'/><category term='scrum'/><category term='28april-04may2008'/><category term='how far'/><category term='automated testing'/><category term='clipping mashups'/><category term='lamp'/><category term='multi-tasking'/><category term='apache click'/><category term='md5'/><category term='pyjamas'/><category term='concurrent modification'/><category term='test data'/><category term='templates'/><category term='binary encoding'/><category term='openid'/><category term='swing'/><category term='singleton'/><category term='tablelayout'/><category term='css framework'/><category term='rewrite'/><category term='test'/><category term='second life'/><category term='programming personality style'/><category term='tls'/><category term='backpack'/><category term='endless'/><category term='database transactions'/><category term='tips'/><category term='03march-09march2008'/><category term='integration testing'/><category term='samsung galaxy s2'/><category term='maintainability'/><category term='aws'/><category term='smartgwt'/><category term='enterprise application integration'/><category term='software quality'/><category term='bittorrent'/><category term='future'/><category term='overview'/><category term='paradigm'/><category term='lifecycle'/><category term='xmpp'/><category term='scalability'/><category term='semantic web'/><category term='12november-18november2007'/><category term='cloud'/><category term='20august-25august2007'/><category term='oracle'/><category term='css frameworks'/><category term='four months'/><category term='gears'/><category term='geolocation'/><category term='service layer'/><category term='coding'/><category term='fling'/><category term='testing'/><category term='agile tools'/><category term='setup'/><category term='external disk'/><category term='proxy'/><category term='asynchronous'/><category term='mule'/><category term='spring web services'/><category term='im'/><category term='fedora'/><category term='url shortener'/><category term='url rewriting'/><category term='transactions strategies'/><category term='complexity'/><category term='sql injection'/><category term='partitioning'/><category term='C++'/><category term='compression'/><category term='processes'/><category term='unit test'/><category term='python'/><category term='wicket'/><category term='comparison'/><category term='html 5'/><category term='jee6'/><category term='prettytime'/><category term='26november-02december2007'/><category term='pull'/><category term='database'/><category term='linux'/><category term='javafx'/><category term='optimilisation'/><category term='21april-27april2008'/><category term='ajax'/><category term='hph'/><category term='tutorial'/><category term='domain driven design'/><category term='soa pattern'/><category term='software design'/><category term='jvm'/><category term='google datacenter'/><category term='ehcache'/><category term='orm'/><category term='drupal'/><category term='microsoft'/><category term='collections'/><category term='axis'/><title type='text'>Tech Team Lead News</title><subtitle type='html'>The best articles and links to interesting posts for technical team leaders building sophisticated websites, applications and mobile apps.
Think about: software architecture, hardware architecture, programming, frameworks, scalability, performance, quality assurance, security and Android.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default?start-index=101&amp;max-results=100'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>200</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3957356926985090979</id><published>2011-10-31T12:45:00.002Z</published><updated>2011-10-31T12:48:29.624Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='performance optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android UI Development: Tips, Tricks Techniques from Devoxx 2010 Summary</title><content type='html'>Quick summary of the most important/new tips from the &lt;a href="http://www.parleys.com/#st=5&amp;id=2115"&gt;Parleys talk Android UI Development: Tips, Tricks Techniques at Devoxx 2010&lt;/a&gt;. Now free for viewing.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;13:40&lt;/strong&gt;: tool for tracking allocations in Android via Debug.setAllocationLimit(int)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;25:15&lt;/strong&gt;: example showing the use of DDMS, Heap Analysis Tool, hprof, adb shell dumpsys meminfo&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;36:14&lt;/strong&gt;: don't over-invalidate when redrawing. Only redraw what you have to. Demo shows use of traceview to detect too much being re-drawn.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;44:20&lt;/strong&gt;: (new) hierarchy viewer example. You can use Annotations to export your own values, i.e. the ones you want to check in the viewer.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;48:09&lt;/strong&gt;: you can use the ViewStub to not create your Views too early. Kindof lazy-instantiation. Uses android:inflatedId.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;51:15&lt;/strong&gt;: better way of using an ImageView (e.g icon) with a TextView inside a LinearLayout: android:drawableLeft(Top/Bottom/Right). Much more efficient because not using 3 Views.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;51:45&lt;/strong&gt;: shows use of the static analysis tool 'layoutopt'. It needs an layout XML file and it tells you what can be improved.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;53:45&lt;/strong&gt;: the one you should know by now :) Don't inflate() views in ListView.getView(), re-use. Shows a graph of performance differences if you do vs if you don't.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;54:24&lt;/strong&gt;: tip on View.setDrawingCacheEnabled(true), and explains quicky how Android uses it when you flick a ListView.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-3957356926985090979?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3957356926985090979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3957356926985090979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3957356926985090979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3957356926985090979'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/10/android-ui-development-tips-tricks.html' title='Android UI Development: Tips, Tricks Techniques from Devoxx 2010 Summary'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2004656020203473004</id><published>2011-09-26T12:18:00.011+01:00</published><updated>2011-09-26T13:13:20.288+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foursquared'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><category scheme='http://www.blogger.com/atom/ns#' term='UISegmentedControl'/><category scheme='http://www.blogger.com/atom/ns#' term='segmented control'/><category scheme='http://www.blogger.com/atom/ns#' term='example code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='segmented button'/><title type='text'>Segmented Button Control in Android</title><content type='html'>For an Android project I did a little while back I needed a pair of so-called segmented buttons, as they are named in iOS (see for example &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UISegmentedControl_Class/Reference/UISegmentedControl.html"&gt;the official iOS API for it&lt;/a&gt;).&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-eXK0vHdxlHw/ToBoY7bXMlI/AAAAAAAAAZ8/uEcKvklqhQ4/s1600/uisegmentedcontrol.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 247px; height: 277px;" src="http://1.bp.blogspot.com/-eXK0vHdxlHw/ToBoY7bXMlI/AAAAAAAAAZ8/uEcKvklqhQ4/s320/uisegmentedcontrol.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5656635909455950418" /&gt;&lt;/a&gt;&lt;br /&gt;The idea is that when you select one of the buttons, it usually shows just about the same related data but in a different way (at least that's my translation of what it should do).&lt;br /&gt;The Android version of it which I provide below looks currently most like the third and fourth example in the above image. But of course you can change the code to style it like the others too.&lt;br /&gt;&lt;br /&gt;Android does not have this control out of the box. Luckily, I found a reference to the &lt;a href="http://code.google.com/p/foursquared/"&gt;source of the Foursquared app&lt;/a&gt;.&lt;br /&gt;In there, a segmented button control is created! Big thanks for the creators of Foursquared for sharing the code and thus of the segmented button control :)&lt;br /&gt;&lt;br /&gt;Since the Foursquared app is quite big, I extracted the segmented buttons code from it and made it an Eclipse project, for your and my convenience. It's now just one Activity and the widget.&lt;br /&gt;You can get it from &lt;strong&gt;&lt;a href="http://www.4shared.com/file/jEyGPPPo/FoursquaredSegmentedButton.html"&gt;here&lt;/a&gt;&lt;/strong&gt; and use it anyway you like, following the Foursquared source &lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License 2.0&lt;/a&gt; rules of course.&lt;br /&gt;Here's two screenshots of what it will show:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-TTKXNQCMv2k/ToBnCxKn4vI/AAAAAAAAAZs/W4DTPuccLHU/s1600/foursquared_recent.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/-TTKXNQCMv2k/ToBnCxKn4vI/AAAAAAAAAZs/W4DTPuccLHU/s320/foursquared_recent.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5656634429232636658" /&gt;&lt;/a&gt;&lt;br /&gt;Above shows at startup by default the Recent button is selected&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-3-_tHsLexi4/ToBnSUlHJiI/AAAAAAAAAZ0/lcxDEL7OdnQ/s1600/foursquared_nearby.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://3.bp.blogspot.com/-3-_tHsLexi4/ToBnSUlHJiI/AAAAAAAAAZ0/lcxDEL7OdnQ/s320/foursquared_nearby.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5656634696437016098" /&gt;&lt;/a&gt;&lt;br /&gt;Above shows after clicking on the Nearby button&lt;br /&gt;&lt;br /&gt;Please not that I kept it as basic as possible; for example you'll keep seeing the progress indicator from layout/empty_loading.xml, which of course should be replaced with actual data. I also did not go through all the drawables etc to see which ones are needed and which are not, so you'll still have to clean those up.&lt;br /&gt;Code has been tested on 2.1-update1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-2004656020203473004?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2004656020203473004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2004656020203473004' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2004656020203473004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2004656020203473004'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/09/segmented-button-control-in-android.html' title='Segmented Button Control in Android'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-eXK0vHdxlHw/ToBoY7bXMlI/AAAAAAAAAZ8/uEcKvklqhQ4/s72-c/uisegmentedcontrol.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-312756020887963035</id><published>2011-08-27T14:48:00.005+01:00</published><updated>2011-08-27T14:58:25.341+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='annotations'/><title type='text'>Using dependency injection and annotations in Android for cleaner code</title><content type='html'>Interesting overview of possibilities for cleaner code using dependency injection and annotations by using the &lt;a href="http://code.google.com/p/roboguice/"&gt;RoboGuice&lt;/a&gt; and/or &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Vmv5o3j1cGU/Tlj3cxnz3_I/AAAAAAAAAZc/Jm4BvaACkkk/s1600/roboguice.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://1.bp.blogspot.com/-Vmv5o3j1cGU/Tlj3cxnz3_I/AAAAAAAAAZc/Jm4BvaACkkk/s320/roboguice.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5645534206637629426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/androidannotations/"&gt;Android Annotations&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-qeZF-a1zKfs/Tlj3pYx2cTI/AAAAAAAAAZk/Qf3OEy5hUms/s1600/androidannotationslogo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 100px; height: 110px;" src="http://2.bp.blogspot.com/-qeZF-a1zKfs/Tlj3pYx2cTI/AAAAAAAAAZk/Qf3OEy5hUms/s320/androidannotationslogo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5645534423307153714" /&gt;&lt;/a&gt;&lt;br /&gt;frameworks: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.springsource.com/2011/08/26/clean-code-with-android/"&gt;Clean code in Android applications&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Definitely interesting possibilities, but these frameworks are quite young. And is it really worth the effort, since Activities and Intents can also be used quite effectively to keep the app loosely-coupled? Also the libraries will increase the app's size. &lt;br /&gt;&lt;br /&gt;Not convinced yet :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-312756020887963035?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/312756020887963035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=312756020887963035' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/312756020887963035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/312756020887963035'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/08/using-dependency-injection-and.html' title='Using dependency injection and annotations in Android for cleaner code'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Vmv5o3j1cGU/Tlj3cxnz3_I/AAAAAAAAAZc/Jm4BvaACkkk/s72-c/roboguice.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2317908829904144065</id><published>2011-08-19T09:38:00.004+01:00</published><updated>2011-08-19T09:50:20.221+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mini collectible special edition'/><category scheme='http://www.blogger.com/atom/ns#' term='summer 2011'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Houston we got them: Android Mini Collectible Special Edition Summer 2011</title><content type='html'>&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-1uajSjNOvjY/Tk4jNYk_qVI/AAAAAAAAAZU/nPclpQGzXHM/s1600/android_special_edition_cropped_600x217.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 116px;" src="http://1.bp.blogspot.com/-1uajSjNOvjY/Tk4jNYk_qVI/AAAAAAAAAZU/nPclpQGzXHM/s320/android_special_edition_cropped_600x217.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642486095984699730" /&gt;&lt;/a&gt;&lt;br /&gt;1st: "Greentooth is a master of mind control technology."&lt;br /&gt;"One shake of his hand and you are under his command."&lt;br /&gt;&lt;br /&gt;2nd: "The Hidden Task waits in the shadows, always prepared to set things right."&lt;br /&gt;"The Hidden Task makes no sounds and leaves no traces."&lt;br /&gt;&lt;br /&gt;3rd: "El Poderoso fights for justice, equality.. and fancy belts."&lt;br /&gt;"El Poderoso is ready to wrestle the worst villans and pin down the biggest kingpings."&lt;br /&gt;&lt;br /&gt;4th: "Cycle-On is a power-hungry Android who will stop at nothing."&lt;br /&gt;"Cycle-On's tough metal casing makes it a formidable opponent."&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-2317908829904144065?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2317908829904144065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2317908829904144065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2317908829904144065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2317908829904144065'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/08/houston-we-got-them-android-mini.html' title='Houston we got them: Android Mini Collectible Special Edition Summer 2011'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1uajSjNOvjY/Tk4jNYk_qVI/AAAAAAAAAZU/nPclpQGzXHM/s72-c/android_special_edition_cropped_600x217.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5052322948847180044</id><published>2011-08-18T19:36:00.007+01:00</published><updated>2011-08-18T20:01:28.957+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inflate'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='naming conventions'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android project lessons learned</title><content type='html'>Quick post with some bullet points of lessons learned during my last Android project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To be able to keep strings in strings.xml apart, prefix them with the name of the Activity they belong to. So listOrdersOrderNr instead of just orderNr.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you inflate() a view without the parent, it won't take into account the parent's attributes like padding! Sadly apparently that trick does not seem to work in the getView() method. For that you'd have to compute the padding in dp and then set the padding of the view. E.g:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;float scale = getContext().getResources().getDisplayMetrics().density;&lt;br /&gt;float dpSize = 10 * scale; // So 10 would be the number of dp you want&lt;br /&gt;buttonRow.setPadding((int) dpSize, (int) dpSize, (int) dpSize, (int) dpSize); &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When using a RelativeLayout, make sure you refer to other elements using "@id/someId", and not "@+id/someId". If you use the latter, Android will just create a new id named "someId" and will place the layout starting from the top of your Activity. Pretty obvious this one (the docs say the "+" creates a new id) but still an easy one to miss... So don't do:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;android:layout_below="@+id/feedbackEmailLogsSeparator"&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;But use:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;android:layout_below="@id/feedbackEmailLogsSeparator"&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&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/8474871406958844140-5052322948847180044?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5052322948847180044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5052322948847180044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5052322948847180044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5052322948847180044'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/08/android-project-lessons-learned.html' title='Android project lessons learned'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8284801070607574640</id><published>2011-07-04T20:11:00.003+01:00</published><updated>2011-07-04T20:16:35.871+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='performance optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android pro tips for advanced expert Android developers</title><content type='html'>Short summary of the Google I/O 2011 session "Android Protips: Advanced Topics for Expert Android App Developers". Full presentation can be found &lt;a href="http://www.google.com/events/io/2011/sessions/android-protips-advanced-topics-for-expert-android-app-developers.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6:35&lt;/strong&gt;: the parallel Activity pattern: based on SDK version, start another "parallel" code line. Easy check to see what your SDK version is so you can distinguish use of more advanced APIs as for example available since HoneyComb.&lt;br /&gt;&lt;strong&gt;8:20&lt;/strong&gt;: use interfaces for backward compatibility&lt;br /&gt;&lt;strong&gt;9:09&lt;/strong&gt;: get real user feedback before launching. Note you can also of course use Analytics to log an exception!&lt;br /&gt;&lt;strong&gt;10:38&lt;/strong&gt;: example of doing A/B testing&lt;br /&gt;&lt;strong&gt;11:35&lt;/strong&gt;: use Android Market for beta testing. It seems there's no special facility for this in the market, you just have to control it yourself... e.g password protect, obscure the name.&lt;br /&gt;&lt;strong&gt;12:31&lt;/strong&gt;: But don't forget to protect your package name before someone else takes it! So upload and save it but don't publish it.&lt;br /&gt;&lt;strong&gt;13:43&lt;/strong&gt;: don't assume the default (natural) orientation on a device is portrait, e.g most tablets start in landscape. The orientation sensor's default is also 90degrees "off"&lt;br /&gt;&lt;strong&gt;15:00&lt;/strong&gt;: Don't track devices to detect unique installations. Give your app a unique id using a UUID, store it in the prefs.&lt;br /&gt;&lt;strong&gt;20:00&lt;/strong&gt;: the app's data has to be always fresh if possible, the user does not have to wait. See also this recent post: http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html&lt;br /&gt;&lt;strong&gt;25:51&lt;/strong&gt;: how to get fresher data&lt;br /&gt;&lt;strong&gt;32:00&lt;/strong&gt;: make your services intelligent like do everything async, let it die asap&lt;br /&gt;&lt;strong&gt;33:13&lt;/strong&gt;: make your app psychic: leverage what the phone already knows, remembers what the user has told it. Like the Account Manager. Preferences should follow the user across devices and resets (which means storing them offline). Give users the ability to delete their preferences, using the Backup Manager to backup shared preferences.&lt;br /&gt;&lt;strong&gt;38:21&lt;/strong&gt;: intercept links using an Intent Receiver&lt;br /&gt;&lt;strong&gt;39:25&lt;/strong&gt;: make your apps adaptive. E.g: behave as expected, optimize for different user experiences. You can specify the IME keyboard behavior by setting the appropriate action (Go, Search, Send, Done etc). Use android:imeOptions for that&lt;br /&gt;&lt;strong&gt;43:20&lt;/strong&gt;: handle volume and playback buttons icw requesting audio focus for playback&lt;br /&gt;&lt;strong&gt;47:10&lt;/strong&gt;: provide translations for your app and title description to have it better found in people's native language&lt;br /&gt;&lt;strong&gt;48:00&lt;/strong&gt;: make your app smooth: make everything async. Loader and CursorLoader are available since HoneyComb.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-8284801070607574640?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8284801070607574640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8284801070607574640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8284801070607574640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8284801070607574640'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/07/android-pro-tips-for-advanced-expert.html' title='Android pro tips for advanced expert Android developers'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7548082765270665926</id><published>2011-06-29T13:59:00.004+01:00</published><updated>2011-06-29T14:11:25.378+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recommended resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='android developer console'/><category scheme='http://www.blogger.com/atom/ns#' term='screenshots'/><category scheme='http://www.blogger.com/atom/ns#' term='320x480'/><category scheme='http://www.blogger.com/atom/ns#' term='thumbnails'/><category scheme='http://www.blogger.com/atom/ns#' term='android market'/><title type='text'>Recommended Android Market screenshot format</title><content type='html'>In the &lt;a href="https://market.android.com/publish/Home"&gt;Android Developer Console&lt;/a&gt; you can upload the screenshots of your app (max 8 currently) in several sizes, like 320x480, 480x800, 480x854 and 1280x800.&lt;br /&gt;&lt;br /&gt;But &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/9fa04470b4b61beb/ff1d27cd8e77d0be"&gt;it turns out&lt;/a&gt; that sometimes (always?) if you upload in the higher resolutions (like 480x800), the images get cropped in a weird way in the market on your phone (at least the Nexus One). The images will look fine in the online &lt;a href="https://market.android.com/"&gt;Android market&lt;/a&gt;, but not on a physical device. Actually, when you look closely, the dev-console gives a thumbnail of the screenshots and there you can already see that the images are cropped strangely sometimes; like the left 20-50 pixels just cut off. And that's actually how they also appear in the market on devices!&lt;br /&gt;After some experimenting, it turns out this does not happen when you upload in 320x480 format.&lt;br /&gt;Thus the recommended resolution to upload screenshots seems to be 320x480! Doesn't matter if you use a device (like the Galaxy S2) or emulator to take the screenshots.&lt;br /&gt;&lt;br /&gt;Note I didnt check if the browser market image quality decreased when going from 480x800 to 320x480. Though clicking on an image in the webmarket shows the 320x480 uploaded image quite fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-7548082765270665926?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7548082765270665926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7548082765270665926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7548082765270665926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7548082765270665926'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/06/recommended-android-market-screenshot.html' title='Recommended Android Market screenshot format'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3187465650753272338</id><published>2011-06-29T12:49:00.015+01:00</published><updated>2011-06-29T14:26:00.058+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='htc wildfire'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='samsung galaxy s2'/><category scheme='http://www.blogger.com/atom/ns#' term='problems'/><category scheme='http://www.blogger.com/atom/ns#' term='discoverability'/><category scheme='http://www.blogger.com/atom/ns#' term='example code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android Bluetooth bugs on Galaxy S2</title><content type='html'>Just a quick post regarding Bluetooth on the Samsung Galaxy S II.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-rnDoY1gc4rg/Tgsnzp-NXuI/AAAAAAAAAZM/_chk8tZpCxU/s1600/BlueTooth.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 256px; height: 256px;" src="http://1.bp.blogspot.com/-rnDoY1gc4rg/Tgsnzp-NXuI/AAAAAAAAAZM/_chk8tZpCxU/s320/BlueTooth.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5623632328095784674" /&gt;&lt;/a&gt;Recently I've been creating an app that uses Bluetooth for sending data between devices (not FTP just strings). A pretty good introduction can be found &lt;a href="http://developer.android.com/guide/topics/wireless/bluetooth.html"&gt;here&lt;/a&gt;, though some things are missing from it. Like an example how you can register a BroadcastReceiver for the ACTION_SCAN_MODE_CHANGE. Just in case you are looking for it, here it is:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;// Register the BroadcastReceiver&lt;br /&gt;IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);&lt;br /&gt;registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;// Creates a BroadcastReceiver for ACTION_SCAN_MODE_CHANGED for BT discovery&lt;br /&gt;private final BroadcastReceiver mReceiver = new BroadcastReceiver() {&lt;br /&gt;        &lt;br /&gt;  public void onReceive(Context context, Intent intent) {&lt;br /&gt;    if (BluetoothAdapter.ACTION_SCAN_MODE_CHANGED.equals(action)) {&lt;br /&gt;    int mode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE,&lt;br /&gt;                                    BluetoothAdapter.ERROR);&lt;br /&gt;    String strMode = "";&lt;br /&gt;    switch(mode){&lt;br /&gt;    case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE:&lt;br /&gt;      strMode = "mode changed: SCAN_MODE_CONNECTABLE_DISCOVERABLE";&lt;br /&gt;      break;&lt;br /&gt;    case BluetoothAdapter.SCAN_MODE_CONNECTABLE:&lt;br /&gt;      break;&lt;br /&gt;    case BluetoothAdapter.SCAN_MODE_NONE:&lt;br /&gt;      strMode = "mode changed: SCAN_MODE_NONE";&lt;br /&gt;      break;&lt;br /&gt;    default:&lt;br /&gt;      strMode = "mode changed: unknown mode " + mode;&lt;br /&gt;      break;&lt;br /&gt;    }&lt;br /&gt;    Log.d(TAG, strMode);&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Basically a device can be made discoverable by others, or a device can be set to find other devices (discover). Being discoverable is configurable up to 300 seconds max, finding other devices is not configurable and about 12 seconds.&lt;br /&gt;&lt;br /&gt;Making a device discoverable entails the following code:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);&lt;br /&gt;discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 120);&lt;br /&gt;startActivityForResult(discoverableIntent, REQUEST_MAKE_BT_DISCOVERABLE);&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;That should enable Bluetooth if it isn't already and make the device discoverable for 120 seconds, and the result of the intent comes in at onActivityResult(). For receiving Bluetooth state changes you can register a BroadcastReceiver. This all works fine on a Nexus One.&lt;br /&gt;But not on all devices, their Bluetooth stack contains bugs and behaves differently:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Samsung Galaxy S II&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When you make the device discoverable, its state should become &lt;a href="http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#SCAN_MODE_CONNECTABLE_DISCOVERABLE"&gt;SCAN_MODE_CONNECTABLE_DISCOVERABLE&lt;/a&gt;, i.e value 23, meaning this device is both discoverable and connectable from remote Bluetooth devices.&lt;br /&gt;On the Nexus One I see the device.getScanMode() always return 23, as it should be. But on the Galaxy S2 it sometimes just changes to scanmode SCAN_MODE_CONNECTABLE (21), making it not discoverable anymore! And indeed, other devices don't see it anymore when discovering. In the S2 phone's settings I also see in that case that the discoverable checkbox is not checked.&lt;br /&gt;&lt;em&gt;Workaround&lt;/em&gt;: the only workaround that always works seems to be to always first turn on the Bluetooth, and &lt;em&gt;after&lt;/em&gt; that send the above discoverableIntent. Thus first do a&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);&lt;br /&gt;startActivityForResult(enableIntent, REQUEST_ENABLE_BT);&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;then the&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);&lt;br /&gt;discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 120);&lt;br /&gt;startActivityForResult(discoverableIntent, REQUEST_MAKE_BT_DISCOVERABLE);&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When you start the discoverable intent with any number different from 120, say 300, the popup that asks for user confirmation always shows 120, instead of the different number, say 300. The discoverability actually stays on for the specified amount (300 seconds), so functionally it works (phew), but the display is just incorrect and you can't change it. Confusing for the user.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Other bugs&lt;/strong&gt;&lt;br /&gt;I also found a few other more generic bugs reported by others and found by myself. Maybe they were SDK or device related (my app runs on Android 2.0+, tested on N1, Wildfire and Galaxy S2):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/a04413eb55da6060"&gt;Pairing&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/b1b2d670b29f6929"&gt;Connecting multiple clients&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/android/issues/list?can=2&amp;q=bluetooth&amp;colspec=ID+Type+Status+Owner+Summary+Stars&amp;cells=tiles"&gt;All reported issues/bugs&lt;/a&gt; in Android with Bluetooth&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some devices are just not discoverable because &lt;a href="http://stackoverflow.com/questions/4215398/bluetooth-device-not-discoverable"&gt;some phone manufacturers decided by themselves "to ignore any bluetooth device which advertises itself as class 0×00 and wont allow connections, fire off Intents on discovery or even list it on the bluetooth settings page."&lt;/a&gt; Nasty fix (i.e reading the logfiles!) can be found &lt;a href="http://zornsoftware.talsit.info/blog/pairing-spp-bluetooth-devices-with-android-phones.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;li&gt;Quite annoying is also that on some devices (N1, Wildfire) the pairing request appears in the notification bar (on top of the screen). Users are very likely to miss that, causing the devices not being able to connect to eachother. On the Galaxy S2 it is a dialogbox so the user can't miss it.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-3187465650753272338?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3187465650753272338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3187465650753272338' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3187465650753272338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3187465650753272338'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/06/android-bluetooth-bugs-on-galaxy-s2.html' title='Android Bluetooth bugs on Galaxy S2'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-rnDoY1gc4rg/Tgsnzp-NXuI/AAAAAAAAAZM/_chk8tZpCxU/s72-c/BlueTooth.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5005474693112959013</id><published>2011-04-17T09:12:00.014+01:00</published><updated>2011-04-18T18:53:40.572+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='swipe'/><category scheme='http://www.blogger.com/atom/ns#' term='scroll'/><category scheme='http://www.blogger.com/atom/ns#' term='galleryview'/><category scheme='http://www.blogger.com/atom/ns#' term='sliding'/><category scheme='http://www.blogger.com/atom/ns#' term='viewflipper'/><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='grid view'/><category scheme='http://www.blogger.com/atom/ns#' term='fling'/><category scheme='http://www.blogger.com/atom/ns#' term='tablelayout'/><category scheme='http://www.blogger.com/atom/ns#' term='gridview'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='horizontally'/><title type='text'>Horizontally sliding grid of images in Android</title><content type='html'>For my Android app I wanted a swipeable and horizontally slideable 3x3 grid of images. If there were more than 9 images, a swipe should show the next 3x3 grid. Another requirement was that all should be in a &lt;a href="http://developer.android.com/reference/android/widget/ScrollView.html"&gt;ScrollView&lt;/a&gt; because there would be more on the screen above the 3x3 grid.&lt;br /&gt;The first solutions that directly came to my mind were of course the &lt;a href="http://developer.android.com/resources/tutorials/views/hello-gallery.html"&gt;GalleryView&lt;/a&gt; or a &lt;a href="http://developer.android.com/resources/tutorials/views/hello-gridview.html"&gt;GridView&lt;/a&gt; or a horizontal &lt;a href="http://developer.android.com/resources/tutorials/views/hello-listview.html"&gt;ListView&lt;/a&gt;.&lt;br /&gt;But the final solution was a &lt;a href="http://developer.android.com/reference/android/widget/ViewFlipper.html"&gt;ViewFlipper&lt;/a&gt; with &lt;a href="http://developer.android.com/reference/android/widget/TableLayout.html"&gt;TableLayout&lt;/a&gt;s as its children!&lt;br /&gt;Below you can find my "journey" figuring out, experimenting and getting to the solution.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;List View&lt;/h3&gt;Luckily for the horizontal ListView there was already a good example &lt;a href="http://www.dev-smart.com/?p=34"&gt;here&lt;/a&gt;. The result:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-O1dBnlxvRHw/TaqoN_LowkI/AAAAAAAAAYQ/0YYXAPeQhQw/s1600/HorizontalListViewDemoScreenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/-O1dBnlxvRHw/TaqoN_LowkI/AAAAAAAAAYQ/0YYXAPeQhQw/s320/HorizontalListViewDemoScreenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596470445213270594" /&gt;&lt;/a&gt;&lt;br /&gt;It really does work as a horizontal ListView, but it doesn't support the paging I was looking for; it is just a continuous list. &lt;br /&gt;Sadly the code wasn't downloadable in one block (update: seems I just missed it at the top!), and it also contained typos (the layout tags were all lowercase), so it took me a while to get it all fixed and useable in an Eclipse project. &lt;br /&gt;For people looking for the complete source code, you can find it &lt;a href="http://www.4shared.com/file/Q0gzYZe0/HorizontalListViewDemo.html"&gt;here&lt;/a&gt;.&lt;br /&gt;Note that the getView() has not been optimized yet, it creates a new view each time!&lt;br /&gt;Also weird in the original code was the TextView within the ImageView, I changed the code to have them below each eachother.&lt;br /&gt;An advantage of this implementation is that there is no "center locking" of the image anymore.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Gallery View&lt;/h3&gt;So the horizontal ListView didn't cut it, let's try a GalleryView (g1 in the code) with per item a standard GridView. That worked reasonably, except that the swiping didn't work anymore! Keypad scrolling still worked, kind of:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-tmCg2BeSJJs/Taqwx-z1uyI/AAAAAAAAAYY/FHplRJBJCPQ/s1600/gallery_with_gridview.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/-tmCg2BeSJJs/Taqwx-z1uyI/AAAAAAAAAYY/FHplRJBJCPQ/s320/gallery_with_gridview.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596479859681770274" /&gt;&lt;/a&gt;&lt;br /&gt;Luckily I found a fix for that, implementing a custom GridView that passes the fling on to the parent gallery (g2 in the code).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-twUbg02ZAjk/Taqxlgj0deI/AAAAAAAAAYg/uXHGYjxikJ4/s1600/gallery_with_gridview_fling.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://3.bp.blogspot.com/-twUbg02ZAjk/Taqxlgj0deI/AAAAAAAAAYg/uXHGYjxikJ4/s320/gallery_with_gridview_fling.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596480744914712034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But then I still had to put it in a ScrollView... And then the trouble started, look at the vertical scrollbars that suddenly appear:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-sujzrhgBGWo/Taq_aaqxmgI/AAAAAAAAAZA/fJCEnN1zTwI/s1600/gallery_with_gridview_fling_scrollview2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://3.bp.blogspot.com/-sujzrhgBGWo/Taq_aaqxmgI/AAAAAAAAAZA/fJCEnN1zTwI/s320/gallery_with_gridview_fling_scrollview2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596495947517499906" /&gt;&lt;/a&gt;&lt;br /&gt;Bummer!&lt;br /&gt;&lt;br /&gt;I ended up with quite some trial code which you can find &lt;a href="http://www.4shared.com/file/0Fh8mETA/NineImagesPagingApp.html"&gt;here&lt;/a&gt;. Disclaimer: this is quite messy trial code so you are warned and I'm not supporting this code in any way; you are on your own here :)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Grid View&lt;/h3&gt;Making a GridView scroll horizontally in sets of 3x3 images just gave me headaches from the beginning. For example you can't set the number of rows, so it might sometimes show more rows than 3. And a GridView inside a ScrollView is also &lt;a href="http://code.google.com/p/android/issues/detail?id=4051"&gt;strongly warned against&lt;/a&gt;. Which btw also applies to ListView within a ScrollView. In general it even seems: &lt;strong&gt;a scrolling View inside another scrolling View is not a good idea and even strongly discouraged!&lt;/strong&gt;&lt;br /&gt;Furthermore, on a xlarge screen (WXGA) the gridview had almost its own will for laying out, making it look very different than on a HVGA screen.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The solution&lt;/h3&gt;After some more thinking I came across the solution: put &lt;a href="http://developer.android.com/resources/tutorials/views/hello-tablelayout.html"&gt;Table Layout&lt;/a&gt;s of 3x3 images inside a &lt;a href="http://developer.android.com/reference/android/widget/ViewFlipper.html"&gt;ViewFlipper&lt;/a&gt;! Per table you can control how many images should be shown and it's quite easy to add swiping! Paging is then done per table. You can swipe left and right.&lt;br /&gt;Page 1:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-lVflqu8oIVk/Taq7xIKUb7I/AAAAAAAAAYw/LqjzrtVD3Fg/s1600/horizontally_sliding_p1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/-lVflqu8oIVk/Taq7xIKUb7I/AAAAAAAAAYw/LqjzrtVD3Fg/s320/horizontally_sliding_p1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596491939640012722" /&gt;&lt;/a&gt;&lt;br /&gt;Page 2 after swiping to the left:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-b2NUlo-Srfg/Taq756nC0cI/AAAAAAAAAY4/Zv7Po6TAvYs/s1600/horizontally_sliding_p2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://2.bp.blogspot.com/-b2NUlo-Srfg/Taq756nC0cI/AAAAAAAAAY4/Zv7Po6TAvYs/s320/horizontally_sliding_p2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596492090621219266" /&gt;&lt;/a&gt;&lt;br /&gt;The source code of the final solution you can find &lt;a href="http://www.4shared.com/file/04MOCLOo/HorizontalSlidingGridImages.html"&gt;here&lt;/a&gt;.&lt;br /&gt;Note the top left icon in the grid changes when you swipe to the left the first time (so you can tell that the 2nd page is showing).&lt;br /&gt;Note also the use of the &lt;a href="http://pastie.org/pastes/1086467/text"&gt;FixedViewFlipper&lt;/a&gt; to handle rotation correctly.&lt;br /&gt;A future improvement: keep track of the "page" you're on so with the example of 2 tables, don't allow the swipe/fling to "go round", i.e swiping to the left on the 2nd table shows the first table again...&lt;br /&gt;&lt;br /&gt;PS: of course you could also create your custom component, but I want to avoid that as much as possible to minimize (custom) maintenance.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Misc&lt;/h3&gt;These links I also stumbled upon but didn't do anything with:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.gorges.us/2010/06/android-two-dimensional-scrollview/"&gt;Android Two-Dimensional ScrollView&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://androiddevblog.blogspot.com/2009/12/creating-two-dimensions-scroll-view.html"&gt;This&lt;/a&gt; is quite a flexible two dimensions scrollview&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Hope this helps somebody some time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-5005474693112959013?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5005474693112959013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5005474693112959013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5005474693112959013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5005474693112959013'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/04/horizontally-sliding-grid-of-images-in.html' title='Horizontally sliding grid of images in Android'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-O1dBnlxvRHw/TaqoN_LowkI/AAAAAAAAAYQ/0YYXAPeQhQw/s72-c/HorizontalListViewDemoScreenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-703540792798158931</id><published>2011-02-14T10:57:00.025Z</published><updated>2011-02-18T21:10:02.563Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='windowx xp'/><category scheme='http://www.blogger.com/atom/ns#' term='problems'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrading'/><category scheme='http://www.blogger.com/atom/ns#' term='64bit'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='errors'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>Upgrade to iTunes 10.1.2.17 iOS 4.2.1 on Windows XP 64bit</title><content type='html'>Over a year ago I managed to get iTunes 9.x.y working on my Windows XP 64 bit machine.&lt;br /&gt;I had to try so many stuff, that I didn't really keep track of what I did :( The only things I wrote down were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://skunkwerks.wordpress.com/2008/04/13/getting-itunes-to-work-with-windows-xp-x64/#comment-77"&gt;http://skunkwerks.wordpress.com/2008/04/13/getting-itunes-to-work-with-windows-xp-x64/#comment-77&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://discussions.apple.com/thread.jspa?threadID=2151665&amp;start=75&amp;tstart=0"&gt;http://discussions.apple.com/thread.jspa?threadID=2151665&amp;start=75&amp;tstart=0&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;At startup of iTunes 9 I did get iTunesHelper is not installed correctly or something. I just clicked it away, it didn't seem to hurt anything.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In the end everything worked, though I manually always started Mobile Apple Device service&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I do always get the popup about not being able to burn CDs. No problem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-_OYoogDJLrI/TVkbsWkryMI/AAAAAAAAAYA/8yqmn3Ux4CI/s1600/itunes_warning_at_startup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 205px;" src="http://4.bp.blogspot.com/-_OYoogDJLrI/TVkbsWkryMI/AAAAAAAAAYA/8yqmn3Ux4CI/s320/itunes_warning_at_startup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573516462635337922" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When plugging in the iPod I still always get this popup:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NF2HZ57QlAE/TVkbXXWflAI/AAAAAAAAAX4/_VMIxhz28Rw/s1600/itunes_popup_when_plugin_ipod_3G.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 314px;" src="http://4.bp.blogspot.com/-NF2HZ57QlAE/TVkbXXWflAI/AAAAAAAAAX4/_VMIxhz28Rw/s320/itunes_popup_when_plugin_ipod_3G.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573516102067000322" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;But now (february 2011) I wanted to upgrade my iTunes 9 to iTunes 10 because my OS on my iPod Touch was still at 3.x, and more and more apps are not running on 3.x anymore, they require 4.x and higher.&lt;br /&gt;I knew it was going to be a nightmare, remembering the iTunes 9 installation. But this time I decided to keep track of it as detailed as possible. Hopefully it helps somebody...&lt;br /&gt;I'll write down the steps as how I did them, so read through them all before trying yourself, you might be able to skip certain steps because they didn't work... WARNING: it is definitely not a clean walk-through!&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Goal is to follow the steps from &lt;a href="http://skunkwerks.wordpress.com/2008/04/13/getting-itunes-to-work-with-windows-xp-x64"&gt;http://skunkwerks.wordpress.com/2008/04/13/getting-itunes-to-work-with-windows-xp-x64&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Downloaded the 64b Vista version iTunes64Setup.exe from the Apple site&lt;/li&gt;&lt;br /&gt;&lt;li&gt;First thought I could just try to run the .exe, since it's just an upgrade. But after some thought, thought I needed to modify the .msi file(s), since they do a check at startup. And, since all I need is an updated iTunes I don't think I even need to run all .msi files, only the modified iTunes64.msi (with the edits from the first post, NOT the deletion of entries as in this &lt;a href="http://discussions.apple.com/thread.jspa?threadID=2151665&amp;start=75&amp;tstart=0"&gt;post&lt;/a&gt;).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Installer starts successful, see screenshot (sorry for the Dutch):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-GyoQagR93GY/TVkNxnA48hI/AAAAAAAAAWY/7jUKOIYG3fU/s1600/itunes_installer_allows.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://2.bp.blogspot.com/-GyoQagR93GY/TVkNxnA48hI/AAAAAAAAAWY/7jUKOIYG3fU/s320/itunes_installer_allows.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573501159785165330" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Let it install where the 9.x.y was already installed: C:\Program Files (x86)\iTunes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A popup showed saying itunes+quicktime needs sp2 or higher. See screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-3USWRB20Irg/TVkOXd6pEcI/AAAAAAAAAWg/Tybh8ynQC1k/s1600/itunes_quicktime_warning_needs_sp2orhigher.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 155px;" src="http://2.bp.blogspot.com/-3USWRB20Irg/TVkOXd6pEcI/AAAAAAAAAWg/Tybh8ynQC1k/s320/itunes_quicktime_warning_needs_sp2orhigher.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573501810178068930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just hit OK, install continues afterwards and it said successfully installed.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And iTunes starts fine! Note that I still manually have to start the Mobile Apple service. I do that before starting iTunes, then plugin the iPod (with popup see screenshot), Then start iTunes.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-0q8s0bhFdgc/TVkOq10q-0I/AAAAAAAAAWo/Ro2wZ6L41Rk/s1600/itunes_popup_when_plugin_ipod_3G.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 314px;" src="http://1.bp.blogspot.com/-0q8s0bhFdgc/TVkOq10q-0I/AAAAAAAAAWo/Ro2wZ6L41Rk/s320/itunes_popup_when_plugin_ipod_3G.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573502143012993858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also still do always get the popup about not being able to burn CDs. No problem.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;But now i get popup saying "itunes requires a newer version of Apple Mobile Support. Please uninstall both Apple Mobile Device Support and iTunes, then install iTunes again.". See screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-v83JFl8Prw8/TVkPHYbhbWI/AAAAAAAAAWw/rP2Ged8XrSE/s1600/itunes_needs_newer_device_service.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 113px;" src="http://2.bp.blogspot.com/-v83JFl8Prw8/TVkPHYbhbWI/AAAAAAAAAWw/rP2Ged8XrSE/s320/itunes_needs_newer_device_service.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573502633339088226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So it seems I do need to run AppleMobileDeviceSupport64.msi.&lt;br /&gt;But first edit it also. And instead of deleting entries, also here I just change 600 to 501.&lt;br /&gt;Starting AppleMobileDeviceSupport64.msi gives again needs SP2 or higher.&lt;br /&gt;So I also changed (VersionNT=501 And ServicePackLevel&amp;gt;=2) Or VersionNT&amp;gt;=600 &lt;br /&gt;to (VersionNT=501 And ServicePackLevel&amp;gt;=2) Or VersionNT&amp;gt;=501.&lt;br /&gt;Yup .msi starts now, installs update in C:\Program Files (x86)\Common Files\Apple\Mobile Device Support&lt;br /&gt;Got popup saying it didn't pass windows logo testing. Continue anyway.&lt;br /&gt;Again for USB driver.&lt;br /&gt;And again. ipod goes on/off. Shows popup again that tries to open 2 programs when inserting ipod.&lt;br /&gt;Successful!! Note that it didn't require a restart and that I did not re-install iTunes.&lt;br /&gt;Started iTunes&lt;br /&gt;Yeah: ipod lights up, sync in progress&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It now asks for 4.2 upgrade of iPod software! yeah! See screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8bw-8sz_I3k/TVkPwfxjpyI/AAAAAAAAAW4/zUG6vnZ4NhY/s1600/itunes_ipod42_upgrade.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 118px;" src="http://4.bp.blogspot.com/-8bw-8sz_I3k/TVkPwfxjpyI/AAAAAAAAAW4/zUG6vnZ4NhY/s320/itunes_ipod42_upgrade.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573503339685193506" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Hit Download and update, then it says automatically checking for updates is disabled. If you hit cancel, nothing happens. So you have to select "Check this time":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Tzuof7NsriQ/TVkYdK7F_RI/AAAAAAAAAXw/gVWfnNoB5LI/s1600/itunes_automatically_check4update.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 138px;" src="http://1.bp.blogspot.com/-Tzuof7NsriQ/TVkYdK7F_RI/AAAAAAAAAXw/gVWfnNoB5LI/s320/itunes_automatically_check4update.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573512903275183378" /&gt;&lt;/a&gt;&lt;br /&gt;Then iTunes says my iPod isn't synced, are you sure to contiue? Canceled and did that sync first, making sure all my apps etc are in iTunes too.&lt;br /&gt;&lt;br /&gt;Selected Upgrade again, yup started downloading 4.2.1, see screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-vp5pmFRSYhA/TVkQy9k6CbI/AAAAAAAAAXA/EmOihsZ6940/s1600/itunes_downloading_42.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://1.bp.blogspot.com/-vp5pmFRSYhA/TVkQy9k6CbI/AAAAAAAAAXA/EmOihsZ6940/s320/itunes_downloading_42.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573504481556564402" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crap, got error 1603/1604, while popup Find new hardware wizard was suddenly showing up!&lt;br /&gt;&lt;br /&gt;Apple support link with some more info: &lt;a href="http://support.apple.com/kb/TS1275"&gt;http://support.apple.com/kb/TS1275&lt;/a&gt;&lt;br /&gt;Crap, can't find a driver (usbaapl). Seems it didn't get installed?&lt;br /&gt;So did this order of .msi running:&lt;br /&gt;1) AppleApplicationSupport.msi&lt;br /&gt;2) AppleMobileDeviceSupport64.msi&lt;br /&gt;3) iTunes64.msi&lt;br /&gt;Selected "recover" each time.&lt;br /&gt;Still didn't work, got 1604 error or something.&lt;br /&gt;Note that iTunes does see that the phone needs to be recovered, but it just fails after a long time with a 1603 or 1604 error. That indicates something is wrong with the USB connection.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then I manually got the driver from AppleMobileDeviceSupport64.msi as described here (using &lt;a href="http://code.google.com/p/code4all/downloads/detail?name=Lessmsierables-20051110.zip&amp;can=2&amp;q="&gt;lessmsi*.exe&lt;/a&gt;): &lt;a href="http://discussions.apple.com/thread.jspa?messageID=5619588"&gt;http://discussions.apple.com/thread.jspa?messageID=5619588&lt;/a&gt;&lt;br /&gt;Yeah but which one do I need, the 64b or 32b? Guess the 64b, that's named usbaapl64.&lt;br /&gt;Note that you need to do Have disk as in &lt;a href="http://support.apple.com/kb/TS1538"&gt;http://support.apple.com/kb/TS1538&lt;/a&gt;&lt;br /&gt;Ah now got 1604 error (device was sometimes recognised, then windows says new device found again etc)&lt;br /&gt;Did what is says &lt;a href="http://support.apple.com/kb/TS1275"&gt;here&lt;/a&gt; for error 1604 (turn if off etc): &lt;br /&gt;Showing Preparing iPod for restore... for a long time... minutes... Again 1604 error.&lt;br /&gt;So the USB driver is just not set up correctly.&lt;br /&gt;You hear when you try the restore (if the device is recognised in iTunes), the USB ping "rings" twice, meaning something is happening twice or something.&lt;br /&gt;Don't think that should happen. I also see the ipod flash shortly, then it's just dark.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I did read somewhere that in this case you're kindof lost, so you need to restore the iPod OS via another PC/Mac for which everything is working. After that's on the iPod, you can restore from the 64b iTunes...&lt;br /&gt;Luckily I have such a PC around: XP 32bit. Downloaded the latest iTunes 10, installed, and plugged in the iPod. iTunes detected it needed restoring so it put 4.2.1 on it! Note that I didn't give my device a name at the end of the restoring (thinking that should come from the XP 64b iTunes anyway...).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;So after this, plugged it back in on the XP 64b. But it was not seen/recognised by iTunes! Though in the Windows Device Manager it said Apple iPod!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then I did update the driver as in &lt;a href="http://skunkwerks.wordpress.com/2008/04/13/getting-itunes-to-work-with-windows-xp-x64/"&gt;here&lt;/a&gt; in the part Troubleshooting iTunes &amp;lt;-&amp;gt; iPhone Link/Sync&lt;br /&gt;After that, the Device Manager says Apple Mobile Device USB driver! See screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-exb_WEU9Ny0/TVkULJ01sXI/AAAAAAAAAXY/msuJah8IDxU/s1600/itunes_devicemanager_ok.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 303px;" src="http://1.bp.blogspot.com/-exb_WEU9Ny0/TVkULJ01sXI/AAAAAAAAAXY/msuJah8IDxU/s320/itunes_devicemanager_ok.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573508195696357746" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And (since) iTunes was already started, it started immediately restoring apps! Yeah!! See screenshot progress:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-NOEO1lnYnH8/TVkUfaPcaSI/AAAAAAAAAXg/c85spVu6yYo/s1600/itunes_restoring_apps.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 72px;" src="http://1.bp.blogspot.com/-NOEO1lnYnH8/TVkUfaPcaSI/AAAAAAAAAXg/c85spVu6yYo/s320/itunes_restoring_apps.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573508543700298018" /&gt;&lt;/a&gt;&lt;br /&gt;Darn! An error occurred restoring this ipod (-402620395):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-P3ifHnjcamM/TVkUpkCe_vI/AAAAAAAAAXo/aY4NbbrSMv4/s1600/itunes_error_restoring.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 82px;" src="http://4.bp.blogspot.com/-P3ifHnjcamM/TVkUpkCe_vI/AAAAAAAAAXo/aY4NbbrSMv4/s320/itunes_error_restoring.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573508718128987890" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Before hitting OK, I removed any provisioning files I had on the ipod as said &lt;a href="http://discussions.apple.com/thread.jspa?threadID=2469474&amp;start=15&amp;tstart=0"&gt;here&lt;/a&gt; in the post "bkynaston post: Posted: Jun 23, 2010 6:45 PM"&lt;br /&gt;&lt;br /&gt;Hit Ok. After this it tries to sync again.&lt;br /&gt;&lt;br /&gt;Yes! It says: iPod sync is complete. OK to disconnect.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And yes, finally, finally, after about 1 day of working on this, my iPod is ok again! Even the language is back to English!&lt;br /&gt;Finally! Hope I never have to do this again...&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Misc&lt;/strong&gt;&lt;br /&gt;Here's some other knowledgebase tip(s) that I looked at and tried&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://support.apple.com/kb/TS1286"&gt;http://support.apple.com/kb/TS1286&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/8474871406958844140-703540792798158931?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/703540792798158931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=703540792798158931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/703540792798158931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/703540792798158931'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/02/upgrade-to-itunes-101217-ios-421-on.html' title='Upgrade to iTunes 10.1.2.17 iOS 4.2.1 on Windows XP 64bit'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_OYoogDJLrI/TVkbsWkryMI/AAAAAAAAAYA/8yqmn3Ux4CI/s72-c/itunes_warning_at_startup.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6052043850467961503</id><published>2011-02-12T10:21:00.008Z</published><updated>2011-02-12T10:49:26.939Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='file locking'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Lessons learned webservices project</title><content type='html'>At a recent project we used the following tools &amp; frameworks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java 6&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Spring 3.0&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Hibernate 3.2.7&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JMS&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JBoss ESB 4.5/5.1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SOAP 1.1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JAXB&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JAX-WS&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Apache CXF&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Maven2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jetty 6.1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Oracle 10g&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Eclipse Mylyn&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SVN&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JUnit&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bamboo&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jira&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crucible&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nexus&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Below are a couple of lessons learned which I remembered to write down:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;JUnit&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To skip a testclass (e.g Util.java) during a test in a maven project: put @Ignore above it.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Throw checked exceptions in case of functionality errors. To not have to return those errors as return-values of the methods and making them checked, makes the interface clearer.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SOAP&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Should you use the service response for functional errors, and SOAP fault only for technical errors?&lt;br /&gt;Nothing in the SOAP 1.1 spec says you should do that or are not allowed to put functional errors in the &amp;lt;detail&amp;gt;.&lt;br /&gt;Makes sense to me to do that: otherwise you can get errors in the response AND in the soap fault. More complex to handle in the client...&lt;br /&gt;Less of an issue if you say when there are SOAP faults we just give up, only if there's a response we try to see what's going on.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Apparent best practice: no underscores in xml/xsd/wsdl for element nor attributes, for better readability&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ESB&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JBoss ESB 4.5 JMS queue had loads of problems with high load and would sometimes just completely drop the queue. We moved to JBoss ESB 5.1 with ActiveMQ, that proved much more stable.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Transactional atomic file manipulation and file locking&lt;/strong&gt;&lt;br /&gt;Bunch of interesting articles related to this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/595631/how-to-atomically-rename-a-file-in-java-even-if-the-dest-file-already-exists"&gt;http://stackoverflow.com/questions/595631/how-to-atomically-rename-a-file-in-java-even-if-the-dest-file-already-exists&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://commons.apache.org/transaction/"&gt;http://commons.apache.org/transaction/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2008/01/file-systems-transactions"&gt;http://www.infoq.com/news/2008/01/file-systems-transactions&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.coderanch.com/t/495417/java/java/Distributed-Tx-Transactional-File-Access"&gt;http://www.coderanch.com/t/495417/java/java/Distributed-Tx-Transactional-File-Access&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://xadisk.dev.java.net/"&gt;https://xadisk.dev.java.net/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lower-level stuff: &lt;a href="http://java.sys-con.com/node/37798"&gt;http://java.sys-con.com/node/37798&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;EJB/XA example: &lt;a href="http://matthewneale.net/category/software-development/"&gt;http://matthewneale.net/category/software-development/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Related to file locking:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;See reply 3: &lt;a href="http://forums.sun.com/thread.jspa?threadID=5284898"&gt;http://forums.sun.com/thread.jspa?threadID=5284898&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Another example: &lt;a href="http://www.java2s.com/Code/Java/File-Input-Output/DemonstratesfilelockingandsimplefilereadandwriteoperationsusingjavaniochannelsFileChannel.htm"&gt;http://www.java2s.com/Code/Java/File-Input-Output/DemonstratesfilelockingandsimplefilereadandwriteoperationsusingjavaniochannelsFileChannel.htm&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"But if you can change/write the writing program: You have to change the design. App1 should write to "temporary" files, and when it's done, close and rename them to a naming convention that App2 will recognize as being "finished files, ready for processing"."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lock service, platform independent: &lt;a href="http://www.devx.com/Java/Article/7870/1954"&gt;http://www.devx.com/Java/Article/7870/1954&lt;/a&gt;. But requires all access via this service, so external FTP programs for example don't see the lock &amp; the java program won't see a lock so read it.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Maven&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;With Maven you can also have it put the sources + javadocs in the repository.&lt;br /&gt;Running 'mvn eclipse:eclipse' after that, and refresh the project in Eclipse, within Eclipse you can then see the javadocs and debug the sources. &lt;br /&gt;Just make sure you set &amp;lt;downloadSources&amp;gt; and &amp;lt;downloadJavadocs&amp;gt; to true.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Misc&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you have an action that can't be made transactional (e.g a file move), do that as last thing in your steps. More precisely: start a (e.g database) transaction, move the file. If that move succeeds, update status that move was successful. If that move fails, rollback the transaction, and thus is the status of that file still in "to move".&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-6052043850467961503?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6052043850467961503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6052043850467961503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6052043850467961503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6052043850467961503'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/02/lessons-learned-webservices-project.html' title='Lessons learned webservices project'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4969930441327184543</id><published>2011-02-12T10:05:00.003Z</published><updated>2011-02-12T10:11:59.954Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='number of downloads'/><category scheme='http://www.blogger.com/atom/ns#' term='insight'/><category scheme='http://www.blogger.com/atom/ns#' term='details'/><category scheme='http://www.blogger.com/atom/ns#' term='downloads'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='android market'/><title type='text'>Number of downloaded apps/installs of an android app</title><content type='html'>Online android market website gives more details on the number of downloads/installs of an app than the market on a device (phone)!&lt;br /&gt;Check for example 3D Light Racer Basic. On my Nexus One it says it has &gt; 250000 downloads. But on the website it says 500000 - 1000000 installs! See the red arrow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-9MYIxDmDd1Q/TVZcp6scqTI/AAAAAAAAAWQ/HnlWdTvbOFY/s1600/more_details.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 233px;" src="http://4.bp.blogspot.com/-9MYIxDmDd1Q/TVZcp6scqTI/AAAAAAAAAWQ/HnlWdTvbOFY/s320/more_details.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5572743464117643570" /&gt;&lt;/a&gt;&lt;br /&gt;Can be pretty useful for competitor analysis for example :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-4969930441327184543?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4969930441327184543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4969930441327184543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4969930441327184543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4969930441327184543'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2011/02/number-of-downloaded-appsinstalls-of.html' title='Number of downloaded apps/installs of an android app'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-9MYIxDmDd1Q/TVZcp6scqTI/AAAAAAAAAWQ/HnlWdTvbOFY/s72-c/more_details.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5170850642112447009</id><published>2010-11-12T15:22:00.012Z</published><updated>2010-11-13T16:48:08.245Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='pirating'/><category scheme='http://www.blogger.com/atom/ns#' term='licensing verification library'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='browser security'/><category scheme='http://www.blogger.com/atom/ns#' term='obfuscation'/><category scheme='http://www.blogger.com/atom/ns#' term='lvl'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='android market'/><title type='text'>My experience with Android Market Licensing and LVL</title><content type='html'>This post describes my lessons learned with the &lt;a href="http://developer.android.com/guide/publishing/licensing.html"&gt;Android Market Licensing service&lt;/a&gt; and the accompanying &lt;a href="http://developer.android.com/guide/publishing/licensing.html#download-lvl"&gt;License Verification Library&lt;/a&gt; (LVL). I used it the first time for a completely new application, never published on the market before.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Getting started&lt;/strong&gt;&lt;br /&gt;From the &lt;a href="http://developer.android.com/guide/publishing/licensing.html"&gt;description and instructions page&lt;/a&gt; you can read:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Android Market offers a licensing service that lets you enforce licensing policies for paid applications that you publish through Android Market. With Android Market Licensing, your applications can query Android Market at run time to obtain their licensing status for the current user, then allow or disallow further use as appropriate"&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"The License Verification Library (LVL) handles all of the licensing-related communication with the Android Market client and the licensing service. With the LVL integrated, your application can determine its licensing status for the current user by simply calling a library checker method and implementing a callback that receives the status"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TN1tBUlXCjI/AAAAAAAAAWA/HvTidhDD_Ss/s1600/software_pirating.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 255px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TN1tBUlXCjI/AAAAAAAAAWA/HvTidhDD_Ss/s320/software_pirating.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5538702986208283186" /&gt;&lt;/a&gt;&lt;br /&gt;That &lt;a href="http://developer.android.com/guide/publishing/licensing.html"&gt;page&lt;/a&gt; is quite elaborate and definitely a good starting point for integrating the LVL into your project. Note that your app needs to support SDK 1.5 or higher (API level 3 and onwards).&lt;br /&gt;&lt;br /&gt;The LVL I did not set up as a Library Project in Eclipse because it messed up my &lt;a href="http://subversion.apache.org/"&gt;Subversion&lt;/a&gt;. It got totally confused, indicating stuff wasn't checked in, but I also could not check anything in even after a cleanup. Or it kept indicating there were waiting changes to check in, even though I had it checked in. Maybe it's &lt;a href="http://www.eclipse.org/ganymede/"&gt;Eclipse Ganymede&lt;/a&gt;, maybe it's me :). So I just imported the source code in my project. Disadvantage is I'll have to update each project that uses the LVL when an update of the LVL arrives.&lt;br /&gt;&lt;br /&gt;Furthermore I used the &lt;a href="http://developer.android.com/guide/publishing/licensing.html#ServerManagedPolicy"&gt;ServerManagedPolicy&lt;/a&gt; and changed the salt for the AESObfuscator (which is used to securely obfuscate data written to and read from storage).&lt;br /&gt;Note that the AESObfuscator has been &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/f5469ac1d7157361"&gt;reported to be quite slow&lt;/a&gt;. &lt;br /&gt; &lt;br /&gt;Setting up a test response for license checks works fine for brand spanking new apps like mine was. On my emulator I used my developer account, on the real device (a &lt;a href="http://www.google.com/phone/detail/nexus-one"&gt;Nexus One&lt;/a&gt;) another gmail account as test-account.&lt;br /&gt;&lt;br /&gt;Quite essential in the documentation is the line &lt;span style="font-style:italic;"&gt;"Signing in using a publisher account offers the advantage of letting your applications receive static test responses even before the applications are uploaded to the publisher site"&lt;/span&gt;.&lt;br /&gt;It took me (and &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/f2bc919cb37a0f25/024bcf8c2d5a7eba"&gt;apparently others&lt;/a&gt;) quite a while to figure out that that means that the test accounts &lt;strong&gt;only&lt;/strong&gt; get the Test response when you've uploaded the app to the market and saved it! Otherwise they will get ERROR_NOT_MARKET_MANAGED.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To obfuscate or not to obfuscate&lt;/strong&gt;&lt;br /&gt;I decided not to obfuscate my application. Main reasons being:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It won't prevent hackers from decompiling your code for 100% sure.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It gets a real pain in the @ss to figure out the real line of the code when you get an error report or exception.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You should do a full regression test after obfuscation. Of course :) you have that all automated but still...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Note also that &lt;a href="http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html"&gt;the post explaining ProGuard obfuscation&lt;/a&gt; requires a &lt;a href="http://mobilebytes.wordpress.com/2010/09/23/glaring-mistake/"&gt;fix&lt;/a&gt; (it obfuscates too much). It might be &lt;a href="http://mobilebytes.wordpress.com/2010/10/10/google-gets-it-wrong/"&gt;updated now&lt;/a&gt;.&lt;br /&gt;Here's &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/f889e846fbf7ec3f"&gt;a tip&lt;/a&gt; when you're using &lt;a href="http://proguard.sourceforge.net/"&gt;Proguard&lt;/a&gt; obfuscation to easily indicate which classes shouldn't be obfuscated (in short: by letting those implement a specificly named interface and put that as a keep-rule in the proguard config).&lt;br /&gt;&lt;br /&gt;Great tip &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/29f1c159de781012"&gt;here&lt;/a&gt; to even more minimize the number of classes/interfaces you shouldn't obfuscate.&lt;br /&gt;&lt;br /&gt;For another nice introduction and more in-depth details on why you could use Proguard for obfuscation, shrinking and optimization, see &lt;a href="http://www.androidengineer.com/2010/07/optimizing-obfuscating-and-shrinking.html"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Server Response Extras&lt;/strong&gt;&lt;br /&gt;During testing on the emulator I found out that the &lt;a href="http://developer.android.com/guide/publishing/licensing.html#extras"&gt;Server Response Extras&lt;/a&gt; &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/df9d7090f7132f93/bf1b4c7b053edab1"&gt;are never set for the test responses&lt;/a&gt;, so it's quite hard to test different behaviour here on different values. On the other hand, the default implementation seems to handle it quite ok. If you don't like it, you'll have to dive into the LVL code...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Testing new versions of an app&lt;/strong&gt;&lt;br /&gt;I also found out that if you increase the &lt;a href="http://developer.android.com/guide/topics/manifest/manifest-element.html#vcode"&gt;versionCode&lt;/a&gt; of your app, and try to test that app on a real phone with a test account, &lt;a href="https://groups.google.com/group/android-developers/browse_thread/thread/1ff17c6bf409cba2"&gt;you'll get back ERROR_NOT_MARKET_MANAGED&lt;/a&gt;. Most likely this is because of the new versionCode, which the market licensing service does not recognize/accept. I have not seen the ability to just upload a new version of an app and only save it, it seems you can only publish it... And this thus means your test accounts can't test the app before release...&lt;br /&gt;&lt;br /&gt;Looking at a reply in &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/f2bc919cb37a0f25/024bcf8c2d5a7eba"&gt;this post&lt;/a&gt; it seems you &lt;strong&gt;don't even want to save a newer version&lt;/strong&gt; because the current version of your app &lt;strong&gt;disappears from the market!&lt;/strong&gt; Another report of this &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/11425e5de9967f3a"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As mentioned in the &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/f2bc919cb37a0f25/024bcf8c2d5a7eba"&gt;first post&lt;/a&gt;, the only way to test a newer version seems to set the versionCode to the &lt;strong&gt;currently published version&lt;/strong&gt; and use that during testing on a real device with test accounts. Sounds doable, there's not too much risk of forgetting to increase the versionCode when publishing: the market won't let you upload an app with the same versionCode as already published.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note&lt;/strong&gt;: Maybe the new "draft upload" feature fixes the above issues (see sixth item in &lt;a href="http://android-developers.blogspot.com/2010/11/android-market-action.html"&gt;this post&lt;/a&gt;), didn't try that out yet.&lt;br /&gt;&lt;br /&gt;Some answers from Trevor Johns in &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/f2bc919cb37a0f25/024bcf8c2d5a7eba"&gt;the post&lt;/a&gt; clarify things re: responses a bit but not all: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"If an app is not published AND not draft, then you'll get &lt;br /&gt;ERROR_NOT_MARKET_MANAGED."&lt;/span&gt;&lt;br /&gt;Yes, but if your testing with your developer account on the emulator, you get back whatever is set in the test response. Even for an app with a newer versionCode.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"If an app is in draft (never published), then we send LICENSED for all requests for that app."&lt;/span&gt;&lt;br /&gt;Is it? It seems it sends back to test accounts on a real device what's set in the Test response. Not tested yet for increased versionCode.&lt;br /&gt;The reply on 6aug10 from Trevor Johns in &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/41d79e8849e14154/82e429b76b2cde9a"&gt;this thread&lt;/a&gt; says it too. Unless I did something wrong, I noticed different behaviour.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"If an app is published (or has been published then unpublished), then &lt;br /&gt;the response is driven by the dev console settings for the developer/testers, and purely by purchase history for everyone else."&lt;/span&gt;&lt;br /&gt;Yes, but if you have increased the versionCode, test accounts on a real phone get back ERROR_NOT_MARKET_MANAGED.&lt;br /&gt;&lt;br /&gt;See also other responses in &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/c3caf229f0d1ce0/749be5817a9b09ea"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I also wanted to test what happens when I publish a new version, &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/b83cc702603b0ee3/74a2ed31e4c11111"&gt;would people with an older purchased version of the app still get verified successfully&lt;/a&gt;, and what does the provided LVL code do when it gets back LICENSED_OLD_KEY?&lt;br /&gt;My conclusion: that combination seems only testable on the emulator for the developer account before publishing the app (note I didn't try the scenario on a real device with the developer account). After really publishing the app you can test it of course, but that's a bit late, you want to try it before publishing, before the world can download it.&lt;br /&gt;For an app never published before, you can test the LICENSED_OLD_KEY as described &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/6a1df39e54670897"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;More securing your implementation&lt;/strong&gt;&lt;br /&gt;Of course I followed also most steps described in &lt;a href="http://android-developers.blogspot.com/2010/09/securing-android-lvl-applications.html"&gt;Securing Android LVL Applications&lt;/a&gt;. I did not add a CRC check. Tips on how to do that can also be found &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/291ca9f6199e2355"&gt;here&lt;/a&gt; and &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/af25adbf253b08ab"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wishes&lt;/strong&gt;&lt;br /&gt;What would be &lt;strong&gt;great&lt;/strong&gt; to have available in the &lt;a href="http://market.android.com/publish/Home"&gt;developer console&lt;/a&gt; is to see how many verification requests failed, and with what error. This way you can get an &lt;span style="font-style:italic;"&gt;indication&lt;/span&gt; on how many people try to illegally use your app, and get an indication whether something might be competely wrong with your app (e.g nobody gets correctly verified anymore).&lt;br /&gt;You could then also see how many people haven't upgraded yet via distinct the OLD_LICENSE_KEY responses.&lt;br /&gt;As long as this kind of statistics is not provided by the market, but you still want to know about these kind of failures, what you could do is report any error results to your own separate server (though of course a skilled hacker could prevent that from being sent).&lt;br /&gt;&lt;br /&gt;Finally: don't forget to add any issues you find to the &lt;a href="http://code.google.com/p/marketlicensing/issues/list"&gt;market licensing issues&lt;/a&gt; page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-5170850642112447009?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5170850642112447009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5170850642112447009' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5170850642112447009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5170850642112447009'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/11/my-experience-with-android-market.html' title='My experience with Android Market Licensing and LVL'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jFQmMfbR6Ec/TN1tBUlXCjI/AAAAAAAAAWA/HvTidhDD_Ss/s72-c/software_pirating.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5965785605686630531</id><published>2010-10-16T13:07:00.015+01:00</published><updated>2011-02-23T14:24:30.366Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='versioncode'/><category scheme='http://www.blogger.com/atom/ns#' term='description field'/><category scheme='http://www.blogger.com/atom/ns#' term='description'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='space'/><category scheme='http://www.blogger.com/atom/ns#' term='versionname'/><category scheme='http://www.blogger.com/atom/ns#' term='back key'/><category scheme='http://www.blogger.com/atom/ns#' term='activity lifecycle'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='ondestroy'/><category scheme='http://www.blogger.com/atom/ns#' term='android market'/><title type='text'>Saving precious Android Market description text space</title><content type='html'>Pretty annoying that you only have 325 characters in the description field when submitting an app right? You really have to use the space wisely. &lt;br /&gt;&lt;br /&gt;One of the things you usually want to put in what you have added/changed in the current release, so people who want to update know what to expect. &lt;br /&gt;That takes up precious space of those 325 characters. But from now on you don't need to worry about that anymore because... it turns out you can put &lt;strong&gt;any&lt;/strong&gt; text in the &lt;i&gt;android:versionName&lt;/i&gt; attribute in the AndroidManifest.xml!&lt;br /&gt;&lt;br /&gt;So what I usually do is put in versionName the digits from the android:versionCode attribute separated by dots, then a space and then a short description of what has changed since the last version. For example, suppose android:versionCode="103" then androidName becomes: &lt;br /&gt;&lt;br /&gt;&lt;i&gt;android:versionName="1.0.3 Preferences are now correctly stored"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;So what does it look like? Well here's first a screenshot of an app that only puts in a version number in the &lt;i&gt;android:versionName&lt;/i&gt; attribute:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TLmc2ucOtdI/AAAAAAAAAVw/-PxcApFDaxs/s1600/songdna_no_versiontext_arrow.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TLmc2ucOtdI/AAAAAAAAAVw/-PxcApFDaxs/s320/songdna_no_versiontext_arrow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5528622481567299026" /&gt;&lt;/a&gt;&lt;br /&gt;And here's an example of an app that fully uses that attribute:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TLmdAp6MU3I/AAAAAAAAAV4/7TMgyKLsXjU/s1600/gpsstatus_versiontext_long_arrow.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TLmdAp6MU3I/AAAAAAAAAV4/7TMgyKLsXjU/s320/gpsstatus_versiontext_long_arrow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5528622652149486450" /&gt;&lt;/a&gt;&lt;br /&gt;I do not know what the maximum lenght is of the versionName field, but apparently you can put quite some text in there, as can be seen from above screenshot.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: well, putting the version information in the versionName is not necessary anymore, since from now on there's a &lt;a href="http://market.android.com/support/bin/answer.py?answer=189724&amp;&amp;hl=en"&gt;separate field to put the recent changes into&lt;/a&gt;. What now quickly comes to mind to put into the versionName could be the minimal SDK version number your app supports. That can be useful for people who want/need to get your app on non-Google markets. This way they get at least an indication whether the app can run on their phone or not.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: and recently (definitely since 23 Feb 2011) they have limited the length of the versionName field to 30 characters, because if you exceed that, at apk-upload time you'll see: "The versionName in AndroidManifest.xml exceeds maximum (30)."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-5965785605686630531?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5965785605686630531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5965785605686630531' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5965785605686630531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5965785605686630531'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/10/saving-precious-android-market.html' title='Saving precious Android Market description text space'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jFQmMfbR6Ec/TLmc2ucOtdI/AAAAAAAAAVw/-PxcApFDaxs/s72-c/songdna_no_versiontext_arrow.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2965433815434872094</id><published>2010-10-03T10:13:00.018+01:00</published><updated>2010-10-03T11:13:38.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss esb'/><category scheme='http://www.blogger.com/atom/ns#' term='5.1'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss application server'/><category scheme='http://www.blogger.com/atom/ns#' term='issues'/><category scheme='http://www.blogger.com/atom/ns#' term='4.5'/><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss as'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='4.5.0'/><category scheme='http://www.blogger.com/atom/ns#' term='problems'/><category scheme='http://www.blogger.com/atom/ns#' term='application server'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>JBoss Application Server 5.1/ESB 4.5 GA and ActiveMQ 5.4 integration</title><content type='html'>On one of my last projects I had to integrate JBoss ESB 4.5 GA with ActiveMQ 5.4.0 and Spring 3. NOTE: the fixes below also work for integration with JBoss 5.1 Application Server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TKhUkxyWkWI/AAAAAAAAAVI/rvhjzN1Aj-s/s1600/jboss-logo.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 216px; height: 100px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TKhUkxyWkWI/AAAAAAAAAVI/rvhjzN1Aj-s/s320/jboss-logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5523757933786468706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jFQmMfbR6Ec/TKhUqN1EcaI/AAAAAAAAAVQ/Aum58fx-QFY/s1600/activemq_164.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 164px; height: 48px;" src="http://3.bp.blogspot.com/_jFQmMfbR6Ec/TKhUqN1EcaI/AAAAAAAAAVQ/Aum58fx-QFY/s320/activemq_164.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5523758027213402530" /&gt;&lt;/a&gt;&lt;br /&gt;My starting point was of course this post: &lt;a href="http://activemq.apache.org/integrating-apache-activemq-with-jboss.html"&gt;Integrating Apache ActiveMQ with JBoss&lt;/a&gt;. (Or is &lt;a href="https://cwiki.apache.org/confluence/display/ACTIVEMQ/Integrating+Apache+ActiveMQ+with+JBoss"&gt;this&lt;/a&gt; the original?)&lt;br /&gt;Part of the requirements mentioned in that article (Apache ActiveMQ 4.0.1+ and JBoss 4.0.4+) got me worried that the steps described might not work for my version of JBoss and ActiveMQ. Even though there's a '+' after the version numbers :)&lt;br /&gt;&lt;br /&gt;First I had quite a hard time finding the .rar file! Finally found it in \lib\optional in the ActiveMQ zip: activemq-rar-5.4.0.rar&lt;br /&gt;&lt;br /&gt;After that I followed the steps including up to 'Configuring JBoss'. In there you also have to start JBoss again.&lt;br /&gt;I didn't see any exceptions fly around so thought all was fine, so I started the consumer ('ant consumer').&lt;br /&gt;But there I got:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;[java] javax.jms.JMSException: Could not connect to broker URL: &lt;br /&gt;tcp://localhost:61616. Reason: java.net.ConnectException: &lt;br /&gt;Connection re[Thread-2] Caught: javax.jms.JMSException: Could not &lt;br /&gt;connect to broker URL: tcp://localhost:61616. Reason: &lt;br /&gt;java.net Connection Exception : connection refused&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Strrrange, because I thought the server started fine. After quite some searching, I figured out the error message probably indicates that there's just nothing listening at localhost:61616.&lt;br /&gt;After carefully checking the startup log (searching for 'activemq') I found out it hadn't started!&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;17:17:31,566 INFO  [XBeanXmlBeanDefinitionReader] Loading XML bean &lt;br /&gt;definitions from class path resource [broker-config.xml]&lt;br /&gt;17:17:31,768 WARN  [ActiveMQResourceAdapter] Could not start up embeded &lt;br /&gt;ActiveMQ Broker 'xbean:broker-config.xml': Line 29 in XML document from &lt;br /&gt;class path resource [broker-config.xml] is invalid; nested exception is&lt;br /&gt;org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration &lt;br /&gt;of element 'beans'.&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;That's weird, some namespace problem?&lt;br /&gt;Searching on the biggg internet I found &lt;a href="http://activemq.apache.org/xml-reference.html"&gt;this page&lt;/a&gt; (&lt;a href="http://mail-archives.apache.org/mod_mbox/activemq-users/200711.mbox/%3Cec6e67fd0711120124g125ffe1eldfab933c5eb97341@mail.gmail.com%3E"&gt;via&lt;/a&gt;), explaining that the namespaces are different from 5.1 onwards.&lt;br /&gt;&lt;br /&gt;Since I'm using AMQ 5.4.0 I tried in broker-config.xml:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;beans xmlns="http://activemq.apache.org/schema/core"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;But that still gave:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;17:23:38,638 WARN  [ActiveMQResourceAdapter] Could not start up embeded &lt;br /&gt;ActiveMQ Broker 'xbean:broker-config.xml': Line 29 in XML document from &lt;br /&gt;class path resource [broker-config.xml] is invalid; nested exception is &lt;br /&gt;org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration &lt;br /&gt;of element 'beans'.&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;So now I just tried all the namespace definitions:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;    xmlns:amq="http://activemq.apache.org/schema/core"&lt;br /&gt;    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;    xsi:schemaLocation="&lt;br /&gt;        http://www.springframework.org/schema/beans&lt;br /&gt;        http://www.springframework.org/schema/beans/spring-beans.xsd&lt;br /&gt;        http://activemq.apache.org/schema/core&lt;br /&gt;        http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd&lt;br /&gt;    "&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Darn, still not ok:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;17:27:42,265 WARN  [ActiveMQResourceAdapter] Could not start up embeded &lt;br /&gt;ActiveMQ Broker 'xbean:broker-config.xml': Line 49 in XML document from &lt;br /&gt;class path resource [broker-config.xml] is invalid; nested exception is &lt;br /&gt;org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard &lt;br /&gt;is strict, but no declaration can be found for element 'persistenceAdapter'.&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;But that was easy, missing the namespace prefix. So I modified:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;amq:persistenceAdapter&amp;gt;&lt;br /&gt;      &amp;lt;amq:journaledJDBC journalLogFiles="5" dataDirectory="activemq-data"/&amp;gt;&lt;br /&gt;      &amp;lt;!-- To use a different datasource, use th following syntax : --&amp;gt;&lt;br /&gt;      &amp;lt;!--&lt;br /&gt;      &amp;lt;journaledJDBC journalLogFiles="5" dataDirectory="../data" dataSource="#postgres-ds"/&amp;gt;&lt;br /&gt;       --&gt;&lt;br /&gt;&amp;lt;/amq:persistenceAdapter&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;But again an error:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;17:29:50,840 WARN  [ActiveMQResourceAdapter] Could not start up embeded &lt;br /&gt;ActiveMQ Broker 'xbean:broker-config.xml': Line 50 in XML document from &lt;br /&gt;class path resource [broker-config.xml] is invalid; nested exception is &lt;br /&gt;org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was &lt;br /&gt;found starting with element 'amq:journaledJDBC'. One of &lt;br /&gt;'{"http://activemq.apache.org/schema/core":amqPersistenceAdapter, &lt;br /&gt;"http://activemq.apache.org/schema/core":jdbcPersistenceAdapter, &lt;br /&gt;"http://activemq.apache.org/schema/core":journalPersistenceAdapter, &lt;br /&gt;"http://activemq.apache.org/schema/core":kahaDB, &lt;br /&gt;"http://activemq.apache.org/schema/core":kahaPersistenceAdapter, &lt;br /&gt;"http://activemq.apache.org/schema/core":memoryPersistenceAdapter, &lt;br /&gt;WC[##other:"http://activemq.apache.org/schema/core"]}' is expected.&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;So journaledJDBC is unknown. There must be something with a wrong namespace version or something. From the XSDs from &lt;a href="http://activemq.apache.org/xml-reference.html"&gt;here&lt;/a&gt; it seemed there was an element in the wrong place. So I just removed the whole persistenceAdapter element.&lt;br /&gt;&lt;br /&gt;I also noted that there is a persistenceFactory element in the AMQ 450 broker-config.xml, which is not present in the &lt;a href="http://activemq.apache.org/integrating-apache-activemq-with-jboss.html"&gt;Integrating Apache ActiveMQ with JBoss&lt;/a&gt; post.&lt;br /&gt;So I also changed that one's dataDirectory to be the same as in the (just removed)  persistenceAdapter:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;amq:persistenceFactory&amp;gt;&lt;br /&gt;      &amp;lt;amq:journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${jboss.server.data.dir}/activemq"/&amp;gt;&lt;br /&gt;&amp;lt;/amq:persistenceFactory&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Yes that did it! See the log part below:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;17:45:01,215 INFO  [XBeanXmlBeanDefinitionReader] Loading XML bean definitions &lt;br /&gt;from classpath resource [broker-config.xml]&lt;br /&gt;17:45:01,542 INFO  [DefaultListableBeanFactory] Pre-instantiating singletons &lt;br /&gt;in org.springframework.beans.factory.support.DefaultListableBeanFactory@157402b: &lt;br /&gt;defining beans [org.apache.activemq.xbean.XBeanBrokerService#0]; root of &lt;br /&gt;factory hierarchy&lt;br /&gt;17:45:01,697 INFO  [PListStore] PListStore:activemq-data\bruce.broker1\tmp_storage &lt;br /&gt;started&lt;br /&gt;&lt;br /&gt;... stuff deleted ...&lt;br /&gt;&lt;br /&gt;17:45:02,896 INFO  [BrokerService] ActiveMQ 5.4.0 JMS Message Broker &lt;br /&gt;(bruce.broker1) is starting&lt;br /&gt;17:45:02,911 INFO  [BrokerService] For help or more information please &lt;br /&gt;see: http://activemq.apache.org/&lt;br /&gt;17:45:03,083 INFO  [SchedulerBroker] Scheduler using directory: &lt;br /&gt;activemq-data\scheduler&lt;br /&gt;17:45:03,145 INFO  [JournalPersistenceAdapter] Journal Recovery Started from: &lt;br /&gt;Active Journal: using 5 x 20.0 Megs at: C:\jbossesb-server-4.5.GA\bin\${jboss.server.data.dir}\activemq\journal&lt;br /&gt;17:45:03,176 INFO  [JournalPersistenceAdapter] Journal Recovered: 0 message(s) &lt;br /&gt;in transactions recovered.&lt;br /&gt;17:45:03,207 INFO  [TransportServerThreadSupport] Listening for connections at: &lt;br /&gt;tcp://localhost:61616&lt;br /&gt;17:45:03,223 INFO  [TransportConnector] Connector bruce.broker1 Started&lt;br /&gt;17:45:03,223 INFO  [BrokerService] ActiveMQ JMS Message Broker (bruce.broker1,&lt;br /&gt; ID:PC555-4930-1389432149-0:0) started&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Also after that the consumer and producer worked fine.&lt;br /&gt;&lt;br /&gt;And as a final optimization to not having to change the namespace for each new ActiveMQ version, I removed the version from the activemq-core xsd:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;beans&lt;br /&gt;  xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;  xmlns:amq="http://activemq.apache.org/schema/core"&lt;br /&gt;  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;  xsi:schemaLocation="http://www.springframework.org/schema/beans &lt;br /&gt;  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd &lt;br /&gt;  http://activemq.apache.org/schema/core &lt;br /&gt;    http://activemq.apache.org/schema/core/activemq-core.xsd&lt;br /&gt;  "&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;To summarize, this is the final broker-config.xml (some comments deleted for space):&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!-- START SNIPPET: xbean --&amp;gt;&lt;br /&gt;&amp;lt;beans&lt;br /&gt;  xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;  xmlns:amq="http://activemq.apache.org/schema/core"&lt;br /&gt;  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;  xsi:schemaLocation="http://www.springframework.org/schema/beans &lt;br /&gt;   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&lt;br /&gt;   http://activemq.apache.org/schema/core &lt;br /&gt;      http://activemq.apache.org/schema/core/activemq-core.xsd&lt;br /&gt;  "&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!--  shutdown hook is disabled as RAR classloader may be gone at shutdown --&amp;gt;&lt;br /&gt;  &amp;lt;amq:broker useJmx="true" useShutdownHook="false" brokerName="bruce.broker1"&amp;gt;&lt;br /&gt;  &lt;br /&gt;     &amp;lt;amq:managementContext&amp;gt;&lt;br /&gt;       &amp;lt;!-- use appserver provided context instead of creating one,&lt;br /&gt;            for jboss use: -Djboss.platform.mbeanserver --&amp;gt;&lt;br /&gt;       &amp;lt;amq:managementContext createConnector="false"/&amp;gt; &lt;br /&gt;     &amp;lt;/amq:managementContext&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;amq:persistenceFactory&amp;gt;&lt;br /&gt;      &amp;lt;amq:journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${jboss.server.data.dir}/activemq"/&amp;gt;&lt;br /&gt;    &amp;lt;/amq:persistenceFactory&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;amq:transportConnectors&amp;gt;&lt;br /&gt;      &amp;lt;amq:transportConnector name="bruce.broker1" uri="tcp://localhost:61616"  discoveryUri="multicast://default"/&amp;gt;&lt;br /&gt;    &amp;lt;/amq:transportConnectors&amp;gt;&lt;br /&gt;    &lt;br /&gt;  &amp;lt;/amq:broker&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;JBoss 5.1 AS specific stuff:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I just copied over the above created .rar dir to the jboss-5.1.0.GA/server/default/deploy/activemq-ra.rar/META-INF directory and started it.&lt;br /&gt;&lt;br /&gt;Got one error trying:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;18:00:48,611 ERROR [AbstractKernelController] Error installing to Parse: &lt;br /&gt;name=vfsfile:/C:/jboss-5.1.0.GA/server/default/deploy/activemq-ra.rar/ &lt;br /&gt;state=Not Installed mode=Manual requiredState=Parse&lt;br /&gt;org.jboss.deployers.spi.DeploymentException: Error creating managed object &lt;br /&gt;for vfsfile:/C:/jboss-5.1.0.GA/server/default/deploy/activemq-ra.rar/&lt;br /&gt;        at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(&lt;br /&gt;DeploymentException.java:49)&lt;br /&gt;...&lt;br /&gt;Caused by: org.jboss.xb.binding.JBossXBException: Failed to parse source: &lt;br /&gt;cvc-complex-type.2.4.d: Invalid content was found starting with element &lt;br /&gt;'config-property-value'. No child element is expected at this point. @ &lt;br /&gt;vfsfile:/C:/jboss-5.1.0.GA/server/default/deploy/&lt;br /&gt;activemq-ra.rar/META-INF/ra.xml[100,36]&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Ah for some reason I had an empty &lt;config-property-type&gt; in ra.xml. Removing that made the 5.1 server start fine and the producer produce and the consumer consume!&lt;br /&gt;&lt;br /&gt;PS: the example consumer &amp; producer now send out 2000 messages instead of the 10 you see in the &lt;a href="http://activemq.apache.org/integrating-apache-activemq-with-jboss.html"&gt;Integrating Apache ActiveMQ with JBoss&lt;/a&gt; post.&lt;br /&gt;&lt;br /&gt;Hope this might help somebody some time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-2965433815434872094?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2965433815434872094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2965433815434872094' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2965433815434872094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2965433815434872094'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/10/jboss-4551-and-activemq-54-integration.html' title='JBoss Application Server 5.1/ESB 4.5 GA and ActiveMQ 5.4 integration'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jFQmMfbR6Ec/TKhUkxyWkWI/AAAAAAAAAVI/rvhjzN1Aj-s/s72-c/jboss-logo.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1606785259100131212</id><published>2010-10-03T10:03:00.003+01:00</published><updated>2010-10-03T10:12:53.474+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='james gosling'/><title type='text'>Changing format of blog</title><content type='html'>This blogpost is the last of the 'Best of this Week Summary' series. &lt;br /&gt;Looking at the number of subscribers, I decided it's too low to be worth the effort.&lt;br /&gt;&lt;br /&gt;Therefore, from now on I'll only post "real" blogposts written by myself, no more weekly summaries.&lt;br /&gt;Those posts will contain lessons learned, tutorials etc.&lt;br /&gt;This change of format also implies that the posts will be less frequent but hopefully much more interesting and relevant to a greater audience.&lt;br /&gt;&lt;br /&gt;For the fans, here's the last set of items for "Best of this Week Summary", 27 September - 3 October 2010:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Definitely &lt;a href="http://www.basementcoders.com/transcripts/James_Gosling_Transcript.html"&gt;interesting interview with James Gosling&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.dzone.com/articles/jpa-performance-optimization"&gt;Optimizing JPA Performance&lt;/a&gt;: An EclipseLink, Hibernate, and OpenJPA Comparison&lt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;PS: I'll change my mind if I get at least 50 (valid, unique) requests in the comments to keep posting my weekly summaries :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-1606785259100131212?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1606785259100131212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1606785259100131212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1606785259100131212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1606785259100131212'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/10/changing-format-of-blog.html' title='Changing format of blog'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5495579371891331543</id><published>2010-09-26T09:59:00.008+01:00</published><updated>2010-09-26T10:15:44.411+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='collections'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2010 summary'/><category scheme='http://www.blogger.com/atom/ns#' term='mdd'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='model driven development'/><title type='text'>Best of this Week Summary 14 September - 26 September 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;A set of &lt;a href="http://www.javacodegeeks.com/2010/08/java-best-practices-vector-arraylist.html"&gt;best practices for Collections&lt;/a&gt;, including multi-threading support.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Good &lt;a href="http://www.html5rocks.com/"&gt;source&lt;/a&gt; to get you started with &lt;a href="http://nl.wikipedia.org/wiki/HTML5"&gt;HTML5&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TJ8Os7PpjvI/AAAAAAAAAVA/--CFx0wyTkk/s1600/html5_w3c.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 225px; height: 222px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TJ8Os7PpjvI/AAAAAAAAAVA/--CFx0wyTkk/s320/html5_w3c.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5521147833159880434" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A short overview of &lt;a href="http://www.infoq.com/news/2010/09/mdd-who-how-why"&gt;the current state of Model Driven Development&lt;/a&gt; and a couple of lessons learned.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And lastly: a &lt;a href="http://technology.amis.nl/blog/8557/javaone-2010-keynote-by-thomas-kurian-java-strategy-and-directions"&gt;couple&lt;/a&gt; of &lt;a href="http://www.infoq.com/news/2010/09/javaone-monday-keynote-javafx"&gt;summaries&lt;/a&gt; on Thomas Kurian's keynote of last week's &lt;a href="http://www.oracle.com/us/javaonedevelop/062264.html"&gt;JavaOne 2010&lt;/a&gt; on Oracle's plans with Java, and a &lt;a href="http://www.infoq.com/news/2010/09/javaone2010-d2general"&gt;summary&lt;/a&gt; of the General Technical Session regarding the future of Java SE, EE and embedded.&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/8474871406958844140-5495579371891331543?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5495579371891331543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5495579371891331543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5495579371891331543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5495579371891331543'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/09/best-of-this-week-summary-14-september.html' title='Best of this Week Summary 14 September - 26 September 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/TJ8Os7PpjvI/AAAAAAAAAVA/--CFx0wyTkk/s72-c/html5_w3c.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1406425149919188671</id><published>2010-09-19T08:34:00.006+01:00</published><updated>2010-09-19T08:59:15.941+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pmd'/><category scheme='http://www.blogger.com/atom/ns#' term='social web'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='duplicate code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Best of this Week Summary 13 September - 19 September 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Interesting (sort of inside) &lt;a href="http://www.visionmobile.com/blog/2010/04/is-android-evil/"&gt;view&lt;/a&gt; on how Google controls what's shipped with Android on mobile phones, how smart their usage of open source is, and why Android probably got such a big momentum quickly.&lt;br /&gt;The controls are: private branches, closed review process, speed of evolution of the platform versions, incomplete public source code, gated development community, anti-fragmentation agreement, private roadmap and Android trademark.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Good list of &lt;a href="http://blog.jteam.nl/2010/09/01/social-sites-lessons-learned/"&gt;lessons learned when building social sites&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://getatomiq.com/"&gt;Atomiq&lt;/a&gt; could be handy &lt;a href="http://alexdresko.com/2010/09/09/finding-duplicate-code-in-c-vb-net-aspx-ruby-python-java-c-c-actionscript-or-xaml/"&gt;tool to check for duplicate code&lt;/a&gt; in Java, C#, VB.Net, ASPX, Ruby, Python, C, C++, ActionScript and XAML. A related similar tool is the Copy Paste Detector in &lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TJXClaCJJmI/AAAAAAAAAU4/A3bJRba4rPc/s1600/pmd_logo_small.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 144px; height: 106px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TJXClaCJJmI/AAAAAAAAAU4/A3bJRba4rPc/s320/pmd_logo_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5518530866311669346" /&gt;&lt;/a&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/8474871406958844140-1406425149919188671?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1406425149919188671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1406425149919188671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1406425149919188671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1406425149919188671'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/09/best-of-this-week-summary-13-september.html' title='Best of this Week Summary 13 September - 19 September 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/TJXClaCJJmI/AAAAAAAAAU4/A3bJRba4rPc/s72-c/pmd_logo_small.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2228320751992708560</id><published>2010-09-12T13:59:00.005+01:00</published><updated>2010-09-12T14:29:39.284+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='functional testing'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='templates'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Best of this Week Summary 06 September - 12 September 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Small tuturial for &lt;a href="http://www.javacodegeeks.com/2010/07/java-mail-spring-gmail-smtp.html"&gt;sending emails with Spring Framework&lt;/a&gt;, which provides some abstraction from the underlying mailing system.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nice: "&lt;a href="http://html5boilerplate.com/"&gt;HTML5 Boilerplate&lt;/a&gt; is the professional badass's base HTML/CSS/JS template for a fast, robust and future-proof site.&lt;br /&gt;After more than two years in iterative development, you get the best of the best practices baked in: cross-browser normalization, performance optimizations, even optional features like cross-domain ajax and flash. A starter apache .htaccess config file hooks you the eff up with caching rules and preps your site to serve HTML5 video, use @font-face, and get your gzip zipple on.&lt;br /&gt;Boilerplate is not a framework, nor does it prescribe any philosophy of development, it's just got some tricks to get your project off the ground quickly and right-footed."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Different existing logging strategies described and a new one: &lt;a href="http://www.bubblefoundry.com/blog/2010/08/grammar-based-event-logging/"&gt;grammar based event logging&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Be cautious to &lt;a href="http://teddziuba.com/2010/09/programming-things-i-wish-i-knew.html"&gt;not over-engineer your software solutions&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TIzVnCYRukI/AAAAAAAAAUw/AjQhlFYNH0E/s1600/overeng1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 160px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/TIzVnCYRukI/AAAAAAAAAUw/AjQhlFYNH0E/s320/overeng1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5516018510252325442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Are &lt;a href="http://code.google.com/p/spock/"&gt;Spock&lt;/a&gt;, &lt;a href="http://geb.codehaus.org/"&gt;Geb&lt;/a&gt; and &lt;a href="http://code.google.com/p/selenium/"&gt;WebDriver&lt;/a&gt; &lt;a href="http://blog.springsource.com/2010/08/28/the-future-of-functional-web-testing/"&gt;the future of functional web testing&lt;/a&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/8474871406958844140-2228320751992708560?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2228320751992708560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2228320751992708560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2228320751992708560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2228320751992708560'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/09/best-of-this-week-summary-06-september.html' title='Best of this Week Summary 06 September - 12 September 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jFQmMfbR6Ec/TIzVnCYRukI/AAAAAAAAAUw/AjQhlFYNH0E/s72-c/overeng1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8220656245168188419</id><published>2010-09-05T10:09:00.008+01:00</published><updated>2010-09-05T10:40:36.757+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='jee 6'/><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='spring mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='spring integration'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile web app'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><title type='text'>Best of this Week Summary 30 August - 05 September 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;A "series of (currently 5) &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=60642"&gt;articles&lt;/a&gt; introduces Contexts and Dependency Injection for Java EE (CDI), a key part of the Java EE 6 platform. Standardized via JSR 299, CDI is the de-facto API for comprehensive next-generation type-safe dependency injection as well as robust context management for Java EE. Led by Gavin King, JSR 299 aims to synthesize the best-of-breed features from solutions like Seam, Guice and Spring while adding many useful innovations of its own".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An extensive &lt;a href="http://www.genuitec.com/blog/?p=1733"&gt;tutorial on creating a Spring MVC based mobile web application using MyEclipse&lt;/a&gt;. The IDE has already an iPhone skinned version built in, this tutorial shows how to add other mobile handsets like Android and Palm Pre. Basically: providing another style :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jFQmMfbR6Ec/TINhCt4f_EI/AAAAAAAAAUg/yEh6kARXE04/s1600/thegoal.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 267px;" src="http://3.bp.blogspot.com/_jFQmMfbR6Ec/TINhCt4f_EI/AAAAAAAAAUg/yEh6kARXE04/s320/thegoal.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5513357068135824450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2010/08/12/running-activemq-using-spring/"&gt;How to use Apache ActiveMQ in combination with Spring&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dbmsmusings.blogspot.com/2010/08/problems-with-acid-and-how-to-fix-them.html"&gt;Why ACID is hard to scale&lt;/a&gt;. and an argument that NoSQL/NoACID is the lazy way around these difficulties. &lt;a href="http://cacm.acm.org/blogs/blog-cacm/50678-the-nosql-discussion-has-nothing-to-do-with-sql/fulltext"&gt;Here&lt;/a&gt;'s a post considering the performance argument for switching to a NoSQL database.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://whitherapps.com/introducing-whitherapps"&gt;Great interesting series&lt;/a&gt; on the progress of converting the native code BBC News iPhone/iPad app to a web app using HTML5.&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/8474871406958844140-8220656245168188419?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8220656245168188419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8220656245168188419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8220656245168188419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8220656245168188419'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/09/best-of-this-week-summary-30-august-05.html' title='Best of this Week Summary 30 August - 05 September 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jFQmMfbR6Ec/TINhCt4f_EI/AAAAAAAAAUg/yEh6kARXE04/s72-c/thegoal.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5933949983456006175</id><published>2010-08-29T11:51:00.012+01:00</published><updated>2010-08-29T12:36:40.217+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='mapreduce'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='anti patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='asynchronous'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='hadoop'/><title type='text'>Best of this Week Summary 23 August - 29 August 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Basic &lt;a href="http://www.theserverside.com/tip/13-Best-Practices-for-Optimizing-the-JBoss-EAP-Platform"&gt;best practices and optimization techniques&lt;/a&gt; for JBoss EAP 4.3 Production Environments.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://www.ibm.com/developerworks/xml/tutorials/x-realtimeXMPPtut/index.html"&gt;tutorial&lt;/a&gt; in which you will "create Pingstream, a small notification tool that uses PHP (sorry ;), jQuery and RSS to communicate over the Extensible Messaging and Presence Protocol (&lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt;), a set of XML technologies designed to support presence and real-time-communications functionality." &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.skill-guru.com/blog/2010/01/13/asynchronous-method-invocation-in-spring-3-0/"&gt;Asynchronouse method invocation with Spring 3.0 tutorial with example code&lt;/a&gt; via annotiations. Full task and scheduling reference &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Good list of REST API &lt;a href="http://blog.programmableweb.com/2010/08/13/api-anti-patterns-how-to-avoid-common-rest-mistakes/"&gt;anti-patterns&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And another set of &lt;a href="http://developer.yahoo.net/blogs/hadoop/2010/08/apache_hadoop_best_practices_a.html"&gt;anti-patterns, this time for &lt;a href="http://hadoop.apache.org/"&gt;Apache Hadoop&lt;/a&gt;. Also includes best practices&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pretty funky: researchers developed &lt;a href="http://www.cs.ucr.edu/~jdou/misco/"&gt;misco&lt;/a&gt;, a mobile framework of &lt;a href="http://en.wikipedia.org/wiki/MapReduce"&gt;MapReduce&lt;/a&gt; in Python (sorry again :) that can be handled by a server farm/cloud comprised of smartphones (e.g Nokia N95)." &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/THpFRhZVYKI/AAAAAAAAAUY/mdkE-Rwqm80/s1600/misco_system.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 231px; height: 320px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/THpFRhZVYKI/AAAAAAAAAUY/mdkE-Rwqm80/s320/misco_system.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5510793261365944482" /&gt;&lt;/a&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/8474871406958844140-5933949983456006175?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5933949983456006175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5933949983456006175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5933949983456006175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5933949983456006175'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/08/best-of-this-week-summary-23-august-29.html' title='Best of this Week Summary 23 August - 29 August 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jFQmMfbR6Ec/THpFRhZVYKI/AAAAAAAAAUY/mdkE-Rwqm80/s72-c/misco_system.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1623573974175351654</id><published>2010-08-25T21:02:00.013+01:00</published><updated>2010-08-25T21:43:12.322+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flashing'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='textview'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous'/><category scheme='http://www.blogger.com/atom/ns#' term='example code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='pulsating'/><category scheme='http://www.blogger.com/atom/ns#' term='endless'/><title type='text'>Endless flashing TextView animation in Android</title><content type='html'>A little while ago I needed a flashing text in Android. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/THV-Ehc0oYI/AAAAAAAAAUA/YZvJNfkiJCk/s1600/android-flashing.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/THV-Ehc0oYI/AAAAAAAAAUA/YZvJNfkiJCk/s320/android-flashing.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5509448335321506178" /&gt;&lt;/a&gt;&lt;br /&gt;Pretty easy you'd think: stick two animations in an AnimationSet, set the repeatMode to Animation.RESTART and repeatCount to Animation.INFITITE like this:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&amp;lt;set xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;&amp;lt;alpha&lt;br /&gt;    xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:fromAlpha="0.0"&lt;br /&gt;    android:toAlpha="1.0"&lt;br /&gt;    android:duration="1000"&lt;br /&gt;/&gt;&lt;br /&gt;&amp;lt;alpha&lt;br /&gt;    xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:fromAlpha="0.9"&lt;br /&gt;    android:toAlpha="0.0"&lt;br /&gt;    android:duration="1000"&lt;br /&gt;    android:startOffset="1000"&lt;br /&gt;/&gt;&lt;br /&gt;&amp;lt;/set&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;Activity code&lt;/strong&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;AnimationSet c = (AnimationSet) AnimationUtils.loadAnimation(this, R.anim.flash);&lt;br /&gt;c.setRepeatMode(Animation.RESTART);&lt;br /&gt;c.setRepeatCount(Animation.INFINITE);&lt;br /&gt;TextView tv = (TextView) findViewById(R.id.flashingTextView);&lt;br /&gt;tv.clearAnimation();&lt;br /&gt;tv.startAnimation(c);&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;and you're done.&lt;br /&gt;But no! It only runs one time, or 1.5 times or whatever; definitely not endlessly. &lt;br /&gt;&lt;br /&gt;This pretty basic requirement of looping a set of animations indefinitely is apparently a &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/9df24ac25f01cee9/f051f5d8d02dfe4e"&gt;known bug&lt;/a&gt;. I haven't been able to find out if it's still an outstanding issue today (August 2010) but unless I implemented it incorrectly, it is definitely present in SDK 1.6.&lt;br /&gt;Based on the answers in that thread and the example code &lt;a href="http://androidblogger.blogspot.com/2009/01/chaining-two-animations-or-how-to.html"&gt;here&lt;/a&gt;, I came up with the following solution:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;br /&gt;A fadein.xml and a fadeout.xml. See the end of this post for the complete code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Activity code&lt;/strong&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;&lt;br /&gt;    // Get ref to what we're going to animate (fade-in and fade-out indefinitely)&lt;br /&gt;    tv = (TextView) findViewById(R.id.flashingTextView);&lt;br /&gt;&lt;br /&gt;    // Setup fadein/out animations&lt;br /&gt;   fadeIn = AnimationUtils.loadAnimation(this, R.anim.fadein);&lt;br /&gt;   fadeIn.setAnimationListener( myFadeInAnimationListener );&lt;br /&gt;   fadeOut = AnimationUtils.loadAnimation(this, R.anim.fadeout);&lt;br /&gt;   fadeOut.setAnimationListener( myFadeOutAnimationListener );&lt;br /&gt;   &lt;br /&gt;   // And start with the fade in&lt;br /&gt;   launchInAnimation();&lt;br /&gt;&lt;br /&gt;    public void launchInAnimation() {&lt;br /&gt;       tv.startAnimation(fadeIn);&lt;br /&gt;    }    &lt;br /&gt;&lt;br /&gt;    public void launchOutAnimation() {&lt;br /&gt;       // Launch the second animation :&lt;br /&gt;       tv = (TextView) findViewById(R.id.flashingTextView);&lt;br /&gt;       tv.startAnimation(fadeOut);&lt;br /&gt;    }    &lt;br /&gt;    &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Two listeners which start the other animation at the end of an animation:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;    private class LocalFadeInAnimationListener implements AnimationListener {&lt;br /&gt;       public void onAnimationEnd(Animation animation) {&lt;br /&gt;           tv.post(mLaunchFadeOutAnimation);&lt;br /&gt;        }&lt;br /&gt;       public void onAnimationRepeat(Animation animation) {&lt;br /&gt;       }&lt;br /&gt;       public void onAnimationStart(Animation animation) {&lt;br /&gt;       }&lt;br /&gt;    };&lt;br /&gt;    &lt;br /&gt;    private class LocalFadeOutAnimationListener implements AnimationListener {&lt;br /&gt;       public void onAnimationEnd(Animation animation) {&lt;br /&gt;           tv.post(mLaunchFadeInAnimation);&lt;br /&gt;      }&lt;br /&gt;       public void onAnimationRepeat(Animation animation) {&lt;br /&gt;      }&lt;br /&gt;      public void onAnimationStart(Animation animation) {&lt;br /&gt;      }&lt;br /&gt;    };&lt;br /&gt;    &lt;br /&gt;    private LocalFadeInAnimationListener myFadeInAnimationListener = new LocalFadeInAnimationListener();&lt;br /&gt;    private LocalFadeOutAnimationListener myFadeOutAnimationListener = new LocalFadeOutAnimationListener();&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Runnables that do the fading&lt;/strong&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;    private Runnable mLaunchFadeOutAnimation = new Runnable() {&lt;br /&gt;       public void run() {&lt;br /&gt;            launchOutAnimation();&lt;br /&gt;       }&lt;br /&gt;    };    &lt;br /&gt;    &lt;br /&gt;    private Runnable mLaunchFadeInAnimation = new Runnable() {&lt;br /&gt;       public void run() {&lt;br /&gt;        launchInAnimation();&lt;br /&gt;       }&lt;br /&gt;    };    &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Note that I improved efficiency of the mentioned example code by only setting the animations one time and getting the TextView to animate only once.&lt;br /&gt;&lt;br /&gt;That's it!&lt;br /&gt;&lt;br /&gt;Note: in the logcat I do get these messages (2-3 times in about 5 minutes):&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;08-22 15:33:28.078: WARN/SurfaceComposerClient(252): lock_layer timed out (is the CPU pegged?) layer=0, lcblk=0x41048020, &lt;br /&gt;state=00000002 (was 00000043)&lt;br /&gt;08-22 15:33:28.078: WARN/SurfaceComposerClient(252): lock_layer() timed out but didn't appear to need to be locked and &lt;br /&gt;we recovered (layer=0, lcblk=0x41048020, state=00000002)&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Pretty strange, the CPU doesn't seem to be pegged... It says it recovers, but I guess the warning is there for a reason. Can the code be modified to avoid these warnings?  &lt;br /&gt;It might be a &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/8fa3fc99842ed9a7/"&gt;platform bug&lt;/a&gt;. Indeed I do see it appear in 1.6 but not in 2.1.&lt;br /&gt;&lt;br /&gt;Full code (tested on 1.6) can be downloaded &lt;a href="http://www.4shared.com/file/PdbDrDjp/20100822_TTLNewsFlashingTextDe.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-1623573974175351654?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1623573974175351654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1623573974175351654' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1623573974175351654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1623573974175351654'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/08/endless-flashing-textview-animation-in.html' title='Endless flashing TextView animation in Android'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/THV-Ehc0oYI/AAAAAAAAAUA/YZvJNfkiJCk/s72-c/android-flashing.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3640241252266378902</id><published>2010-08-22T11:51:00.007+01:00</published><updated>2010-08-22T12:22:38.137+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java io'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='spring web services'/><category scheme='http://www.blogger.com/atom/ns#' term='apache cxf'/><category scheme='http://www.blogger.com/atom/ns#' term='java nio'/><category scheme='http://www.blogger.com/atom/ns#' term='jars'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='nio'/><title type='text'>Best of this Week Summary 16 August - 22 August 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Great &lt;a href="http://www.mailinator.com/tymaPaulMultithreaded.pdf"&gt;performance analysis&lt;/a&gt; (PDF) between Java IO and Java NIO by Google engineer Paul Tyma. Java IO is performing about 25% better.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Of course I have to mention Oracle's Java &lt;a href="http://www.wired.com/images_blogs/threatlevel/2010/08/oracle-google-complaint.pdf"&gt;lawsuit&lt;/a&gt; against Google. Several viewpoints can be found &lt;a href="http://gigaom.com/2010/08/16/oracles-java-lawsuit-free-markets-not-free-software/"&gt;here&lt;/a&gt; (more on the profit/free markets) and &lt;a href="http://blog.headius.com/2010/08/my-thoughts-on-oracle-v-google.html"&gt;here&lt;/a&gt; (more elaborate and technical details) and &lt;a href="http://weblogs.java.net/blog/opinali/archive/2010/08/17/android-java"&gt;here&lt;/a&gt; (Android == Java?).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A short &lt;a href="http://naveenbalani.com/index.php/2010/05/comparing-spring-web-services-and-apache-cxf/"&gt;comparison&lt;/a&gt; between &lt;a href="http://static.springsource.org/spring-ws/sites/1.5/"&gt;Spring Web Services&lt;/a&gt; and &lt;a href="http://cxf.apache.org/"&gt;Apache CXF&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Several short &lt;a href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/bobleah/tags/html5?lang=en"&gt;HTML5 tutorials&lt;/a&gt; by Bob Leah from IBM collected at one place.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-5things6.html"&gt;Five things&lt;/a&gt; you might not know about .jar files.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jFQmMfbR6Ec/THEIWip3hNI/AAAAAAAAAT4/ZdT7zc3HL5o/s1600/jars.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 229px;" src="http://1.bp.blogspot.com/_jFQmMfbR6Ec/THEIWip3hNI/AAAAAAAAAT4/ZdT7zc3HL5o/s320/jars.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5508193002603381970" /&gt;&lt;/a&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/8474871406958844140-3640241252266378902?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3640241252266378902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3640241252266378902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3640241252266378902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3640241252266378902'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/08/best-of-this-week-summary-16-august-22.html' title='Best of this Week Summary 16 August - 22 August 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jFQmMfbR6Ec/THEIWip3hNI/AAAAAAAAAT4/ZdT7zc3HL5o/s72-c/jars.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-387484863012808660</id><published>2010-08-15T12:50:00.007+01:00</published><updated>2010-08-15T13:27:44.995+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='hype cycle'/><category scheme='http://www.blogger.com/atom/ns#' term='api design'/><category scheme='http://www.blogger.com/atom/ns#' term='roo'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><category scheme='http://www.blogger.com/atom/ns#' term='hadoop'/><title type='text'>Best of this Week Summary 9 August - 15 August 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;A quick &lt;a href="http://java.dzone.com/articles/creating-application-using"&gt;tutorial&lt;/a&gt; creating a &lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt; application and deploying it on &lt;a href="http://code.google.com/intl/en/appengine/"&gt;Google App Engine&lt;/a&gt;. And related to that, an &lt;a href="http://blog.springsource.com/2010/08/02/spring-security-in-google-app-engine/"&gt;article&lt;/a&gt; deploying &lt;a href="http://static.springsource.org/spring-security/site/"&gt;Spring Security&lt;/a&gt; on GAE.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A "&lt;a href="http://www.infoq.com/articles/API-Design-Joshua-Bloch"&gt;concise summary of the key points of API design, in easily digestible form&lt;/a&gt;" by Joshua Bloch.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Finally: &lt;a href="http://jquerymobile.com/2010/08/announcing-the-jquery-mobile-project/"&gt;jQuery is also working on a version that is for mobile devices&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A short &lt;a href="http://www.thetechtrendz.com/2010/07/comparing-google-app-engine-with-amazon.html"&gt;comparison of Google App Engine and Amazon EC2&lt;/a&gt;. They are not really comparable, but still useful when deciding where to host your site/service.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://gigaom.com/2010/08/01/meet-big-data-equivalent-of-the-lamp-stack/"&gt;Big Data analytics equivalent&lt;/a&gt; for LAMP (Linux, Apache HTTP Server, MySQL and PHP) architecture based on &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt;. Mentions Adobe and Facebook using several components. Interesting is the mentioning of Facebook which created a web-based tool, HiPal, that enables non-engineers to run queries on large data sets, view reports, and test hypotheses using familiar web browser interfaces. More details on how Facebook uses Hadoop can be found &lt;a href="http://www.infoq.com/news/2010/07/facebook-hadoop-summit"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Gartner released their new &lt;a href="http://www.gartner.com/DisplayDocument?id=1417913"&gt;2010 Hype Cycle&lt;/a&gt;. Always useful to see if you missed any new trends :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jFQmMfbR6Ec/TGfccO3hHyI/AAAAAAAAATo/FsXid1M1c5M/s1600/hypecycle2010.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_jFQmMfbR6Ec/TGfccO3hHyI/AAAAAAAAATo/FsXid1M1c5M/s320/hypecycle2010.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5505611447069122338" /&gt;&lt;/a&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/8474871406958844140-387484863012808660?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/387484863012808660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=387484863012808660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/387484863012808660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/387484863012808660'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/08/best-of-this-week-summary-9-august-15.html' title='Best of this Week Summary 9 August - 15 August 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jFQmMfbR6Ec/TGfccO3hHyI/AAAAAAAAATo/FsXid1M1c5M/s72-c/hypecycle2010.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-679313395781509226</id><published>2010-08-08T11:02:00.010+01:00</published><updated>2010-08-08T11:37:09.872+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='externalization'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='performance tips'/><category scheme='http://www.blogger.com/atom/ns#' term='serialization'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile web'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='obfuscation'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><title type='text'>Best of this Week Summary 2 August - 8 August 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.javacodegeeks.com/2010/07/java-best-practices-high-performance.html"&gt;How to utilize Externalization (faster, less flexible) for high performance&lt;/a&gt; applications instead of Serialization (slower, more flexible).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://www.jtict.com/blog/hate-wicket-framework/"&gt;bunch of pros and cons of Wicket&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An extensive &lt;a href="http://www.ibm.com/developerworks/xml/library/x-dataAndroid/?ca=dgr-hw22WebAndroidDatadth-XML"&gt;tutorial&lt;/a&gt; on how to work with XML, JSON and &lt;a href="http://code.google.com/intl/nl/apis/protocolbuffers/"&gt;Google's protocol buffers&lt;/a&gt; within Android applications. It shows how to "develop a Web service that converts CSV data into XML, JSON, and protocol-buffers formats. Then you'll build a sample Android application that can pull the data from the Web service in any of these formats and parse it for display to the user". Assumes Froyo 2.2. Also shows a short comparison in performance between the three protocols.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=60548"&gt;five part introduction to HTML5&lt;/a&gt; focusing on the mobile web.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.readwriteweb.com/enterprise/2010/08/blackhat-defcon-highlights.php"&gt;Highlights&lt;/a&gt; from Black Hat and Defcon 2010. That means security stuff :).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TF6Imp3Tz2I/AAAAAAAAATg/lSL9JJ-66_c/s1600/blackhat_defcon_0810.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 197px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TF6Imp3Tz2I/AAAAAAAAATg/lSL9JJ-66_c/s320/blackhat_defcon_0810.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5502985992347570018" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A list of (mostly obvious) &lt;a href="http://blog.dynatrace.com/2010/06/15/top-10-performance-problems-taken-from-zappos-monster-and-co/"&gt;performance problems&lt;/a&gt; identified at Zappos, Monster etc.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A pretty comprehensive &lt;a href="http://www.excelsior-usa.com/articles/java-obfuscators.html"&gt;overview of Java code obfuscating&lt;/a&gt; including these types: name, strings, code and flow, incremental, watermarking etc.&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/8474871406958844140-679313395781509226?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/679313395781509226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=679313395781509226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/679313395781509226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/679313395781509226'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/08/best-of-this-week-summary-2-august-8.html' title='Best of this Week Summary 2 August - 8 August 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/TF6Imp3Tz2I/AAAAAAAAATg/lSL9JJ-66_c/s72-c/blackhat_defcon_0810.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7488851289980165928</id><published>2010-08-01T13:23:00.005+01:00</published><updated>2010-08-01T13:43:28.978+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='spring mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='reusable code'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Best of this Week Summary 26 July - 1 August 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Pretty nasty, &lt;a href="http://it.slashdot.org/story/10/07/28/2121259/Oracles-Java-Company-Change-Breaks-Eclipse"&gt;some application apparently depend on the the company name in the JDK&lt;/a&gt;! Including Eclipse, causing OutOfMemoryErrors since Oracle changed the name from 'Sun Microsystems, Inc' to 'Oracle'. Sounds like a magic constant somewhere... Though as it says &lt;a href="http://www.zdnet.com/blog/burnette/oracle-rebrands-java-breaks-eclipse/2012"&gt;here&lt;/a&gt; it had to be put in to work around another bug. Oracle rolled it back until JDK 7.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Evolutionary architecture and emergent design: Leveraging reusable code, &lt;a href="http://www.ibm.com/developerworks/java/library/j-eaed11/index.html"&gt;Part 1&lt;/a&gt; and &lt;a href="http://www.ibm.com/developerworks/java/library/j-eaed12/index.html"&gt;Part 2&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://blog.springsource.com/2010/07/22/spring-mvc-3-showcase/"&gt;Spring MVC 3 Showcase&lt;/a&gt;, which should give you have a good idea of what the technology can do.It includes a sample project, along with a supporting slide presentation and screencast. After digging in, you should have a good understanding of what Spring MVC can do and get a feel for how easy it is to use.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some random &lt;a href="http://www.castledragmire.com/Posts/Android_Stuff"&gt;Android tips/lessons learned&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.javaspecialists.eu/archive/Issue186.html"&gt;Java Iterator Quiz&lt;/a&gt; time!&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/8474871406958844140-7488851289980165928?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7488851289980165928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7488851289980165928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7488851289980165928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7488851289980165928'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/08/best-of-this-week-summary-26-july-1.html' title='Best of this Week Summary 26 July - 1 August 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7330775602515670221</id><published>2010-07-25T09:54:00.008+01:00</published><updated>2010-07-25T10:21:43.322+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jericho'/><category scheme='http://www.blogger.com/atom/ns#' term='sonar'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='joda time'/><category scheme='http://www.blogger.com/atom/ns#' term='html parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='html formatting'/><category scheme='http://www.blogger.com/atom/ns#' term='dateformat'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise application integration'/><title type='text'>Best of this Week Summary 19 July - 25 July 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;A &lt;a href="http://blog.jteam.nl/2010/07/14/parsing-html-with-jericho/"&gt;short introduction&lt;/a&gt; to using the open source project &lt;a href="http://jericho.htmlparser.net/docs/index.html"&gt;Jericho&lt;/a&gt; to parse HTML. Jericho includes text extraction from HTML markup, rendering, formatting and compacting HTML.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A nice list of both strategic and technical factors you should consider when making decisions about integration &lt;a href="http://blogs.mulesoft.org/presentation-eai-when-tools-can-help/"&gt;in the blogpost EAI: when tools can help&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.readwriteweb.com/archives/bbc_world_cup_website_semantic_technology.php"&gt;The BBC used interesting semantic technologies&lt;/a&gt; on their soccer Worldcup 2010 website. See the architecture below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TEv_BaWnBYI/AAAAAAAAATY/FheuYw6PPOk/s1600/semantic_diagram_bbc.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 244px; height: 320px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TEv_BaWnBYI/AAAAAAAAATY/FheuYw6PPOk/s320/semantic_diagram_bbc.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5497768169854928258" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pretty &lt;a href="http://www.javacodegeeks.com/2010/07/java-best-practices-dateformat-in.html"&gt;basic article on using DateFormat in a multi-threading environment&lt;/a&gt;. Tricky because they are not synchronized. You should definitely also consider &lt;a href="http://joda-time.sourceforge.net/"&gt;Joda Time&lt;/a&gt; and the new Date and Time APIs for Java 7 (&lt;a href="https://jsr-310.dev.java.net/"&gt;JSR-310&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An &lt;a href="http://www.theserverside.com/tutorial/Use-Sonar-to-Develop-a-Quality-Feedback-Loop-into-the-Build-Cycle"&gt;explanation of how Sonar feedback metrics can be integrated&lt;/a&gt; into the code/test/commit/build cycle for a quality feedback loop.&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/8474871406958844140-7330775602515670221?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7330775602515670221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7330775602515670221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7330775602515670221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7330775602515670221'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/07/best-of-this-week-summary-19-july-25.html' title='Best of this Week Summary 19 July - 25 July 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/TEv_BaWnBYI/AAAAAAAAATY/FheuYw6PPOk/s72-c/semantic_diagram_bbc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8526498425993276226</id><published>2010-07-18T09:55:00.006+01:00</published><updated>2010-07-18T10:31:05.883+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='coding standards'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='bittorrent'/><category scheme='http://www.blogger.com/atom/ns#' term='unittesting'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><category scheme='http://www.blogger.com/atom/ns#' term='sessions'/><title type='text'>Best of this Week Summary 28 June - 18 July 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;How &lt;a href="http://code.google.com/intl/nl/appengine/"&gt;Google App Engine&lt;/a&gt; does &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=23914"&gt;session affinity&lt;/a&gt; &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=60270"&gt;explained&lt;/a&gt;. In short: as long as the requests from the client are within minutes (it seems) of each other, the requests will get send to the same node. If the time between two requests is longer, it might get sent to another node, potentially causing a noticable delay. A solution to prevent this is to send a 'ping' every minute from the client.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://agileskills2.org/blog/2010/06/17/three-time-saving-tips-you-didnt-know-in-testing-wicket-pages/"&gt;Three Wicket unittesting tips&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The CERT (Oracle) &lt;a href="https://www.securecoding.cert.org/confluence/display/java/The+CERT+Oracle+Secure+Coding+Standard+for+Java"&gt;Secure Coding Standards for Java&lt;/a&gt;: "rules and recommended practices for secure programming in the Java Platform Standard Edition 6 environment. This is a work-in-progress and they actively seek your feedback and involvement in making this effort a success."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; was having problems deploying new versions of their site to thousands of servers. With a solution built on top of &lt;a href="http://bittornado.com/"&gt;BitTornado&lt;/a&gt; (a modified version of &lt;a href="http://bittorrent.com/"&gt;Bittorrent&lt;/a&gt;), they were able to &lt;a href="http://engineering.twitter.com/2010/07/murder-fast-datacenter-code-deploys.html"&gt;reduce deployment time from 40 minutes to 12 seconds&lt;/a&gt;! The solution named Murder (Python + Ruby) is &lt;a href="http://github.com/lg/murder"&gt;available as open source&lt;/a&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/8474871406958844140-8526498425993276226?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8526498425993276226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8526498425993276226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8526498425993276226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8526498425993276226'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/07/best-of-this-week-summary-28-june-18.html' title='Best of this Week Summary 28 June - 18 July 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5795756803726717215</id><published>2010-07-07T12:34:00.004+01:00</published><updated>2010-07-07T12:48:01.101+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='performance tips'/><category scheme='http://www.blogger.com/atom/ns#' term='performance optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android performance tips</title><content type='html'>All videos and slides from sessions during Google's I/O conference last May 2010 are available &lt;a href="http://code.google.com/intl/nl-NL/events/io/2010/sessions.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I watched &lt;a href="http://code.google.com/intl/nl/events/io/2010/sessions/world-of-listview-android.html"&gt;The world of ListView&lt;/a&gt; and &lt;a href="http://code.google.com/intl/nl-NL/events/io/2010/sessions/writing-zippy-android-apps.html"&gt;Writing zippy Android apps&lt;/a&gt;. Below are the items that were most interesting to me. They are all Android performance related.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The world of ListView&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;9:15: A View in Android costs about one or 2K of RAM&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;16:55: Call notifyDataSetChanged() (from the UI thread) when something in your adapter has changed.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;18:27: getItemViewType() is used to make sure convertView is of the correct type in getView().&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;19:06: Make sure getViewTypeCount never changes. Note that it doesn't hurt performance if you always return say 10 even if you only have 2 different view types returned by getItemViewType().&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;30:13: Shows how to create a custom list selector in xml.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;40:40: android:smoothScrollbar to prevent scrollbar changing size. Especially useful for listviews with items of which height can differ greatly&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;41:00: Use fill_parent instead of wrap_content in a ListView&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;53:10: If refreshing the whole screen via notifyDataSetChanged() is too much of a performance hit, you can try to get the visible position and use getChildAt() to figure out what view to update. Example code for that is &lt;a href="http://code.google.com/p/shelves/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;53:50: Use inflate(item, parent, false) to prevent relative layout attributes being ignored in a listview.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;In general&lt;/b&gt;: don't try to outsmart the ListView by building your own caching, nor depend in any way on the order of getView(position) getting called.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Writing zippy Android apps&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Zippy means non-janky which means sluggish, slow etc.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;08:00: &lt;a href="http://code.google.com/p/zippy-android/"&gt;example apk&lt;/a&gt; of how not to do things/see how stuff performs. Includes small Perl sqllite wrapper script to see how much is being read from sqlite&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;15:00: read/writes I/O on emulator is a lot faster than on a real device&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;19:00: An AsyncTask can get killed before it finishes, e.g if the user hits the Home key. If it's important that the task finishes, use IntentService.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;24:15: Profiling/tracing apps 'adb shell am profile ...' with the TraceView tool.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;47:00: handling rotation when you don't want to reload your heavy objects: usegetLastNonConfigurationInstance() and onRetainNonConfigurationInstance(). See the &lt;a href="http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance()"&gt;Android reference&lt;/a&gt; for more info.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;51:00: Think about using files instead of sqlite (if you have limited structured data for example)&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/8474871406958844140-5795756803726717215?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5795756803726717215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5795756803726717215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5795756803726717215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5795756803726717215'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/07/android-performance-tips.html' title='Android performance tips'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6126888261998128226</id><published>2010-07-04T12:49:00.004+01:00</published><updated>2010-07-04T13:09:03.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod4j'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Lessons learned Wicket + Spring + Hibernate + Mod4J project</title><content type='html'>At a recent project we used the following tools &amp; frameworks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/downloads/widget/jdk6.jsp"&gt;Java JDK 6&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.apache.org/dyn/closer.cgi/wicket/1.4.8"&gt;Wicket 1.4.8&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/springframework/files/springframework-2/2.5/"&gt;Spring 2.5&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.hibernate.org/downloads.html"&gt;Hibernate 3.2.5&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mod4j.org/releases/1.2.1/releasenotes.html"&gt;Mod4J 1.2.1&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://tomcat.apache.org/download-60.cgi"&gt;Tomcat 6&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.oracle.com/technology/products/database/xe/index.html"&gt;Oracle XE 10g&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://maven.apache.org/download.html"&gt;Maven 2&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/galileo/"&gt;Eclipse Galileo&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.junit.org/"&gt;JUnit 4.8.1&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.dbunit.org/"&gt;DbUnit 2.4.7&lt;/a&gt; &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://opensso.dev.java.net/public/use/index.html"&gt;OpenSSO&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://subclipse.tigris.org/download.html"&gt;Subclipse SVN plugin&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://q4e.googlecode.com/svn/trunk/updatesite-iam"&gt;Eclipse IAM&lt;/a&gt; (Integration for Apache Maven)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.atlassian.com/software/jira/try.jsp"&gt;JIRA&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://continuum.apache.org/download.html"&gt;Continuum Continuous Integration&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Below are a couple of lessons learned which I remembered to write down:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wicket&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In a ModalWindow you'd probably want to use a AjaxSubmitLink, not a SubmitLink, if you want to use modalWindow.setWindowClosedCallback(). See &lt;a href="http://www.mail-archive.com/wicket-user@lists.sourceforge.net/msg22079.html"&gt;here&lt;/a&gt; for explanation.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ajaxrequesttarget.addComponent: addComponent name might be a bit confusing for beginners. It means "add the component to the list of components be re-rendered/refreshed".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An AjaxSubmitLink doesn't update the model when setDefaultFormProcessing() is set to false. Not totally illogical, but you still might run it to it when you don't expect it.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mail-archive.com/wicket-commits@incubator.apache.org/msg01815.html"&gt;Here&lt;/a&gt; are tips to validate related fields. (In the &lt;a href="https://cwiki.apache.org/WICKET/validating-related-fields.html"&gt;original&lt;/a&gt; the example code is missing.)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;AjaxSubmitLink: if you get a "Component-targetted feedback message was left unrendered. This could be because you are missing a FeedbackPanel on the page" warning in your Tomcat server console, it seems you &lt;strong&gt;have&lt;/strong&gt; to tell in the onError() of the AjaxSubmitLink which feedback panel(s) you want to have updated.&lt;br /&gt;You get the warning even when you have feedback panels higher up in the tree of the (Base)Page. An example to update those panels could be:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Component infoFeedback = getPage().get("infoPanel");&lt;br /&gt;                target.addComponent(infoFeedback); &lt;br /&gt;Component warnFeedback = getPage().get("warningPanel");&lt;br /&gt;                target.addComponent(warnFeedback); &lt;br /&gt;Component errorFeedback = getPage().get("errorPanel");&lt;br /&gt;                target.addComponent(errorFeedback); &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This solution was inspired by these posts: &lt;a href="http://web.archiveorange.com/archive/v/yH01clReTu2vltqd2SOe"&gt;post1&lt;/a&gt;, &lt;a href="http://apache-wicket.1842946.n4.nabble.com/Ajax-Wizard-and-feedback-td1843814.html"&gt;post2&lt;/a&gt;, &lt;a href="http://apache-wicket.1842946.n4.nabble.com/No-reaction-appear-on-ajaxSubmitLink-td1869810.html#a1869810"&gt;post3&lt;/a&gt;, &lt;a href="http://www.mail-archive.com/users@wicket.apache.org/msg38935.html"&gt;post4&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To show/hide any HTML markup block dynamically, just wrap it with a WebMarkupContainer. In the code create that wrapper and make it visible or not depending on your requirements:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;boolean makeVisible = false;&lt;br /&gt;WebMarkupContainer blockContainer = new WebMarkupContainer("blockWrapper");&lt;br /&gt;blockContainer.setVisible(makeVisible);&lt;br /&gt;add(blockContainer);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sometimes you might get a popup when using a ModalWinow that says "Reloading this page will cause modal window to disappear" when you don't expect it. Check the logs/console, you might just got an exception in your app (after which Wicket tries to redirect to the error page, which causes the popup to show; at least that's my reasoning).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;JUnit&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If JUnit can't find the Spring context.xml in the resources directory, then you have to add the resources dir to your Build path&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;Mod4J&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Does not really support LazyLoading so not very efficient for large "graphs" of data/dependencies. In those cases you could decide to skip the DTO layer and directly access the domain model.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Maven plugin IAM in Eclipse can be turned off for the Mod4J models project in Eclipse, otherwise it runs twice: once by Mod4J features, once by Maven (plugin).&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/8474871406958844140-6126888261998128226?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6126888261998128226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6126888261998128226' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6126888261998128226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6126888261998128226'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/07/lessons-learned-wicket-spring-hibernate.html' title='Lessons learned Wicket + Spring + Hibernate + Mod4J project'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6079650878944358231</id><published>2010-06-27T10:41:00.004+01:00</published><updated>2010-06-27T10:51:52.062+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='google guice'/><category scheme='http://www.blogger.com/atom/ns#' term='google analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='2D'/><title type='text'>Best of this Week Summary 15 June - 27 June 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=60326"&gt;References&lt;/a&gt; to two small &lt;a href="http://code.google.com/p/google-guice/"&gt;Google Guice&lt;/a&gt; Inversion of Control tutorials. Check also the comments re: Spring's current complexity.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nice &lt;a href="http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/"&gt;2D graphics tutorial for Android&lt;/a&gt; creating a vintage thermometer.&lt;br /&gt;A beginners &lt;a href="http://www.barebonescoder.com/2010/06/android-development-simple-2d-graphics-part-1/"&gt;tutorial creating a tic-tac-toe game&lt;/a&gt; for Android.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.worldturner.com/worldturner/entry/google_analytics_wicket_and_panels"&gt;How to combine Wicket panels with Google Analytics&lt;/a&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/8474871406958844140-6079650878944358231?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6079650878944358231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6079650878944358231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6079650878944358231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6079650878944358231'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/06/best-of-this-week-summary-15-june-27.html' title='Best of this Week Summary 15 June - 27 June 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3760967043499892433</id><published>2010-06-20T10:43:00.005+01:00</published><updated>2010-06-20T11:05:34.171+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-tasking'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Best of this Week Summary 14 June - 20 June 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;A short &lt;a href="http://blog.recursivity.com/post/638788745/wicket-vs-rails-smackdown"&gt;comparison between Wicket and Rails&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"A step by step guide of &lt;a href="http://javacodegeeks.blogspot.com/2010/05/gwt-2-spring-3-jpa-2-hibernate-35.html"&gt;how to develop a simple web application using Google's Web Toolkit (GWT) for the rich client and Spring as the back&lt;/a&gt; – end, server side framework: GWT 2, Spring 3, JPA2, Hibernate 3.5. The sample web application will provide functionality to make CRUD (Create Retrieve Update Delete) operations to a database. For the data access layer we will use JPA over Hibernate and for a database we will use Hypersonic. Of course you can change the configuration and use whatever you like. We will deploy the web application to an Apache – Tomcat instance." &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nice bunch of steps on &lt;a href="http://www.alittlemadness.com/2010/05/31/setting-up-an-android-project-build/"&gt;how to setup an Android project&lt;/a&gt; that works in Eclipse &lt;strong&gt;and&lt;/strong&gt; builds via Ant on the commandline. Anybody got a Maven variant of this?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.rlove.org/2010/04/why-ipad-and-iphone-dont-support.html"&gt;This&lt;/a&gt; might be the reason why the iPad and iPhone (&lt; iPhone 4) don't support multitasking right now: there's no swap.&lt;br /&gt;On a side note: &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;Objective-C (programming language for iPhone+iPad) has entered the programming language top 10&lt;/a&gt;, up from 45! Not really suprising with 200K+ apps in its app stores and Apple's Mac OSX share increasing. Java still on top but decreasing.&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/8474871406958844140-3760967043499892433?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3760967043499892433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3760967043499892433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3760967043499892433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3760967043499892433'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/06/best-of-this-week-summary-14-june-20.html' title='Best of this Week Summary 14 June - 20 June 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1685465541185452165</id><published>2010-06-13T09:51:00.004+01:00</published><updated>2010-06-13T10:22:10.738+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='deadlocks'/><category scheme='http://www.blogger.com/atom/ns#' term='rewrite'/><category scheme='http://www.blogger.com/atom/ns#' term='cyclic dependency'/><category scheme='http://www.blogger.com/atom/ns#' term='jme'/><category scheme='http://www.blogger.com/atom/ns#' term='css reset'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Best of this Week Summary 7 June - 13 June 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;When rewriting an app from scratch &lt;a href="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;doesn't make sense&lt;/a&gt;, and when it might &lt;a href="http://www.webnodes.com/a-total-rewrite-costly-time-consuming-but-worth-it"&gt;make sense&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.javaspecialists.eu/archive/Issue184.html"&gt;Java deadlocks through Cyclic Dependencies: title says it all.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Carnegie Mellon University's CERT (Computer Emergency Response Team) has released the &lt;a href="https://www.cert.org/blogs/vuls/2010/05/cert_basic_fuzzing_framework.html"&gt;Basic Fuzzing Framework&lt;/a&gt; (BFF), which is a simplified version of automated dumb fuzzing and includes a Linux virtual machine that has been optimized for fuzz testing and a set of scripts to implement a software test. It helps identify and eliminate security vulnerabilities from software products.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A nice (external) &lt;a href="http://blog.dynatrace.com/2010/06/04/hands-on-guide-verifying-fifa-world-cup-web-site-against-performance-best-practices/"&gt;analysis of the FIFA World Cup website&lt;/a&gt; against performance best practices.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Nokia's &lt;a href="http://blogs.forum.nokia.com/blog/nokia-developer-news/2010/05/19/everything-you-wanted-to-know-about-java-don-t-be-afraid-to-ask"&gt;set of learning and teaching materials on Java in Mobile Devices&lt;/a&gt; (JME/MIDP). In fact, it is Forum Nokia’s most comprehensive set of information ever. Included are five courses, 23 lectures, 25 lab exercises with source code, and more than 1,200 slides with notes. The material has been designed for university instructors and students, developers, and self-learners. Five main topics are covered:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java ME basics&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Multimedia&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Networking and messaging&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Games and graphics&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Security&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Of course JME is not so sexy as Android these days, but Nokia still has the &lt;a href="http://communities-dominate.blogs.com/brands/2010/04/worlds-biggest-computer-makers-if-we-include-smartphones-nokia-hp-apple.html"&gt;largest number of mobile phones out there&lt;/a&gt;. And most (even quite low end) support JME, so from a market perspective the potential is much higher than building apps for Android phones...&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/archives/css-structural-reset"&gt;Several CSS reset examples&lt;/a&gt;, including a few really short ones.&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/8474871406958844140-1685465541185452165?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1685465541185452165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1685465541185452165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1685465541185452165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1685465541185452165'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/06/best-of-this-week-summary-7-june-13.html' title='Best of this Week Summary 7 June - 13 June 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7615494765043856785</id><published>2010-06-06T08:26:00.005+01:00</published><updated>2010-06-06T09:02:32.338+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='smartgwt'/><category scheme='http://www.blogger.com/atom/ns#' term='website'/><category scheme='http://www.blogger.com/atom/ns#' term='oexchange'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile website'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>Best of this Week Summary 30 May - 6 June 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/intl/nl/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt; vs. &lt;a href="http://code.google.com/p/smartgwt/"&gt;Smart GWT&lt;/a&gt;: Which should you choose as front-end? Start immediately with Smart GWT, or start with GWT and pick SGWT  components when needed? Some insights &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=60186"&gt;here&lt;/a&gt;.&lt;br /&gt;Related to that, you might want to check &lt;a href="http://vaadin.com/"&gt;Vaadin&lt;/a&gt;: "Vaadin is an open source web application framework for rich Internet applications. In contrast to Javascript libraries and browser-plugin based solutions it features a server-side architecture, which means that the majority of the logic runs on the servers. Ajax technology is used at the browser-side to ensure a rich and interactive user experience. On client-side Vaadin is built on top of and can be extended with Google Web Toolkit. Vaadin utilizes Google Web Toolkit for rendering the resulting web page. While Google Web Toolkit operates only client-side (i.e. a browser's JavaScript engine) – which could lead totrust issues – Vaadin adds server-side validation to all actions. This means that if the client data is tampered with, the server notices this and doesn't allow it.&lt;br /&gt;Historically, Vaadin has been compared to Echo and ZK frameworks that use similar of server-side programming model. The server-side APIs are quite similar providing both events and GUI components, but the client-side (i.e. web browser) interaction differs in the way that Vaadin uses Java programmed GWT widgets, while ZK is jQuery based, and Echo has its own implementation. Currently, the most frequently compared frameworks include Adobe Flex, Google Web Toolkit, Apache Wicket and ICEfaces."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A new open spec collaboration has started: &lt;a href="http://www.oexchange.org/"&gt;OExchange&lt;/a&gt;, which is an open protocol for  sharing any URL with any service on the web. Bigger parties involved are LinkedIn, Microsoft, Google.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A new way of phishing: &lt;a href="http://ajaxian.com/archives/tabnabbing-phishing-by-switching-background-tab-content"&gt;TabNabbing - phishing by switching background tab content&lt;/a&gt;. Discovered by Firefox's creative lead &lt;a href="http://www.azarask.in/blog/"&gt;Aza Raskin&lt;/a&gt;. Biggest challenge seems to get the malicious Javascript on a site the user goes to.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Google announced a partnership with VMWare (and thus SpringSource and thus Spring) at I/O &lt;a href="http://www.readwriteweb.com/cloud/2010/05/google-and-vmware-partner.php"&gt;by adding its (GTW) widgets to Spring and deployment to the VMWare cloud&lt;/a&gt;. In marketing speak: "This is VMware and Google's view of the power of using Spring along with Google's presentation widgets to get apps started in hours, delivered in days, and deployed in minutes". Below it's shown in a diagram:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TAtRJlH6wbI/AAAAAAAAATQ/Bk-FrNzgkjE/s1600/fasterDevelopment.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/TAtRJlH6wbI/AAAAAAAAATQ/Bk-FrNzgkjE/s320/fasterDevelopment.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5479562596652335538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The iPad isn't without "errors" in its &lt;a href="http://www.useit.com/alertbox/ipad.html"&gt;usability (UI) according to Jakob Nielsen&lt;/a&gt;. For example: cross-app UI experience is inconsistent, and for some reason almost no app supports scrolling and shows information only per page. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"An &lt;a href="http://blogs.forum.nokia.com/blog/forum-nokia-web-developer-alert/2010/05/11/ten-tips-for-cross-browser-site-development"&gt;overview of how to design websites and optimise them for Maemo, iPhone, Android, and a variety of touch and non-touch devices based on S60 on Symbian&lt;/a&gt; OS. After reading the document, you will have the basic knowledge you need to start developing mobile web pages that provide cross-browser-compatible content in a user-friendly manner. Furthermore, with the tips and advice contained in the document, you can avoid making design choices that could eventually lead to a dead end or poor design, thus saving time in implementing and debugging features that will not work". &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.showslow.com/"&gt;Show Slow&lt;/a&gt;: an open source tool that helps monitor various website performance metrics over time. It captures the results of YSlow and Page Speed rankings and graphs them, to help you understand how various changes to your site affect its performance&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/8474871406958844140-7615494765043856785?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7615494765043856785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7615494765043856785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7615494765043856785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7615494765043856785'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/06/best-of-this-week-summary-30-may-6-june.html' title='Best of this Week Summary 30 May - 6 June 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/TAtRJlH6wbI/AAAAAAAAATQ/Bk-FrNzgkjE/s72-c/fasterDevelopment.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7968613505941175521</id><published>2010-05-23T10:33:00.007+01:00</published><updated>2010-05-23T10:54:35.959+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web application'/><category scheme='http://www.blogger.com/atom/ns#' term='cglib'/><category scheme='http://www.blogger.com/atom/ns#' term='webapplication'/><category scheme='http://www.blogger.com/atom/ns#' term='high availability'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='efficient java code'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic proxies'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Best of this Week Summary 17 May - 23 May 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://jarlsberg.appspot.com/"&gt;Codelab ("tutorial")&lt;/a&gt; from Google that "shows how web application vulnerabilities can be exploited and how to defend against these attacks. The best way to learn things is by doing, so you'll get a chance to do some real penetration testing, actually exploiting a real application. The codelab is built around Jarlsberg, a small, cheesy web application that allows its users to publish snippets of text and store assorted files. "Unfortunately," Jarlsberg has multiple security bugs ranging from cross-site scripting and cross-site request forgery, to information disclosure, denial of service, and remote code execution. The goal of this codelab is to guide you through discovering some of these bugs and learning ways to fix them both in Jarlsberg and in general."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A new &lt;a href="http://www.redbooks.ibm.com/redpieces/abstracts/sg247839.html?Open"&gt;IBM Redbook&lt;/a&gt; on WebSphere Messaging and High Availability has just been released.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A cool &lt;a href="http://greensopinion.blogspot.com/2010/05/lava-lamps-android-and-continuous.html"&gt;Android with Hudson continuous integration&lt;/a&gt;. Led on mobile phone changes color depending on the build status. Remember the &lt;a href="http://mark.michaelis.net/Blog/BuildStatusUsingLavaLampsByKenNichols.aspx"&gt;Lava Lamps version&lt;/a&gt;?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.dzone.com/articles/power-proxies-java"&gt;Java dynamic proxies explained&lt;/a&gt;. They are for example used in &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt; for lazy loading entities and in &lt;a href="http://www.springsource.org/"&gt;Spring&lt;/a&gt; for AOP. Also explains what &lt;a href="http://cglib.sourceforge.net/"&gt;CGLib&lt;/a&gt; proxies are for.&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/8474871406958844140-7968613505941175521?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7968613505941175521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7968613505941175521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7968613505941175521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7968613505941175521'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/05/best-of-this-week-summary-17-may-23-may.html' title='Best of this Week Summary 17 May - 23 May 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4008375287620695949</id><published>2010-05-16T10:18:00.005+01:00</published><updated>2010-05-16T10:37:34.218+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='adf'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='owasp'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>Best of this Week Summary 10 May - 16 May 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Finally a &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project"&gt;new version of the OWASP Top 10 Web Security Vulnerabilities&lt;/a&gt;. Previous versions were from 2007 and 2004.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lower level 8 potential &lt;a href="http://www.codenothing.com/archives/2010/8-jquery-micro-optimization-tips/"&gt;jQuery optimization tips&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://blog.jteam.nl/2010/05/05/implementing-rss-feeds-with-new-features-of-spring-3/"&gt;post&lt;/a&gt; explaining implementing RSS feeds with new &lt;a href="http://www.springsource.org/download"&gt;Spring 3&lt;/a&gt; features like &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/view/feed/AbstractRssFeedView.html"&gt;AbstractRssFeedView&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Oracle's ADF is starting to support mobile clients too with &lt;a href="http://www.oracle.com/technology/tech/wireless/adf_mobile.html"&gt;ADF Mobile Client&lt;/a&gt;. The technology preview for Blackberry is available now. &lt;a href="http://www.oracle.com/technology/tech/wireless/dev_blackberry.pdf"&gt;Here&lt;/a&gt;'s a tutorial PDF that shows how to develop a basic mobile browser application and a native app.&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/8474871406958844140-4008375287620695949?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4008375287620695949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4008375287620695949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4008375287620695949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4008375287620695949'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/05/best-of-this-week-summary-10-may-16-may.html' title='Best of this Week Summary 10 May - 16 May 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2050870281084942219</id><published>2010-05-09T17:02:00.007+01:00</published><updated>2010-05-09T17:31:46.195+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='mod4j'/><category scheme='http://www.blogger.com/atom/ns#' term='overview'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='dime'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='jme'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='code generation'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 03 May - 09 May 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://apirocks.com/html5/html5.html#slide1"&gt;Nice overview of what's new in HTML5&lt;/a&gt; on html, css and Javascript APIs.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.ibm.com/developerworks/websphere/techjournal/1004_brown/1004_brown.html"&gt;Principles and best practices for building high performing and highly resilient WebSphere eXtreme Scale applications&lt;/a&gt;" or "How IBM Supports High Volume and High SLA Applications". Compare &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=59979"&gt;for example&lt;/a&gt; with GigaSpaces.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What's the &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=290352"&gt;current standing of SOA&lt;/a&gt; after five years?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An &lt;a href="http://weblogs.java.net/blog/brunogh/archive/2010/04/27/dime-dependency-injection-java-me"&gt;interesting project&lt;/a&gt; &lt;a href="https://dime.dev.java.net/"&gt;DIME&lt;/a&gt; which provides Dependency Injection for Java ME. Compare with &lt;a href="http://springframework.me/"&gt;Spring ME&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mod4j.org/"&gt;Mod4j (Modeling for Java)&lt;/a&gt;: an open source DSL-based environment for developing administrative enterprise applications. The DSL helps you generate the basic CRUD and code for defined business rules.&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/8474871406958844140-2050870281084942219?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2050870281084942219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2050870281084942219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2050870281084942219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2050870281084942219'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/05/best-of-this-week-summary-03-may-09-may.html' title='Best of this Week Summary 03 May - 09 May 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8222214497185353366</id><published>2010-05-04T15:41:00.011+01:00</published><updated>2010-05-13T10:28:14.437+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system backup'/><category scheme='http://www.blogger.com/atom/ns#' term='harddisk backup'/><category scheme='http://www.blogger.com/atom/ns#' term='clonezilla'/><category scheme='http://www.blogger.com/atom/ns#' term='external disk'/><title type='text'>Clonezilla backup steps</title><content type='html'>In the last two years I had to get my harddisk replaced twice by a new one.&lt;br /&gt;To minimize effort of setting up the new disk, I investigated which harddisk-copy program would best fit my needs, without complex setup things or complex instructions to create a bootable/live CD.&lt;br /&gt;&lt;br /&gt;After trying several things, &lt;a href="http://www.clonezilla.org/"&gt;Clonezilla&lt;/a&gt; 1.2.2-31 did it for me. &lt;br /&gt;I tried &lt;a href="http://www.runtime.org/driveimage-xml.htm"&gt;DriveImage XML&lt;/a&gt;, but that required me to make a &lt;a href="http://www.nu2.nu/pebuilder/"&gt;streamlined CD for XP&lt;/a&gt; first, because I got a d:\i386\layout.inf not found error. I also looked at &lt;a href="http://www.paragon-software.com/home/db-express/download.html"&gt;Paragon Backup &amp; Recovery&lt;/a&gt;, but couldn't find how to create a live CD.&lt;br /&gt;&lt;br /&gt;Creating a bootable live DVD was easiest with Clonezilla, and it's standalone, so no OS disks like Windows XP needed. The actual steps to make a backup a bit difficult for non-unix/linux people, but not impossible.&lt;br /&gt;Below are the steps I now use to make a complete backup of my harddisk (including Windows) to a networked external disk via Samba.&lt;br /&gt;Whether you can use these steps for your setup completely depends on your setup. Main reason for listing the steps here is so I have an easy reference to them :)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make sure you have an external harddisk connected to your network.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make sure you have its IP address. If you're normally using DHCP, you might want to give it a fixed IP.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make sure you have enough diskspace left on that external harddisk&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To minimize network errors during the copying, you might want to use a network cable instead of a wireless connection. I definitely did that.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I used it for Windows XP, but any OS should do (it makes a byte-by-byte copy of the source disk&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Steps to make copy&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Put the bootable CD/DVD in the drive to boot from it. Choose F8 or F12 at startup if you manually need to select your machine to boot from it.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Wait until the boot sequence is done&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose language, and Don't touch keymap&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose Start Clonezilla&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you have to get the network card to get activated. That happens in the next steps&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose as Mount dir: samba_server&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose eth0. Choose DHCP&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter the IP of the networked external disk. E.g: 192.168.1.70&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I canceled the Domain configuration option&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter the account to use to connect to the networked external disk&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pay attention when you enter the directory where the image must be stored. It is the directory in which the directory with the image information will be put. If you enter a non-existing directory, the mount (happens when you hit OK) will fail. Not a problem, just that you know. If the mount fails, just restart the process, this time with an existing path. Example path: &lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;/public/home/partimag&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Hit OK. This will start the mount command. It will ask you for a password if applicable. When the command is successful, you'll see the filesystem mount points listed.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose Beginners Mode. Choose savedisk.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter a name for the image. I usually append some more identifying information to the prefilled filename, which is something like: 2010-05-02-18-img&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then choose the disk from the machine you want to make a backup for. For me it's only one: sda. Hit OK.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you should see a summary of the command, which looks like:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;/opt/drbl/sbin/ocs-sr -q2 -c -j2 -z1 -i 2000 -p true savedisk "2010-05-02-18-img" "sda"&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;Hit ENTER. That should start the backup. No errors should occur. My 500G harddisk with about 100G of data took about 4,5 hours to get backed up. One time I had an error in the output, saying something like the eth0 NIC was "gone". But the backup continued, and no other official errors were shown. It was not clear whether Clonezilla recovered successfully from the connection being away for a little while. Still, to be on the safe side, I made another backup, that had no network errors at all. &lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Steps to restore copy&lt;/strong&gt;&lt;br /&gt;These steps are about the same as making the copy, except that you select restoredisk instead of savedisk. But for completeness, here are the steps:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Choose language&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select Don't touch keymap&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select Start Clonezilla&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose first option device_image&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose samba_server&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose eth0&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose DHCP&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter IP address of server you've stored the image on (e.g. 192.168.1.70)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cancel domain&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter account name to login on server&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter as directory: /public/home/partimag (note it's the same as when making the copy)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter the password for the server. If correct, you'll see again the mount result (filesystem diskspace usage)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose Beginner&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose Restore disk&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose the image you want to restore (e.g 2010-05-02-18-img)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Choose target disk: sda&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you should see a summary of the command, which looks like:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;/opt/drbl/sbin/ocs-sr -g auto -e1 auto -e2 -c -r -j2 -p true restoredisk "2010-05-02-18-img" "sda"&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;Hit ENTER. That should start the backup. No errors should occur. My 500G harddisk with about 100G of data took about 2,5 hours to restore.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-8222214497185353366?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8222214497185353366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8222214497185353366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8222214497185353366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8222214497185353366'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/05/clonezilla-backup-steps.html' title='Clonezilla backup steps'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4407592314934476581</id><published>2010-05-02T09:34:00.006+01:00</published><updated>2010-05-02T09:57:06.410+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mahout'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jcr'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='recommendations engine'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='performance optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='ioc'/><category scheme='http://www.blogger.com/atom/ns#' term='storage'/><category scheme='http://www.blogger.com/atom/ns#' term='jdbc'/><title type='text'>Best of this Week Summary 26 April - 02 May 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Google's Chief Java Architect Josh Bloch "&lt;a href="http://www.pcworld.idg.com.au/article/343012/google_exec_worries_over_rudderless_java/"&gt;discusses many of the problems facing the Java community&lt;/a&gt;, including the ineffectiveness of J2ME, licensing problems, Java 7's late ship date, and even the JCP issues that James Gosling often opined about. He points out that these problems predate the Oracle acquisition of Sun, so everyone should just stop pointing their fingers at Larry Ellison."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Another &lt;a href="http://blog.jteam.nl/2010/04/15/mahout-taste-part-two-getting-started/"&gt;Getting Started blogpost&lt;/a&gt; for a &lt;a href="http://lucene.apache.org/mahout/taste.html"&gt;Mahout-Taste&lt;/a&gt; based movie recommendation engine, which uses Wicket as presentation layer.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Martin Fowler &lt;a href="http://martinfowler.com/articles/injection.html"&gt;explaining Inversion of Control and suggesting to call it the Dependency Injection pattern&lt;/a&gt;. Notes that the Service Locator pattern can also remove the dependency, just as the DI pattern tries to. Describes which of these options to use. Finally he also gives pros/cons for constructor vs setter injection. Also pros/cons for configuration in the code or via configuration files.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Several &lt;a href="http://ajaxian.com/archives/the-best-of-steve-performance-at-jsconf"&gt;Javascript performance-optimization tips&lt;/a&gt; taken at &lt;a href="http://jsconf.us/2010/"&gt;JSConf 2010&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.enigmastation.com/?page_id=425"&gt;An article&lt;/a&gt; "which looks at various storage mechanisms - JDBC, JPA, JavaSpaces, Java Content Repository, MongoDB, and DB4O, primarily - from the perspective of how good they are at CRUD operations and queries". The conclusion is that there is no one "best" mechanism, each has its own best application.&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/8474871406958844140-4407592314934476581?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4407592314934476581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4407592314934476581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4407592314934476581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4407592314934476581'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/05/best-of-this-week-summary-26-april-02.html' title='Best of this Week Summary 26 April - 02 May 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-9066819205727881414</id><published>2010-04-25T10:25:00.005+01:00</published><updated>2010-04-25T10:35:23.386+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jira'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='jta'/><category scheme='http://www.blogger.com/atom/ns#' term='jms'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='xss'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='sharding'/><category scheme='http://www.blogger.com/atom/ns#' term='gizzard'/><category scheme='http://www.blogger.com/atom/ns#' term='apache foundation'/><title type='text'>Best of this Week Summary 19 April - 25 April 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;An &lt;a href="http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html"&gt;introduction&lt;/a&gt; to &lt;a href="http://github.com/twitter/gizzard"&gt;Gizzard&lt;/a&gt;, an open sourced sharding framework (store data across multiple computers instead of on just one) which is used by &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A hands-on &lt;a href="http://blog.inflinx.com/2010/04/08/spring-jta-jpa-jms/"&gt;tutorial&lt;/a&gt; of creating a Spring application that uses Hibernate as JPA provider and JTA for transaction demarcation. A simple Order Processing Message Driven Bean is implemented that showcases this integration. It is deployed on a WebLogic 10.3 server.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Last week Jira from the Apache Foundation was compromised. &lt;a href="http://threatpost.com/en_us/blogs/apache-foundation-hit-targeted-xss-attack-041310"&gt;Here&lt;/a&gt;'s a description of how the hackers gained access via &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&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/8474871406958844140-9066819205727881414?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/9066819205727881414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=9066819205727881414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/9066819205727881414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/9066819205727881414'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/04/best-of-this-week-summary-19-april-25.html' title='Best of this Week Summary 19 April - 25 April 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-839311990426770954</id><published>2010-04-18T12:23:00.006+01:00</published><updated>2010-04-18T12:54:39.705+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='xpi'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><title type='text'>Best of this Week Summary 12 April - 18 April 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;An advanced article on &lt;a href="http://blog.springsource.com/2010/03/06/behind-the-spring-security-namespace/"&gt;Spring Security regarding namespaces.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A few &lt;a href="http://blogs.forum.nokia.com/blog/robin-jewsburys-forum-nokia-blog/2009/11/07/head-for-the-clouds-advice-for-budding-entrepreneurs"&gt;pros/cons on when you'd want to use Amazon's EC2, Google's App Engine or maybe RackspaceCloud&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://www.tweetdeck.com/"&gt;TweetDeck&lt;/a&gt; &lt;a href="http://googleappengine.blogspot.com/2010/04/tweetdeck-and-google-app-engine-match.html"&gt;uses GAE (Python) for some parts of their system, e.g sending emails, in combination with EC2&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;John Resig on &lt;a href="http://carsonified.com/blog/dev/john-resig-on-advanced-javascript-to-improve-your-web-app/"&gt;improving the Javascript in your web app&lt;/a&gt;. Video &amp; full transcript, including new features now available in jQuery 1.4. Mentioned are: delegation, live events, html fragments, javascript from CDN, additional header in Ajax calls, custom events, special events, themeability and customizability, i18n, and IE6 support.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An older but still interesting &lt;a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches"&gt;PDF on Scrum and XP experience in a project of 40 people&lt;/a&gt;. They experimented for about a year on different team sizes, different sprint lenghts etc.&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/8474871406958844140-839311990426770954?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/839311990426770954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=839311990426770954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/839311990426770954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/839311990426770954'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/04/best-of-this-week-summary-12-april-18.html' title='Best of this Week Summary 12 April - 18 April 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4820542804132754825</id><published>2010-04-11T10:33:00.010+01:00</published><updated>2010-04-12T12:59:48.963+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='myths'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='scanners'/><category scheme='http://www.blogger.com/atom/ns#' term='internet OS'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='operating system'/><category scheme='http://www.blogger.com/atom/ns#' term='gigaspaces xap'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle coherence'/><category scheme='http://www.blogger.com/atom/ns#' term='internet operating system'/><title type='text'>Best of this Week Summary 5 April - 11 April 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Google recently released &lt;a href="http://googleonlinesecurity.blogspot.com/2010/03/meet-skipfish-our-automated-web.html"&gt;SkipFish&lt;/a&gt;, a free, open source, fully automated, active web application security reconnaissance tool/scanner. "It prepares an interactive sitemap for the targeted site by carrying out a recursive crawl and dictionary-based probes. The resulting map is then annotated with the output from a number of active (but hopefully non-disruptive) security checks. The final report generated by the tool is meant to serve as a foundation for professional web application security assessments."&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jFQmMfbR6Ec/S8GbuFGfEgI/AAAAAAAAATI/TlZRmw9dt4U/s1600/skipfish-screen.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 203px;" src="http://3.bp.blogspot.com/_jFQmMfbR6Ec/S8GbuFGfEgI/AAAAAAAAATI/TlZRmw9dt4U/s320/skipfish-screen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5458815439295418882" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great, &lt;a href="http://blog.leonpennings.com/?p=76"&gt;lessons learned/experiences/comparison&lt;/a&gt; on using &lt;a href="http://wicket.apache.org/"&gt;Wicket&lt;/a&gt; and &lt;a href="http://code.google.com/intl/en/webtoolkit/"&gt;GWT&lt;/a&gt;. Definitely also check the comments.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tim O'Reilly's interesting attempt on &lt;a href="http://radar.oreilly.com/2010/03/state-of-internet-operating-system.html"&gt;defining the internet operating system&lt;/a&gt;. What is it, what does it do etc.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Seven &lt;a href="http://blog.programmableweb.com/2010/03/31/7-ways-to-make-your-api-more-successful/"&gt;tips on how to make your API more successful&lt;/a&gt; from &lt;a href="http://www.npr.org/"&gt;NPR&lt;/a&gt;'s Director of Application Development.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.lessonsoffailure.com/developers/pervasive-myths-older-software-developers/"&gt;Five myths&lt;/a&gt; about old developers (40+?) debunked.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A interesting &lt;a href="http://gojko.net/2009/06/01/oracle-coherence-vs-gigaspaces-xap/"&gt;comparison between Oracle Coherence &amp; GigaSpaces XAP&lt;/a&gt; from about a year ago. More feedback also &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=54903"&gt;here&lt;/a&gt;. OC  and GX are two of the largest Java data/computing grid solutions.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And yes it's true, &lt;a href="http://nighthacks.com/roller/jag/entry/time_to_move_on"&gt;James "Java" Gosling has also left Oracle&lt;/a&gt;, after Jonathan Schwartz already did &lt;a href="http://www.taranfx.com/sun-ceo-resign"&gt;earlier&lt;/a&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/8474871406958844140-4820542804132754825?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4820542804132754825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4820542804132754825' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4820542804132754825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4820542804132754825'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/04/best-of-this-week-summary-5-april-11.html' title='Best of this Week Summary 5 April - 11 April 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jFQmMfbR6Ec/S8GbuFGfEgI/AAAAAAAAATI/TlZRmw9dt4U/s72-c/skipfish-screen.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3826054775989577887</id><published>2010-04-04T09:06:00.006+01:00</published><updated>2010-04-04T09:36:22.957+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb'/><category scheme='http://www.blogger.com/atom/ns#' term='serialization'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='aop'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Best of this Week Summary 29 March - 04 April 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;A &lt;a href="http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1411164,00.html"&gt;short overview&lt;/a&gt; on what the differences are using Java in Google App Engine (and shortly mentioned in MS Azure) compared to "regular" JEE apps.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Three Java serialization options &lt;a href="http://whiteboardjunkie.wordpress.com/2009/09/14/serialization-options-compared/"&gt;compared&lt;/a&gt;: Java Serialization, JSON Serialization and &lt;a href="http://code.google.com/intl/en/apis/protocolbuffers/"&gt;Google Protocol Buffers&lt;/a&gt;. Check also the comments &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=57871"&gt;here&lt;/a&gt;. Another benchmarking set can be found &lt;a href="http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking"&gt;here&lt;/a&gt;.&lt;br /&gt;The protocol buffers solution was fastest in this test.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://www.theserverside.com/news/1369777/Free-Book-Mastering-Enterprise-JavaBeans-Third-Edition"&gt;third edition of Mastering EJB, is now available for free download off of TSS as PDF&lt;/a&gt;. The new edition includes more than 30 percent revised material and five new chapters covering security, integration, best practices, new EJB 2.1 features, as well as the latest open source Java solutions&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Interesting read on the &lt;a href="http://www.computerworld.com.au/article/339594/how_do_they_do_it_/"&gt;IT infrastructure (most of the article) in F1 racing&lt;/a&gt;.&lt;br /&gt;Some quotes: "each car has roughly 100 sensors placed in key data capture positions and send anywhere up to 20 gigabyes of data back to the pits during a race."&lt;br /&gt;"They are collecting four to six megabytes per lap. It depends on the track layout and the quality of the coverage but we transfer about 70 per cent in real time to the garage or the pits". And, did you know there's a connection with the factory during the race?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A funny observation that &lt;a href="http://plpatterns.com/post/482063133/every-time-you-use-css-youre-doing-aspect-oriented"&gt;CSS has quite something in common with Aspect Oriented  Programming&lt;/a&gt;! Includes a table which shows the similarities.&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/8474871406958844140-3826054775989577887?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3826054775989577887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3826054775989577887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3826054775989577887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3826054775989577887'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/04/best-of-this-week-summary-29-march-04.html' title='Best of this Week Summary 29 March - 04 April 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2989365469989700402</id><published>2010-03-28T11:26:00.005+01:00</published><updated>2010-03-28T11:40:41.372+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='jme'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='versioning'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><title type='text'>Best of this Week Summary 22 March - 28 March 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://reprog.wordpress.com/2010/03/03/whatever-happened-to-programming/"&gt;Whatever happened to programming&lt;/a&gt;? These days it is seems only glueing together a bunch of libraries... Where's the creativity? Well, I think you can now more and more focus on what your app can/should do, instead of re-inventing the wheel all the time. And if you have a real unique idea, you still will have to write those libs too :)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.informit.com/articles/article.aspx?p=1566460"&gt;Versioning REST services&lt;/a&gt;: "when developers need to create a new endpoint versus just adding data".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1506550,00.html"&gt;basic comparison between Kindle (JME) &amp; Android Java development&lt;/a&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/8474871406958844140-2989365469989700402?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2989365469989700402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2989365469989700402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2989365469989700402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2989365469989700402'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/03/best-of-this-week-summary-22-march-28.html' title='Best of this Week Summary 22 March - 28 March 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2119671703605239581</id><published>2010-03-21T13:30:00.011Z</published><updated>2010-03-24T11:15:40.409Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile phones'/><category scheme='http://www.blogger.com/atom/ns#' term='version'/><category scheme='http://www.blogger.com/atom/ns#' term='resolutions'/><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='comparable devices'/><category scheme='http://www.blogger.com/atom/ns#' term='sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='density'/><category scheme='http://www.blogger.com/atom/ns#' term='densities'/><category scheme='http://www.blogger.com/atom/ns#' term='screensizes'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android SDKs, screensizes and resolutions: comparable hardware</title><content type='html'>Trying to get an overview of the possible combinations of Android SDKs and screensizes and resolutions, *and* what physical devices are comparable, I came to the below overview. If you know some more comparable hardware, please let me know, I'll update the tables.&lt;br /&gt;&lt;br /&gt;The first table shows the different screensizes defined as per &lt;a href="http://developer.android.com/intl/en/guide/practices/screens_support.html"&gt;Supporting Multiple Screens | Android Developers&lt;/a&gt;, mapped on real existing devices. &lt;br /&gt;&lt;style type="text/css"&gt;.nobrtable br { display: none }&lt;/style&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;br /&gt;&lt;table bordercolor="#000000" cellspacing="0" cellpadding="0" width="100%" border="1"&gt;&lt;br /&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;br /&gt;&lt;th width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Id&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;br /&gt;&lt;th width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Screensize, resolution, physical&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;br /&gt;&lt;th width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Comparable hardware&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="5%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;QVGA (240x320, low density, small screen, 3.3”)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;B&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;HVGA (320x480, medium density, normal screen, 3.9”)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;HTC Hero 1.5 but really has 3.2”&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;C&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;WVGA800 (480x800, high density, normal screen, 3.9”)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;Google Nexus One but really has 3.7”&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;D&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;WVGA854 (480x854 high density, normal screen, 4.1”)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;Motorola Droid (aka Milestone) but really has 3.7” and Sony Ericsson Xperia X10 (screensize unclear)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;E&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;WQVGA400 (240x400, low density, normal screen, 3.9”)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;F&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;WQVGA432 (240x432, low density, normal screen, 4,1”)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The table below shows which SDK supports the above screensizes.&lt;br /&gt;&lt;style type="text/css"&gt;.nobrtable br { display: none }&lt;/style&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;br /&gt;&lt;table bordercolor="#000000" cellspacing="0" cellpadding="0" width="100%" border="1"&gt;&lt;br /&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;br /&gt;&lt;th width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;SDK&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;br /&gt;&lt;th width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Screensize Id&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="5%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;1.5&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;1.6&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;B-D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;2.0&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;B-F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;2.0.1&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;B-F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;2.1&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td width="14%"&gt;&lt;br /&gt;&lt;p style="FONT-STYLE: normal; TEXT-DECORATION: none" align="left"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Times New Roman, serif;"&gt;&lt;span style="font-size:100%;"&gt;B-F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Remarks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The total nr of possible sdk+screensize combinations is 19!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Android has organized the screensizes and resolutions into three generalized sizes and three generalized densities, see &lt;a href="http://developer.android.com/intl/en/guide/practices/screens_support.html#range"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To support all these resolutions, you don't &lt;b&gt;have&lt;/b&gt; to create icons/images for all possible combinations. By default Android tries to scale resources. Up to a certain limit it could be acceptable to let it do it for you, minimizing the number of images to create.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An example setting is minSdkVersion = 3, targetSdkVersion = 4 (where 3 = 1.5, 4 = 1.6). Targeting 1.6 ensures that different screensizes can be supported if the device has 1.6 or higher.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cool skins you can find &lt;a href="http://teavuihuang.com/android/"&gt;here&lt;/a&gt;. If you look at the configuration files, you can validate whether the screensize and resolutions are actually what you expect.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sources: &lt;a href="http://www.motorola.com/Consumers/US-EN/Consumer-Product-and-Services/Mobile-Phones/ci.Motorola-DROID-US-EN.alt"&gt;Droid&lt;/a&gt;, &lt;a href="http://www.google.com/phone/static/en_US-nexusone_tech_specs.html"&gt;Nexus One&lt;/a&gt;, &lt;a href="http://www.htc.com/uk/product/hero/specification.html"&gt;Hero&lt;/a&gt;, &lt;a href="http://www.sonyericsson.com/cws/products/mobilephones/specifications/xperiax10"&gt;Xperia X10&lt;/a&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/8474871406958844140-2119671703605239581?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2119671703605239581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2119671703605239581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2119671703605239581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2119671703605239581'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/03/android-sdks-screensizes-and.html' title='Android SDKs, screensizes and resolutions: comparable hardware'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3618489038645707216</id><published>2010-03-21T11:48:00.009Z</published><updated>2010-03-21T12:30:44.814Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='osb'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='cassandra'/><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='soapui'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Best of this Week Summary 15 March - 21 March 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Twitter and Digg are moving from MySQL to &lt;a href="http://cassandra.apache.org/"&gt;Cassandra&lt;/a&gt; (a highly scalable second-generation distributed database, bringing together  Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model; a Facebook opensourced project). The&lt;a href="http://gigaom.com/2010/03/11/digg-cassandara/"&gt; reason for Digg for the move&lt;/a&gt; "is the increasing difficulty of building a high-performance, write-intensive application on a data set that is growing quickly, with no end in sight. This growth has forced them into horizontal and vertical partitioning strategies that have eliminated most of the value of a relational database, while still incurring all the overhead".&lt;br /&gt;Twitter has about the same reason: "No single points of failure", "Highly scalable writes (we have highly variable write traffic)", and "A healthy and productive open source community".&lt;br /&gt;&lt;a href="http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king"&gt;Twitter tried&lt;/a&gt; HBase, Voldemort, MongoDB, MemcacheDB, Redis, Cassandra, and HyperTable amongst others before deciding to go with Cassandra. Interesting to read is how they slowly rollout Cassandra to limited sets of users.&lt;br /&gt;An introduction to Cassandra to get it up and running can be found &lt;a href="http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/S6YQ60LCdGI/AAAAAAAAATA/AyKXE55Swe0/s1600-h/cassandra_logo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 64px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/S6YQ60LCdGI/AAAAAAAAATA/AyKXE55Swe0/s320/cassandra_logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5451063001601963106" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://technology.amis.nl/blog/7408/automatic-testing-oracle-service-bus-using-hudson-maven-and-soapui"&gt;short post on how to implement Automatic testing Oracle Service Bus&lt;/a&gt; using &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;, &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; and &lt;a href="http://www.soapui.org/"&gt;SoapUI&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoworld.com/print/115611"&gt;What to expect from HTML5 for webdevelopers&lt;/a&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/8474871406958844140-3618489038645707216?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3618489038645707216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3618489038645707216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3618489038645707216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3618489038645707216'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/03/best-of-this-week-summary-15-march-21.html' title='Best of this Week Summary 15 March - 21 March 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/S6YQ60LCdGI/AAAAAAAAATA/AyKXE55Swe0/s72-c/cassandra_logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3976691516149538517</id><published>2010-03-14T10:29:00.010Z</published><updated>2010-03-14T11:08:00.704Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='stateless'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='jax-rs'/><category scheme='http://www.blogger.com/atom/ns#' term='root mounts'/><category scheme='http://www.blogger.com/atom/ns#' term='clustering'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='url rewriting'/><title type='text'>Best of this Week Summary 8 March - 14 March 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/articles/springmvc_jsx-rs"&gt;How do the Spring 3.0 REST features compare&lt;/a&gt; to &lt;a href="http://jcp.org/en/jsr/detail?id=311"&gt;JAX-RS&lt;/a&gt;? Definitely also check the comments.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://wicketbyexample.com/apache-wicket-clustering-with-multiple-options/"&gt;Wicket IPageStore implementation&lt;/a&gt; using &lt;a href="http://www.hazelcast.com./"&gt;Hazelcast&lt;/a&gt; ("open source clustering and highly scalable data distribution platform").&lt;br /&gt;&lt;a href="http://www.breakitdownblog.com/apache-wicket-powers-mobile-walmart-com/"&gt;Wicket now powers the mobile sites for Wallmart and Wellsfargo&lt;/a&gt;. Main reason for chosing Wicket: "... makes it easy to support multiple different types of devices. The walmart mobile application supports different HTML for three categories of devices (L1: iPhones &amp; challengers, L2: BlackBerries, L3: Plain Old Devices). These three experiences are supported by the same Java code on the server side."&lt;br /&gt;Great that the implementers have open sourced their components. Especially interesting is the '&lt;a href="http://code.google.com/p/jolira-tools/wiki/stateless"&gt;wicket-stateless&lt;/a&gt;' component, since Wicket at its core is focused on managing stateful behaviour.&lt;br /&gt;Also &lt;a href="http://blog.jteam.nl/2010/02/24/wicket-root-mounts/"&gt;great to read&lt;/a&gt; is that in Wicket 1.5 support for variable/unknown URLs will be available. In that post you can also read how to do that in Wicket 1.4.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great post on &lt;a href="http://highscalability.com/blog/2010/3/4/how-myspace-tested-their-live-site-with-1-million-concurrent.html"&gt;how MySpace tested their site live with 1 million concurrent virtual users (mixed with live users) using 800 EC2 instances&lt;/a&gt;. For example, the setup generated over 77,000 hits per second, not including live traffic. The article also includes 3 lessons learned.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A short article on &lt;a href="http://blog.dynatrace.com/2010/03/01/best-practices-from-zappos-to-deliver-wow-performance/"&gt;why eCommerce site Zappos (shoes and apparel) re-architected their site from Perl to a Java EE environment&lt;/a&gt;. Main reason for them was to better deal with scaling and demands on high performance. The website serves "millions of users/visitors daily and processes between 60-65.000 purchases every day". Includes some best practices, and a more-or-less infomercial on using Dynatrace as their application performance management solution.&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/8474871406958844140-3976691516149538517?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3976691516149538517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3976691516149538517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3976691516149538517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3976691516149538517'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/03/best-of-this-week-summary-8-march-14.html' title='Best of this Week Summary 8 March - 14 March 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-9065502356370989839</id><published>2010-03-07T10:24:00.007Z</published><updated>2010-03-07T10:46:18.417Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='design by contract'/><category scheme='http://www.blogger.com/atom/ns#' term='sonar'/><category scheme='http://www.blogger.com/atom/ns#' term='programming errors'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='static analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><title type='text'>Best of this Week Summary 1 March - 7 March 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Of course is &lt;a href="http://service-architecture.blogspot.com/2010/02/why-contracts-are-more-important-than.html"&gt;the contract between webservices&lt;/a&gt; more important than their internals.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext"&gt;How the static analysis tool Coverity&lt;/a&gt; was turned into a commercial product. Includes caveats, lessons learned etc.&lt;br /&gt;Check also &lt;a href="http://blog.jteam.nl/2010/02/26/measuring-code-quality-with-sonar/"&gt;how you can measure code quality with Sonar&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The updated &lt;a href="http://cwe.mitre.org/top25/"&gt;2010 list of most dangerous programming errors&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ejohn.org/blog/spring-2010-jquery-talks/"&gt;Four presentations from John Resig&lt;/a&gt; on &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, and especially Query 1.4.&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/8474871406958844140-9065502356370989839?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/9065502356370989839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=9065502356370989839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/9065502356370989839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/9065502356370989839'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/03/best-of-this-week-summary-1-march-7.html' title='Best of this Week Summary 1 March - 7 March 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2251644858655099034</id><published>2010-02-28T12:46:00.005Z</published><updated>2010-02-28T13:01:37.253Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='spring integration'/><category scheme='http://www.blogger.com/atom/ns#' term='efficient java code'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='hippo cms'/><title type='text'>Best of this Week Summary 22 February - 28 February 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2010/01/13/migrating-content-with-spring-integration-a-real-life-example/"&gt;A real life example&lt;/a&gt; on using Spring Integration to migrate content from multiple websites into &lt;a href="http://www.onehippo.org/cms7"&gt;Hippo CMS&lt;/a&gt;, handle errors, measure performance and deal with the fact that content could contain references to other content that is not imported yet.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2010/01/rest-api-authentication-schemes"&gt;Summary&lt;/a&gt; of &lt;a href="http://broadcast.oreilly.com/2009/12/principles-for-standardized-rest-authentication.html"&gt;this article&lt;/a&gt;, which suggests rules for designing standard authentication schemes for REST API’s.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Did you know &lt;a href="http://terrencebarr.wordpress.com/2010/02/11/javafx-powers-vancouver-winter-olympics/"&gt;JavaFX is already used on a big site&lt;/a&gt; like the Vancouver Winter Olympics 2010?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://viralpatel.net/blogs/2010/02/most-useful-java-best-practice-quotes-java-developers.html"&gt;Ten useful Java programming tips&lt;/a&gt;, maybe there are a few you don't know yet...&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/8474871406958844140-2251644858655099034?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2251644858655099034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2251644858655099034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2251644858655099034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2251644858655099034'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/02/best-of-this-week-summary-22-february.html' title='Best of this Week Summary 22 February - 28 February 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1661892568704413771</id><published>2010-02-21T17:11:00.004Z</published><updated>2010-02-21T17:37:28.932Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='quiz'/><category scheme='http://www.blogger.com/atom/ns#' term='methodology'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='code review'/><category scheme='http://www.blogger.com/atom/ns#' term='doom'/><category scheme='http://www.blogger.com/atom/ns#' term='hardening'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Best of this Week Summary 15 February - 21 February 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;Expected that Mozilla uses Agile everywhere, and definitely on its flagship Firefox? Think again, &lt;a href="http://www.developer.com/open/article.php/3860226/Mozilla-Firefox-Gets-More-Agile-with-Lorentz.htm"&gt;only recently they started to combine Agile and more traditional Waterfall&lt;/a&gt; as their new development model, dubbed "Lorentz".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blogs.mulesoft.org/is-your-tomcat-secure/"&gt;Tips&lt;/a&gt; for hardening your Tomcat installation. Other implementation guides, not only limited to Tomcat (also for example WebLogic) tips from U.S. DOD DISA (Defense Information Systems Agency) can be found &lt;a href="http://iase.disa.mil/stigs/checklist/index.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Always interesting to at least quickly browse through: a &lt;a href="http://fabiensanglard.net/doomIphone/doomClassicRenderer.php"&gt;review&lt;/a&gt; of the 1993 code of Doom. And more "today": the code of Doom for the iPhone &lt;a href="http://fabiensanglard.net/doomIphone/index.php"&gt;reviewed&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Think you know Javascript? Try &lt;a href="http://ajaxian.com/archives/think-you-know-javascript-try-this-quiz"&gt;one of these quizes&lt;/a&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/8474871406958844140-1661892568704413771?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1661892568704413771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1661892568704413771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1661892568704413771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1661892568704413771'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/02/best-of-this-week-summary-15-february.html' title='Best of this Week Summary 15 February - 21 February 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5629800396618625462</id><published>2010-02-14T12:17:00.007Z</published><updated>2010-02-14T12:41:36.341Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='servlet 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='apache click'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 8 February - 14 February 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.developer.com/java/web/article.php/3861826/article.htm"&gt;Five new features of Spring 3.0 described&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring Expression Language (SpEL)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Object/XML Mapping (OXM) module&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Type-conversion system&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Formatter SPI&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;RESTful web services support&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What new Ajax simplifications have been introduced can be found &lt;a href="http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Java EE 6 web tier &lt;a href="http://www.infoq.com/news/2010/01/ee6_servlet30"&gt;introduces with Servlet 3.0 spec the ability for asynchronous processing&lt;/a&gt; of requests so that the thread may return to the container and perform other tasks. It also "adds annotation based configuration (@WebServlet, @ServletFilter and @WebServletContextListener) making the web.xml file optional, and introduces a new concept of web fragments."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://www.ibm.com/developerworks/web/library/wa-apacheclick/"&gt;Introductionary article&lt;/a&gt; to &lt;a href="http://click.apache.org/"&gt;Apache Click&lt;/a&gt;. One difference between Click and &lt;a href="http://wicket.apache.org/"&gt;Wicket&lt;/a&gt; is that Click is stateless by design, while Wicket is stateful. Both can be configured their "opposite" model, though these have their own pros/cons.&lt;br /&gt;Another main difference is that that Click uses templates (Velocity by default) where Wicket does not.&lt;br /&gt;&lt;br /&gt;Sidestep: &lt;a href="http://letsgetdugg.com/2010/02/02/clean-looking-wicket-sites-that-can-scale/"&gt;here&lt;/a&gt;'s a bunch of nicely designed Wicket sites that scale (note: not really clear where the scalability statements come from).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A 60 minutes &lt;a href="http://www.infoq.com/presentations/SOA-eBay"&gt;presentation on how SOA is a hit at eBay&lt;/a&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/8474871406958844140-5629800396618625462?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5629800396618625462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5629800396618625462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5629800396618625462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5629800396618625462'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/02/best-of-this-week-summary-8-february-14.html' title='Best of this Week Summary 8 February - 14 February 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8156936230571207610</id><published>2010-02-07T10:00:00.005Z</published><updated>2010-02-07T10:49:11.463Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='null references'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><title type='text'>Best of this Week Summary 1 February - 7 February 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2010/01/jsf20"&gt;What's new in JSF 2.0&lt;/a&gt; (facelets, composite components, partial state saving and Ajax).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://thetechcandy.wordpress.com/2010/01/28/avoid-null/"&gt;couple of tips&lt;/a&gt; on how to avoid checking for null statements (focused on Java but applicable to any language).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tips/guidelines on &lt;a href="http://blog.jteam.nl/2010/02/04/free-java-hosting-with-the-google-app-engine/"&gt;how to use Spring on Google App Engine&lt;/a&gt;. Including a list of workarounds. &lt;a href="http://www.ardentlord.com/apps/blog/show/829881-spring-3-0-on-google-app-engine"&gt;This post&lt;/a&gt; has a more detailed step-by-step explanation for &lt;a href="http://www.springsource.org/download"&gt;Spring 3.0&lt;/a&gt; on &lt;a href="http://code.google.com/intl/nl/appengine/"&gt;GAE&lt;/a&gt; with a live example app.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://usesthis.com/"&gt;work setup&lt;/a&gt; of several more or less famous technical guys ("nerds").&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/8474871406958844140-8156936230571207610?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8156936230571207610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8156936230571207610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8156936230571207610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8156936230571207610'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/02/best-of-this-week-summary-1-february-7.html' title='Best of this Week Summary 1 February - 7 February 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4853910695561776866</id><published>2010-01-31T13:57:00.016Z</published><updated>2011-07-04T16:02:42.599+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='performance tips'/><category scheme='http://www.blogger.com/atom/ns#' term='out of memory'/><category scheme='http://www.blogger.com/atom/ns#' term='stackoverflowerror'/><category scheme='http://www.blogger.com/atom/ns#' term='listactivity'/><category scheme='http://www.blogger.com/atom/ns#' term='pitfalls'/><category scheme='http://www.blogger.com/atom/ns#' term='bitmaps'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment tips'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='listadapter'/><category scheme='http://www.blogger.com/atom/ns#' term='stack overflow'/><category scheme='http://www.blogger.com/atom/ns#' term='memory leaks'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='drawables'/><title type='text'>Attacking memory problems on Android</title><content type='html'>Yay, my first post on Android :) Immediately attacking a difficult one: memory problems.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2W6uh1-asI/AAAAAAAAAS4/JAFin5yEcN8/s1600-h/android-logo-piechart.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2W6uh1-asI/AAAAAAAAAS4/JAFin5yEcN8/s320/android-logo-piechart.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5432953834013878978" /&gt;&lt;/a&gt;&lt;br /&gt;You might not run into them that quickly, but when you do, with a bit of bad luck, you've got a lot of work to do.&lt;br /&gt;I've split the memory problems in two parts: out of memory (OOM) problems (this post) and stack overflow problems (a next post).&lt;br /&gt;&lt;br /&gt;The maximum heap memory an process (app) gets in Android is 16M. That's not that much, a basic app takes already several MBs after you've only just started it.&lt;br /&gt;So in the LogCat output you see something like when you run out of (heap) memory:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;09-12 16:33:43.357: ERROR/dalvikvm-heap(157): 528640-byte external allocation too large for this process.&lt;br /&gt;09-12 16:33:43.357: ERROR/(157): VM won't let us allocate 528640 bytes&lt;br /&gt;09-12 16:33:43.357: DEBUG/AndroidRuntime(157): Shutting down VM&lt;br /&gt;09-12 16:33:43.367: WARN/dalvikvm(157): threadid=3: thread exiting with uncaught exception (group=0x40010e28)&lt;br /&gt;09-12 16:33:43.367: ERROR/AndroidRuntime(157): Uncaught handler: thread main exiting due to uncaught exception&lt;br /&gt;09-12 16:33:43.387: ERROR/AndroidRuntime(157): java.lang.RuntimeException: can't alloc pixels&lt;br /&gt;09-12 16:33:43.387: ERROR/AndroidRuntime(157):     at android.graphics.Bitmap.nativeCreate(Native Method)&lt;br /&gt;09-12 16:33:43.387: ERROR/AndroidRuntime(157):     at android.graphics.Bitmap.createBitmap(Bitmap.java:343)&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Now it could be you are just using too much memory. Trying to load 100 images of 800x600 pixels will just not fit into 16M when decoded to bitmaps.&lt;br /&gt;But for any other "normal" app you can still run OOM after using it for a little while. For example even when you just open/close the same screen (Activity) for 20 times. That means you've got a memory leak. So where is it leaking, what memory can't the garbage collector (GC) set free?&lt;br /&gt;&lt;br /&gt;With &lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;adb shell procrank&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;you can get some information about your app's memory usage, but only a very rough idea.&lt;br /&gt;A bit more specific information you can find by executing &lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;adb shell dumpsys meminfo &lt;your.package.path&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;DDMS also gives some rough info, but only some quite high-level info about objects being freed and allocated.&lt;br /&gt;&lt;br /&gt;So still not enough info to really figure out what's going on: you'll see the memory usage will go over the 16MB limit at some point, at which the JVM will start complaining in the LogCat output it can't allocate the requested memorory.&lt;br /&gt;But that you already knew :)&lt;br /&gt;&lt;br /&gt;So you need something more detailed about what is when allocated and GC'ed. This is where the &lt;a href="http://www.eclipse.org/mat/"&gt;Eclipse Memory Analyzer Tool&lt;/a&gt; (MAT) comes into play.&lt;br /&gt;Below I'll just give the steps you could apply to figure out where you're not freeing memory correctly and thus have a memory leak(s). All steps apply for a Windows + Eclipse environment, but should not be hard to apply to other setups.&lt;br /&gt;The steps are based on input from several posts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html"&gt;Analyzing the memory usage of your Android application&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dev.eclipse.org/blogs/memoryanalyzer/2008/04/21/immortal-objects-or-how-to-find-memory-leaks/"&gt;Immortal Objects - Or: How to Find Memory Leaks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with-one-click/"&gt;Automated Heap Dump Analysis: Finding Memory Leaks with One Click&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/guest62fd60c/eclipse-memory-analyzer-presentation"&gt;Eclipse Memory Analyzer - More Than Just a Heap Walker&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html"&gt;Avoiding memory leaks&lt;/a&gt;. Original &lt;a href="http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/"&gt;post&lt;/a&gt; with some questions/replies. &lt;br /&gt;&lt;strong&gt;Very important&lt;/strong&gt; is this mention: "When a Drawable is attached to a view, the view is set as a callback on the drawable.". So here's implicitly a reference back introduced! And you probably have images in your app, so for 99.99% certainty, you could have a memory leak here if you're not "setting the stored drawables' callbacks to null when the activity is destroyed".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://discuz-android.blogspot.com/2009/06/android-memory-usage-with-hprof.html"&gt;Android memory usage with hprof&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp11225/"&gt;Java theory and practice: Plugging memory leaks with weak references&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Analyzing memory usage steps&lt;/h3&gt;Make sure you've got your app running in the emulator via Eclipse. A real device should also work but I didn't try it. Probably sending the signal 10 needs to be done from w/in the code, see &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/6659aaf069e462d2/2f2327e87dfdf639"&gt;here&lt;/a&gt;. I'll assume you've already installed the MAT plugin.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start a Windows cmd shell. Go to the directory where you installed the Android SDK and go into the 'tools' subdirectory.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;First the directory /data/misc needs to be in mode 777 for the heap dump to be written. So execute:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;adb shell chmod 777 /data/misc&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you probably already have an idea which Activity is causing the OOM or might have a memory leak. To be able to easily spot it, open and close that Activity about 5 times. This makes sure it will stand out in the heap data. And, if you've opened/closed it 5 times, it should be fully GC'ed right? So if later on we see it still has 5 or 4 instances around, you know something is not cleaned up correctly!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Find the process id (PID) you want an heap dump for. That is your app, identified by the package path of your app. So execute to look it up:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;adb shell ps&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Take the first column (named PID). Send a signal 10 to that process via:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;adb shell kill -10 &lt;pid&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;In your LogCat output you should see the VM heap being dump with lines similar to:&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;01-31 15:29:34.112: INFO/dalvikvm(210): SIGUSR1 forcing GC and HPROF dump&lt;br /&gt;01-31 15:29:34.112: INFO/dalvikvm(210): hprof: dumping VM heap to "/data/misc/heap-dump-tm1264948174-pid210.hprof-hptemp".&lt;br /&gt;01-31 15:29:35.873: INFO/dalvikvm(210): hprof: dumping heap strings to "&lt;strong&gt;/data/misc/heap-dump-tm1264948174-pid210.hprof&lt;/strong&gt;".&lt;br /&gt;01-31 15:29:36.652: INFO/dalvikvm(210): hprof: heap dump completed, temp file removed&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you need to copy the generated .hprof file from the emulator (or device) to your Windows machine, so execute:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;adb pull &lt;strong&gt;/data/misc/heap-dump-tm1264948174-pid210.hprof&lt;/strong&gt;  myheapdump.hprof&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Note that the bold part in the command matches the bold part in the 3rd LogCat line above.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Since the hprof output from the Dalvik VM is not in the format the standard Java tools (including MAT) recognize, you need to fix that with this command (it just prepends a header or something):&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;hprof-conv myheapdump.hprof mat_myheapdump.hprof&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;As an extra step you can move the mat_myheapdump.prof file to another directory, so you won't fill up your working directory with .hprof files.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Switch to the MAT perspective and open the file mat_myheapdump.prof you just created above. MAT will give you the option to already look at a few standard reports that could already give you an indication on what is using up a lot of memory. But often it will report 'java.lang.Class' and 'java.lang.string' as suspects, thus not telling you that much. Therefore: see next step.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click on the histogram icon:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2WXWwf56vI/AAAAAAAAASg/Wab23EkytHw/s1600-h/histogram.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 86px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2WXWwf56vI/AAAAAAAAASg/Wab23EkytHw/s320/histogram.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5432914942724008690" /&gt;&lt;/a&gt;That gives something like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2WXo_bRcmI/AAAAAAAAASo/_jcgXTlmsCA/s1600-h/histogram_screens.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2WXo_bRcmI/AAAAAAAAASo/_jcgXTlmsCA/s320/histogram_screens.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5432915255968756322" /&gt;&lt;/a&gt;That just shows all classes in the heap dump. Note that again on top are String related classes/types.&lt;br /&gt;To make sure you only see your app's classes, type in the first row (named &amp;lt;Regex&amp;gt;) your app's package name. It is the same you entered for the 'dumpsys' command, at the start of this article. After you hit enter, you'll see only classes from that package onwards are shown.&lt;br /&gt;You see already immediately at the top which classes (instances) appear more than once and how much memory is retained by them. Getting there!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Legend: "Shallow heap is the memory consumed by one object. Retained set of X is the set of objects that will be garbage collected if X is garbage collected. Retained heap of X is the sum of shallow sizes of all objects in the retained set of X , i.e. memory kept alive by X."&lt;/i&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Since at the start of these steps I recommended (and so do some of the referenced articles :) to repeat opening and closing the offending Activity a couple of times (say 5), you can now already see if the Activity you opened &amp; closed is cleaning up correctly. If the row with its classname has a number &gt; 1 in the Objects column (maybe even 5) you know it's not cleaned/cleaning up properly. &lt;br /&gt;Note that even after you fixed all your memory leaks, you still might see one entry present. When you drill down that one entry (see steps below) you'll see it has &lt;strong&gt;unknown&lt;/strong&gt; beside its classname. My guess is that it means it is being cleaned up, or will be at the next GC cycle, so won't need further investigation.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Drilling down: right-click on a row you expected to be 1 or not even present. Select &lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;List ojbects --&amp;gt; with incoming references&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;(thus those objects that refer to the selected object). That gives just 1 row. If you click on that row, on the left in the Inspector view, you see what that object is "holding". Very interesting is the Attributes tab. There you can see which member variables it holds (and you might have expected to be null for example). Objects referencing the selected object appears when you unfold the row. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right-click the row and select &lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;Path to GC Roots --&amp;gt; exclude weak/soft references&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;That shows the paths of the GC for the objects that are referencing the object you started drilling down on 1 step ago. So now your knowledge of the app comes in to play: should those objects still be referencing the object under scrutiny? If not why are they still doing that? Check your code, maybe need to null them explicitly in onDestroy() etc. See for more tips below.&lt;br /&gt;The reason for excluding weak and soft references is that they should get garbage collected on time anyway (by definition), so don't need to worry about them.&lt;br /&gt;Note: selecting "Merge Shortest Paths to GC roots" is also useful sometimes (less clutter).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Lessons learned&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;You might have to set all anonymous listeners to null in your onDestroy()&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Watch that drawable callback stuff. Even if you have no static drawables, a library you're using might still keep an Activity context to a Drawable (and vice versa) around!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;So what I did to solve the above two lessons is put the objects that refer to them in a list, which I cleanup in onDestroy(), i.e setOnClickListener(null) and object = null. Setting object to null should not really be necessary but might make it getting picked up by the GC a bit faster.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Handy trick (but error-prone) is to set all "big" objects to null in onDestroy() anyway. Helps you quicker see in MAT which are still around. Error-prone because: you might still have a background thread running when the onDestroy() is called. in onDestroy() you then might set objects to null, which the running thread still needs... (before onDestroy() itself finishes and thus the Activity). And thus you get NullPointerExceptions.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Images (Bitmaps) are not allocated in a standard Java way but via native calls; the allocations are done outside of the virtual heap, but are &lt;br /&gt;counted against it! Posts mentioning/related to this: &lt;a href="http://www.mail-archive.com/android-developers@googlegroups.com/msg16120.html"&gt;one&lt;/a&gt;, &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/6659aaf069e462d2/2f2327e87dfdf639"&gt;two&lt;/a&gt;, and &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/6659aaf069e462d2/e0ceb02a91a487ce?#e0ceb02a91a487ce"&gt;three&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And that matches with what I see using MAT: the memory usage shown with 'procrank' and 'dumpsys' is much higher than what the MAT overview reports show.&lt;br /&gt;&lt;br /&gt;So to tackle OOMs with images, at least make sure all your references are cleaned up as described in the above steps. Also only loading in memory what you really need for an image helps. See also the next lesson learned.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Loading images from for example the internet are hard to handle in Android. You can get away with loading 1 or 2 images of say 200x200 pixels, but still memory usage goes really fast. BIG post on this &lt;a href="http://markmail.org/message/smg7pog5tz25p7w5#query:+page:1+mid:rlyzp7slndyvbcbd+state:results"&gt;here&lt;/a&gt;. Notice also that the Drawable callback is mentioned again too. Another one showing some computations of memory usage &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/aaaef75b6d3a0d8e/e61bfdb0311b36df?#e61bfdb0311b36df"&gt;here&lt;/a&gt;. Biggest thing to learn from here: a PNG of 20K for an image of 200x200 pixels needs as Bitmap already about 160K (assuming 4 bytes per pixel).&lt;br /&gt;A recommended approach is this (ideas based on the &lt;a href="http://android-developers.blogspot.com/2008/09/android-photostream.html"&gt;Photostream demo app&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;First only get the image sizes via:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;BitmapFactory.Options options = new BitmapFactory.Options();&lt;br /&gt;options.inJustDecodeBounds = true;&lt;br /&gt;Bitmap tmpBitmap = BitmapFactory.decodeStream(new ByteArrayInputStream(new URL(url).openStream()), null, options);&lt;br /&gt;int height = options.outHeight;&lt;br /&gt;int width = options.outWidth;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Now you know how big it is before even downloading it! You probably know how big the image should be drawn. So compute the scaling needed for that (normally Android would do the scaling for you at drawing time).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Only then get the image with those sizes:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="738" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="736"&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;br /&gt;options = new BitmapFactory.Options();&lt;br /&gt;options.inSampleSize = sampleSize;&lt;br /&gt;bitmap = BitmapFactory.decodeStream(new ByteArrayInputStream(new URL(url).openStream()), null, options);&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A further improvement (also handy for caching of images) is to just download the images as raw bytes and store that on disk. Then when it's time to create a bitmap/drawable out of it, determine if you need to rescale by reading those stored raw bytes. Just replace in the above code 'new URL(url).openStream()' with your byte array (byte[]).&lt;br /&gt;And: if you're really sure you don't need a given bitmap any more, use bitmap.recyce() to release it permantently.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For ListViews and their ListAdapters: &lt;a href="http://code.google.com/p/android/issues/detail?id=2391"&gt;use the convertView&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Debuggers usually keep objects alive, preventing them from being freed, so when doing this memory analysis, don't run in debug mode. Also make sure to force a GC a couple of times on your process before taking a heap dump. As tipped by Romain in &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/7b0ea57d9507d33f"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: apparently some of the steps have been automated in the meantime, see &lt;a href="http://groups.google.com/group/android-developers/msg/402d3c735c604045"&gt;this message&lt;/a&gt; for details.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: From &lt;a href="http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html"&gt;this article&lt;/a&gt; "As of Android 3.0 (Honeycomb), the pixel data for Bitmap objects is stored in byte arrays (previously it was not stored in the Dalvik heap), and based on the size of these objects, it's a safe bet that they are the backing memory for our leaked bitmaps." So it will be much easier to track allocations. Note that this TTLNews blogpost is from before Honeycomb! The article also shows how to compare heap dumps with MAT, might come in handy some times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8474871406958844140-4853910695561776866?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4853910695561776866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4853910695561776866' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4853910695561776866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4853910695561776866'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html' title='Attacking memory problems on Android'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jFQmMfbR6Ec/S2W6uh1-asI/AAAAAAAAAS4/JAFin5yEcN8/s72-c/android-logo-piechart.png' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7243304613428756088</id><published>2010-01-31T10:50:00.003Z</published><updated>2010-01-31T11:01:07.325Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='automated testing'/><category scheme='http://www.blogger.com/atom/ns#' term='syslog'/><category scheme='http://www.blogger.com/atom/ns#' term='integration testing'/><category scheme='http://www.blogger.com/atom/ns#' term='unittesting'/><category scheme='http://www.blogger.com/atom/ns#' term='log4j'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Best of this Week Summary 25 January - 31 January 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2010/01/14/logging-to-the-syslog-from-a-java-application/"&gt;Logging to syslog via Log4J&lt;/a&gt;. Too bad the example log4j configuration is in .properties format, instead of .xml format.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A good &lt;a href="http://javaposse.com/index.php?post_id=570162"&gt;selection of links regarding automated testing and refactoring&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Handy tool for discovering/detecting unused CSS across pages on a website: &lt;a href="http://github.com/geuis/helium-css"&gt;Helium&lt;/a&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/8474871406958844140-7243304613428756088?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7243304613428756088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7243304613428756088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7243304613428756088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7243304613428756088'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/01/best-of-this-week-summary-25-january-31.html' title='Best of this Week Summary 25 January - 31 January 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8780419785812613691</id><published>2010-01-24T09:00:00.003Z</published><updated>2010-01-24T09:19:45.636Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='cqrs'/><title type='text'>Best of this Week Summary 11 January - 24 January 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;An &lt;a href="http://blog.jteam.nl/2009/12/21/rethinking-architecture-with-cqrs/"&gt;overview of Command Query Responsibility Segregation (CQRS)&lt;/a&gt;. This is an architectural style that makes a clear distinction between commands that change the application state and queries that expose the application state.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://jasonmbaker.com/myths-about-code-comments"&gt;Four myths about code comments&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Interesting look at &lt;a href="http://blog.stackoverflow.com/2010/01/stack-overflow-network-configuration/"&gt;Stack Overflow's network configuration&lt;/a&gt;, including how they handle failover.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://europa.eu/rapid/pressReleasesAction.do?reference=IP/10/40&amp;format=HTML&amp;aged=0&amp;language=EN&amp;guiLanguage=en"&gt;European Commission has approved Oracle's acquisition of Sun Microsystems&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://www.slideshare.net/robnyman/javascript-from-birth-to-closure"&gt;history of Javascript&lt;/a&gt; in a slideshare presentation, including some more low level specifics like comparision (=== vs ==), anonymous functions, inheritance etc.&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/8474871406958844140-8780419785812613691?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8780419785812613691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8780419785812613691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8780419785812613691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8780419785812613691'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/01/best-of-this-week-summary-11-january-24.html' title='Best of this Week Summary 11 January - 24 January 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4334175503820162866</id><published>2010-01-10T12:41:00.005Z</published><updated>2010-01-10T13:11:02.116Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='caching'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='zx-81'/><category scheme='http://www.blogger.com/atom/ns#' term='chess'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><category scheme='http://www.blogger.com/atom/ns#' term='zx81'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>Best of this Week Summary 28 December - 10 January 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;"An &lt;a href="http://ria.dzone.com/videos/nickull-ria-architectures"&gt;interview&lt;/a&gt; with Duane Nickull, Senior Technical Evangelist at Adobe Systems as he revisits the notion of 'Web 2.0', and discusses some of the new architectural and human interaction patterns that are shaping the way in which we build RIA Web applications today. He talks about some of the new Flash authoring tools for the iPhone,  the Open Screen Project, as well as the impact HTML 5 will have on Flash adoption." Transcription of the interview below the interview. Summary in four words: "Don't piss off users". He also mentions the &lt;a href="http://www.openscreenproject.org/"&gt;Open Screen Project&lt;/a&gt;: "It is an industry-wide initiative, led by Adobe with the participation of other industry leaders, to enable the delivery of rich multiscreen experiences built on a consistent runtime environment for open web browsing and standalone applications."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Blogpost using &lt;a href="http://blog.jteam.nl/2009/12/17/serving-a-heavy-load-rss-feed-with-spring-3-and-ehcache/"&gt;Ehcache and Spring 3 for implementing over 100K of RSS feeds, with certain feeds under very high load&lt;/a&gt;. A &lt;a href="http://blog.jteam.nl/2009/12/22/using-ehcache-monitor/"&gt;follow-up post&lt;/a&gt; describes the use of &lt;a href="http://www.ehcache.org/modules/monitor.html"&gt;Ehcache DX Monitor Module&lt;/a&gt; (beta).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fun: &lt;a href="http://users.ox.ac.uk/~uzdm0006/scans/1kchess/"&gt;a ZX-81 chess program in 1K&lt;/a&gt;. Actually only 672 bytes were available for the program!&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/8474871406958844140-4334175503820162866?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4334175503820162866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4334175503820162866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4334175503820162866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4334175503820162866'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2010/01/best-of-this-week-summary-28-december.html' title='Best of this Week Summary 28 December - 10 January 2010'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2533432156635358382</id><published>2009-12-27T16:09:00.004Z</published><updated>2009-12-27T16:21:28.772Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='taste'/><category scheme='http://www.blogger.com/atom/ns#' term='mahout'/><category scheme='http://www.blogger.com/atom/ns#' term='recommendations engine'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile internet'/><category scheme='http://www.blogger.com/atom/ns#' term='personalisation'/><title type='text'>Best of this Week Summary 21 December - 27 December 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/12/09/mahout-taste-part-one-introduction/"&gt;An introduction&lt;/a&gt; to the Java &lt;a href="http://lucene.apache.org/mahout/taste.html"&gt;Taste framework&lt;/a&gt; personalized recommendations. Taste is part of the larger &lt;a href="http://lucene.apache.org/mahout/index.html"&gt;Mahout framework&lt;/a&gt;, which features various scalable machine-learning algorithms.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great extensive 424 pages PDF report from Morgan Stanley on the current state of &lt;a href="http://www.morganstanley.com/institutional/techresearch/mobile_internet_report122009.html"&gt;the mobile internet&lt;/a&gt; (apps and browser). A summary you can find &lt;a href="http://communities-dominate.blogs.com/brands/2009/12/ten-findings-out-of-morgan-stanleys-massive-mobile-internet-report.html"&gt;here&lt;/a&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/8474871406958844140-2533432156635358382?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2533432156635358382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2533432156635358382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2533432156635358382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2533432156635358382'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/12/best-of-this-week-summary-21-december.html' title='Best of this Week Summary 21 December - 27 December 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2851677506751888422</id><published>2009-12-20T12:36:00.007Z</published><updated>2009-12-20T12:50:39.960Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='caching'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='applicationn layering'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='xtp'/><category scheme='http://www.blogger.com/atom/ns#' term='service layer'/><title type='text'>Best of this Week Summary 14 December - 20 December 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;A basic explanation on &lt;a href="http://dev.juokaz.com/programming/service-layer-in-web-applications"&gt;why to use a service layer in (web) applications&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/articles/write-behind-caching"&gt;A description of key concepts in Extreme Transaction Processing (XTP) Patterns&lt;/a&gt;: Write-behind Caching. In contrast to write-through caching, the write-behind function batches updates to the back-end database asynchronously within a user configurable interval of time. Also a business use case is described with performance improvement charts. Biggest disadvantage of write-behind is that the database is not always having the latest state available!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ec2lab.com/"&gt;This&lt;/a&gt; seems like a good Amazon EC2 blog.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://www.infoq.com/articles/roa-rest-of-rest"&gt;deeper dive into the parts of REST that many people do not understand and therefore do not discuss&lt;/a&gt;. These topics include the implications of:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;URLs as identifiers&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Freedom of Form&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Logically-connected, Late-binding Systems&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Hypertext as the Engine of State Transfer (HATEOS)&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/8474871406958844140-2851677506751888422?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2851677506751888422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2851677506751888422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2851677506751888422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2851677506751888422'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/12/best-of-this-week-summary-14-december.html' title='Best of this Week Summary 14 December - 20 December 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1878572869087269991</id><published>2009-12-13T10:08:00.010Z</published><updated>2009-12-13T10:24:26.220Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jee 6'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='jee6'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 07  December - 13 December 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;This week &lt;a href="http://java.sun.com/javaee/sdk/javaee6sdk_relnotes.jsp"&gt;Java EE 6 and GlassFish 3.0 were released&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jFQmMfbR6Ec/SyS_xOp0kXI/AAAAAAAAASY/JdjNXb2oh1Y/s1600-h/glashfish.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 170px; height: 82px;" src="http://3.bp.blogspot.com/_jFQmMfbR6Ec/SyS_xOp0kXI/AAAAAAAAASY/JdjNXb2oh1Y/s320/glashfish.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5414663504474182002" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Presentation on the &lt;a href="http://prezi.com/eclwkjfjjzfk/"&gt;Java architecture&lt;/a&gt; of &lt;a href="http://spotichart.com/index.html"&gt;SpotiChart.com&lt;/a&gt;, a site that creates a Spotify chart based on &lt;a href="http://spotify.com/"&gt;Spotifiy&lt;/a&gt; tweets on songs.&lt;br /&gt;Includes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring 3rc1 + Spring MVC 3&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Quartz&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Maven 3&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Hibernate, EHCache&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Transactional &amp; multi-threading&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ubuntu 9.04&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tomcat 6 (single war)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;MySQL 5.1&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Twitter4j&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;OpenFlashChart&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JTreeMap&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Rome (for Atom feeds)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use of URL shortening services&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Developed in 3 days(!)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Statistics of the site&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lessons learned&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Five &lt;a href="http://ajaxian.com/archives/full-frontal-09-jake-archibald-on-performance-optimisation"&gt;Javascript performance tips&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Read the &lt;a href="http://www.infoq.com/articles/hewitt-javasoacookbook"&gt;interview with the writer of Javas SOA cookbook&lt;/a&gt;, including how he uses Agile in SOA projects. Includes a free download of the Governance chapter.&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/8474871406958844140-1878572869087269991?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1878572869087269991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1878572869087269991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1878572869087269991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1878572869087269991'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/12/best-of-this-week-summary-07-december.html' title='Best of this Week Summary 07  December - 13 December 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SyS_xOp0kXI/AAAAAAAAASY/JdjNXb2oh1Y/s72-c/glashfish.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7269363144121150304</id><published>2009-12-06T14:00:00.006Z</published><updated>2009-12-06T14:26:06.243Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='myths'/><category scheme='http://www.blogger.com/atom/ns#' term='misconceptions'/><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='kanban'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='gears'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 30 November - 06 December 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;A &lt;a href="http://www.infoq.com/news/2009/11/SOA10"&gt;top 10 of SOA myths&lt;/a&gt; revisited.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Google is slowly &lt;a href="http://gigaom.com/2009/12/01/why-google-is-killing-gears-pushing-html5/"&gt;pulling the plug&lt;/a&gt; &lt;a href="http://thenextweb.com/appetite/2009/12/01/google-letting-gears-declares-html5-future/"&gt;on&lt;/a&gt; &lt;a href="http://gears.google.com/"&gt;Gears&lt;/a&gt; (mainly used as offline browser storage) in favor of &lt;a href="http://en.wikipedia.org/wiki/HTML5"&gt;HTML5&lt;/a&gt;; see the posts for a bunch of reasons. Google: "We're continuing to support Gears so that nothing breaks for sites that use it. But we expect developers to use HTML5 for these features moving forward as it's a standards-based approach that will be available across all browsers."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A couple of &lt;a href="http://java.dzone.com/news/my-devoxx-discoveries-year"&gt;interesting Java topics&lt;/a&gt; found during &lt;a href="http://www.devoxx.com/display/DV09/Home"&gt;Devoxx 2009&lt;/a&gt;: &lt;a href="http://en.wikipedia.org/wiki/Kanban"&gt;Kanban&lt;/a&gt;, &lt;a href="http://www.springactionscript.org/"&gt;Spring-ActionScript&lt;/a&gt; (Spring-Flex integration), and a couple of technologies to detect and prevent coding errors &lt;strong&gt;before&lt;/strong&gt; they actually happen.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;True or false: &lt;a href="http://www.itworld.com/development/84780/if-comments-are-ugly-code-ugly"&gt;if the comments are ugly, the code is ugly&lt;/a&gt;? I agree: if your comments are sloppy, you very likely also will be in the actual code?&lt;br /&gt;Don't forget to read the &lt;a href="http://www.dadhacker.com/blog/?p=1132"&gt;referenced "three rules" C post&lt;/a&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/8474871406958844140-7269363144121150304?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7269363144121150304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7269363144121150304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7269363144121150304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7269363144121150304'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/12/best-of-this-week-summary-30-november.html' title='Best of this Week Summary 30 November - 06 December 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3185092094062967537</id><published>2009-11-29T16:56:00.008Z</published><updated>2009-11-29T17:20:48.040Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='closures'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='spring 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='criteria'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><category scheme='http://www.blogger.com/atom/ns#' term='selection'/><title type='text'>Best of this Week Summary 17 November - 29 November 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.dzone.com/articles/wheeler-spring-interview"&gt;Great overview of (most of) Spring's portfolio&lt;/a&gt;. Includes tips on when you might want to choose Spring, and when not. Also shortly describes what's new in &lt;a href="http://blog.springsource.com/2009/11/13/spring-framework-3-0-rc2-released/"&gt;Spring 3.0&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Google has &lt;a href="http://googlecode.blogspot.com/2009/11/introducing-closure-tools.html"&gt;opensourced a bunch of their Javascript libraries&lt;/a&gt;, which they use in Gmail, Google Docs and Google maps:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Closure Compiler is a JavaScript optimizer that compiles web apps down into compact, high-performance JavaScript code."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Closure Library is a broad, well-tested, modular, and cross-browser JavaScript library. Web developers can pull just what they need from a wide set of reusable UI widgets and controls, as well as lower-level utilities for the DOM, server communication, animation, data structures, unit testing, rich-text editing, and much, much more."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Closure Templates grew out of a desire for web templates that are precompiled to efficient JavaScript."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Closure Inspector, a Firebug extension that makes debugging the obfuscated code almost as easy as debugging the human-readable source."&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Quite a terrible name btw, since you also have regular &lt;a href="http://en.wikipedia.org/wiki/Closure_(computer_science)"&gt;closures&lt;/a&gt; &lt;a href="http://www.jibbering.com/faq/faq_notes/closures.html"&gt;in Javascript&lt;/a&gt;... The name came &lt;a href="http://erik.eae.net/archives/2009/11/05/22.27.29/"&gt;from bringing closure to their whole mess of Javascript libs they'd made&lt;/a&gt;.&lt;br /&gt;A short comparison between the compression performance of YUI Compressor and Google Closer Compiler using the well-known Javascript Frameworks - Mootools, JQuery and Prototype can be found &lt;a href="http://www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the-Javascript-Compression-Tools.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.dynatrace.com/2009/10/28/101-on-https-web-site-performance-impact/"&gt;Analysis and tips on how to improve https performance&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;IBM’s Jens Andexer and Willem Bekker from Standard Bank provide some &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-goodbad/"&gt;samples of the good, the bad and the ugly business aspects of SOA&lt;/a&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/8474871406958844140-3185092094062967537?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3185092094062967537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3185092094062967537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3185092094062967537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3185092094062967537'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/11/best-of-this-week-summary-17-november.html' title='Best of this Week Summary 17 November - 29 November 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1602880920882006285</id><published>2009-11-22T09:50:00.008Z</published><updated>2009-11-22T10:31:20.129Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome os'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='versioning'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='eosl'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='schemas'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><title type='text'>Best of this Week Summary 16 November - 22 November 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Did you know &lt;a href="http://java.dzone.com/polls/does-java-5-reaching-end"&gt;Java 5 reached its End of Service Life last month&lt;/a&gt;? But luckily &lt;a href="http://java.sun.com/products/archive/eol.policy.html"&gt;not if you've got Java SE for business&lt;/a&gt; (support).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This week Google introduced the first version of its Chrome OS. &lt;a href="http://www.readwriteweb.com/archives/live_blog_the_google_chrome_os_press_event.php"&gt;Here&lt;/a&gt;'s a pretty good explanation on how it differs from current operating systems. And here are &lt;a href="http://mashable.com/2009/11/19/chrome-os-differences/"&gt;5 (other) points describing them&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"The browser &lt;strong&gt;is&lt;/strong&gt; the OS",&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"It’s designed to fix itself",&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"All apps are web apps, no installations", (sounds like Citrix to me ;)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Chrome OS doesn’t support drivers and will not run on your laptop",&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Super-fast startup speeds"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://www.ibm.com/developerworks/java/library/j-javadev2-4/index.html"&gt;step-by-step tutorial on creating a CRUD Web application and run it on the Amazon Elastic Compute Cloud&lt;/a&gt;. The web application leverages Groovy, Spring, and Hibernate (via the Grails framework), MySQL and Tomcat. For deployment the Eclipse AWS-plugin is used.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great, &lt;a href="http://www.infoq.com/articles/Web-Service-Contracts"&gt;here&lt;/a&gt; you can download chapters 20, 21, 22 for free from the book "&lt;a href="http://my.safaribooksonline.com/013613517X"&gt;Web Service Contract Design and Versioning for SOA&lt;/a&gt;" by Thomas Erl, Anish Karmarkar, Priscilla Walmsley, Hugo Haas, L. Umit Yalcinalp, Canyang Kevin Liu, David Orchard, Andre Tost, James Pasley. These chapters address the issues related to service contract versioning. In those chapters described are versioning of WSDL and schema definitions.&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/8474871406958844140-1602880920882006285?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1602880920882006285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1602880920882006285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1602880920882006285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1602880920882006285'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/11/best-of-this-week-summary-16-november.html' title='Best of this Week Summary 16 November - 22 November 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7770017424896176217</id><published>2009-11-15T16:52:00.007Z</published><updated>2009-11-16T08:59:22.652Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='gears'/><category scheme='http://www.blogger.com/atom/ns#' term='decade'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 09 November - 15 November 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;A &lt;a href="http://blog.jteam.nl/2009/11/12/using-git-coming-from-subversion/"&gt;post&lt;/a&gt; on experiences with &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; coming from &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;. Too bad the reasons why the author is having more and more problems with Subversion were not given. Though you can deduct (some(?) of) them from the text.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/jeresig/understanding-javascript-testing"&gt;Presentation by John Resig (from JQuery fame) on testing javascript&lt;/a&gt;. Shortly describes &lt;a href="http://docs.jquery.com/QUnit"&gt;QUnit&lt;/a&gt;, &lt;a href="http://www.jsunit.net/"&gt;JSUnit&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yui/yuitest/"&gt;YUITest&lt;/a&gt; for unittesting, &lt;a href="http://github.com/nkallen/screw-unit"&gt;Screw.Unit&lt;/a&gt;, &lt;a href="http://code.google.com/p/jsspec/"&gt;JSSpec&lt;/a&gt; for behavior testing (unittesting broken up by task), &lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt; for functional testing and &lt;a href="http://www.thefrontside.net/crosscheck"&gt;Crosscheck&lt;/a&gt;, &lt;a href="http://env-js.appspot.com/"&gt;Env.js&lt;/a&gt;, &lt;a href="http://github.com/relevance/blue-ridge"&gt;Blueridge&lt;/a&gt; for server-side Javascript testing. Also describes browser launching, which I would translate into "build/test management", distributed testing (Selenium, &lt;a href="http://testswarm.com/"&gt;TestSwarm&lt;/a&gt;) and browser support (cost vs benefit).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.infoq.com/articles/soa-panel"&gt;A Decade of SOA: Where are we, Where are we Going?&lt;/a&gt;" The viewpoints from a virtual panel of Enterprise Architects who have lived and implemented SOA for most of this decade.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://news.cnet.com/8301-30685_3-10377173-264.html"&gt;Why&lt;/a&gt; &lt;a href="http://www.istockphoto.com/"&gt;iStockphoto&lt;/a&gt; embraced &lt;a href="http://gears.google.com/"&gt;Google's Gears&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And as grand final this week: the &lt;a href="http://www.tbray.org/ongoing/When/200x/2009/09/02/Ravelry"&gt;hardware and (rails) software architecture&lt;/a&gt; of &lt;a href="https://www.ravelry.com/"&gt;Ravelry&lt;/a&gt;, a &lt;strong&gt;knit and crochet&lt;/strong&gt; community.&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/8474871406958844140-7770017424896176217?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7770017424896176217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7770017424896176217' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7770017424896176217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7770017424896176217'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/11/best-of-this-week-summary-09-november.html' title='Best of this Week Summary 09 November - 15 November 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6941240316453886626</id><published>2009-11-08T16:26:00.007Z</published><updated>2009-11-08T17:03:03.938Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='web frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='reliability'/><category scheme='http://www.blogger.com/atom/ns#' term='mtbf'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><category scheme='http://www.blogger.com/atom/ns#' term='design patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='large projects'/><title type='text'>Best of this Week Summary 02 November - 08 November 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;A &lt;a href="http://lambda-the-ultimate.org/node/3655"&gt;summary&lt;/a&gt; of an interview with Erich Gamma, Richard Helm, and Ralph Johnson, three of the Gang of Four who wrote &lt;a href="http://en.wikipedia.org/wiki/Design_Patterns_(book)"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt; 15 years ago. The full interview &lt;a href="http://www.informit.com/articles/article.aspx?p=1404056"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://olex.openlogic.com/wazi/2008/web-framework-comparison-matrix/"&gt;Five web frameworks comparison&lt;/a&gt;: Shale, Struts, Wicket, WebWork, Rails, JBossSeam, MyFaces and Spring.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jeff Dean (Google Fellow) &lt;a href="http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf"&gt;on large-scale computing&lt;/a&gt; (PDF) during &lt;a href="http://www.cs.cornell.edu/projects/ladis2009/program.htm"&gt;Ladis 2009&lt;/a&gt;. Interesting numbers regarding reliability and availability for hardware, like 1-5% of your disks will die. And even if you got very reliable servers with MTBF of 30 years, if you have 10000 of those, that means see one fail each day! And: "a web search touches 50+ separate services, 1000s machines". Some more of these quotes:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"Better to give users limited functionality than an error page"&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Ensure your design works if scale changes by 10X or 20X but the right solution for X often not optimal for 100X"&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Monitoring: "If your system is slow or misbehaving, can you figure out why?"&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Future scale: ~106 to 107 machines, ~1013 directories, ~1018 bytes of storage, spread at 100s to 1000s of locations around the world, ~109 client machines"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Other subjects touched: &lt;a href="http://www.google.nl/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAsQFjAA&amp;url=http%3A%2F%2Fnl.wikipedia.org%2Fwiki%2FMapReduce&amp;rct=j&amp;q=mapreduce&amp;ei=1_f2SoDtF8nw-Qbj75D6DQ&amp;usg=AFQjCNGHe7tv5yIoylbziUXbmbq_e1UAfg"&gt;MapReduce&lt;/a&gt; and &lt;a href="http://www.google.nl/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAsQFjAA&amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBigTable&amp;rct=j&amp;q=bigtable&amp;ei=5vf2SrqBGZDb-QaJ-6z6DQ&amp;usg=AFQjCNEta9v6Zh-kRx14vD8Ko83KaAuVVQ"&gt;BigTable&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jFQmMfbR6Ec/Svb5Pfuca0I/AAAAAAAAASQ/yda-MEKkksg/s1600-h/numbers.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 234px;" src="http://2.bp.blogspot.com/_jFQmMfbR6Ec/Svb5Pfuca0I/AAAAAAAAASQ/yda-MEKkksg/s320/numbers.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401778847687142210" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/10/20/battling-complexity-in-large-web-applications/"&gt;Blogpost&lt;/a&gt; that briefly touches a few types of complexity encountered in large software (web) projects.&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/8474871406958844140-6941240316453886626?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6941240316453886626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6941240316453886626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6941240316453886626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6941240316453886626'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/11/best-of-this-week-summary-02-november.html' title='Best of this Week Summary 02 November - 08 November 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jFQmMfbR6Ec/Svb5Pfuca0I/AAAAAAAAASQ/yda-MEKkksg/s72-c/numbers.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4320153999429932471</id><published>2009-11-01T18:00:00.010Z</published><updated>2009-11-01T19:11:37.931Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='adf'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='memcached'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='infrastructure'/><category scheme='http://www.blogger.com/atom/ns#' term='saas'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='woa'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle open world'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='anti patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 26 October - 01 November 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Another good &lt;a href="http://www.infoq.com/news/2009/10/SOAWOA"&gt;summary how merging WOA with SOA could potentially solve (some) SOA problems&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.dynatrace.com/2009/10/14/performance-antipatterns-in-ajax-applications/"&gt;This post&lt;/a&gt; covers three major areas of JavaScript/AJAX performance: distributed communication, usability, memory leaks and anti-patterns.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Several &lt;a href="http://www.techcrunch.com/2009/10/21/web-2-0-summit-facebooks-vp-of-engineering-on-scaling-facebook/"&gt;interesting details from Facebook’s VP of Engineering about the infrastructure of the company&lt;/a&gt;, and the massive scaling problems it has to support. Big role for &lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; there. Full video presentation &lt;a href="http://www.youtube.com/watch?v=iddTbLo5s1M"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://technology.amis.nl/blog/6361/oow-2009-castle-in-the-clouds-saas-enabling-oracle-adf-faces-applications"&gt;Presentation&lt;/a&gt; at Oracle Open World 2009 - how to turn any &lt;a href="http://www.google.nl/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAcQFjAA&amp;url=http%3A%2F%2Fwww.oracle.com%2Ftechnology%2Fproducts%2Fadf%2Findex.html&amp;rct=j&amp;q=oracle+adf&amp;ei=Y9ztSpzQCM2E-QaO6p3rCw&amp;usg=AFQjCNG52U9DsV3U-tT2tbQu0pEM0igFfQ"&gt;ADF&lt;/a&gt; application into a &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_service"&gt;SaaS&lt;/a&gt; application - an application suitable for deployment on the cloud. Includes short description of a SaaS, benefits, concerns, and several requirements. These requirements include customisation of fields shown to the user (e.g show or not show depending on the user or location) and &lt;a href="http://en.wikipedia.org/wiki/Internationalization_and_localization"&gt;i18n&lt;/a&gt;. Technologies suggested to achieve this are Oracle &lt;a href="http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10471/adfns_editions.htm"&gt;EBR&lt;/a&gt;, (&lt;a href="http://en.wikipedia.org/wiki/Web_Services_for_Remote_Portlets"&gt;WSRP&lt;/a&gt;) portlets, &lt;a href="http://www.oracle.com/technology/products/webcenter/index.html"&gt;WebCenter&lt;/a&gt;, deep linking (tricky in JSF) and &lt;a href="http://en.wikipedia.org/wiki/Enterprise_service_bus"&gt;ESB&lt;/a&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/8474871406958844140-4320153999429932471?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4320153999429932471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4320153999429932471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4320153999429932471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4320153999429932471'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/11/best-of-this-week-summary-26-october-01.html' title='Best of this Week Summary 26 October - 01 November 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-822100641298157448</id><published>2009-10-25T13:19:00.009Z</published><updated>2009-10-25T13:38:15.559Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='distributed applications'/><category scheme='http://www.blogger.com/atom/ns#' term='intellij'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='maintenance'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='redeploying'/><category scheme='http://www.blogger.com/atom/ns#' term='restarting'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='support'/><category scheme='http://www.blogger.com/atom/ns#' term='jee containers'/><category scheme='http://www.blogger.com/atom/ns#' term='mashup'/><title type='text'>Best of this Week Summary 19 October - 25 October 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Opening up your data as a company is great for potentially generating new business. But how to secure them? &lt;a href="http://blog.programmableweb.com/2009/09/24/how-to-secure-apis-and-mashups/"&gt;Here&lt;/a&gt;'s a summary of references on how to secure APIs and mashups.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.zeroturnaround.com/blog/java-ee-container-redeploy-restart-turnaround-report/"&gt;The Java EE Container Redeploy &amp; Restart Report&lt;/a&gt; comes from a survey conducted over the summer, with over 1100 Java EE developer respondents. It analyzes time spent on the Redeploy and Restart process, and compares the following containers: GlassFish, Jetty, Tomcat, WebSphere and WebLogic. Among other results, this report shows that Java EE developers are spending 3 to 7 work weeks a year on redeploys and restarts, depending on their container of choice." Check also the comments &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=57978"&gt;here&lt;/a&gt; &lt;br /&gt;Great reference in the comments for fast-change+ctrl-s+reload-browser &lt;a href="http://lofidewanto.blogspot.com/2009/09/one-day-in-your-life.html"&gt;experience&lt;/a&gt; with &lt;a href="http://download.oracle.com/docs/cd/E12839_01/web.1111/e13702/deployunits.htm#i1054385"&gt;Weblogic FastSwap&lt;/a&gt; and &lt;a href="http://www.oracle.com/technology/products/enterprise-pack-for-eclipse/index.html"&gt;Oracle Enterprise Pack for Eclipse&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://www.jetbrains.com/idea/nextversion/index.html?utm_source=IDEA_BLOG&amp;utm_media=Anouncement&amp;utm_campaign=IDEA9_CE"&gt;IntelliJ IDEA&lt;/a&gt; has gone &lt;a href="http://blogs.jetbrains.com/idea/2009/10/intellij-idea-open-sourced/"&gt;open source for its Community Edition&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/10/01/evolution-of-a-support-process-part-2/"&gt;How you could setup your support and maintenance&lt;/a&gt; solving the problem of keeping the knowledge and keeping it interesting for the people involved.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.dynatrace.com/2009/09/28/performance-considerations-in-distributed-applications/"&gt;Performance considerations and 4 anti-patterns&lt;/a&gt; in distributed applications.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://weblogs.java.net/blog/caroljmcdonald/archive/2009/09/17/some-java-concurrency-tips"&gt;A review of some Java concurrency tips&lt;/a&gt; from Joshua Bloch, Brian Goetz and others.&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/8474871406958844140-822100641298157448?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/822100641298157448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=822100641298157448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/822100641298157448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/822100641298157448'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/10/best-of-this-week-summary-19-october-25.html' title='Best of this Week Summary 19 October - 25 October 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8690518652391911930</id><published>2009-10-18T13:10:00.011+01:00</published><updated>2009-10-18T13:47:58.987+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='mdd'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='ebr'/><category scheme='http://www.blogger.com/atom/ns#' term='anti patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle open world summary'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Best of this Week Summary 12 October - 18 October 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Last week was &lt;a href="http://www.oracle.com/us/openworld/018079.htm"&gt;Oracle Open World 2009&lt;/a&gt;. Beside for Oracle DBMS and SOA specialists, these days the event is definitely also very relevant to Java professionals because of Oracle's (almost official) acquisition of Sun this year. Here's a set of relevant information from OOW:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="http://technology.amis.nl/blog/6373/oow-2009-too-many-sub-titles-the-scott-and-larry-show-keynote-on-sunday"&gt;keynote&lt;/a&gt; on sunday which also describes the plans Oracle has with Java, MySQL and Sun hardware&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;James Gosling &lt;a href="http://technology.amis.nl/blog/6416/oow-2009-james-gosling-speaking-at-oracle-open-world"&gt;explaining to the developer audience&lt;/a&gt; what Sun was doing, what the scale is of Java activity around the world and across technology platforms.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Dutch software company Amis also did quite a few presentations at OOW. Some of those presentations were already online before they were actually presented! All were interesting:&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Good &lt;a href="http://technology.amis.nl/blog/6338/and-they-call-that-a-patch-set-marvels-coming-up-in-adf-11gr1-ps-1"&gt;overview of what will be in the Patch Set 1 for the Oracle Fusion Middleware 11g stack&lt;/a&gt;, including JSF and ADF (mobile!). It's more than a patch!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://technology.amis.nl/blog/6401/oow-2009-the-killer-feature-of-oracle-database-11gr2-edition-based-redefinition-or-database-object-versioning"&gt;Edition Based Redefinition (EBR)&lt;/a&gt;: "Every database object (well, almost every database object - not tables!) can have different implementations/incarnations/versions in various editions. The object versions are all in the same schema - they only differ in the Edition they are created in."&lt;br /&gt;So no more direct table access! No big bang needed anymore. Challenges: what if a mandatory column is removed or added from the current EBR view (answer: special triggers). Including 2 suggestions for best practices.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://technology.amis.nl/blog/6366/amis-oracle-open-world-2009-xml-database-presentations-online"&gt;XML processing/design tips&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This "session &lt;a href="http://technology.amis.nl/blog/6357/oow-2009-introducing-soa-and-oracle-soa-suite-11g-for-database-professionals"&gt;introduces SOA and the new Oracle SOA Suite 11g&lt;/a&gt; to the realm of database professionals from which it sometimes seems so far removed. What are the key SOA concepts and objectives? What is at the heart of Oracle SOA Suite 11g: composite applications, BPEL PM, and the mediator. The session shows how SOA services can be leveraged from the database, from triggers, PL/SQL units, or even SQL and how the database can publish events to the event delivery network. It covers how the SOA infrastructure can access the database, primarily using Oracle Database and Oracle Advanced Queueing adapter and how database developers can help in doing so efficiently. It ends with hints for applying SOA concepts to "normal" database development."&lt;br /&gt;&lt;br /&gt;Bit oriented at the database professional, but still interesting for those who want to stay up to date with Oracle's DMBS possibilities. And a bit scary too: it is possible in 11g to make webservice calls and publish them from the database(!). For example from PL/SLQ and put a webservice in front of PL/SQL... I haven't come up with a practical situation where you'd want to do this from an architectural point of view: large risk to getting tightly coupled systems and dependencies. If you have heavily invested (i.e built) in PL/SQL, it might be a valid option though.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There is currently a renewed focus on the role of code generation in developing enterprise Java applications. Springsource recently released &lt;a href="http://www.springsource.org/roo"&gt;Roo&lt;/a&gt;, Skyway Software released &lt;a href="http://www.skywayperspectives.org/portal/web/guest/builderce"&gt;Skyway Builder Community Edition version 6.3&lt;/a&gt; and Blu Age released &lt;a href="http://www.model2code.com/"&gt;M2Spring&lt;/a&gt;. &lt;a href="http://www.infoq.com/news/2009/09/codegen-java-development"&gt;What should the software architects and developers look for in a Code Generation framework&lt;/a&gt;?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Seven &lt;a href="http://blog.jteam.nl/2009/09/16/wicket-dos-and-donts/"&gt;Wicket Do's and Don'ts&lt;/a&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/8474871406958844140-8690518652391911930?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8690518652391911930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8690518652391911930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8690518652391911930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8690518652391911930'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/10/best-of-this-week-summary-12-october-18.html' title='Best of this Week Summary 12 October - 18 October 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3487578260531394574</id><published>2009-10-11T10:35:00.011+01:00</published><updated>2009-10-11T11:03:58.491+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='design patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='soa pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>Best of this Week Summary 05 October - 11 October 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;A quite in-depth &lt;a href="http://www.infoq.com/articles/scalable-java-components"&gt;article on creating highly-scalable components in Java&lt;/a&gt;. Described are the ideas used to create the concurrent Java components in the &lt;a href="http://amino-cbbs.sourceforge.net/"&gt;Amino Library Project&lt;/a&gt; (a set of concurrent building blocks).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Another &lt;a href="http://www.infoq.com/articles/SOA-Design-Patterns-Thomas-Erl-2"&gt;SOA Design Pattern sample chapter from Thomas Erl' book "SOA Design Patterns"&lt;/a&gt;: "Service Governance Patterns, comprising a number of 8 patters. Compatible Change and Version Identification deal with service versioning. Termination Notification addresses the final phase of a service, it’s retirement. Service Refactoring explains how to deal with changing service contracts. Service Decomposition, Proxy Capability, and Decomposed Capability include techniques needed to express coarse-grained services through multiple fine-grained ones.  Distributed Capability helps increasing service scalability through processing deferral."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.mulesoft.org/2009/07/to-esb-or-not-to-esb/"&gt;To ESB or not to ESB&lt;/a&gt;? Including a nine points checklist. Note that the article is from the creator of &lt;a href="http://mulesource.org/"&gt;Mule&lt;/a&gt; (a lightweight ESB). Check also the comments &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=55149"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Interesting hack to &lt;a href="http://ajaxian.com/archives/gmail-mobile-latency"&gt;reduce startup latency for mobile devices with HTML5&lt;/a&gt;: put the Javascript code in comments (thus /* */), such that is immediately downloaded but not evaluated. Then to load it when needed, parse the text, strip out the comment-tags &amp; do an eval().&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/8474871406958844140-3487578260531394574?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3487578260531394574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3487578260531394574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3487578260531394574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3487578260531394574'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/10/best-of-this-week-summary-05-october-11.html' title='Best of this Week Summary 05 October - 11 October 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-366506680485433768</id><published>2009-10-04T10:34:00.006+01:00</published><updated>2009-10-04T11:00:57.082+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapestry'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='web frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='null references'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic gap'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed database'/><title type='text'>Best of this Week Summary 28 September - 04 October 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;"&lt;a href="http://en.wikipedia.org/wiki/C._A._R._Hoare"&gt;Tony Hoare&lt;/a&gt; introduced Null references in ALGOL W back in 1965 “simply because it was so easy to implement”, says Mr. Hoare. He &lt;a href="http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare"&gt;talks about that decision&lt;/a&gt; considering it “my billion-dollar mistake”. Tony Hoare, is a British computer scientist, probably best known for the development in 1960, at age 26, of Quicksort. He also developed Hoare logic, the formal language Communicating Sequential Processes (CSP), and inspired the Occam programming language."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Peter Thomas has updated his &lt;a href="http://ptrthomas.wordpress.com/2009/09/14/perfbench-update-tapestry-5-and-grails/"&gt;web framework performance benchmark&lt;/a&gt; with Grails and Tapestry. Apache Wicket still leads the best of breed frameworks in terms of request times and memory usage." Other observations:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Grails was far more productive than Tapestry 5. This was mainly due to the documentation quality of Grails compared to the scattered and not very well organized Tapestry documentation.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ease of writing custom tag-libraries is IMO one of the best things about Grails.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Grails still has some way to go in terms of performance. I am told that significant performance optimizations for GSP will make it into 1.2&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Session usage of the Seam + JSF combination is significantly higher compared to all the rest, around 760 KB per session."&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"At the &lt;a href="http://openjdk.java.net/projects/mlvm/jvmlangsummit/"&gt;JVM Languages Summit&lt;/a&gt;, Josh Bloch expressed his concern about what he called &lt;a href="http://wiki.jvmlangsummit.com/MindTheSemanticGap"&gt;the "semantic gap" between the source code we write and its performance at runtime&lt;/a&gt;: As performance improves, our ability to predict the performance consequences of our source code degrades." Feedback from people on this subject can also be found &lt;a href="http://www.artima.com/forums/flat.jsp?forum=106&amp;thread=268689"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.mckoi.com/index.html"&gt;Mckoi Distributed Database&lt;/a&gt; (MckoiDDB) is a database system used by software developers to create applications that store data over a cluster of machines in a network. It is designed to be used in online environments where there are very large sets of both small and big data items that need to be stored, accessed and indexed efficiently in a network cluster. The focus of the MckoiDDB architecture is to support low latency query performance, provide strong data consistency through snapshot transaction isolation, and provide tools to manage logical data models that may change dramatically in physical network environments that may experience similar dramatic change.&lt;br /&gt;MckoiDDB is written in 100% Java and runs on any operating system that supports Java 1.6. MckoiDDB is released under the &lt;a href="http://www.mckoi.com/License.html"&gt;GPLv3 open source license&lt;/a&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/8474871406958844140-366506680485433768?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/366506680485433768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=366506680485433768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/366506680485433768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/366506680485433768'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/10/best-of-this-week-summary-28-september.html' title='Best of this Week Summary 28 September - 04 October 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3429422653057542475</id><published>2009-09-27T10:39:00.009+01:00</published><updated>2009-10-04T11:05:07.212+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='rsscloud'/><category scheme='http://www.blogger.com/atom/ns#' term='differences'/><category scheme='http://www.blogger.com/atom/ns#' term='anti patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><category scheme='http://www.blogger.com/atom/ns#' term='pubsubhubbub'/><category scheme='http://www.blogger.com/atom/ns#' term='issues'/><category scheme='http://www.blogger.com/atom/ns#' term='hadoop'/><title type='text'>Best of this Week Summary 21 September - 27 September 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Always feeling a bit less up-to-date when using RSS/Atom feeds? Well, convince your RSS/Atom provider to implement the &lt;a href="http://code.google.com/p/pubsubhubbub/"&gt;PubSubHubBub protocol&lt;/a&gt;: it provides a callback-hook, which when registered to as feed subscriber, causes an immediate update (ping) to the subscriber (instead of waiting for the next RSS/Atom feed request).&lt;br /&gt;Or will &lt;a href="http://rsscloud.org/walkthrough.html"&gt;rssCloud&lt;/a&gt; be the winner of this realtime RSS extension? Here's the basic (simpler) flow of rssCloud:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jFQmMfbR6Ec/Sr88L1nwFaI/AAAAAAAAASI/pcuVhvAprbE/s1600-h/rss_cloud_1-300x225.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 225px;" src="http://1.bp.blogspot.com/_jFQmMfbR6Ec/Sr88L1nwFaI/AAAAAAAAASI/pcuVhvAprbE/s320/rss_cloud_1-300x225.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5386089853428438434" /&gt;&lt;/a&gt;&lt;br /&gt;Differences between the two are described &lt;a href="http://www.certpal.com/blogs/2009/09/rss-cloud-vs-pubsubhubbub/"&gt;here&lt;/a&gt; (including some issues) and &lt;a href="http://thenextweb.com/2009/09/08/publish-recieve-r-realtime/"&gt;here&lt;/a&gt;. A real old-fashioned &lt;a href="http://thenextweb.com/2009/09/16/fight-realtime-web-rivalry-personal/"&gt;flame-war&lt;/a&gt; has even started between the creators of the two protocols.&lt;br /&gt;And &lt;a href="http://www.techcrunch.com/2009/09/09/rsscloud-vs-pubsubhubbub-why-the-fat-pings-win/"&gt;a good comparison which explains quite well why PuSH is the better choice&lt;/a&gt; of the two. Note that both protocols seem to be server-to-server only! (e.g think when you're behind a firewall or &lt;a href="http://en.wikipedia.org/wiki/Network_address_translation"&gt;NAT&lt;/a&gt;...)&lt;br /&gt;See &lt;a href="http://thelimberlambda.com/2009/08/10/pubsubhubbub-hullabaloo/"&gt;this article&lt;/a&gt; for an explanation of the PuSH flow of notifications/information in below's diagram:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jFQmMfbR6Ec/Sr87mWRkoTI/AAAAAAAAASA/Ix7YeaCWPRo/s1600-h/pshb_thumb.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 306px;" src="http://3.bp.blogspot.com/_jFQmMfbR6Ec/Sr87mWRkoTI/AAAAAAAAASA/Ix7YeaCWPRo/s320/pshb_thumb.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5386089209358754098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: PubSubHubbub &lt;a href="http://www.readwriteweb.com/archives/real-time_web_protocol_pubsubhubbub_explained.php"&gt;explained by co-creator Brett Slatkin&lt;/a&gt; (an engineer at Google).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Want to get to know &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt;? In short "Hadoop allows you to write and run your application in a distributed manner and process large amounts of data with it. It consists out of a MapReduce implementation and a distributed file system." Check the rest of &lt;a href="http://blog.jteam.nl/2009/08/04/introduction-to-hadoop/"&gt;this introduction&lt;/a&gt; for more details.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Five &lt;a href="http://blog.dynatrace.com/2009/08/13/java-memory-problems/"&gt;Java anti-patterns&lt;/a&gt; to prevent (out-of) memory problems.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Three &lt;a href="http://www.ebizq.net/topics/bpm/features/11569.html?&amp;pp=1"&gt;Best and three worst practices in BPM and SOA&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Tom Killalea, Vice President of technology with responsibility for infrastructure and distributed systems engineering at Amazon.com wrote &lt;a href="http://queue.acm.org/detail.cfm?id=1466447"&gt;an article on ACM queue on building scalable web services&lt;/a&gt;. He outlines guiding principles to building scalable web services with a lot of real-world examples, the core theme of which is “build only what you need”."&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/8474871406958844140-3429422653057542475?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3429422653057542475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3429422653057542475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3429422653057542475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3429422653057542475'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/09/best-of-this-week-summary-21-september.html' title='Best of this Week Summary 21 September - 27 September 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jFQmMfbR6Ec/Sr88L1nwFaI/AAAAAAAAASI/pcuVhvAprbE/s72-c/rss_cloud_1-300x225.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3682192522269587438</id><published>2009-09-20T11:27:00.006+01:00</published><updated>2009-09-20T11:55:20.814+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='composite key'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='test data'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Best of this Week Summary 14 September - 20 September 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; is slowly getting some more and more traction lately. Is it a &lt;a href="http://www.infoq.com/news/2009/07/scala-replace-java"&gt;potential long term replacement for Java&lt;/a&gt;?&lt;br /&gt;&lt;a href="http://www.computerworld.com.au/article/315254/-z_programming_languages_scala"&gt;Interview&lt;/a&gt; with Scala creator Martin Odersky where he tells its history, future and why it's so interesting (like combining OO- and functional techniques).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://hinchcliffe.org/archive/2009/08/06/17119.aspx"&gt;Six valid "takeaways&lt;/a&gt; on what most REST adopters can and should do to get the most from their use of this increasingly popular architectural style" summarised by Dion Hinchcliffe.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/09/10/feed-your-database/"&gt;Article&lt;/a&gt; that describes using &lt;a href="http://databene.org/databene-benerator/112-installing-the-benerator-distribution.html"&gt;Benerator&lt;/a&gt;, which is a data generator tool that can be used to feed database with pseudo-random test data.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/os-hibernatejpa/index.html"&gt;Tip&lt;/a&gt; that shows you how to implement composite keys with JPA and Hibernate. Check also the comments &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=57446"&gt;here&lt;/a&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/8474871406958844140-3682192522269587438?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3682192522269587438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3682192522269587438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3682192522269587438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3682192522269587438'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/09/best-of-this-week-summary-14-september.html' title='Best of this Week Summary 14 September - 20 September 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5186254508225110841</id><published>2009-09-13T12:07:00.006+01:00</published><updated>2009-09-13T12:30:49.698+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='canonical message model'/><category scheme='http://www.blogger.com/atom/ns#' term='layered testing'/><category scheme='http://www.blogger.com/atom/ns#' term='maturity'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='technical debt'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 07 September - 13 September 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Wondering whether you should add this new piece of functionality quick &amp; dirty or take a bit longer, but cleaner? Taking the first one sets you up for a &lt;a href="http://martinfowler.com/bliki/TechnicalDebt.html"&gt;Technical Debt&lt;/a&gt;, as some more explained by Martin Fowler.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Test logic can be buried in this unrelated code, which has nothing to do with test logic itself, making test code hard to read and maintain. In &lt;a href="http://www.infoq.com/articles/layered-test-automatation"&gt;this article&lt;/a&gt;, the layered architecture of test automation is presented to solve this problem. In this layered architecture, the test automation code is divided into three layers: (1) test cases, focusing on the test logic of the application, (2) the domain layer, modeling the system under test in domain terms, encapsulating http requests, browser control, result parsing logic and providing an interface for the test cases layer, (3) the system under test, which layer 2 will operate directly on."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/webservices/library/ar-esbpat3/index.html"&gt;A good explanation of the Canonical Message Model in the context of an ESB&lt;/a&gt;, and why you'd need one within an SOA. Great description of different approaches for implementing a CMM in an ESB and their pros and cons.&lt;br /&gt;A short introduction to CMM modelling (data model and message model) is described &lt;a href="http://www.ibm.com/developerworks/data/library/techarticle/dm-0803sauter/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;From &lt;a href="http://www.opengroup.org/"&gt;The Open Group&lt;/a&gt; two free PDF books: "The Open Group SOA Integration Maturity Model (&lt;a href="http://www.opengroup.org/bookstore/catalog/c092.htm"&gt;OSIMM&lt;/a&gt;) provides consultants and IT practitioners with a means to assess an organization’s Service Oriented Architecture (SOA) maturity level."&lt;br /&gt;"&lt;a href="http://www.opengroup.org/bookstore/catalog/c093.htm"&gt;This document&lt;/a&gt; describes a framework that provides context and definitions to enable organizations to understand and deploy SOA Governance."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The JavaServer Faces 2.0 specification (included in JEE6) got finalised last May. &lt;a href="http://technology.amis.nl/blog/6062/javaserver-faces-20-next-generation-jsf-technology-specification"&gt;Here&lt;/a&gt;'s a reference to it and a set of references related to this specification.&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/8474871406958844140-5186254508225110841?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/5186254508225110841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=5186254508225110841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5186254508225110841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/5186254508225110841'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/09/best-of-this-week-summary-07-september.html' title='Best of this Week Summary 07 September - 13 September 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1651282068878066897</id><published>2009-09-06T10:33:00.007+01:00</published><updated>2009-09-06T10:54:03.537+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='solr'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><category scheme='http://www.blogger.com/atom/ns#' term='wave protocol'/><title type='text'>Best of this Week Summary 24 August - 06 September 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/07/22/enterprise-search-introduction-to-solr/"&gt;Great introduction&lt;/a&gt; to &lt;a href="http://www.apache.org/dyn/closer.cgi/lucene/solr"&gt;Solr&lt;/a&gt;, a search server (and more). The article describes how to get it running, send it some documents to index and how to search those documents in a controlled way.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;More details on &lt;a href="http://wave.google.com/"&gt;Google Wave&lt;/a&gt;: &lt;a href="http://code.google.com/p/wave-protocol/"&gt;the draft specification&lt;/a&gt; for the Google Wave Federation Protocol and the Java source code for the Google Wave Federation Prototype Server &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An extensive &lt;a href="http://www.andygibson.net/articles/seam_spring_comparison/html_single/"&gt;comparison of Spring and Seam&lt;/a&gt;. And, recently added chapter 5, comparing them with Wicket 1.3.6. Too long for you to read? Then at least read the &lt;a href="http://www.andygibson.net/articles/seam_spring_comparison/html_single/#N10D44"&gt;conclusion&lt;/a&gt; :)&lt;br /&gt;Talking about Wicket, here are some &lt;br /&gt;&lt;a href="http://java.dzone.com/articles/after-5-days-wicket-upgrading"&gt;experiences&lt;/a&gt; written down on migrating an existing Wicket application to the new 1.4 version.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/articles/designing-restful-http-apps-roth"&gt;This article&lt;/a&gt; provides a short overview on the basics of RESTful HTTP and discusses typical issues that developers face when they design RESTful HTTP applications. It shows how to apply the REST architecture style in practice. It describes commonly used approaches to name URIs, discusses how to interact with resources through the Uniform interface, when to use PUT or POST and how to support non-CRUD operations.&lt;br /&gt;Related to that, here's &lt;a href="http://wonderfullyflawed.com/2009/07/02/get-your-api-right/"&gt;8 great tips/lessons learned for creating an API&lt;/a&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/8474871406958844140-1651282068878066897?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1651282068878066897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1651282068878066897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1651282068878066897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1651282068878066897'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/09/best-of-this-week-summary-24-august-06.html' title='Best of this Week Summary 24 August - 06 September 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6113044073955157450</id><published>2009-08-23T10:20:00.005+01:00</published><updated>2009-08-23T10:46:20.881+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='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Best of this Week Summary 17 August - 23 August 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Here's a basic list of &lt;a href="http://www.codeproject.com/KB/architecture/SWArchitectureReview.aspx"&gt;software architecture review guidelines&lt;/a&gt;. You can definitely also use it as a starting point for your documentation, or to see if your documentation is covering it all.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Shame on me: forgot to mention last week the &lt;a href="http://blogs.vmware.com/console/2009/08/vmware-acquires-springsource.html"&gt;VMWare acquisition of SpringSource&lt;/a&gt;! Basically the CTO says "&lt;a href="http://www.readwriteweb.com/enterprise/2009/08/vmware-acquires-springsource-for-420-million.php"&gt;the aim of this acquisition&lt;/a&gt; is to provide a comprehensive platform as a service (PaaS)". Here's a view on it &lt;a href="http://blog.springsource.com/2009/08/13/virtualization-enterprise-java/"&gt;from a technical level&lt;/a&gt; by Adrian Colver (SpringSource), and here's &lt;a href="http://www.pushtotest.com/docs/thecohenblog/oss"&gt;one from Frank Cohen&lt;/a&gt;. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Potential &lt;a href="http://www.readwriteweb.com/archives/the_cloud_isnt_safe_or_did_blackhat_just_scare_us.php"&gt;cloud "dangers"&lt;/a&gt; described during &lt;a href="http://www.blackhat.com/html/bh-usa-09/bh-usa-09-archives.html"&gt;Black Hat USA 2009&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And related to the previous one, &lt;a href="http://www.itnews.com.au/News/153451,stress-tests-rain-on-amazons-cloud.aspx"&gt;here&lt;/a&gt;'s a short summary with interesting results on stress testing the Amazon EC2, Google AppLogic and Microsoft Azure cloud solutions. Bascically, the performance quite varied and response times varied by a factor of 20! And good to know: on &lt;a href="http://www.google.nl/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fcode.google.com%2Fappengine%2F&amp;ei=zw2RSvSALIqL-QbAq4TzDQ&amp;rct=j&amp;q=google+appengine&amp;usg=AFQjCNF5QhCnECRmMCs_sNhPDj5bJE-WTg"&gt;Google AppEngine&lt;/a&gt;, any task can not last longer than 30 seconds!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Need to know "everything" about Java Generics? Then &lt;a href="http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html"&gt;this large PDF Java Generics FAQs - Frequently Asked Questions&lt;/a&gt; is for you. Think you know everything about Generics? It still might be for you. For example, do you know what this says: "Enum&amp;lt;E extends Enum&amp;lt;E&amp;gt;&amp;gt;"? Or can you follow this one: "Can I use the type parameter of an outer type as part of the bounds of the type parameter of an inner type or a method?"? :)&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/8474871406958844140-6113044073955157450?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6113044073955157450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6113044073955157450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6113044073955157450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6113044073955157450'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/08/best-of-this-week-summary-17-august-23.html' title='Best of this Week Summary 17 August - 23 August 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7143062688658862879</id><published>2009-08-15T13:17:00.009+01:00</published><updated>2009-08-16T10:04:27.999+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='lessons learned'/><category scheme='http://www.blogger.com/atom/ns#' term='gartner'/><category scheme='http://www.blogger.com/atom/ns#' term='collections'/><category scheme='http://www.blogger.com/atom/ns#' term='hype cycle'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 10 August - 16 August 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Always interesting the &lt;a href="http://www.gartner.com/it/page.jsp?id=1124212"&gt;Gartner 2009 Hype Cycle&lt;/a&gt;. For example, Web 2.0 is already on the way up again, while microblogging (e.g Twitter) is starting its downward trend.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Code review tools &lt;a href="http://www.review-board.org/"&gt;Review Board&lt;/a&gt;: "is a powerful web-based code review tool that offers developers an easy way to handle code reviews. It scales well from small projects to large companies and offers a variety of tools to take much of the stress and time out of the code review process." Downloadable.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great &lt;a href="http://blog.jteam.nl/2009/07/09/project-paazl-offers-choice-in-shipment/"&gt;description&lt;/a&gt; on how full-scale &lt;a href="http://www.google.nl/url?sa=t&amp;source=web&amp;ct=res&amp;cd=6&amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FScrum_(development)&amp;ei=GquGSsTnFISNjAfm5-yiCw&amp;rct=j&amp;q=scrum&amp;usg=AFQjCNHQJGaTXCMyd4_eorCMoHZrK2grOQ"&gt;Scrum&lt;/a&gt; was applied at a JTeam project. It includes answer to the why and what went well and what can be improved. Also shortly the used technologies are described (Spring, Spring WS, Spring MVC, JPA, JExcelApi, Apache Commons for FTP, iText for addresslabels with bar codes, jQuery and Google Maps, Mockito (see &lt;a href="http://blog.jteam.nl/2009/08/13/easier-mocking-with-mockito/"&gt;this post&lt;/a&gt; on why they switched from &lt;a href="http://www.easymock.org/"&gt;EasyMock&lt;/a&gt;), MockFTPServer and Subethamail Wiser for email integration testing. Again, great that they share this publicly.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-SOAbestpractices/index.html"&gt;Discussion&lt;/a&gt; of the quality assurance/testing challenges to be addressed with a SOA adoption, recommended best practices, and lessons learned.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;More or less a beginner's &lt;a href="http://www.informit.com/articles/article.aspx?p=368648"&gt;introduction to the Java Collections framework and algorithms&lt;/a&gt;. Sample chapter from "Core Java 2, Volume II - Advanced Features 7th Edition". Uses  CircularArrayQueue and LinkedListQueue as examples (how often have you used those two? ;)&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/8474871406958844140-7143062688658862879?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7143062688658862879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7143062688658862879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7143062688658862879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7143062688658862879'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/08/best-of-this-week-summary-10-august-16.html' title='Best of this Week Summary 10 August - 16 August 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-1229197597800402134</id><published>2009-08-09T10:04:00.005+01:00</published><updated>2009-08-09T10:22:01.472+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><category scheme='http://www.blogger.com/atom/ns#' term='firebug'/><category scheme='http://www.blogger.com/atom/ns#' term='apollo 11'/><title type='text'>Best of this Week Summary 3 August - 9 August 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://soa.sys-con.com/node/219090/print"&gt;Securing SOAP/webservices overview and tips&lt;/a&gt; including encryption, testing, maintainability and reusability.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://soa.sys-con.com/node/219090/print"&gt;Four steps to securing webservices&lt;/a&gt; with focus on testing.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Several &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=55170"&gt;junit best practices&lt;/a&gt;. And &lt;a href="http://www.exubero.com/junit/antipatterns.html"&gt;related antipatterns&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://highscalability.com/stack-overflow-architecture"&gt;Overview&lt;/a&gt; of &lt;a href="http://stackoverflow.com/"&gt;StackOverflow.com&lt;/a&gt;'s architecture, including general tips. The tools are MS, but the mentioned principles apply everywhere. Quite a lot on scaling up and out. Also included is how &lt;a href="http://salesforce.com/"&gt;Saleforce.com&lt;/a&gt; solved its perforance problems in the database (Oracle).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Awesome, &lt;a href="http://googlecode.blogspot.com/2009/07/apollo-11-missions-40th-anniversary-one.html"&gt;parts of the original source code of Apollo 11&lt;/a&gt;'s Command Module (Comanche054) and Lunar Module (Luminary099)! Pretty funny are some of the comments.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://technology.amis.nl/blog/5422/a-day-in-the-office-useful-findings-on-web-development-debugging-with-firebug-and-a-word-on-google-api-loader-and-adf-faces-rc"&gt;A couple of more or less advanced Firebug usage tips&lt;/a&gt;: advanced debugging with the console, replacing a Javascript funtion in the console and profiling.&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/8474871406958844140-1229197597800402134?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/1229197597800402134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=1229197597800402134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1229197597800402134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/1229197597800402134'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/08/best-of-this-week-summary-3-august-9.html' title='Best of this Week Summary 3 August - 9 August 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6461903301052598109</id><published>2009-08-02T09:38:00.009+01:00</published><updated>2009-08-02T11:05:10.704+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='builder pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='maturity'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='lifecycle'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='joshua bloch'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 27 July - 2 August 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;"A &lt;a href="http://www.infoq.com/articles/soa-gov-architect-s-view"&gt;discussion&lt;/a&gt; on the lifecycle processes of SOA governance, how SOA governance can become more mature, and how a maturity model can be used to support this growth, and the role of the architect in SOA governance, providing some practical guidelines for architects in a maturing SOA environment."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Two great interviews with Jeff Davis about his "Open Source SOA" book, recently released. The &lt;a href="http://java.dzone.com/articles/jeff-davis-open-source-soa"&gt;first interview&lt;/a&gt; has mainly questions about the book itself. The &lt;a href="http://www.infoq.com/articles/open-source-soa-davis"&gt;second interview&lt;/a&gt; has quite some questions about stuff &lt;b&gt;not&lt;/b&gt; in the book. A free excerpt of 1 chapter of the book is also available for download! The book itself describes many open source SOA products, helping you in selecting the right one and how/where to use it. Btw, CEP = Complex Event Processing. See for more &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=ComplexEventProcessing"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/web/library/wa-aj-advjquery2/index.html"&gt;jQuery 1.3 optimisation &amp; advanced tips&lt;/a&gt; including example code on: unbind(), live()/die(), Ajax Queue and Ajax Sync, and Namespaces.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://xavimiro.blogspot.com/2008/04/new-builder-pattern.html"&gt;Summary of implementations of the Builder pattern&lt;/a&gt; suggested by Joshua Blog during JavaOne 2007. Note that it &lt;b&gt;is&lt;/b&gt; different from the &lt;a href="http://en.wikipedia.org/wiki/Builder_pattern"&gt;GoF pattern&lt;/a&gt;. &lt;br /&gt;Related: &lt;a href="http://java.sun.com/developer/technicalArticles/Interviews/bloch_effective_08_qa.html"&gt;interview with Joshua Bloch&lt;/a&gt; with many tips and best practices, most referring to Effictive Java 2nd Edition. E.g: generics, enums, annotataions, wildcards, lazy initialisation, strange things about Java.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kind of obvious observation (but still worth mentioning :) &lt;a href="http://bytepawn.com/2009/06/17/scalable-web-architectures-and-application-state/"&gt;viewpoint on scalable web architectures and application state&lt;/a&gt;: don't store everything in the database, but treat (and "store") application state, cached data, and persistent data differently, using dedicated tools to manage these.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This week &lt;a href="http://wicket.apache.org/apache-wicket-14-takes-type-safety-to-the-next-level.html"&gt;Wicket 1.4 has been released&lt;/a&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/8474871406958844140-6461903301052598109?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6461903301052598109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6461903301052598109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6461903301052598109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6461903301052598109'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/08/best-of-this-week-summary-27-july-2.html' title='Best of this Week Summary 27 July - 2 August 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-9127487223968798745</id><published>2009-07-26T20:36:00.009+01:00</published><updated>2009-07-26T20:51:33.436+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='factory helper'/><category scheme='http://www.blogger.com/atom/ns#' term='jni'/><category scheme='http://www.blogger.com/atom/ns#' term='unittesting'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine'/><category scheme='http://www.blogger.com/atom/ns#' term='soa'/><title type='text'>Best of this Week Summary 20 July - 26 July 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/07/10/testing-with-factories/"&gt;Handy tip for creating testdata for your testclasses via "factory" helper classes&lt;/a&gt;, to prevent copying the construction of this testdata again and again.&lt;br /&gt;There's also a &lt;a href="http://blog.jteam.nl/2009/07/01/testing-the-database-layer/"&gt;database version&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://zooie.wordpress.com/2009/07/06/a-comparison-of-open-source-search-engines-and-indexing-twitter/"&gt;comparison of the following opensource search engines&lt;/a&gt;: &lt;a href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt;, &lt;a href="http://www.seg.rmit.edu.au/zettair/"&gt;Zettair&lt;/a&gt;, &lt;a href="http://www.lemurproject.org/indri/"&gt;Indri&lt;/a&gt;, &lt;a href="http://www.sphinxsearch.com/"&gt;Sphinx&lt;/a&gt;, and &lt;a href="http://xapian.org/"&gt;Xapian&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-jni/index.html"&gt;Best practices for using the Java Native Interface&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A great "free PDF White Paper from OASIS, OMG, and The Open Group was written &lt;a href="http://www.opengroup.org/bookstore/catalog/w096.htm"&gt;to help the SOA community at large to navigate the myriad of overlapping technical products produced by these organizations with specific emphasis on the “A” in SOA&lt;/a&gt;; i.e., Architecture. The docment explains and positions architectural standards for SOA reference models and ontologies, reference architectures, maturity models, SOA modeling profiles, and open standards work related to the topic of SOA governance. It also outlines the agreement on core SOA and SOA governance concepts."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How bad can one GOTO statement really be? ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/goto.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 740px; height: 201px;" src="http://imgs.xkcd.com/comics/goto.png" border="0" alt="" /&gt;&lt;/a&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/8474871406958844140-9127487223968798745?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/9127487223968798745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=9127487223968798745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/9127487223968798745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/9127487223968798745'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/07/best-of-this-week-summary-20-july-26.html' title='Best of this Week Summary 20 July - 26 July 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-344332092381556653</id><published>2009-07-19T16:39:00.008+01:00</published><updated>2009-07-19T16:58:47.618+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='tuning'/><category scheme='http://www.blogger.com/atom/ns#' term='monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='performance optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='storage'/><category scheme='http://www.blogger.com/atom/ns#' term='jee containers'/><category scheme='http://www.blogger.com/atom/ns#' term='survey'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Best of this Week Summary 13 July - 19 July 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Pretty basic &lt;a href="http://www.predic8.com/open-source/soap-monitor/"&gt;SOAP monitor (proxy)&lt;/a&gt; that allows you to edit SOAP messages before sending them on. Does not support a proxy (yet).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;IBM recently released &lt;a href="http://www.milepost.eu/"&gt;Milepost GCC&lt;/a&gt; (website has styling from 1998 ;), a "compiler which analyses the software and determines which code optimizations will be most effective during compilation using machine learning techniques. Experiments carried out with the compiler achieved an average 18% performance improvement. The compiler is expected to significantly reduce time-to-market of new software, because lengthy manual optimization can now be carried out by the compiler." Related to that is also the &lt;a href="http://ctuning.org/wiki/index.php/Main_Page"&gt;Collective Tuning wiki&lt;/a&gt;, dedicated to developing self-tuning computing systems.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.zeroturnaround.com"&gt;ZeroTurnaround&lt;/a&gt; "has released &lt;a href="http://www.zeroturnaround.com/blog/java-ee-container-heaven-hell-survey-results/"&gt;the results of their "Java EE Containers - Heaven or Hell" survey&lt;/a&gt;. Using responses from 700 respondents, they cover topics such as: containers most often used on large projects, fastest container, redeploy times and annual costs of redeployment in a series of charts and calculations. Both the charts and raw data are made available for your own analysis."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Looking for petabyte and beyond scale storage? The opensource project &lt;a href="http://ceph.newdream.net/about/"&gt;Ceph&lt;/a&gt; might be an option: it is a distributed network file system designed to provide excellent performance, reliability, and scalability.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Several basic and advanced JPA implementation patterns can be found &lt;a href="http://blog.xebia.com/2009/07/13/jpa-implementation-patterns-wrap-up/"&gt;here&lt;/a&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/8474871406958844140-344332092381556653?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/344332092381556653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=344332092381556653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/344332092381556653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/344332092381556653'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/07/best-of-this-week-summary-13-july-19.html' title='Best of this Week Summary 13 July - 19 July 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-3238852555213687326</id><published>2009-07-12T14:37:00.010+01:00</published><updated>2009-07-12T15:08:47.920+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='code generation criteria'/><category scheme='http://www.blogger.com/atom/ns#' term='html 5'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome os'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard api'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='memory leaks'/><title type='text'>Best of this Week Summary 06 July - 12 July 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Pretty high impact news: &lt;a href="http://news.cnet.com/8301-17939_109-10281477-2.htm"&gt;The W3C standards organisation has decided to let XHTML 2 go in favor of HTML 5&lt;/a&gt;. XHTML 2 was a "cleaner and better-architected version of HTML" but not backwards compatible with the current HTML standards and current browsers. Incrementally improving the current standards is what is headed for now. W3C is already involved in HTML 5.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.yourkit.com/"&gt;YourKit&lt;/a&gt; &lt;a href="http://blog.springsource.com/2009/07/05/using-yourkit-to-find-a-memory-leak/"&gt;described&lt;/a&gt; for finding Java memory leaks. Free for opensource projects, otherwise commercial licensing.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Interesting piece on &lt;a href="http://www.infoq.com/news/2009/06/Twitter-Architecture"&gt;Twitter's evolving architecture&lt;/a&gt; presented during QCon London 2009, addressing:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Caching&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Message queuing&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Memcached client&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;All slides can be found &lt;a href="http://blog.evanweaver.com/articles/2009/03/13/qcon-presentation/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Of course the big news this week was Google's announcement of its &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Chrome OS&lt;/a&gt;. A quick bunch of FAQs from Google can be found &lt;a href="http://chrome.blogspot.com/2009/07/google-chrome-os-faq.html"&gt;here&lt;/a&gt;. &lt;a href="http://news.cnet.com/8301-17939_109-10282592-2.html"&gt;Why Google Chrome? Well, why not?&lt;/a&gt; And finally, &lt;a href="http://www.capgemini.com/ctoblog/2009/07/googles_chrome_os_kills_qualit.php"&gt;a funny reason why a within-seconds bootup time is a disadvantage&lt;/a&gt; ;) Couldn't agree more :)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://googleajaxsearchapi.blogspot.com/2009/06/introducing-virtual-keyboard-api.html"&gt;Virtual Javascript keyboard (API)&lt;/a&gt; such that different languages can be used as input, without the need for a special fysically present keyboard (e.g for arabic letters)).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.skywayperspectives.org/blog/?p=688"&gt;10 criteria&lt;/a&gt; that can be used to determine whether a product has good code generation support.&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/8474871406958844140-3238852555213687326?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/3238852555213687326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=3238852555213687326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3238852555213687326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/3238852555213687326'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/07/best-of-this-week-summary-06-july-12.html' title='Best of this Week Summary 06 July - 12 July 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-7335689494434340811</id><published>2009-07-04T15:54:00.008+01:00</published><updated>2009-07-05T11:53:03.838+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='case studies'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Best of this Week Summary 29 June - 05 July 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Here's a &lt;a href="http://www.pardontheinformation.com/2009/06/google-app-engine-for-java-3-tips-for.html"&gt;Getting Started&lt;/a&gt; and bunch of Case Studies for &lt;a href="http://code.google.com/intl/nl/appengine/"&gt;Google App Engine&lt;/a&gt; with Java: &lt;a href="http://tomuse.com/google-app-engine-java-microblog-development-review/"&gt;case study 1&lt;/a&gt;, &lt;a href="http://blog.smart-java.nl/blog/index.php/2009/06/05/getting-on-the-cloud/"&gt;case study 2&lt;/a&gt; and &lt;a href="http://javasplitter.blogspot.com/2009/05/how-to-google-app-enginefy-your.html"&gt;case study 3&lt;/a&gt;. Main things to take away:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;GAE does not support the whole JEE API nor all regular frameworks.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Google's database for GAE is non-relational(!) but an object store&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://web2.socialcomputingjournal.com/web_20_architectures_released_what_entrepreneurs_and_archi.htm"&gt;collection of web 2.0 architecture articles&lt;/a&gt; every software/application architect should know about, collected over the years by Dion Hinchcliffe.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great &lt;a href="http://www.martinfowler.com/articles/itsNotJustStandingUp.html"&gt;extensive article from Martin Fowler on the Scrum daily stand-up meetings&lt;/a&gt;, including tips on: benefits and consequences of common practices for daily stand-ups, how to run them effectively, stand-up patterns, what to talk about, when to run them, and the goals, to help beginners and remind experienced practitioners.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A few weeks ago Google introduced &lt;a href="http://code.google.com/intl/nl/speed/"&gt;Speed&lt;/a&gt;, its open source effort to all make the web faster. Looking at &lt;a href="http://mashable.com/2009/06/25/google-speed-tips/"&gt;some of the feedback&lt;/a&gt;, it seems to currently contain only basic best-practices tips.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Great long &lt;a href="http://www.bobbyvandersluis.com/articles/clientside_scripting/"&gt;article on the history of Javascript and what hopefully awaits us in the future&lt;/a&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/8474871406958844140-7335689494434340811?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/7335689494434340811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=7335689494434340811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7335689494434340811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/7335689494434340811'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/07/best-of-this-week-summary-29-june-05.html' title='Best of this Week Summary 29 June - 05 July 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-4713665742264124366</id><published>2009-06-28T10:25:00.006+01:00</published><updated>2009-06-28T10:51:14.922+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prettytime'/><category scheme='http://www.blogger.com/atom/ns#' term='programming personality style'/><category scheme='http://www.blogger.com/atom/ns#' term='kanban'/><category scheme='http://www.blogger.com/atom/ns#' term='domain driven design'/><category scheme='http://www.blogger.com/atom/ns#' term='ddd'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Best of this Week Summary 21 June - 28 June 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.jteam.nl/2009/05/10/the-misunderstanding-of-domain-driven-design/"&gt;Misunderstandings of Domain Driven Design described&lt;/a&gt;. DDD = "Domain Driven Design is an approach that describes the approach to designing the business layer".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://deployment.googleapps.com/"&gt;Google site&lt;/a&gt; dedicated to deploying &lt;a href="http://www.google.com/apps/intl/en/business/index.html"&gt;Google Apps&lt;/a&gt; in an enterprise (more than 100 users).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Which on is the best of these agile methodologies: &lt;a href="http://www.agilejournal.com/articles/17-articles/1737-what-is-best-scrum-or-kanban"&gt;Scrum or Kanban&lt;/a&gt;? Differences and similarities are described. The unsurprising answer: it depends on the situation :) My conclusion: Kanban has less "rules" to follow and thus might be a better suit for experienced agile developers.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A handy opensource Java library (no i18n yet) for showing real user friendly times, like "in 3 minutes", formats you see on many social sites like Digg and Facebook: &lt;a href="http://ocpsoft.com/prettytime/"&gt;PrettyTime&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And &lt;a href="http://www.doolwind.com/index.php?page=11"&gt;what is your programming personality style&lt;/a&gt;? For me it's &lt;b&gt;D&lt;/b&gt;oer&lt;b&gt;H&lt;/b&gt;ighlevel&lt;b&gt;S&lt;/b&gt;ololi&lt;b&gt;B&lt;/b&gt;eral...&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/8474871406958844140-4713665742264124366?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/4713665742264124366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=4713665742264124366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4713665742264124366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/4713665742264124366'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/06/best-of-this-week-summary-21-june-28.html' title='Best of this Week Summary 21 June - 28 June 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-8712958923495493479</id><published>2009-06-21T09:46:00.008+01:00</published><updated>2009-06-21T10:36:54.877+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google wave'/><category scheme='http://www.blogger.com/atom/ns#' term='xmlbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='drizzle'/><category scheme='http://www.blogger.com/atom/ns#' term='java classes'/><category scheme='http://www.blogger.com/atom/ns#' term='castor'/><category scheme='http://www.blogger.com/atom/ns#' term='generation'/><category scheme='http://www.blogger.com/atom/ns#' term='xmlspy'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='jaxb'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2009 summary'/><title type='text'>Best of this Week Summary 15 June - 20 June 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Finally I found a &lt;a href="http://downloads.pushtotest.com/200906/PushToTest_JavaOne2009_Redstripe.pdf"&gt;good summary of JavaOne 2009 (PDF)&lt;/a&gt; by &lt;a href="http://www.pushtotest.com/about/bio-cohen.html"&gt;Frank Cohen&lt;/a&gt;.&lt;br /&gt;Two other pretty good summaries can be found &lt;a href="http://weblogs.java.net/blog/cayhorstmann/archive/2009/06/java_one_2009_d.html"&gt;here&lt;/a&gt; and &lt;a href="http://ctpjava.blogspot.com/2009/06/java-one-2009-summary-monday.html"&gt;here&lt;/a&gt;. Both are split into days, so some browsing required :)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://krow.livejournal.com/638654.html"&gt;This blogpost&lt;/a&gt; describes how's the opensource project &lt;a href="http://mysql.com/"&gt;MySQL&lt;/a&gt; fork &lt;a href="https://launchpad.net/drizzle"&gt;Drizzle&lt;/a&gt; handling code contributions and testing. Some rules for the 100+ contributors are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No code will be accepted that works by disabling any existing tests&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is not allowed to contribute code that causes a compiler warning&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2009/06/wave"&gt;Here&lt;/a&gt;'s a nice summary of &lt;a href="http://wave.google.com/"&gt;Google Wave&lt;/a&gt;'s architecture.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This week I performed a short research on tools being able to generate Java classes from XSDs. All I wanted to use it for is generate my domainmodel classes, nothing more, nothing less. No need for Java &lt;--&gt; XML binding/conversions. Another requirement was that the generated code should not contain any dependencies on that tool. Finally, it has to run under JDK 1.4 too :( Because of that last requirement, &lt;a href="http://technology.amis.nl/blog/321/java-xml-binders-compared"&gt;this summary&lt;/a&gt; was already quite handy. Well, I thought the research would be pretty easy, but it wasn't. Actually, in the end I didn't succeed. None of the below tools generate code that has no tool-specific imports. Do you know of any tool that should do it? Let me (us :) know in the comments! Below a summary of my findings:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.castor.org/"&gt;Castor 0.9.x and 1.3&lt;/a&gt;: generates classes (no interfaces), with matching Descriptor classes per class that can be used to validate the created object. Imports org.castor.* stuff.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://xmlbeans.apache.org/"&gt;XMLBeans 2.4.0&lt;/a&gt; generates interfaces and implementing classes. Both import xmlbeans classes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://jaxb.dev.java.net/1.0/"&gt;JAXB 1.0&lt;/a&gt; generates interfaces, implementing classes and runtime classes (haven't figured out what that is exactly). Imports JAXB classes/interfaces.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;XMLSpy 2006 Enterprise Edition: generates classes. Looks more like you expect, "one class per type". But also needs com.altova.* imports.&lt;/li&gt;&lt;br /&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/8474871406958844140-8712958923495493479?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/8712958923495493479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=8712958923495493479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8712958923495493479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/8712958923495493479'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/06/best-of-this-week-summary-15-june-20.html' title='Best of this Week Summary 15 June - 20 June 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-6634869274829438540</id><published>2009-06-14T11:21:00.006+01:00</published><updated>2009-06-14T11:45:45.590+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='app store'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='woa'/><category scheme='http://www.blogger.com/atom/ns#' term='java appstore'/><title type='text'>Best of this Week Summary 8 June - 14 June 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;A whole bunch of AJAX best practices in &lt;a href="http://conference.indicthreads.com/presentations/2008/IndicThreads-Conference-2008-Ajax-Atul%20Kahate.pdf"&gt;this PDF presentation&lt;/a&gt; from &lt;a href="http://www.indicthreads.com/4362/ajax-security-best-practices/?dzref=183308"&gt;JavaTech 2008, Pune - India&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Another &lt;a href="http://hinchcliffe.org/archive/2009/06/06/16901.aspx"&gt;article with more details and explanation on WOA&lt;/a&gt; by Dion HinchCliffe. Web Oriented Architecture: it's a set of best practices for designing Web applications in which &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; is the foundational architectural style. Below the stack:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jFQmMfbR6Ec/SjTS1FNGdII/AAAAAAAAAR4/FDQf9RgK6ow/s1600-h/the_woa_stack_small.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 262px; height: 320px;" src="http://1.bp.blogspot.com/_jFQmMfbR6Ec/SjTS1FNGdII/AAAAAAAAAR4/FDQf9RgK6ow/s320/the_woa_stack_small.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5347130466967647362" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A little bit off-track, but maybe very appropriate for you: &lt;a href="http://codezest.com/archive/2009/05/31/top-10-reasons-why-employees-leave-in-it.aspx"&gt;Top 10 Reasons Why Employees Leave in IT&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Yup, Sun (Oracle) now also has its app store: &lt;a href="http://www.java.com/en/store/index.jsp"&gt;the Java Store&lt;/a&gt;. Still in private beta.&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/8474871406958844140-6634869274829438540?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/6634869274829438540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=6634869274829438540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6634869274829438540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/6634869274829438540'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/06/best-of-this-week-summary-8-june-14.html' title='Best of this Week Summary 8 June - 14 June 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jFQmMfbR6Ec/SjTS1FNGdII/AAAAAAAAAR4/FDQf9RgK6ow/s72-c/the_woa_stack_small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-2269628516706807568</id><published>2009-06-07T11:48:00.009+01:00</published><updated>2009-06-07T12:49:26.126+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poja'/><category scheme='http://www.blogger.com/atom/ns#' term='preformance'/><category scheme='http://www.blogger.com/atom/ns#' term='yslow'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='webservice'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud tools'/><category scheme='http://www.blogger.com/atom/ns#' term='endpoint'/><category scheme='http://www.blogger.com/atom/ns#' term='linkedin'/><category scheme='http://www.blogger.com/atom/ns#' term='software architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='main'/><category scheme='http://www.blogger.com/atom/ns#' term='page load'/><title type='text'>Best of this Week Summary 1 June - 7 June 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Presentation from the author of POJOs in Action on &lt;a href="http://hostedftp.wordpress.com/2009/01/29/developing-and-deploying-java-applications-amazon-elastic-compute-cloud/"&gt;running Java applications in Amazon's EC2&lt;/a&gt;. Shortly describes the opensource project &lt;a href="http://code.google.com/p/cloudtools/"&gt;Cloud Tools&lt;/a&gt; that can be used to configure Tomcat, MySQL, Apache, JMeter, (cluster) deployment etc. CT also includes AMIs pre-installed with these tools and a Maven and Grails plugin. A couple of sample deployment architectures are shown too. Tiny bit older presentation because it does not mention the &lt;a href="https://console.aws.amazon.com/"&gt;AWS Management Console&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Of course you know &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt;, which helps you analysing your webpage load time, and then gives you tips on how to improve it. Google has just opensourced its similar tool &lt;a href="http://google-code-updates.blogspot.com/2009/06/introducing-page-speed.html"&gt;Page Speed&lt;/a&gt;, but with  tips based upon different insights. It's a Firefox add-on integrated with Firebug.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;a href="http://live.eclipse.org/node/731"&gt;42 minutes presentation by LinkedIn's engineers&lt;/a&gt; on exploring the best available technologies which could be used to build its next generation architecture.&lt;br /&gt;"The new architecture involved using OSGI/Spring DM as the foundation because it had the right properties we were interested in. The code was migrated to a more modular paradigm using binary consumption.&lt;br /&gt;The session will demonstrate how they integrated OSGi, the pros and cons of the changes, the pain points as well as the migration strategy."&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open up your company's &lt;a href="http://www.w3.org/DesignIssues/LinkedData.html"&gt;data&lt;/a&gt; so others can link to it: &lt;a href="http://www.readwriteweb.com/archives/linked_data_is_blooming_why_you_should_care.php"&gt;the next step in the web, and why you should care&lt;/a&gt;. As seen by &lt;a href="http://nl.wikipedia.org/wiki/Tim_Berners-Lee"&gt;Tim Berners-Lee&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Did you know about this cool feature in Java 6 SE: &lt;a href="http://technology.amis.nl/blog/5560/publish-a-webservice-from-a-poja-plain-old-java-application-that-is-out-of-the-container-using-endpoint-class"&gt;it is possible to make a standalone Java application available as a webservice&lt;/a&gt; via the &lt;a href="http://java.sun.com/javase/6/docs/api/javax/xml/ws/Endpoint.html"&gt;EndPoint&lt;/a&gt; class (i.e, via its main() method). Thus: &lt;i&gt;without a container!&lt;/i&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/8474871406958844140-2269628516706807568?l=ttlnews.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ttlnews.blogspot.com/feeds/2269628516706807568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8474871406958844140&amp;postID=2269628516706807568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2269628516706807568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8474871406958844140/posts/default/2269628516706807568'/><link rel='alternate' type='text/html' href='http://ttlnews.blogspot.com/2009/06/best-of-this-week-summary-1-june-7-june.html' title='Best of this Week Summary 1 June - 7 June 2009'/><author><name>Techie</name><uri>http://www.blogger.com/profile/09242813498513889831</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_jFQmMfbR6Ec/SKguCRL_GWI/AAAAAAAAAI4/fcJhBp2YTF4/S220/blogspotqr.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8474871406958844140.post-5432970577355748302</id><published>2009-05-31T12:21:00.007+01:00</published><updated>2009-06-01T11:03:47.297+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='google wave'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='sonar'/><category scheme='http://www.blogger.com/atom/ns#' term='efficient java code'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='jvm'/><title type='text'>Best of this Week Summary 25 May - 31 May 2009</title><content type='html'>&lt;ul&gt;&lt;li&gt;Facebook is now also supporting registration/login via a GMail account and &lt;a href="http://www.openid.net/"&gt;OpenID&lt;/a&gt;, see the image below. I especially like that they've implemented it with a &lt;a href="http://wiki.openid.net/f/openid_ui_extension_draft01.html"&gt;lightbox ("popup")&lt;/a&gt; so the user doesn't get as much confused anymore, as was the case in the old/standard implementation where the user is completely redirected to Google or the OpenID provider's website.
