<?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-19008585</id><updated>2011-12-03T08:16:56.153-06:00</updated><title type='text'>glueclue</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19008585.post-290685701282294481</id><published>2011-11-01T05:51:00.006-05:00</published><updated>2011-11-01T12:36:03.238-05:00</updated><title type='text'>Google's new look</title><content type='html'>&lt;div&gt;&lt;div&gt;Google's new look and feel is driving me crazy.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Google has been "improving" the look and feel of their different pages as they integrate different services with Google Plus. I think in general the changes are for the worse, but there's one change in particular that is horrible. &lt;strong&gt;The new look involves lots more vertical whitespace, which results in less information per page.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/-OuLxur-GNFM/Tq_QgBYH4VI/AAAAAAAAACA/NeG-I87Igs8/s1600/Fullscreen%2Bcapture%2B1112011%2B55347%2BAM.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="width: 400px; height: 198px; cursor: pointer;" id="BLOGGER_PHOTO_ID_5669979704426750290" border="0" alt="" src="http://1.bp.blogspot.com/-OuLxur-GNFM/Tq_QgBYH4VI/AAAAAAAAACA/NeG-I87Igs8/s400/Fullscreen%2Bcapture%2B1112011%2B55347%2BAM.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt; This is the new Google Reader look. I can now see only 13 items on a page (15" laptop screen with 1360x768 resolution). &lt;strong&gt;I find it virtually unusable.&lt;/strong&gt; I like to scan all the items on a page and decide if I want to read any of them, or mark them all as unread. This new look will require a lot more work to do that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Other Google services are similar. In Google Calendar, I like to use the 2-week view, and I estimate that (on my screen) each day can only hold 11 items, compared to 15 in the classic view. What's worse, I can only see about 3 of my "Other Calendars" at once, compared to 10 in the classic view. Google Docs now displays 20 documents instead of 22. I can no longer remember the old Gmail look, so I'm not sure what the change is there, but it doesn't seem as bad.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I get that in a service like Google Plus, more vertical whitespace might be nice to the eyes, and density of information is not necessarily as important, especially when shared items are often a paragraph or more. But services like Reader, Calendar, and even Docs are all about providing lots of information in a small amount of space, and this extra whitespace makes them much harder to use.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update:&lt;/b&gt; I found &lt;a href="http://userstyles.org/styles/12691/google-reader-absolutely-compact"&gt;Google Reader Absolutely Compact&lt;/a&gt; for Chrome (HT: Lifehacker) which looks promising. Also I see the &lt;a href="http://gmailblog.blogspot.com/2011/11/gmails-new-look.html"&gt;Gmail redesign&lt;/a&gt; is yet to come. Great.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-290685701282294481?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/290685701282294481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=290685701282294481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/290685701282294481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/290685701282294481'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2011/11/googles-new-look.html' title='Google&apos;s new look'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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/-OuLxur-GNFM/Tq_QgBYH4VI/AAAAAAAAACA/NeG-I87Igs8/s72-c/Fullscreen%2Bcapture%2B1112011%2B55347%2BAM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19008585.post-6637909127993837136</id><published>2011-10-24T15:45:00.005-05:00</published><updated>2011-10-24T16:15:36.706-05:00</updated><title type='text'>Google Contacts and Android</title><content type='html'>&lt;div&gt;For about three years now, I've been using Android to make and receive phone calls, text messages, and emails. For the most part, it works great. But there is a problem that, as far as I can remember, has persisted since the beginning. I'm wondering if anyone has found a good way to deal with this scenario in Android, and how do other platforms (iPhone, Blackberry, ...) deal with it.&lt;/div&gt;&lt;p&gt;The scenario is: &lt;strong&gt;multiple contacts at the same address&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;This comes up all the time. But I want to focus on two common examples: &lt;strong&gt;a husband and wife&lt;/strong&gt;, and &lt;strong&gt;two people who work at the same company&lt;/strong&gt;.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Two people who work at the same company&lt;/strong&gt;: for example at my kid's school, I have a contact for the front desk, and I have a contact for another person, named Susan. If I want to call Susan, I have to call the front desk and ask for her. So, the front desk and Susan have the same telephone number. &lt;em&gt;The problem is, when I call the front desk, or when the front desk calls me, the contact displayed on my phone is Susan.&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;There has to be a better way. For one, if I call the front desk, Android should be smart enough not to display Susan as the contact. When the front desk calls me, I grant that Android can't know whether it's the front desk or Susan, but maybe it could list the possibilities.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;A husband and wife&lt;/strong&gt;: You're friends with a husband and wife who share the same home address and home phone number, but have individual email addresses and mobile phones. &lt;em&gt;There seems to be no good way to set this up in Google Contacts.&lt;/em&gt; Let's say your friends are Steve and Laurene. If you put them all in one contact, then when you get an email from one of them, or a call from one of their mobile phones, it will show up in Android as "Steve and Laurene". If you make two separate contacts, then you have to duplicate their address and home phone - that's cumbersome, and if they move you have to change it in two places. Plus you have the same problem desribed above in #1. My solution has often been to make three separate contacts - one for the couple, and one each for the individuals, but that's hardly elegant.&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt; There are probably many ways to improve this, but how about a way in Google Contacts to link two individual contacts and indicate that they share an address and/or phone number?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Thoughts?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-6637909127993837136?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/6637909127993837136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=6637909127993837136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/6637909127993837136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/6637909127993837136'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2011/10/google-contacts-and-android.html' title='Google Contacts and Android'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-4856832671983221668</id><published>2011-02-27T17:30:00.002-06:00</published><updated>2011-02-27T17:31:58.145-06:00</updated><title type='text'>Is it snowing in Minneapolis?</title><content type='html'>Can't be bothered to look out your window to see if it is snowing in Minneapolis? &lt;a href="http://isitsnowinginminneapolis.com/"&gt;This&lt;/a&gt; is the best way to find out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-4856832671983221668?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/4856832671983221668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=4856832671983221668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4856832671983221668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4856832671983221668'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2011/02/is-it-snowing-in-minneapolis.html' title='Is it snowing in Minneapolis?'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-4170430826124361754</id><published>2010-02-05T19:02:00.004-06:00</published><updated>2010-02-06T09:25:05.059-06:00</updated><title type='text'>Toyota recall perspective</title><content type='html'>&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;div&gt;In the United States there were &lt;a href="http://en.wikipedia.org/wiki/Transportation_safety_in_the_United_States"&gt;1.27 fatalities per 100 million miles travelled&lt;/a&gt; in 2008. In the last 10 years, there have been &lt;a href="http://www.safetyresearch.net/2010/01/29/toyota-unintended-acceleration-complaints-update/"&gt;19 fatalities due to sudden acceleration in Toyotas&lt;/a&gt;. There are roughly &lt;a href="http://en.wikipedia.org/wiki/Toyota"&gt;2 million Toyotas&lt;/a&gt; sold in the US each year. If each car is driven &lt;a href="http://wiki.answers.com/Q/How_many_miles_does_the_average_person_drive_annually"&gt;12000 miles per year&lt;/a&gt;, that's about 1.3 trillion miles driven by Toyotas in the US over the last decade:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;12000 * 2M * (1+2+3+...+10) = 1.2 x 10^4 x 2 * 10^6 * 55 = 1.2 x 110 x 10^10 = 1.2 x 1.1 x 10^12 =~ 1.3 trillion&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That comes out to about .0015 fatalities per 100 million miles driven attributable to sudden acceleration:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;19 / 1.3 trillion =~ 15 / trillion = 15 / 10^12 = .0015 / 10^8 = .0015 / 100 million&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, for the average driver of a Toyota made in the last 10 years, the chance of dying due to sudden acceleration is roughly &lt;b&gt;850 times less&lt;/b&gt; than the chance of dying in an accident due to other causes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is just meant to be a rough guess. If I missed something that makes these numbers way off, let me know.&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-4170430826124361754?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/4170430826124361754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=4170430826124361754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4170430826124361754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4170430826124361754'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2010/02/toyota-recall-perspective.html' title='Toyota recall perspective'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-4742414407119189449</id><published>2008-11-07T13:58:00.003-06:00</published><updated>2008-11-07T14:28:02.482-06:00</updated><title type='text'>Frequently Forgotten Fundamental Facts about Software Engineering</title><content type='html'>Bruce Eckel &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=242220"&gt;blogs&lt;/a&gt; about &lt;a href="http://www2.computer.org/portal/web/buildyourcareer/fa035"&gt;this article&lt;/a&gt; by Robert Glass.  I've never seen this list before, but it is really good.  The first one is so true:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;C1. For every 10-percent increase in problem complexity, there is a 100-percent increase in the software solution's complexity. That's not a condition to try to change (even though reducing complexity is always desirable); that's just the way it is. (For one explanation of why this is so, see RD2 in the section "Requirements and design.")&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I would add:&lt;br /&gt;&lt;br /&gt;C2.  For every increase in the software solution's complexity, there's a disproportionate increase (10-to-1?  Maybe?  Depends on the project I think.) in the cost of implementing the software.&lt;br /&gt;&lt;br /&gt;I think he lets us programmers off the hook here:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;ES3. Most software estimates are made, according to several researchers, by either upper management or marketing, not by the people who will build the software or by their managers. Therefore, the wrong people are doing estimation.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I don't know if I've ever met a technical person who overestimates, but I've met plenty who underestimate (myself included).  You could argue the reason is insufficient information (see ES2), but we could all probably do a better job asking the right questions to get the information needed to make the estimate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-4742414407119189449?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/4742414407119189449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=4742414407119189449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4742414407119189449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4742414407119189449'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2008/11/frequently-forgotten-fundamental-facts.html' title='Frequently Forgotten Fundamental Facts about Software Engineering'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-1109488995992458114</id><published>2008-11-06T17:50:00.002-06:00</published><updated>2008-11-06T18:28:05.738-06:00</updated><title type='text'>G1 Phone</title><content type='html'>I love the G1 phone so far.  Being able to access gmail, google reader, google calendar, maps, etc... from my phone makes it worth it.&lt;br /&gt;&lt;br /&gt;What needs to be improved:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Update me when a third-party application that I've downloaded from the Android Market has a new version available.  Do it just like Firefox notifies you when new versions of add-ons are available.  Do it very soon.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Battery life.&lt;/li&gt;&lt;li&gt;The orientation of the screen should change depending on how you're holding it, not on whether you have the keyboard out or not.  Did they just run out of time?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I want to be able to edit docs in google docs.  Also view PDFs.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The way contacts work: there's no good way to handle the fact that we all have friends that are couples.  Usually these couples share a home address and home phone number, but they each have their own email and cell phones.  Either you make them one contact, then whenever you send or receive emails or calls to their cell phones, you see their names together ("Bill and Melinda Gates are calling you".  Which one!?).  Or you make them two different contacts, but then you have to duplicate their information (do I just hate that because I'm a programmer?)  Or you make them three different contacts ("Bill", "Melinda", and "Bill and Melinda") and store individual information with the individuals and shared information with the couple.  I'd love to see a better way to handle it, but I can't find one.&lt;/li&gt;&lt;li&gt;Please someone write an app that will track the stocks in my portfolio.  While you're at it, a better twitter client.  And a picasa app that naturally would allow me to upload photos from my phone to my web albums.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I want to be able to close applications.  Sometimes I suspect my phone is slow because of some app that's running.  Now I have to reboot the phone.&lt;/li&gt;&lt;li&gt;The maps application needs to display zip codes.  Sure you don't need a zip code if you're navigating to somewhere, but you do if you want to look up an address so you can address a letter.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-1109488995992458114?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/1109488995992458114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=1109488995992458114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/1109488995992458114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/1109488995992458114'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2008/11/g1-phone.html' title='G1 Phone'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-8206615880031299189</id><published>2008-09-15T12:26:00.003-05:00</published><updated>2008-09-15T12:28:22.161-05:00</updated><title type='text'></title><content type='html'>Steven Levitt's 5-year old &lt;a href="http://freakonomics.blogs.nytimes.com/2008/09/15/club-penguin-anonymous/"&gt;figured out&lt;/a&gt; what took me about 35 years to get.  This is why it's a bad idea for me to play video games, play fantasy football, or watch sports on TV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-8206615880031299189?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/8206615880031299189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=8206615880031299189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/8206615880031299189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/8206615880031299189'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2008/09/steven-levitts-5-year-old-figured-out.html' title=''/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-7050570870179021810</id><published>2008-04-28T21:09:00.000-05:00</published><updated>2008-04-28T22:00:52.515-05:00</updated><title type='text'>Yahoo! Pipes</title><content type='html'>I've been playing around with Yahoo! Pipes. It's a nice way to combine information from various web sources, and combine/manipulate the result into something else. &lt;a href="http://pipes.yahoo.com/kevinl"&gt;Here&lt;/a&gt; are some pipes I've created.&lt;br /&gt;&lt;br /&gt;The simplest is a &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=hmOT2LwT3RGRpQi_JphxuA"&gt;Tim O'Reilly feed&lt;/a&gt; (who &lt;a href="http://radar.oreilly.com/archives/2007/02/pipes-and-filters-for-the-inte.html"&gt;blogged&lt;/a&gt; about Pipes himself). His blog is actually part of a larger blog with posts from other people. I only wanted to see his posts so I wrote a pipe that filters out all but those where he's the author.&lt;br /&gt;&lt;br /&gt;Pipes can also screen scrape from sites pretty well. There's a &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=HE8tvocQ3RGIBF68yp1_DQ"&gt;pipe&lt;/a&gt; that gives the upcoming schedule of the TCJUG, which is not available via RSS.&lt;br /&gt;&lt;br /&gt;Finally there's a &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=XgUSUoIO3RGV08EW1_C6Jw"&gt;pipe&lt;/a&gt; that will create an RSS feed of all the recent games of a collection of teams, using RSS feeds from Yahoo! And since I've also been playing around with GWT, I wrote a (client-side-only) &lt;a href="http://visi.com/~kevinl/SportsRSS/SportsRSS.html"&gt;page&lt;/a&gt; where you can select your favorite teams and generate an RSS feed for them using that pipe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-7050570870179021810?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/7050570870179021810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=7050570870179021810' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/7050570870179021810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/7050570870179021810'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2008/04/yahoo-pipes.html' title='Yahoo! Pipes'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-4395499273411990716</id><published>2008-02-05T22:32:00.000-06:00</published><updated>2008-02-05T22:39:45.528-06:00</updated><title type='text'>Get rid of Minnesota Caucuses</title><content type='html'>Some interviewee on NPR today said that Minnesota has caucuses instead of primaries because of its populist tradition of including everyone's voice.  If by inclusive you mean enabling everyone to vote who doesn't have young kids, who doesn't have a job in the evening, who isn't stationed somewhere else in the military, who isn't a retiree or college student temporarily out of state, then it's incredibly inclusive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-4395499273411990716?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/4395499273411990716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=4395499273411990716' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4395499273411990716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/4395499273411990716'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2008/02/get-rid-of-minnesota-caucuses.html' title='Get rid of Minnesota Caucuses'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-129743841433944251</id><published>2007-10-04T12:41:00.000-05:00</published><updated>2007-10-04T12:47:49.930-05:00</updated><title type='text'>Exploring Ways to Shorten the Ascent to a Ph.D.</title><content type='html'>From the &lt;a href="http://www.nytimes.com/2007/10/03/education/03education.html?em&amp;ex=1191643200&amp;en=2438decafe04c4d8&amp;ei=5087%0A"&gt;NY Times&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The Council of Graduate Schools, representing 480 universities in the United States and Canada, is halfway through a seven-year project to explore ways of speeding up the ordeal.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm pretty sure the person who is taking seven years to research the question of how to do research in less time is the wrong person to ask.  Must be someone's dissertation topic!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-129743841433944251?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/129743841433944251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=129743841433944251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/129743841433944251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/129743841433944251'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2007/10/exploring-ways-to-shorten-ascent-to-phd.html' title='Exploring Ways to Shorten the Ascent to a Ph.D.'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-2256868116469499305</id><published>2007-07-08T09:48:00.000-05:00</published><updated>2007-07-08T09:52:50.520-05:00</updated><title type='text'>Playing around with Google Web Toolkit (GWT)</title><content type='html'>I've been playing around with the Google Web Toolkit (GWT).  To learn it, I wrote a &lt;a href="http://www.visi.com/~kevinl/chess/ChessApp.html"&gt;chess game&lt;/a&gt;.   There's no server component; everything's on the client.  With GWT, what that means is that all the code is in Java, and then "compiled" into JavaScript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-2256868116469499305?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/2256868116469499305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=2256868116469499305' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/2256868116469499305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/2256868116469499305'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2007/07/playing-around-with-google-web-toolkit.html' title='Playing around with Google Web Toolkit (GWT)'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-8184917335873349879</id><published>2007-01-31T13:18:00.001-06:00</published><updated>2010-01-26T20:03:55.919-06:00</updated><title type='text'>The Log4J AsyncAppender is not always asynchronous.</title><content type='html'>I discovered some interesting things about the Log4J AsyncAppender. If you've used Log4J, you've probably used it before - you usually configure all of your other appenders (that write to the console, to a log file, etc...) to attach to it, so that logging calls in your code don't have to wait for the appenders to do their stuff.&lt;br /&gt;&lt;br /&gt;That's the ideal, but it doesn't always work that way. In short, there are two scenarios where the default configuration of the AsyncAppender will cause all logging to become slow. This is too bad: the default configuration of Log4J should not assume that logging is more important than performance. In every application I've ever written, given the choice between the app becoming extremely slow and logging events getting thrown out, I would choose the latter.&lt;br /&gt;&lt;br /&gt;Here are the details:&lt;br /&gt;&lt;br /&gt;For starters, the AsyncAppender has a max buffer size, set by default to only 128 events. That means that if your app logs events more quickly than an attached appender can keep up, the buffer will fill up quickly. This could happen easily if, for example, you configure an appender to write to a file on a shared disk, and that shared disk is slow. Or, if you attach an appender that does something more involved, like write messages to a web service.&lt;br /&gt;&lt;br /&gt;By default, if this buffer fills up, then any logging call will block until the buffer's size goes below the max number of events. You can increase this number of events in your Log4J configuration. But more importantly, you can configure the AsyncAppender to throw out messages rather than block when its buffer fills up (by setting "blocking=false"). Why this isn't the default, I'm not sure. Wouldn't you rather have your application discard log messages rather than crawl to a halt when it can't handle the volume? In how many applications is logging more important than actually responding to the user?&lt;br /&gt;&lt;br /&gt;You would think that setting blocking to false would prevent logging from bringing your application to its knees. But there's something else to look out for. If the thread spawned by the AsyncAppender dies, the AsyncAppender suddenly decides to become syncrhonous. Better might be trying to spawn a new thread, or just throwing out messages. What's worse, this behavior is not configurable (without modifying Log4j code). Why might that thread die? I'm not sure, but it was happening to me frequently recently, and I never tracked it down. I suspect one of the appenders was throwing an exception that wasn't caught by the AsyncAppender, but I'm not sure. The point is that the thread can die, and all of a sudden your app's performance will become dependent on whether your appenders can keep up with logging.&lt;br /&gt;&lt;br /&gt;The solution? Spawn a thread in your appender, and only write events from that thread? Then you've got the problem that your appender's buffer may grow indefinitely, causing memory issues. Maybe the best solution is to write your own AsyncAppender and stop using the one provided by Log4J.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-8184917335873349879?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/8184917335873349879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=8184917335873349879' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/8184917335873349879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/8184917335873349879'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2007/01/log4j-asyncappender-is-not-always_31.html' title='The Log4J AsyncAppender is not always asynchronous.'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-116473635306519370</id><published>2006-11-28T11:42:00.000-06:00</published><updated>2006-11-28T12:00:17.306-06:00</updated><title type='text'>Deploying a GWT app in an app server</title><content type='html'>I have been playing around with the &lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt;, and it’s very impressive.  If you haven’t looked at it, it is a way to build AJAX web pages without (theoretically) having to worry about the JavaScript.  You write your application in Java, like a Swing app, with layouts and GUI components.  GWT comes with a compiler that converts your client-side Java code to JavaScript.  Google has apparently worked out all of the browser differences, based on their experience with apps such as Gmail and Google Maps.&lt;br /&gt;&lt;br /&gt;One of the coolest features is that you can debug your app in “hosted mode”, which runs the client in a Java VM.  In this way you can debug your client in Java code before deploying it as JavaScript to an app server.&lt;br /&gt;&lt;br /&gt;When it’s deployed in an app server, your client code will make Google-specific RPC calls to your server code.  You write your server code in servlets (that extend a Google servlet class).&lt;br /&gt;&lt;br /&gt;There are a couple of things I would worry about before picking GWT for a production app.  One is that if you want to change the layout of a page, you have to make a change to your Java code.  If you have an organization where web-design specialists are the ones who make changes to the HTML, say by modifying a JSP, GWT will break this separation of roles.  You can avoid a lot of this by using stylesheets (GWT encourages this), but perhaps not completely.&lt;br /&gt;&lt;br /&gt;The other thing to worry about is how sound the Java-to-JavaScript compiler is.  I haven’t used GWT to get a good sense of this yet.  But, imagine how much harder it would be to debug GWT-generated JavaScript code than it is to debug your own code.&lt;br /&gt;&lt;br /&gt;Anyway, the main purpose for writing this blog entry was that Google has not adequately addressed the following question: How do you integrate a page using GWT into a larger web application?  Specifically, how to bundle all the required files into a war?&lt;br /&gt;&lt;br /&gt;I tried to find this answer on Google’s site, and couldn’t.  Searching the rest of the web turned up a couple of really complex ant files that claimed to create a war containing a GWT app, but I wanted something simple.  This &lt;a href="http://www.devx.com/webdev/Article/31868"&gt;article&lt;/a&gt; by Gautam Shah helped a lot, and helped me distill the required files down to this:&lt;br /&gt;&lt;br /&gt;•    A manifest.mf file, in the META-INF directory.  This is a requirement for creating a war in general, and the manifest doesn’t need to contain anything specific to GWT.&lt;br /&gt;•    A web.xml file, of course, in the WEB-INF directory.  The only GWT-related stuff that must go in here is your servlet declarations.  See below for my web.xml file.&lt;br /&gt;•    The classes created when you compile your client and server-side Java code, in the WEB-INF/classes directory.&lt;br /&gt;•    The gwt-user jar, in the WEB-INF/lib directory.  There are two big caveats here.  First, make sure you include the same jar that you compiled against in the previous step; the protocol can change between versions of the jar.  &lt;span style="font-weight: bold;"&gt;Second, and this is a HUGE gotcha, you must remove the javax.* classes from this jar before including it in your war.  The reason for this is that the jar contains javax/servlet/Servlet.class, which prevents app servers from loading the jar, according to the Servlet spec.&lt;/span&gt;  The jar contains these classes because they are required for running in hosted mode.&lt;br /&gt;•    Other files created when you run the Java-to-JavaScript compiler.  These should go in the top level of the war.&lt;br /&gt;&lt;br /&gt;Here is my web.xml file.  I have one GWT service, deployed as a servlet called “counter”:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;web-app               xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee&lt;br /&gt;                           http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&lt;br /&gt;                   version="2.4"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;display-name&amp;gt;GWT Test&amp;lt;/display-name&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet&gt;&lt;br /&gt;   &amp;lt;servlet-name&amp;gt;counter&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;   &amp;lt;servlet-class&amp;gt;&lt;br /&gt;      com.kmlsolutions.gwttest.server.CounterServiceImpl&lt;br /&gt;   &amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;   &amp;lt;servlet-name&amp;gt;counter&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;   &amp;lt;url-pattern&amp;gt;/counter&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;welcome-file-list&amp;gt;&lt;br /&gt; &amp;lt;welcome-file&amp;gt;TestApp.html&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;&amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And here is my ant build.xml file, where gwt-user-wo-javax.jar is just the gwt-user.jar that comes with the gwt, but with all the javax.* classes removed:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;project name="gwttest" default="war" basedir="."&amp;gt;&lt;br /&gt; &amp;lt;target name="war"&amp;gt;&lt;br /&gt;     &amp;lt;war&lt;br /&gt;         destfile="gwttest.war"&lt;br /&gt;         webxml="conf/web.xml"&lt;br /&gt;     &amp;gt;&lt;br /&gt;         &amp;lt;lib file="gwt-user-wo-javax.jar"&amp;gt;&lt;br /&gt;         &amp;lt;classes dir="bin" excludes="**/MANIFEST.MF"&amp;gt;&lt;br /&gt;         &amp;lt;fileset dir="www/com.kmlsolutions.gwttest.TestApp"&amp;gt;&lt;br /&gt;     &amp;lt;/war&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In theory, you should be able to add more servlets, jsps, images, and other web artifacts to this war without affecting the GWT page(s); that's the next thing for me to try.  I tested this app in Tomcat 5.5, so I don't know yet if these steps are adequate for other app servers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-116473635306519370?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/116473635306519370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=116473635306519370' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/116473635306519370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/116473635306519370'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2006/11/deploying-gwt-app-in-app-server.html' title='Deploying a GWT app in an app server'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-115267389551022306</id><published>2006-07-11T21:58:00.000-05:00</published><updated>2006-07-11T22:11:35.520-05:00</updated><title type='text'>Tree Size</title><content type='html'>It's been a long time since I've used a Mac - I used to work at &lt;a href="http://wolfram.com"&gt;Wolfram Research&lt;/a&gt;, which was cool enough to let me have a Mac for my day to day development work.  So probably 1998.  And even back then,  when you opened the equivalent of a Windows Explorer view, you would see in the size column the total size of the contents of each folder.  This column was populated in a background thread for every folder in the current view.  Very useful for determining why your hard drive was filling up.&lt;br /&gt;&lt;br /&gt;Now, eight years later, Windows still doesn't have this feature.  &lt;a href="http://www.jam-software.com/freeware/index.shtml"&gt;This&lt;/a&gt; Windows utility does that (although not quite as beautifully as the Mac did).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-115267389551022306?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/115267389551022306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=115267389551022306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/115267389551022306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/115267389551022306'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2006/07/tree-size.html' title='Tree Size'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-114355860416117890</id><published>2006-03-28T09:03:00.000-06:00</published><updated>2006-03-28T09:10:04.836-06:00</updated><title type='text'>George Mason is not the first mid-major in the final four since 1979</title><content type='html'>I've seen two definitions of mid-major: one is any school not in the top six conferences: Big Ten, Big East, ACC, SEC, Pac 10, Big 12.  The other is any school in a conference that doesn't have Division 1-A football.&lt;br /&gt;&lt;br /&gt;By any measure, UMass was a mid-major in 1995.&lt;br /&gt;&lt;br /&gt;You could also argue the most recent mid-major was Marquette in 2003.  There are others; how about UNLV, Utah, Memphis.  You could even count Louisville under the first definition.&lt;br /&gt;&lt;br /&gt;The difference with George Mason is they came out of nowhere.  They are definitely the first mid-major since 1979 to make a truly surprise run to the Final Four.  But even in 1979, Indiana State was not a surprise; only Penn was.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-114355860416117890?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/114355860416117890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=114355860416117890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/114355860416117890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/114355860416117890'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2006/03/george-mason-is-not-first-mid-major-in.html' title='George Mason is not the first mid-major in the final four since 1979'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-113951863305006834</id><published>2006-02-09T14:36:00.000-06:00</published><updated>2006-02-09T15:26:33.496-06:00</updated><title type='text'>Hibernate duplicates with join fetch</title><content type='html'>It's a well-documented behavior (&lt;a href="http://www.hibernate.org/117.html#A11"&gt;here&lt;/a&gt; and &lt;a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=78&amp;amp;t=001032"&gt;here&lt;/a&gt;) of Hibernate that if you do a "join fetch" HQL query, then use query.list() to get the results, there will be "duplicate" objects in the result.  The recommended way to get rid of these duplicates is to put them in a HashSet.  Note as mentioned in the second link above, adding the distinct keyword doesn't help here - presumably because the result set in this case is already returning distinct rows.&lt;br /&gt;&lt;br /&gt;A couple comments:&lt;br /&gt;&lt;br /&gt;(1) Fine, I can put my objects in a HashSet, and that works.  The problem is performance.  If the number of results that come back from query.list() is large (which is likely to happen if I'm doing a join fetch to many tables), then populating all the objects and then culling duplicates by putting them in a HashSet takes too long.  I'm not sure what the solution (other than writing my own SQL and building the objects myself) would be.&lt;br /&gt;&lt;br /&gt;(2) It's confusing that the Hibernate documentation and comments (as well as the Hibernate in Action book) on forums imply that this issue is specific to outer join fetching.  It's exactly the same with inner joins.&lt;br /&gt;&lt;br /&gt;(3) I'm still not seeing why Hibernate has this behavior.  To take the canonical Hibernate example of Items and Bids, assume I do this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;session.createQuery("from item i join fetch i.bid where i.itemId = 1").list()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and assume that the item I'm getting has 5 bids.  The result from list() is 5 items, each with 5 bids.  Each item is identical (which is why putting the results in a HashSet works).  My (naive?) reaction to this is: if Hibernate is being clever enough to take all 5 bids and put them in each item, why can't it just return that one item?  Or why isn't there a way to tell Hibernate to do this as it's iterating the result set, before it creates all the objects?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-113951863305006834?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/113951863305006834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=113951863305006834' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/113951863305006834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/113951863305006834'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2006/02/hibernate-duplicates-with-join-fetch.html' title='Hibernate duplicates with join fetch'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19008585.post-113770034412488848</id><published>2006-01-19T13:50:00.000-06:00</published><updated>2006-01-19T13:52:24.136-06:00</updated><title type='text'>HTML Reference</title><content type='html'>I like this site as an HTML reference:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3schools.com/tags/default.asp"&gt;http://www.w3schools.com/tags/default.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-113770034412488848?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/113770034412488848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=113770034412488848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/113770034412488848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/113770034412488848'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2006/01/html-reference.html' title='HTML Reference'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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-19008585.post-113640919329008273</id><published>2006-01-04T14:56:00.000-06:00</published><updated>2006-01-04T15:30:16.523-06:00</updated><title type='text'>Creating an ear, in the simplest way</title><content type='html'>I don't know how many times I've wanted to test something simple in an ear, but wanted to avoid the complexities of the application I'm working on, or the container I'm working in. I end up having to remind myself what are the basic requirements for creating an ear. That often takes a while, since in a normal working environment, you create the ear and forget about it.&lt;br /&gt;&lt;br /&gt;So, I created a very simple ear here, and deployed it in JBoss. It has only four files: a build file, an application configuration, a web configuration, and a jsp. Here are the steps I followed:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Installed JBoss Application Server.  I installed version 4.0.3 SP1, available here: &lt;a href="http://www.jboss.com/products/jbossas/downloads"&gt;http://www.jboss.com/products/jbossas/downloads&lt;/a&gt;.  It's an executable jar, and I did a complete install, and accepted all the defaults.&lt;/li&gt;   &lt;li&gt;Created a new project in my IDE.  My project has the following top-level directories:&lt;/li&gt;   &lt;ul&gt;     &lt;li&gt;bin/  -- for the build file&lt;/li&gt;   &lt;/ul&gt;   &lt;ul&gt;     &lt;li&gt;conf/ -- for application configuration, in this case just application.xml&lt;br /&gt;&lt;/li&gt;   &lt;/ul&gt;   &lt;ul&gt;     &lt;li&gt;testWar/ -- a basic web application&lt;/li&gt;   &lt;/ul&gt;   &lt;li&gt;Created a META-INF/ directory in conf/, and inside put an application.xml file (see below). All that this file does is configure the web-app at the context root /testEar.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Created a web/jsp/ directory in testWar/, and inside put a hello.jsp file (see below).&lt;/li&gt;   &lt;li&gt;Created a WEB-INF/ directory in testWar/, and inside put a web.xml file (see below). All this file does is configure hello.jsp as the welcome page.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Created a build.xml file in bin/ (see below).&lt;/li&gt;   &lt;li&gt;Ran the ant build (in the bin directory, ran "ant build".  (I assume a JDK and ant are installed).&lt;/li&gt;   &lt;li&gt;Copied the resulting ear (testEar.ear) into the JBoss deployment directory (in my installation, this is in jboss-4.0.3SP1/server/default/deploy).&lt;/li&gt;   &lt;li&gt;Started JBoss (in my installation, I ran jboss-4.0.3SP1/bin/run.bat).&lt;/li&gt;   &lt;li&gt;Pointed my browser to http://localhost:8080/testEar.&lt;/li&gt; &lt;/ol&gt;Here is application.xml:&lt;br /&gt;&lt;pre&gt;&amp;lt;application xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee&lt;br /&gt;         http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"&lt;br /&gt;         version="1.4"&amp;gt;       &lt;br /&gt; &amp;lt;description&amp;gt;Test Ear&amp;lt;/description&amp;gt;&lt;br /&gt; &amp;lt;display-name&amp;gt;Test Ear&amp;lt;/display-name&amp;gt;&lt;br /&gt; &amp;lt;module&amp;gt;&lt;br /&gt;     &amp;lt;web&amp;gt;&lt;br /&gt;         &amp;lt;web-uri&amp;gt;testWar.war&amp;lt;/web-uri&amp;gt;&lt;br /&gt;         &amp;lt;context-root&amp;gt;testEar&amp;lt;/context-root&amp;gt;&lt;br /&gt;     &amp;lt;/web&amp;gt;&lt;br /&gt; &amp;lt;/module&amp;gt;&lt;br /&gt;&amp;lt;/application&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is hello.jsp:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Hello, World&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is web.xml:&lt;br /&gt;&lt;pre&gt;&amp;lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;   xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;   schemalocation="http://java.sun.com/xml/ns/j2ee&lt;br /&gt;   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&lt;br /&gt;   version="2.4"&amp;gt;&lt;br /&gt;&amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;    &amp;lt;welcome-file&amp;gt;/jsp/hello.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;&amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is build.xml:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;project name="testEar" default="build"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="project.root.dir" value=".."/&amp;gt;&lt;br /&gt;  &amp;lt;property name="conf.dir" value="${project.root.dir}/conf"/&amp;gt;&lt;br /&gt;  &amp;lt;property name="test.war.dir" value="${project.root.dir}/testWar"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;target name="build"&amp;gt;&lt;br /&gt;      &amp;lt;war destfile="testWar.war" webxml="${test.war.dir}/WEB-INF/web.xml"&amp;gt;&lt;br /&gt;          &amp;lt;fileset dir="${test.war.dir}/web"/&amp;gt;&lt;br /&gt;      &amp;lt;/war&amp;gt;&lt;br /&gt;      &amp;lt;ear destfile="testEar.ear" appxml="${conf.dir}/META-INF/application.xml"&amp;gt;&lt;br /&gt;          &amp;lt;fileset dir="." includes="*.war"/&amp;gt;&lt;br /&gt;      &amp;lt;/ear&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19008585-113640919329008273?l=glueclue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://glueclue.blogspot.com/feeds/113640919329008273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19008585&amp;postID=113640919329008273' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/113640919329008273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19008585/posts/default/113640919329008273'/><link rel='alternate' type='text/html' href='http://glueclue.blogspot.com/2006/01/creating-ear-in-simplest-way.html' title='Creating an ear, in the simplest way'/><author><name>Kevin Leuthold</name><uri>http://www.blogger.com/profile/14349292215162288183</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></feed>
