<?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-1383695822029623916</id><updated>2012-01-20T00:40:06.401-05:00</updated><category term='mobile'/><category term='logging'/><category term='Tomcat'/><category term='hibernate'/><category term='blackberry'/><category term='NESS'/><category term='tools'/><category term='javascript'/><category term='groovy'/><category term='security'/><category term='maven'/><category term='Spring'/><category term='applet'/><category term='cloud'/><category term='Java'/><category term='review'/><category term='J2EE'/><category term='database'/><title type='text'>Chris Wong's Development Blog</title><subtitle type='html'>This is a development-focused blog covering BlackBerry and Java software development.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-3394294205338819158</id><published>2012-01-09T22:56:00.001-05:00</published><updated>2012-01-09T23:07:05.045-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>No more cookies for you, says Facebook</title><summary type='text'>The Facebook platform offers a great deal of functionality, and I have been using it recently for user authentication and management for a web application. Last December, Facebook implemented their mandatory migration to OAuth 2.0, causing breaking changes for those of us naïve enough not to monitor their blog. As part of this migration, they changed both their cookie format and policy, which </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/3394294205338819158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2012/01/no-more-cookies-for-you-says-facebook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3394294205338819158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3394294205338819158'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2012/01/no-more-cookies-for-you-says-facebook.html' title='No more cookies for you, says Facebook'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-600187818552366291</id><published>2011-12-22T23:20:00.004-05:00</published><updated>2011-12-23T08:38:35.977-05:00</updated><title type='text'>Do you like your daily Scrum?</title><summary type='text'>Over the years, I've attended my fair share of meetings and worked in a couple of places that are sort of "agile". Naturally, I have witnessed some unproductive meetings. It seems to me that the daily scrum -- or daily standup -- are disproportionately dysfunctional. This makes me wonder if there are truly fans of the daily scrum. Consider the following scenes of dysfunction. Have you seen these?</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/600187818552366291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/12/do-you-like-your-daily-scrum.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/600187818552366291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/600187818552366291'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/12/do-you-like-your-daily-scrum.html' title='Do you like your daily Scrum?'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-2068683658511989206</id><published>2011-12-05T00:14:00.001-05:00</published><updated>2011-12-05T00:18:50.244-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Reconsidering Java cloud hosting with PaaS</title><summary type='text'>I have been looking into Java cloud hosting for my Groovy on Grails application, and I am quite pleased at what has been happening in this space. I last explored cloud hosting a couple of years ago. By contrast, today's PaaS (Platform as a Service) options look quite promising, particularly Cloud Foundry and Jelastic.    Then -- and now -- Amazon Web Service (AWS) was the big IaaS (Infrastructure</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2068683658511989206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/12/reconsidering-cloud.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2068683658511989206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2068683658511989206'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/12/reconsidering-cloud.html' title='Reconsidering Java cloud hosting with PaaS'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-8273164029817237821</id><published>2011-11-28T23:17:00.001-05:00</published><updated>2011-11-28T23:17:19.726-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Tech conferences on the cheap</title><summary type='text'>I like attending developer conferences. Developer-focused conferences bring a huge breadth of thought and concepts, an intoxicating  buffet of technology and learning that widen my knowledge beyond my current job's focus. Alas, technology-focused conferences have not brought the revolution in conference prices that technology has accomplished in other areas. That is, tech conferences remain very </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/8273164029817237821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/11/tech-conferences-on-cheap.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8273164029817237821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8273164029817237821'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/11/tech-conferences-on-cheap.html' title='Tech conferences on the cheap'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-4167472771875952343</id><published>2011-10-22T02:11:00.001-04:00</published><updated>2011-10-22T02:12:52.936-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Twilight of BlackBerry Java</title><summary type='text'>I have mentioned before in this blog that I develop apps for the BlackBerry as a hobby. For all my apps so far, I used RIM's BlackBerry Java SDK, which has been their the "official" way to develop apps. I just learned that by next year all my apps will be obsolete. I am not exactly overjoyed. Here are my thoughts.    The big developer's conference for BlackBerry developers is RIM's BlackBerry </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4167472771875952343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/10/twilight-of-blackberry-java.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4167472771875952343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4167472771875952343'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/10/twilight-of-blackberry-java.html' title='Twilight of BlackBerry Java'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-2543731407908576740</id><published>2011-09-27T23:04:00.001-04:00</published><updated>2011-09-27T23:04:39.144-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='NESS'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>From NoSQL to NoServer</title><summary type='text'>I attended an interesting presentation recently on CouchDB, a document store database that helped make the term NoSQL famous. One of the interesting ideas discussed is the idea of CouchApps: pure JavaScript/HTML applications working with and interacting exclusively with CouchDB. So not only do you not need a relational database, you can dump your application server too.     I think this is a </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2543731407908576740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/09/from-nosql-to-noserver.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2543731407908576740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2543731407908576740'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/09/from-nosql-to-noserver.html' title='From NoSQL to NoServer'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-4109051998621950505</id><published>2011-08-03T23:47:00.001-04:00</published><updated>2011-08-03T23:47:18.480-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Reminder: hashcode is not a key</title><summary type='text'>I just wanted to share a reminder not to treat Object.hashCode() as a key. This seems very basic, but I have seen experienced developers get tripped up over this method. A number of people seem to think that hashCode can be relied on to return unique integers for each object value, especially for strings. Oops.    For example, I saw someone write code that logically works like this:             1</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4109051998621950505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/08/reminder-hashcode-is-not-key.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4109051998621950505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4109051998621950505'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/08/reminder-hashcode-is-not-key.html' title='Reminder: hashcode is not a key'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-466375015825508208</id><published>2011-08-03T23:19:00.001-04:00</published><updated>2011-08-03T23:21:04.783-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>My latest BlackBerry app: TempoBeat</title><summary type='text'>  My latest BlackBerry app is out. Presenting: TempoBeat, an electronic metronome app. I paid quite a bit of attention to the user interface with this app, since I wanted something that works well with both a keyboard and a touchscreen. The controls can be manipulated by touch, but I also included a number of keyboard shortcuts for non-touch BlackBerry model. It has a bunch of features or </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/466375015825508208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/08/my-latest-blackberry-app-tempobeat.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/466375015825508208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/466375015825508208'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/08/my-latest-blackberry-app-tempobeat.html' title='My latest BlackBerry app: TempoBeat'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-MJBEzxSlKAc/TjoP3CY_M4I/AAAAAAAAAB0/GVpPVcJu8GI/s72-c/main_thumb.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-9127645455220606374</id><published>2011-05-24T00:08:00.001-04:00</published><updated>2011-05-24T23:14:47.231-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>My blog will make you stupid</title><summary type='text'>Apparently, my blog will make you stupid. It's no good fleeing to another blog, though: they all make you stupid. That is, if you agree with Nicholas Carr's book, "The Shallows: What the Internet is Doing to Our Brains". The thesis of the book is that our use of the Internet is changing our brains, affecting deep learning, long term memory and our ability to focus.   I first heard about this book</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/9127645455220606374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/05/my-blog-will-make-you-stupid.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/9127645455220606374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/9127645455220606374'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/05/my-blog-will-make-you-stupid.html' title='My blog will make you stupid'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-2919990633176052476</id><published>2011-04-14T00:00:00.001-04:00</published><updated>2011-04-14T07:43:40.237-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>NoSQL: triumph of application over data</title><summary type='text'>NoSQL databases are the rage now, aren’t they? Not too long ago, NEJUG hosted a presentation by Tim Berglund called "NoSQL Smackdown." Before giving his tour of several NoSQL databases, Tim tried to give his definition of "NoSQL." After showing the difficulties of defining NoSQL as a series of negatives (no SQL, no relations, no transactions), he merely settled on a vague definition. Basically, </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2919990633176052476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/04/nosql-triumph-of-application-over-data.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2919990633176052476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2919990633176052476'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/04/nosql-triumph-of-application-over-data.html' title='NoSQL: triumph of application over data'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-1474728454177118405</id><published>2011-02-24T23:54:00.001-05:00</published><updated>2011-02-25T00:18:55.094-05:00</updated><title type='text'>The pain of enterprise Java development</title><summary type='text'>Java enterprise development can be painful. Now, it's true that Java is not as concise as some other languages. It's also true that the Java ecosystem is full of famously complex tools and frameworks such old-style EJBs, JSF and Maven. Still, I believe that for us Java enterprise developers, much of the pain is self-inflicted. Let me suggest a few things we do to ourselves, often unnecessarily. </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/1474728454177118405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/02/pain-of-enterprise-java-development.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/1474728454177118405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/1474728454177118405'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/02/pain-of-enterprise-java-development.html' title='The pain of enterprise Java development'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-8407444035987719658</id><published>2011-01-25T23:19:00.002-05:00</published><updated>2011-02-24T22:12:42.276-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>The trouble with being conventional</title><summary type='text'>"Convention over configuration" is a popular paradigm in developer circles these days. Instead of explicit instructions over every detail or action, you would follow the framework's conventions and get most of the work done implicitly and for free. Ruby on Rails made this idea really take off, and we see it in action in many frameworks. The popular build tool Maven also adopts convention over </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/8407444035987719658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/01/trouble-with-being-conventional.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8407444035987719658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8407444035987719658'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/01/trouble-with-being-conventional.html' title='The trouble with being conventional'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-6417873894876190629</id><published>2011-01-18T23:54:00.001-05:00</published><updated>2011-01-19T00:00:56.654-05:00</updated><title type='text'>Chasing abstractions</title><summary type='text'>We Java enterprise developers love abstractions in code. I suspect the typical software geek comes up with new abstractions more often than he changes his underwear. I admit to writing code with premature abstractions, such as using a strategy pattern where I end up never using a different strategy. We code defensively, afraid that lack of flexibility will hinder future changes. But beyond the </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/6417873894876190629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/01/chasing-abstractions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6417873894876190629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6417873894876190629'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2011/01/chasing-abstractions.html' title='Chasing abstractions'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_iQsFPoDamOY/TR6otXi-kZI/AAAAAAAAABc/w5ihpjCDaeE/s72-c/800px-Cole_Thomas_The_Voyage_of_Life_Youth_1842.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-4259914811724649347</id><published>2010-12-01T22:47:00.000-05:00</published><updated>2010-12-01T22:47:01.511-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>OOPs: mangling your database with objects</title><summary type='text'>A developer once showed me a frightening sight: a page and a half of dense SQL, consisting mostly of join clauses. What was frightening was not so much the performance of this query -- it was a utility query, so the long query time was not important -- but the fact that he was actually proud of that query. How did a production DB schema get into such a state? The problem, in a word, was Hibernate</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4259914811724649347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/12/oops-mangling-your-database-with.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4259914811724649347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4259914811724649347'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/12/oops-mangling-your-database-with.html' title='OOPs: mangling your database with objects'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-931376351365074993</id><published>2010-11-22T01:13:00.007-05:00</published><updated>2010-11-22T09:59:53.089-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>DVCS vs Subversion smackdown, round 3</title><summary type='text'>That title is probably a little pretentious, since the topic of rival version control systems has probably gone a few zillion more rounds than that. The context here is that in a previous blog post I argued that the recent rise of DVCS (Git, Mercurial) is less due to their essential D (distributed) nature, but the accidental weaknesses of Subversion, the dominant centralized VCS. The weaknesses I</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/931376351365074993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/11/dvcs-vs-subversion-smackdown-round-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/931376351365074993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/931376351365074993'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/11/dvcs-vs-subversion-smackdown-round-3.html' title='DVCS vs Subversion smackdown, round 3'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-656030316607298470</id><published>2010-11-16T23:39:00.000-05:00</published><updated>2010-11-16T23:39:27.581-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>I am a Torch bearer</title><summary type='text'>I am a Torch bearer. More specifically, I am now a proud owner of a BlackBerry Torch 9800. This came as a surprise to me, actually, since I had no plans to buy one. The Torch is an AT&amp;T phone: even after unlocking it, the Torch's 3G radio does not work on my T-Mobile network (wrong frequency). I own a Torch because my MissingLight app became a Regional Selection in RIM's 2010 BlackBerry Super </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/656030316607298470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/11/i-am-torch-bearer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/656030316607298470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/656030316607298470'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/11/i-am-torch-bearer.html' title='I am a Torch bearer'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-8613816308503420352</id><published>2010-10-29T23:24:00.001-04:00</published><updated>2010-10-30T12:07:14.786-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Beware the magic flush</title><summary type='text'>It often surprises me what a good Java profiler can tell me about Hibernate performance issues. Recently I was studying a performance issue that seemed straightforward. There were lots of objects, lots of writes and lots of queries. Preliminary profiling showed one particular Hibernate query dominating the operation. That's not surprising, I thought: it's a frequently made query, and it's </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/8613816308503420352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/10/beware-magic-flush.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8613816308503420352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8613816308503420352'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/10/beware-magic-flush.html' title='Beware the magic flush'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-2324350831934108577</id><published>2010-10-29T00:08:00.001-04:00</published><updated>2010-11-22T01:30:06.391-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>DVCS for all the wrong reasons</title><summary type='text'>A lot of virtual ink has been expended arguing the superiority of the distributed version control systems (DVCS) like GIT or Mercurial over Subversion, the dominant open source "traditional" VCS. Representing a substantial paradigm switch, DVCS software is hip and adoption is growing. I will argue that DVCS adoption is driven not by the essential superiority of distributed VCS (the D in DVCS) but</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2324350831934108577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/10/dvcs-for-all-wrong-reasons.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2324350831934108577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2324350831934108577'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/10/dvcs-for-all-wrong-reasons.html' title='DVCS for all the wrong reasons'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-2406196675946401365</id><published>2010-08-25T23:42:00.001-04:00</published><updated>2010-08-25T23:42:57.325-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Why Java needs Oracle</title><summary type='text'>By filing a patent lawsuit against Google over its Java-like implementation, Oracle probably made itself the world's least liked software company. After all, Java itself is an open standard, open source platform that is ill-served by exclusive legal claims, right? Yet perversely, I think this patent lawsuit demonstrates why Java needs Oracle.



