<?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-2824232686066087188</id><updated>2012-02-16T17:29:57.476-08:00</updated><category term='mobile'/><category term='webex'/><category term='javafx'/><category term='technology'/><category term='active directory'/><category term='javascript'/><category term='java'/><category term='ec2'/><category term='security'/><category term='apple'/><category term='development'/><category term='programming'/><category term='deployment'/><category term='encryption type'/><category term='load'/><category term='lucene'/><category term='tomcat'/><category term='cloud'/><category term='openlazlo'/><category term='resolution'/><category term='jmeter'/><category term='test'/><category term='android'/><category term='python'/><category term='spring'/><category term='search'/><category term='bitnami'/><category term='physics'/><category term='webapp'/><category term='sas'/><category term='kerberos'/><category term='openmeetings'/><category term='google'/><category term='humor'/><title type='text'>The Ten Minute Rule</title><subtitle type='html'>Personal blog for Rick Lawson.
One thing I have learned over the years is if you can't grasp the basic concepts of a technology in 10 minutes then the technology is flawed.
Here are my musings, mainly on Java and Python.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-507109135407672294</id><published>2012-01-11T13:15:00.000-08:00</published><updated>2012-01-11T13:15:28.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>12 resolutions for programmers is a great thing to try</title><content type='html'>Came across this post on hacker news by Matt Might a CS prof at Univ of Utah.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://matt.might.net/articles/programmers-resolutions/"&gt;http://matt.might.net/articles/programmers-resolutions/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'd like to add a couple of resources&lt;br /&gt;&lt;br /&gt;For (1) and (2) - Go analog &amp;amp; Stay healthy.&lt;br /&gt;jogging is a great way to keep your sanity. Try the from couch to 5k program&lt;br /&gt;&lt;a href="http://www.coolrunning.com/engine/2/2_3/181.shtml"&gt;couch to 5k&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;go vegetarian or vegan&lt;br /&gt;&lt;a href="http://features.peta.org/VegetarianStarterKit/"&gt;http://features.peta.org/VegetarianStarterKit/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;For (4) - Learn a new programming language.&lt;br /&gt;python python python&lt;br /&gt;&lt;a href="http://python.org/"&gt;http://python.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For (5) - Automate the real world&lt;br /&gt;Normally I would recommend Arduino but after talking to a good friend of mine I think Raspberry Pi will change the world in the realm of low cost automation. For $25 you can stick a full PC anywhere to control anything.&lt;br /&gt;&lt;a href="http://www.raspberrypi.org/"&gt;http://www.raspberrypi.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All in all a great list and even if you only do a few it seems like a fun time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-507109135407672294?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/507109135407672294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=507109135407672294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/507109135407672294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/507109135407672294'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2012/01/12-resolutions-for-programmers-is-great.html' title='12 resolutions for programmers is a great thing to try'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-8993767625024002557</id><published>2011-12-30T15:43:00.000-08:00</published><updated>2011-12-30T15:44:48.287-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>JavaScript as a first language?</title><content type='html'>John Resig, noted JavaScript demigod, &lt;a href="http://ejohn.org/blog/javascript-as-a-first-language"&gt;blogs&lt;/a&gt; about teaching JavaScript as a first language at the Kahn academy (&lt;a href="http://www.khanacademy.org/"&gt;http://www.khanacademy.org/&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I can see the advantages, I mean:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; it is everywhere&lt;/li&gt;&lt;li&gt;no debug, compile cycle&lt;/li&gt;&lt;li&gt;fast path to visual results&lt;/li&gt;&lt;li&gt;job market is great&lt;/li&gt;&lt;/ol&gt;This still feels a little weird to me though. I mean JavaScript is such a franken-language. Or maybe it's me and too many years of Java as my bread and butter. I have been trained to think of OO and classical inheritance as the one true religion. But how in the world do you explain closures or the === versus the == operator or the bizarre behavior of with in JavaScript to a new person. Or do you just say "hey, this is a pretty cool language but some parts totally stink and all of this happened in the go go 90's when this whole internet thing was blowing up so just use this subset of the language and these libraries and you'll be fine"?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-8993767625024002557?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/8993767625024002557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=8993767625024002557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/8993767625024002557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/8993767625024002557'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/javascript-as-first-language.html' title='JavaScript as a first language?'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-1971563567327437279</id><published>2011-12-22T07:15:00.000-08:00</published><updated>2011-12-22T07:15:52.430-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>Open Source Physics Rocks!</title><content type='html'>This is so cool, great site with tons of physics resources. The coolest part for me is the simulations. They use Java of course but this team has put together a nice tool set for building and bundling simulations. So you can describe a pendulum experiment and then bundle the simulation into a double clickable jar that will play on any platform.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.compadre.org/osp/index.cfm"&gt;http://www.compadre.org/osp/index.cfm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Simulations here&lt;br /&gt;&lt;a href="http://www.compadre.org/osp/search/categories.cfm?t=Simulation"&gt;http://www.compadre.org/osp/search/categories.cfm?t=Simulation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For example, Doppler effect&lt;br /&gt;&lt;a href="http://www.compadre.org/OSP/document/ServeFile.cfm?ID=7902&amp;amp;DocID=678"&gt;http://www.compadre.org/OSP/document/ServeFile.cfm?ID=7902&amp;amp;DocID=678&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-1971563567327437279?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/1971563567327437279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=1971563567327437279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/1971563567327437279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/1971563567327437279'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/open-source-physics-rocks.html' title='Open Source Physics Rocks!'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-5593996701222418941</id><published>2011-12-20T05:35:00.000-08:00</published><updated>2011-12-20T05:35:50.424-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>JavaFX now shipping as part of SDK but it's not truly cross platform???</title><content type='html'>This is good but what the heck, the system requirements are still windows? I mean something shouldn't go into the JDK until it is truly cross platform. I can't make up my mind about whether to be excited about JavaFX or not. There have been so many disappointments with Java GUI technology. And HTML5 is certainly sweeping the land. But if Java shops could crank out rich interfaces using nothing but their Java skills then it would be a big win even if it mainly is used in intra-company apps.&lt;br /&gt;&lt;br /&gt;I saw this on Adam Bien's blog &lt;br /&gt;&lt;a href="http://www.adam-bien.com/roller/abien/entry/java_fx_2_8230_comes"&gt;http://www.adam-bien.com/roller/abien/entry/java_fx_2_8230_comes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The JDK release notes&lt;br /&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/7u2-relnotes-1394228.html"&gt;http://www.oracle.com/technetwork/java/javase/7u2-relnotes-1394228.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;JavaFX system requirements&lt;br /&gt;&lt;a href="http://docs.oracle.com/javafx/2.0/system_requirements/jfxpub-system_requirements.htm"&gt;http://docs.oracle.com/javafx/2.0/system_requirements/jfxpub-system_requirements.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-5593996701222418941?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/5593996701222418941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=5593996701222418941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/5593996701222418941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/5593996701222418941'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/javafx-now-shipping-as-part-of-sdk-but.html' title='JavaFX now shipping as part of SDK but it&apos;s not truly cross platform???'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-3408752135739414319</id><published>2011-12-12T19:30:00.000-08:00</published><updated>2011-12-12T19:37:07.286-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring context viewer</title><content type='html'>Spring is a great tool but in a large code base with component scanning and autowiring it can be really easy to lose a handle on exactly what your application context looks like. I had just such a problem at work the other day where I needed a structured view of my Spring app context. This was a context at the war level that had another context as a parent at the ear level. There were some classloader issues involved. Anyway, I was able to query the context to figure out what I needed, but after work I thought about writing a quick ascii tree view of the context. It wasn't too hard and you get something like this.&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;=== Spring ApplicationContext Info ===&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;+&amp;lt;ApplicationContext 'shared.context'&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -startupDate: 12/12/2011 09:19:14.667&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -id: shared.context&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -identityHashCode: 567e768e&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -classloader: EarLibClassLoader : urlSet = [URLEntry : file:/C:/code/sctx/dist/gfde....&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +beans&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +adder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -prototype: true&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -singleton: false&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -type: class example.sctx.service.AdderImpl&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -identityHashCode: ec99b58&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -class: class example.sctx.service.AdderImpl&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -classloader: EarClassLoader : urlSet = [URLEntry : file:/C:/code/sctx/dist/gfdeplo...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +ejb-context-holder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -prototype: false&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -singleton: true&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -type: class example.sctx.ContextHolder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -identityHashCode: 55f5b5fd&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -class: class example.sctx.ContextHolder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -classloader: EarClassLoader : urlSet = [URLEntry : file:/C:/code/sctx/dist/gfdeplo...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +&amp;lt;Root WebApplicationContext&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -startupDate: 12/12/2011 09:19:14.999&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -id: org.springframework.web.context.WebApplicationContext:/sctx1-war&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -identityHashCode: 29d971d9&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -classloader: EarLibClassLoader : urlSet = [URLEntry : file:/C:/code/sctx/dist/gfde....&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +beans&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +webapp1-context-holder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -prototype: false&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -singleton: true&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -type: class example.sctx1.ContextHolder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -identityHashCode: 767f2121&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -class: class example.sctx1.ContextHolder&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -classloader: WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +subtractor&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -prototype: false&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -singleton: true&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -type: class example.sctx1.service.SubtractorImpl&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -identityHashCode: 2c5be151&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -class: class example.sctx1.service.SubtractorImpl&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -classloader: WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The code to produce is below. It is a fairly short utility class with no external dependencies (other than Spring of course).&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: #ffffff; color: black;"&gt;package example&lt;span style="color: #808030;"&gt;.&lt;/span&gt;springutil&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;import&lt;/span&gt; java&lt;span style="color: #808030;"&gt;.&lt;/span&gt;text&lt;span style="color: #808030;"&gt;.&lt;/span&gt;SimpleDateFormat&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;import&lt;/span&gt; java&lt;span style="color: #808030;"&gt;.&lt;/span&gt;util&lt;span style="color: #808030;"&gt;.&lt;/span&gt;ArrayList&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;import&lt;/span&gt; java&lt;span style="color: #808030;"&gt;.&lt;/span&gt;util&lt;span style="color: #808030;"&gt;.&lt;/span&gt;Collections&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;import&lt;/span&gt; java&lt;span style="color: #808030;"&gt;.&lt;/span&gt;util&lt;span style="color: #808030;"&gt;.&lt;/span&gt;Date&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;import&lt;/span&gt; java&lt;span style="color: #808030;"&gt;.&lt;/span&gt;util&lt;span style="color: #808030;"&gt;.&lt;/span&gt;List&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;import&lt;/span&gt; org&lt;span style="color: #808030;"&gt;.&lt;/span&gt;springframework&lt;span style="color: #808030;"&gt;.&lt;/span&gt;context&lt;span style="color: #808030;"&gt;.&lt;/span&gt;ApplicationContext&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* ContextViewer - create an ascii tree view of Spring context&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* usage:&amp;lt;blockquote&amp;gt;&amp;lt;pre&amp;gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* ContextViewer viewer = new ContextViewer(ac);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* String asciiTree = viewer.toString();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* // then you can dump the tree to the logs or wherever&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* &amp;lt;/pre&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;* &lt;/span&gt;&lt;span style="color: #7f9fbf; font-weight: bold;"&gt;@author&lt;/span&gt;&lt;span style="color: #3f5fbf;"&gt; rick.lawson&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;public class ContextViewer &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: maroon; font-weight: bold;"&gt;int&lt;/span&gt; MAX_LEN &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;70&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: #603000;"&gt;String&lt;/span&gt; INDENT &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;     &lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: #603000;"&gt;String&lt;/span&gt; CONTENT_NODE &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;+&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: #603000;"&gt;String&lt;/span&gt; DATA_NODE &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;-&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: #603000;"&gt;String&lt;/span&gt; DATE_FORMAT &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;MM/dd/yyyy hh:mm:ss.S&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: #603000;"&gt;String&lt;/span&gt; NL &lt;span style="color: #808030;"&gt;=&lt;/span&gt; System&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getProperty&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;line.separator&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;static&lt;/span&gt; final &lt;span style="color: #603000;"&gt;String&lt;/span&gt; BASE_SPRING_PACKAGE &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;org.springframework&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private ApplicationContext ac &lt;span style="color: #808030;"&gt;=&lt;/span&gt; null&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private StringBuilder sb &lt;span style="color: #808030;"&gt;=&lt;/span&gt; new StringBuilder&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: #603000;"&gt;String&lt;/span&gt; contextAsciiTree &lt;span style="color: #808030;"&gt;=&lt;/span&gt; null&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;int&lt;/span&gt; currentLevel &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;0&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private boolean showSpringFrameworkBeans &lt;span style="color: #808030;"&gt;=&lt;/span&gt; false&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    private boolean getBeansFromContext &lt;span style="color: #808030;"&gt;=&lt;/span&gt; false&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #3f5fbf;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Construct a spring context viewer &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &lt;/span&gt;&lt;span style="color: #7f9fbf; font-weight: bold;"&gt;@param&lt;/span&gt;&lt;span style="color: #3f5fbf;"&gt; ac ApplicationContext&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &lt;/span&gt;&lt;span style="color: #7f9fbf; font-weight: bold;"&gt;@param&lt;/span&gt;&lt;span style="color: #3f5fbf;"&gt; showSpringFrameworkBeans set to true if you want to see internal spring framework beans&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &lt;/span&gt;&lt;span style="color: #7f9fbf; font-weight: bold;"&gt;@param&lt;/span&gt;&lt;span style="color: #3f5fbf;"&gt; getBeansFromContext set to true if you want to get the beans from the context and display more detailed info&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &amp;lt;b&amp;gt;only do this if you know it's ok for your application,&amp;lt;/b&amp;gt; some beans may be lazy init'd which means they will&amp;lt;nr/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* get initialized here which may not be what you want&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;    public ContextViewer&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ApplicationContext ac&lt;span style="color: #808030;"&gt;,&lt;/span&gt; boolean showSpringFrameworkBeans&lt;span style="color: #808030;"&gt;,&lt;/span&gt; boolean getBeansFromContext&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;ac &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getBeansFromContext &lt;span style="color: #808030;"&gt;=&lt;/span&gt; getBeansFromContext&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;contextAsciiTree &lt;span style="color: #808030;"&gt;=&lt;/span&gt; buildContextTree&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #3f5fbf;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Construct a spring context viewer&amp;lt;br/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Does not show internal spring beans&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Does not get beans from context to get more detailed info&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &lt;/span&gt;&lt;span style="color: #7f9fbf; font-weight: bold;"&gt;@param&lt;/span&gt;&lt;span style="color: #3f5fbf;"&gt; ac ApplicationContext&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3f5fbf;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;    public ContextViewer&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ApplicationContext ac&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac&lt;span style="color: #808030;"&gt;,&lt;/span&gt; false&lt;span style="color: #808030;"&gt;,&lt;/span&gt; false&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #808030;"&gt;@&lt;/span&gt;Override&lt;br /&gt;    public &lt;span style="color: #603000;"&gt;String&lt;/span&gt; toString&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; contextAsciiTree&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    private &lt;span style="color: #603000;"&gt;String&lt;/span&gt; buildContextTree&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: dimgrey;"&gt;// create a new StringBuilder&lt;/span&gt;&lt;br /&gt;        sb &lt;span style="color: #808030;"&gt;=&lt;/span&gt; new StringBuilder&lt;span style="color: #808030;"&gt;(&lt;/span&gt;NL&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;=== Spring ApplicationContext Info ===&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;NL&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: dimgrey;"&gt;// check for null&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac &lt;span style="color: #808030;"&gt;=&lt;/span&gt;&lt;span style="color: #808030;"&gt;=&lt;/span&gt; null&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;null context!&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0f69ff;"&gt;\n&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;toString&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: dimgrey;"&gt;// build our list of application contexts&lt;/span&gt;&lt;br /&gt;        List&lt;span style="color: #808030;"&gt;&amp;lt;&lt;/span&gt;ApplicationContext&lt;span style="color: #808030;"&gt;&amp;gt;&lt;/span&gt; appContexts &lt;span style="color: #808030;"&gt;=&lt;/span&gt; new ArrayList&lt;span style="color: #808030;"&gt;&amp;lt;&lt;/span&gt;ApplicationContext&lt;span style="color: #808030;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        appContexts&lt;span style="color: #808030;"&gt;.&lt;/span&gt;add&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        ApplicationContext parent &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getParent&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;while&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;parent &lt;span style="color: #808030;"&gt;!&lt;/span&gt;&lt;span style="color: #808030;"&gt;=&lt;/span&gt; null&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            appContexts&lt;span style="color: #808030;"&gt;.&lt;/span&gt;add&lt;span style="color: #808030;"&gt;(&lt;/span&gt;parent&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            parent &lt;span style="color: #808030;"&gt;=&lt;/span&gt; parent&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getParent&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: dimgrey;"&gt;// reverse the list to get top node first&lt;/span&gt;&lt;br /&gt;        Collections&lt;span style="color: #808030;"&gt;.&lt;/span&gt;reverse&lt;span style="color: #808030;"&gt;(&lt;/span&gt;appContexts&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: dimgrey;"&gt;// build the ascii context tree&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;int&lt;/span&gt; level &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;0&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;ApplicationContext ctx &lt;span style="color: purple;"&gt;:&lt;/span&gt; appContexts&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            currentLevel &lt;span style="color: #808030;"&gt;=&lt;/span&gt; level&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            buildContext&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ctx&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            level&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;======================================&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;NL&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;toString&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; buildContext&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ApplicationContext ac&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac &lt;span style="color: #808030;"&gt;=&lt;/span&gt;&lt;span style="color: #808030;"&gt;=&lt;/span&gt; null&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            buildContentNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;null context!&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #603000;"&gt;String&lt;/span&gt; displayName &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getDisplayName&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #603000;"&gt;String&lt;/span&gt; id &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getId&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #603000;"&gt;String&lt;/span&gt; classloader &lt;span style="color: #808030;"&gt;=&lt;/span&gt; shorten&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getClass&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getClassLoader&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #603000;"&gt;String&lt;/span&gt; identityHashCode &lt;span style="color: #808030;"&gt;=&lt;/span&gt; Integer&lt;span style="color: #808030;"&gt;.&lt;/span&gt;toHexString&lt;span style="color: #808030;"&gt;(&lt;/span&gt;System&lt;span style="color: #808030;"&gt;.&lt;/span&gt;identityHashCode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        Date startupDate &lt;span style="color: #808030;"&gt;=&lt;/span&gt; new Date&lt;span style="color: #808030;"&gt;(&lt;/span&gt;ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getStartupDate&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        SimpleDateFormat sdf &lt;span style="color: #808030;"&gt;=&lt;/span&gt; new SimpleDateFormat&lt;span style="color: #808030;"&gt;(&lt;/span&gt;DATE_FORMAT&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        buildContentNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt; &lt;span style="color: #808030;"&gt;+&lt;/span&gt; displayName &lt;span style="color: #808030;"&gt;+&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;startupDate&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; sdf&lt;span style="color: #808030;"&gt;.&lt;/span&gt;format&lt;span style="color: #808030;"&gt;(&lt;/span&gt;startupDate&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;id&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; id&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;identityHashCode&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; identityHashCode&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;classloader&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; classloader&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        buildContentNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;beans&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #603000;"&gt;String&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt; beanDefs &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getBeanDefinitionNames&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #603000;"&gt;String&lt;/span&gt; b &lt;span style="color: purple;"&gt;:&lt;/span&gt; beanDefs&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #603000;"&gt;String&lt;/span&gt; type &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getType&lt;span style="color: #808030;"&gt;(&lt;/span&gt;b&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: #808030;"&gt;+&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;showSpringFrameworkBeans &lt;span style="color: #808030;"&gt;=&lt;/span&gt;&lt;span style="color: #808030;"&gt;=&lt;/span&gt; false&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;b&lt;span style="color: #808030;"&gt;.&lt;/span&gt;contains&lt;span style="color: #808030;"&gt;(&lt;/span&gt;BASE_SPRING_PACKAGE&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: #808030;"&gt;|&lt;/span&gt;&lt;span style="color: #808030;"&gt;|&lt;/span&gt; type&lt;span style="color: #808030;"&gt;.&lt;/span&gt;contains&lt;span style="color: #808030;"&gt;(&lt;/span&gt;BASE_SPRING_PACKAGE&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: maroon; font-weight: bold;"&gt;continue&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;            buildContentNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;b&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;prototype&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;isPrototype&lt;span style="color: #808030;"&gt;(&lt;/span&gt;b&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;singleton&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;isSingleton&lt;span style="color: #808030;"&gt;(&lt;/span&gt;b&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;type&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; type&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;getBeansFromContext&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;                try &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;                    Object bean &lt;span style="color: #808030;"&gt;=&lt;/span&gt; ac&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getBean&lt;span style="color: #808030;"&gt;(&lt;/span&gt;b&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #603000;"&gt;String&lt;/span&gt; beanIdentityHashCode &lt;span style="color: #808030;"&gt;=&lt;/span&gt; Integer&lt;span style="color: #808030;"&gt;.&lt;/span&gt;toHexString&lt;span style="color: #808030;"&gt;(&lt;/span&gt;System&lt;span style="color: #808030;"&gt;.&lt;/span&gt;identityHashCode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;bean&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                    buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;identityHashCode&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; beanIdentityHashCode&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                    buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;class&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; bean&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getClass&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                    buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;classloader&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; bean&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getClass&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;getClassLoader&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: purple;"&gt;}&lt;/span&gt; catch &lt;span style="color: #808030;"&gt;(&lt;/span&gt;Throwable e&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;                    buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;error getting bean&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; e&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;            currentLevel&lt;span style="color: #808030;"&gt;-&lt;/span&gt;&lt;span style="color: #808030;"&gt;-&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;NL&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; buildContentNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #603000;"&gt;String&lt;/span&gt; s&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        buildIndent&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;CONTENT_NODE&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;s&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;NL&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        currentLevel&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; buildDataNode&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #603000;"&gt;String&lt;/span&gt; name&lt;span style="color: #808030;"&gt;,&lt;/span&gt; Object value&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        buildIndent&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;DATA_NODE&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;name&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;: &lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        value &lt;span style="color: #808030;"&gt;=&lt;/span&gt; value &lt;span style="color: #808030;"&gt;+&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        value &lt;span style="color: #808030;"&gt;=&lt;/span&gt; shorten&lt;span style="color: #808030;"&gt;(&lt;/span&gt;value&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;value&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;NL&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    private &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; buildIndent&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;currentLevel &lt;span style="color: #808030;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #008c00;"&gt;0&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;int&lt;/span&gt; i &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: #008c00;"&gt;0&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt; i &lt;span style="color: #808030;"&gt;&amp;lt;&lt;/span&gt; currentLevel&lt;span style="color: purple;"&gt;;&lt;/span&gt; i&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            sb&lt;span style="color: #808030;"&gt;.&lt;/span&gt;append&lt;span style="color: #808030;"&gt;(&lt;/span&gt;INDENT&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    private &lt;span style="color: #603000;"&gt;String&lt;/span&gt; shorten&lt;span style="color: #808030;"&gt;(&lt;/span&gt;Object in&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #603000;"&gt;String&lt;/span&gt; out &lt;span style="color: #808030;"&gt;=&lt;/span&gt; in &lt;span style="color: #808030;"&gt;+&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;out&lt;span style="color: #808030;"&gt;.&lt;/span&gt;length&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: #808030;"&gt;&amp;gt;&lt;/span&gt; MAX_LEN&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            out &lt;span style="color: #808030;"&gt;=&lt;/span&gt; out&lt;span style="color: #808030;"&gt;.&lt;/span&gt;substring&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #008c00;"&gt;0&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; MAX_LEN&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: #808030;"&gt;+&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;...&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;        out &lt;span style="color: #808030;"&gt;=&lt;/span&gt; out&lt;span style="color: #808030;"&gt;.&lt;/span&gt;replace&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0f69ff;"&gt;\n&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        out &lt;span style="color: #808030;"&gt;=&lt;/span&gt; out&lt;span style="color: #808030;"&gt;.&lt;/span&gt;replace&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0f69ff;"&gt;\r&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; &lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; out&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-3408752135739414319?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/3408752135739414319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=3408752135739414319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3408752135739414319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3408752135739414319'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/spring-context-viewer.html' title='Spring context viewer'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-8193459024523736427</id><published>2011-12-11T12:49:00.001-08:00</published><updated>2011-12-11T12:53:39.991-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>So Android was kind of an accident?</title><content type='html'>So in the latest hacker news there is a really interesting article about how Google acquired the base of Android from a Palo Alto startup. I had assumed that Google had carefully engineered Android as a natural evolution of their need to grow the mobile space into a platform for their advertising. But it seems, like always, the real world has a lot to do with chance and unforeseen consequences.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nikcub.appspot.com/posts/google-android-the-accidental-empire"&gt;http://nikcub.appspot.com/posts/google-android-the-accidental-empire&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-8193459024523736427?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/8193459024523736427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=8193459024523736427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/8193459024523736427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/8193459024523736427'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/so-android-was-kind-of-accident.html' title='So Android was kind of an accident?'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-3725592439407723919</id><published>2011-12-07T18:26:00.001-08:00</published><updated>2011-12-07T18:32:06.256-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='load'/><category scheme='http://www.blogger.com/atom/ns#' term='jmeter'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Blazemeter is JMeter in the cloud</title><content type='html'>From the "why didn't I think of this" department. These guys took JMeter, the ubiquitous Java test tool, and put it in the cloud. When I have used JMeter before that was definitely a pain point, setting up all the distributed JMeter instances (which, I think used RMI to communicate which is always fun).&lt;br /&gt;&lt;br /&gt;I just wonder how useful this is for QA testing though, since most folks have their QA instance internal instead of publicly accessible.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.datamation.com/open-source/blazemeter-brings-apache-jmeter-to-cloud.html"&gt;http://www.datamation.com/open-source/blazemeter-brings-apache-jmeter-to-cloud.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I wonder what other open source tools are being "cloud-ified"?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-3725592439407723919?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/3725592439407723919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=3725592439407723919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3725592439407723919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3725592439407723919'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/blazemeter-is-jmeter-in-cloud.html' title='Blazemeter is JMeter in the cloud'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-7617890056513811873</id><published>2011-12-07T05:36:00.001-08:00</published><updated>2011-12-07T05:51:50.415-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openmeetings'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='webex'/><category scheme='http://www.blogger.com/atom/ns#' term='openlazlo'/><title type='text'>Tired of paying WebEx, then try OpenMeetings</title><content type='html'>OpenMeetings is a nice project, available to download and run yourself (free and open source) or they have a hosted service. Not all of the WebEx features but an impressive feature set nonetheless. They are incubating at Apache too so that's nice.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/openmeetings/"&gt;http://code.google.com/p/openmeetings/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-7617890056513811873?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/7617890056513811873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=7617890056513811873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/7617890056513811873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/7617890056513811873'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/tired-of-paying-webex-then-try.html' title='Tired of paying WebEx, then try OpenMeetings'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-20091405886332971</id><published>2011-12-06T04:32:00.001-08:00</published><updated>2011-12-07T05:52:04.839-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Forget agile, try Defect Driven Design (D3)</title><content type='html'>This is hilarious! D3 is sweeping the development world!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.java.net/blog/kcpeppe/archive/2011/11/29/defect-driven-design-makes-comeback"&gt;http://weblogs.java.net/blog/kcpeppe/archive/2011/11/29/defect-driven-design-makes-comeback&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-20091405886332971?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/20091405886332971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=20091405886332971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/20091405886332971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/20091405886332971'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/forget-agile-try-defect-driven-design.html' title='Forget agile, try Defect Driven Design (D3)'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-4198508323366049010</id><published>2011-12-05T16:50:00.001-08:00</published><updated>2011-12-07T05:52:19.108-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='bitnami'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>BitNami Tomcat stack</title><content type='html'>Ok, so it's been a while since I used a BitNami stack - I think I last used them to setup a Wordpress stack or some other PHP thingy. But since I'm mainly a Java guy I was happy to see that they have a nice Tomcat stack (either 6 or 7) + MySQL. You can pick from the usual native installers or VMWare images or EC2 AMIs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bitnami.org/stack/tomcatstack"&gt;http://bitnami.org/stack/tomcatstack&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-4198508323366049010?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/4198508323366049010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=4198508323366049010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/4198508323366049010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/4198508323366049010'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/bitnami-tomcat-stack.html' title='BitNami Tomcat stack'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-3295264758487032336</id><published>2011-12-04T12:12:00.001-08:00</published><updated>2011-12-07T05:52:34.934-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='sas'/><category scheme='http://www.blogger.com/atom/ns#' term='webapp'/><title type='text'>The Twelve-Factor App is a must read if you are writing software as a service</title><content type='html'>This is a really powerful article. Boils down to 12 principle the best practices for building scalable, testable and reliable web apps. The goals are in the introduction but are worth repeating:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use &lt;b&gt;declarative&lt;/b&gt; formats for setup automation, to minimize time and cost for new developers joining the project;&lt;/li&gt;&lt;li&gt;Have a &lt;b&gt;clean contract&lt;/b&gt; with the underlying operating system, offering &lt;b&gt;maximum portability&lt;/b&gt; between execution environments;&lt;/li&gt;&lt;li&gt;Are suitable for &lt;b&gt;deployment&lt;/b&gt; on modern &lt;b&gt;cloud platforms&lt;/b&gt;, obviating the need for servers and systems administration;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Minimize divergence&lt;/b&gt; between development and production, enabling &lt;b&gt;continuous deployment&lt;/b&gt; for maximum agility;&lt;/li&gt;&lt;li&gt;And can &lt;b&gt;scale up&lt;/b&gt; without significant changes to tooling, architecture, or development practices.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Read the full article here:&lt;a href="http://www.12factor.net/"&gt; http://www.12factor.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-3295264758487032336?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/3295264758487032336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=3295264758487032336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3295264758487032336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3295264758487032336'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/twelve-factor-app-is-must-read-if-you.html' title='The Twelve-Factor App is a must read if you are writing software as a service'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-3513204285359253363</id><published>2011-12-03T12:24:00.001-08:00</published><updated>2011-12-03T12:54:09.414-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='active directory'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='encryption type'/><category scheme='http://www.blogger.com/atom/ns#' term='kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Java and Kerberos (krb5.conf)</title><content type='html'>I had an interesting situation the other day where I needed to restrict the encryption types used in a Java webapp that authenticated via Kerberos. This is pretty common in that Kerberos is the default authentication protocol for Windows 2000 and onwards.&lt;br /&gt;&lt;br /&gt;Now Kerberos and Active Directory are huge topics so I'm only going to focus on one thing that tripped me up, namely, where is the krb5.conf file for a Java application and what in the world can you use it for. Well it turns out the krb5.conf is a very useful file if you need to tweak things. Here is how you tell Java where your krb5.conf file is:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;-Djava.security.krb5.conf=/path/to/your/krb5.conf&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Now you need to make sure that you aren't setting either of these parameters or your krb5.conf file will be ignored:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;-Djava.security.krb5.realm&lt;/code&gt;&lt;br /&gt;&lt;code&gt;-Djava.security.krb5.kdc&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So inside your krb5.conf file, you can set your realm &amp;amp; kdc (key distribution center), your default realm and the default encryption types. Different versions of Windows Domain Controllers differ in the encryption types they support so you may need to tweak the following lines (they may have different types in your file, depending on Java version):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;default_tkt_enctypes = aes128-cts des3-cbc-sha1 rc4-hmacdes-cbc-md5 des-cbc-crc&lt;br /&gt;default_tgs_enctypes = aes128-cts des3-cbc-sha1 rc4-hmacdes-cbc-md5 des-cbc-crc&lt;br /&gt;permitted_enctypes = aes128-cts des3-cbc-sha1 rc4-hmac des-cbc-md5des-cbc-crc&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;The following links are quite helpful:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/jgss/jgss-features.html"&gt;Java6 security tech note - new features&lt;/a&gt;&lt;br /&gt;&lt;a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/jgss/tutorials/Troubleshooting.html"&gt;Java security tech note - troubleshooting&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Kerberos_%28protocol%29"&gt;Wikipedia - Kerberos &lt;/a&gt;&lt;br /&gt;&lt;a href="http://social.technet.microsoft.com/Forums/en-US/winserversecurity/thread/ecf15eb9-26cf-483b-b1e3-1b1c7e4901e8/"&gt;Forum posting for encryption type difference between Windows Server 2003 and 2008&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-3513204285359253363?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/3513204285359253363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=3513204285359253363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3513204285359253363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3513204285359253363'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/java-and-kerberos-krb5conf.html' title='Java and Kerberos (krb5.conf)'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-1180936435955069167</id><published>2011-12-03T11:44:00.001-08:00</published><updated>2011-12-03T11:59:13.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Great introduction to setting up a working python development environment</title><content type='html'>Best overall introduction to setting up your python work environment I have seen. Really good practical info on packaging and dependecy management (virtualenv, pip), the different python versions and important frameworks (django, fabric, flask, scipy).&lt;br /&gt;&lt;br /&gt;For Java folks, this is the equivalent of telling a new Java programmer about Maven, Ant, Spring, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mirnazim.org/writings/python-ecosystem-introduction/"&gt;http://mirnazim.org/writings/python-ecosystem-introduction/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-1180936435955069167?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/1180936435955069167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=1180936435955069167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/1180936435955069167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/1180936435955069167'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2011/12/great-introduction-to-setting-up.html' title='Great introduction to setting up a working python development environment'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-4975083838095732193</id><published>2007-01-12T15:55:00.000-08:00</published><updated>2007-01-12T16:05:26.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>SOLR</title><content type='html'>Wow !&lt;br /&gt;&lt;br /&gt;If you have worked with Lucene, then you owe it to yourself to check out &lt;a href="http://incubator.apache.org/solr/"&gt;SOLR&lt;/a&gt;. It's just about to graduate to a full fledged apache project and it's a doozy. Basically take Lucene, add a REST'ful interface on top, basic web administration and goodies like replication &amp;amp; caching. What makes this cool is it is usable by both Java and non-Java tools. So you can run SOLR for your search engine but have a &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; based front end.  Did I mention it powers the search for some major sites - like shopper.com and was donated by CNET.&lt;br /&gt;&lt;br /&gt;Just post xml docs following a dead simple format to SOLR and it takes care of indexing them. Post another xml doc to query it and it shoots you back the search results.&lt;br /&gt;&lt;br /&gt;I'm working on scaling up &lt;a href="http://www.getlocalbiz.com/"&gt;www.getlocalbiz.com&lt;/a&gt; and SOLR will definitely be a part of it (we are already using Lucene for search)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-4975083838095732193?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/4975083838095732193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=4975083838095732193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/4975083838095732193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/4975083838095732193'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2007/01/solr.html' title='SOLR'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-7811685231093432003</id><published>2007-01-07T04:54:00.000-08:00</published><updated>2011-12-03T11:59:29.738-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Mochislide</title><content type='html'>Ok, here's how to do a simple slideshow with fading images in mochkit. Simple and powerful, Lord how I love mochikit ! Example is &lt;a href="http://rlawson.freeshell.org/mochislide.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var images = new Array();&lt;br /&gt;// Set up your images here &lt;br /&gt;images[0]="images/deedee.gif";&lt;br /&gt;images[1]="images/dexter.jpg";&lt;br /&gt;&lt;br /&gt;var imageObjs = new Array(); &lt;br /&gt;&lt;br /&gt;var currentIdx = 0;&lt;br /&gt;&lt;br /&gt;// preload images&lt;br /&gt;for(idx in images){&lt;br /&gt;    var tmp = new Image();&lt;br /&gt;    var imageName = images[idx];&lt;br /&gt;    tmp.src = imageName;&lt;br /&gt;    imageObjs[idx] = tmp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// start interval times&lt;br /&gt;var slideInterval = setInterval('onInterval()', 5000); &lt;br /&gt;&lt;br /&gt;function onInterval(){&lt;br /&gt;    // increment image index and reset if necessary&lt;br /&gt;    currentIdx = currentIdx + 1;&lt;br /&gt;    if(currentIdx &amp;gt;= images.length){&lt;br /&gt;        currentIdx = 0;&lt;br /&gt;    }&lt;br /&gt;    // fade out existing image&lt;br /&gt;    // and pull in next image&lt;br /&gt;    fade("slideshow", {"to" : "0.1", "duration" : "0.4", afterFinish: function () {&lt;br /&gt;    $("slideshow").src = imageObjs[currentIdx].src;&lt;br /&gt;    appear("slideshow", {"duration" : "0.4"});&lt;br /&gt;    }});&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-7811685231093432003?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/7811685231093432003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=7811685231093432003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/7811685231093432003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/7811685231093432003'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2007/01/mochislide.html' title='Mochislide'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-7866282800321514864</id><published>2006-12-17T14:47:00.000-08:00</published><updated>2006-12-17T14:56:24.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Image fade with MochiKit</title><content type='html'>MochiKit rocks. I needed to add an image fade for a &lt;a href="http://www.getlocalbiz.com"&gt;site&lt;/a&gt; I am revamping and it was suprisingly easy using Mochikit. Go &lt;a href="http://rlawson.freeshell.org/mochifade.html"&gt;here&lt;/a&gt; for an example.  Here's the relevant code&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: courier new;" id="line16"&gt;var deedee = new Image();&lt;br /&gt;deedee.src = 'images/deedee.gif';&lt;br /&gt;var dexter = new Image();&lt;br /&gt;dexter.src = 'images/dexter.jpg';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function onImageMouseover(){&lt;br /&gt;fade("bigPic", {"to" : "0.1", "duration" : "0.4", &lt;br /&gt;"queue" : "break", afterFinish: function () {&lt;br /&gt;$("bigPic").src = dexter.src;&lt;br /&gt;appear('bigPic', {"duration" : "0.4", "queue" : "break"});&lt;br /&gt;}});&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onImageMouseout(){&lt;br /&gt;fade("bigPic", {"to" : "0.1", "duration" : "0.4", &lt;br /&gt;"queue" : "break", afterFinish: function () {&lt;br /&gt;$("bigPic").src = deedee.src;&lt;br /&gt;appear('bigPic', {"duration" : "0.4", "queue" : "break"});&lt;br /&gt;}});&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-7866282800321514864?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/7866282800321514864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=7866282800321514864' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/7866282800321514864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/7866282800321514864'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2006/12/image-fade-with-mochikit.html' title='Image fade with MochiKit'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2824232686066087188.post-3511389739108202219</id><published>2006-12-02T13:37:00.000-08:00</published><updated>2011-12-07T05:51:24.749-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Insanely Great</title><content type='html'>I've been reading Stephen Levy's book about the rise of the Macintosh - Insanely Great. It's a really good read if a little dated. I still remember that tingly feeling when I first saw a Mac Plus and it really was insanely great for it's time. We owe a lot to the Mac and the emphasis on instant usability and intuitive interfaces is something we would do well to emulate in our fancy Web 2.0 interfaces.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2824232686066087188-3511389739108202219?l=tenminuterule.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tenminuterule.blogspot.com/feeds/3511389739108202219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2824232686066087188&amp;postID=3511389739108202219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3511389739108202219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2824232686066087188/posts/default/3511389739108202219'/><link rel='alternate' type='text/html' href='http://tenminuterule.blogspot.com/2006/12/insanely-great.html' title='Insanely Great'/><author><name>Richard Lawson</name><uri>http://www.blogger.com/profile/12203081955707902317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
