<?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-1313437593418701642</id><updated>2011-11-27T16:34:41.838-08:00</updated><category term='hibernate'/><category term='design tools'/><category term='Screen Specification'/><category term='video games'/><category term='JFugue'/><category term='Midi'/><category term='game creation'/><category term='Enterprise Patterns And Archetypes'/><category term='UML'/><category term='Graphic Design'/><category term='breakout'/><category term='scratch'/><category term='Glossy Text'/><category term='Groovy'/><category term='MDA'/><category term='GORM'/><category term='Reflection'/><category term='UI Specification'/><category term='entrepreneur software educational software'/><category term='Ergonomics'/><category term='DSL'/><category term='subscribe.'/><category term='Pulpcore'/><category term='GIMP'/><category term='GraphViz'/><category term='Grails'/><category term='Easter'/><category term='caching'/><category term='piano'/><category term='followers'/><category term='game maker'/><category term='mockups'/><category term='Breaktime'/><category term='SwingBuilder'/><category term='Business Rules'/><category term='Prototyping'/><title type='text'>Late Nights Coding</title><subtitle type='html'>Discoveries in Grails, casual games, etc.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://latenightscoding.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-4884029261377693283</id><published>2010-09-23T23:43:00.000-07:00</published><updated>2010-09-24T03:01:03.141-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Breaktime'/><category scheme='http://www.blogger.com/atom/ns#' term='Ergonomics'/><title type='text'>Break Time with Web Pics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dOg4Ljp3kh8/TJxIx0lLqoI/AAAAAAAAASY/SFsJElqimiQ/s1600/break.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_dOg4Ljp3kh8/TJxIx0lLqoI/AAAAAAAAASY/SFsJElqimiQ/s320/break.png" alt="" id="BLOGGER_PHOTO_ID_5520367264014772866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My latest version of Break Time has contextual Web Pics.  You put in a theme for pictures you would like to see, and it pings Yahoo Picture search and grabs a random picture.&lt;br /&gt;&lt;br /&gt;In this example, you can see some of the possibilities it came up with when I prompted it with mountain.&lt;br /&gt;&lt;br /&gt;It aint perfect yet because you have to modify the config file in the installation directory for it to work, but still, I think it looks rather nice.&lt;br /&gt;&lt;br /&gt;Why not download it from &lt;a href="http://apps.minutemenuplan.com/category.php?id=1"&gt;here &lt;/a&gt;and see what you think?  You need to be taking breaks every 15 minutes while you are at the computer, Break Time makes sure that you do!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-4884029261377693283?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/4884029261377693283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/4884029261377693283'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/09/break-time-with-web-pics.html' title='Break Time with Web Pics'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dOg4Ljp3kh8/TJxIx0lLqoI/AAAAAAAAASY/SFsJElqimiQ/s72-c/break.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-1244808821563847139</id><published>2010-03-30T01:49:00.000-07:00</published><updated>2010-03-30T20:55:51.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Breaktime'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Easter'/><title type='text'>A cooler Easter Break Time....</title><content type='html'>&lt;div style="text-align: left;"&gt;So, I finishe&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/S7G7pqfcspI/AAAAAAAAAQo/fNtl7fmNteQ/s1600/easter.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 194px; height: 200px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/S7G7pqfcspI/AAAAAAAAAQo/fNtl7fmNteQ/s200/easter.png" alt="" id="BLOGGER_PHOTO_ID_5454346948177605266" border="0" /&gt;&lt;/a&gt;d a new version that is kind of fun.  instead of a  blah window, it has a cute little set of easter bunnies.  But if you start it up, in 15 minutes, it will remind you to take a break.  I even built an installer for it.  You can access it here:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.fishnetgames.net"&gt;http://www.fishnetgames.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another cool thing I like about it is that it gives you the minutes left until the break in the status bar itself.&lt;br /&gt;&lt;br /&gt;Give it a try.  I promise, no spyware.  Then email me to tell me if you think it could be useful to give you much needed breaks!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/S7G7qGqmRJI/AAAAAAAAAQw/2Z1Wwl5pT3Q/s1600/easter-taskbar.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 161px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/S7G7qGqmRJI/AAAAAAAAAQw/2Z1Wwl5pT3Q/s200/easter-taskbar.png" alt="" id="BLOGGER_PHOTO_ID_5454346955740562578" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-1244808821563847139?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1244808821563847139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1244808821563847139'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/03/cooler-easter-break-time.html' title='A cooler Easter Break Time....'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dOg4Ljp3kh8/S7G7pqfcspI/AAAAAAAAAQo/fNtl7fmNteQ/s72-c/easter.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-8503867867904183403</id><published>2010-03-18T15:21:00.000-07:00</published><updated>2010-03-18T16:25:25.454-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ergonomics'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='SwingBuilder'/><title type='text'>Converting My Swing Break Reminder to Groovy: Part 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/S6K1BRR1VgI/AAAAAAAAAQg/gCNBLE-9g5Y/s1600-h/Groovy+Break.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/S6K1BRR1VgI/AAAAAAAAAQg/gCNBLE-9g5Y/s200/Groovy+Break.PNG" alt="" id="BLOGGER_PHOTO_ID_5450117532494419458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have ergonomic muscle strain issues.  Experts recommend that you take breaks every 15 minutes to alleviate that pain, and give your muscles a rest.  So, a long time ago, I wrote a small java app that would remind me to take a break every fifteen minutes.  Here is the code for it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;import java.awt.*;&lt;br /&gt;import java.awt.event.WindowStateListener;&lt;br /&gt;import java.awt.event.WindowEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.Locale;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.text.NumberFormat;&lt;br /&gt;import java.text.DecimalFormat;&lt;br /&gt;import com.ocpsoft.pretty.time.BasicTimeFormat;&lt;br /&gt;import com.ocpsoft.pretty.time.TimeFormat;&lt;br /&gt;import com.ocpsoft.pretty.time.TimeUnit;&lt;br /&gt;import com.ocpsoft.pretty.time.PrettyTime;&lt;br /&gt;import com.ocpsoft.pretty.time.units.Second;&lt;br /&gt;import com.ocpsoft.pretty.time.units.Minute;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Created by IntelliJ IDEA.&lt;br /&gt;* User: BrentFisher&lt;br /&gt;* Date: Aug 18, 2009&lt;br /&gt;* Time: 2:07:18 PM&lt;br /&gt;* To change this template use File | Settings | File Templates.&lt;br /&gt;*/&lt;br /&gt;public class TimeReminderWindow {&lt;br /&gt;&lt;br /&gt;public static void main(String [] args){&lt;br /&gt;  TimeReminderWindow trw = new TimeReminderWindow();&lt;br /&gt;  trw.start();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;long timeToWait = 15 * 60 * 1000;// 15 minutes&lt;br /&gt;long lastUpdate = System.currentTimeMillis();&lt;br /&gt;&lt;br /&gt;private void start() {&lt;br /&gt;  final JFrame frame = new JFrame("Time Reminder");&lt;br /&gt;  final JButton button = new JButton("Click here to reset");&lt;br /&gt;  final PrettyTime p = new PrettyTime();&lt;br /&gt;&lt;br /&gt;  frame.getContentPane().add(new JLabel("Take a break",SwingConstants.CENTER), BorderLayout.CENTER);&lt;br /&gt;  frame.getContentPane().add(button, BorderLayout.NORTH);&lt;br /&gt;  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();&lt;br /&gt;    frame.setBounds(screenSize.width/2 - (640/2),&lt;br /&gt;               screenSize.height/2 - (480/2),640,480);&lt;br /&gt;  button.addActionListener(new ActionListener(){&lt;br /&gt;      public void actionPerformed(ActionEvent e) {&lt;br /&gt;          lastUpdate = System.currentTimeMillis();&lt;br /&gt;          frame.setState(JFrame.ICONIFIED);&lt;br /&gt;      }&lt;br /&gt;  });&lt;br /&gt;  Timer timer = new Timer(1000, new ActionListener(){&lt;br /&gt;      public void actionPerformed(ActionEvent e) {&lt;br /&gt;          long now = System.currentTimeMillis();&lt;br /&gt;          if(now - lastUpdate &gt; timeToWait){&lt;br /&gt;              frame.setState(JFrame.NORMAL);&lt;br /&gt;              frame.toFront();&lt;br /&gt;          }&lt;br /&gt;          frame.setTitle("Break " + p.format(new Date(lastUpdate + timeToWait)));&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;  });&lt;br /&gt;  lastUpdate = System.currentTimeMillis();&lt;br /&gt;  timer.start();&lt;br /&gt;//        frame.pack();&lt;br /&gt;  frame.setVisible(true);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The Book &lt;a href="http://my.safaribooksonline.com/9781932394849"&gt;Groovy in Action&lt;/a&gt; claims that writing Swing code in Java is three to four times longer.  So, I'm gonna put that to the test in this article.  Plus, I've always wanted to put in some helpful ergonomic reminders in too, so I'll see if I can do that.&lt;br /&gt;&lt;br /&gt;Here is the code, and here is the reminder window:&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/S6KpgmCz5vI/AAAAAAAAAQY/kijS7dORq5M/s1600-h/Take+a+Break.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/S6KpgmCz5vI/AAAAAAAAAQY/kijS7dORq5M/s200/Take+a+Break.PNG" alt="" id="BLOGGER_PHOTO_ID_5450104876504966898" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;import java.awt.*;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import com.ocpsoft.pretty.time.PrettyTime;&lt;br /&gt;import groovy.swing.SwingBuilder;&lt;br /&gt;import java.awt.BorderLayout as BL&lt;br /&gt;import java.awt.event.ActionListener&lt;br /&gt;import java.awt.event.ActionEvent&lt;br /&gt;&lt;br /&gt;long timeToWait = 15 * 60 * 1000;// 15 minutes&lt;br /&gt;long lastUpdate = System.currentTimeMillis();&lt;br /&gt;def swing = new SwingBuilder()&lt;br /&gt;final PrettyTime p = new PrettyTime();&lt;br /&gt;Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();&lt;br /&gt;def button1 = swing.button( 'Click here to reset')&lt;br /&gt;&lt;br /&gt;def frame = swing.frame(title: 'Time Reminder',&lt;br /&gt;     defaultCloseOperation: JFrame.EXIT_ON_CLOSE,&lt;br /&gt;     bounds: new Rectangle((int) screenSize.width / 2 - (640 / 2),&lt;br /&gt;             (int) screenSize.height / 2 - (480 / 2), 640, 480)) {&lt;br /&gt;panel(layout: new BL()) {&lt;br /&gt; widget(button1,constraints: BL.NORTH)&lt;br /&gt; label constraints: BL.CENTER, horizontalAlignment: SwingConstants.CENTER, 'Take a break'&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;button1.actionPerformed = {&lt;br /&gt;lastUpdate = System.currentTimeMillis();&lt;br /&gt;frame.setState(JFrame.ICONIFIED);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Timer timer = new Timer(1000, {ActionEvent e -&gt;&lt;br /&gt;long now = System.currentTimeMillis();&lt;br /&gt;if (now - lastUpdate &gt; timeToWait) {&lt;br /&gt; frame.setState(JFrame.NORMAL);&lt;br /&gt; frame.toFront();&lt;br /&gt;}&lt;br /&gt;frame.setTitle("Break ${p.format(new Date(lastUpdate + timeToWait))}");&lt;br /&gt;} as ActionListener);&lt;br /&gt;&lt;br /&gt;lastUpdate = System.currentTimeMillis();&lt;br /&gt;timer.start();&lt;br /&gt;//        frame.pack();&lt;br /&gt;frame.setVisible(true);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But I have to say, the whole part of getting the button registered for action performed was pretty tricky and I spent more than half an hour doing it.  The code was reduced to 43 lines from 71, but the builder part was actually trickier than I thought it would be, and both use 15 lines of code.  So, I'm not completely sold on its usefulness.&lt;br /&gt;&lt;br /&gt;Part II will be to query Google for some ergonomic images, and automatically put those on the screen.  Stay tuned...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-8503867867904183403?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8503867867904183403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8503867867904183403'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/03/converting-my-swing-break-reminder-to.html' title='Converting My Swing Break Reminder to Groovy: Part 1'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/S6K1BRR1VgI/AAAAAAAAAQg/gCNBLE-9g5Y/s72-c/Groovy+Break.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3834964407520621285</id><published>2010-01-18T09:54:00.001-08:00</published><updated>2010-01-18T09:54:26.872-08:00</updated><title type='text'>Giving Aid to Haiti</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;OK, OK, I know that only believers are supposed to be charitable, and I've tried to resist the temptation to give in to my humanity.  As much as I have struggled to resist the temptation, I could no longer resist.  I have donated to the international Red Cross and Doctors without borders.&lt;br/&gt;&lt;br/&gt;Won't you take a minute to help the Red Cross or Doctors without borders too?&lt;br/&gt;&lt;br/&gt;Follow the link on this page, or choose a different route.  There are so many ways to get your money there.&lt;br/&gt;&lt;br/&gt;Cheers!&lt;/p&gt;in reference to: &lt;a href='http://www.skeptic.com/eskeptic/10-01-17'&gt;Skeptic » eSkeptic » Sunday, January 17th, 2010&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/Efrl1beGRVXpLh5PDk2EbI_Il2o'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3834964407520621285?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3834964407520621285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3834964407520621285'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/01/giving-aid-to-haiti.html' title='Giving Aid to Haiti'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-4023735986386740226</id><published>2010-01-13T01:40:00.001-08:00</published><updated>2010-01-13T01:40:11.538-08:00</updated><title type='text'>Groovy business rules</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I love this way to make the DSL presented here.  I just wish I could find more ways to put it into a sandbox, besides the heavy hand of the java security sand box.&lt;/p&gt;in reference to: &lt;a href='http://www.slideshare.net/glaforge/practical-groovy-dsl'&gt;Practical Groovy DSL&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/422EzfiCNCxIqAWYqu6bfWgpiwE'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-4023735986386740226?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/4023735986386740226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/4023735986386740226'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/01/groovy-business-rules.html' title='Groovy business rules'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-7076924413363775928</id><published>2010-01-13T01:23:00.001-08:00</published><updated>2010-01-13T01:23:01.891-08:00</updated><title type='text'>Great post on showing code in blogger</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Thanks Vivian for showing me how to post code on blogspot.  As a burgeoning code blogger, this really helps out!&lt;/p&gt;in reference to: &lt;a href='http://vivianningyang.blogspot.com/2009/05/how-to-post-source-code-in-blogspotcom.html'&gt;Vivian's Tech Blog: How to post source code in &lt;a href='http://blogspot.com'&gt;blogspot.com&lt;/a&gt;&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/a6Ptb1aWf2g9aBBOMB859lAsBX8'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-7076924413363775928?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7076924413363775928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7076924413363775928'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/01/great-post-on-showing-code-in-blogger.html' title='Great post on showing code in blogger'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-769252860888600983</id><published>2010-01-13T00:01:00.000-08:00</published><updated>2010-01-13T01:30:46.841-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Rules'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Creating a Groovy DSL for Financial Product Fee Schedules</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/S02Ssm06kvI/AAAAAAAAAPc/J7KmNkTkFVY/s1600-h/busienssrules.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 142px; height: 200px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/S02Ssm06kvI/AAAAAAAAAPc/J7KmNkTkFVY/s200/busienssrules.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5426154421085704946" /&gt;&lt;/a&gt;&lt;br /&gt;I'm currently working on a project that requires a variable fee schedule.&lt;br /&gt;E.g.&lt;br /&gt;&lt;br /&gt;&lt;table class="product"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Product Name&lt;/th&gt;                           &lt;th&gt; Category&lt;/th&gt;                           &lt;th&gt; Feature&lt;/th&gt;                           &lt;th&gt; Value&lt;/th&gt;                           &lt;th colspan="2"&gt;Date Range&lt;/th&gt;                           &lt;th&gt;Functional Setting Applicability&lt;/th&gt;                          &lt;/tr&gt;                     &lt;/thead&gt;                     &lt;tbody&gt;                     &lt;script type="text/javascript"&gt;                        var expandCollapse = function(productId,source){                           if(source.innerHTML == '[+]'){                               source.innerHTML = '[-]';                               var child                               var i = 1                               while(child = $('sub_' + productId + '_' + i)){                                   i++;                                   child.removeClassName('hidden');                               }                           } else {                             source.innerHTML = '[+]';                             var child                             var i = 1                             while(child = $('sub_' + productId + '_' + i)){                                 i++;                                 child.addClassName('hidden');                             }                           }                        }                      &lt;/script&gt;                                                                    &lt;tr class="odd"&gt;                         &lt;td&gt;General ACH Generation&lt;/td&gt;                         &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                       &lt;/tr&gt;                                                                                                     &lt;tr class="even" id="sub_1_1"&gt;                               &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;td&gt;ACH Generation Fees&lt;/td&gt;                               &lt;td&gt;ACH Transaction Fee&lt;/td&gt;                               &lt;td&gt;1.00&lt;/td&gt;                               &lt;td&gt;Account Open Date &lt;/td&gt;&lt;td&gt; Account Closed Date&lt;/td&gt;                               &lt;td&gt;0 to 10 transactions&lt;/td&gt;                             &lt;/tr&gt;                                                                                                                                   &lt;tr class="odd" id="sub_1_2"&gt;                               &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;td&gt;ACH Transaction Fee&lt;/td&gt;                               &lt;td&gt;.50&lt;/td&gt;                               &lt;td&gt;Account Open Date &lt;/td&gt;&lt;td&gt; Account Closed Date&lt;/td&gt;                               &lt;td&gt;10 or more transactions&lt;/td&gt;                             &lt;/tr&gt;                                                                                                                                   &lt;tr class="even" id="sub_1_3"&gt;                               &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;td&gt;Credit Card Generation Fees&lt;/td&gt;                               &lt;td&gt;CC Transaction Fee&lt;/td&gt;                               &lt;td&gt;1.00&lt;/td&gt;                               &lt;td&gt;Account Open Date &lt;/td&gt;&lt;td&gt; Account Closed Date&lt;/td&gt;                               &lt;td&gt;0 to 10 transactions&lt;/td&gt;                             &lt;/tr&gt;                                                                                                                                   &lt;tr class="odd" id="sub_1_4"&gt;                               &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;td&gt;CC Transaction Fee&lt;/td&gt;                               &lt;td&gt;.50&lt;/td&gt;                               &lt;td&gt;Account Open Date &lt;/td&gt;&lt;td&gt; Account Closed Date&lt;/td&gt;                               &lt;td&gt;10 or more transactions&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I need a way to specify the date range that would include things such as account open date and plus 3 months and transaction ranges.  Groovy DSL seems like the perfect fit.  See Guillame Laforge's example &lt;a href="http://www.slideshare.net/glaforge/practical-groovy-dsl"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I came up with the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package com.aps.utils&lt;br /&gt;&lt;br /&gt;import com.aps.util.DateUtil&lt;br /&gt;import org.codehaus.groovy.runtime.TimeCategory&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class ProductCatalogDSLTests extends GroovyTestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  def account&lt;br /&gt;&lt;br /&gt;  void setUp() {&lt;br /&gt;    account = new Account(from: DateUtil.sdf.parse("01-01-2010"))&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  void testAccountOpenedDate() {&lt;br /&gt;    def rule = 'transactionDate &gt; account.from'&lt;br /&gt;    def binding = new Binding()&lt;br /&gt;    binding.account = account&lt;br /&gt;    def shell = new GroovyShell(binding)&lt;br /&gt;    def date = DateUtil.sdf.parse('01-10-2010')&lt;br /&gt;    binding.transactionDate = date&lt;br /&gt;    assert shell.evaluate(rule)&lt;br /&gt;    binding.transactionDate = DateUtil.sdf.parse('05-10-2009')&lt;br /&gt;    assertFalse shell.evaluate(rule)&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  void testAccountOpenedDate_plus3() {&lt;br /&gt;    def rule = 'transactionDate &lt; account.from+6.months'&lt;br /&gt;    def binding = new Binding()&lt;br /&gt;    binding.account = account&lt;br /&gt;    def shell = new GroovyShell(binding)&lt;br /&gt;    def date = DateUtil.sdf.parse('01-10-2010')&lt;br /&gt;    binding.transactionDate = date&lt;br /&gt;    use(TimeCategory) {&lt;br /&gt;      assert shell.evaluate(rule)&lt;br /&gt;      binding.transactionDate = DateUtil.sdf.parse('05-10-2010')&lt;br /&gt;      assert shell.evaluate(rule)&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  void testTransactionMinimum() {&lt;br /&gt;    def rule1 = 'account.transactions.size &lt; 10'&lt;br /&gt;    def rule2 = 'account.transactions.size &gt;= 10'&lt;br /&gt;    def date = DateUtil.sdf.parse('01-10-2010')&lt;br /&gt;    0..5.each {&lt;br /&gt;      account.transactions &lt;&lt; new AccountTransaction(amount: 15.00, postDate: date)&lt;br /&gt;    }&lt;br /&gt;    def binding = new Binding()&lt;br /&gt;    binding.account = account&lt;br /&gt;    def shell = new GroovyShell(binding)&lt;br /&gt;    binding.transactionDate = date&lt;br /&gt;    use(TimeCategory) {&lt;br /&gt;      assert shell.evaluate(rule1)&lt;br /&gt;      assertFalse shell.evaluate(rule2)&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  void testTransactionMinimumThisMonth() {&lt;br /&gt;    def rule1 = 'account.transactions.collect{it.postDate.month == transactionDate.month}.size &lt; 10'&lt;br /&gt;    def rule2 = 'account.transactions.collect{it.postDate.month == transactionDate.month}.size &gt;= 10'&lt;br /&gt;    def date = DateUtil.sdf.parse('01-10-2010')&lt;br /&gt;    use(TimeCategory) {&lt;br /&gt;      assertEquals 0 , date.month&lt;br /&gt;      assertEquals 10 , date.date&lt;br /&gt;      assertEquals 2010 - 1900 , date.year&lt;br /&gt;      0..5.each {&lt;br /&gt;        account.transactions &lt;&lt; new AccountTransaction(amount: 15.00, postDate: date)&lt;br /&gt;      }&lt;br /&gt;      def binding = new Binding()&lt;br /&gt;      binding.account = account&lt;br /&gt;      def shell = new GroovyShell(binding)&lt;br /&gt;      binding.transactionDate = date&lt;br /&gt;      assert shell.evaluate(rule1)&lt;br /&gt;      assertFalse shell.evaluate(rule2)&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;class Account {&lt;br /&gt;  Date from&lt;br /&gt;  Date to&lt;br /&gt;  def transactions = []&lt;br /&gt;}&lt;br /&gt;class AccountTransaction {&lt;br /&gt;  BigDecimal amount&lt;br /&gt;  Date postDate&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It ended up working well for dynamic business rule selectors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-769252860888600983?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/769252860888600983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/769252860888600983'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/01/creating-groovy-dsl-for-financial.html' title='Creating a Groovy DSL for Financial Product Fee Schedules'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S02Ssm06kvI/AAAAAAAAAPc/J7KmNkTkFVY/s72-c/busienssrules.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-6410169069078250312</id><published>2010-01-04T09:36:00.001-08:00</published><updated>2010-01-04T09:36:23.102-08:00</updated><title type='text'>A reason for Death</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;My friend Mike studies Evolution, Biology and Bioinformatics at UVU.  He and I often engage in wonderful thought provoking discussions on life, and our part in it.&lt;br/&gt;&lt;br/&gt;I appreciate Mike's thoughts here on the evolution of death.  Death was developed through evolution.  It reminds me of the gentlemen from Canada who continuously talks about developing gene therapy to continuously delay death.  But none of that will happen while researchers continue on the assumption of death as a requirement of part of life.&lt;/p&gt;in reference to: &lt;a href='http://evobio.madriley.com/2009/12/life-ascending-and-evolutiion-of-death.html'&gt;Evolution and Bioinformatics: Life Ascending and the evolution of death&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/6iVw-zwKFcc4t_Ro_l5UFRA3eno'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-6410169069078250312?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6410169069078250312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6410169069078250312'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2010/01/reason-for-death.html' title='A reason for Death'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-797947961941603096</id><published>2009-12-21T12:45:00.001-08:00</published><updated>2009-12-21T12:45:33.973-08:00</updated><title type='text'>Stop the Obfuscation~!</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Once again, I have to agree with you Brandon.  There is another point to this as well.  In the build that I run, with so many thousands of classes, each with hundreds (if not thousands) of lines of code, this obfuscation process takes quite a bit longer to run in the build.  Anything that takes longer in the build, but doesn't offer clear developer benefit can deter developers from running the build (and tests) before check-in because it just takes too long.&lt;br/&gt;&lt;br/&gt;Thanks for the great post Brandon.&lt;/p&gt;in reference to: &lt;a href='http://www.mechanicalspirit.com/java-programming-tip-why-not-to-obfuscate'&gt;Java Programming Tip: Why Not to Obfuscate - mechanicalSPIRIT&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/h7bO7rQmQS-Kr96JPSGzHc10GME'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-797947961941603096?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/797947961941603096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/797947961941603096'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/stop-obfuscation.html' title='Stop the Obfuscation~!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3463941832961914052</id><published>2009-12-18T11:23:00.001-08:00</published><updated>2009-12-18T11:30:23.864-08:00</updated><title type='text'>Spanky's closed down?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SyvYSUMsSlI/AAAAAAAAAOs/hN_hUsSs0Ew/s1600-h/spanky%27s.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 136px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SyvYSUMsSlI/AAAAAAAAAOs/hN_hUsSs0Ew/s200/spanky%27s.PNG" alt="" id="BLOGGER_PHOTO_ID_5416660786014341714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;After my wonderful experience at Spanky's following my 7 year old daughter's driver's ed course, I fell in love with Spanky's.  So did she.  Their environment was comfortable, clean and friendly, and their food tastes great.&lt;br /&gt;&lt;br /&gt;I was really sad though that for her birthday, they were unexpectedly closed.  I visited yesterday in hopes for delicious lunch.  Again they were closed.  Called today too.  But they appear to be closed.&lt;br /&gt;&lt;br /&gt;What is going on Spanky's?  I am in need of your Fresh Delicious Guacamole Burger!&lt;/p&gt;in reference to: &lt;a href="http://spankys-subzero.blogspot.com/"&gt;SPANKY'S EXPRESS&lt;/a&gt; (&lt;a href="http://www.google.com/sidewiki/entry/103318400956219239557/id/X50eo6h1HYfWVFPhdxyzYn6vL-w"&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3463941832961914052?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3463941832961914052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3463941832961914052'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/spanky-closed-down.html' title='Spanky&amp;#39;s closed down?'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/SyvYSUMsSlI/AAAAAAAAAOs/hN_hUsSs0Ew/s72-c/spanky%27s.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3399848674281368473</id><published>2009-12-11T09:15:00.001-08:00</published><updated>2009-12-11T09:15:00.672-08:00</updated><title type='text'>Sketchy designs</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Many of you may be looking for a comparison of a lot of the mockup / sketchy design tools.    While I haven't tried all of these tools out, and I really do love Balsamiq, this may be a nice place to start!  Now if I could just find that cool data graphing design tool I saw yesterday...&lt;/p&gt;in reference to: &lt;p&gt;&lt;blockquote&gt;"Comparison of Computer Based Sketchy ToolsSoftware developers are starting to recognize the importance of computer-based sketchy wireframes, and there is a growing assortment of tools to create them. This is a quick breakdown of how each of the major tools matches our criteria for a complete computer-based sketchy tool:"&lt;br/&gt;- &lt;a href='http://www.boxesandarrows.com/view/sketchy-wireframes'&gt;Sketchy Wireframes - Boxes and Arrows: The design behind the design&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/hJZQWl966Zz4oyFFgBknoNwu81Y'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/blockquote&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3399848674281368473?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3399848674281368473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3399848674281368473'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/sketchy-designs.html' title='Sketchy designs'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-2266744521837022480</id><published>2009-12-10T23:39:00.001-08:00</published><updated>2009-12-10T23:39:23.484-08:00</updated><title type='text'>your mockup prototype as a PDF</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;OK, so this feature is super awesome.  Providing a way to export a mockup, with clickable interaction.  This is awesome.  Today in fact, I sent off a screen full of mockups to some stakeholders, wishing I could demonstrate the flow better than just a bunch of mockup screenshots lined up in a row.&lt;/p&gt;in reference to: &lt;a href='http://konigi.com/notebook/balsamiq-exports-multi-canvas-mockups-single-pdf'&gt;Balsamiq Exports Multi-Canvas Mockups to Single PDF | Konigi&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/Y7AhsqGkRVCZxzAR6hhHd03lftM'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-2266744521837022480?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2266744521837022480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2266744521837022480'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/your-mockup-prototype-as-pdf.html' title='your mockup prototype as a PDF'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-8007632524129515799</id><published>2009-12-10T23:36:00.001-08:00</published><updated>2009-12-10T23:36:07.853-08:00</updated><title type='text'>SketchFlow vs Balsamiq</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Sketch flow looks very neat, and I do really wish that Balsamiq would add the ability to sketch out some of the workflows, and I wish that it would provide stakeholders a player in which to view my mockups, and make their own sketches and marks and comments on it for a bit of historical marking.&lt;/p&gt;in reference to: &lt;a href='http://dotnet.dzone.com/news/why-sketchflow-not-mockup'&gt;Why SketchFlow Is not a Mockup Software | .NET Zone&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/QjKXQg-ZjXJSPFKDSqW_gqez5mc'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-8007632524129515799?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8007632524129515799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8007632524129515799'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/sketchflow-vs-balsamiq.html' title='SketchFlow vs Balsamiq'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-1385848019868747923</id><published>2009-12-10T23:22:00.001-08:00</published><updated>2009-12-10T23:22:05.706-08:00</updated><title type='text'>The Ponzi Scheme that stole my house in Highland</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Some of you may have read earlier in my blog &lt;a href='http://www.fishtells.com/2008/04/lure.html'&gt;http://www.fishtells.com/2008/&lt;wbr/&gt;04/lure.html&lt;/a&gt; concerning the investments that went sour for me.  Well, this is where my money ended up finally.  Misused and abused by Mr. Rick Koerber.  I'm glad he is being indicted and prevented from scamming even more people.&lt;/p&gt;in reference to: &lt;a href='http://www.heraldextra.com/business/local/article_d3ac215e-02af-57a2-a49c-c7bace717234.html'&gt;Rick Koerber pleads not guilty to new criminal charges&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/toN5lfxnkbBeJaRyXxhbLU4zgwE'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-1385848019868747923?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1385848019868747923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1385848019868747923'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/ponzi-scheme-that-stole-my-house-in.html' title='The Ponzi Scheme that stole my house in Highland'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-6965261371191353497</id><published>2009-12-09T12:31:00.001-08:00</published><updated>2009-12-09T12:31:21.251-08:00</updated><title type='text'>drag-select controls inside container</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I just wrote up my pet peeve:&lt;br/&gt;&lt;br/&gt;The other thing I wish Mockups would do is give me an easy way to select the stuff inside of a dialog box, or other container.  I.e. when I want to select the items in a dialog, I often end up selecting the container instead.  I think it would be a little nicer to make the insides of the dialog box not so clickable.  Maybe just the edges of the dialog box clickable would be well enough, then I could group select the controls inside.&lt;br/&gt;&lt;br/&gt;This is meant to solve my problem, but in my latest version of Mockups, this doesn't work.  When I shift drag, I don't get a lasso at all.  In fact, it just appears to annoy me.  Also, I liked the smiley face application icon in my task bar better.  the one you got there now doesn't really look like anything.&lt;/p&gt;in reference to: &lt;p&gt;&lt;blockquote&gt;"holding SHIFT when the mouse is over some controls will ignore them so that you can drag-select other controls. This is a small change but it’s pretty handy, here’s a quick video demonstration:"&lt;br/&gt;- &lt;a href='http://www.balsamiq.com/blog/2009/05/06/weekly-release-failed-to-save-alert-and-other-little-things/'&gt;Balsamiq Company Blog&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/DTeobeiyRQn24tAQjgWeDYbCvTM'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/blockquote&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-6965261371191353497?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6965261371191353497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6965261371191353497'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/drag-select-controls-inside-container.html' title='drag-select controls inside container'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-7157413241895495377</id><published>2009-12-09T12:06:00.001-08:00</published><updated>2009-12-09T12:06:39.143-08:00</updated><title type='text'>Even More improvements for Mockups</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Balsamiq just released their newest version of Mockups, which includes some things that I've wanted, but didn't tell them I wanted.  Somebody else told them though:&lt;br/&gt;- Move dock ui library left, right, top&lt;br/&gt;- dock the properties inspector (it gets in the way sometimes)&lt;br/&gt;&lt;br/&gt;The one I think is the most useful is &lt;br/&gt;- Stretchable Geometric Shapes&lt;br/&gt;&lt;br/&gt;Seems dumb, but when I was making some more general purpose projects for cards night, I wanted some shapes, but I didn't want them to look so blocky.  Now my shapes will look more natural. Way to go Balsamiq!&lt;br/&gt;&lt;br/&gt;Coming up, they have a feature to fix an annoyance I encountered today... moveable document tabs.&lt;br/&gt;&lt;br/&gt;Now, if I could just get them to make a really nice way to do UML.  I alway feel like I'm piecing things together.  &lt;br/&gt;&lt;br/&gt;I realize of course that they made Mockups for screens, but I love to use it for my class diagrams, sequence diagrams and general flow diagrams as well.&lt;/p&gt;in reference to: &lt;a href='http://www.balsamiq.com/blog/2009/12/09/ui-library-improvements/'&gt;Balsamiq Company Blog&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/sm82vQKS6aNIdeUwxeWxTf7xahc'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-7157413241895495377?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7157413241895495377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7157413241895495377'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/even-more-improvements-for-mockups.html' title='Even More improvements for Mockups'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-6196378676701318663</id><published>2009-12-09T10:14:00.001-08:00</published><updated>2009-12-09T10:14:42.554-08:00</updated><title type='text'>A DSL for processing Web Service Results</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;My latest project included the requirement to process web service results in a generic way.  I thought to myself... This is a job for Groovy Script!&lt;br/&gt;&lt;br/&gt;But it became somewhat troublesome as these scripts would be written by non engineers, and it also opened up some security risks.&lt;br/&gt;&lt;br/&gt;So, now the question remains, how would I then secure these results processing scripts, while also making them easier to write from 'services' types of folks?&lt;/p&gt;in reference to: &lt;a href='http://groovy.dzone.com/news/domain-specific-language-unit%2d'&gt;A Domain-Specific Language for unit manipulations | Groovy Zone&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/GfvZET3f8jrFPfxNErpKt_UABlQ'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-6196378676701318663?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6196378676701318663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6196378676701318663'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/dsl-for-processing-web-service-results.html' title='A DSL for processing Web Service Results'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3343668870203706862</id><published>2009-12-05T10:36:00.000-08:00</published><updated>2009-12-05T10:38:49.572-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='followers'/><category scheme='http://www.blogger.com/atom/ns#' term='subscribe.'/><title type='text'>Follow the blog</title><content type='html'>I just added the follow my blog functionality.  Why not follow my blog.  I post on lots of stuff to make your development more productive.  Just click on the follow link on the side.  Then when I post something new, you'll be notified, and maybe you can put something great into your project too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3343668870203706862?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3343668870203706862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3343668870203706862'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/follow-blog.html' title='Follow the blog'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-2110714048029797412</id><published>2009-12-05T10:24:00.001-08:00</published><updated>2009-12-05T10:29:51.782-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mockups'/><category scheme='http://www.blogger.com/atom/ns#' term='design tools'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Prototyping'/><category scheme='http://www.blogger.com/atom/ns#' term='UI Specification'/><category scheme='http://www.blogger.com/atom/ns#' term='Screen Specification'/><title type='text'>Design Mockups, realtime, real easy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SxqmPAgPxKI/AAAAAAAAAM0/IYxvQl4_znY/s1600-h/unscheduled+payment.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 108px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SxqmPAgPxKI/AAAAAAAAAM0/IYxvQl4_znY/s200/unscheduled+payment.png" alt="" id="BLOGGER_PHOTO_ID_5411820679002571938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SxqlxagqfpI/AAAAAAAAAMk/0x1AxznXiOw/s1600-h/Draft+Bank+File.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 189px; height: 200px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SxqlxagqfpI/AAAAAAAAAMk/0x1AxznXiOw/s200/Draft+Bank+File.png" alt="" id="BLOGGER_PHOTO_ID_5411820170587569810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/Sxqlozl3isI/AAAAAAAAAMc/4JNr8fLDues/s1600-h/Add+Account+with+Billing.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 190px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/Sxqlozl3isI/AAAAAAAAAMc/4JNr8fLDues/s200/Add+Account+with+Billing.png" alt="" id="BLOGGER_PHOTO_ID_5411820022701460162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A few months ago, I introduced Balsamiq mockups into my project because using Excel spreadsheets to design my screens was just stupid.  I couldn't really 'communicate' with the rest of the team in India.&lt;br /&gt;&lt;br /&gt;I still remember the night when I pulled this out.  I remember Amit from Intelligrape in India happily exclaimed, with hope in his timbre, "Oh Brent, this is going to be so much better for us.  Thank you."&lt;br /&gt;&lt;br /&gt;He was right.  It has increased the team velocity tremendously.  We are able to work through the screens in realtime over YuuGuu, drilling down to the finest points of the design.&lt;br /&gt;&lt;br /&gt;Here are a couple of the screen shots.  We even use it for some class diagrams and sequence diagrams.&lt;/p&gt;&lt;br /&gt;in reference to: &lt;a href="http://www.balsamiq.com/products/mockups"&gt;Balsamiq Mockups Home | Balsamiq&lt;/a&gt; (&lt;a href="http://www.google.com/sidewiki/entry/103318400956219239557/id/smtO3PuwlgSRU9QBUcvpXV55Y3A"&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-2110714048029797412?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2110714048029797412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2110714048029797412'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/design-mockups-realtime-real-easy.html' title='Design Mockups, realtime, real easy'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/SxqmPAgPxKI/AAAAAAAAAM0/IYxvQl4_znY/s72-c/unscheduled+payment.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3411288511638565357</id><published>2009-12-05T10:01:00.001-08:00</published><updated>2009-12-05T10:01:22.206-08:00</updated><title type='text'>Getting a signed in user in Grails tests</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I found this to be helpful.  I just needed one more piece of information.&lt;br/&gt;&lt;br/&gt;    def subject = [&lt;br/&gt;          isAuthenticated: true,&lt;br/&gt;          principal: "admin"&lt;br/&gt;      ] as Subject&lt;br/&gt;&lt;br/&gt;      SecurityUtils.metaClass.&lt;wbr/&gt;static.getSubject = {-&amp;gt; return subject }&lt;br/&gt;      Subject.metaClass.getPrincipal = {-&amp;gt; return "admin" }&lt;br/&gt;&lt;br/&gt;This way, when I needed the user later on in the code, when I called getPrincipal, I got it.  E.g.&lt;br/&gt;&lt;br/&gt;    JsecUser currentUser = JsecUser.findByUsername(&lt;wbr/&gt;SecurityUtils.getSubject()?.&lt;wbr/&gt;getPrincipal());&lt;/p&gt;in reference to: &lt;p&gt;&lt;blockquote&gt;"void setUp() {       def subject = [           isAuthenticated: false,           ...       ] as Subject       SecurityUtils.metaClass.static.getSubject = {-&amp;gt; return subject }       ...   }"&lt;br/&gt;- &lt;a href='http://old.nabble.com/JSecurity-Plugin-and-Integration-Tests-td18314045.html'&gt;Nabble - grails - user - JSecurity-Plugin and Integration-Tests&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/ULGgRN92IjKveL0t5wdGIgAWPIQ'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/blockquote&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3411288511638565357?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3411288511638565357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3411288511638565357'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/getting-signed-in-user-in-grails-tests.html' title='Getting a signed in user in Grails tests'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-1008848690270056046</id><published>2009-12-03T08:09:00.001-08:00</published><updated>2009-12-03T08:09:16.235-08:00</updated><title type='text'>Class Diagram needs class groups selector</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I love this plugin, but it really needs a way to graphically select some domain classes and delegate them to a diagram I could select from a menu or pick list or something.&lt;/p&gt;in reference to: &lt;p&gt;&lt;blockquote&gt;"You may change diagram preferences defaults in your projects configuration file (Config.groovy)."&lt;br/&gt;- &lt;a href='http://www.grails.org/plugin/class-diagram'&gt;Grails Plugin - Class diagram plugin&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/JxQwSsec6jrO8HXWE-e1LFZIzT4'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/blockquote&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-1008848690270056046?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1008848690270056046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1008848690270056046'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/class-diagram-needs-class-groups.html' title='Class Diagram needs class groups selector'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-701162229475187535</id><published>2009-12-03T08:01:00.001-08:00</published><updated>2009-12-03T08:01:17.232-08:00</updated><title type='text'>Seems pretty cool.</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I think I like this Side Wiki.  Now, if it would only let me highlight stuff for context, etc, I would love that.&lt;/p&gt;in reference to: &lt;a href='http://www.google.com/sidewiki/intl/en/done.html'&gt;Google Sidewiki&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/103318400956219239557/id/HM_J21XI7YXV26DRI2T7LQfJpJI'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-701162229475187535?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/701162229475187535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/701162229475187535'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/12/seems-pretty-cool.html' title='Seems pretty cool.'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-6422356409096690410</id><published>2009-10-26T16:31:00.000-07:00</published><updated>2009-10-26T16:51:46.036-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game creation'/><category scheme='http://www.blogger.com/atom/ns#' term='game maker'/><category scheme='http://www.blogger.com/atom/ns#' term='video games'/><category scheme='http://www.blogger.com/atom/ns#' term='scratch'/><title type='text'>Game Maker.... pretty cool</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SuY1cdIeHpI/AAAAAAAAAMU/FIVMvkRpWAM/s1600-h/scratch.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 155px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SuY1cdIeHpI/AAAAAAAAAMU/FIVMvkRpWAM/s200/scratch.PNG" alt="" id="BLOGGER_PHOTO_ID_5397059966422883986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Last Weekend, I spent Saturday Morning volunteering my time with students from my son's charter school, &lt;a href="http://mountainvilleacademy.org/"&gt;Mountainville Academy&lt;/a&gt;.  I hosted a workshop on the fun and accessible multimedia project/game factory called &lt;a href="http://scratch.mit.edu/"&gt;Scratch&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We went for 3 hours in smaller instructional periods, followed by hands on time.  In my opinion, it was all very successful.  We covered nearly half of the scratch blocks in the time allotted, and I could begin to see some nice projects coming along.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SuYzRRrF_VI/AAAAAAAAAME/IROYEm0HH8U/s1600-h/yoyogames.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 232px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SuYzRRrF_VI/AAAAAAAAAME/IROYEm0HH8U/s320/yoyogames.PNG" alt="" id="BLOGGER_PHOTO_ID_5397057575345061202" border="0" /&gt;&lt;/a&gt;During that time, one of the students mentioned another game making software package called &lt;a href="http://www.yoyogames.com/"&gt;'Game Maker', hosted at YoYo Games&lt;/a&gt;.  I downloaded it and began playing with it a little bit.  It had some truly brilliant features that were definitely missing from Scratch.  However, it does appear less accessible than Scratch.  I.e. I think Scratch hits my 5th graders really well, producing good projects in just a few hours.  GameMaker is meant for High Schoolers and beyond, it would seem.&lt;br /&gt;&lt;br /&gt;One thing I liked though, were some of the tutorials, including this one: &lt;a href="http://www.yoyogames.com/make/tutorials"&gt;What is a good game.&lt;/a&gt;  I recommend that if you are in my class, you read it.  It will help guide you in your game creation so that after you spend all that time building the game, people will want to spend time playing it.&lt;br /&gt;&lt;br /&gt;For those in my class, I want to see all of your scratch projects.  I have created a scratch gallery called Mountainville Academy  projects located &lt;a href="http://scratch.mit.edu/galleries/view/59044"&gt;here&lt;/a&gt;.  Take a moment to take a look at some of the projects there, and to put your own in there as well.  I'll see you all on Halloween!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-6422356409096690410?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6422356409096690410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6422356409096690410'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/10/game-maker-pretty-cool.html' title='Game Maker.... pretty cool'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/SuY1cdIeHpI/AAAAAAAAAMU/FIVMvkRpWAM/s72-c/scratch.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-8972210033221960903</id><published>2009-07-07T15:19:00.000-07:00</published><updated>2009-07-07T15:40:25.304-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='GraphViz'/><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise Patterns And Archetypes'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><category scheme='http://www.blogger.com/atom/ns#' term='GORM'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Using GraphViz to automatically Diagram your Grails Domain Model</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SlPOK0rDHHI/AAAAAAAAALQ/rhNDvbI4N9U/s1600-h/index.jpeg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 128px; height: 267px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SlPOK0rDHHI/AAAAAAAAALQ/rhNDvbI4N9U/s400/index.jpeg" alt="" id="BLOGGER_PHOTO_ID_5355851067206868082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm working on a feature that automatically diagrams the Domain model stored in Grails, similar to the method prototyped by the Curious Bunny &lt;a href="http://curious-attempt-bunny.blogspot.com/2008/07/grails-domain-diagram-using-graphviz.html"&gt;here&lt;/a&gt;.  His example works pretty well for a simple model, but begins to break down due to a seeming Grails limitation.&lt;br /&gt;&lt;br /&gt;In my model, I have a Party, Organization and Company class.  Company extends Organization, Organization extends Party.&lt;br /&gt;Party &lt;--- Organization &lt; --- Company  Inside of my Controller that produces the Graph, I iterate through a classes subclasses like so: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;domainClass.subClasses.each {subClass -&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;         out.println """"$domainClass.name" -&gt; "$subClass.name" """&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This works ok, but when this is run on Company, both Party and Organization are in the set.  In a UML diagram, I don't really want both of them, I only want one of them.  I.e. it produces a diagram that is more cluttered than it needs to be.&lt;br /&gt;&lt;br /&gt;This diagram represents a simplified subset of my domain, based off the Party Pattern Archetype in the book: &lt;a class="tenpxBold" href="http://my.safaribooksonline.com/032111230X" title="Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML"&gt;Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notice the redundant inheritance.&lt;br /&gt;&lt;br /&gt;Anybody know how to only get direct subclasses, instead of recursive subclasses?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-8972210033221960903?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8972210033221960903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8972210033221960903'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/07/using-graphviz-to-automatically-diagram.html' title='Using GraphViz to automatically Diagram your Grails Domain Model'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/SlPOK0rDHHI/AAAAAAAAALQ/rhNDvbI4N9U/s72-c/index.jpeg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-126784181327597214</id><published>2009-04-21T15:11:00.001-07:00</published><updated>2009-04-21T15:23:48.716-07:00</updated><title type='text'>Blog host</title><content type='html'>So, I'm trying to figure out how to host my own blog.  Steve Pavlina &lt;a href="http://www.stevepavlina.com/blog/2006/05/how-to-make-money-from-your-blog/"&gt;suggests &lt;/a&gt;that I host it with its own domain name, using this domain provider Pair, and ServInt VPS using wordpress.  It sounds like a brilliant idea, but I'm not too familiar with PHP.&lt;br /&gt;&lt;br /&gt;Since I'm already very familiar with Java and JSP etc, I was wondering if there exists some sort of WordPress for java.  Apparently there is, or I can get a free account at WordPress itself, but then they get all of the ad revenue.&lt;br /&gt;&lt;br /&gt;My sister-in-law has her own blog called theliteratemother.org that is hosted on wordpress as well.  It seems to be pretty cool, and maybe more like what I'm looking for.&lt;br /&gt;&lt;br /&gt;Otherwise, I'm looking at spending at least $50/month to host it where Steve Pavlina suggests.  I.e. ServInt.&lt;br /&gt;&lt;br /&gt;Seems like I should at least as Bridget where she hosts hers, I suppose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-126784181327597214?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/126784181327597214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/126784181327597214'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/04/blog-host.html' title='Blog host'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3165409643775082629</id><published>2009-04-21T13:32:00.000-07:00</published><updated>2009-04-22T09:21:38.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caching'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Hibernate Caching</title><content type='html'>I've been working on getting Hibernate caching to work at work to implement a new feature from Product Management. The original requirements suggested rolling our own caching mechanism, but since our application already has hibernate, it doesn't seem to make sense to roll our own.&lt;br /&gt;&lt;br /&gt;Early investigation lead me &lt;a href="http://www.devx.com/dbzone/Article/29685/1954"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;A wonderful article about hibernate caching. Since our application uses xdoclet for defining hibernate mapping, it wasn't quite complete.&lt;br /&gt;&lt;br /&gt;But I really like the analysis because it displays rather clearly how much faster it runs with the caching thrown in.&lt;br /&gt;&lt;br /&gt;I'm tempted as well to perform a similar analysis. The article talks about caching the object, and the relationships to the object, which are essential for my problem as well because I have a hierarchy in my objects of Parent -&gt; child. My object is called the Domain Object.&lt;br /&gt;&lt;br /&gt;the hbm_xml would be this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;cache usage="read-write"&gt;&lt;br /&gt;&lt;/cache&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The xdoclet then would be (found &lt;a href="http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html#@hibernate_cache__0__1_"&gt;here&lt;/a&gt;):&lt;br /&gt;/**&lt;br /&gt;* @author petersmiley&lt;br /&gt;*&lt;br /&gt;* @hibernate.class table="Domains" dynamic-insert="true" dynamic-update="true" optimistic-lock="version"&lt;br /&gt;* &lt;span style="font-weight: bold;"&gt;@hibernate.cache usage="read-only"&lt;/span&gt;&lt;br /&gt;* @struts.form "DomainForm"&lt;br /&gt;*&lt;br /&gt;* @auditable.property entity-name="audit.entity.domain"&lt;br /&gt;*/&lt;br /&gt;public class Domain extends BaseObject implements Auditable, Comparable {&lt;br /&gt;.... and the link back to the parent:&lt;br /&gt;  /**&lt;br /&gt;  * @struts.form-field  form-name="parentDomain"&lt;br /&gt;   * @hibernate.cache usage="read-write"&lt;br /&gt;   *  @hibernate.many-to-one&lt;br /&gt;   *     column="PARENT_ID"&lt;br /&gt;   *     class="com.norkom.base.resources.model.Domain"&lt;br /&gt;   *     not-null="false"&lt;br /&gt;   *     unique="false"&lt;br /&gt;   *     --cascade="none"&lt;br /&gt;   *     --outer-join="false""&lt;br /&gt;   *  &lt;br /&gt;   * @auditable.property identified-by="parent.domain"&lt;br /&gt;  */&lt;br /&gt;  public Domain getParentDomain()  {&lt;br /&gt;      return parentDomain;&lt;br /&gt;  }&lt;br /&gt;  public void setParentDomain(Domain parentDomain)  {&lt;br /&gt;      this.parentDomain = parentDomain;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;Note: if you use "read-only" then don't expect to be able to put any objects into the database. When it says read-only, it means it! (I tried it. I had to change to read-write)&lt;br /&gt;&lt;br /&gt;Here is my unit test:&lt;br /&gt;  public void testCachedCrud() {&lt;br /&gt;      List list = domainDao.getAllDomains();&lt;br /&gt;      assertEquals(0, list.size());&lt;br /&gt;      TestTimer createDomainsTimer = new TestTimer("test Create Domains");&lt;br /&gt;      int size = 10;&lt;br /&gt;      for (int i=0;i&lt;size;i++){&gt;&lt;br /&gt;          Domain parentDomain = createBasicDomain(PARENT_DOMAIN_NAME + i);&lt;br /&gt;          for(int j=0;j&lt;size;j++){&gt;&lt;br /&gt;              Domain childDomain = createBasicDomain(CHILD_DOMAIN_DOMAIN + i + ":" + j);&lt;br /&gt;              childDomain.setParentDomain(parentDomain);&lt;br /&gt;              domainDao.saveDomain(childDomain);&lt;br /&gt;          }&lt;br /&gt;          domainDao.saveDomain(parentDomain);&lt;br /&gt;      }&lt;br /&gt;      createDomainsTimer.done();&lt;br /&gt;&lt;br /&gt;      for (int i=0;i&lt;size;i++){&gt;&lt;br /&gt;          TestTimer timer = new TestTimer("test Get Domains" + i);&lt;br /&gt;          Domain parentDomain = domainDao.getDomainByName(PARENT_DOMAIN_NAME + i);         &lt;br /&gt;          timer.done();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;Results, with cacheing:&lt;br /&gt;&lt;/size;i++){&gt;&lt;/size;j++){&gt;&lt;/size;i++){&gt;&lt;pre&gt;INFO [DomainDaoImplTest] -&amp;gt; Loading config for: /com/norkom/base/business/dao/impl/test-context.xml&lt;br /&gt;EMMA: collecting runtime coverage data ...&lt;br /&gt;WARN [Configurator] -&amp;gt; No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/C:/work/trunk/SUBVERSION/Libs/hibernate/2.1.8/ehcache-0.9.jar!/ehcache-failsafe.xml&lt;br /&gt;WARN [EhCacheProvider] -&amp;gt; Could not find configuration [com.norkom.base.resources.model.Domain]; using defaults.&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Create Domains: 140 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains0: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains1: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains2: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains3: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains4: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains5: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains6: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains7: 0 ms&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains8: 0 ms&lt;br /&gt;&lt;br /&gt;Now, lets try without caching...&lt;br /&gt;DEBUG [TestTimer] -&amp;gt; test Get Domains9: 0 ms&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;size;i++){&gt;&lt;size;j++){&gt;&lt;size;i++){&gt;&lt;br /&gt;&lt;br /&gt;&lt;/size;i++){&gt;&lt;/size;j++){&gt;&lt;/size;i++){&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3165409643775082629?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3165409643775082629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3165409643775082629'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/04/hibernate-caching.html' title='Hibernate Caching'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-8726537814923424842</id><published>2009-03-24T23:09:00.001-07:00</published><updated>2009-03-24T23:11:47.893-07:00</updated><title type='text'>Real Guitar Hero!</title><content type='html'>I've been wondering if there is a way to do Soft Mozart for Guitar, perhaps by reflectors on the guitar and shining an infrared light at it, using some tracking points on the guitar itself, and the WiiMote camera to track which strings are plucked, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-8726537814923424842?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8726537814923424842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/8726537814923424842'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/03/real-guitar-hero.html' title='Real Guitar Hero!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-6156872050267777428</id><published>2009-03-24T20:59:00.000-07:00</published><updated>2009-03-24T21:19:42.405-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JFugue'/><category scheme='http://www.blogger.com/atom/ns#' term='Midi'/><category scheme='http://www.blogger.com/atom/ns#' term='breakout'/><category scheme='http://www.blogger.com/atom/ns#' term='entrepreneur software educational software'/><category scheme='http://www.blogger.com/atom/ns#' term='piano'/><category scheme='http://www.blogger.com/atom/ns#' term='Pulpcore'/><title type='text'>Keyboard Breakout</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/Scmt0BGkZ2I/AAAAAAAAAIw/SRyTSKBqsf8/s1600-h/keyboard+breakout.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5316971944248371042" style="margin: 0px 0px 10px 10px; float: right; width: 186px; height: 200px;" alt="" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/Scmt0BGkZ2I/AAAAAAAAAIw/SRyTSKBqsf8/s200/keyboard+breakout.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;So, I just bought a keyboard along with some cool educational software called Soft Mozart to help teach my kids how to play music on the piano.&lt;br /&gt;&lt;br /&gt;Since I'm such a geek, I also created a little game that uses the keyboard to play breakout.&lt;br /&gt;&lt;br /&gt;Here is a screenshot. &lt;/div&gt;&lt;br /&gt;&lt;p&gt;You've got to have a midi keyboard plugged in to try it out.  It uses JFugue for the Midi, and my old standbye, PulpCore for the game engine.&lt;/p&gt;&lt;p&gt;You can play it here: &lt;a href="http://www.fishnetgames.net/games/breakout/index.html"&gt;http://www.fishnetgames.net/games/breakout/index.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-6156872050267777428?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6156872050267777428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6156872050267777428'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2009/03/keyboard-breakout.html' title='Keyboard Breakout'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/Scmt0BGkZ2I/AAAAAAAAAIw/SRyTSKBqsf8/s72-c/keyboard+breakout.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-5312593289822045524</id><published>2008-12-10T08:20:00.001-08:00</published><updated>2008-12-10T12:39:31.859-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GIMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphic Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Glossy Text'/><category scheme='http://www.blogger.com/atom/ns#' term='Reflection'/><title type='text'>How to make shiny letters with the GIMP</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST_uvoc75SI/AAAAAAAAAGg/2-0m7TfV1OA/s1600-h/Step1.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 94px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST_uvoc75SI/AAAAAAAAAGg/2-0m7TfV1OA/s200/Step1.PNG" alt="" id="BLOGGER_PHOTO_ID_5278199790381557026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I made shiny letters using the GIMP for my fishnet games website.  I saw a tutorial on &lt;a href="http://www.youtube.com/watch?v=M2LFWYhEyWs"&gt;Youtube&lt;/a&gt;.  But it didn't have any audio (or it was in German).&lt;br /&gt;&lt;br /&gt;Here is how I ended up doing it:&lt;br /&gt;1.   Create a new image and put some text with the font you like:&lt;br /&gt;&lt;br /&gt;2. Turn the text into a selection.  Right click on the text layer, scroll down, click alpha to selection, then delete the text layer itself.  Select the Text layer, click on the little garbage can.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/ST_wEsNSEqI/AAAAAAAAAGw/LLdwb1xpLYo/s1600-h/Step2a.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 94px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/ST_wEsNSEqI/AAAAAAAAAGw/LLdwb1xpLYo/s200/Step2a.PNG" alt="" id="BLOGGER_PHOTO_ID_5278201251678524066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/ST_vszclwCI/AAAAAAAAAGo/g1LliDTGHcE/s1600-h/Step2.PNG"&gt;&lt;img style="cursor: pointer; width: 177px; height: 200px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/ST_vszclwCI/AAAAAAAAAGo/g1LliDTGHcE/s200/Step2.PNG" alt="" id="BLOGGER_PHOTO_ID_5278200841304916002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.  Select the 'blend tool', and select the color gradient you want to use.  Choose your colors.  I'm doing red to white.  Using the &lt;span style="font-style: italic;"&gt;blend tool&lt;/span&gt;, draw the line across the selection:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST_xpwam98I/AAAAAAAAAG4/UnAMKoMA4Q8/s1600-h/step3.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 104px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST_xpwam98I/AAAAAAAAAG4/UnAMKoMA4Q8/s200/step3.PNG" alt="" id="BLOGGER_PHOTO_ID_5278202987974948802" border="0" /&gt;&lt;/a&gt;This produces a good start.&lt;br /&gt;&lt;br /&gt;4. Produce the outline.&lt;br /&gt;To produce the outline, expand the selection by a few pixels using the 'selection grow' tool.  Find it under the menu Select/grow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dOg4Ljp3kh8/ST_yrbySFQI/AAAAAAAAAHA/4NVbftP4UFM/s1600-h/step4.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 116px;" src="http://1.bp.blogspot.com/_dOg4Ljp3kh8/ST_yrbySFQI/AAAAAAAAAHA/4NVbftP4UFM/s200/step4.PNG" alt="" id="BLOGGER_PHOTO_ID_5278204116308464898" border="0" /&gt;&lt;/a&gt;I'm using 2 pixels for this example.  Create a new layer to color in the outline.  Fill in the selection with your desired color using the 'bucket fill tool'.  Rearrange the layers so that the fill layer is on the bottom of the text.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/ST_zyHQihZI/AAAAAAAAAHI/ryGw8AhK5ms/s1600-h/step4a.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 152px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/ST_zyHQihZI/AAAAAAAAAHI/ryGw8AhK5ms/s200/step4a.PNG" alt="" id="BLOGGER_PHOTO_ID_5278205330568938898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It should now look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dOg4Ljp3kh8/ST_0Nnx9-MI/AAAAAAAAAHQ/BFukUrvPW4w/s1600-h/step4b.PNG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 104px;" src="http://1.bp.blogspot.com/_dOg4Ljp3kh8/ST_0Nnx9-MI/AAAAAAAAAHQ/BFukUrvPW4w/s200/step4b.PNG" alt="" id="BLOGGER_PHOTO_ID_5278205803155552450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. Make the Candy gloss.  I think the gloss is produced by kind of simulating a reflection of an irridescent ambient object, like a lamp shade or something, on the text.  To do this, select the layer of text that is on the top, then select 'alpha to selection', as we did before.&lt;br /&gt;Now select the elliptical selection tool, and choose the 'subtract from current selection' option.&lt;br /&gt;&lt;br /&gt;Make a selection that spreads across the letters like the sunrise:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/ST_4cm58KSI/AAAAAAAAAHY/8uTyc7ksQuA/s1600-h/step5a.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 130px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/ST_4cm58KSI/AAAAAAAAAHY/8uTyc7ksQuA/s200/step5a.PNG" alt="" id="BLOGGER_PHOTO_ID_5278210458665101602" border="0" /&gt;&lt;/a&gt;Now, we are just going to draw another gradient into this selection.  Create a new layer for this to occur in, select the gradient tool, go from white to somewhat pink, and try a few gradients until it looks right.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SUAhSsFr0FI/AAAAAAAAAHw/th3YMHEb2c8/s1600-h/step5b.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 130px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SUAhSsFr0FI/AAAAAAAAAHw/th3YMHEb2c8/s200/step5b.PNG" alt="" id="BLOGGER_PHOTO_ID_5278255368234586194" border="0" /&gt;&lt;/a&gt;Play with the layer opacity a little bit to get just the look you want.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/SUAncfpWtgI/AAAAAAAAAIA/QH2uUVmCiEk/s1600-h/step6a.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 151px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/SUAncfpWtgI/AAAAAAAAAIA/QH2uUVmCiEk/s200/step6a.PNG" alt="" id="BLOGGER_PHOTO_ID_5278262133762995714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;6. A reflection&lt;br /&gt;&lt;br /&gt;I added a reflection using the reflection script from here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/gimp-reflection/"&gt;http://code.google.com/p/gimp-reflection/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now I de-select everything, auto-crop the image, and selected Filters/decor/reflection, and choose the parameters you like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dOg4Ljp3kh8/SUAolq1dHxI/AAAAAAAAAII/ymvG0Y2Jpao/s1600-h/step6a.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 163px;" src="http://2.bp.blogspot.com/_dOg4Ljp3kh8/SUAolq1dHxI/AAAAAAAAAII/ymvG0Y2Jpao/s200/step6a.PNG" alt="" id="BLOGGER_PHOTO_ID_5278263390896987922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now you can put that on your webpage, and it looks beautiful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-5312593289822045524?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/5312593289822045524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/5312593289822045524'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/12/how-to-make-shiny-letters-with-gimp.html' title='How to make shiny letters with the GIMP'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST_uvoc75SI/AAAAAAAAAGg/2-0m7TfV1OA/s72-c/Step1.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-6479628081485988980</id><published>2008-12-09T17:00:00.000-08:00</published><updated>2008-12-09T17:03:32.880-08:00</updated><title type='text'>Cool new landing page made from The GIMP</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST8U9u-XsEI/AAAAAAAAAGY/BKJkpCPUzHM/s1600-h/homepage.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST8U9u-XsEI/AAAAAAAAAGY/BKJkpCPUzHM/s200/homepage.png" alt="" id="BLOGGER_PHOTO_ID_5277960339115716674" border="0" /&gt;&lt;/a&gt;Although, I haven't used the GIMP very much, I downloaded the Reflection Script, added perspective to some screenshots, watched a you tube tutorial on making words shiny, and walla.  A much cooler website!&lt;br /&gt;&lt;br /&gt;If you have a minute, why don't you go to &lt;a href="http://www.fishnetgames.net"&gt;www.fishnetgames.net&lt;/a&gt; and play a couple of games!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-6479628081485988980?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6479628081485988980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/6479628081485988980'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/12/cool-new-landing-page-made-from-gimp.html' title='Cool new landing page made from The GIMP'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST8U9u-XsEI/AAAAAAAAAGY/BKJkpCPUzHM/s72-c/homepage.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-233171418839935462</id><published>2008-12-08T22:41:00.000-08:00</published><updated>2008-12-08T22:42:49.712-08:00</updated><title type='text'>I spy (christmas letter)</title><content type='html'>I was thinking how fun it would be to have a christmas letter that has an I spy game built in.  You have tons of pictures, representing something from the year for people in the family.  Folks click on those items to read about that part of the year.  I think it would be cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-233171418839935462?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/233171418839935462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/233171418839935462'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/12/i-spy-christmas-letter.html' title='I spy (christmas letter)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-2551467973644070886</id><published>2008-12-08T22:36:00.000-08:00</published><updated>2008-12-08T22:41:15.878-08:00</updated><title type='text'>Snowball Fight!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST4TBMVCcnI/AAAAAAAAAGQ/tOWnsBy4G28/s1600-h/sf.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 176px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST4TBMVCcnI/AAAAAAAAAGQ/tOWnsBy4G28/s200/sf.png" alt="" id="BLOGGER_PHOTO_ID_5277676724535063154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Battle against a gingerbread man and Santa!  Throw snowballs at them, and they throw them at you.  Hide behind your snow barrier, and dodge their snowballs.&lt;br /&gt;&lt;br /&gt;Aim with a christmas wreath!&lt;br /&gt;&lt;br /&gt;Try it out at :  &lt;a href="http://www.fishnetgames.net/"&gt;http://w&lt;/a&gt;&lt;a href="http://www.fishnetgames.net/"&gt;ww.fishnetgames.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-2551467973644070886?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2551467973644070886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2551467973644070886'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/12/snowball-fight.html' title='Snowball Fight!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/ST4TBMVCcnI/AAAAAAAAAGQ/tOWnsBy4G28/s72-c/sf.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3661635969036290173</id><published>2008-12-01T15:14:00.000-08:00</published><updated>2008-12-01T15:31:55.643-08:00</updated><title type='text'>Ball Pit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/STRwJOihIUI/AAAAAAAAAF4/-08mhDo0D8Y/s1600-h/ball-concept.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/STRwJOihIUI/AAAAAAAAAF4/-08mhDo0D8Y/s320/ball-concept.png" alt="" id="BLOGGER_PHOTO_ID_5274964367381700930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just now though, I had an idea for a casual game today.  Refer to the image.&lt;br /&gt;&lt;br /&gt;I was thinking that it might be a fun game to have these balls in a basket.  The balls have different receptors on them.  You have to match up the receptors to get a match.&lt;br /&gt;&lt;br /&gt;Kind of basic still, obviously...&lt;br /&gt;&lt;br /&gt;you match up the dots by rotating the ball, but when you 'rotate' a ball, other balls around it rotate as well.&lt;br /&gt;&lt;br /&gt;Maybe there is a little tube that feeds this.&lt;br /&gt;&lt;br /&gt;Maybe this is the liver and it is trying to get rid of contaminants.  Hard to tell exactly.  You've got to get rid of the contaminants before the liver fills up.  As the levels progress, it gets more contaminants, and so matches are more difficult to come by.&lt;br /&gt;Maybe you have to match up more than 1-to-1, maybe you have to make a string of three or more.&lt;br /&gt;&lt;br /&gt;Maybe you have to make DNA strands to ward off cancer.  It's just a thought for right now.&lt;br /&gt;&lt;br /&gt;Any thoughts?&lt;br /&gt;&lt;br /&gt;Maybe the balls are sticky... so that when you rotate a ball, the stuff around it rotates as well, so that you have to calculate how to rotate the balls.  Maybe only the balls that directly touch your ball are sticky.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dOg4Ljp3kh8/STRzn5EnhwI/AAAAAAAAAGA/drXAI53cjZM/s1600-h/ball-concept-band.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_dOg4Ljp3kh8/STRzn5EnhwI/AAAAAAAAAGA/drXAI53cjZM/s200/ball-concept-band.png" alt="" id="BLOGGER_PHOTO_ID_5274968192729974530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;maybe these are gears to a machine, and you have to wrap a band around them.  The band is sticky to the balls and rotates the balls as its is pulled through the bowl of balls.&lt;br /&gt;&lt;br /&gt;Maybe the band gets shorter, or longer with the different levels.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3661635969036290173?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3661635969036290173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3661635969036290173'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/12/ball-pit.html' title='Ball Pit'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/STRwJOihIUI/AAAAAAAAAF4/-08mhDo0D8Y/s72-c/ball-concept.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-2938311031110540532</id><published>2008-11-25T21:29:00.000-08:00</published><updated>2008-11-25T21:33:29.033-08:00</updated><title type='text'>Dragging a shadow around.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSzfk7uhtdI/AAAAAAAAAFo/wrtnc67tnVk/s1600-h/traffic-jam.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 161px; height: 200px;" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSzfk7uhtdI/AAAAAAAAAFo/wrtnc67tnVk/s200/traffic-jam.png" alt="" id="BLOGGER_PHOTO_ID_5272835089345131986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So, I think I got it.  Everybody take a look, give it a try.  You can&lt;br /&gt;drag the car's 'shadow' and then release when you get it where you&lt;br /&gt;want, then it loads up the points.&lt;br /&gt;&lt;p&gt;Next up, I'm a gonna integrate my high score server, I think.&lt;br /&gt;&lt;/p&gt;But I'd love anymore feedback you all might have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-2938311031110540532?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2938311031110540532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2938311031110540532'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/11/dragging-shadow-around.html' title='Dragging a shadow around.'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSzfk7uhtdI/AAAAAAAAAFo/wrtnc67tnVk/s72-c/traffic-jam.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-7228143710791993060</id><published>2008-11-23T21:18:00.001-08:00</published><updated>2008-11-23T21:24:43.465-08:00</updated><title type='text'>trouble with drag and drop interface</title><content type='html'>I've just about got drag and drop interface worked out, but it doesn't quite feel natural enough.  Give it a try, and maybe if you have some pointers, let me know:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fishnetgames.net/games/trafficjam/index.html"&gt;http://www.fishnetgames.net/games/trafficjam/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-7228143710791993060?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7228143710791993060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7228143710791993060'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/11/trouble-with-drag-and-drop-interface.html' title='trouble with drag and drop interface'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-1601146354465766806</id><published>2008-11-22T22:41:00.000-08:00</published><updated>2008-11-22T22:51:43.906-08:00</updated><title type='text'>Traffic Jam &amp; Gimp, and the outline filter</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dOg4Ljp3kh8/SSj9ZOm69xI/AAAAAAAAAFg/zD86U6Z_CfM/s1600-h/gameboard-with-selection.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 161px; height: 200px;" src="http://1.bp.blogspot.com/_dOg4Ljp3kh8/SSj9ZOm69xI/AAAAAAAAAFg/zD86U6Z_CfM/s200/gameboard-with-selection.JPG" alt="" id="BLOGGER_PHOTO_ID_5271741973697066770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I like the way that the vegetables are outlined in Milpa and David said you could probably do it with Gimp.  So I downloaded gimp, and sure enough, it was pretty easy to do.&lt;br /&gt;&lt;br /&gt;I also love the way that gimp can have the differing alpha values so that the sprites have transparencies.&lt;br /&gt;&lt;br /&gt;It was pretty cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-1601146354465766806?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1601146354465766806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1601146354465766806'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/11/traffic-jam-gimp-and-outline-filter.html' title='Traffic Jam &amp; Gimp, and the outline filter'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dOg4Ljp3kh8/SSj9ZOm69xI/AAAAAAAAAFg/zD86U6Z_CfM/s72-c/gameboard-with-selection.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-1221371186954084237</id><published>2008-11-21T16:32:00.000-08:00</published><updated>2008-11-21T16:38:27.198-08:00</updated><title type='text'>Ludum Dare (A video game competition)</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSdUWQ5AnRI/AAAAAAAAAFY/tzGH8uo158E/s1600-h/incomingfodder_title.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5271274630328392978" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 200px; CURSOR: hand; HEIGHT: 150px" alt="" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSdUWQ5AnRI/AAAAAAAAAFY/tzGH8uo158E/s200/incomingfodder_title.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I just stumbled on the 48 hour game contest.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.ludumdare.com/"&gt;http://www.ludumdare.com/&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;They give you a theme, and then contest submittals are due in 48 hours. It sounds like mega fun!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The entries are really neat. I really like the graphics style of one of the guys, named Dr. Zool.  I like the way the lines are clean, but appear drawn with a marker.  I wonder how they do that?&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-1221371186954084237?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1221371186954084237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1221371186954084237'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/11/ludum-dare-video-game-competition.html' title='Ludum Dare (A video game competition)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSdUWQ5AnRI/AAAAAAAAAFY/tzGH8uo158E/s72-c/incomingfodder_title.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-2587845097786951911</id><published>2008-11-21T16:24:00.000-08:00</published><updated>2008-11-21T16:32:07.290-08:00</updated><title type='text'>Traffic Jam and other things...</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've got the Traffic Jam Alpha done with some nice comments. I did it with David Brackeen's PulpCore, and using some rush hour graphics I found on the net. The sounds I did by just using a cheap mic I've got at home, recording things like dropping game pieces on the desk, Hayden whistling, or sliding a box across the desk. I think it's kinda cool:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SSdSWpT8qeI/AAAAAAAAAFI/j_ifytYLAKc/s1600-h/tjam2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5271272437860575714" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 116px; CURSOR: hand; HEIGHT: 130px" alt="" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SSdSWpT8qeI/AAAAAAAAAFI/j_ifytYLAKc/s200/tjam2.jpg" border="0" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SSdSW-VTyNI/AAAAAAAAAFQ/ZGHYBqdcLCo/s1600-h/tjam3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5271272443503429842" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 116px; CURSOR: hand; HEIGHT: 130px" alt="" src="http://4.bp.blogspot.com/_dOg4Ljp3kh8/SSdSW-VTyNI/AAAAAAAAAFQ/ZGHYBqdcLCo/s200/tjam3.jpg" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSdSWnYvFWI/AAAAAAAAAFA/woK8dBIjfOM/s1600-h/tjam1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5271272437343786338" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 117px; CURSOR: hand; HEIGHT: 130px" alt="" src="http://3.bp.blogspot.com/_dOg4Ljp3kh8/SSdSWnYvFWI/AAAAAAAAAFA/woK8dBIjfOM/s200/tjam1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt; &lt;/div&gt;&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;br /&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://www.fishnetgames.net/games/trafficjam/index.html"&gt;http://www.fishnetgames.net/games/trafficjam/index.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;I'm getting excited to try this Rube Goldberg type of a game where you have things in the room, and you have a goal like knock the kitten off of the pedestal, or something like that.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;I can't wait for the PulpFizz library to come out. It has the Jbox2d lib mixed with PulpCore.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/1313437593418701642-2587845097786951911?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2587845097786951911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/2587845097786951911'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/11/traffic-jam-and-other-things.html' title='Traffic Jam and other things...'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dOg4Ljp3kh8/SSdSWpT8qeI/AAAAAAAAAFI/j_ifytYLAKc/s72-c/tjam2.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3160167337269480886</id><published>2008-11-19T11:55:00.000-08:00</published><updated>2008-11-19T12:20:37.404-08:00</updated><title type='text'>PulpCore, Slick, Phys2D</title><content type='html'>I've been seeing some interesting and fun packages out there to help with making fun little java computer games.  I made a computer game for Halloween last year from a book I bought from David Brackeen.&lt;br /&gt;&lt;br /&gt;http://www.fishnetgames.net&lt;br /&gt;&lt;br /&gt;This year, I finished the game, but started looking up what was going no with David.  He just finished the first releases of a framework he calls pulpcore.  I grabbed it and made a port of that RushHour.  Its the game where you have to get the little red car out of the traffic Jam.&lt;br /&gt;&lt;br /&gt;http://www.fishnetgames.net/games/trafficjam/index.html&lt;br /&gt;&lt;br /&gt;I also saw a really cool demo from Phys2d.  That looks like so much fun.  I love 2d physics, so now my brain is trying to think of some fun stuff that could be done with that.  I think of throwing boxes at people, blowing them up, maybe some turkeys doing their own turkey shoot.&lt;br /&gt;&lt;br /&gt;http://www.cokeandcode.com/phys2d/&lt;br /&gt;&lt;br /&gt;What about a game where you use the physics to solve a puzzle, or you have obstacles, and you have certain physical objects to place on the level kind of like the kid on goonies with all of the gadgets and whatnot, you have these objects, you put the objects on the level, then drop a ball or something, and then see how all of the pieces interact, to try and get something to fall into a goal somewhere.&lt;br /&gt;&lt;br /&gt;Now, that sounds fun.  the objects could be like a baseball bat, a baseball, a soda can, some string, scissors, etc.  all of these things you have to try and use to get something somewhere else in the room.&lt;br /&gt;&lt;br /&gt;You can tie things together, etc.  I like this idea....  Mix this with the pulp core rendering engine and it could be really cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3160167337269480886?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3160167337269480886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3160167337269480886'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/11/pulpcore-slick-phys2d.html' title='PulpCore, Slick, Phys2D'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-9136792932193402385</id><published>2008-08-26T13:11:00.000-07:00</published><updated>2008-08-26T13:24:53.573-07:00</updated><title type='text'>Groovy Currying, applied to authorization</title><content type='html'>Working through Dierk Königs Groovy In Action, I'm finally to the Closure Currying.  This concept was so foreign to me, but so incredibly powerful!  In his example, he uses closure currying to implement a logger.  I scoffed.  Pah, you have log4j, why bother.  But the example was so interesting, building up a logger from a configuration; consisting of a format, filter and the line to be logged; and an appender, consisting of the configuration, appender and the line.&lt;br /&gt;&lt;br /&gt;Watching them curried together was something like watching Gordon Ramsay put together a juicy steak with rosemary, garlic, olive oil heat and artichokes.  I actually felt my mouth water!&lt;br /&gt;&lt;br /&gt;But why, I've been looking to implement authorization down to the granularity of a per entity basis.  I.e. not just to block users of particular roles from &lt;em&gt;doing&lt;/em&gt; an action to something, but to block users &lt;em&gt;from &lt;/em&gt;that thing itself.  Even a few weeks ago, I had an idea, but I needed one additional piece to complete it.&lt;br /&gt;&lt;br /&gt;My Idea (written on a pocket notepad near by bedside table):  &lt;em&gt;For security on domain objects, consider binding grails actions to security rules that can incorporate groovy objects in scope.  E.g. user, role domain objects their values, etc.... - the rules could be predefined rules or written in Groovy Script.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;In essence, the rules could be closures that get the application context passed to them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-9136792932193402385?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/9136792932193402385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/9136792932193402385'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/08/groovy-currying-applied-to.html' title='Groovy Currying, applied to authorization'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-1469066370380936322</id><published>2008-08-25T19:51:00.000-07:00</published><updated>2008-08-25T20:04:36.364-07:00</updated><title type='text'>Grails vs. Ruby On Rails</title><content type='html'>I've been working on a project over the last several months. I started the project on Ruby on Rails because it showed so much promise as the fast framework that I wanted, so that I could get things done quickly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then, the other day, I was chatting with a developer friend of mine named &lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;.  As we were chatting, I mentioned this new project I was doing on &lt;a href="http://www.rubyonrails.org/"&gt;RoR&lt;/a&gt;.  He challenged my technology choice (to the tune of a $5 paypall credit), asserting that I should have gone with &lt;a href="http://www.grails.org/"&gt;Grails &lt;/a&gt;instead.  I finally won the challenge ($5 is $5 after all) but ended up changing my project base to Grails.  I've been pretty happy, overall, but I find myself getting stuck in some rather odd areas, like with plugins and such, just because of the immaturity of the platform.&lt;br /&gt;&lt;br /&gt;Here is our discussion highlights...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=1119041583"&gt;Brent Fisher&lt;/a&gt;&lt;br /&gt;July 24 at 11:09pm&lt;br /&gt;So, I think you do owe me $5, or a corona and a moment with the storm rolling in. ORM is much easier in RoR. Either with an existing db, or a green.Active Record keeps things dry. The 'domain' classes don't have to even mention the columns in the tables, it determines them dynamically at runtime. Active Record reflects on the schema inside the database to configure the classes that wrap tables. In other words, its DRY. In Grails, I've got to go through and name all of the attributes in the DB, and then in the Domain class as well. Grails should just 'assume' attributes named the same as the column names.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;July 24 at 11:14pm&lt;br /&gt;Alright, for building on an existing DB, Grails might be inferior to RoR.That said, I still think Grails is a better choice for the vast, vast majority of startups and new applications, which VERY RARELY have existing databases. The many, many advantages of using a JVM-based runtime easily outweigh some minor DB management inconveniences for most applications.I remain unconvinced that ORM is easier with a fresh DB, but I guess we'll have to agree to disagree on that one. You did find "one thing" as I challenged you to, so I'll get you your $5!But you'd be wisest to invest it in a Grails book rather than a Corona. ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;July 24 at 11:26pm&lt;br /&gt;Wait a minute though, this one thing you said kinda confuses me:In Grails, I've got to go through and name all of the attributes in the DB, and then in the Domain class as well. Grails should just 'assume' attributes named the same as the column names.What are you talking about? You don't have to do that. You just create your domain objects and that's it. You save your object with the .save() command and it creates the columns it needs.Do I need my money back?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;July 24 at 11:29pm&lt;br /&gt;For the record, I have never even opened a database configuration AT ANY POINT during my work with Grails, so I definitely don't see where you're coming from with this. To me the underlying persistence should be completely hidden away from me, and that's exactly what Grails does.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=1119041583"&gt;Brent Fisher&lt;/a&gt;&lt;br /&gt;July 25 at 9:05am&lt;br /&gt;I guess I mispoke there. In a greenfield application, you are right. I only have to define the domain attributes in the domain class and it creates them in the database. In a project like mine with an existing db, I already have them defined in the db, so here is the trouble, and the one point where RoR really excels over Grails. In order for Grails to use my db, I have to define the attributes in the domain classes &amp;amp; I have to define the mapping with hibernate mapping files. That is a ton of work. It isn't DRY. See: &lt;a onmousedown="this.href='';" href="http://jasonrudolph.com/blog/2006/06/20/hoisting-grails-to-your-legacy-db/" target="_blank" rel="nofollow"&gt;http://jasonrudolph.com/blog/2006/06/20/hoisting-grails-to-your-legacy-db/&lt;/a&gt;RoR lets me work in my environment with my existing db. I have to define the domain classes, but I don't have to define the attributes in them. Instead, as I said, ActiveRecord determines them from the metadata in the db at run time.I think in this case, I still met the $5 corona challenge, although, I would agree with your assertion that overall, Grails will win out for my next greenfield application. By the way, I did pick up a book at barnes &amp;amp; noble last night, the definitive guide to Grails. I have to admit, I was somewhat disappointed with it. I found just as much or more from the website user guide.But, if you can tell me a rapid way to get over my hump, I would gladly go double or nothing plus a six pack of Corona.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;July 25 at 10:44am&lt;br /&gt;Honestly, I think the fastest way to get over the hump is just to play with it. I don't get the sense that Grails is a "learn from a book" type of tech. It's just one of those things that you kinda have to grok, ya know?Now, that said, I think that a mastery of GROOVY will help substantially, so you might check out "Groovy in Action" which is widely accepted as the best Groovy book. (I myself have not read it, I'm only repeating the words of those I trust.)I think you earned your $5 fair and square, and honestly for me, the knowledge is worth the money. After all, I don't want to just be a zealot about a tech: Part of my job is understanding the strengths of the various technologies so I can bring them to bear on a problem. It sounds like RoR is the better choice for exposing existing databases (at least if you want to get there quickly and don't have a lot of additional plans for growth of the application and/or scaling concerns--because I think Grails is still a better bet there) and that's good to know.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=1119041583"&gt;Brent Fisher&lt;/a&gt;&lt;br /&gt;August 13 at 8:37am&lt;br /&gt;So, I've been playing with it. Guess what it is missing? Server side scripting. RoR has server side scripting to make ajax easy. Grails has it on the roadmap as post 1.0, but doesn't have it in there. Because of this, I'm finding it difficult to introduce the RIA elements into my application that I wished to do.&lt;br /&gt;See this pdf chapter for the richness of the Server Side Scripting that exists in RoR.&lt;a onmousedown="this.href='';" href="http://media.pragprog.com/titles/rails2/DepotAjax.pdf" target="_blank" rel="nofollow"&gt;http://media.pragprog.com/titles/rails2/DepotAjax.pdf&lt;/a&gt;I'm wanting server side scripting to have interactive pages. For example, on my admin pages, I like to lock down security, so I have pulled in the JSecurity plugin. It's nice. But I would like a page that makes it easy to manage security by allowing the user to add rights to roles in ajax style. I.e. type into the field, press submit, and watch the permissions list for the role get populated without a page refresh.But all is not lost. According to the Grails roadmap, Server Side Scripting is on the Grails 1.0 roadmap:&lt;a onmousedown="this.href='';" href="http://grails.org/Roadmap" target="_blank" rel="nofollow"&gt;http://grails.org/Roadmap&lt;/a&gt;Add server-side scripting of client Javascript (javascript DSL) Also, there is a fellow working on a server side plugin:&lt;a onmousedown="this.href='';" href="http://blog.peelmeagrape.net/2007/10/9/dynamic-javascript-plugin-for-grails?disqus_reply=1211085#comment-1211085" target="_blank" rel="nofollow"&gt;http://blog.peelmeagrape.net/2007/10/9/dynamic-javascript-plugin-for-grails?disqus_reply=1211085#comment-1211085&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;August 13 at 2:24pm&lt;br /&gt;Hm. But hang on. What about this:&lt;a onmousedown="this.href='';" href="http://grails.org/Dynamic%20Javascript%20Plugin" target="_blank" rel="nofollow"&gt;http://grails.org/Dynamic%20Javascript%20Plugin&lt;/a&gt;That ALSO isn't what you need?&lt;br /&gt;&lt;a title="http://grails.org/Dynamic%20Javascript%20Plugin" href="http://www.new.facebook.com/share_redirect.php?h=83324438e4e1d939ca8aa6ac16c3970e&amp;amp;url=http%3A%2F%2Fgrails.org%2FDynamic%2520Javascript%2520Plugin&amp;amp;sid=26872721492" target="_blank"&gt;Grails - Dynamic Javascript Plugin&lt;/a&gt;&lt;br /&gt;Source: grails.org&lt;br /&gt;Generate javascript from controllers in response to AJAX requests, similar to Rails RJS Templates.Blog entry: &lt;a onmousedown="this.href='';" href="http://blog.peelmeagrape.net/2007/10/9/dynamic-javascript-plugin-for-grailsThe" target="_blank" rel="nofollow"&gt;http://blog.peelmeagrape.net/2007/10/9/dynamic-javascript-plugin-for-grailsThe&lt;/a&gt; plugin: grails-dynamic-javascript-0.1.zipSimple Demo App: dynamic_javascript_demo_0.1.zip&lt;br /&gt;&lt;a class="share" title="Send this to friends or post it on your profile."&gt;Share&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;August 13 at 2:25pm&lt;br /&gt;Oh sorry, I think that's the same thing the guy is working on that you linked to!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=668345287"&gt;Brandon Franklin&lt;/a&gt;&lt;br /&gt;August 13 at 2:27pm&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.new.facebook.com/profile.php?id=1119041583"&gt;Brent Fisher&lt;/a&gt;&lt;br /&gt;August 13 at 3:13pm&lt;br /&gt;It is getting close, but missing a bit of the spark and maturity that RoR has for it, but I'm gonna experiment more with it tonight and see if I can recreate all the cool ajax server-side java scripts that I had put in to the RoR version of my App.I'll let you know how it goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-1469066370380936322?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1469066370380936322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/1469066370380936322'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/08/grails-vs-ruby-on-rails.html' title='Grails vs. Ruby On Rails'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3172142188320857833</id><published>2008-05-02T16:05:00.000-07:00</published><updated>2008-05-02T16:10:25.913-07:00</updated><title type='text'>Lending...Person to Person</title><content type='html'>&lt;p&gt;I was browsing provo craigslist and I came across a person wanting a $1500 loan for his/her daughters education.  I responded and looked up a few different community loan centers:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.kiva.org/app.php?page=about"&gt;http://www.kiva.org/app.php?page=about&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.prosper.com/"&gt;http://www.prosper.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.lendingclub.com/home.action"&gt;http://www.lendingclub.com/home.action&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Does anybody know of any more?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3172142188320857833?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3172142188320857833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3172142188320857833'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/05/lendingperson-to-person.html' title='Lending...Person to Person'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-3229962330047437575</id><published>2008-04-23T14:45:00.000-07:00</published><updated>2008-04-23T14:48:37.880-07:00</updated><title type='text'>MyMentor.com</title><content type='html'>I'm sitting here thinking of ways to show kids what futures are possible out there.  Wouldn't it be nice to have a place to bring them that could show people's profiles and what they did to get there.&lt;br /&gt;&lt;br /&gt;They could filter by interest, salary, location, talent, intelligence, population, background, and tons of other demographics.  Then let them interact with these 'mentors' and understand what these people did to get where they were.&lt;br /&gt;&lt;br /&gt;Furthermore, it could grab profiles from so many other sources such as linked in, facebook, and perhaps others.&lt;br /&gt;&lt;br /&gt;What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-3229962330047437575?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3229962330047437575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/3229962330047437575'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/04/mymentorcom.html' title='MyMentor.com'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-7970549978701923926</id><published>2008-04-22T08:32:00.001-07:00</published><updated>2008-04-22T08:51:45.990-07:00</updated><title type='text'>The Magical Mormon</title><content type='html'>On the way to work today, I was inspired by an interview with that marvelous writer of Chocolat', Joanne Harris.  She wrote about a very flawed, magical character, who made chocolate and magically changed a town.&lt;br /&gt;&lt;br /&gt;It made me think about mormon magic.  I've been investigating the magical elements of early mormonism and the views of the early mormons who used it.  In Ms. Harris book, she presents the magic in a sort of ambiguous fashion so that the reader could infer that magic or the human heart is what really changed the hearts of the people.  Her character believed it to be magic, and felt that that magic really set her apart from the rest of the people.&lt;br /&gt;&lt;br /&gt;What if I wrote a book on a similar premise for mormon magic? &lt;br /&gt;&lt;strong&gt;Setting: &lt;/strong&gt;Modern day mormonville. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Protagonist: &lt;/strong&gt;a &lt;strong&gt;35 year old man: &lt;em&gt;David&lt;/em&gt;&lt;/strong&gt;, investigating early mormonism and the fundamentalism involved.  He doesn't believe in magic, and begins to try it out, mockingly.  He first buys a jupiter charm, exactly like the Jupiter Charm that Joseph Smith owned and had on his person at death.  He begins to keep around a Cabala script, similar to the one found on Hyrum Smith's body at his death.  As he does these things, 'magical things' begin to occur.  Things begin to go 'very' well for him at work.  Better than he had imagined.  People begin to gather enormous respect him, and he is promoted.  He gets promoted beyond his abilities, but, people assure him that he deserves the promotion, and he accepts the promotion.  Because he doesn't have the ability to really do the job well, he fakes it.  Harder and harder problems are presented to him to solve, and he solves them as best he can.  He must investigate further into the magic to cope with solving these problems and produce results.  Problems begin to pile up because with his success, come the women.  At first, he shuns them away, but eventually finding that he is too attracted to them and he takes them in.  He justifies them and convinces his wife that it is ok.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Antagonist(s):&lt;/strong&gt;  Others in the company begin to realize that our hero doesn't know what he is doing.  They realize that he is sleeping with other women.  One man, &lt;strong&gt;Peter, &lt;/strong&gt;when he finds out his own wife falls for David, he becomes very upset and becomes determined to expose the massive fraud that David has created.  He begins by trying to tell the right people of David's error and omissions.  They won't listen, apparently blinded by his charm and good spirit.  He considers undermining David, but none of his plans succeed in exposing David as a fraud.  He confronts David and they fight it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-7970549978701923926?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7970549978701923926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/7970549978701923926'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/04/magical-mormon.html' title='The Magical Mormon'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-5654785614596048693</id><published>2008-04-21T10:18:00.001-07:00</published><updated>2008-04-21T10:21:26.130-07:00</updated><title type='text'>Bring the social networking sites together</title><content type='html'>It seems like it would be interesting to have all my networking sites work together somehow.   Get my facebook, linkedin and others together.  Just a thought.  It reminds me of the Trillian software that brought all the IM's together for me in one program.  A lot of people downloaded that software and used it.  It seems like it would be really useful to bring them together somehow there too.  might be a lot of work, and the value would have to be immediately evident.  I'll have to think about how it could add value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-5654785614596048693?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/5654785614596048693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/5654785614596048693'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/04/bring-social-networking-sites-together.html' title='Bring the social networking sites together'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-1313437593418701642.post-4622943201276587194</id><published>2008-03-18T12:18:00.001-07:00</published><updated>2008-03-18T12:20:07.935-07:00</updated><title type='text'>telephone email...</title><content type='html'>My family uses a blog to post pictures and announce somethings.  Unfortunately, many folks in my family don't actually read their email... ever.  It would be nice to have a telephone notification system put into place to call folks to tell them about a certain event using some voip technology so that it could leverage existing services that I'm already using.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1313437593418701642-4622943201276587194?l=latenightscoding.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/4622943201276587194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1313437593418701642/posts/default/4622943201276587194'/><link rel='alternate' type='text/html' href='http://latenightscoding.blogspot.com/2008/03/telephone-email.html' title='telephone email...'/><author><name>Brent</name><uri>http://www.blogger.com/profile/02824113331003555882</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_dOg4Ljp3kh8/S1YD7DFzpTI/AAAAAAAAAPs/YWjwV0AyuKw/S220/dinner.jpg'/></author></entry></feed>