The reality is that software patents exist. Neither</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2406196675946401365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/08/why-java-needs-oracle.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2406196675946401365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2406196675946401365'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/08/why-java-needs-oracle.html' title='Why Java needs Oracle'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-3114183588905039471</id><published>2010-08-24T23:20:00.000-04:00</published><updated>2010-08-24T23:20:00.414-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>MissingLight 2.0 for BlackBerry</title><summary type='text'>I released version 2.0 of my MissingLight BlackBerry app a few weeks ago. This blog entry provides the background for this release.


MissingLight was my first app, written to scratch a particular itch. Specifically, I was surprised that my BlackBerry, which blinks its famous LED for incoming SMS, email, voice mails etc, lacked a blinking alert for missed calls. So I wrote an app that provided </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/3114183588905039471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/08/missinglight-20-for-blackberry.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3114183588905039471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3114183588905039471'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/08/missinglight-20-for-blackberry.html' title='MissingLight 2.0 for BlackBerry'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-3380826811977300332</id><published>2010-08-15T23:58:00.002-04:00</published><updated>2010-08-16T00:34:11.607-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>Oracle vs Google: in search of a silver lining on Android</title><summary type='text'>There is little to cheer about when the stewards of two of the most important application platforms in the industry, Oracle of Java and Google of Android, decide to fight it out in the courts. Oracle's lawsuit threatens both platforms: the publicity and "bad guy" image hurts Java, and the legal uncertainty hurts Android. It seems a lose-lose situation, doesn't it? Nevertheless, I still hope for a</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/3380826811977300332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/08/oracle-vs-google-in-search-of-silver.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3380826811977300332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3380826811977300332'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/08/oracle-vs-google-in-search-of-silver.html' title='Oracle vs Google: in search of a silver lining on Android'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-2572763019808953371</id><published>2010-07-26T00:20:00.002-04:00</published><updated>2010-07-26T00:40:20.564-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Why is it so hard to find a Java developer?</title><summary type='text'>It's that time again. My employer needs another Java software engineer. We are looking for someone familiar with the usual enterprise Java stack: Spring, Hibernate, Tomcat. Pretty vanilla, right? So why is it so hard to find one? The problem is not with the frameworks: these are pretty widely used, and lots of people claim familiarity with them. My problem is the same one I've had for years: it's</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2572763019808953371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/07/why-is-it-so-hard-to-find-java.html#comment-form' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2572763019808953371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2572763019808953371'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/07/why-is-it-so-hard-to-find-java.html' title='Why is it so hard to find a Java developer?'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_iQsFPoDamOY/TE0Ig9nyb9I/AAAAAAAAABI/sJCeVqFZXCM/s72-c/jobgraph.png' height='72' width='72'/><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-6197072576099970871</id><published>2010-07-20T01:02:00.000-04:00</published><updated>2010-07-20T01:02:26.711-04:00</updated><title type='text'>The rise of the cattle office</title><summary type='text'>When I blogged about the office environment, I contrasted private offices with cubicles. Whatever their relative advantages, the latter suffered from noise, distraction and lack of privacy. Not long afterward, a colleague pointed me to Martin Fowler's article on team rooms that took these disadvantages and multiplied them: 



