<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2437014698061953873</atom:id><lastBuildDate>Thu, 21 Apr 2011 23:36:24 +0000</lastBuildDate><category>Reviews</category><category>Python</category><category>BadBadBad</category><category>JavaUserGroup</category><category>Research</category><category>Ruby</category><category>Questions</category><category>Consulting</category><category>AJAX</category><category>Work</category><category>UI</category><category>LegacyCode</category><category>Spedini</category><category>JavaScript</category><category>Java</category><category>RandomWebLinks</category><category>conferences</category><category>Mac-Development</category><category>InterestingProblems</category><category>Practices</category><category>Testing</category><title>Regen MY Toolkit</title><description>A collection of my thoughts on tech related subjects that I remembered to blog about.</description><link>http://regenmytoolkit.blogspot.com/</link><managingEditor>noreply@blogger.com (Benjamin P Lee)</managingEditor><generator>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RegenMyTookit" /><feedburner:info uri="regenmytookit" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-8103015746982969966</guid><pubDate>Sun, 01 Mar 2009 05:54:00 +0000</pubDate><atom:updated>2009-02-28T23:57:18.865-06:00</atom:updated><title>Moved Tech Blog</title><description>I know I haven't posted much recently, mainly due to being busy at work and thinking I needed my posts to be well thought out and interesting.  I have come to the conclusion that they need not be either if they help me or might help someone else someday.&lt;br /&gt;&lt;br /&gt;To that end, I have started a new tech blog with a friend over at &lt;span style="font-size:180%;"&gt;&lt;a style="font-weight: bold;" href="http://twoguysarguing.wordpress.com/"&gt;http://twoguysarguing.wordpress.com/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If anyone still reads this blog or has it in there feed reader, please adjust your links accordingly.&lt;br /&gt;&lt;br /&gt;Thank you,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The Management&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-8103015746982969966?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2009/02/moved-tech-blog.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-7052048667748500663</guid><pubDate>Tue, 13 Jan 2009 20:45:00 +0000</pubDate><atom:updated>2009-01-13T14:51:36.514-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ruby</category><title>Cold Sholder</title><description>This is a VERY quick and dirty script I threw together to see if the conditions were right to go skating on a local pond (based on a friends best guess).&lt;br /&gt;&lt;br /&gt;Simply, it checks an online weather service for the overnight temperatures of the past 10 days and if every night maintained temperatures below freezing, tells you to go skating.  Otherwise, no skating for you.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'simplehttp'&lt;br /&gt;require 'time'&lt;br /&gt;&lt;br /&gt;class TimedWeather&lt;br /&gt; attr_accessor :date_time, :temp&lt;br /&gt; &lt;br /&gt; def initialize(date_time_string, temp_string)&lt;br /&gt;  @date_time = DateTime.strptime(date_time_string, '%Y-%m-%d %H:%M:%S')&lt;br /&gt;  @temp = temp_string.to_f&lt;br /&gt; end&lt;br /&gt; &lt;br /&gt; def to_s&lt;br /&gt;  "[(#{@date_time})-(#{@temp})"&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def build_daily_url(date)&lt;br /&gt; "http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=KMOSTLOU11&amp;amp;day=#{date.day}&amp;amp;year=#{date.year}&amp;amp;month=#{date.month}&amp;amp;format=1"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def find_timed_weather_for_date(date = Date.today)&lt;br /&gt; response = SimpleHttp.get(build_daily_url(date))&lt;br /&gt; records = response.gsub(/\n&amp;lt;br&amp;gt;/, '').gsub(/&amp;lt;br&amp;gt;/, '').split(/\n/)[2...-1]&lt;br /&gt; records.map do |text_record|&lt;br /&gt;  split = text_record.split(/,/)&lt;br /&gt;  TimedWeather.new(split[0], split[1])&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def conducive_day?(daily_temps)&lt;br /&gt; not daily_temps.select { |time| conducive_time?(time) }.map { |temp| conducive_temp?(temp) }.include?(false)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def conducive_time?(time)&lt;br /&gt; time.date_time.hour &amp;gt; 17 or time.date_time.hour &amp;lt; 6&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def conducive_temp?(temp)&lt;br /&gt; temp.temp &amp;lt; 32.0&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;conducive = true&lt;br /&gt;&lt;br /&gt;(0..9).each do |offset|&lt;br /&gt; if not conducive_day?(find_timed_weather_for_date(Date.today - offset))&lt;br /&gt;  conducive = false&lt;br /&gt;  break&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if conducive&lt;br /&gt; puts "GO SKATE! ...... maybe"&lt;br /&gt;else&lt;br /&gt; puts "NO SKATING TODAY!"&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-7052048667748500663?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2009/01/cold-sholder.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-7486134432561402977</guid><pubDate>Tue, 13 Jan 2009 20:04:00 +0000</pubDate><atom:updated>2009-01-13T14:23:43.441-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Work</category><title>Maven and TweetPublisher</title><description>One of my recent clients used &lt;a href="http://maven.apache.org/"&gt;&lt;span style="font-weight: bold;"&gt;Maven &lt;/span&gt;&lt;/a&gt;for builds, dependency management, and packaging so I figured I would give it real try and build something with it.  Over the years I have hear numerous good things about Maven (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;really nice dependency management, consistent builds that don't require a huge ant file to work, simplicity&lt;/span&gt;&lt;/span&gt;) along with many bad things (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;complex when you try to do anything that is not standard, annoyance with the dictated conventions, difficulties managing the things managing your dependencies, etc&lt;/span&gt;&lt;/span&gt;).  After trying it out on a couple very small and simple projects, I very much like the good points and am not convinced that the bad ones won't happen on a larger project.&lt;br /&gt;&lt;br /&gt;For small stuff though, it is very nice.&lt;br /&gt;&lt;br /&gt;If you follow the conventions, you can easily get a small project structure built out along with the ability to easily compile, test, and package/install without having to tell the build too anything about HOW to do it, just where/when.&lt;br /&gt;&lt;br /&gt;One issue I did run into was related to packaging my app.  My first test app was a simple &lt;a style="font-weight: bold;" href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl &lt;/a&gt;plugin called &lt;a href="http://github.com/benjaminplee/tweetpublisher/tree/master"&gt;&lt;span style="font-weight: bold;"&gt;TweetPublisher&lt;/span&gt;&lt;/a&gt;.  A coworker wanted his Cruise server to tweet the status of each build ... so I set to work.  After googling a while about how to write a publisher plugin for CruiseControl and finding a suitable &lt;span style="font-weight: bold;"&gt;Twitter &lt;/span&gt;API (&lt;a style="font-weight: bold;" href="http://yusuke.homeip.net/twitter4j/en/index.html"&gt;Twitter4J&lt;/a&gt;) I was pretty much done.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;** The latest versions have a much nicer interface and a very simple configuration than what I remember. :-)  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The most basic maven project type produces a simple project which builds to a single jar.  Perfect.  With Eclipse's maven support it was dead simple to search for the cruise control api and twitter4j libraries, add them as dependencies, hack together some code and I was done.  A short "&lt;span style="font-family: courier new; font-weight: bold;"&gt;mvn package&lt;/span&gt;" later and I had a jar with my code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Only 1 problem.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maven knows about my dependencies.  It keeps them up to date (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;depending on how you configure them&lt;/span&gt;&lt;/span&gt;), downloads them when needed, uses them at compile and/or test time, etc.  However, it does nothing out of the box to give them to you when you package.  More simply, after a package goal is executed I have a jar with my code, which was compiled against my dependencies, but I have no clue what version it was compiled against or know where they are.  This does not leave me in the situation I wanted: package should leave you with everything packaged so you could go use it in production.  Not so.&lt;br /&gt;&lt;br /&gt;After much googling and asking of coworkers no one could show me how to work with maven and dependencies short of writing my own archetype to do what I wanted.&lt;br /&gt;&lt;br /&gt;Finally, I stumbed upon the assemble plugin bywhich I could define an "assembly" which would move my code around and copy all of its dependencies flattened into my code's .jar file.  "&lt;span style="font-weight: bold; font-family: courier new;"&gt;mvn assembly:assembly&lt;/span&gt;" Viola!  Done.&lt;br /&gt;&lt;br /&gt;The very simplistic and untested code for tweetpublisher can be found &lt;a style="font-weight: bold;" href="http://github.com/benjaminplee/tweetpublisher/tree/master"&gt;here on github&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;** The maven integration with&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a href="http://wiki.netbeans.org/MavenBestPractices"&gt;&lt;span style="font-weight: bold;"&gt;NetBeans&lt;/span&gt; &lt;/a&gt;is also very nice.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-7486134432561402977?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2009/01/maven-and-tweetpublisher.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-2007759493112403869</guid><pubDate>Tue, 13 Jan 2009 16:15:00 +0000</pubDate><atom:updated>2009-01-13T14:52:21.423-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InterestingProblems</category><title>Computational Mind Teaser</title><description>Via GoogleReader and DZone ... I came across this post yesterday: &lt;a href="http://blogs.digitss.com/programming/a-mind-teaser-good-one/"&gt;http://blogs.digitss.com/programming/a-mind-teaser-good-one/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Of course I couldn't pass up the challenge and spent all of my free random moments yesterday afternoon trying things out.  I was able to see how the subtract function was easily related to decrement and had several promising ideas on how decrement could work but nothing right.  This morning a coworker and I sat down and finished all three in under 30 minutes.  I post my solutions here b/c I feel the need to justify the time wasted ;-)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DEC(b) :=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  a = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  loop(b)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    b = a++&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SUB(a,b) :=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  loop(b)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    DEC(a)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DIV(a,b) :=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  q = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  loop(a)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    SUB(a,b)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    c = a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    DEC(c)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    loop(a)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;      q++&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    SUB(q,c)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  a = q&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;* &lt;span style="font-style: italic;"&gt;all functions leave the result in the first variable and assume the operator presents itself between the two parameters (e.g. SUB(a,b) == (a=a-b) ... prefix notation)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;** &lt;span style="font-style: italic;"&gt;I like my DIV better than those posted as of the writing of this article but still feel like it could be shortened / cleaner.  I am happy to say that the hack of reducing the second loop to only a single increment while using the loop(0) as the "conditional" to stop working was my idea :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The coworker I figured this out with then tried to explain y-combinators in lambda calculus and how they might relate to functional technique he was trying in JavaScript ..... my head hurts ... in a good way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-2007759493112403869?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2009/01/computational-mind-teaser.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-6533017708597423910</guid><pubDate>Mon, 03 Nov 2008 02:20:00 +0000</pubDate><atom:updated>2008-11-02T20:33:43.509-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">AJAX</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>List-It</title><description>In an effort to maintain a side-project, learn more Python (&lt;span style="color: rgb(51, 51, 51);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;which is getting damn confusing with the Ruby I was learning a few months ago&lt;/span&gt;&lt;/span&gt;), and finally have a clean app to keep my To-Do list online .... I present &lt;span style="font-size:130%;"&gt;&lt;a style="font-weight: bold;" href="http://list-it.appspot.com/"&gt;List-It&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-style: italic; color: rgb(102, 0, 0);"&gt;** Its still in super-alpha at the moment **&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Myself along with a coworker are tinkering around with producing a simple to-do application utilizing Google &lt;a href="http://code.google.com/appengine/"&gt;AppEngine&lt;/a&gt;, Google &lt;a href="http://code.google.com/"&gt;Code&lt;/a&gt; (&lt;a href="http://code.google.com/p/listit/"&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;link to our project&lt;/span&gt;&lt;/a&gt;), and &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;At the moment a VERY basic interface is available and some simple back-end plumbing has been done for the main model (ToDo objects).&lt;br /&gt;&lt;br /&gt;I am fairly proud of my simple Actionizer code.  Basically, since AppEngine doesn't use a DB but really uses Big Table ... I wanted to expose some simple actions for each of my models so that AJAX calls could easily update the models, delete, and add.  Not wanting to bolt on a larger framework which would already have the functionality but not teach me nearly as much Python, I decided to roll my own.&lt;br /&gt;&lt;br /&gt;Thus the &lt;a href="http://listit.googlecode.com/svn/trunk/actionizer.py"&gt;Actionizer&lt;/a&gt; class.  Create an instance with the actions you want to give your models and then actionize any/all of your model objects.  The Actionizer will produce the appropriately named URL actions and piping along with functions to produce request handlers to handle each model's actions.&lt;br /&gt;&lt;br /&gt;Not ground breaking stuff, but not bad for just a couple of hours tinkering around with Python.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;If you have any suggestions/thoughts/criticism/would like to help&lt;br /&gt;... please let me know.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;** In working on this side project ... I realized it would be nice for our purposes to have &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;AppEngine monitor our Google Code poject&lt;/span&gt;&lt;span style="font-style: italic;"&gt; for commits and when one is sent, to &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;redeploy the app directly from the repository&lt;/span&gt;&lt;span style="font-style: italic;"&gt;.  Allass I can't find a way to do this yet, its not formally supported and no one on &lt;/span&gt;&lt;a style="font-weight: bold; font-style: italic;" href="http://stackoverflow.com/questions/241007/possible-to-integrate-google-appengine-and-google-code-for-continuous-integrati"&gt;StackOverflow&lt;/a&gt;&lt;span style="font-style: italic;"&gt; knows how to either.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-6533017708597423910?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/11/list-it.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-676761567682771500</guid><pubDate>Mon, 03 Nov 2008 01:57:00 +0000</pubDate><atom:updated>2008-11-02T20:18:05.233-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Practices</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Reviews</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><category domain="http://www.blogger.com/atom/ns#">AJAX</category><category domain="http://www.blogger.com/atom/ns#">Work</category><title>Selenium - Chemistry for your UATs</title><description>Off and on for the past few weeks I have been working on migrating my current project's suite of user acceptance tests (UATs) from &lt;a href="http://watin.sourceforge.net/"&gt;WatiN&lt;/a&gt; to &lt;a href="http://selenium.openqa.org/"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Selenium&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Why you ask?  Several reasons.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Our current WatiN tests are &lt;span style="font-weight: bold;"&gt;slow and brittle&lt;/span&gt;.  Some of this is WatiN's fault, some our own&lt;/li&gt;&lt;li&gt;WatiN doesn't have great support for &lt;span style="font-weight: bold;"&gt;AJAX testing&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;WatiN only works in IE on Windows&lt;/span&gt;.  It does this well, but our app needs to work in 7 browsers at the moment (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;IE 6 &amp;amp; 7, FF 2 &amp;amp; 3 on Mac &amp;amp; Win, Safari on Mac&lt;/span&gt;&lt;/span&gt;) soon to be 10 (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;Safari on Win, Chrome, IE 8&lt;/span&gt;&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;Our company is going to be creating a &lt;span style="font-weight: bold;"&gt;Selenium Grid&lt;/span&gt; with remote control nodes of various browsers on different platforms for all projects to be able to use.&lt;/li&gt;&lt;li&gt;Currently the UATs don't run as part of any &lt;span style="font-weight: bold;"&gt;automated build&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Thus, we are slowly trying to see what kind of effort it will take to convert our tests, rewrite/fix/upgrade where we can and need to, and automate as much as we can.&lt;br /&gt;&lt;br /&gt;The really nice thing is the Selenium Grid and the ability to have a large number of RC's standing by in VMs for any project that wants to run tests.  If you don't know about Selenium Grid, read about it &lt;a href="http://selenium-grid.openqa.org/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In our initial efforts to convert the tests we have found a few things to be true:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Selenium has some built in checks that help with testing/action on AJAX calls, but they aren't perfect and primarily rely on built in check-wait loops on elements being on the page or Javascript functions changing values.&lt;/li&gt;&lt;li&gt;Firefox 3 is not yet fully supported.  A simple hack allows it to be used, however not all of the integrations and XPath work correctly&lt;/li&gt;&lt;li&gt;I had a fair bit of trouble getting Safari to work on the Mac with Selenium.  Evidently there are some architectural issues the team is battling with related to proxies and libraries ... but I was able to get it to work eventually&lt;/li&gt;&lt;li&gt;The Grid/Remote Control environment works well but still has some bugs.  Closing the window for a running RC on windows doesn't unregister the RC from the grid.&lt;/li&gt;&lt;li&gt;Selenium seems to be a small but noticeable amount faster than WatiN&lt;/li&gt;&lt;li&gt;Converting tests is hard when trying to ensure that the same exact thing is being tested before and after&lt;/li&gt;&lt;/ul&gt;Other than these issues, things are progressing.  Three larger problems we are seeing and havn't come up with solutions for yet are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How can we automate the UATs running on the continuous integration server to run all browsers in parallel (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;e.g. running each test against all browsers at the same time, then moving on to the next one&lt;/span&gt;&lt;/span&gt;) while still maintaining one build/failure point?&lt;/li&gt;&lt;li&gt;Is it possible to integrate the running of UATs against multiple browsers to the developer's work flow?  Possible tooling support?&lt;/li&gt;&lt;li&gt;Is it possible to rework a test-runner to run all of our tests in parallel depending on the number of RC's of a particular type that are available (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;e.g. if we have a ton of FF 3 RCs, run several tests all at once instead of waiting for each other&lt;/span&gt;&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt;It looks like we are going to be in between contracts for about a week so we are hoping to come up with some solutions to these.  I will post back if we do.&lt;br /&gt;&lt;br /&gt;** If you have any suggestions on how to automate or parallelize the Selenium tests, check our &lt;a href="http://stackoverflow.com/questions/212863/how-can-i-run-nunitselenium-grid-tests-in-parallel"&gt;my StackOverflow question&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-676761567682771500?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/11/selenium-chemistry-for-your-uats.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-4863527249680840649</guid><pubDate>Sun, 19 Oct 2008 21:05:00 +0000</pubDate><atom:updated>2008-10-19T16:20:29.191-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ruby</category><category domain="http://www.blogger.com/atom/ns#">Work</category><category domain="http://www.blogger.com/atom/ns#">UI</category><title>Lunch n' Learn - Shoes</title><description>Two weeks ago I did a Lunch-n-Learn at work on the simple Ruby GUI toolkit, &lt;span style="color: rgb(102, 0, 0);font-size:180%;" &gt;&lt;span style="font-weight: bold;"&gt;Shoes&lt;/span&gt;&lt;/span&gt;.  Here is a quick overview of what I talked about ....&lt;br /&gt;&lt;br /&gt;In working on a side project of mine I came to the realization that I needed a GUI frontend to my app in order to keep moving forward.  I had been working in Ruby and found that there is not a standardized GUI toolkit.  There are &gt;10 toolkits around that boast a variety of features and pros/cons but none that was universally accepted.  My criteria were that whatever I chose, it needed to be multi-platform and easy to work with for simple things.  Enter Shoes.&lt;br /&gt;&lt;br /&gt;Shoes is the creation of why the lucky stiff, or _why as he is known.  If you have never seen/heard/read anything of _why's, I very much suggest you do.  Just Google him.  Between his talks, his blogs, his books (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;one on Shoes and another on learning Ruby&lt;/span&gt;&lt;/span&gt;), and anything else you will learn a deep appreciation for what is obviously a very passionate and sometimes strange being. :-)&lt;br /&gt;&lt;br /&gt;Shoes is designed to be simple and small.  The main website at &lt;a href="http://shoooes.net/"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Shoooes.net&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; demonstrates a simple GUI with a single buttons as:&lt;br /&gt;&lt;code class="rb"&gt;&lt;span class="constant"&gt;&lt;/span&gt;&lt;/code&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;code class="rb"&gt;&lt;span class="constant"&gt;Shoes&lt;/span&gt;.app &lt;span class="brackets"&gt;{&lt;/span&gt; button &lt;span class="string"&gt;"PUSH!"&lt;/span&gt; &lt;span class="brackets"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;Most of the constructs have origins in how the web works and/or how modern browsers display elements so nothing is too complicated.  You can easily display images, draw 2d shapes on the canvas, add buttons/text/text boxes/progress bars/etc, link to the web or to other windows, and show any of several built in dialog boxes.  Much of Shoes features come from its integration with native components ... there are seperate Windows/OS X/Linux GTK installs.&lt;br /&gt;&lt;br /&gt;While the framework isn't yet production ready by my accounts, it is rapidly evolving through _why's efforts and a surpisingly dedicated mailing-list.  Would I write a complicated IDE in it? No.  Would I consider it if I needed a simple user interface or data visualization for a small program? Yes.&lt;br /&gt;&lt;br /&gt;If you considering checking it out, look at the main website first, peruse the help area which has gotten drastically better in the last couple months, and check out some of the user submited demo apps at the &lt;a href="http://the-shoebox.org/"&gt;ShoeBox&lt;/a&gt;.  Finally, check out _why's online (and print) PDF book on Shoes - &lt;a href="http://hackety.org/press/"&gt;Nobody Knows Shoes&lt;/a&gt;.  If you have never tried drugs, or would like to relive the experience, flip through its pages.  Along with good information on using Shoes are some crazy graphics and entertaining side-bantor.&lt;br /&gt;&lt;br /&gt;If your interested in my LnL presentation or my thoughts on Shoes &lt;span style="font-weight: bold;"&gt;drop me a comment&lt;/span&gt;.  The main &lt;span style="font-weight: bold;"&gt;code&lt;/span&gt; portion of my presentation (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;done in Shoes of course&lt;/span&gt;&lt;/span&gt;) can be &lt;span style="font-size:130%;"&gt;&lt;a href="http://benjaminplee.googlepages.com/LnL.rb"&gt;&lt;span style="font-weight: bold;"&gt;found here&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;. &lt;span style="font-style: italic;"&gt; Please no comments on code style or my Ruby abilities ... I am still learning and put it together to show people what Shoes could do, not to prove myself. ;-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-4863527249680840649?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/10/lunch-n-learn-shoes.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-1135733054519904176</guid><pubDate>Sun, 19 Oct 2008 15:41:00 +0000</pubDate><atom:updated>2008-10-19T11:42:30.552-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Reviews</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">AJAX</category><category domain="http://www.blogger.com/atom/ns#">Work</category><title>Helpful Scripts For Work</title><description>&lt;span style="font-weight: bold;"&gt;I can be pretty lazy at times ... but in a good way&lt;/span&gt;, I think.  I am a firm believer in the philosophy heard numerous times in various forms:  "&lt;span style="font-style: italic;"&gt;If you have to do something more than twice, have a computer do it&lt;/span&gt;".  While I don't strive to find tons of little shortcuts to daily life, I do enjoy them.&lt;br /&gt;&lt;br /&gt;At work in the past week, two scripts have saved me countless seconds maybe even minutes, and I figured I would share them here:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;DZone RSS Links Streamliner&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I use Google Reader to peruse the zillions of RSS feeds I am subscribed to and find the many articles I want to read and the fewer that I actually find time to.  &lt;a href="http://www.dzone.com/links/index.html"&gt;DZone.com&lt;/a&gt; is a really nice article aggregator centered on tech and programming news from around the web (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;think Digg before it got way overcrowded and full of celebrity gossip posts and links to fark ... not that there isn't a need for them&lt;/span&gt;&lt;/span&gt;). &lt;br /&gt;&lt;br /&gt;Often I will find several DZone links I want to read at once and will open them all into new tabs from Google Reader and then read them one by one ... only one small problem ... when the link opens its to the DZone page.  This is fine except that I currently don't have a DZone account so I don't vote on storries and I rarely read the comments ... I just want the article (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;e.g. &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.dzone.com/links/rss/google_collections_to_the_rescue.html"&gt;here&lt;/a&gt;&lt;/span&gt;).  Obviously having to click twice is at least 1 too much ;-)&lt;br /&gt;&lt;br /&gt;Thus, here is a &lt;a style="font-weight: bold;" href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;GreaseMonkey&lt;/a&gt; script I added so that I don't have to click through that extra time:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;// ==UserScript==&lt;br /&gt;// @name          DZone Forward&lt;br /&gt;// @namespace     yardspoon&lt;br /&gt;// @description   Forwards user past DZone rss link page&lt;br /&gt;// @include       &lt;a href="http://www.dzone.com/links/rss/*"&gt;http://www.dzone.com/links/rss/*&lt;/a&gt;&lt;br /&gt;// ==/UserScript==&lt;br /&gt;&lt;br /&gt;window.location = document.evaluate("//div[@class='ldTitle']/a/@href", document, null, XPathResult.STRING_TYPE, null).stringValue;&lt;/span&gt;&lt;/blockquote&gt;It uses &lt;a href="http://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript"&gt;FF's built in XPath&lt;/a&gt; evaluator to find a link to the real article and forward the browser on to the page.  It might be overkill for 1 click, but I like it.  I don't have anything agains't DZone, I just don't like clicking more than I need to.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;User-Agent Check Cheater&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most of my career has been working on networked systems and applications ... most of which have had a web frontend.  Despite the best laid plans, often I am left with a situation where I really need to see whats actually being sent back between the server and the browser/client/web service and that can be difficult to do depending on the information you want to see.  FF plugins like &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;FireBug&lt;/a&gt;, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1192"&gt;XPather&lt;/a&gt;, and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3829"&gt;LiveHTTPHeaders&lt;/a&gt; give you tons of good information but can't give you the whole picture of whats being sent over the wire.&lt;br /&gt;&lt;br /&gt;Enter &lt;a href="http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project"&gt;&lt;span style="font-weight: bold;"&gt;WebScarab&lt;/span&gt;&lt;/a&gt;.  I found this Java based personal web proxy right out of college while at my first client and am still finding uses for it frequently.  After starting up a listener in WebScarab and configuring your browser to use it as a web proxy, it can easily monitor and display information about every single request and response sent (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;HTTP headers, redirects, content over the wire, additional resource requests, timing, etc ... great of AJAX debugging&lt;/span&gt;&lt;/span&gt;).  Along with viewing the content it has numerous other features that allow you to simulate network conditions, manually intercept requests/responses before they are sent, do security fuzzy logic tests, test web services and much more. &lt;br /&gt;&lt;br /&gt;One of the less used features but very important this week was the ability to act on requests and responses directly in a scripting language (&lt;a href="http://www.beanshell.org/"&gt;&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;BeanShell&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;).  This past week I was trying to install an application that for whatever reason, during the install process, needed to download additional information from the company's website.  Only one problem: the installer uses IE not the default browser to do this, and the company blocks IE for external use for security reasons (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;FF installed on every desktop&lt;/span&gt;&lt;/span&gt;).  This meant the installer failed.  I could put in a support request for a temporary hole in the network to allow IE to access this site but since it was such a small thing I figured I would try to solve the problem directly. &lt;br /&gt;&lt;br /&gt;It turns out outgoing requests are simply filtered by their user-agent HTTP header value (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;effective for IE blocking and simple&lt;/span&gt;&lt;/span&gt;) but also simply circumvented.&lt;br /&gt;&lt;br /&gt;Queue WebScarab, the following script overrites the user-agent header of all requests with the value for FF ... meaning IE works and I was able to install the software.  I turned the script back off when I was done so as to not risk any security issues and not piss off the admins ... but it worked none the less.&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;import org.owasp.webscarab.model.Request;&lt;br /&gt;import org.owasp.webscarab.model.Response;&lt;br /&gt;import org.owasp.webscarab.httpclient.HTTPClient;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;public Response fetchResponse(HTTPClient nextPlugin, Request request) throws IOException {&lt;br /&gt;   request.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:&lt;a href="http://1.9.0.3/"&gt;1.9.0.3&lt;/a&gt;) Gecko/2008092417 Firefox/3.0.3");&lt;br /&gt;   response = nextPlugin.fetchResponse(request);&lt;br /&gt;   return response;&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;One other &lt;span style="font-style: italic;"&gt;great feature&lt;/span&gt; of WebScarab is that if you set IE to use the web proxy, your really setting the default proxy for connections by other Windows applications that use the defaults ... meaning you can suddenly see all of the traffic that random applications are sending without you knowing ... apps phoning home, checking for updates, reporting usage statistics, etc.  Kinda scarry.&lt;br /&gt;&lt;br /&gt;Also ... &lt;span style="font-weight: bold;"&gt;watch-out&lt;/span&gt; ... the request and responses can be seen in plain text and/or Base64 Encoded text can be converted .... so don't send your password through it unless your paying attention :-) and realize how much of your web interactions are sent unencrypted over the wire for anyone who wants to listen to find.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-1135733054519904176?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/10/helpful-scripts-for-work.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-4879140593407451812</guid><pubDate>Sun, 19 Oct 2008 14:50:00 +0000</pubDate><atom:updated>2008-10-19T11:42:59.444-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InterestingProblems</category><category domain="http://www.blogger.com/atom/ns#">Work</category><title>Probably Fun - Baseball Stats</title><description>The other day a coworker who is very interested/involved in baseball statistics posed an interesting question to me just before I left work:&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is the probability of a team playing in a 5 game series to win the series on a streak of 3 wins?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;(&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;e.g. team A sweeps team B and wins the first 3, A loses 1 and then wins 3, or A loses 2 and wins final 3&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;I quickly had flash backs of college to my statistics, discrete mathematics, number theory and finite automata courses (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;all favorites other than statistics&lt;/span&gt;&lt;/span&gt;).  We quickly worked through some of the simpler aspects of it and came up with an answer that seemed well reasoned but not quite right.  Of course I couldn't stop thinking about why it was wrong and went home and did further calculations, searched for my old statistics book, and even consulted &lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;Big Red&lt;/span&gt;.  I eventually found the right answer but couldn't give myself the proof of why it was right.&lt;br /&gt;&lt;br /&gt;The next day, after consulting with several other coworkers (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;at one point at least 15 people were busy discussing the problem and getting zero work done&lt;/span&gt;&lt;/span&gt;) and getting a well timed email from Big Red with his thoughts we were settled on a right answer.&lt;br /&gt;&lt;br /&gt;I still can't put together a very clever or clear proof of why this solution is true, and I feel that there is probably a much succinct formula I am confident that it is correct .... a &lt;a href="http://en.wikipedia.org/wiki/Monte_Carlo_method"&gt;Monte Carlo simulation&lt;/a&gt; produces the exact same probability. :-)&lt;br /&gt;&lt;br /&gt;Our answer, abstracted a bit:&lt;br /&gt;&lt;br /&gt;The probability of a particular team winning a standard playoff series (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;where once a team wins more than half the games, the series is over&lt;/span&gt;&lt;/span&gt;) where the probability of the team winning each game is P and the number of games needed to win are X is:&lt;br /&gt;&lt;blockquote&gt;P&lt;sup&gt;X&lt;/sup&gt; * (  (1-p)&lt;sup&gt;0&lt;/sup&gt; + (1-p)&lt;sup&gt;1&lt;/sup&gt; + (1-p)&lt;sup&gt;2&lt;/sup&gt; + ... + (1-p)&lt;sup&gt;(X-1)&lt;/sup&gt; )&lt;/blockquote&gt;so for a 5 game series where the odds are even:&lt;br /&gt;&lt;blockquote&gt;0.5&lt;sup&gt;3&lt;/sup&gt; * (  (1-0.5)&lt;sup&gt;0&lt;/sup&gt; + (1-0.5)&lt;sup&gt;1&lt;/sup&gt; + (1-0.5)&lt;sup&gt;2&lt;/sup&gt; )&lt;br /&gt;&lt;br /&gt;0.125 * (  (0.5)&lt;sup&gt;0&lt;/sup&gt; + (0.5)&lt;sup&gt;1&lt;/sup&gt; + (0.5)&lt;sup&gt;2&lt;/sup&gt; )&lt;br /&gt;&lt;br /&gt;0.125 * ( 1 + 0.5 + 0.25 )&lt;br /&gt;&lt;br /&gt;0.125 * 1.75&lt;br /&gt;&lt;br /&gt;0.21875&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;The probability of a particular team winning 3 games in a row in a 5 game series is &lt;span style="font-weight: bold;"&gt;21.875%&lt;/span&gt; assuming each game is a 50/50 shot.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Without going into even more detail, the confusion was the result of trying to simplify the problem into "There are X outcomes possible and Y of them are the ones we want and since there is even probability of the games the total probability is Y/X"  However, since various possible outcomes involve a different number of games, they are actually weighted differently and thus its not 30% but noticeably less at ~ 22%.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-style: italic;"&gt;I have to thank &lt;span style="font-weight: bold;"&gt;Pip&lt;/span&gt; for the &lt;a href="http://stl-sabr.bajink.com/fungoes/?p=1312"&gt;shout-out&lt;/a&gt; (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;see comment&lt;/span&gt;) on Fungoes.net (&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;the STL &lt;/span&gt;&lt;a style="color: rgb(102, 102, 102);" href="http://en.wikipedia.org/wiki/Society_for_American_Baseball_Research"&gt;SABR&lt;/a&gt;&lt;span style="color: rgb(102, 102, 102);"&gt; chapter blog&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Pip is a coworker who posed the original question.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-4879140593407451812?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/10/probably-fun-baseball-stats.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-191405601302063960</guid><pubDate>Thu, 04 Sep 2008 03:42:00 +0000</pubDate><atom:updated>2008-09-03T22:59:55.717-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mac-Development</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>First App Engine Application - Static Map Maker</title><description>Over the past couple weeks I have been "working" on a newer project idea related to geo/gis data and mapping.  In working on and thinking about the project it became clear that it would be useful to be able to generate static map images for specific lat/long coordinates on Earth.  Basically, I wanted Google Maps images without Google Maps so that I could use the map images as references in my app (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;to be outlined in future posts&lt;/span&gt;&lt;/span&gt;). &lt;br /&gt;&lt;br /&gt;Thus ... I bring you &lt;a href="http://staticmapmaker.appspot.com/"&gt;&lt;span style="font-style: italic;font-size:180%;" &gt;&lt;span style="font-weight: bold;"&gt;Static Map Maker&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:180%;" &gt;!&lt;/span&gt;&lt;br /&gt;(&lt;span style="font-style: italic; color: rgb(102, 102, 102);font-size:85%;" &gt;the link goes to the live app which anyone can currently try after logging into their Google Account&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Being my first real venture into the land of &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt; applications and something that I was proud of and able to throw together in about an hour of work (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;plus a bit more research prior&lt;/span&gt;&lt;/span&gt;) ... I present to you this quick rundown of what I did and how I did it:&lt;br /&gt;&lt;br /&gt;After a small bit of research I found that Google had opened up some of its mapping data in the form of a &lt;a href="http://code.google.com/apis/maps/documentation/staticmaps/"&gt;Static Map API&lt;/a&gt; which allows for the retrieval of specific static map images based on the given http url.  &lt;span style="font-style: italic;"&gt;Perfect&lt;/span&gt;.  The only things needed were a &lt;a href="http://code.google.com/apis/maps/"&gt;Google Maps API Key&lt;/a&gt; (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;free with registration&lt;/span&gt;&lt;/span&gt;) and the specifics of the map you want.&lt;br /&gt;&lt;br /&gt;I had downloaded the &lt;a href="http://code.google.com/appengine/downloads.html"&gt;Mac GoogleAppEngineLauncher&lt;/a&gt; previously but needed to updated to the latest SDK version before I could upload any code.  With the launcher's GUI, its quite simple to create a new app and get something very fast and dirty running in no time.  After a few minutes of flipping through the &lt;a href="http://code.google.com/appengine/docs/gettingstarted/"&gt;Getting Started&lt;/a&gt; tutorial I had a index page which showed my desired form, a result page, and a couple controllers to do the heavy lifting.&lt;br /&gt;&lt;br /&gt;After a bit of testing where the map key for &lt;a href="http://regenmytoolkit.blogspot.com/2008/05/problems-and-solutions.html"&gt;localhost&lt;/a&gt; came in very handy, I had a very limited but working none-the-less application that would allow me to enter new parameters and see the resulting map.  The current app has no data validation and lacks any sort of formal tests or great coding standards but its functional (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;I am not a Python man by trade&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;I then registered the application on the app engine site (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;SMS verification of your intent to create a new application&lt;/span&gt;&lt;/span&gt;) and used the launcher to one-click upload my code.  Viola! Finished!&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:85%;" &gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;** I will probably post the code either on code.google.com or github, but that can wait until tomorrow **&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-191405601302063960?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/09/first-app-engine-application-static-map.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-5926264516884929324</guid><pubDate>Mon, 25 Aug 2008 00:54:00 +0000</pubDate><atom:updated>2008-08-24T20:02:22.061-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Reviews</category><title>Project Euler</title><description>Some days I feel dumb&lt;br /&gt;&lt;br /&gt;Well, no dumb ... just not as smart as I did in college ... learning new things and pushing my brain everyday.&lt;br /&gt;&lt;br /&gt;Queue &lt;a href="http://projecteuler.net/"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Project Euler&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The site has a couple hundred math/computational problems to solve.  All (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;that I have read&lt;/span&gt;&lt;/span&gt;) are math based but don't require just mathematical proofs to solve.  Most can be simplified through mathematical reasoning, but will require you to write an algorithm to solve (&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;ideally under a minute&lt;/span&gt;&lt;/span&gt;).  If you find an answer you can check it online and if its right (&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(102, 102, 102); font-style: italic;"&gt;and maybe even if it isn't&lt;/span&gt;&lt;/span&gt;) see someone's real solution and a forum to discuss the problem.&lt;br /&gt;&lt;br /&gt;I have done several of these over the past week or so and give me a nice problem for my brain to munch on in the background while I am at work or mowing the lawn.&lt;br /&gt;&lt;br /&gt;**I have posted some of my solutions/thoughts about the problems in a Google Notebooke &lt;a href="http://www.google.com/notebook/public/12509932047281212553/BDQ9jIgoQ0o-2wbwj"&gt;&lt;span style="font-weight: bold;"&gt;here&lt;/span&gt;&lt;/a&gt; if anyone is interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-5926264516884929324?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/08/project-euler.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-7889627623880454383</guid><pubDate>Fri, 22 Aug 2008 15:09:00 +0000</pubDate><atom:updated>2008-08-22T10:22:40.322-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Reviews</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>Synergy</title><description>Back in college I was a nerd.  Honestly, I am still a nerd, but that's beside the point.&lt;br /&gt;&lt;br /&gt;In college I had a Windows XP box as my main computer with two monitors.  I also had a linux box with its own monitor.  Not being one to want to have to switch back and forth between keyboards I quickly devised a complex KVM setup that might give me what I want (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;using multiple KVMS and crazy logic&lt;/span&gt;&lt;/span&gt;).  After a roommate convinced me a it was a lost cause, another roomate or a random forum post somewhere (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;I honestly can't remember which&lt;/span&gt;&lt;/span&gt;) turned me on to &lt;span style="font-size:130%;"&gt;&lt;a style="font-weight: bold; font-style: italic;" href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt;&lt;/span&gt;.  Voila!  Problem solved.&lt;br /&gt;&lt;br /&gt;This small opensource app allows two computers, each with their own monitors, to share a single keyboard and mouse.  The setup is simple:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;install the server on one machine&lt;/li&gt;&lt;li&gt;setup "screens" for each computer you want to connect&lt;/li&gt;&lt;li&gt;configure how the screens connect (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;e.g. the left side of my windows machine connects to my linux machine and the right side of the linux machine connects to windows&lt;/span&gt;&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;press start&lt;/li&gt;&lt;li&gt;install the client on the other machine and tell it to connect to the first machine&lt;/li&gt;&lt;li&gt;enjoy&lt;/li&gt;&lt;/ol&gt;6 simple steps and I could sweet my mouse from one side of my dual monitor setup across to the other monitor and all the way onto the linux machine.  Keyboard focus changing as I go. &lt;br /&gt;&lt;br /&gt;The setup isn't without its drawbacks (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;it appears that the &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.altuit.com/webs/altuit2/SynergyOSX/Instructions.htm"&gt;Mac client&lt;/a&gt;&lt;span style="font-style: italic;"&gt; isn't totally complete including copy and paste and invariably you will attempt to drag a window off its host OS and wonder why the mouse stops moving&lt;/span&gt;&lt;/span&gt;) but for free its great.&lt;br /&gt;&lt;br /&gt;Right now I am using it at work to make my testing of our app in Safari easier.  Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-7889627623880454383?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/08/synergy.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-125892506816455035</guid><pubDate>Wed, 28 May 2008 18:32:00 +0000</pubDate><atom:updated>2008-05-28T14:14:08.667-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Reviews</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Ruby</category><category domain="http://www.blogger.com/atom/ns#">Work</category><category domain="http://www.blogger.com/atom/ns#">UI</category><title>Netbeans observations/complaints</title><description>I have been meaning to do a detailed writeup of my recent use of &lt;a href="http://www.netbeans.org/"&gt;&lt;span style="font-weight: bold;"&gt;Netbeans &lt;/span&gt;&lt;/a&gt;and how I find that it compares with &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;, &lt;a href="http://www.jetbrains.com/idea/"&gt;Intellij&lt;/a&gt;, and my admitedly limited use of Visual Studio .Net 2005 .... however I have a problem with big posts like that ... they never get done.&lt;br /&gt;&lt;br /&gt;So instead, here are a few of my recent observations&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Along with Elcipse ... given that these IDEs are free and have the quality they do is amazing.&lt;/li&gt;&lt;li&gt;The Netbeans community has produced tons of great &lt;a href="http://www.netbeans.org/kb/index.html"&gt;walkthroughs &lt;/a&gt;and tutorials for how to get up and running with various technologies/languages using Netbeans.  Granted most are understandably heavily dependent on using Netbeans, they are full of good general content as well.  They are great at giving you a starting point for something new&lt;/li&gt;&lt;li&gt;The overall user experience is cleaner than Eclipse/IntelliJ for most things.  However, this is somewhat due to it lacking features the other two have.&lt;/li&gt;&lt;li&gt;As a platform for learning Ruby coming from a Java background, its really nice.  I love that it comes with Rub support built in with a lot of great features/tutorials/wizards/help.  Also, the fact that it leverages &lt;a href="http://jruby.codehaus.org/"&gt;JRuby &lt;/a&gt;out of the box so that its self contained and doesn't require a ruby installation is a credit to the people working on JRuby.&lt;/li&gt;&lt;li&gt;Netbeans lacks in the refactoring/editing department when compared to Eclipse and IntelliJ. Not horrible, but not nearly as good.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Built-in support and packaging with Tomcat 6 and Glassfish v2 servers plus its support for JEE 5 specs and tools is great&lt;/li&gt;&lt;li&gt;The projects view is a nice feature (compared to the files view) which gives you a more logical view of your project independent of where things are on the system ... however its not as customizable as IntelliJ's and I have had numerous re-indexing/refreshing issues where it didn't find new files for a while.&lt;/li&gt;&lt;li&gt;Netbeans indexes TONS of stuff when it starts up and when you add new files to its workspace ... which means normal work is faster than Eclipse is (or was in the past) but it takes longer than IntelliJ and seemingly reindexes lots of files that haven't changed since I installed them.&lt;/li&gt;&lt;li&gt;Netbeans has some really nice editors/wizards which include a graphical drag-and-drop interface for creating JSF pages (and Swing forms?).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Evidently there is a bug in Netbean's file search b/c yesterday I tried to case-sensatively search for a particular phrase in my project and the Netbeans file search found 4 results.  However there were aprox 6 files with the text.  To be fair, I don't know exactly what the problem was and when I did a similar search from Windows .. it found only 2 matches so I am not sure what was going on.  But irregardless it should have found them all. (if you did a search in the editor I had open, which was to a file in the same project, it found 2 references in the file, but it wasn't in the results list)&lt;/li&gt;&lt;/ul&gt;Overall its a very nice IDE with growing support for different languages.  Its free which is nicer than IntelliJ's &lt;a href="http://www.jetbrains.com/idea/buy/index.jsp"&gt;not free&lt;/a&gt; and cleaner than Eclipse which is less and less an IDE and more a platform (for better or worse).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-125892506816455035?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/05/netbeans-observationscomplaints.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-5208111437178285266</guid><pubDate>Sat, 24 May 2008 01:40:00 +0000</pubDate><atom:updated>2008-05-23T21:12:34.347-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Work</category><title>Problems and Solutions</title><description>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Each of the following things has come to bite me in the back side over the past few days...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ruby / Rails dates:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Since Ruby (and other languages like it) allows you to dynamically add new methods to classes after they are originally defines, AND everything is an object (including numbers) you can do things like these:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;6.months&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3.weeks.from_now&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1.year.ago&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which leads to easily read and understood code and is pretty clever.  Only one problem .... there is a subtle nuance here that can be easily missed (as was by me the other day) that can lead to trouble (this same problem is inherant to many languages and DB's concept of time/dates) as is demonstrated by the following statements:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;60.days == 2.months&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;60.days.ago != 2.months.ago&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some of you may pick up on the reason why this is true (and false) but given that I haven't worked in Ruby long and the implementation of the &lt;a href="http://api.rubyonrails.com/classes/ActiveSupport/CoreExtensions/Numeric/Time.html"&gt;.months method apears&lt;/a&gt; to define it as self.days *30 lead me to some confusion.&lt;br /&gt;&lt;br /&gt;The reason for the difference is a matter of context.  Without the context of a particular point in real time, 2.months is really an abstract duration which the developers decided to define as 30 days / month.  When you say .ago you are really saying Time.now - XXX which puts it into context of today and now months.ago means take today's day of the month and move the months number back 2.  So as was the case the other day, &lt;span style="font-family: courier new;font-size:85%;" &gt;2.months.ago == 61.days.ago&lt;/span&gt; .... thus the problem.&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;NDoc&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Recently I was documenting some C# code and my pair suggested we use a tool called &lt;a href="http://ndoc.sourceforge.net/"&gt;NDoc&lt;/a&gt; which he had used in the past to produce nice Windows help files similar to JavaDocs ... great.&lt;br /&gt;&lt;br /&gt;Only problem is that NDoc apears to only work with Visual Studio 2k3 and older ... and someone's port for 2005 has a few bugs.  The first being that there is evidently a problem with some of the binaries which means you can only use it if you download the source and rebuild (not a big problem).  The second was that it doesn't handle dependencies very well and won't know where to look for your referenced .dlls unless you explicitly tell it where to look for them.  This wouldn't be too bad if the feature worked ... which it doesn't.  Well, it DOES work if you know the special handshake.  In this case the hand shake is to change the property saying to use fixe paths from false (default) to true.  And then back again (false x2).  Then everything magically works.  Thank you &lt;a href="http://geekswithblogs.net/sudheersblog/archive/2006/07/24/86146.aspx"&gt;random comments poster&lt;/a&gt; for this insight and thank you &lt;a href="http://sourceforge.net/projects/ndoc05"&gt;NDoc2005&lt;/a&gt; for producing some decent documentation.&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Google Maps API&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;The google maps api requires a key to be accessed, which can be generated for a given URL you want to use it on by their website.  Simple enough, but I have had trouble when doing development work on other sites which didn't have the same key.  Luckily I stumbled upon &lt;a href="http://snippets.dzone.com/posts/show/3201"&gt;this&lt;/a&gt; yesterday.  It says its the key for localhost and it works so I am not complaining. :)&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt; + &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; + SSH + &lt;a href="http://capify.org"&gt;Capistrano&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;This one was today.  While trying to get our Rails app to be deployable via Capistrano, we decided it would be easier to work on it locally before bothering to set it up on one of our dev servers ... oh how we were wrong.  Capistrano attempts to SSH to the server you are deploying to and export the latest code for your project with Subversion.  One of the commands it tries to execute looks something like this:&lt;br /&gt;&lt;br /&gt;svn update -s -r1234 https://svn.xxxxxx.com /www/apps/myproject/20050523042212/ &amp;amp;&amp;amp; (echo 1234 /www/apps/myproject/20050523042212/RELEASE&lt;br /&gt;&lt;br /&gt;Thats not quite it but its close enough.  Basically via an SSH session it tries to export the latest revision to a new time stamped directory (creating it if necessary) and echoing out the version number to a file called RELEASE.   Thats all fine and dandy if your server is running a *nix, but if you are trying to test it locally on a windows box and your SSH server is being run via Cygwin .. then your in for a world of hurt.&lt;br /&gt;&lt;br /&gt;Basically, the path you passed into SVN ends up having its slashes switched and is mapped relative to the drive root while the other is mapped POSIX style relative to your Cygwin root which unless you went against the big warning box that pops up, is NOT the drive root.  Thus it doesn't work.&lt;br /&gt;&lt;br /&gt;I don't have a great solution to that one ... it was just a pain and caused me to lose 45 minutes of my life I will never get back.  Tuesday we skip the local testing and get it working on the dev box which is Fedora Core.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-5208111437178285266?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/05/problems-and-solutions.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-8032979844741617790</guid><pubDate>Fri, 23 May 2008 01:49:00 +0000</pubDate><atom:updated>2008-05-22T20:59:00.395-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Work</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>Long time update</title><description>A lot has gone on in my life during the 2 months between the last post and this ... but I won't go into it all.  Basically, I started a new job that is a ton more exciting and which I love ... but which doesn't leave me with tons of free time during the day to surf the web and write up posts (which I am great full for).  The only problem is that now I have much less time to post and much more interesting tech stuff to write about.&lt;br /&gt;&lt;br /&gt;I am going to &lt;span style="font-style: italic;"&gt;try&lt;/span&gt; and actually post semi-reguarially about the stuff I am doing at work and in my free time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;That being said .....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At work I am currently in a holding pattern on my primary project (waiting on the client).  For the past several weeks we have been developing a pair of web service implementations and server code for a government contract to aid the &lt;a href="http://www.nsopr.gov/"&gt;National Sex Offender Public Registry&lt;/a&gt;.  Its been some very interesting work:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;learning more about web services&lt;/li&gt;&lt;li&gt;TDD+pairing every day&lt;/li&gt;&lt;li&gt;comparing our Java and .Net implementations&lt;/li&gt;&lt;li&gt;getting to work in .Net for the first time&lt;/li&gt;&lt;li&gt;writing our test harness code in Ruby&lt;/li&gt;&lt;li&gt;trying to code in C#, Java, and Ruby within the span of 5 minutes and having semi-colons in the right places&lt;/li&gt;&lt;/ul&gt;While we wait on some decisions by the client and find out what they think of our work so far, my pair and I are helping out another group update some internal application code written in Ruby on Rails.  I did some very similar work my first couple weeks before the NSOPR project started up and its going well.&lt;br /&gt;&lt;br /&gt;Other than work I am working on a small personal project related to word searching and an online game, bouncing ideas around and trying to help out the Brain Trust (you know who you are) and as of today trying out &lt;a href="http://code.google.com/appengine/"&gt;Google's AppEngine&lt;/a&gt; framework as I work through their tutorial and consider writing up an app to try and solve the problem we discussed &lt;a href="http://marmot4.no-ip.org:8080/frames.asp?src=bf.asp"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Wish me luck&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-8032979844741617790?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/05/long-time-update.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-2259250385293490403</guid><pubDate>Thu, 20 Mar 2008 00:37:00 +0000</pubDate><atom:updated>2008-03-19T19:50:05.185-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Practices</category><category domain="http://www.blogger.com/atom/ns#">Reviews</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>Test Driven Development By Example - Kent Beck</title><description>After hearing about &lt;span style="font-weight: bold;"&gt;TDD&lt;/span&gt; and going through a class on TDD I was very eager to see what &lt;a href="http://www.amazon.com/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1205974117&amp;amp;sr=8-1"&gt;this book&lt;/a&gt; could offer.  After finishing it this past week, I can honestly say it was a very good book ... but I still need experience more than anything.&lt;br /&gt;&lt;br /&gt;The book is broken up into 3 main parts: &lt;span style="font-weight: bold;"&gt;1)&lt;/span&gt; straightforward TDD example involving currency conversion code in Java, &lt;span style="font-weight: bold;"&gt;2)&lt;/span&gt; a much more thought provoking example writing a xUnit testing framework from scratch in Python and using it to test itself, and &lt;span style="font-weight: bold;"&gt;3)&lt;/span&gt; a large collection of "patterns" for development, design, testing, etc.&lt;br /&gt;&lt;br /&gt;Overall I thought the book was very good and presented a lot of topics in a straight forward and engaging manor.  The only problem I had with the book, really with the topic, is that it is hard to follow the examples without sitting with a person while they do it.  Numerous times, if the author had been sitting with me as he types, I would have asked simple questions about what just happened, why we did something, or what some bit of code looked like from a few pages back ... all of which can and were answered in the book, but not without flipping many pages and trying to keep the whole code base straight in my head.&lt;br /&gt;&lt;br /&gt;I especially enjoyed the example in Python since its a language I am currently trying to learn, and it showed some of the constructs that Python has to offer over other static languages like Java in an easy to digest manor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;All in all a definite recommended read&lt;/span&gt; .... although I can tell that experience is what is going to drive this particular skill (as is the case most of the time).  I can follow along with the author's decisions and understand his logic for the most part ... but I don't feel confident I could or would come to the same ones given the chance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-2259250385293490403?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/03/test-driven-development-by-example-kent.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-3937355367606606658</guid><pubDate>Wed, 12 Mar 2008 15:14:00 +0000</pubDate><atom:updated>2008-03-12T10:52:56.447-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Practices</category><category domain="http://www.blogger.com/atom/ns#">Work</category><title>IntelliJ IDEA Tips</title><description>&lt;span style="font-weight: bold;"&gt;This past week I found two new* features for working in IntelliJ .....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Shelves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;IntelliJ 7.0 brings the idea of Shelves to its version control and local history features.  Basically, by "&lt;span style="font-style: italic;"&gt;shelving&lt;/span&gt;" local changes, IntelliJ gives you a nice interface to creating a patch for your current work and automatically rolls back the changes to the current VCS version.  This makes it easy to experiment with some changes or begin working on something, stop and go back to a previous version to handle some other situation (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;like a bug fix&lt;/span&gt;&lt;/span&gt;) and then bring your local changes back.  Normally I would just commit my changes to the VCS, but if I am only partially done and they are not complete, I might not want to.&lt;br /&gt;&lt;br /&gt;In trying to learn a little bit more about this feature, I noticed a few entries on the interwebs about problems people were having with IntelliJ losing site of their patches or being unable to apply them back.  In my limited practice I haven't had any problems and IntelliJ was able to easily add back my changes even when I had modified one of the files in the meantime.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Tomcat Plugin Debugging&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the past I have had limited success with application server plugins for Eclipse (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;they didn't always work, required strange configurations, had memory issues, etc&lt;/span&gt;&lt;/span&gt;) but they often claimed many great features also (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;ability to restart from with the IDE, automatic deployment of changes, monitoring, and DEBUGGING&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;When I moved to my current employer and began working with IntelliJ instead of Eclipse, and no one I worked with used the built in plugins, I reverted back to the normal command line tools.&lt;br /&gt;&lt;br /&gt;The other day we ran into a very strange bug in our development environment which we were able to duplicate locally, but unable to understand with the code's existing level of logging and lack of monitoring features.  IntelliJ to the RESCUE!&lt;br /&gt;&lt;br /&gt;After ~15 minutes of playing around, figuring out why my compiled classes didn't contain the right debug information, and spending some time trying to figure out where IntelliJ's version of Tomcat wrote it's log files ... I was up and running and able to fully debug my applications code while running it locally in Tomcat.&lt;br /&gt;&lt;br /&gt;If anyone is interested in some of the steps I took to get it working, I have uploaded a copy of the quick documentation I created for work &lt;a href="http://benjaminplee.googlepages.com/DebugingTomcat5.htm"&gt;&lt;span style="font-weight: bold;"&gt;here&lt;/span&gt;&lt;/a&gt;.  I wrote the page in word and foolishly saved it as HTML ... which produced tons of crap HTML full of Word specific tags .... luckily I found &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=209ADBEE-3FBD-482C-83B0-96FB79B74DED&amp;amp;displaylang=EN"&gt;this tool&lt;/a&gt; which removes them.  Funny how MS had to release a tool to removed stuff that their tool added in the first place (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;and probably no one ever used&lt;/span&gt;&lt;/span&gt;).  Its also funny that their link to other advantages for using the tools is name: &lt;span&gt;&lt;a href="http://office.microsoft.com/Assistance/2000/htmlfilter.aspx"&gt;Use Office HTML Filter to Create Web Pages that Download Faster&lt;/a&gt;&lt;/span&gt;.  Never mind, it only installs if you have &lt;a href="http://articles.techrepublic.com.com/5100-6270_11-5197013.html"&gt;Office 2000 installed&lt;/a&gt; and we have 2002. :-(&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;*&lt;/span&gt; new to me, which is sad on the second one.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-3937355367606606658?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/03/intellij-idea-tips.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-867492530048642744</guid><pubDate>Tue, 04 Mar 2008 16:28:00 +0000</pubDate><atom:updated>2008-03-04T10:45:06.743-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Spedini</category><category domain="http://www.blogger.com/atom/ns#">JavaUserGroup</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>Too many ideas, too little time</title><description>I feel like I haven't been able to work on any of my many tech-related projects lately ... or at the very least haven't been able to make much headway on any of them.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://regenmytoolkit.blogspot.com/search/label/Spedini"&gt;&lt;span style="font-weight: bold;"&gt;Project Spedini&lt;/span&gt;&lt;/a&gt; - on hold.  this still interests me, but I was having to spend a lot of time trying to figure out how to interface with the UI as a human, and not on the part I really cared about ... the algorithms to decipher what was going on and predict what was happening next.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;TDD project&lt;/span&gt; - I have been slowly working through a demo project for myself to try and get a little bit more experience in TDD and testing habits (since my current work doesn't use them) but this is going slowly.&lt;/li&gt;&lt;li&gt;&lt;a href="http://regenmytoolkit.blogspot.com/search/label/Python"&gt;&lt;span style="font-weight: bold;"&gt;Delicious Blogger Python Script&lt;/span&gt;&lt;/a&gt; - no real work on this since my last post :-(&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://regenmytoolkit.blogspot.com/2008/01/ajax-python-and-javascrip-oh-my.html"&gt;AJAX&lt;/a&gt; Framework Testing&lt;/span&gt; - I did some initial work with Python but not much else b/c the use I had for it at work fizzled when we decided to solve the problem another way.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://robocode.sourceforge.net/"&gt;&lt;span style="font-weight: bold;"&gt;RoboCode &lt;/span&gt;&lt;/a&gt;- I have to thank some Cincinnati friends for this one.  They are all trying their hand at creating some robot AI for the RoboCode environment and of course, I got interested and had to start one too.  This is a really neat idea and a nice way to try things out and get some immediate results (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;having the whole graphical testbed and environment already written is the key&lt;/span&gt;&lt;/span&gt;).  I have a very simple bot coded up .... which find it hard to hit another dummy bot that just drives in a circle ... but at least its a start.  &lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;If anyone is interested in writing a bot or talking about ideas, let me know!&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Like I said, too many ideas, too little time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;If the weather holds up,&lt;br /&gt;I am planning to go to the Gateway JUG meeting tonight&lt;br /&gt;for the Adobe Flex presentation ...&lt;br /&gt;but its snowing pretty hard at the moment.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-867492530048642744?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/03/too-many-ideas-too-little-time.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-1674485715954151658</guid><pubDate>Fri, 22 Feb 2008 15:43:00 +0000</pubDate><atom:updated>2008-02-22T09:44:42.897-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RandomWebLinks</category><title>Random Web Links for 2008-02-22</title><description>&lt;ul&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://udidahan.weblogs.us/2008/02/15/from-crud-to-domain-driven-fluency/"&gt;From CRUD to Domain-Driven Fluency&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;another nice example of programming toward the domain, ala DSL work, so that your code more directly reflects the need and not the how&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html"&gt;Moserware: Does Your Code Pass The Turkey Test?&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;localization is one of those very difficult and often overlooked non-functional requirements&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://thediscoblog.com/2008/02/18/defensive-programming-is-so-groovy/"&gt;Defensive programming is so groovy&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;Groovy is on my list of dynamic languages to check out ... this is a nice, clean, syntax trick&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://msmvps.com/blogs/kathleen/archive/2007/11/13/why-your-development-is-crazy.aspx"&gt;Why Your Development is Crazy - Leaning Into Windows&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;that is a lot to keep in mind ;-)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches"&gt;InfoQ: Scrum and XP from the Trenches&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;free ebook&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.collegedegree.com/library/college-life/collegedegree-60-killer-open-courseware-collections-for-web-designers"&gt;60+ Killer Open Courseware Collections for Web Designers - College Degree.com&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;good collection of web-design related free online courses&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://ejohn.org/blog/partial-functions-in-javascript/"&gt;John Resig - Partial Application in JavaScript&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;Interesting use of dynamic language, currying.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://stuffthathappens.com/blog/2008/01/10/in-the-zone/"&gt;In The Zone&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;Great cartoon, if only I could keep it up for a good amount of time.  Sooner or later Google Reader starts telepathically calling my name&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-1674485715954151658?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/random-web-links-for-2008-02-22.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-2101432558968359890</guid><pubDate>Tue, 19 Feb 2008 20:15:00 +0000</pubDate><atom:updated>2008-02-19T19:11:32.666-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Questions</category><category domain="http://www.blogger.com/atom/ns#">Work</category><title>A Proud Sun Certified Enterprise Architect</title><description>Today I found out that I passed parts II and III of the &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Sun Certified Enterprise Architect&lt;/span&gt;&lt;/span&gt; (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;JEE 5.0 edition&lt;/span&gt;&lt;/span&gt;) exam ... meaning that I am now fully &lt;a href="http://www.sun.com/training/certification/java/scea.xml"&gt;SCEA certified&lt;/a&gt;!  I have been waiting almost two months for the last parts to be graded and results sent out.  Going into it, I didn't think I had a chance ... but after a lot of studying and a ton of time spent trying to figure out if I did the project portion correct .. I am &lt;span style="font-style: italic;"&gt;proud&lt;/span&gt; to say I passed.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Do I feel any different now that I am a SCEA?    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Nope&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Am I glad that I got the certification?    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Yes&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Will I put it on my resume?    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;Yes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Do I think this certification proves that I can do X, Y, or Z?    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;No, but its a good start.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Do I think recruiters/hiring managers should use them as a hiring requirement?    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;No&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Coming out of college I didn't know much.  Period.  I knew there were lots of professional certifications out there and that "I should have some" because ...... other people do.  Working as a consultant right out of school, I was pushed to get at least one basic certification in either the .NET or Java side of things.  Obviously I chose Java.  This was done, primarily, so that the consulting company could put it in my profile for perspective clients ... as a way of proving I had some level of experience.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I don't fully agree with this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have come to the conclusion that certifications don't mean anything out of context.  It should be understood that they only "prove" that I could do well on a test, the day I took the test.  They don't prove I know "the stuff", they don't mean I will be a good employee, and they don't mean I will do well when I try and write software for you.  They don't even get you the ladies (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;or at least the ladies who go for a guy wearing a SCJP pin, aren't the ladies I would be after&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;So what are certifications good for?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, if you talk to a guy and he can explain why he got a particular certification, what he found difficult and easy about it, how he thinks it could be improved, and how he has related the stuff he learned to his day to day work (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;citing specific examples&lt;/span&gt;&lt;/span&gt;) ... thats a great thing.  If you can talk about your experience in the area and how studying all the crazy edge-cases and unused syntax has helped you on a project ... way to go.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;If not, its just proves you tested well.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am proud of my certifications.  I am proud of the time I spent studying for them and proud of the instances where I knew something another developer didn't that I learned while studying.  I am even more proud of the crazy problems I couldn't solve despite being certified in the technology ... but remembered how to tackle the problem because of it.  I am most proud because I got them without anyone bugging me to .... many notable leaders in the field will say that the majority of programmers don't read blogs, write pet programs, or constantly think about problems.  They don't get certifications to force themselves to learn something beyond what they know today, just for themselves.  I am most proud of the fact that I am not like that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;At least most of the time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;What are your thoughts/experiences with professional certifications?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-2101432558968359890?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/proud-sun-certified-enterprise.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-5675117684656638717</guid><pubDate>Mon, 18 Feb 2008 17:10:00 +0000</pubDate><atom:updated>2008-02-18T12:27:45.359-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Questions</category><title>My Computing Past</title><description>&lt;a style="font-weight: bold;" href="http://jeffreyscudder.blogspot.com/2008/02/my-programming-journey-so-far.html"&gt;Scudder's recent post&lt;/a&gt; recounting his march from young computer nerd, to professional computer nerd, has inspired me to do the same.  Here is an outline of my computing past: projects I remember, things that inspired me, languages I played around in ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Early School Years&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The first memory I can think of that involves me making a computer do something interesting, was in early grade school when we would go to the "computer lab" and drew pictures with &lt;a style="font-weight: bold;" href="http://en.wikipedia.org/wiki/Logo_%28programming_language%29"&gt;LogoWriter&lt;/a&gt;.  I loved making that crazy little turtle draw spin 'round and 'round, drawing lines all over those ~256 color screens.  I didn't really have much of an idea of what I was doing, but man it was cool to send him off drawing with his little pen in a random direction, for some huge number units.  Lines-galore!&lt;/li&gt;&lt;li&gt;At some point near the end of elementary school my dad showed me some very basic things in &lt;a href="http://en.wikipedia.org/wiki/Quickbasic"&gt;&lt;span style="font-weight: bold;"&gt;QuickBASIC&lt;/span&gt;&lt;/a&gt; and I was off (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;I am still trying to prove &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikiquote.org/wiki/Edsger_Dijkstra"&gt;Dijkstra &lt;/a&gt;&lt;span style="font-style: italic;"&gt;wrong&lt;/span&gt;&lt;/span&gt;).  I can remember spending large amounts of time, trying to remember the few things he had taught me, trying my darnedest to create a password protection program.  The thing didn't really protect anything in particular and I am sure the password was in the code in plain text .... but if you didn't type it perfectly the first time and/or do it in a short amount of time .... all hell would break loose.  The program would start playing random musical notes and flash the screen bright colors until you hit Esc or Ctrl+Q.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;High School&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;My freshman year of HS I took a &lt;span style="font-weight: bold;"&gt;class in BASIC&lt;/span&gt;.  I learned a lot more during this class, with very little of it coming from the curriculum.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Most of my new knowledge came from working on a "large" &lt;span style="font-weight: bold;"&gt;casino simulation game&lt;/span&gt; that a few of my classmates and I cooked up.  With BASIC's inherently simple graphics drawing capabilities (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;gotta love &lt;/span&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;screen 12&lt;/span&gt;&lt;/span&gt;), some random code downloaded off the internet and a TON of hacking together, we actually ended up with a decent game.  The first screen showed the outside of the casino including flashing neon lights.  When you entered the casino you had to "walk" down a "3D" hall to get to the game rooms (this took me several days to figure out).  I think we had simplified versions of poker, roulette, and some dice game.  Not bad for a total n00b.&lt;/li&gt;&lt;li&gt;My second crowning achievement was a program which displayed zillions of ASCII characters to&lt;span style="font-weight: bold;"&gt; look like the BASIC editor&lt;/span&gt;.  When you typed, the text showed up in the right window and if you hit Alt+F, etc ... the drop down menus popped up.  However, the best part was when you hit "Run".  At that point the program played some freaky random noise generator out the PC's internal speaker, showed a blank screen with a pulsing cursor and wouldn't let you do anything (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;unless you hit Ctrl+Break&lt;/span&gt;&lt;/span&gt;).  The teacher thought it was hilarious and suggested I leave it running for the next class.  Well, the next day I found out that the girl who sat in my seat next typed in a bit of her program for the day and tried to run it .... at which point the computer "freaked-out" and she began to cry b/c she thought she broke the machine.  ;-)  &lt;span style="font-size:85%;"&gt;Blame the teacher, not me. :-)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;UNetIt.com&lt;/span&gt; - To try and make a long story short, a HS friend of mine got it into his head that tons of money could be made if we could put together an online web directory of just programming tutorials, scripts, hosts, links, etc.  www.UNetIt.com was the answer.  The site was backed by some crazy VB-esque code, a horrible Access DB and ran on IIS .... but it worked.  I spent countless hours surfing the web finding links to hosts, tutorials and scripts written in PHP, ASP, and JSP before I had any clue what they really did.  The site actually was getting some decent traffic at the time and he was able to sell some banner adds to random companies netting us 10's of dollars!!!!  While the site never really took off, given our experience it was a huge success.  If you Google around for it you can still find some random broken links from back in its &lt;span style="text-decoration: underline;"&gt;heyday&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;AP Computer Science&lt;/span&gt; brought &lt;span style="font-weight: bold;"&gt;C++ &lt;/span&gt;into my sphere of knowledge.  Granted it took me a few weeks to have any clue what all those #include lines were doing and it took me until college to fully realize that people didn't use APString in the real world ... but I learned a lot.  &lt;span style="font-style: italic;"&gt;I got a 5&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;My senior year my parents didn't think I should take a study hall ... so instead I took a new class on &lt;span style="font-weight: bold;"&gt;VisualBasic &lt;/span&gt;which replaced my original one in BASIC.  The teacher told me that he didn't want me bugging him about too many "advanced" questions since I already knew the stuff he was going to teach ... so he had me fill out the final exam in the first week and told me that if helped out the other kids and didn't bug him too much, I would get an A without doing any homework.  :-D&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://artssciences.udayton.edu/ComputerScience/"&gt;&lt;span style="font-weight: bold;"&gt;College&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Most of the early classes were taught with &lt;span style="font-weight: bold;"&gt;C++&lt;/span&gt;&lt;/li&gt;&lt;li&gt;We had to take a file manipulation and storage class that used &lt;span style="font-weight: bold;"&gt;COBOL&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Reverend Thomas Schoen taught a very &lt;span style="font-style: italic;"&gt;interesting&lt;/span&gt; class with &lt;span style="font-weight: bold;"&gt;C&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Assembly&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Numerous DB classes with &lt;span style="font-weight: bold;"&gt;SQL &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;PL/SQL&lt;/span&gt;&lt;/li&gt;&lt;li&gt;In a projects class on Genetic Algorithms and Evolutionary Computing, we wrote programs that tried to match facial photos by "evolving" better matching algorithms with &lt;span style="font-weight: bold;"&gt;Matlab&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Out later classes were mainly taught in &lt;span style="font-weight: bold;"&gt;Java &lt;/span&gt;including one where we wrote an assembler and virtual processor to handle a subset of some Motorola chip's instruction set.&lt;/li&gt;&lt;li&gt;Our &lt;a href="http://maics.us/MAICS2004.pdf"&gt;research &lt;/a&gt;was mainly done in very naive &lt;span style="font-weight: bold;"&gt;Java &lt;/span&gt;using &lt;a style="font-weight: bold;" href="http://www.trl.ibm.com/aglets/"&gt;Aglets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I also did random web design work for on-campus &lt;a href="http://www.flyerenterprises.com/"&gt;jobs &lt;/a&gt;and &lt;a href="http://flyerwebdesign.com/"&gt;FlyerWebDesign &lt;/a&gt;in &lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;/&lt;span style="font-weight: bold;"&gt;JavaScript&lt;/span&gt;/&lt;span style="font-weight: bold;"&gt;Flash&lt;/span&gt;/&lt;span style="font-weight: bold;"&gt;PHP&lt;/span&gt; (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;neither contain my code anymore, thankfully&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.linkedin.com/in/benjaminplee"&gt;&lt;span style="font-weight: bold;"&gt;Professional Career&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The vast majority of my professional work experience has been on the &lt;span style="font-weight: bold;"&gt;JVM &lt;/span&gt;doing &lt;span style="font-weight: bold;"&gt;J2EE &lt;/span&gt;web applications and client applications in &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Lately I have taken an interesting in dynamic languages and have started playing around with &lt;span style="font-weight: bold;"&gt;Python &lt;/span&gt;and am intending to look more into &lt;span style="font-weight: bold;"&gt;Groovy &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;Ruby &lt;/span&gt;in the upcoming months.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold; font-style: italic;"&gt;Anyone else have some interesting old-school computing stories to tell?  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-style: italic;"&gt;I re-found an interesting diagram of programming language time lines &lt;/span&gt;&lt;a style="color: rgb(0, 0, 153); font-style: italic;" href="http://www.oreilly.com/news/languageposter_0504.html"&gt;here&lt;/a&gt;&lt;span style="color: rgb(0, 0, 153); font-style: italic;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-5675117684656638717?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/my-computing-past.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-2694788409531618198</guid><pubDate>Wed, 13 Feb 2008 21:17:00 +0000</pubDate><atom:updated>2008-02-13T15:19:03.867-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RandomWebLinks</category><title>Random Web Links for 2008-02-13</title><description>&lt;ul&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://devlicio.us/blogs/derik_whittaker/archive/2008/02/10/why-i-love-being-a-software-developer.aspx"&gt;Why I Love being a Software Developer - Derik Whittaker&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;true dat&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://weblog.raganwald.com/2008/02/naive-approach-to-hiring-people.html"&gt;The Naive Approach to Hiring People&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;very interesting article&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://stuffthathappens.com/blog/2008/02/10/idea-is-now-enterprisey/"&gt;IDEA is Now Enterprisey&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;compared to many IDEs, $600 is still cheap, but compared to free, its expensive.  Its is really nice though.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.tuaw.com/2008/02/06/truecrypt-released-for-os-x/"&gt;TrueCrypt released for OS X (TUAW)&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;gonna have to use this with my USB drive&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.ericsink.com/scm/source_control.html"&gt;Source Control HOWTO - Eric.Weblog()&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;good set of articles about HOW to use source control and not WHAT or IF&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-2694788409531618198?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/random-web-links-for-2008-02-13.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-4453795923989633631</guid><pubDate>Mon, 11 Feb 2008 18:18:00 +0000</pubDate><atom:updated>2008-02-11T12:53:54.344-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Questions</category><category domain="http://www.blogger.com/atom/ns#">BadBadBad</category><title>Shortcut Keys in Windows ...</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zm9CzZ6xKaQ/R7CZAf6H2AI/AAAAAAAABKg/OOuS_mq0MxU/s1600-h/20070529-windowskey-f1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 112px; height: 112px;" src="http://3.bp.blogspot.com/_zm9CzZ6xKaQ/R7CZAf6H2AI/AAAAAAAABKg/OOuS_mq0MxU/s320/20070529-windowskey-f1.jpg" alt="" id="BLOGGER_PHOTO_ID_5165797006438291458" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;... are frustrating.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Here a few things I learned today at work:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IntelliJ IDEA has a built in refactoring for creating a new constant from an expression mapped to Ctrl+Alt+C by default.&lt;/li&gt;&lt;li&gt;At some point prior to me using my current PC, another user installed Lotus Sametime Client and mapped its shortcut to Ctrl+Alt+C&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When I try to run the refactoring in IntelliJ IDEA, Sametime starts instead.&lt;/li&gt;&lt;li&gt;Since I never user Sametime, I went to &lt;span style="font-family:courier new;"&gt;Add/Remove Programs&lt;/span&gt; and attempted to uninstall it.  Despite acting like it uninstalled the program, it remains, shortcut key and all.&lt;/li&gt;&lt;li&gt;After some searching I finally found the renegade program on the disk and found that there was a custom program shortcut hidden away in &lt;span style="font-family:courier new;"&gt;Programs&gt;Accessories&gt;Communication&lt;/span&gt; which had the offending shortcut-key set.&lt;/li&gt;&lt;li&gt;After deleting the program files and the shortcut, I still couldn't call the refactor.&lt;/li&gt;&lt;li&gt;It turns out that if you delete a shortcut file (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;with a shortcut-key set&lt;/span&gt;&lt;/span&gt;), the binding doesn't get removed right away (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;presumably this happens at some other point, like when you restart or log-in&lt;/span&gt;&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;The only way I have found to truly remove the binding is to create another shortcut with the same binding, change the binding to another key (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;or better yet, nothing&lt;/span&gt;&lt;/span&gt;), apply this change, and then delete the shortcut.  This seems to effectively unbind the key.&lt;/li&gt;&lt;li&gt;Finally now I can use the shortcuts in the program I care about.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zm9CzZ6xKaQ/R7CZNf6H2BI/AAAAAAAABKo/fzoVBj4hmes/s1600-h/shortcut.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_zm9CzZ6xKaQ/R7CZNf6H2BI/AAAAAAAABKo/fzoVBj4hmes/s400/shortcut.gif" alt="" id="BLOGGER_PHOTO_ID_5165797229776590866" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Seems a little limiting.  All those restrictions, but no way to find out if it DOES conflict.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Despite a decent amount of searching I was unable to find anything on Google that helped the situation. I found plenty of sites showing me default Windows shortcut-key bindings, and several more &lt;a href="http://www.techsupportforum.com/microsoft-support/windows-2000-pro-nt-workstation-support/74423-shortcut-keys-conflict.html"&gt;posts&lt;/a&gt; from people frustrated with similar problems, but nothing to help.  As far as I can tell, Windows doesn't have the ability to show you what key bindings are currently used and for what (&lt;span style="font-style: italic;"&gt;this would be immensely helpful&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;To be honest, I don't know how Mac OS X handles these situations but in my 1+ years of working on it I have never had the problem.  I don't have this problem often in Windows, but have had it several times now.&lt;br /&gt;&lt;br /&gt;I guess the real problem is one of scopes.  There needs to be a clearly defined logic for how key-bindings get set/reset and how they cascade down scopes.  If bindings are going to cascade into more specialized scopes, they need to have rules about what they can start with or something (e.g. have all Windows level ones start with the Windows key) and if something is allowed to be reset at a more specialized level, have only the closest scope take effect.  It looks like &lt;a href="http://msdn2.microsoft.com/en-us/library/da5kh0wa%28VS.80%29.aspx"&gt;Visual Studio&lt;/a&gt; does this along with other programs ... why not between programs and the OS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Anyone run into similar problems?  Or know of a way to see all of the bindings currently set?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-4453795923989633631?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/shortcut-keys-in-windows.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_zm9CzZ6xKaQ/R7CZAf6H2AI/AAAAAAAABKg/OOuS_mq0MxU/s72-c/20070529-windowskey-f1.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-5787072708605953927</guid><pubDate>Sat, 09 Feb 2008 17:28:00 +0000</pubDate><atom:updated>2008-02-09T11:53:32.150-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaUserGroup</category><title>Gateway JUG - Feb 2008: Buildling DSLs</title><description>Despite the crazy weather and torrential downpour of rain, I was able to make it to the &lt;a style="font-weight: bold;" href="http://www.gatewayjug.org/index.htm"&gt;Gateway JUG&lt;/a&gt; meeting on Monday night.  The talk wasn't what I was expecting and was very interesting.  I knew the talk was on &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language"&gt;DSLs&lt;/a&gt; (&lt;span style="font-weight: bold;"&gt;Domain Specific Languages&lt;/span&gt;) but I was expecting the talk to be about how a developer can write applications that present DSLs to the end user, allowing them to describe business processes and what they want in a manor much more akin to their business training and actual representations.  Neal, instead, focused on approaches developers can use to model DSLs and domain specific information in static and dynamic general purpose languages where the developer is the primary beneficiary.  I liked his focus better.&lt;br /&gt;&lt;br /&gt;The presentation outlined how we as developers can design our APIs and usage patterns in such a way that the code shifts from being a hodgepodge of declarative and imperative code, to primarily declarative.  A coworker of mine pointed out that this can be done with good refactoring and encapsulation, which is true, but Neal's presentation took this even further.  His examples started with business rules/processes that we needed to model in code, wrote the code in the way we wanted to express it (&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;target syntax&lt;/span&gt;&lt;span style="font-size:100%;"&gt;)&lt;/span&gt;&lt;/span&gt;, and then modeled the API around that.  The difference sounds subtle but resulted in code that expressed the true desire of the business rule with a minimum of extra syntax noise.&lt;br /&gt;&lt;br /&gt;In doing so covered some good design patterns which he said were named after those that Martin Fowler is going to be using in an upcoming book he is working on all about DSL patterns.  Also, he demonstrated how some of the syntactical and dynamic features of languages like Groovy and Rube allow DSLs to be composed much more fluently and expressively.  The fact that you can boil down your code to something that looks like this in Groove/Ruby is pretty nice:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-weight: bold;"&gt;def recipe = new Recipe("Smoky Flour")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;recipe.add 1.pound.of("Flour")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;recipe.add 2.grams.of("Nutmeg")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;assertThat 2, is(recipe.ingredients.size)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-family: georgia;"&gt;[chunk of code taken from Neal Ford's presentation, written in Groovy]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;All in all I thought it was a great talk and gave me some ideas on how I can remodel my code to be much more exacting which will allow me to write the code to match the requirements a ton easier and allow me to test specific business rules without a ton of extra junk to get in the way of what I am really doing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;If none of that made sense, it may not have, check out the presentation &lt;a style="font-weight: bold;" href="http://nealford.com/mypastconferences.htm"&gt;here&lt;/a&gt;.  The PDF handout for his presentation at CodeMash is the same as far as I can tell&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-5787072708605953927?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/gateway-jug-feb-2008-buildling-dsls.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2437014698061953873.post-7355661539153869010</guid><pubDate>Tue, 05 Feb 2008 17:46:00 +0000</pubDate><atom:updated>2008-02-05T11:55:13.560-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaUserGroup</category><title>JUG Tonight</title><description>Tonight I am planning on attending the &lt;a href="http://www.gatewayjug.org/index.htm"&gt;Gatway JUG&lt;/a&gt; meeting where &lt;a href="http://memeagora.blogspot.com/"&gt;Neal Ford&lt;/a&gt; will be speaking on "&lt;a style="font-style: italic;" href="http://www.gatewayjug.org/meetings/meeting.htm"&gt;Building DSLs in Static &amp;amp; Dynamic Languages&lt;/a&gt;".  Sounds like a good talk and is on my way home from work :)&lt;br /&gt;&lt;br /&gt;I had the pleasure of hearing Neal talk at NFJS in Cinci a couple of years back and am looking forward to tonight; especially since I don't think I will be able to make it to the STL NFJS in March.&lt;br /&gt;&lt;br /&gt;This will be my &lt;a href="http://regenmytoolkit.blogspot.com/2008/01/stljug-jan-2008-netkernel.html"&gt;second JUG meeting of the year&lt;/a&gt;, surpassing last year's total by 2 as well as my New Year's resolution of 1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2437014698061953873-7355661539153869010?l=regenmytoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://regenmytoolkit.blogspot.com/2008/02/jug-tonight.html</link><author>noreply@blogger.com (Benjamin P Lee)</author><thr:total>0</thr:total></item></channel></rss>

