<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3144008113539994012</id><updated>2012-02-16T11:58:06.971-06:00</updated><category term='ruby'/><category term='web app'/><category term='javascript'/><category term='html5'/><category term='web frameworks'/><category term='development'/><category term='unit tests'/><category term='desktop apps'/><category term='UI'/><category term='conference'/><category term='open source'/><category term='syntax'/><category term='stack overflow'/><category term='prolog'/><category term='starcraft'/><category term='t-sql'/><category term='cool stuff'/><category term='personal note'/><category term='social networking'/><category term='agile'/><category term='rails'/><category term='video'/><category term='review'/><category term='website design'/><category term='learning'/><category term='reference materials'/><category term='linux'/><category term='reading'/><category term='math'/><category term='jQuery'/><category term='scala'/><category term='java'/><category term='jug'/><category term='patterns'/><category term='teaser'/><category term='mvc3'/><category term='games'/><category term='rvm'/><category term='blizzard'/><category term='Google'/><category term='OpenID'/><category term='mvc'/><category term='android'/><category term='iPhone'/><category term='memtech'/><category term='memphis'/><category term='functional programming'/><category term='search'/><category term='Io language'/><category term='steam'/><category term='bootstrap'/><category term='testing'/><category term='rap'/><category term='beginning'/><category term='sociology'/><title type='text'>Post Request</title><subtitle type='html'>a blog on programming &amp;amp; adjoining domains</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-8672793019935157760</id><published>2012-01-26T19:02:00.000-06:00</published><updated>2012-01-26T19:02:49.574-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jug'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><title type='text'>Learning JavaScript: What You Might Have Missed</title><content type='html'>I just started teaching my first college course this week in JavaScript, a language I'm sometimes ashamed to say I love. Teaching this class has gotten off to a fantastic start. It became quickly apparent that I've been hoarding a number of golden nuggets of JavaScript resources. I really enjoyed sharing some of them with my class, so I also gave a similar lightning talk at the &lt;a href="http://www.MemphisJug.org"&gt;Memphis Java User Group&lt;/a&gt; where it was well received.&lt;br /&gt;&lt;br /&gt;The resources below are loosely ordered from beginner to expert. All of them have give me something to think about.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3schools.com/"&gt;&lt;b&gt;w3schools&lt;/b&gt; &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;w3schools was really the first introduction I had to web programming. Much of the material is out of date, but the quantity and diversity of the tutorials provided more than makes up for it. Each tutorial comes with a quiz, so you can make sure your eyes didn't glaze over during the process. I find it a great reference for quickly getting a start or just refreshing my mind, even if the examples are not exactly idiomatic for modern development.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.activestate.com/komodo-edit"&gt;Komodo Edit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Is a tool I've just learned about, but I can already see why people like it.  My students use it almost exclusively for editing HTML, CSS, and now JavaScript. It also claims to support popular scripting languages such as Perl, Python, PHP, and Ruby. The editor has an toolbar icon for launching multiple different browsers to test your web pages. Syntax highlight and auto-completion round out the feature set.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When my mind tires of trying to remember my &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; commands, I usually do my text editing in notepad++. Syntax highlighting for more languages than I can list is built in, as well as a tabbed layout. Notepad++ is a very responsive and light weight solution for such a fully featured text editor. I make heavy use of it at home and work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/chrome/devtools/docs/overview.html"&gt;Chrome Developer Tools&lt;/a&gt;&lt;br /&gt;&lt;a href="http://getfirebug.com/"&gt;FireBug&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/ie/aa740478"&gt;Internet Explorer Developer Tools&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you haven't used a modern web browser's developer tools, do yourself the service of checking out the ones in listed above (all should open with shortcut F12). Chrome and IE tools are built right into the browser, and Fiefox's FireBug Add-on gives you the same options. These tools let you live edit your html and css, check javascript errors or run javascript against the page in a console, and let you see the name, speed, and size of resources downloaded on page refresh.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jsfiddle.net/"&gt;jsFiddle&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Liked the live editing in the developer tools, but want a lighter weight tool for prototyping or the ability to easily share? Enter jsFiddle, a tool that shows html, css, and js files all on one page. A number of scripting libraries are quickly included under the panel on the right, rendered pages appear on the bottom right. Save your file and the URL changes to a link you can share with anyone, allowing them to edit and fork your work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=hQVTIJBZook"&gt;JavaScript: The Good Parts&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If I told you this was the best hour spent in learning JavaScript, I'd probably not be lying. A talk given by Douglas Crockford on topics covered in his book of the same name, this Youtube video is part of the very informative Google Tech Talk series. This talk gives a great depth of understanding of the gotchas of the language as well as some history.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jslint.com/"&gt;jsLint&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Again by Douglas Crockford, jsLint proudly states that it will "hurt your feelings". This is because most of our JavaScript is terrible, since the interpreter accepts all types of misconstructed JavaScript. jsLint says no, giving you a long list of warning to pour over to clean up your code (and probably reveal a few bugs along the way). Not for the faint of heart.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reddit.com/r/javascript"&gt;Reddit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reddit, the big bad link aggregator has sometimes been referred to as a milder version of 4chan. While you might not get much JavaScript help out of the main site, there are many subreddits that can give you a step up. After you tire of the /r/javascript subreddit, check out /r/programming, or /r/compsci.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/tagged/javascript"&gt;StackOverflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Whereas language specific subreddits are usually very beginner friendly, StackOverflow demands a little more effort to submit questions. In return you often get better answers, often found with a Google search before you even post. The large size of the community means most common questions have been answered before and fantastic SEO makes the site very navigable from the Google Search bar. Tagging let's you narrow your scope to JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A JavaScript library for all seasons, jQuery should be the standard library for the JavaScript language.  It provides everything you could want for DOM manipulation and event handling.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://documentcloud.github.com/backbone/"&gt;Backbone.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you thought jQuery was the bees knees (hint: it is), you'll probably be impressed with Backbone.  Backbone let's you create a fully featured MVC application, in JavaScript. That's no joke, your entire model can run client side using AJAX for REST calls for persistence.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://learn.knockoutjs.com/"&gt;Knockout&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Liked the idea of Backbone, but a bigger fan of the MVVM architecture? See Knockout. My employer makes heavy use of this JavaScript framework to create very interactive web pages that responds to user events. Even better the tutorial is written in knockout, so getting a feel for what knockout does for users happens as you learn how to use it in code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thought that your JavaScript application was bound to the browser? Think again. Node.js is a very powerful JavaScript engine for building server-side JavaScript application. The event model of JavaScript is appealing for many server-side apps.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://developer.mozilla.org/en/Canvas_tutorial"&gt;Canvas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tired of manipulating DOM elements? Start drawing. The HTML5 Canvas element let's you go nuts with creativity. You've probably already seen what it can do on the Google home screen and plenty of games are now giving it a shot. If you need some graphical splash in your app, Canvas is a good tool to research.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.fogcreek.com/the-trello-tech-stack/"&gt;Trello Tech Stack&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not convinced that all of this fancy new tech can be used to build real software? Heard of FogBugz, Fog Creek Software, or Joel Spolsky? If you haven't go search, I'll wait.&lt;br /&gt;&lt;br /&gt;No seriously go look them up if you don't, it is more important than this article.&lt;br /&gt;&lt;br /&gt;Now that you know I'm about to make an argument from authority. Check out the link above on the Tech Stack for Fog Creek's new product Trello. This is a massively scalable freemium web app, built on Backbone and Node.js. It is expected to be a substantial part of Fog Creek's business in the future. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Whether you are just getting started developing in JavaScript or are a mature web developer looking to expand your reach, there are plenty of tutorials and tools still to be found. Make sure to check out some of the links above and happy coding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-8672793019935157760?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/8672793019935157760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2012/01/learning-javascript-what-you-might-have.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8672793019935157760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8672793019935157760'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2012/01/learning-javascript-what-you-might-have.html' title='Learning JavaScript: What You Might Have Missed'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-5172175582852227376</id><published>2011-12-16T21:00:00.010-06:00</published><updated>2011-12-16T21:00:04.386-06:00</updated><title type='text'>Beautiful Greenfield Apps with Gravatar, Disqus, and AddThis</title><content type='html'>Our company sponsored hackathon is over, but I'm still trying to grok all the new tech I got to play with.&amp;nbsp;If you haven't already, check out &lt;a href="http://postrequest.blogspot.com/2011/12/beautiful-greenfield-apps-with-mvc3.html"&gt;Part 1&lt;/a&gt;&amp;nbsp;of our hackathon story to learn about how MVC3, Bootstrap, and OpenID featured in our application.&lt;br /&gt;&lt;br /&gt;It is really amazing what free external services can do bring additional functionality to your web application. During the hackathon I got the chance to add three services to app that really made it feel whole.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gravatar&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I first learned about &lt;a href="http://www.gravatar.com/"&gt;Gravatar&lt;/a&gt; when I found it being used on the &lt;a href="http://www.memphisjug.org/"&gt;MemphisJUG&lt;/a&gt; website. This free service let's users set up one profile pic to rule them all. If a website know's your email address, it can pull the associated Gravatar using a pretty simple image link. The necessary HTML for your web application to use a Gravatar is:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt; img src="http://www.gravatar.com/avatar/HASH/" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;You merely replace HASH with a MD5 hash&amp;nbsp;of the user's email address and the magic is done.&lt;br /&gt;&lt;br /&gt;Well, almost. Turns out getting an MD5 hash appears to require another step in .NET. I might have some basic lack of understanding about hashing, but my thought is that the code required to get an MD5 hash is much too complicated. Why this isn't just a built-in extension method on String is beyond me.&lt;br /&gt;&lt;br /&gt;Instead the process involves using the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx"&gt;System.Security.Cryptography.MD5&lt;/a&gt;&amp;nbsp;class, byte arrays, and a String Builder. Luckily I found a blog post that explained all this. &amp;nbsp;You can find it and additional details on Gravatar images in the links below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.gravatar.com/site/implement/images/"&gt;http://en.gravatar.com/site/implement/images/&lt;/a&gt; &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/csharpfaq/archive/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string_3f00_.aspx"&gt;http://blogs.msdn.com/b/csharpfaq/archive/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string_3f00_.aspx&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Disqus&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you've been using the web at all, you've probably already stumbled upon &lt;a href="http://disqus.com/"&gt;Disqus &lt;/a&gt;before. Disqus allows you to post comments to pages, using a variety of login providers. But the magic of Disqus is that it is just a javascript widget, so sites can start supporting Disqus in matter of minutes.&lt;br /&gt;&lt;br /&gt;To get started, register your site on Disqus. Get the "Universal Code" and change the javascript to include your site's shortname, a unique identifier for your site in your Disqus account. Make sure the pages you want to include Disqus are linked within your application with&amp;nbsp;canonical&amp;nbsp;URLs. While all the rules for the rules for URL normalization may not be required, we did notice that a link that gave a different URL, but pointed to the same page, pulled up two different sets of Disqus comments. Then just drop in the Javascript widget and you're done.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.disqus.com/developers/universal/"&gt;http://docs.disqus.com/developers/universal/&lt;/a&gt; &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/URL_normalization"&gt;http://en.wikipedia.org/wiki/URL_normalization&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;AddThis&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If there is one thing that changes way too often online, it is the current up and coming social network. &lt;a href="http://www.addthis.com/"&gt;AddThis &lt;/a&gt;is another easy to use javascript widget to quickly get some often desired functionality, namely the ability to share links on a social network. AddThis takes it a step farther: 1) It supports a very large number of social networks and 2) It dynamically can choose which networks to show by default based on how which services individual users have selected before. Combined with a plenty of customization options,&amp;nbsp;analytics, and other features AddThis might be the social sharing plugin to rule them all.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.addthis.com/help/client-api#.TuuyndSXQsI"&gt;https://www.addthis.com/help/client-api#.TuuyndSXQsI&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;While digging into a greenfield project is a good time to explore what you are capable of, it also is great time to check out what free services are already out their. Using javascript widgets and external resources can quickly give you features that may take hours or days of development to create on your own. Our hackathon project was much more feature complete because we could utilize tools like Gravatar, Disqus, and AddThis to provide the social integration required of Web 2.0 applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-5172175582852227376?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/5172175582852227376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/12/beautiful-greenfield-apps-with-gravatar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5172175582852227376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5172175582852227376'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/12/beautiful-greenfield-apps-with-gravatar.html' title='Beautiful Greenfield Apps with Gravatar, Disqus, and AddThis'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-7687840291436704717</id><published>2011-12-13T04:43:00.001-06:00</published><updated>2011-12-16T13:34:25.904-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='bootstrap'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenID'/><title type='text'>Beautiful Greenfield Apps with MVC3, Bootstrap, and OpenID</title><content type='html'>I haven't done much greenfield development in the past year. So when the company sponsored hackathon was announced this year, I was a bit wary. Could I keep up with the speed demons out there when I had spent so much recently in low gear, slogging through legacy code?&lt;br /&gt;&lt;br /&gt;Luckily there were plenty of resources for my team to use when we got started. We're only a couple of hours into the hackathon, but I wanted to record and share some of the stuff we've used so far.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MVC3 Templates&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Since I was so rusty with greenfield development, I did do some excercises before the hackathon to get back into that mindset. &amp;nbsp;The links below handle straight forward new MVC3 applications. We hadn't decided on a persistence strategy before the hackathon, so I also got some practice with Entity framework. If you haven't seen Entity framework in action before, it really does seem well suited for the type of rapid development that a hackathon imposes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part1-cs"&gt;http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part1-cs&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/gg685467"&gt;http://msdn.microsoft.com/en-us/data/gg685467&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CSS patterns via Bootstrap&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now while the examples above quickly give you a very functional web application, they are ugly. No one is going to attract users with the default CSS in the MVC3 templates. Now a hackathon is not the time to do a focus group; we need at least a basic set of UI patterns. We could have stolen the design patterns from work, but that wouldn't make for a good blog post. Instead we pulled the in the CSS and JavaScript from the Bootstrap project by the Twitter team. This is a pretty great open-source set of design documents which really gives the application a modern look and feel. It even has a NuGet package to ease the&amp;nbsp;implementation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.github.com/bootstrap/"&gt;http://twitter.github.com/bootstrap/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://nuget.org/packages/Twitter.Bootstrap"&gt;http://nuget.org/packages/Twitter.Bootstrap&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OpenID via DotNetOpenAuth in MVC3/Razor&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now you don't get to have your app branded Web 2.0 if you're still asking users to create yet another password/security question on your site. OpenID is the de facto standard for solving this problem (Suggestions to use Facebook Connect were laughed at derisively). Unfortunately OpenID has somewhat of a bad reputation for ease of implementation. So imagine our glee when we found a NuGet package for OpenID in Razor no less. We did have some trouble finding the blog posts on how to use the package properly, but I've listed the links below to save you the trouble.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nuget.org/packages/OpenIdPortableArea.RazorViews"&gt;http://nuget.org/packages/OpenIdPortableArea.RazorViews&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.johncoder.com/Post/sample-aspnet-mvc-application-using-openidportablearea"&gt;http://www.johncoder.com/Post/sample-aspnet-mvc-application-using-openidportablearea&lt;/a&gt;&lt;br /&gt;&lt;a href="http://johncoder.com/Post/handling-messages-in-openidportablearea"&gt;http://johncoder.com/Post/handling-messages-in-openidportablearea&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We've gotten off to a great start with our hackathon application. There are a great number of resources for greenfield application development on the Microsoft stack, especially for enterprise-y developers like me who don't usually get the opportunity for this kind of development. MVC3 templates, Bootstrap, and DotNetOpenAuth give developers a great&amp;nbsp;tool-set&amp;nbsp;to become Web 2.0 in a few short hours.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-7687840291436704717?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/7687840291436704717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/12/beautiful-greenfield-apps-with-mvc3.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7687840291436704717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7687840291436704717'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/12/beautiful-greenfield-apps-with-mvc3.html' title='Beautiful Greenfield Apps with MVC3, Bootstrap, and OpenID'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-6596071831069242511</id><published>2011-09-13T21:14:00.002-05:00</published><updated>2011-09-15T00:17:38.895-05:00</updated><title type='text'>Intro to Memtech: Java - Deconstructing Hello World</title><content type='html'>Last time we took a rapid fire tour of the basics of Java syntax. Somehow this still doesn't explain everything you find in the simplest "Hello, World" Java app. &amp;nbsp;In this post we'll try to make sense of the following code.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;public class Example&lt;br /&gt;{&lt;br /&gt;  public static void main(String args[])&lt;br /&gt;  {&lt;br /&gt;    System.out.println("Hello, World");&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;We already know that 'System.out.println("Hello, World");' prints to Console output, but how and why are still beyond us. First let's take a look at the first line.  Java is an object oriented language, and 'public class Example' is defining an object type Example. It is public, so any code can access it. 'public static void main(String args[])' should look very familiar to a C++ programmer.  This line defines a function that is called when this file is called from the command line.  The 'String args[]' is an array of the command line arguments.  'Static' means the function can be called without creating an instance of the Example object; 'void' means it doesn't return anything. 'main' is the special sauce that gets us that command line behavior.&lt;br /&gt;&lt;br /&gt;Additional object oriented concepts such as inheritance and polymorphism are well supported in Java.  Check the directory InheritanceAndPolymorphism in the code sample link below for examples.&lt;br /&gt;&lt;br /&gt;I was lucky enough to be taught Java as part of my undergraduate college experience. I don't say that sarcastically, Java is a wonderful language despite what you might hear online. Every language is designed in a series of trade offs to fit the use cases it might find itself in. As we've already discussed, Java has a very wide selection of use cases in large part to the JVM. The JVM somewhat muddies the waters between traditional compiled languages vs. interpreted ones, even more so because of JIT or Just in Time compilation. You compile Java code ( .java files) once to Java bytecode (marked as .class files). Then the JVM can JIT compile or interpret the bytecode. There is also software which will perform native compilation, AOT or Ahead of Time compilation (which I'd call traditional compilation).&lt;br /&gt;&lt;br /&gt;The JVM was a bigger accomplishment than the Java syntax James Goslings created at Sun Microsystems in 1995. It has created a whole ecosystem of languages from dynamic Groovy to functional Scala. Java is a great way to introduce yourself to that platform and to explore the options it opens to you.&lt;br /&gt;&lt;br /&gt;All of this was written in anticipation of the "Intro to Memtech: Java" talk that I gave last Monday. The talk went well and I'm happy to share my code samples and slides from the talk.&lt;br /&gt;&lt;br /&gt;Code:&amp;nbsp;&lt;a href="https://github.com/thomaslangston/IntroToMemtechJava"&gt;https://github.com/thomaslangston/IntroToMemtechJava&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Slides:&amp;nbsp;&lt;a href="http://www.slideshare.net/thomaslangston/intro-to-memtech-java"&gt;http://www.slideshare.net/thomaslangston/intro-to-memtech-java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also used the fantastic code samples from Ben Von Handorf's DevLink 2011 Mobile Smackdown presentation. Details on the presentation and a link to his code samples can be found on his blog post linked below.&lt;br /&gt;&lt;a href="http://www.benvonhandorf.com/blog/post/Devlink-Mobile-Smackdowne28093Code-and-Retrospective.aspx"&gt;http://www.benvonhandorf.com/blog/post/Devlink-Mobile-Smackdowne28093Code-and-Retrospective.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-6596071831069242511?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/6596071831069242511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-deconstructing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6596071831069242511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6596071831069242511'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-deconstructing.html' title='Intro to Memtech: Java - Deconstructing Hello World'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3106518775677837478</id><published>2011-09-10T17:51:00.002-05:00</published><updated>2011-09-11T15:51:15.256-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='memtech'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>Intro to Memtech: Java - Java Syntax</title><content type='html'>In the last post, we setup an Android development environment. We also setup our first Android app in "Hello, World" in cut and paste fashion. &amp;nbsp;That's all fine and good if you already have a good handle on Java syntax, but what if you're still in the dark on that subject? In this post, we'll cover the basics of Java syntax.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;//this is a comment&lt;br /&gt;int i;  //this is a primitive integer variable declaration&lt;br /&gt;i = 2 + 2; //this is an assignment statement&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Java has a C-style syntax, so chances are it already looks pretty familiar. It is a statically typed language and uses infix notation for most operations. Semicolons delimit the end of statements, so it is possible to stack multiple operations on one line, but not usually recommended.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;String s = "This string is immutable."; //Strings are objects, not primitives&lt;br /&gt;String s = "This assignment creates a new string." &lt;br /&gt;//The old string is garbage collected by the JVM&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Java is an object oriented language. &amp;nbsp;Two other important features are that Strings are immutable and unreferenced objects are automatically deleted by the Garbage Collector. &amp;nbsp;Garbage collection can be expensive, especially in real-time applications. &amp;nbsp;So performance can take a dive on something something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;String s = "";&lt;br /&gt;/*This "for loop" repeats this block of code 99 times&lt;br /&gt;  It subtracts 1 from the initial value of 99 assigned to 'i' on each pass.&lt;br /&gt;  It exits when the boolean operation 'i &amp;nbsp;&amp;gt; 0' equates to false */&lt;br /&gt;for(int i = 99; i &amp;nbsp;&amp;gt; 0; &amp;nbsp;i--)&lt;br /&gt;{&lt;br /&gt;  //The '+' operator appends strings.&lt;br /&gt;  s = s + i + " bottles of beer on the wall. " + i + " bottles of beer. \n";&lt;br /&gt;  //The primitive i is automatically converted to a string.&lt;br /&gt;  s = s + " Take one down, pass it around. " + i + " bottles of beer on the wall. \n";&lt;br /&gt;  //Notice the '\n' end line character&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Each time we make an assignment to 's' we create a new unreferenced string which must be garbage collected.&amp;nbsp;Java does have a few primitive types, such as integers. Luckily, primitives each have a Wrapper class that allows you to use it when you need it to act like an object. In the last example we get the 'i.toString()' method called each time we&amp;nbsp;concatenate 'i'&amp;nbsp;with a string. Some additional syntactic sugar known as auto-boxing makes other conversions invisible.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;int primitiveInt = 42;&lt;br /&gt;Integer integerObject = new Integer(13); &lt;br /&gt;//Create a new Integer object that wraps a value of 13&lt;br /&gt;integerObject = primitiveInt;&lt;br /&gt;System.out.println(integerObject); &amp;nbsp;//prints 42 in the console&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If you've noticed we also snuck in Console output, a control structure (the for loop), and a boolean operation ('i &amp;gt; 0' or 'i' is greater than zero). &amp;nbsp;Chances are that all looks familiar and you had no trouble reading it, even if you don't 'know' Java. In the next post I'll go into how to get a running program with these types of statements, what the 'System.out' means in the last example, and an explanation of packages, classes, and methods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-3106518775677837478?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3106518775677837478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-java-syntax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3106518775677837478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3106518775677837478'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-java-syntax.html' title='Intro to Memtech: Java - Java Syntax'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-7582798741179438177</id><published>2011-09-09T03:01:00.000-05:00</published><updated>2011-09-09T03:01:18.173-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='memtech'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Intro to Memtech: Java - Setting up your Android environment</title><content type='html'>&lt;a href="http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-use-cases-and-web.html"&gt;Last time&lt;/a&gt; we went over the spectrum of use cases for Java as well as took a glance at the variety of web frameworks&amp;nbsp;available&amp;nbsp;for the JVM. That's great for self-exploration, but what else do I have to show you about Java?&lt;br /&gt;&lt;br /&gt;While web&amp;nbsp;application&amp;nbsp;frameworks obviously have a lot to say (in a lot of different ways), Java's role in the mobile space (in my opinion) is more compelling. While Java has been in the mobile space for a while, the popularization of the Android OS by Google has really changed the landscape. Android runs a Java compatible virtual machine called&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Dalvik_(software)"&gt;Dalvik&lt;/a&gt;. If you've been following along so far in this post series, you already have 2 of the 3 downloads needed to develop on Android, namely the JDK and Eclipse.&lt;br /&gt;&lt;br /&gt;Go to&amp;nbsp;&lt;a href="http://developer.android.com/index.html"&gt;developer.android.com&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://developer.android.com/sdk/index.html"&gt;download the Android SDK&lt;/a&gt;&amp;nbsp;or Software Development Kit. Windows gets a nifty installer which fires off a separate download for the Android SDK Tools. On other systems you'll need to refer to the documentation to fire off that download from the&amp;nbsp;Android SDK and AVD Manager utility.&amp;nbsp;Refer to the&amp;nbsp;&lt;a href="http://developer.android.com/sdk/installing.html"&gt;documentation for the Android SDK setup&lt;/a&gt;&amp;nbsp;while those download to get your bearings. The next step is to&amp;nbsp;&lt;a href="http://developer.android.com/sdk/eclipse-adt.html#installing"&gt;get the Android Development Tool or ADT Plugin for Eclipse&lt;/a&gt;&amp;nbsp;(remember that readily supported plugin architecture?).&lt;br /&gt;&lt;br /&gt;You can follow the directions linked above but note that there is currently a &lt;a href="http://stackoverflow.com/questions/6638713/android-emulator-is-not-starting-showing-invalid-command-line-parameter"&gt;bug in the ADT plugin&lt;/a&gt; that causes the emulator to fail to launch if the SDK location contains any spaces (by default in Windows 7 it will be in the "Program Files" directory). When firing up Eclipse you can use the default workspace. After completing the ADT Plugin installation, you'll still need to &lt;a href="http://developer.android.com/resources/tutorials/hello-world.html#avd"&gt;setup an AVD&lt;/a&gt; or Android Virtual Device, a kind of system image for the emulator. You can reach the&amp;nbsp;Android SDK and AVD Manager utility now from your OS (Start menu in Windows 7) or from within Eclipse under "Window -&amp;gt;&amp;nbsp;Android SDK and AVD Manager". Follow the directions in the last link, but I suggest you use SDK 2.1 as that will let you &lt;a href="http://developer.android.com/resources/dashboard/platform-versions.html"&gt;reach a high percentage of devices&lt;/a&gt;&amp;nbsp;(unless you're making an app for a tablet, for which I suggest the 3.x branch).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.android.com/resources/tutorials/hello-world.html#create"&gt;The instructions&lt;/a&gt;&amp;nbsp;for setting up an AVD end by landing you squarely in midst of a Android "Hello,World" style example, which I suggest you finish to test your setup. When you finish you should be able to create a new Android project in Eclipse and successfully get the "Hello, World" app to run within the emulator. In my next post, I'll start digging into the syntax of Java so you can make sense of the app you've brought to life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-7582798741179438177?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/7582798741179438177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-setting-up-your_09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7582798741179438177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7582798741179438177'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-setting-up-your_09.html' title='Intro to Memtech: Java - Setting up your Android environment'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-6891679750542224386</id><published>2011-09-09T02:50:00.000-05:00</published><updated>2011-09-09T02:50:38.004-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='memtech'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><title type='text'>Intro to Memtech: Java - Use cases and Web Frameworks</title><content type='html'>If you've already read my &lt;a href="http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-setting-up-your.html"&gt;last post&lt;/a&gt;, you're already setup with a Java development environment. &amp;nbsp;Hopefully, you've take the time to explore a bit on your own. &amp;nbsp;In this post I'll talk briefly about where you could expect to use Java as well as what choices you have in terms of web application frameworks for the JVM.&lt;br /&gt;&lt;br /&gt;You can do anything with Java, really nearly anything. You can make a&amp;nbsp;&lt;a href="http://www.minecraft.net/play.jsp"&gt;game&lt;/a&gt;&amp;nbsp;or embed software in device. At my day job, we write Java that controls the HVAC systems of our clients via the &lt;a href="http://www.tridium.com/cs/products_/_services/frameworks"&gt;Niagara framework&lt;/a&gt;. Java also is used extensively for server side&amp;nbsp;back-end&amp;nbsp;programming for sites such as &lt;a href="http://engineering.twitter.com/2011/04/twitter-search-is-now-3x-faster_1656.html"&gt;Twitter&lt;/a&gt;. Java has had a role in mobile applications for a long time, most recently in its role with Android (more on that later).&amp;nbsp;You can make a web application with it, either via&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Java_applet"&gt;applets&lt;/a&gt;&amp;nbsp;(not exactly modern, but not useless) or using a web application framework.&lt;br /&gt;&lt;br /&gt;I don't claim to have deep insight into selecting a Java web framework, but out of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Comparison_of_Web_application_frameworks#Java_2"&gt;choices&lt;/a&gt;&amp;nbsp;there are four I'll mention. &amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/JavaServer_Faces"&gt;JSF&lt;/a&gt;&amp;nbsp;or Java Server Faces,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Apache_Struts"&gt;Apache Struts&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Spring_Framework"&gt;Spring&lt;/a&gt;&amp;nbsp;appear from a cursory search to be the most broadly used, although the error bars on my meta-survey are pretty wide.&amp;nbsp;The dark horse in this race is a cute framework named&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Play_Framework"&gt;Play&lt;/a&gt;.&amp;nbsp;All of these purport to be MVC style web frameworks, although many others are closer to adapted desktop or MVVM style application development. My ill informed suggestion is to check out Spring and Play first, based purely on watching a single presentation on the former and a couple of articles on the later.&lt;br /&gt;&lt;br /&gt;Alternatively, the JVM supports a number of other languages, complete with their own web frameworks such as&amp;nbsp;&lt;a href="http://groovy.codehaus.org/"&gt;Groovy&amp;nbsp;&lt;/a&gt;on&amp;nbsp;&lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://www.scala-lang.org/"&gt;Scala&amp;nbsp;&lt;/a&gt;using&amp;nbsp;&lt;a href="http://liftweb.net/"&gt;Lift&lt;/a&gt;. &amp;nbsp;Clojure, jRuby, and Jython also have associated web frameworks. Each language/framework combination is going to express a different opinion on software development. Correspondingly, some of these combinations are going to be much better or worse depending on your needs and style (e.g. enterprise vs. startup, dynamic vs. functional) so make sure to take your time evaluating at least a few of the major contenders before investing a lot of time in any.&lt;br /&gt;&lt;br /&gt;Hopefully you've now got an idea of where you should be looking for tools and ideas for future projects. &amp;nbsp;In my next post I'll be taking a look at setting up an Android development environment in preparation for our code sample.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-6891679750542224386?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/6891679750542224386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-use-cases-and-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6891679750542224386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6891679750542224386'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-use-cases-and-web.html' title='Intro to Memtech: Java - Use cases and Web Frameworks'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-1161913530500960354</id><published>2011-09-09T01:32:00.001-05:00</published><updated>2011-09-09T02:24:34.348-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='memtech'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><title type='text'>Intro to Memtech: Java - Setting up your Java environment</title><content type='html'>I'll be presenting an &lt;a href="http://memtechjava.eventbrite.com/"&gt;introductory Java talk at LaunchMemphis&lt;/a&gt; in just a few short days. &amp;nbsp;I've been working hard to get prepared, including updating my Java development environment. &amp;nbsp;I don't plan on spending too much time on it during my presentation, so this post will be a little more in depth explanation of what I've got going on.&lt;br /&gt;&lt;br /&gt;For all the downloads listed I used the x86/32bit versions. &amp;nbsp;I tried an all 64bit environment, but it wasn't stable. &amp;nbsp;I'm not certain which download was responsible for this instability. Your mileage may vary.&lt;br /&gt;&lt;br /&gt;The first thing to know about developing for Java is that you need Java installed. &amp;nbsp;&lt;a href="http://www.riastats.com/#"&gt;Most computers already have Java installed&lt;/a&gt;, but the Java you know and love (or love to hate) is actually the &lt;a href="http://www.oracle.com/technetwork/java/javase/jre-7-readme-430162.html"&gt;JRE&lt;/a&gt; or Java Runtime Environment. &amp;nbsp;This includes the JVM or Java Virtual Machine, libraries, and other components needed to run Java applications. But you already run Java applications just fine, you want to develop them too. For that you'll need the JDK or Java Development Kit. Info on the Java 7 JDK can be found at&amp;nbsp;&lt;a href="http://jdk7.java.net/"&gt;http://jdk7.java.net/&lt;/a&gt;. &amp;nbsp;From there you can &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;download the&amp;nbsp;Java 7 SDK&lt;/a&gt; from&amp;nbsp;&amp;nbsp;as well as browse the &lt;a href="http://download.oracle.com/javase/7/docs/api/"&gt;API documentation&lt;/a&gt; produced from the &lt;a href="http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html"&gt;javadoc tool&lt;/a&gt;. On Windows an automated installer with default options will get your JDK ready. I do suggest uninstalling any previous versions of the JRE (e.g. Java 6 or earlier).&lt;br /&gt;&lt;br /&gt;While it is completely possible to develop in Java with nothing but a text editor and a command line, I don't recommend it. &amp;nbsp;The de facto standard of Java development is the &lt;a href="http://www.eclipse.org/"&gt;Eclipse IDE&lt;/a&gt; or Integrated Development Environment. Eclipse gives you all the breadth, depth, and weight of an open source IDE. It also gives you all of the negative characteristics you could infer from that description as well. Eclipse is big, slow, and a grab bag of features. It is built extensively around a plugin model that allows it to be used with a variety of languages, in a variety of contexts. But that diversity and&amp;nbsp;malleability&amp;nbsp;comes at the cost of a unified user experience and speed.&lt;br /&gt;&lt;br /&gt;Because of the breadth of usage and plugin model, you're probably going to bump into Eclipse anyway. New technologies often have Eclipse plugin support before other IDEs. Once you've been in the Java space for a while, be sure to try out &lt;a href="http://netbeans.org/"&gt;Netbeans &lt;/a&gt;and &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ&lt;/a&gt;. Both have cleaner, snappier UI but lack some of the flexibility of Eclipse. Getting back to Eclipse, you're going to get a lot of options when you go to &lt;a href="http://www.eclipse.org/downloads/"&gt;download Eclipse&lt;/a&gt;. I suggest you pick &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-classic-37/indigor"&gt;Eclipse Classic&lt;/a&gt;. Eclipse comes in a lovely archived folder which can run from anywhere, but I suggest you &lt;b&gt;don't&lt;/b&gt; put it in the &lt;i&gt;program files&lt;/i&gt; directory. Windows 7 at least doth protest too much. It is quiet as a lamb if you extract it to the root of the C:\ drive. &amp;nbsp;Dig into the folder and pin it to your taskbar, or make a shortcut to access Eclipse more easily.&lt;br /&gt;&lt;br /&gt;If you've followed along so far, you should have your Java development environment setup and Eclipse installed. &amp;nbsp;Congrats, you have all you need to start exploring Java. In my next post I'll talk about the areas where Java is used and the web frameworks available for the JVM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-1161913530500960354?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/1161913530500960354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-setting-up-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1161913530500960354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1161913530500960354'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/09/intro-to-memtech-java-setting-up-your.html' title='Intro to Memtech: Java - Setting up your Java environment'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-6647373486910772531</id><published>2011-08-31T11:54:00.001-05:00</published><updated>2011-08-31T14:47:19.962-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><title type='text'>Seven Languages in Seven Months</title><content type='html'>I finished reading my copy of Seven Languages in Seven Weeks last month. &amp;nbsp;I've been stewing on it a bit as I've started to dig into Code Complete 2. &amp;nbsp;Haskell, Clojure, and Erlang were by far the hardest languages to grok, even when compared to the venerable Prolog and obscure Io. &amp;nbsp;Tate's choice to place them at the end of the book was well advised, as many of the ideas gracefully intersect in later languages. &amp;nbsp;In particular I felt like the Prolog unification sections played nicely into some of the functional languages.&lt;br /&gt;&lt;br /&gt;Clojure does feel like a decent next step for the JVM, but I still enjoyed Scala much more. I'm also not a fan of the name since I'm just getting my head around closures. Erlang was an interesting language, but I'm not sure what I'd program in it. That's probably an effect from my lack of experience in the concurrent paradigm. I felt that Haskell had a somewhat superficial treatment in the book, particularly the concept of monads. This was a language I was expecting to be blown away by, but partial functions don't seem to add much from a cursory exploration (if you already have first class functions).&lt;br /&gt;&lt;br /&gt;Code Complete 2 is a very different book, both in content and in style. &amp;nbsp;I find myself enjoying it a lot less, even though the information provided on formal development process is something I probably need to commit to memory. &amp;nbsp;I'm still committed to reading it for now, but I hope that it picks up later on since it is a pretty thick book.&lt;br /&gt;&lt;br /&gt;I'm working on a "Intro to Java" presentation to given in two weeks at LaunchMemphis. &amp;nbsp;I've already picked out a "textbook" in the form of the tutorials from Oracle. &amp;nbsp;They seem to be the only documentation that is up to date since the release of Java 7. I'm still contemplating what will be my "advanced" demo after the traditional "Hello, World" app. I'm tempted to see if I can get a CRUD app running on Heroku with the Play framework, since I expect a fair number of web developers to attend. &amp;nbsp;I'm afraid that may be too many moving parts. &amp;nbsp;Also my experience with the Play framework is non-existent right now. &lt;br /&gt;&lt;br /&gt;If you have any suggestions or requests for demos or content please leave them in the comments. Thanks!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-6647373486910772531?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/6647373486910772531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/08/seven-languages-in-seven-months.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6647373486910772531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6647373486910772531'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/08/seven-languages-in-seven-months.html' title='Seven Languages in Seven Months'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-2925272187846486439</id><published>2011-06-13T21:00:00.004-05:00</published><updated>2011-06-21T08:34:59.037-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Hello, Android</title><content type='html'>I skipped thru half a dozen "Hello, World!" examples of Android over the past week. &amp;nbsp;None of them were better than the ones available at&amp;nbsp;&lt;a href="http://developer.android.com/resources/tutorials/hello-world.html"&gt;http://developer.android.com/resources/tutorials/hello-world.html&lt;/a&gt;&amp;nbsp;which have not only the "Hello World", but also a section called "Hello Views".&lt;br /&gt;&lt;br /&gt;Creating a new Android project in Eclipse already "Hello, World"'s for you, so I probably wasted some time flipping thru the different examples of that. &amp;nbsp;The views however are numerous and varied. &amp;nbsp;I had time to page thru the examples for several Layouts (a way to style views) including Linear, Relative, Table, and Grid. &amp;nbsp;The grid example is the most exciting, since it also gives you a taste of event management and introduces you to a "Toast" (brief informational message, think JavaScript alert) as well. &amp;nbsp;I can see using this to get "iconic" with an app's design very easily.&lt;br /&gt;&lt;br /&gt;I've been tossing around in my head project ideas for my first toy project, post intro. &amp;nbsp;I'm considering some type of RPG style game, perhaps emulating or using the in-app billing features. &amp;nbsp;It just seems to be a very compelling business model. &amp;nbsp;The Free-To-Play model let's people try before they buy, and then to pay only what they think the game is worth. &amp;nbsp;I think this is going to be one of the major payment models for games for a long time to come.&lt;br /&gt;&lt;br /&gt;One of the difficult things about a RPG whoever is that it seems to defy attempts to structure the experience. &amp;nbsp;I think this is why it works so well in meat-space around a table, and always seems to be missing something while around a screen. &amp;nbsp;Trying to figure out how to organize this code is going to be a challenge, especially since I'll need to take android development idioms into account as I learn them.&lt;br /&gt;&lt;br /&gt;Hopefully, I'll find some examples online. &amp;nbsp;I'm starting my exploration with the StackExchange question below.&lt;br /&gt;&lt;a href="http://gamedev.stackexchange.com/questions/1497/where-can-i-find-good-well-organized-examples-of-game-code"&gt;http://gamedev.stackexchange.com/questions/1497/where-can-i-find-good-well-organized-examples-of-game-code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-2925272187846486439?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/2925272187846486439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/06/hello-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2925272187846486439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2925272187846486439'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/06/hello-android.html' title='Hello, Android'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-7146402848898418386</id><published>2011-06-06T21:30:00.000-05:00</published><updated>2011-06-06T21:30:00.191-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Intro to Android</title><content type='html'>So I bought an Android phone earlier this year. &amp;nbsp;It is the first smartphone I've owned. &amp;nbsp;Previously I had one through work and so did my wife. &amp;nbsp;I think we've both become hooked on continuous connection to the&amp;nbsp;hive-mind (i.e. internet). &amp;nbsp;It will probably be a facet of our lives for the foreseeable future.&lt;br /&gt;&lt;br /&gt;I picked an Android phone because I believe capitalism fails when companies try to control too large of a vertical slice of a market. &amp;nbsp;It is big a turn off when hardware makers and phone carriers write, modify, or limit my software choices. Android helps, but does not solve this problem for me completely. Therefore I've had a strong desire to root my phone and put this issue to bed.&lt;br /&gt;&lt;br /&gt;But I haven't. &amp;nbsp;The shady characters, suspicious downloads, and arcane instructions required to get to true freedom just haven't been worth the time. &amp;nbsp;That may be finally changing.&lt;br /&gt;&lt;br /&gt;I spent the last weekend at CodeStock, a fantastic developers conference with a very ugly mascot. &amp;nbsp;I got a chance to meet and listen to &lt;a href="http://www.jfarrell.net/"&gt;Jason Farrel&lt;/a&gt;&amp;nbsp;speak about Android development, in Eclipse and IntelliJ no less. &amp;nbsp;Having watched everyone at work get their own pet mobile app running and feeling armed with some knowledge of my own, I felt inspired. &amp;nbsp;The only measurable success so far is a compilable example project in Eclipse, but I figured I'd share some of my notes from setup all the same.&lt;br /&gt;&lt;br /&gt;1) &amp;nbsp;Eclipse might not know where your Android SDK is located. &amp;nbsp;You'll need to set this up in the "Preferences" menu.&lt;br /&gt;&lt;br /&gt;2) There's a lot of stuff to download. &amp;nbsp;Luckily I already had Eclipse (for normal Java development), Java (see Eclipse), and the Android SDK (abandoned rooting attempt). &amp;nbsp;In addition you'll need to install the Eclipse plugin which took a bit of time. &amp;nbsp;Pack a meal if you plan to make a day of it.&lt;br /&gt;&lt;br /&gt;That's all for now. &amp;nbsp;Hopefully I'll have more info soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-7146402848898418386?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/7146402848898418386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/06/intro-to-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7146402848898418386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7146402848898418386'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/06/intro-to-android.html' title='Intro to Android'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-2922943374202256759</id><published>2011-05-17T18:00:00.019-05:00</published><updated>2011-05-27T15:37:32.421-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rvm'/><title type='text'>Blowing up a simple install</title><content type='html'>If there is one thing that's gotten me frazzled lately, it would be understanding how to get the latest Ruby to run on the latest Rails on the latest Ubuntu. &lt;br /&gt;&lt;br /&gt;This has been a major pain point for me, in small part because &lt;i&gt;apt-get&lt;/i&gt; doesn't want to let me get the latest and greatest packages. &amp;nbsp;It wants me to accept the months delayed versions. &amp;nbsp;I've heard that "Rails 3/Ruby 1.9.2 are still in beta!" and "No one is adopting them yet!". &amp;nbsp;This seems to be either untrue or irrelevant. &amp;nbsp;Rails 3.0 is stable, Rails 3.1 is in beta. &amp;nbsp;Adoption is good enough, books are being written and I have full confidence this is where I want to be. &amp;nbsp;I'm into Ruby on Rails for idealistic learning, not for pragmatic work.&lt;br /&gt;&lt;br /&gt;In large part however, this has been a pain because my Linux skills are woefully&amp;nbsp;inadequate. &amp;nbsp;&lt;i&gt;Wget,&lt;/i&gt;&amp;nbsp;&lt;i&gt;xargs, sed?&lt;/i&gt;&amp;nbsp;I have no idea how to use these things in practice. Oh, I have a cheat sheet on my wall at home. &amp;nbsp;I've probably read the &lt;i&gt;man&lt;/i&gt;&amp;nbsp;file once for a few commands. I once even setup a &lt;i&gt;cronjob&lt;/i&gt; with &lt;i&gt;ed&lt;/i&gt;. But I know my limits. &lt;br /&gt;&lt;br /&gt;So when someone told me that &lt;i&gt;rvm&lt;/i&gt; (Ruby Version Manager) was the solution to all my woes, I said "Great!... Why doesn't it tell me to install it with &lt;i&gt;apt-get&lt;/i&gt;&amp;nbsp;on their website?"&lt;br /&gt;&lt;br /&gt;I want to be very clear here. &amp;nbsp;I am not saying the &lt;i&gt;rvm &lt;/i&gt;tool, documentation, or website are not wonderful. &amp;nbsp;I am saying "I am ignorant of Linux and this (representative of all *nix programs) install process was intimidating for me." &amp;nbsp;I'm sure with additional Linux&amp;nbsp;competency and package management experience the installation would look like a cakewalk.&lt;br /&gt;&lt;br /&gt;Let me put all of the glorious bounty of the &lt;i&gt;rvm&lt;/i&gt; install process out for you.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;user$ bash &amp;lt; &amp;lt;(curl -s https://rvm.beginrescueend.com/install/rvm)&lt;/li&gt;&lt;li&gt;user$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;amp;&amp;amp; . "$HOME/.rvm/scripts/rvm" # Load RVM function' &amp;gt;&amp;gt; ~/.bash_profile&lt;/li&gt;&lt;li&gt;user$ source .bash_profile&lt;/li&gt;&lt;li&gt;user$ type rvm | head -1&lt;/li&gt;&lt;li&gt;user$ rvm notes&lt;/li&gt;&lt;li&gt;user$ rvm install 1.9.2&lt;/li&gt;&lt;li&gt;user$ rvm use 1.9.2 --default&lt;/li&gt;&lt;/ul&gt;The steps above could almost be written in Sanskrit for all I know. &amp;nbsp;There are several things I was confused by.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;user$ - I didn't immediately identify this as the command prompt.&lt;/li&gt;&lt;li&gt;bash - Why do I have to call this explicitly? &amp;nbsp;Isn't my terminal already some flavor of &lt;i&gt;bash&lt;/i&gt;?&lt;/li&gt;&lt;li&gt;&amp;lt;&amp;lt; - I have no idea what this actually does.&lt;/li&gt;&lt;li&gt;curl - Why do I need this when I should already have &lt;i&gt;wget&lt;/i&gt;?&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;/i&gt;echo - Why do I have to &lt;i&gt;echo&lt;/i&gt;&amp;nbsp;this string? &amp;nbsp;Note, I've only ever used echo for "Hello World".&lt;/li&gt;&lt;li&gt;&amp;gt;&amp;gt; operator - I really hope this means append.&lt;/li&gt;&lt;li&gt;.bash_profile - Ouch.&lt;/li&gt;&lt;/ul&gt;The &lt;i&gt;.bashrc, .bash_profile, &lt;/i&gt;and &lt;i&gt;.profile&lt;/i&gt;&amp;nbsp;configuration files confuse me to no end. &amp;nbsp;I have no idea which one I should use, when I'm told it usually is wrong. &amp;nbsp;I tried all three and finally got it to work after having my terminal open as a "login script". &amp;nbsp;I have no idea of the unintended consequences of this action.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;source -&amp;nbsp;I know it means reload the configuration file, but I wish it actually was called &lt;i&gt;reload&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;rvm | head -1 - I don't know how this works.&lt;/li&gt;&lt;li&gt;rvm notes - Big Ouch.&lt;/li&gt;&lt;/ul&gt;I need to read the notes to find the dependencies, but I don't know why I need them, and only some of which are visible in the Ubuntu package universe directory. &lt;br /&gt;&lt;br /&gt;I did eventually finish the install and learned a few things along the way. &amp;nbsp;RVM actually has a&amp;nbsp;&lt;a href="https://rvm.beginrescueend.com/rvm/basics/"&gt;Basics of RVM&lt;/a&gt;&amp;nbsp;page which actually does explain some of the issues above, although I didn't see it until after I had resolved them. &amp;nbsp;I hope that forcing myself to continue these kind of explorations will help me learn the basics of scripting that I've seemed to skip over in my IT career.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-2922943374202256759?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/2922943374202256759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/05/blowing-up-simple-install.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2922943374202256759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2922943374202256759'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/05/blowing-up-simple-install.html' title='Blowing up a simple install'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-659557033085489865</id><published>2011-04-24T00:06:00.000-05:00</published><updated>2011-04-24T00:06:39.522-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Prologue to Prolog and Scaling Scala</title><content type='html'>&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=postr-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=193435659X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;Seven weeks has been completely thrown out the window, but I have managed to down two languages during our last interlude. &amp;nbsp;I'm currently in the depths of Erlang, a language I've enjoyed for a long time as a conceptual mystery from afar. &amp;nbsp;Seeing actual syntax doesn't seem to kill any of the&amp;nbsp;allure.&lt;br /&gt;&lt;br /&gt;It is a good thing Prolog and Scala come before however, as concepts in each help segue &amp;nbsp;into the heavier functional programming languages later in the book. &amp;nbsp;Scala I had already seen, and fallen in love with. &amp;nbsp;I've noticed recently however that there has been a bit of a push back against it. &amp;nbsp;Apparently the Scala typing system that appears beautiful to me, is a pain to others. &amp;nbsp;Prolog on the other hand I had merely heard of quite simply described as "old". &amp;nbsp;I knew nothing else about it beforehand.&lt;br /&gt;&lt;br /&gt;Turns out Prolog is a fairly interesting language. &amp;nbsp;It feels a lot like SQL (which I'm not certain would not have been a better choice for this book) with constructs that appear to create a database like table and query over it. &amp;nbsp;You build up a description of a problem, not logic to solve the problem. &amp;nbsp;Prolog then queries these rules and gives back a working solution set using a set of pattern matching constructs. &amp;nbsp;This gives you a great answer to questions that have one unambiguous answer (or a logically defined set of correct answers). &amp;nbsp;Performance however sometimes leaves something to be desired.&lt;br /&gt;&lt;br /&gt;Scala still makes me feel giddy. &amp;nbsp;It takes so much of the Java boilerplate and throws it out the window. &amp;nbsp;Functional programming seems to live in peaceful&amp;nbsp;coexistence&amp;nbsp;with object orientation. &amp;nbsp;It seems like the only downsides Scala can claim all seem to be positives to me. &amp;nbsp;Namely they are Java compatibility, object&amp;nbsp;orientation (and mutable state), and strong, static typing.&amp;nbsp;&amp;nbsp;The first two seem to be a question of style, persons who find either addition distasteful dislike it being&amp;nbsp;available&amp;nbsp;for other developers in the language. &amp;nbsp;Personally, I find that a weak argument. &amp;nbsp;Pragmatically Java syntax and object orientation are useful tools in some contexts. &amp;nbsp;Strong, static typing seems to be more about taste. &amp;nbsp;Rubyists and other dynamic language proponents seem to dislike any static typing. &amp;nbsp;Static typing does seem to buy you performance and definitely offers refactoring capabilities however. &amp;nbsp;I think it really is a wash, if you've become accustomed to either, the other will feel alien and wrong.&lt;br /&gt;&lt;br /&gt;In the end I don't think I'll be writing a lot of Prolog, but I have gotten a few new ideas about what I can use a SQL database for. &amp;nbsp;Scala still seems to be the city on the hill for the JVM, but it seems not all programmers are interested in traveling to Zion. &amp;nbsp;Too bad they can't learn to savor the flavor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-659557033085489865?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/659557033085489865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/04/prologue-to-prolog-and-scaling-scala.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/659557033085489865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/659557033085489865'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/04/prologue-to-prolog-and-scaling-scala.html' title='Prologue to Prolog and Scaling Scala'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-1585524045045768555</id><published>2011-02-27T20:00:00.000-06:00</published><updated>2011-02-27T20:00:21.677-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Io language'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><title type='text'>Visiting the Future in Io</title><content type='html'>&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=postr-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=193435659X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;So seven weeks might be a bit optimistic. &amp;nbsp;I spent the greater part of a week trying (unsuccessfully) to get Io to compile on my Ubuntu box. &amp;nbsp;The&amp;nbsp;intricacies&amp;nbsp;of compiling C code from source have been one of many obstacles that have kept me away from contributing from open source. &amp;nbsp;I haven't had any luck before and Io was no exception.&lt;br /&gt;&lt;br /&gt;Eventually however I stumbled across the windows binaries and gratefully dual booted into my Windows 7 partition. &amp;nbsp;The binaries gleefully worked on the first try. &amp;nbsp;Io was a very nifty language once I finally got to use it. &amp;nbsp;Slots, terminology I had actually heard first from a Java library, make up an object. &amp;nbsp;Objects are just collections of slots. &amp;nbsp;Slots contain objects. &amp;nbsp;Confused yet?&lt;br /&gt;&lt;br /&gt;It isn't confusing if you know Io's cousin, Javascript, already. &amp;nbsp;Both languages are prototype languages, they don't use classes but merely clone existing objects for&amp;nbsp;inheritance. &amp;nbsp;Objects are basically hashes (i.e. dictionary). &amp;nbsp;In Io everything is an object including methods.&lt;br /&gt;&lt;br /&gt;Io has some interesting behavior, particularly in relation to concurrency. &amp;nbsp;Instead of the pre-emptive multitasking I'm used to in Java, Io goes for coroutines instead that politely pass execution from one to another. &amp;nbsp;Two currency constructs, one I'd heard of and another foreign, are also extremely easy to implement in Io. &amp;nbsp;Actors, the known, are simply instated by send an&amp;nbsp;asynchronous&amp;nbsp;message to an object (messages are basically method calls). &amp;nbsp;The unknown was a construct known as Futures. &amp;nbsp;These are simple objects from most perspectives, the difference being that a Futures value is filled by an&amp;nbsp;asynchronous&amp;nbsp;call. &amp;nbsp;If you try to access the object before the call finishes, you automatically block execution while you wait. &amp;nbsp;All of this behavior is baked into the object, no extra code required to access the value.&lt;br /&gt;&lt;br /&gt;I've already started digging into Prolog and I hope to give you some idea of what I find soon. &amp;nbsp;Hopefully my seven weeks in theory won't double in practice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-1585524045045768555?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/1585524045045768555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/02/visiting-future-in-io.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1585524045045768555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1585524045045768555'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/02/visiting-future-in-io.html' title='Visiting the Future in Io'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-1517364309673036637</id><published>2011-02-04T21:00:00.002-06:00</published><updated>2011-02-08T14:31:07.827-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><title type='text'>Metaprogramming and the Magic Black Box</title><content type='html'>&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=postr-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=193435659X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;As you might have read in my last post, I'm trying to get some additional reading in this year. &amp;nbsp;One the of the books I got for Christmas was Bruce Tate's &lt;i&gt;Seven Languages in Seven Weeks&lt;/i&gt;. &amp;nbsp;I've polished off the reading for the first language, Ruby. &lt;br /&gt;&lt;br /&gt;Overall this is an enjoyable book so far. &amp;nbsp;One point of&amp;nbsp;irritation&amp;nbsp;however is the references to answers at the back of the book, which were never published. &amp;nbsp;Not only is this irritating because it should have been an easy typo to fix, but because the best parts of the book so far have been the example problems. &amp;nbsp;I thoroughly enjoyed thinking through the problems and the lack of answers (which I wouldn't miss as much if references had not been made to them) reduces my understanding of the author's perspective. &amp;nbsp;Frequently I found myself wondering if I was missing some basic aspect of the language (particularly a bit of syntactic sugar in Ruby) when solving a problem. &amp;nbsp;Perusing blogs helped to some extent, but often I felt like the example answers I could find were missing some elegance that Tate had in mind. If they didn't have some&amp;nbsp;significance, why did he choose that problem to print?&lt;br /&gt;&lt;br /&gt;Metaprogramming in general has been one section of Ruby that I've been extremely interested in learning how to apply appropriately. &amp;nbsp;&lt;i&gt;Seven&lt;/i&gt;&amp;nbsp;gives a good synopsis and certainly shows how it can remove boilerplate code. &amp;nbsp;It is part of the magic of the Rails framework, but I still remain unconvinced as to its place as a part of a programmer's standard kit. &amp;nbsp;I think there is a balance to be found between boilerplate overload and metaprogramming negative space. &amp;nbsp;When you hide the context of an operation inside the black box of metaprogramming I think you lose a fair amount of perspective into the design of a program. &amp;nbsp;Simpler (concise) becomes more complex (abstraction). &amp;nbsp;We risk losing ourselves in the metaphors.&lt;br /&gt;&lt;br /&gt;Hopefully, I'll find a use case that makes me really appreciate the magic box of the &lt;i&gt;method_missing&lt;/i&gt;&amp;nbsp;and related tricks in Ruby and other metaprogramming toolsets. &amp;nbsp;Until then I'll probably just piggyback on the frameworks like Rails that have used it so well. &amp;nbsp;If you feel like explaining why &lt;i&gt;method_missing&lt;/i&gt;&amp;nbsp;is awesome, please do so on the StackOverflow question below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/3612453/what-are-the-legitimate-uses-for-method-missing-type-functionality"&gt;http://stackoverflow.com/questions/3612453/what-are-the-legitimate-uses-for-method-missing-type-functionality&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-1517364309673036637?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/1517364309673036637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/02/metaprogramming-and-magic-black-box.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1517364309673036637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1517364309673036637'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/02/metaprogramming-and-magic-black-box.html' title='Metaprogramming and the Magic Black Box'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3263834199991011758</id><published>2011-01-19T09:18:00.000-06:00</published><updated>2011-01-19T09:18:21.647-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jug'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='memphis'/><title type='text'>Memphis Java User Group</title><content type='html'>Last night was a great start to 2011 for the Memphis Java User Group (memphisjug.org). &amp;nbsp;We had four presentations, the first of which was a wonderful explanation of the mathematical concept of Monoids, a concept in the same vein as the popular functional programming buzzword Monad. &amp;nbsp;The extensive code sample was done completely in Java. &amp;nbsp;Take that Haskell.&lt;br /&gt;&lt;br /&gt;After dinner three speakers, including myself, gave talks on their personal learning goals for the year. &amp;nbsp;The other speakers gave a great overview of the categories of NoSQL databases and introduced me to a language I've never heard of before, Gosu. &amp;nbsp;Since these were all local speakers I'm looking forward to hearing in depth talks on each of these subjects once they've gotten a chance to dig into them.&lt;br /&gt;&lt;br /&gt;My talk covered two books I received for Christmas, "Seven Languages in Seven Weeks" and "Code Complete 2", as well as HTML5 and the hosting service Heroku. &amp;nbsp;Check out my slide deck below.&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="342" src="https://docs.google.com/present/embed?id=dfbh8pnn_1744h3czrhb" width="410"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;You can download my presentation slides from&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Arial, 'Sans serif'; font-size: 12px;"&gt;&lt;a class="tabcontent" href="https://docs.google.com/present/view?id=dfbh8pnn_1744h3czrhb" id="publishedSlideshowUrl" style="color: #112abb; font-family: Arial, sans-serif; font-size: 12px !important;" target="_blank"&gt;https://docs.google.com/present/view?id=dfbh8pnn_1744h3czrhb&lt;/a&gt;&amp;nbsp;if you'd like to peruse them offline.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-3263834199991011758?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3263834199991011758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2011/01/memphis-java-user-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3263834199991011758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3263834199991011758'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2011/01/memphis-java-user-group.html' title='Memphis Java User Group'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3370444678701389655</id><published>2010-11-21T17:49:00.001-06:00</published><updated>2010-12-09T15:17:33.771-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='web app'/><title type='text'>Xtranormal: Text to Movie</title><content type='html'>I've stumbled across a number of videos in the past few weeks with text to speech voice acting. &amp;nbsp;All of them looked quite similar and I wondered why. &amp;nbsp;The reason? &amp;nbsp;They were all created with Xtranormal's software. &amp;nbsp;Free offerings exist and I made use of them to learn more. &amp;nbsp;Watch the Xtranormal video below for my impressions.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="390" width="480"&gt;&lt;param name="movie" value="http://www.xtranormal.com/site_media/players/jwplayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="flashvars"value="height=390&amp;amp;width=480&amp;amp;file=http://newvideos.xtranormal.com/web_final_lo/abbe31b0-f5b9-11df-9464-003048d69c21_26.mp4&amp;amp;image=http://newvideos.xtranormal.com/web_final_lo/abbe31b0-f5b9-11df-9464-003048d69c21_26.jpg&amp;amp;link=http://www.xtranormal.com/watch/7764741&amp;amp;searchbar=false&amp;amp;autostart=false"/&gt;&lt;embed src="http://www.xtranormal.com/site_media/players/jwplayer.swf" width="480" height="390" allowscriptaccess="always" allowfullscreen="true" flashvars="height=390&amp;amp;width=480&amp;amp;file=http://newvideos.xtranormal.com/web_final_lo/abbe31b0-f5b9-11df-9464-003048d69c21_26.mp4&amp;amp;image=http://newvideos.xtranormal.com/web_final_lo/abbe31b0-f5b9-11df-9464-003048d69c21_26.jpg&amp;amp;link=http://www.xtranormal.com/watch/7764741&amp;amp;searchbar=false&amp;amp;autostart=false"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;object height="390" width="480"&gt;&lt;param name="movie" value="http://www.xtranormal.com/site_media/players/embedded-xnl-stats.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.xtranormal.com/site_media/players/embedded-xnl-stats.swf" width="1" height="1" allowscriptaccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.xtranormal.com/"&gt;http://www.xtranormal.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-3370444678701389655?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3370444678701389655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/11/xtranormal-text-to-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3370444678701389655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3370444678701389655'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/11/xtranormal-text-to-movie.html' title='Xtranormal: Text to Movie'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-2881505412284225742</id><published>2010-11-18T21:36:00.000-06:00</published><updated>2010-11-18T21:36:15.983-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='website design'/><category scheme='http://www.blogger.com/atom/ns#' term='rap'/><title type='text'>Website Design Melody</title><content type='html'>I'm just going to let the video speak for itself.&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/a0qMe7Z3EYg?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/a0qMe7Z3EYg?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-2881505412284225742?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/2881505412284225742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/11/website-design-melody.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2881505412284225742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2881505412284225742'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/11/website-design-melody.html' title='Website Design Melody'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-2435911529981430363</id><published>2010-11-16T18:00:00.001-06:00</published><updated>2010-11-16T18:00:03.283-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google's Instant Gratification</title><content type='html'>You're probably already aware of Google's instant search feature. &amp;nbsp;&lt;a href="http://www.google.com/instant/"&gt;http://www.google.com/instant/&lt;/a&gt;&amp;nbsp;&amp;nbsp;This is a really neat idea of giving you results as you type, helping you key in on search terms or just save time. &amp;nbsp;Unfortunately, it just doesn't seem to click with most people. &amp;nbsp;I admit I have only begun to really feel some benefit. &amp;nbsp;It doesn't help on every search, but when I can simply redefine my search before refreshing the page on a more niche query it does save me time. &amp;nbsp;It also helps me get a better conceptual idea of the keyword web space.&lt;br /&gt;&lt;br /&gt;I just learned about keyboard navigation on Google Instant, which I think might make this product even more useful for me. &amp;nbsp;&lt;a href="http://googleblog.blogspot.com/2010/09/fly-through-your-instant-search-results.html"&gt;http://googleblog.blogspot.com/2010/09/fly-through-your-instant-search-results.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A new instant feature from Google is now out though, one that I think could be more useful than either of the other projects similarly branded. &amp;nbsp;Instant preview (&lt;a href="http://googleblog.blogspot.com/2010/11/beyond-instant-results-instant-previews.html"&gt;http://googleblog.blogspot.com/2010/11/beyond-instant-results-instant-previews.html&lt;/a&gt;)&amp;nbsp;gives a snapshot of the page in the search results, no need to go the page. &amp;nbsp;A picture is worth a thousand words and this can easily help me skip the results I'm not interested in.&lt;br /&gt;&lt;br /&gt;I do however wish they had made the snapshot show up automatically as you hover over the links by default, instead of having to turn it on the first time by clicking on the magnifying glass. &amp;nbsp;Also, the need to actually perform the search (i.e. leave the instant search function) is also aggravating. &amp;nbsp;Just show me a preview of the top result and let me use the arrow keys to exit and return to instant search without finalizing my search.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-2435911529981430363?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/2435911529981430363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/11/googles-instant-gratification.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2435911529981430363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2435911529981430363'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/11/googles-instant-gratification.html' title='Google&apos;s Instant Gratification'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-7734557125122780551</id><published>2010-11-11T18:00:00.004-06:00</published><updated>2010-11-11T18:00:00.122-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit tests'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Thoughts on Software Testing</title><content type='html'>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_N-UjFPLJlkc/TNx0MdGzVxI/AAAAAAAAAGA/eTYMVLU4CNU/s1600/Testing.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="100" src="http://1.bp.blogspot.com/_N-UjFPLJlkc/TNx0MdGzVxI/AAAAAAAAAGA/eTYMVLU4CNU/s320/Testing.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Less test coverage &amp;lt;== &amp;nbsp;==&amp;gt; More test coverage&lt;br /&gt;Y increases with cost&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;This is partly a response to the blog post by Derick Bailey linked below. &amp;nbsp;It is mostly an effort to help articulate my understanding of testing&amp;nbsp;strategies that I am woefully unexperienced in.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.lostechies.com/blogs/derickbailey/archive/2010/11/11/cost-vs-risk-in-testing.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+LosTechies+(LosTechies)"&gt;http://www.lostechies.com/blogs/derickbailey/archive/2010/11/11/cost-vs-risk-in-testing.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+LosTechies+(LosTechies)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Each type of testing covers a different class of bugs, which combined only add to 100% of error cases coverable by testing. &amp;nbsp;Yes, there is some overlap, but that brings me to my next point. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Different types of testing also have drastically different costs associated. &amp;nbsp;If we could afford true 100% end to end testing, maybe unit testing wouldn't be required. &amp;nbsp;In reality, we rarely ever do. &amp;nbsp;100% end to end testing is too expensive in terms of time and money.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;We do unit testing and integration testing because each is much cheaper than end to end testing. &amp;nbsp;This is in no small part do to the fact that it is agile. &amp;nbsp;We get a cheaper bang for our buck, but we also get it during early development. &amp;nbsp;Sure end to end could handle a working system, you get no help from end to end testing when building a system bottom up or developing a new slice from the middle. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;So why not skip end to end all together? &amp;nbsp;Well we have some diminishing returns. &amp;nbsp;Your first end to end test is going to be more productive than your unit tests at some point. &amp;nbsp;It doesn't matter if all your code is unit tested if you have a show stopper that an end to end test would have caught.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Overlap certainly is waste, but is not alway economically avoidable waste.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Consider a car. &amp;nbsp;We can install a roll cage, air bags, and a seatbelt costing 1000, 100, and 10 dollars respectively. &amp;nbsp;A roll cage may reduce the chance for injury in certain crashes just as effectively as an air bag or seatbelt, but it may do nothing in other cases or it may be vital. &amp;nbsp;In reality, car manufacturers provide a combination of techniques which provide a sweet spot between economy and safety. &amp;nbsp;They focus on those efforts which give the greatest return, even if they necessarily create overlap in function.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Risk is not easily compartmented into each category of testing. &amp;nbsp;Sometimes you need both belt and suspenders.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-7734557125122780551?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/7734557125122780551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/11/thoughts-on-software-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7734557125122780551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7734557125122780551'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/11/thoughts-on-software-testing.html' title='Thoughts on Software Testing'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_N-UjFPLJlkc/TNx0MdGzVxI/AAAAAAAAAGA/eTYMVLU4CNU/s72-c/Testing.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-188136053144025893</id><published>2010-11-09T18:00:00.001-06:00</published><updated>2010-11-09T18:00:02.556-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Modal Style Boxing Day</title><content type='html'>I've seen a plenty of websites that use modal style windows particularly for photo galleries. &amp;nbsp;They can be used for a variety of other content as well, giving a clean looking UI. &amp;nbsp;A little bit of polish, that give a fair amount of bang visually. &amp;nbsp;Unfortunately, the javascript behind it has always been a bit arcane. &amp;nbsp;I stumbled across a few snippets of code that claimed to handle it, but I was worried about continuing cross platform compatibility. &amp;nbsp;Luckily, a smattering of jQuery based projects have been developed to solve that problem.&lt;br /&gt;&lt;br /&gt;One you might look at is FancyBox (&lt;a href="http://fancybox.net/"&gt;http://fancybox.net/&lt;/a&gt;). &amp;nbsp;I haven't been able to take a chance to use it, but if the landing page for the project is any indication you can make some smooth UI with it. &amp;nbsp;Definitely something I will use in my next personal project. &amp;nbsp;Almost makes me want to write something sooner rather than latter just for the cool factor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-188136053144025893?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/188136053144025893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/11/modal-style-boxing-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/188136053144025893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/188136053144025893'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/11/modal-style-boxing-day.html' title='Modal Style Boxing Day'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-5384199334816355185</id><published>2010-10-27T17:33:00.000-05:00</published><updated>2010-10-27T17:33:17.381-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><title type='text'>Opening up a can of source: Open Source Pros and Cons</title><content type='html'>One of the more interesting decisions I think an individual or organization can make is whether or not to make their software open source. &amp;nbsp;Here are some factors I've been going over that I think make the difference.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Difficulty&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Open source lends itself best to the very easiest and very hardest problems. &amp;nbsp;The very easiest will get implemented by competitors anyway, so no advantage is kept by proprietary source. &amp;nbsp;The very hardest are beyond the scope of most teams, crowd-sourcing is a major help for these projects. &amp;nbsp;Configuration scripts might be an example of the former, research projects the latter.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Budget&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Open source works on no budget, or more accurately donated time budgets. &amp;nbsp;Proprietary code rarely works under that environment. &amp;nbsp;Proprietary code is boxed in by budget, so your code must be justified by the financial returns.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Time Frame&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Is your code timeless? &amp;nbsp;Do you expect it to be used far into the future? &amp;nbsp;Then it may be a good fit for open source. &amp;nbsp;The longer you are in development, the more dividends crowd sourcing can pay. &amp;nbsp;The longer your solution is useful, the more likely someone else is going to develop a similar solution. &amp;nbsp;Open source also let's your users update it themselves after you've dropped official support. &amp;nbsp;Proprietary code instead trades on users needing a solution "now" for the problems they have "now". &amp;nbsp;Support of proprietary code is only provided as long as it provides a good rate of return.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Audience&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Are your users developers, system administrators, or highly technical? &amp;nbsp;Is your user population very large or very small? &amp;nbsp;If your users are effective contributors (in development or testing) then open source is going to get a super charged crowd sourcing effect. &lt;br /&gt;&lt;br /&gt;If your user population is very large, then crowd sourcing still is in effect even if average&amp;nbsp;contribution&amp;nbsp;per user is low. &amp;nbsp;Large user populations also attract competitors, which can be hard to fight off without network effects of obtaining a large user base. &lt;br /&gt;&lt;br /&gt;Very small user populations are difficult to monetize. &amp;nbsp;Even if the your company generates some advantage from internally developed niche applications, it might still be useful. &amp;nbsp;You might generate more by getting contributions from other niche users who don't compete directly. &amp;nbsp;You might open up new business strategy by lowering the cost associated with maintaining the code. &amp;nbsp;Finally, if your internal project is behind the market leader open source may help you achieve parity at a lower development cost.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Final Thought&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;There are better explanations of the pros and cons of open source, but I hope you've gotten something out of mine. &amp;nbsp;The most important factor of all of these is time. &amp;nbsp;When development time is plentiful, open source thrives. &amp;nbsp;When you start running against some constraints, proprietary code begins to make sense. &amp;nbsp;If you box your development constraints in too far however, proprietary code no longer makes sense.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-5384199334816355185?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/5384199334816355185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/10/opening-up-can-of-source-open-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5384199334816355185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5384199334816355185'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/10/opening-up-can-of-source-open-source.html' title='Opening up a can of source: Open Source Pros and Cons'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3568876145780961809</id><published>2010-10-21T20:29:00.000-05:00</published><updated>2010-10-21T20:29:37.743-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>A recent argument I had: Math in Programming</title><content type='html'>&lt;a href="http://writing.bryanwoods4e.com/1-poor-poor-child"&gt;http://writing.bryanwoods4e.com/1-poor-poor-child&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A friend pointed out the following quote from the blog post linked above.&lt;br /&gt;&lt;blockquote&gt;I'm not sure how this stereotype got instilled in me, but I'm slightly embarrassed to admit that I was surprised to discover how little math is involved in day-to-day programming, especially for a web developer. A command of the written word is far more important. Intelligent, clearly-articulated prose is probably the most significant goal for both writers and programmers alike.&lt;/blockquote&gt;&lt;blockquote&gt;The math I do regularly is much more similar to the logic truth table exercises I learned in ninth grade than the complex algorithms you hear mentioned so frequently by programmers. Knowing whether an evaluation is true, false, or nil and how my programming language specifically treats each state is the extent of the "math" I do regularly. Occasionally I've had to calculate discounts or sales tax, but that's less mathematical than managing a cash register at a restaurant.&lt;/blockquote&gt;&lt;blockquote&gt;Besides, computers are way better at math than you are anyway. By learning to program, you'll learn to let them handle it for you.&lt;/blockquote&gt;Now there is clearly some truth in this quote. &amp;nbsp;I haven't felt the need to pull out a trigonometric or &amp;nbsp;calculus equation during my short professional programming career. &amp;nbsp;Unless I start doing something geometry related I might never do so. &amp;nbsp;Command of natural language is probably the most important skill anyone can develop. &amp;nbsp;The rest of the blog post is truthful as well.&lt;br /&gt;&lt;br /&gt;But I don't agree that with the subtext of the quote that math class stopped being useful at ninth grade or that math programmers do regularly isn't complex.&lt;br /&gt;&lt;br /&gt;I apply college level discrete mathematics and logic coursework to my programming everyday. Do I break out the formal notation? Sometimes, but&amp;nbsp;unfortunately&amp;nbsp;not usually. However, just because I use informal notation (pseudo code) or work out the problem in my head doesn't mean I didn't do any math. &amp;nbsp;It just means I didn't properly show my work.&lt;br /&gt;&lt;br /&gt;I think the mathematical logic I use is fairly complex and took a fair amount of time to obtain my current level of mastery. Set operations and data transformations in singular instances are well within the purview of laymen. Chaining multiple instances of both is something that takes some practice. You may not understand the formalities and rigor, but you do develop a feel for discrete mathematics and logic as a programmer.&lt;br /&gt;&lt;br /&gt;You could argue that set operations and data transformations can be abstracted away. That the remaining model is simple, no complex math required. I'd say you were fundamentally wrong.&lt;br /&gt;&lt;br /&gt;Abstractions are a tool to manage complexity, not reduce it. Complexity of a problem is constant with respect to static requirements. &amp;nbsp;The complexity of the solution may change, but the required inputs and outputs remain the same.&lt;br /&gt;&lt;br /&gt;If I have 1,000 set operations required to come to a desired result (output), it is decidedly more complex than a program which requires only one. &amp;nbsp;Even if I abstract the 1,000 down to only a handful at any time complexity remains. &amp;nbsp;Logic is not constrained to individual IF blocks or JOINS. It is the entire sets of possible input transformed into the entire sets of possible outputs that define the program. &amp;nbsp;Your program may give intermediary output in the duration, you may have abstractions to conceptualize layers or components of the system, but fundamentally you are operating on a state machine at there beginning and an end (or cycle).&lt;br /&gt;&lt;br /&gt;That is not to say that abstractions don't have a place in every programmer's toolbelt. &amp;nbsp;It just happens they do because they are a powerful application of discrete mathematics and/or logic. For example, chunking a large set operation into manageable pieces is discrete mathematics.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;u&gt;Example: Login&lt;/u&gt;&lt;/blockquote&gt;&lt;blockquote&gt;((E U P) ^ R) ^ S = A&lt;/blockquote&gt;&lt;blockquote&gt;((Email Union Password) Intersect Users) Intersect Session = Authenticated Session&lt;/blockquote&gt;&lt;br /&gt;Authenticated Session is an abstraction. This abstraction will be used later in other set operations, probably in and on other abstractions. Together they will form a complex mathematical construct, even if you never think about them that way.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;u&gt;Example2: Login with additional abstraction&lt;/u&gt;&lt;/blockquote&gt;&lt;blockquote&gt;E U P = C&lt;/blockquote&gt;&lt;blockquote&gt;Email Union Password = Credentials&lt;/blockquote&gt;&lt;blockquote&gt;(C ^ R) ^ S = A&lt;/blockquote&gt;&lt;blockquote&gt;(Credentials Intersect Users) Intersect Session = Authenticated Session&lt;/blockquote&gt;&lt;br /&gt;The complexity of the problem has not changed (mapping of inputs to outputs), but the additional abstraction allows us to mange the complexity.&lt;br /&gt;&lt;br /&gt;I hope the above is suitably demonstrative of applied discrete mathematics in programming. I would think most programmers could have arrived at the solutions by intuition, that is to say do it in their head or by instinct. &amp;nbsp;I'd argue this is because they are very good at discrete mathematics.&lt;br /&gt;&lt;br /&gt;The point of my argument is that my formal education in computer science placed an emphasis on discrete mathematics and logic, which are true mathematic disciplines. While I do not employ the rigor or formality, the concepts are very useful in my work. &lt;br /&gt;&lt;br /&gt;My other point is that I use these types of complex math *all the time* in programming, even when I do not explicitly show my work. &amp;nbsp;Don't sell yourself short as mathematician if you are a programmer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-3568876145780961809?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3568876145780961809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/10/recent-argument-i-had-math-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3568876145780961809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3568876145780961809'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/10/recent-argument-i-had-math-in.html' title='A recent argument I had: Math in Programming'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3008385475906765741</id><published>2010-09-28T23:59:00.006-05:00</published><updated>2010-09-28T23:59:00.956-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='steam'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Gaming: Alien Swarm</title><content type='html'>I put this game down a while ago, but the concept was interesting enough that I thought it merited comment.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Alien Swarm&lt;/i&gt; is a top down, 3D, co-operative&amp;nbsp;multi-player&amp;nbsp;shooter in very similar&amp;nbsp;vein&amp;nbsp;as &lt;i&gt;Left 4 Dead&lt;/i&gt;. &amp;nbsp;It also looks a whole lot like the new &lt;i&gt;Laura Croft and the Guardian of Light&lt;/i&gt;, a game that costs $15. &amp;nbsp;&lt;i&gt;Alien Swarm&lt;/i&gt;&amp;nbsp;provides a simplistic interface, but also includes editor and scripting tools allowing 4 players at play at a time. &amp;nbsp;The game really requires a full contingent to enjoy fully, although bots can be enabled through the scripting tools.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_N-UjFPLJlkc/TKFA8Vwg5bI/AAAAAAAAAF8/sjOm837QuEw/s1600/alienswarm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/_N-UjFPLJlkc/TKFA8Vwg5bI/AAAAAAAAAF8/sjOm837QuEw/s400/alienswarm.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Unlockable weapons and upgrades, four different character classes, and cross-game achievements made for great way for Steam to get a few extra installations of their software to the masses. &amp;nbsp;For the price, it is worth your time.&lt;br /&gt;&lt;br /&gt;If you haven't, check it out on Steam. &amp;nbsp;&lt;a href="http://store.steampowered.com/app/630/"&gt;http://store.steampowered.com/app/630/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-3008385475906765741?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3008385475906765741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/09/gaming-alien-swarm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3008385475906765741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3008385475906765741'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/09/gaming-alien-swarm.html' title='Gaming: Alien Swarm'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_N-UjFPLJlkc/TKFA8Vwg5bI/AAAAAAAAAF8/sjOm837QuEw/s72-c/alienswarm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-2584270167126473720</id><published>2010-09-27T19:52:00.000-05:00</published><updated>2010-09-27T19:52:27.046-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop apps'/><title type='text'>Logon Screen</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Windows 7 has a lot of things to offer, especially if you've got recently purchased hardware. &amp;nbsp;But even with all the bells, whistles, and features from Vista that finally work right, it still could use a few more built in power user style options. &amp;nbsp;One change that I was very happy to make not long ago was to my home machine's logon screen.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I borrowed some World of Warcraft icons for my user logins and the picture below to give myself a nice system metaphor. &amp;nbsp;The Tweaks.com logon changer is a pretty straightforward program, so I'll let the screenshot speak for itself.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_N-UjFPLJlkc/TKE6q0yR98I/AAAAAAAAAF4/KV1Jv1nNLqI/s1600/logon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://1.bp.blogspot.com/_N-UjFPLJlkc/TKE6q0yR98I/AAAAAAAAAF4/KV1Jv1nNLqI/s400/logon.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Below is a link to the logon screen changer.&lt;br /&gt;&lt;a href="http://download.cnet.com/Tweaks-com-Logon-Changer/3000-2094_4-10911825.html"&gt;http://download.cnet.com/Tweaks-com-Logon-Changer/3000-2094_4-10911825.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-2584270167126473720?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/2584270167126473720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/09/logon-screen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2584270167126473720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2584270167126473720'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/09/logon-screen.html' title='Logon Screen'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_N-UjFPLJlkc/TKE6q0yR98I/AAAAAAAAAF4/KV1Jv1nNLqI/s72-c/logon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-4942895142762883097</id><published>2010-09-02T17:21:00.000-05:00</published><updated>2010-09-02T17:21:47.506-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='teaser'/><category scheme='http://www.blogger.com/atom/ns#' term='sociology'/><title type='text'>Teaser Post: Social, Political, and Financial Capital</title><content type='html'>An idea that's been floating around in my head for a few days has been the different types of "capital", particularly as they relate to &lt;a href="http://en.wikipedia.org/wiki/Gift_economy"&gt;gift economies&lt;/a&gt;. &amp;nbsp;This is particularly interesting to me because &lt;a href="http://catb.org/esr/writings/homesteading/homesteading/ar01s06.html"&gt;open source communities&lt;/a&gt; and increasingly even modern development departments operate as gift economies.&lt;br /&gt;&lt;br /&gt;Why is this important? &amp;nbsp;Because it means you have resources your balance sheet doesn't reflect, resources that can be transformed into financial rewards or help you achieve&amp;nbsp;goals that are&amp;nbsp;orthogonal to normal business operations.&lt;br /&gt;&lt;br /&gt;And that's all I'll say about that... for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-4942895142762883097?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/4942895142762883097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/09/teaser-post-social-political-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/4942895142762883097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/4942895142762883097'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/09/teaser-post-social-political-and.html' title='Teaser Post: Social, Political, and Financial Capital'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-6394550869952650449</id><published>2010-08-30T13:37:00.000-05:00</published><updated>2010-08-30T13:37:26.564-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><title type='text'>Salvaging the Anti-Pattern: Smart UI</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=postr-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1430228865&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;I've been reading the first couple of chapters of Steve Sanderson's MVC 2 book.  I haven't learned much about MVC from it that I didn't know from Rails, yet.  It does have a decent discussion of XSS and the .NET 4 features to make it less common.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;What really caught my interest is the discussion of the Smart UI anti-pattern.  This is something I definitely feel I've been guilty of.  Using this anti-pattern stems from two beliefs of mine:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;One, both client and server side validation should be present.  The server has to have it because the client may be malicious.  The client should have it because it shouldn't have to do a network round trip to find out fields were required or formatted incorrectly.  If I don't need to go the database to validate, I probably don't need to go to the server (but afterwards I will make sure you played fair).&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Two, clients should display an elegant and concise UI.  Often this mean hiding inputs and information until it is needed.  Inserting the necessary logic to do so however creates quite a mess of event handling code.  It also makes my code more fragile, since changes in the domain logic now require changes in the event logic as well.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;I'm sure there is a clean way to import validation and input relationship logic into the UI without using clipboard inheritance from the domain, but I haven't found it yet.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-6394550869952650449?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/6394550869952650449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/08/salvaging-anti-pattern-smart-ui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6394550869952650449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6394550869952650449'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/08/salvaging-anti-pattern-smart-ui.html' title='Salvaging the Anti-Pattern: Smart UI'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3452660154886143963</id><published>2010-08-20T16:19:00.003-05:00</published><updated>2010-08-20T16:31:10.275-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stack overflow'/><category scheme='http://www.blogger.com/atom/ns#' term='personal note'/><title type='text'>Busy Week</title><content type='html'>I've been busy this week.&lt;div&gt;&lt;ul&gt;&lt;li&gt;Got my feet wet with ASP.NET MVC.&lt;/li&gt;&lt;li&gt;Took a more official role in my local Java Users Group.&lt;/li&gt;&lt;li&gt;Bought my first house.  &lt;i&gt;//Here's the problem.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I hope to put a more sturdy line up of posts next week.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On a more relevant note, I've added my Stack Overflow profile in the sidebar.  If you haven't heard about Stack Overflow, or just haven't used it, make sure to take the time to check it out.  It takes some of the best aspects of slashdot.org style community based moderation and applies it with full force to the technical FAQ genre website.  Even the creation of new FAQ sites under their umbrella company, Stack Exchange, is handled via a community moderated technique.  Very cool use of crowdsourcing.  I'll see you there!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://stackoverflow.com/"&gt;http://stackoverflow.com/&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&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/3144008113539994012-3452660154886143963?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3452660154886143963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/08/busy-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3452660154886143963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3452660154886143963'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/08/busy-week.html' title='Busy Week'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-7116458775340198174</id><published>2010-08-10T10:47:00.004-05:00</published><updated>2010-08-16T09:28:07.905-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='t-sql'/><title type='text'>Code Puzzler: T-SQL</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Problem:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Common Table Expressions (CTE) are a really cool recent addition to my vocabulary.  Operating a lot like a temporary table, they only last for the duration of the query and clean up after themselves.&lt;br /&gt;&lt;br /&gt;Another cool idea is string concatenation within a SELECT statement.  Together they make some interesting code.&lt;br /&gt;&lt;br /&gt;So we had some code that looked something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;;WITH Person as ( --This is where we kick off the CTE&lt;br /&gt;SELECT @STR = @STR +&lt;br /&gt;  CASE E.FirstName WHEN  ''&lt;br /&gt;    C.FirstName  --Remember this line.&lt;br /&gt;  ELSE&lt;br /&gt;    E.FirstName&lt;br /&gt;  AS 'FristName'&lt;br /&gt;FROM Employees E&lt;br /&gt;  JOIN Contacts C ON E.Email = C.Email&lt;br /&gt;ORDER BY&lt;br /&gt;  FirstName&lt;br /&gt;)&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;An elegant solution for a more civilized age.  The string concatenates the correct field while the CTE loops over the tables all without the use of a cursor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Puzzle:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This code would work, except we care about order.  And order and string concatenation don't mix, at least according to the following &lt;a href="http://support.microsoft.com/kb/287515"&gt;knowledge base article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What's interesting is that the query doesn't blow up, it just acts...weird.  Like returning on the last thing to be concatenated.  Or not causing any problem at all.  Remember the line I marked above?  If I set it to a string literal, the code operates normally.  Otherwise, weirdness.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dump it all into a temp table to order it.  Of course you lose your nice tidy code that way, but it works.  At least you can say you tried to use a CTE.&lt;br /&gt;&lt;br /&gt;If you have a more elegant solution, please post it below in the comments.  I'd love to hear it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ongoing Mystery:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So what actually is happening with those queries where the undefined behavior hasn't bitten me, yet?  Do tests for multi row result concatenation conclusively tell me whether I've missed the error.  Or is the weird undefined behavior dependent not only on query structure but also table contents?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-7116458775340198174?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/7116458775340198174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/08/code-puzzler-t-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7116458775340198174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/7116458775340198174'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/08/code-puzzler-t-sql.html' title='Code Puzzler: T-SQL'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-2231071073817993693</id><published>2010-08-09T17:07:00.002-05:00</published><updated>2010-08-09T18:20:27.611-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop apps'/><title type='text'>Display Fusion</title><content type='html'>I get plenty of stuff done at home on a 17" monitor.  It meets all my needs, services all of my requests.  It has done so now for many years.  I've got a 22" monitor in a box waiting for a desk that can hold it.  That's a bit sad but I'm in no hurry to put down the cash for the furniture.&lt;br /&gt;&lt;br /&gt;Imagine how I feel every day coming into work to two 22" monitors.  Pure bliss, that's how.  &lt;a href="http://www.displayfusion.com/"&gt;Display Fusion&lt;/a&gt; is a utility that takes that bliss and smooths out any wrinkles from the lack of advanced Windows support for multi monitor setups.  I'm just using it for a seamless desktop background across two monitors right now, but additional options abound.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_N-UjFPLJlkc/TD-I_G6wG9I/AAAAAAAAAE4/56-0KGWLRCA/s1600/Horizon___Widescreen_Wallpaper_by_hameed.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 160px;" src="http://2.bp.blogspot.com/_N-UjFPLJlkc/TD-I_G6wG9I/AAAAAAAAAE4/56-0KGWLRCA/s400/Horizon___Widescreen_Wallpaper_by_hameed.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5494260688185465810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A great deal of those options, such as hot keys to send a window to another monitor, are available in the free version.  A trial of the paid version is available and it only cost $25 to purchase.  That's a lifetime license, so there's no additional cost for new versions.  If you go multi monitor, check out Display Fusion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-2231071073817993693?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/2231071073817993693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/08/display-fusion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2231071073817993693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/2231071073817993693'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/08/display-fusion.html' title='Display Fusion'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_N-UjFPLJlkc/TD-I_G6wG9I/AAAAAAAAAE4/56-0KGWLRCA/s72-c/Horizon___Widescreen_Wallpaper_by_hameed.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-8004923661627497733</id><published>2010-08-02T09:00:00.000-05:00</published><updated>2010-08-02T09:00:00.714-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><title type='text'>LinkedIn</title><content type='html'>I'm throughly perplexed about the machinations that allow one social network to dominate another.  The question of how to obtain and maintain a user base of millions of customers is one I don't think a good answer exists for.&lt;br /&gt;&lt;br /&gt;LinkedIn is one of the few I think actually has a chance at answering the question.  It answers the initial questions of delineating access level and social graph noise by focusing on professional relationships.  You don't wonder if your boss is looking at your LinkedIn profile, you want them to.  You can request recommendations, list qualifications and professional associations, and network with potential partners. &lt;br /&gt;&lt;br /&gt;This strong sense of purpose I think will make LinkedIn a contender for survival in the social networking sphere.  You can catch my &lt;a href="http://www.linkedin.com/in/thomaslangston"&gt;profile&lt;/a&gt; there, drop me a line, or check out my professional history.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-8004923661627497733?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/8004923661627497733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/08/linkedin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8004923661627497733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8004923661627497733'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/08/linkedin.html' title='LinkedIn'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-8113882930279443014</id><published>2010-08-01T09:00:00.001-05:00</published><updated>2010-08-01T09:00:01.408-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Review: 1 Month</title><content type='html'>While the real 1 month anniversary of the creation of this blog isn't for a couple of weeks, the event that spawned its creation has passed that milestone.  Namely, my first day of work at my current job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-8113882930279443014?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/8113882930279443014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/08/review-1-month.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8113882930279443014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8113882930279443014'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/08/review-1-month.html' title='Review: 1 Month'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-3449163318874387062</id><published>2010-07-28T09:00:00.003-05:00</published><updated>2010-07-29T08:51:10.506-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool stuff'/><title type='text'>Scratch</title><content type='html'>A while back I mentioned &lt;a href="http://scratch.mit.edu/"&gt;Scratch&lt;/a&gt; as one of the things I used to kindle my programming career.  It is said that in order to truly understand something you have to teach it.  Scratch is a wonderful teaching tool for programming.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_N-UjFPLJlkc/TFGHQRd4wII/AAAAAAAAAFo/3psEYHGSG38/s1600/logo2modify.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 198px; height: 60px;" src="http://1.bp.blogspot.com/_N-UjFPLJlkc/TFGHQRd4wII/AAAAAAAAAFo/3psEYHGSG38/s200/logo2modify.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5499325333632499842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Scratch allows new programmers (often kids, but not always) to create sprite based interactive content (i.e. games) easily.  Programming blocks such as if statements, variable assignments, and events snap together into scripts like Lego(tm) bricks.&lt;br /&gt;&lt;br /&gt;I created a dozen games for a &lt;a href="http://scratch.mit.edu/users/zelf_gale"&gt;gallery&lt;/a&gt; to show off concepts and explore mechanics, both in technology and game mechanics.  I then made a couple of presentations to teach those ideas to group of teenagers for an event.&lt;br /&gt;&lt;br /&gt;Scratch makes a great tool to turn some fun time into easily understandable demonstrations of programming knowledge.  It can be read by someone who's never programmed and entertain the veteran.  It was such a simple resume addition that I'd suggest everyone in the programming field take some time with it, you'll probably like what you create with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-3449163318874387062?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/3449163318874387062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/scratch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3449163318874387062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/3449163318874387062'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/scratch.html' title='Scratch'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_N-UjFPLJlkc/TFGHQRd4wII/AAAAAAAAAFo/3psEYHGSG38/s72-c/logo2modify.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-5008755465900140572</id><published>2010-07-27T09:00:00.003-05:00</published><updated>2010-07-27T09:00:02.389-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='starcraft'/><category scheme='http://www.blogger.com/atom/ns#' term='blizzard'/><title type='text'>Gaming: Starcraft 2 Release</title><content type='html'>Starcraft 2 is being released today.  I probably won't be playing it tonight.  Here's why.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_N-UjFPLJlkc/TE33LLXroHI/AAAAAAAAAFY/0NV3rDNnNKw/s1600/starcraft2_logo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_N-UjFPLJlkc/TE33LLXroHI/AAAAAAAAAFY/0NV3rDNnNKw/s200/starcraft2_logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5498322491491983474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I preordered Starcraft 2 several weeks ago and participated in the Beta.  I loved it from first marine.  Almost everything there was to enjoy in the original was available, either directly or as a reinvisioned counterpart.  For example medics and dropshops are combined into medivacs, dune buggies wield fierbat style flamethrowers, wraiths are divided into vikings and banshees with each being decidedly better at a specific style of gameplay than their predecessor.&lt;br /&gt;&lt;br /&gt;New units and the cliff jumping mechanic add another dimension to the tactics already well known by Starcraft players.  The game feels exceptionally well balanced and I have no doubt it will continue to improve in future installments and patches.  If this game is so wonderful why am I abstaining tonight?&lt;br /&gt;&lt;br /&gt;Network latency.  While I could rant against Blizzard for under developing their network capabilities, I know inside this probably isn't true.  More likely it is a problem of economics.  If the game only uses 50% of the network resources during normal prime time, how do you justify the increased capital costs for a release activity spike, a statistical outlier?  It can work  99% of the time (1 day of downtime a quarter i.e. patch days) at a fraction of a cost of 99.9% uptime (9 hours of yearly downtime i.e. product release).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_N-UjFPLJlkc/TE33eBHjWRI/AAAAAAAAAFg/zlklWLYB-sw/s1600/time+scales.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 176px; height: 200px;" src="http://3.bp.blogspot.com/_N-UjFPLJlkc/TE33eBHjWRI/AAAAAAAAAFg/zlklWLYB-sw/s200/time+scales.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5498322815157491986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So I'm going to patiently wait 24 hours for the flash mob to pass before firing up my retail client.  Then watch out ladders, here I come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-5008755465900140572?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/5008755465900140572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/gaming-starcraft-2-release.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5008755465900140572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5008755465900140572'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/gaming-starcraft-2-release.html' title='Gaming: Starcraft 2 Release'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_N-UjFPLJlkc/TE33LLXroHI/AAAAAAAAAFY/0NV3rDNnNKw/s72-c/starcraft2_logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-1379568465586820325</id><published>2010-07-26T09:00:00.003-05:00</published><updated>2010-07-26T09:00:07.537-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beginning'/><title type='text'>Why I'm Here: Part 2</title><content type='html'>When we left my life story last I had accepted a job in IT support for the local library.  Economics downturns loomed unseen over the horizon and programming jobs were sparse and getting sparser.  How did I weather the storm?&lt;br /&gt;&lt;br /&gt;In retrospect it is easy to say I did poorly.  I could have contributed to any number of open source projects for the requisite experience, but it felt like an impossible task.  Open source still does in some ways, merging into an existing workflow with people you've never met in technologies you've never used.  &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_N-UjFPLJlkc/TEjBgyiFisI/AAAAAAAAAFQ/uwY64zgONug/s1600/black-hole.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/_N-UjFPLJlkc/TEjBgyiFisI/AAAAAAAAAFQ/uwY64zgONug/s200/black-hole.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5496856114270407362" /&gt;&lt;div style="text-align:center"&gt;Bounce your http request off this!&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At the time the job search felt tremendously difficult.  Programming jobs didn't land in my lap like IT support ones did.  "Two years experience" were dreaded words.  I tried a number of websites and technical recruiters.  It took nearly a year and half to land my first interview.  The job offer was made and within days was rescinded.  The employer had lost a client who represented half their business.&lt;br /&gt;&lt;br /&gt;Disappointed I left the recruiter and job websites.  I spent the next year posting resumes directly to company and government listings.  No bites, not even a nibble.  Opportunities for promotion within my current employer appeared nonexistent.&lt;br /&gt;&lt;br /&gt;I eventually got myself involved with my local Java Users Group.  I began playing with Perl and Ruby during my free time.  Concepts like Model, View, Controller that were barely covered in college crept into my understanding.  Software testing tools came onto my radar, even if they still don't saturate my process.  I put together a website to stretch my knowledge of PHP, javascript, HTML, AJAX, forms, and SQL.  At work I got a chance to teach kids to use a introductory programming tool called Scratch.  I wrote a novel, a personal life goal.&lt;br /&gt;&lt;br /&gt;One day the recruiter who sponsored the Memphis JUG listed a entry level programming job with the group.  I applied, my presence in the meetings sparked a recognition, my website feed their desire to know more.  Those little things I had been doing the past year kindled my degree into a finally respectable application.  I applied, interviewed, interviewed, and interviewed.  Again I was offered a position, but this time with company whose client base was broad enough to survive any momentary lapse in funding.&lt;br /&gt;&lt;br /&gt;I accepted and put in my two weeks notice.  I felt so eager to be at my new job, I worried I was building it up to much.  But so far it has been more than I hoped for and it doesn't look to be letting up anytime soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-1379568465586820325?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/1379568465586820325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/why-im-here-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1379568465586820325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/1379568465586820325'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/why-im-here-part-2.html' title='Why I&apos;m Here: Part 2'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_N-UjFPLJlkc/TEjBgyiFisI/AAAAAAAAAFQ/uwY64zgONug/s72-c/black-hole.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-565190291843480871</id><published>2010-07-23T09:00:00.009-05:00</published><updated>2010-11-20T20:27:55.837-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>iPhone vs. Android</title><content type='html'>A house divided cannot stand.&lt;br /&gt;&lt;br /&gt;Well, not really.  My household was split along the Droid/iPhone divide for months as we used work provided smart phones of differing heritage.&lt;br /&gt;&lt;br /&gt;I spent my work time on the Verizon Droid.&lt;br /&gt;&lt;br /&gt;While my wife happily plugged in her AT&amp;amp;T iPhone 3GS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With my new developer job came a new phone, sort of.  I get a stipend to spend on cell phone service, so I get to pick and own the phone.  Our personal cell phones, home phone, and internet service is already through AT&amp;amp;T.  Since I don't expect to be accepting nearly as many work related calls, I'm thinking about doing both personal and business calls off one device.  Hence my provider is preselected.&lt;br /&gt;&lt;br /&gt;AT&amp;amp;T gives me the option to go iPhone or Android and each have recent additions to their line ups in the iPhone 4G and Samsung Captivate.  I have a dilemma.&lt;br /&gt;&lt;br /&gt;I appreciate Apple's choice to provide an end to end solution and apparently developers at large do to.  This is pointedly obvious with the iPhone exclusive app "Words with Friends", a Scrabble(tm) clone that would probably be only game on either device I'd purchase if it didn't already come with an Ad driven free version.  A larger user base could also help sell any apps I may one day develop.  The forward facing camera has potential as well.&lt;br /&gt;&lt;br /&gt;However, I appreciate Google's relaxed market rules.  The horror stories of iPhone app applications gone awry make me concerned about what might become of my first attempt to do cell phone development.  Also I make frequent and extensive use of Google's services, such as Google Voice, which are tightly integrated with Android and sometimes completely unavailable on the iPhone.  Unfortunately the Captivate does not include an LED flash, a travesty with a 5 mega-pixel camera.&lt;br /&gt;&lt;br /&gt;I was thinking the integration with Google services is going to end up being the killer app for me.  The features of the iPhone are enticing, but I don't see myself doing any video conferencing.  What I do see myself doing is taking pictures. A missing $10 LED flash is going to drive my purchase of a $200 phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-565190291843480871?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/565190291843480871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/iphone-vs-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/565190291843480871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/565190291843480871'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/iphone-vs-android.html' title='iPhone vs. Android'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-8012681577998384494</id><published>2010-07-22T17:28:00.000-05:00</published><updated>2010-07-22T17:07:06.425-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference materials'/><title type='text'>w3schools</title><content type='html'>One of the reference websites I got a lot of use out of even before I started my current position was &lt;a href="http://w3schools.com/"&gt;W3Schools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;W3Schools is a free site, low noise and high signal.  It covers a large swath of technologies, but they are all applicable to someone creating web applications.  I had learned HTML from a great reference book from HeadFirst labs, but the tutorials on W3Schools were essential.  They are easily referenced from anywhere and help easily demonstrate principles.  Most tutorials give you a chance to try code out yourself, without leaving you with a bunch of text files to clean up or installing any tools, perfect for learning on shared machines.  I picked up PHP almost exclusively with W3Schools. Even my work with PostGreSQL was greatly simplified by comparing it with the MySQL examples within the PHP examples.&lt;br /&gt;&lt;br /&gt;Check out &lt;a href="http://w3schools.com/"&gt;W3Schools&lt;/a&gt; if you have to do any web development.  It is a great way to get started for a budding web developer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-8012681577998384494?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/8012681577998384494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/w3schools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8012681577998384494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8012681577998384494'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/w3schools.html' title='w3schools'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-5905316635594266546</id><published>2010-07-21T09:00:00.003-05:00</published><updated>2011-04-28T15:35:36.181-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>Upcoming Travels: devLink</title><content type='html'>I'll be attending &lt;a href="http://www.devlink.net/"&gt;devLink&lt;/a&gt; in Nashville, TN on August 5th-7th.&lt;br /&gt;&lt;br /&gt;I'm really looking forward to what will be my first developer's conference.  In particular the sessions on how Windows 7 was so dramatically faster than Vista and building a Google Contacts app in Silverlight both are peaking my interest.&lt;br /&gt;&lt;br /&gt;If you're doing any development with Microsoft tools and technology, you should take a look at this conference.  For those already planning to attend I look forward to seeing you there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-5905316635594266546?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/5905316635594266546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/upcoming-travels-devlink.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5905316635594266546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/5905316635594266546'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/upcoming-travels-devlink.html' title='Upcoming Travels: devLink'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-8529356080110734213</id><published>2010-07-19T09:00:00.004-05:00</published><updated>2010-07-19T13:11:44.947-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beginning'/><title type='text'>Why I'm Here: Part 1</title><content type='html'>I mentioned in a previous post that I've started my first development job.  Let me tell you why this is a big deal for me.&lt;br /&gt;&lt;br /&gt;I've been into computers for a long time.  My father installed my first computer game before I was eight.  He didn't install the second, I did.  Any games, drivers, patches were all my responsibility to figure out if I wanted to play.  Eventually hardware became my concern as I was the expert on it as well in the family.  While I've always been decent at what I'd collectively call support services, they were never the payoff.  They were just work to get to the functional software experience on the disk (and later on the network).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_N-UjFPLJlkc/TESU4Nej3JI/AAAAAAAAAFA/MQXuo0u-I9Y/s1600/doom.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 142px;" src="http://2.bp.blogspot.com/_N-UjFPLJlkc/TESU4Nej3JI/AAAAAAAAAFA/MQXuo0u-I9Y/s200/doom.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5495681138710273170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For some reason, my first high school didn't put college bound students into programming classes.  That seemed to be cordoned off for tech school kids.  I knew I was interested in programming, but I didn't think I had access.  Luckily, I applied to an academic magnet that did give everyone the ability to get into programming.  Two years of high school C++ were followed up with four years of bachelor's degree in Computer Science, mostly taught in Java.&lt;br /&gt;&lt;br /&gt;Throughout high school and college I continued to provide support services to employers, friends, and family.  When I graduated college I had a split personality resume, education in programming and experience in support.  And I couldn't find a job in either.  Instead I found jobs making sandwiches, selling jewelry, and packing boxes.  Eventually I found a decent wage providing support services for a library system.  I had just gotten married and was eager to provide a reasonable income to my new household.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_N-UjFPLJlkc/TESVTUybMnI/AAAAAAAAAFI/stZX-Y_skUI/s1600/pay-bills.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 172px;" src="http://3.bp.blogspot.com/_N-UjFPLJlkc/TESVTUybMnI/AAAAAAAAAFI/stZX-Y_skUI/s200/pay-bills.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5495681604529107570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Little did I know, one of the worst recessions was about to land on the US economy and lock me into that position for three years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-8529356080110734213?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/8529356080110734213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/why-im-here-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8529356080110734213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/8529356080110734213'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/why-im-here-part-1.html' title='Why I&apos;m Here: Part 1'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_N-UjFPLJlkc/TESU4Nej3JI/AAAAAAAAAFA/MQXuo0u-I9Y/s72-c/doom.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-778898030197097566</id><published>2010-07-16T09:00:00.004-05:00</published><updated>2010-07-16T10:48:51.842-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Code Puzzler: jQuerry</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Problem:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Earlier this week I came across some quirky behavior in &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;.  Pseudo code is provided below:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;input type="text" class="inputClass"&amp;gt;An input&amp;lt;/input&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;tr class="trClass"&amp;gt;Row containing option dependent on input&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;$('.inputClass').change(function(){&lt;br /&gt;  if($('.inputClass').val() &amp;gt; 0){&lt;br /&gt;    $('.trClass').show();&lt;br /&gt;  }&lt;br /&gt;  else{&lt;br /&gt;    $('.trClass').hide();&lt;br /&gt;  }&lt;br /&gt;}).change()&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Seems simple enough.  jQuery binds a function to the changed event and fires it off once on load to set the default behavior.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Puzzle:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It works on page load.  It works the second and following times the input is updated.&lt;br /&gt;&lt;br /&gt;It does nothing the first time the input in changed and loses focus.  As far as we can tell change doesn't fire at all.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After puzzling after this behavior for more than should have been required, chasing down the event with alert statements,  .ready(), and .blur() events on load to try to initialize or eat the first user initiated .change() we call in the senior programmer.  Five minutes later he's done.&lt;br /&gt;&lt;br /&gt;He changed all the .change() events to .blur().  The missing update fires .blur() normally.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ongoing Mystery:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We still don't know if .change() was being eaten by something else of if .change() just doesn't work correctly with text input.  More importantly, we don't have a good way to tell.&lt;br /&gt;&lt;br /&gt;If you do have a good way to tell, include it in the comments below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-778898030197097566?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/778898030197097566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/code-puzzler-jquerry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/778898030197097566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/778898030197097566'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/code-puzzler-jquerry.html' title='Code Puzzler: jQuerry'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3144008113539994012.post-6149424711655605683</id><published>2010-07-14T23:44:00.003-05:00</published><updated>2010-07-15T13:15:32.921-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beginning'/><title type='text'>Why We're Here</title><content type='html'>Two weeks ago I started my first software development job.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_N-UjFPLJlkc/TD6SQ2TP8UI/AAAAAAAAAEQ/M8EeIeSnDHA/s1600/phoenixwright.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 128px;" src="http://3.bp.blogspot.com/_N-UjFPLJlkc/TD6SQ2TP8UI/AAAAAAAAAEQ/M8EeIeSnDHA/s200/phoenixwright.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5493989413590397250" /&gt;&lt;div style="text-align:center"&gt;You're Hired!&lt;/div&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It had always been my intention to start a blog immediately after starting so I could document all the things I was learning. It would serve as a pick me up if I ever felt like I wasn't making progress. I could always look back at my blog and say "Look, an artifact of progress!"&lt;br /&gt;&lt;br /&gt;Slow progress has not been the problem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_N-UjFPLJlkc/TD6SXpQiifI/AAAAAAAAAEY/MgaZUMny8ws/s1600/lightspeed.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_N-UjFPLJlkc/TD6SXpQiifI/AAAAAAAAAEY/MgaZUMny8ws/s200/lightspeed.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5493989530348456434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;During my first two weeks new technologies I have learned what currently feels like an absurd number of new things. Aspects of a new language, a source control program, a diff tool, a SQL implementation, a wiki editor, a jQuery plugin, and bug reporting software were comparatively easy additions. Over half a dozen new passwords threaten to overtake my memorization abilities. I can remember the passwords themselves, but matching the service to the password is sometimes tedious. Server (and employee) names also escape me frequently.&lt;br /&gt;&lt;br /&gt;What takes up the most time is sifting through tens (maybe hundreds?) of thousands of lines of (new to me) code. Figuring out how it all interconnects, in software dialects I haven't read before, is the true challenge. Like filling out a crossword puzzle in Sanskrit, making sense of all these pieces is a puzzle only for the most determined or foolhardy. Luckily I've been guided by the existing development staff, but even among them some of the code is a mystery. Signposts have been worn away by the passage of time and additional development, deprecated code lays in the repository like snow drifts filling a mountain pass.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_N-UjFPLJlkc/TD6Sdod1XPI/AAAAAAAAAEg/Wunyf5DZFWM/s1600/snowymountain.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 133px;" src="http://4.bp.blogspot.com/_N-UjFPLJlkc/TD6Sdod1XPI/AAAAAAAAAEg/Wunyf5DZFWM/s200/snowymountain.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5493989633214995698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That said I still think I can get some use out of this blog and I hope you can too. In my future posts I might explain how.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3144008113539994012-6149424711655605683?l=postrequest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postrequest.blogspot.com/feeds/6149424711655605683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://postrequest.blogspot.com/2010/07/why-were-here.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6149424711655605683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3144008113539994012/posts/default/6149424711655605683'/><link rel='alternate' type='text/html' href='http://postrequest.blogspot.com/2010/07/why-were-here.html' title='Why We&apos;re Here'/><author><name>Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_N-UjFPLJlkc/TD6SQ2TP8UI/AAAAAAAAAEQ/M8EeIeSnDHA/s72-c/phoenixwright.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