Guess what this made me think of?

Moo.
 
(Photo credit) 



Why do we</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/6197072576099970871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/07/rise-of-cattle-office.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6197072576099970871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6197072576099970871'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/07/rise-of-cattle-office.html' title='The rise of the cattle office'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_iQsFPoDamOY/TESjFSo8F2I/AAAAAAAAABA/-gtmqt_pPsI/s72-c/teamroom.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-915454417454240672</id><published>2010-07-19T15:02:00.000-04:00</published><updated>2010-07-19T15:02:48.648-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Counting down my life</title><summary type='text'>When I wrote TimeForTea for my BlackBerry, I had in mind a countdown timer to let me know when my tea is ready. As it turns out, a countdown timer has a lot more uses than that. I am indebted to my own customers for for their ideas of additional uses of TimeForTea. With room for 9 preset times, you can do a lot more than timing your tea. Looking over the reviews, I found a whole lot of other </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/915454417454240672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/07/counting-down-my-life.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/915454417454240672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/915454417454240672'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/07/counting-down-my-life.html' title='Counting down my life'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-4014691411745671664</id><published>2010-06-08T00:26:00.001-04:00</published><updated>2010-06-08T00:28:26.582-04:00</updated><title type='text'>Real engineers prefer cubicles</title><summary type='text'>Well, maybe not really, but I could never tell from the work environment of software engineers that I see today.

Jim Showalter recently wrote a blog post called Open Cubicles Must Die ranting against you-know-what. I think he made some interesting points, and it's a post worth reading. Jim is hardly the only person who argue that private offices are more productive, but what I find interesting </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4014691411745671664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/06/real-engineers-prefer-cubicles.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4014691411745671664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4014691411745671664'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/06/real-engineers-prefer-cubicles.html' title='Real engineers prefer cubicles'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-4809791658830354861</id><published>2010-05-08T23:01:00.002-04:00</published><updated>2010-05-08T23:10:58.162-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Tips for less painful webapp development on Tomcat</title><summary type='text'>Here are a few things I do to make my life easier when developing Java webapps deployed on Tomcat. These tips cover:

Rebuilding my application faster
Tomcat configuration options I like to use
Running Tomcat 
Hot deploying of modified code



Building your application quickly

Mainstream IDEs like Eclipse, Netbeans and IntelliJ IDEA compile Java code pretty well. Unfortunately, a nontrivial Java</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4809791658830354861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/05/tips-for-less-painful-webapp.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4809791658830354861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4809791658830354861'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/05/tips-for-less-painful-webapp.html' title='Tips for less painful webapp development on Tomcat'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-5642138560000975236</id><published>2010-03-16T23:37:00.003-04:00</published><updated>2010-03-17T22:07:09.886-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Notes from a BlackBerry Meetup</title><summary type='text'>I went to the first-ever meeting of the New England BlackBerry Developer's group tonight in Cambridge. An official RIM-sponsored group, this Meetup had as speaker Mike Kirkup, Director of Developer Relations at RIM. He covered a number of developer's topics, and his slides will probably be posted on the Meetup page. I won't try to summarize the presentation ("what makes a 'super app' etc"), since</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/5642138560000975236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/03/notes-from-blackberry-meetup.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5642138560000975236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5642138560000975236'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/03/notes-from-blackberry-meetup.html' title='Notes from a BlackBerry Meetup'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-5148311907332200359</id><published>2010-02-24T22:37:00.000-05:00</published><updated>2010-02-24T22:37:07.150-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Don't forget to index your PostgreSQL foreign keys</title><summary type='text'>One thing that surprised me with PostgreSQL after spending a lot of time with MySQL is that setting foreign key constraints do not automatically generate indexes on those columns. PostgreSQL will implicitly generate indexes for primary keys, but not foreign keys. Since those foreign key columns are precisely the ones you tend to use for joins (either explicitly or implicitly by ORMs like </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/5148311907332200359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/02/dont-forget-to-index-your-postgresql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5148311907332200359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5148311907332200359'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/02/dont-forget-to-index-your-postgresql.html' title='Don&apos;t forget to index your PostgreSQL foreign keys'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-4838985752012315435</id><published>2010-02-13T01:15:00.004-05:00</published><updated>2010-02-13T21:31:53.077-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>The language wars and the TIOBE index</title><summary type='text'>Recently, I had a bit of fun by writing a modestly titled blog post arguing in favor of Groovy's adoption over Scala. Among other things, I pointed out that the Indeed.com job trends graphs show much stronger Groovy adoption over Scala. One comment there made the interesting observation that the TIOBE Programming Community Index said precisely the opposite. I did not exactly carry out meticulous </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4838985752012315435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/02/language-wars-and-tiobe-index.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4838985752012315435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4838985752012315435'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/02/language-wars-and-tiobe-index.html' title='The language wars and the TIOBE index'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-7508884246436368941</id><published>2010-02-10T23:51:00.002-05:00</published><updated>2010-02-13T01:17:33.444-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>My Groovy can beat up your Scala</title><summary type='text'>This blog entry is inspired by a blog post I read recently bashing Groovy in favor of Scala. I will opportunistically join in the brawl, contributing my 2 cups of kerosene to the flames by coming out in favor of Groovy.  If you are not interested in the language wars, or if you take this sort of thing way too seriously, feel free to skip this post. 

I like Groovy. At my last job, I used Groovy </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/7508884246436368941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/02/my-groovy-can-beat-up-your-scala.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/7508884246436368941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/7508884246436368941'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/02/my-groovy-can-beat-up-your-scala.html' title='My Groovy can beat up your Scala'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_iQsFPoDamOY/S3OFdyjTa6I/AAAAAAAAAAg/MxbvcPRo0es/s72-c/scalagroovy.png' height='72' width='72'/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-5440078576711836937</id><published>2010-01-25T05:00:00.004-05:00</published><updated>2010-01-25T05:00:04.591-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='NESS'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Let's get rid of middle management</title><summary type='text'>Let's get rid of middle management.

No, not you, boss.

I'm talking about middle management in Java code. At one presentation in the New England Software Symposium in Boston last year, some Java-bashing guy (Stuart Halloway) described Java as the language that invented middle management. You have probably seen them: these classes often end with "Manager.java". I'm wondering whether we really </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/5440078576711836937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/lets-get-rid-of-middle-management.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5440078576711836937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5440078576711836937'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/lets-get-rid-of-middle-management.html' title='Let&apos;s get rid of middle management'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-5453272736076865622</id><published>2010-01-16T23:24:00.001-05:00</published><updated>2010-01-16T23:25:52.399-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>What's new in KBLauncher 1.1.1</title><summary type='text'>I recently released a new version of KBLauncher, my application quick launcher for the BlackBerry. This blog entry serves as my release notes for this app. The rest of you who are here for non-BlackBerry topics can safely move on.



The enhancements in this release come mostly from user feedback. In brief, the enhancements are:
Better default font selection 
Configurable fonts and colors
A new </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/5453272736076865622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/whats-new-in-kblauncher-111.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5453272736076865622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5453272736076865622'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/whats-new-in-kblauncher-111.html' title='What&apos;s new in KBLauncher 1.1.1'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-4195193128935970249</id><published>2010-01-10T23:23:00.000-05:00</published><updated>2010-01-10T23:23:30.490-05:00</updated><title type='text'>On the breadcrumb metaphor</title><summary type='text'>I've heard the term used in UI work: people refer to "breadcrumbs" when they mean a navigation aid that shows UI path used to arrive at a point in the program. This supposedly prevents a user from feeling lost. It could be a trail of screens or dialogs like Options &gt; Advanced Options &gt; Applications. I don't have an objection to that. I do think, on the other hand, that "breadcrumbs" is a pretty </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4195193128935970249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/on-breadcrumb-metaphor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4195193128935970249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4195193128935970249'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/on-breadcrumb-metaphor.html' title='On the breadcrumb metaphor'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-805719974477912566</id><published>2010-01-10T23:06:00.000-05:00</published><updated>2010-01-10T23:06:56.750-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Oops, did you accidentally ship your BlackBerry source code?</title><summary type='text'>If you develop BlackBerry software using RIM's BlackBerry Java plugin for Eclipse and use Subversion for version control, you could end up shipping your source code with your executable if you are not careful. I had hoped this would be solved with the new version (1.1) of the plugin -- still in beta -- but based on my experience with one of the betas this does not appear to be the case.

The </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/805719974477912566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/oops-did-you-accidentally-ship-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/805719974477912566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/805719974477912566'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2010/01/oops-did-you-accidentally-ship-your.html' title='Oops, did you accidentally ship your BlackBerry source code?'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-2015978561613091207</id><published>2009-12-17T23:39:00.002-05:00</published><updated>2009-12-18T00:24:00.058-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><title type='text'>The cloudy future of relational databases</title><summary type='text'>Cloud computing is the big new thing. The fate of the formerly ubiquitous relational database, on the other hand, is uncertain. There are many ways for a developer to deploy his application to the "cloud", whatever that might mean. On the other hand, the various cloud vendors do not necessarily have a database story to tell, or if they do that story isn't necessarily a good one. As a result, </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2015978561613091207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/12/cloudy-future-of-relational-databases.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2015978561613091207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2015978561613091207'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/12/cloudy-future-of-relational-databases.html' title='The cloudy future of relational databases'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-4386058371256642568</id><published>2009-12-09T06:00:00.003-05:00</published><updated>2009-12-09T08:58:08.525-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Hibernate formulas do not like subselects</title><summary type='text'>Hibernate formulas and the subselect fetch strategy are currently incompatible. There is already a bug associated with it: HHH-1400. I am linking the bug at the beginning because blog posts like this have a limited shelf life. If you came across this post from Google, it is possible that this note is already obsoleted by a bug fix. I have little hope of this happening very soon right now, though,</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4386058371256642568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/12/hibernate-formulas-do-not-like.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4386058371256642568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4386058371256642568'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/12/hibernate-formulas-do-not-like.html' title='Hibernate formulas do not like subselects'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-1256286691367092317</id><published>2009-12-03T00:01:00.004-05:00</published><updated>2009-12-06T20:20:03.920-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>BlackBerry development: big things happening</title><summary type='text'>The buzz in mobile development seems to be on other platforms. People outside of the BlackBerry community probably haven't been paying much attention, but there has been some major announcements in the area of BlackBerry development. These announcements, coinciding with the recently concluded BlackBerry Developer Conference, show that RIM is actively responding to its competition on several </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/1256286691367092317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/12/blackberry-development-big-things.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/1256286691367092317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/1256286691367092317'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/12/blackberry-development-big-things.html' title='BlackBerry development: big things happening'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-9192075124444759553</id><published>2009-11-17T23:01:00.000-05:00</published><updated>2009-11-21T19:55:18.414-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>XDepend: managing code complexity</title><summary type='text'>At a NEJUG presentation I attended a while back, the presenter used a vivid metaphor of taming the "complexity dragon", meaning the tendency of a code base to become brittle and complex as it grows in size. This dragon can cripple even competent development teams: productivity plunges because each code change triggers bugs in other obscure parts of the program. That said, the presenter hastened </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/9192075124444759553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/11/xdepend-managing-code-complexity.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/9192075124444759553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/9192075124444759553'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/11/xdepend-managing-code-complexity.html' title='XDepend: managing code complexity'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_iQsFPoDamOY/SwDY_rTGLbI/AAAAAAAAAAM/G2vOqHZhdMY/s72-c/DependencyMatrixSnapshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-6020367990357530975</id><published>2009-11-15T00:03:00.001-05:00</published><updated>2009-11-16T11:00:57.952-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>On conciseness</title><summary type='text'>I meant to write this thought for a while, but a recent blog post about implementing the Quicksort algorithm in Scala finally prompted me to write this. As a refresher, here is pseudocode from the Wikipedia entry on quicksort that illustrates a simple version of the algorithm.

function sort(array) // pseudocode from Wikipedia
    var list less, greater
    if length(array) ≤ 1 return array  
</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/6020367990357530975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/11/on-conciseness.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6020367990357530975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6020367990357530975'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/11/on-conciseness.html' title='On conciseness'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-5666039763085669554</id><published>2009-10-24T01:12:00.003-04:00</published><updated>2009-11-17T21:12:10.726-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Polymorphic one to many relationships in Hibernate</title><summary type='text'>These are some notes on mapping a polymorphic one-to-many relationship in Hibernate. I want to give credit to Clark Updike's blog for providing most of the answers. These notes reflect my own particular bias and needs. I wrote the code samples below in Groovy for ease of prototyping (they actually work). They should be close enough to Java to serve as concise pseudo code, even if you don't know </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/5666039763085669554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/10/polymorphic-one-to-many-relationships.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5666039763085669554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/5666039763085669554'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/10/polymorphic-one-to-many-relationships.html' title='Polymorphic one to many relationships in Hibernate'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-7267563707806380894</id><published>2009-10-12T06:00:00.002-04:00</published><updated>2009-11-17T21:13:28.810-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NESS'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>NESS 2009: Remembering Java platform security</title><summary type='text'>Java platform security is something we normally don't worry about when doing enterprise Java development. Originally designed as a sandbox for applets, Java platform security has evolved into a fine-grained access control architecture for all Java programs. Even so, it remains focused on protecting the host system from the Java application. The Java developer is more concerned about protecting </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/7267563707806380894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/10/ness-2009-remembering-java-platform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/7267563707806380894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/7267563707806380894'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/10/ness-2009-remembering-java-platform.html' title='NESS 2009: Remembering Java platform security'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-898841121144501827</id><published>2009-09-29T23:18:00.002-04:00</published><updated>2009-11-17T21:14:10.708-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NESS'/><title type='text'>NESS 2009: multithreading and the Java memory model</title><summary type='text'>At the New England Software Symposium, I attended Brian Goetz's session called "The Java Memory Model". When I saw the phrase "memory model" in the title I thought it would be about garbage collection, memory allocation and memory types. Instead, it is really about multithreading. The difference is that this presentation focuses on visibility, not locking or atomicity. This is my attempt to </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/898841121144501827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/ness-2009-multithreading-and-java.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/898841121144501827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/898841121144501827'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/ness-2009-multithreading-and-java.html' title='NESS 2009: multithreading and the Java memory model'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-9178796147215834993</id><published>2009-09-24T23:07:00.000-04:00</published><updated>2009-09-24T23:18:05.305-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>On the lightness of Spring</title><summary type='text'>Shortly after I blogged about the direction of Spring, I came across a blog entry asking "Is Spring still lightweight?" The resulting DZone discussion is spirited, but last I checked it nobody actually defined what it means to be lightweight. That seems unfortunate. If the Spring folks are no longer right in their claim to be lightweight, we should at least have a falsifiable proposition. Way </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/9178796147215834993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/on-lightness-of-spring.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/9178796147215834993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/9178796147215834993'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/on-lightness-of-spring.html' title='On the lightness of Spring'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-525598440962013871</id><published>2009-09-23T23:06:00.005-04:00</published><updated>2009-11-17T21:14:29.406-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>KBLauncher for BlackBerry has launched</title><summary type='text'>I released my latest BlackBerry app, KBLauncher, last week. So far, the major BlackBerry blogs that have mentioned KBLauncher are CrackBerry, BerryReview and BlackBerryItalia. I also partnered with BerryReview for a giveaway program. All 50 copies of KBLauncher were snapped up within the half hour. People do love their freebies.

KBLauncher is an app that I have been wanting to write for a long </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/525598440962013871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/kblauncher-for-blackberry-has-launched.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/525598440962013871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/525598440962013871'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/kblauncher-for-blackberry-has-launched.html' title='KBLauncher for BlackBerry has launched'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-8047426145802411788</id><published>2009-09-22T06:00:00.003-04:00</published><updated>2009-11-17T21:15:02.180-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NESS'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>NESS 2009: The Coming Spring</title><summary type='text'>One of the sessions I attended at the recent New England Software Symposium is the one on new features in Spring 3. This covers Spring Core functionality. This session got my attention because the presenter was Craig Walls, who wrote Spring in Action. The main features he covered were:
Spring Expression Language (SpEL)
Spring MVC annotations (@PathVariable, @RequestHeader, @CookieValue, @</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/8047426145802411788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/ness-2009-coming-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8047426145802411788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8047426145802411788'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/ness-2009-coming-spring.html' title='NESS 2009: The Coming Spring'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-6707245071361342817</id><published>2009-09-11T06:00:00.000-04:00</published><updated>2009-09-11T06:00:07.094-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>New BlackBerry app in beta: KBLauncher</title><summary type='text'>My latest BlackBerry app KBLauncher is finally undergoing beta testing. KBLauncher is an application launcher and switcher. My idea is that a keyboard-intensive device like a BlackBerry would have users that prefer to use the keyboard rather than scroll endlessly with the trackball to find an app to launch. Oh, and I think the UI is pretty slick too.

This has taken longer than I expected. Part </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/6707245071361342817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/new-blackberry-app-in-beta-kblauncher.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6707245071361342817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/6707245071361342817'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/new-blackberry-app-in-beta-kblauncher.html' title='New BlackBerry app in beta: KBLauncher'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-4228656105788392469</id><published>2009-09-10T22:36:00.000-04:00</published><updated>2009-09-10T22:36:53.928-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Going to the New England Software Symposium</title><summary type='text'>I will be attending the New England Software Symposium this weekend, and I am really looking forward to it. Unlike most tech conferences I've been to, this one is actually held over a weekend. The advantage to this is that it allows participants -- both attendees and speakers -- to participate without sacrificing productive time. I suspect this made it easier for me to get approval from my boss. </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4228656105788392469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/going-to-new-england-software-symposium.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4228656105788392469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4228656105788392469'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/going-to-new-england-software-symposium.html' title='Going to the New England Software Symposium'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-8354289590620683168</id><published>2009-09-10T08:00:00.001-04:00</published><updated>2009-09-21T00:23:14.963-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>The App World torture continues</title><summary type='text'>I have a handful of BlackBerry apps published on RIM's BlackBerry App World, the "official" app store for BlackBerry phones. Recently, I have been getting emails daily from users who have trouble downloading my applications. The problem is actually with the on-phone App World application, which can get stuck trying to download an application. App World does not make it easy to figure out who to </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/8354289590620683168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/app-world-torture-continues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8354289590620683168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/8354289590620683168'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/app-world-torture-continues.html' title='The App World torture continues'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-3491869372769358702</id><published>2009-09-04T08:00:00.005-04:00</published><updated>2009-09-21T00:22:58.874-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Logging: should I wrap?</title><summary type='text'>Once upon a time, there was a de facto logging standard, log4j. Then Sun decided to confuse matters by introducing another -- and many say inferior -- logging API in JDK 1.4. Some people responded with Jakarta Commons Logging (JCL), a wrapper that abstracts away these two APIs. Some other people decided that JCL was awful, and wrote SLF4J, a wrapper that abstracts away the first two APIs and JCL.</summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/3491869372769358702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/logging-should-i-wrap.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3491869372769358702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/3491869372769358702'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/09/logging-should-i-wrap.html' title='Logging: should I wrap?'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-7154926693669187614</id><published>2009-08-31T22:40:00.003-04:00</published><updated>2009-09-21T00:22:24.658-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='applet'/><title type='text'>The invisible applet</title><summary type='text'>How about deploying a Java applet that you can't see?

It's no secret that Java has not been successful as a client-side platform. We often use HTML/Ajax or Flash/Flex on the browser and Java on the server. Maintaining 2 distinct platforms has a major disadvantage: it's hard to share code.


Imagine this scenario: you have built a beautiful UI for the browser, and like any respectable shop you </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/7154926693669187614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/08/invisible-applet.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/7154926693669187614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/7154926693669187614'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/08/invisible-applet.html' title='The invisible applet'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1383695822029623916.post-4773983123127828159</id><published>2009-08-23T12:49:00.004-04:00</published><updated>2009-08-23T23:53:26.718-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><title type='text'>Why BlackBerry?</title><summary type='text'>As I said before, I write BlackBerry software. It's certainly not the most trendy platform. At a gathering of mobile developers, I saw from a show of hands that attention is going to more glamorous platforms like the iPhone and Android. So why BlackBerry? BlackBerry fans can articulate numerous reasons why they like their phones. As a developer, I have my own reasons, some of them quite </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/4773983123127828159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/08/why-blackberry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4773983123127828159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/4773983123127828159'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/08/why-blackberry.html' title='Why BlackBerry?'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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-1383695822029623916.post-2663424621477888139</id><published>2009-08-21T22:30:00.003-04:00</published><updated>2009-08-22T00:54:34.343-04:00</updated><title type='text'>First post!</title><summary type='text'>Welcome to my development blog. I am a software engineer working in the Boston area. By day, I write software based on a conventional enterprise Java stack: Spring, Hibernate, Tomcat and a typical SQL database server on Linux. My tools should be familiar to anyone who works in the Java ecosystem: Eclipse, Ant and other Apache stuff, Log4j, JUnit, Hudson etc. After hours, I toss all those things </summary><link rel='replies' type='application/atom+xml' href='http://chriswongdevblog.blogspot.com/feeds/2663424621477888139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/08/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2663424621477888139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1383695822029623916/posts/default/2663424621477888139'/><link rel='alternate' type='text/html' href='http://chriswongdevblog.blogspot.com/2009/08/first-post.html' title='First post!'/><author><name>Christopher Wong</name><uri>http://www.blogger.com/profile/16941177380839071164</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>
