tag:blogger.com,1999:blog-54270690945803125502024-03-13T04:50:04.800-07:00Code To Joy<i>Code To Joy</i>: putting the thrill back in blog.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.comBlogger285125tag:blogger.com,1999:blog-5427069094580312550.post-74102745262950685812013-12-31T11:02:00.001-08:002013-12-31T11:07:12.910-08:00Jewel's Audio Memory Game<br />
An old friend of mine, Vic Douse, has a daughter, Jewel. She loves Disney, balloons, and some video games/apps. She has autism.<br />
<br />
Vic is an Oracle DBA during the day, but at night, he has been very active in the autism community on PEI, serving as president of the <a href="http://autismsociety.pe.ca/">Autism Society</a> for years. (He won a <a href="https://twitter.com/codetojoy/status/306226869861224448">Queen's Diamond Jubilee medal</a> for his contributions).<br />
<br />
Last winter, he started tinkering around with an Android app, despite not coding for years. The result is a simple memory/match game. The UX is... basic. But that's not the point: the point is that Jewel likes to play it. It helps her with her vocabulary.<br />
<br />
So, check out <a href="http://bit.ly/1eTsnu3">Jewel's Audio Memory Game</a> on the Play Store. It's free with no ads. Vic is delighted with each download, so give it a go. It's actually fun in a nostalgic way. My personal best for the 4x4 grid is 36 seconds, no doubt based on lucky strikes.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com1tag:blogger.com,1999:blog-5427069094580312550.post-91068131630423042182013-12-18T09:45:00.001-08:002013-12-18T09:45:59.421-08:00I Just Want A Foothold Example In.... Ruby<br />
I've participated in a few paired coding sessions this year (such as <a href="http://codetojoy.blogspot.ca/2013/10/legacy-code-retreat.html">Legacy Code Retreat</a> and <a href="http://coderetreat.org/events/global-day-of-coderetreat-2013-summerside-pei-canada">Global Day of Coderetreat</a>), and I've experienced the pain of setting up an environment for a new language. It's not necessarily <a href="http://www.thinkgeek.com/product/ea8c/">rocket surgery</a>, but for a newbie, it's <i>brutal</i>.<br />
<br />
Recently, I've been interested in trying out Ruby (I've always reached for either Groovy or Python first, but after meeting many, many sharp peeps who use it, it's time). To get started, I looked around on the web, but examples seem to jump from code snippets to full frameworks with little in between.<br />
<br />
What I really want (for all languages) is a <a href="http://codetojoy.blogspot.ca/2008/01/im-isolationist.html">foothold</a>: a simple project that has the usual aspects (code organization, unit-tests, automated build) laid out in an idiomatic way. <br />
<br />
In case it helps anyone, I've posted my attempt at a foothold: <a href="https://github.com/peidevs/WarO_Ruby">War-O in Ruby</a>, as a contribution to <a href="http://www.meetup.com/PEI-Developers/">PEI Devs</a>. It's a work-in-progress, and I'm still a newbie, so feedback is welcome.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com2tag:blogger.com,1999:blog-5427069094580312550.post-46393512626961896272013-10-05T11:55:00.001-07:002013-10-08T17:38:04.496-07:00Legacy Code Retreat<br />
Having been home now for 3+ years, away from an urban center, I've been considering a post on what I've learned (good and bad) over that time, as it pertains to crafting software.<br />
<br />
This is <b>not</b> that post. However, the following event certainly falls in the <i>good</i> column.<br />
<br />
<a href="http://en.wikipedia.org/wiki/Summerside,_Prince_Edward_Island">Summerside, Prince Edward Island</a>, punches well above its weight-class when it comes to software. Both <a href="https://twitter.com/srbaker">Steven R. Baker</a> and <a href="http://www.jbrains.ca/">J.B. (Joe) Rainsberger</a> hang their hats there, and along with the <a href="http://www.meetup.com/PEI-Developers/">PEI Developers group</a>, are transforming the tech vibe here on the Island.<br />
<br />
As one example, Joe recently facilitated a <a href="http://legacycoderetreat.typepad.com/">Legacy Code Retreat</a> (LCR) at the spiffy Holman Centre (no doubt arranged via srbaker). Opportunities like this don't happen often on PEI (though, actually, they are becoming more frequent).<br />
<br />
In brief, we paired in five 45-minute sessions with a <a href="https://github.com/jbrains/trivia">code base</a> that is brilliantly, wonderfully awful. We practiced specific "rescue and improvement" techniques in a variety of languages.<br />
<br />
Here are some quick thoughts on my experience.<br />
<br />
<b>What is Legacy Code?</b><br />
<br />
We didn't spend a lot of time on this, but my favourite definition is attributed to <a href="http://en.wikipedia.org/wiki/Legacy_code">Michael Feathers</a>: <i>legacy code is code without tests</i>. I love it.<br />
<br />
If you're in a gig that doesn't embrace testing (and with slack-jawed amazement, I've discovered how prevalent that is), adopt this definition. If it doesn't have tests, start referring to the code <i>you wrote yesterday</i> as legacy. It will get attention.<br />
<br />
<b>Art imitates Production</b><br />
<br />
The LCR code base appears to be a turn-based trivia game. However, it is replete with dice-rolls, a penalty box, and a board that may or may not be in a Euclidean geometry.<br />
<br />
It's a parody, and it's both funny and horrifying. Scary, because it feels so familiar to ghastly production code. That is, code maintained over time by many people, each of them <a href="http://en.wikipedia.org/wiki/Blind_men_and_an_elephant">blind and touching an elephant</a>.<br />
<br />
Even better, <i>there are bugs</i>! Just when you think you understand the rules of the game, you realize that it is impossible to distinguish between a quirky rule and an outright bug. The code really is magnificently bad, as though crafted by <a href="http://en.wikipedia.org/wiki/The_Trial">Kafka</a>. (<i>Ed's note</i>: <i>in fact, it was written by</i> <a href="http://twitter.com/chethendrickson">Chet Hendrickson</a>).<br />
<br />
<b>Pairing</b><br />
<br />
I paired with several people and learned from them all. We might pair at our day gigs, but the variety is fixed in that setting, and ultimately predictable; at an event like this, the environments are truly diverse and fresh.<br />
<br />
For junior and intermediate developers, I can't stress this enough. At a retreat, you'll see new languages, editors, virtual machines, techniques, but most importantly, <i>workflow</i>. I paired with <a href="http://twitter.com/jbrains">jbrains</a> for a session. It was rewarding... and humbling. I thought I was fast but I've rarely seen such speed: mouseless navigation through several tools, all at the speed of thought.<br />
<br />
Pairing can be intimidating. That's normal. We often hear empty phrases such as "get out of your comfort zone", but this is <i>precisely</i> that case. It's a fabulous way to learn and grow as a developer.<br />
<br />
<b>Tests </b><br />
<br />
A predominant theme for each session was the importance of setting up some kind of test harness before making changes to the code. The harness is almost like a critical utility, such as getting electricity to a disaster site.<br />
<br />
No surprise, but this transcended all language implementations, and manifested itself in many ways. For example, one C++ team simply set a fixed seed on a random-number generator and used the <a href="http://chrismelinn.wordpress.com/2013/04/12/using-the-golden-master-technique-to-test-legacy-code/">Golden Master technique</a> on an output log.<br />
<br />
<b>Upshot</b><br />
<br />
True, I haven't written much about specific techniques here. (To find out more, attend a Legacy Code Retreat! Or start with <a href="http://legacycoderetreat.typepad.com/">this site</a> or the <a href="http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052">Feathers book</a>.) But they are useful and interesting, along the themes above. The upshot is: this stuff is important, and <i>fun</i>. It's practice with others who care about the craft. It's hard to imagine a better bang-for-buck for your development as a software practitioner.<br />
<br />
<br />Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-72385679366265321262013-07-21T19:21:00.001-07:002013-07-21T19:29:28.058-07:00PEI Hacks<br />
This post is intended for keen, junior developers who reside in a community that does not afford many opportunities such as user-groups, conferences, etc. (I'm thinking of small towns in <span style="color: black;"><a href="http://en.wikipedia.org/wiki/Atlantic_Canada">Atlantic Canada,</a> but the main theme applies elsewhere.)</span><br />
<br />
Hey nerds: discover <a href="http://www.eventbrite.ca/event/7510613447">PEI Hacks</a>, and sign up for the day-long hackathon on August 24.<br />
<br />
No, really: <b>sign up</b>. It's <i>free</i>.<br />
<br />
<i>"Why?". </i>I'm glad you inquired (see intro)... <br />
<br />
<b><b>TL;DR </b>:</b><br />
<br />
It'll be fun and rewarding. You'll meet neat people. <br />
<br />
<b>^(TL;DR) :</b><br />
<br />
It will help shape your professional world-view, your sense of reality. <br />
<br />
Since I've returned to the Maritimes, I've discovered a small segment of developers who are bright and ambitious, but don't have a lot of experience. Despite all the online resources, books, etc, at their disposal, their world-view ends at the boundaries of the current daytime, 40-hour gig.<br />
<br />
That's professional suffocation. A word to the wise: break out of that rut. Never bound yourself as being an employee for <a href="http://en.wikipedia.org/wiki/Acme_Corporation"><i>Acme Corporation</i></a>. Work for <i>You Inc.</i> (in spirit, not legally), and honour <i>an agreement</i> with Acme: 40+ hours work for salary, benefits, whatever.<br />
<br />
To break the rut, engage with real people, at real events: conferences, user-groups, meet-ups, hackathons - <i>anything</i>. You'll learn a ton of material outside of your daytime focus. You'll be profoundly humbled by talent, and challenged to improve. Generally, you'll be a participating in a broader community, a citizen of the tech world.<br />
<br />
Will any of this assist your daytime work? Maybe, but it doesn't matter: this is for <i>You Inc.</i><br />
<br />
<b>Upshot :</b><br />
<br />
Find a mentor and ask him/her about favourite conferences, user-groups, and real-life events. Oh, btw, you'll find some fabulous potential mentors at <a href="http://peihacks.tumblr.com/">PEI Hacks</a>. So, come on out and play!<br />
<br />Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com1tag:blogger.com,1999:blog-5427069094580312550.post-12435494183448482902013-02-11T03:17:00.001-08:002013-02-11T03:17:27.420-08:00A Simple Code KataHello CtJ nation!<br />
<br />
Yes, it's been a long time, but we're still here at CtJ HQ, reading, if not exactly writing. Hopefully, more to come on that front in the coming weeks.<br />
<br />
For now, this post is in support of an upcoming session at the <a href="http://www.meetup.com/PEI-Developers/">PEI Developers Meetup</a>. We'll be implementing a simple <a href="http://en.wikipedia.org/wiki/Kata_%28programming%29">Code Kata</a> and possibly extending it in interesting ways.<br />
<br />
<b>The Kata</b><br />
<br />
The idea is a simple card game. Ignoring the rules of <a href="http://en.wikipedia.org/wiki/Rack-O">Rack-O</a>, check out its <a href="http://en.wikipedia.org/wiki/File:Racko-game.jpg">deck of cards</a>: numbers, but no <a href="http://en.wikipedia.org/wiki/Suit_%28cards%29">suits</a>.<br />
<br />
The game is described as follows:<br />
<br />
Begin with the deck of cards numbered 1 to N. <br />
<br />
Shuffle and deal cards evenly to P players and a "kitty". That is: partition N cards (face-down) into (P + 1) sets. <br />
<br />
Gameplay for a round:<br />
<ul>
<li>Show a card, face-up, from the kitty.</li>
<li>Players all submit a hidden card as a bid.</li>
<li>Once all bids are
made, the cards are revealed.</li>
<li>Highest bid wins the card from the kitty, and its value is awarded as points to the player. </li>
</ul>
The winner is decided by most points at the end of the game.
<b> </b><br />
<br />
<b>Notes</b><br />
<br />
I like this kata for many reasons. First, it scales nicely: we could write code for a single round, and eventually ramp up to a game server with concurrent players.<br />
<br />
Also, it combines simplicity and variation: it is easy to write an algorithm that satisfies the rules; yet a winning strategy can be dynamic and surprisingly complex. (Thanks to <a href="http://www.linkedin.com/in/alexstangl">Alex Stangl</a> for an email conversation on this, some years back.)<br />
<br />
Finally, we can imagine a "robot wars" scenario where solutions <i>compete</i> against one another. Neat-o.<br />
<br />
<b>Upshot</b><br />
<br />
For PEI Devs, think about this problem for the upcoming meeting.<br />
<br />
For all, I'm looking for name suggestions (since it is not the game Rack-O). The best I have is <i>Frak-O</i>...<br />
<br />
Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com2tag:blogger.com,1999:blog-5427069094580312550.post-44648311095524703042012-02-26T13:35:00.011-08:002012-02-26T14:28:24.761-08:00Funcito: wrap Java methods for FP librariesOn and off, I've been collaborating with my friend, Kevin Welker, on an open-source project: <a href="http://code.google.com/p/funcito">Funcito</a>. This is really his baby, but it has been great fun to be involved (more to come in another post).<br /><br /><span style="font-weight: bold;">Executive Summary</span><br /><br />From <a href="http://code.google.com/p/funcito/wiki/FAQ">the FAQ</a>, Funcito is a Java library that simplifies access to functional programming APIs by wrapping Java methods as the function-type objects defined in those libraries. It reduces boilerplate now, without waiting for changes in Java 8.<br /><br />The syntax (and internals) is influenced by <a href="http://code.google.com/p/mockito/">Mockito</a>, the popular mocking framework. However, Funcito is <span style="font-weight: bold; font-style: italic;">not aimed </span>at testing.<br /><br />It supports specific interfaces in <a href="http://code.google.com/p/guava-libraries/">Google Guava</a>, <a href="http://functionaljava.org/">Functional Java</a>, and <a href="http://jedi.codehaus.org/">Jedi-core</a>. See the <a href="http://code.google.com/p/funcito">project page</a> for details.<br /><br /><span style="font-weight: bold;">Example in straight Google Guava</span><br style="font-weight: bold;"><br />Here is example code for using Google Guava, using a <code>List</code> of <code>Song</code> objects.<br /><br />The setup is simply populating the list:<br /><pre class="brush: java"><br />public void init() {<br /> // List<Song> songs is a member<br /> songs.add( new Song("Help!", "The Beatles", new BigDecimal(1.29) ) );<br /> songs.add( new Song("You Had Time", "Ani DiFranco", new BigDecimal(0.99) ) );<br /> songs.add( new Song("Shoot to Thrill", "AC/DC", new BigDecimal(0.89) ) );<br /> songs.add( new Song("Back in Black", "AC/DC", new BigDecimal(0.89) ) );<br /> songs.add( new Song("Indie Song", "Obscure Band", BigDecimal.ZERO ) );<br /> songs.add( new Song("Demo Track", "College Jam", BigDecimal.ZERO ) );<br />}<br /></pre><br />Here is an example test, using a predicate method on <code>Song</code>, <code>isFree()</code>, to filter for free songs:<br /><pre class="brush: java"><br />public Collection<Song> filterFreeSongs() {<br /> // boilerplate alert! <br /> Predicate<Song> isFreePredicate = new Predicate<Song>() {<br /> public boolean apply(Song s) { return s.isFree(); }<br /> };<br /><br /> Collection<Song> freeSongs = Collections2.filter(songs, isFreePredicate);<br /><br /> // size == 2 in example<br /> return freeSongs;<br />}<br /></pre><br /><br />Note the typical pattern to build a <code>Predicate</code>, even though the object is simply calling a boolean method. Funcito addresses precisely this issue.<br /><br /><span style="font-weight: bold;">Example with Funcito</span><br /><br />Using the same setup, here is the same test using Funcito. Note the proxy object, <code>CALLS_TO_SONG</code>:<br /><pre class="brush: java"><br />// member of class<br />// using static import of Funcito's callsTo <br />private Song CALLS_TO_SONG = callsTo(Song.class);<br /><br />public Collection<Song> filterFreeSongs() {<br /> // using static import of Funcito's predicateFor <br /> Predicate<Song> isFreePredicate = predicateFor(CALLS_TO_SONG.isFree());<br /><br /> Collection<Song> freeSongs = Collections2.filter(songs, isFreePredicate);<br /><br /> // size == 2<br /> return freeSongs;<br />}<br /></pre><br /><br />Less boilerplate, with improved readability and a fluid syntax!<br /><br /><span style="font-weight: bold;">The Upshot</span><br /><br />If you are using straight-up FP libraries in Java, and want to reduce some of the boilerplate, check out Funcito. It's lightweight with minimal dependencies (either CGLib or Javassist), and can help you wrap up simple Java methods.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com2tag:blogger.com,1999:blog-5427069094580312550.post-25535100717610166702011-11-14T16:30:00.000-08:002011-11-14T16:36:58.492-08:00Groovy TalkI recently gave an "Intro to Groovy" talk for a local <a href="http://www.cips.ca/">CIPS</a> chapter.<br /><br />It was a special evening: I returned to my<a href="http://home.upei.ca/"> alma mater</a>, re-united with old friends, and met enthusiastic students.<br /><br />I assumed the audience wasn't familiar with Java, and so the narrative was a high-level report of the blossoming ecosystem on the JVM over the past few years, with examples in Groovy. The material is <a href="https://github.com/codetojoy/presentations/tree/master/CIPS_UPEI_Intro_To_Groovy">available here</a>.<br /><br />My thanks to those who attended!Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-61247482216987404082011-11-12T13:23:00.001-08:002011-11-12T13:29:57.756-08:00Strange Loop VideosThis won't be news to most readers, but if, like me, you were not able to attend <a href="https://thestrangeloop.com/">Strange Loop 2011</a>: take heart. The videos are being released online at InfoQ. <a href="https://thestrangeloop.com/news/strange-loop-2011-video-schedule">Here is the schedule</a>.<br /><br />The lineup is truly outstanding. For more about the conference, check out <a href="http://www.weiqigao.com/blog/2011/09/21/strange_loop_2011_we_really_dont_know_how_to_compute_and_other_insights.html">Weiqi Gao's review</a>.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-33264073689671791482011-09-20T16:31:00.000-07:002011-09-20T16:55:33.338-07:00Blogger, OpenID, and Stack ExchangeI'm a big fan of <a href="http://stackexchange.com/">Stack Exchange</a> and have invested a fair amount of time on various accounts on there (mostly <a href="http://stackoverflow.com/">Stack Overflow</a>, less on <a href="http://english.stackexchange.com/">English</a> and <a href="http://music.stackexchange.com/">Music</a>).<br /><br />However, I have to admit that I do not keep up with their various escapades with <a href="http://en.wikipedia.org/wiki/OpenID">OpenID</a>. I hear about it on the podcast/<a href="http://blog.stackoverflow.com/2011/05/stack-exchange-is-an-openid-provider/">blog</a>, but I haven't paid much attention.<br /><br />However, every now and then, it seems as though I can't get into my accounts via my Blogger URL. Not good.<br /><br />Strictly speaking, I should research OpenID, Blogger's implementation thereof, and then study the trials and tribulations of Stack Exchange. Then, I could summarize it for you, dear reader, and we could reflect, philosophically, on the sharp corner-cases of the web while enjoying a beverage in a local pub.<br /><br />This isn't one of those posts. This one is simply intended as a modest link-post of gratitude (aka "this worked for me!").<br /><br /><span style="font-weight: bold;">The Problem</span><br /><br />When I visited a Stack Exchange site recently, I couldn't login via my Blogger URL, and may not have even been presented with the familiar login icon that I had been using.<br /><br /><span style="font-weight: bold;">One Solution</span><br /><br />Follow the steps <a href="http://blog.nerdbank.net/2010/03/how-to-upgrade-your-blogger-openid-to.html">in this post</a> on <a href="http://blog.nerdbank.net/">JMPinline</a>, including creating a Google Profile and updating with the new links.<br /><br />Presumably, Stack Exchange uses OpenID 2.0 now and this will upgrade your Blogger OpenID to that version.<br /><br />Either way, I was immediately able to login to Stack Exchange. My sincere thanks to the original author!<br /><br />HTHMichael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-35479446187813655272011-09-05T08:04:00.000-07:002011-09-05T08:31:41.109-07:00Your Blog... SucksHello CodeToJoy Nation!<br /><br />Yes, yes, it has been too long since the last post. The internet has weighed in, and we have noticed.<br /><br />Your friend and mine, Weiqi Gao, notes that <a href="http://www.weiqigao.com/blog/2011/05/20/friday_java_quiz_know_your_class_loading_moments.html">"Nobody I know posts much any more"</a>.<br /><br />The inimitable <a href="http://nateneff.com/">Nate Neff</a> wrote to me with a succinct critique of my writings in the last year:<br /><br /><div style="text-align: center; font-style: italic;">Your blog... sucks.<br /><div style="text-align: left;"><br /></div></div>Well. On the evidence, assuming small, frequent updates are important (which is fair): guilty as charged.<br /><br />However, I don't consider this blog defunct at all; in fact, I often talk about "the glory days" from a few years back.<br /><br />I've been grappling with writing an annual retrospective, now that I have been pursuing <a href="http://codetojoy.blogspot.com/2010/05/new-chapter.html">a new chapter</a> for over a year. The trick here is that challenges and triumphs have been much more on the soft side of software: team dynamics instead of technical innovation. I wrote an article along these lines for the <a href="http://www.nofluffjuststuff.com/home/magazine_subscribe?id=22">NFJS magazine</a> back in April. The article drew on years of experience, but the inspiration originated in my new world.<br /><br />As I write this, I realize that I'll have to shelve that post and simply post smaller chunks. Stay tuned! I'm still here.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-52221013523436114492011-06-19T05:06:00.001-07:002011-06-20T04:06:13.937-07:00Maritime DevCon 2011I'm back from a jaunt to Fredericton, New Brunswick, for Maritime DevCon. Here's a post that lies between a 'random walk' and a review.<br /><br /><span style="font-weight: bold;">Background</span><br /><br />From PEI originally, I've spent most of my career in St Louis/USA. I've been an active member of the user group/conference scene there. When I moved to the Maritimes in 2010, I wondered if I could find 'my people' who can/read write in the <span style="font-style: italic;">original Geek</span>.<br /><br />The upshot is: these are my people. This one-day event was a gem. The organization was first-class (good food, killer door-prizes). The topics were interesting and straddled the fence between pragmatic and esoteric-but-neat (reminiscent of <a href="https://thestrangeloop.com/">Strange Loop</a>). Most importantly: the 'spark' was there; that palpable energy that naturally spins out of conversation between interesting techies.<br /><br /><span style="font-weight: bold;">Venue</span><br /><br />Maritime DevCon was held at the <a href="http://wucentre.unb.ca/">Wu Centre</a> at the University of New Brunswick. About 70 people attended, notably giving up a Saturday to spend time talking tech.<br /><br /><span style="font-weight: bold;">Talks</span><br /><br /><a href="http://devcon.careertown.ca/schedule/">Here is the schedule</a>. I attended these talks:<br /><br /><a href="http://www.openstack.org/">OpenStack</a> 101 (by <a href="http://www.sandywalsh.com/">Sandy Walsh</a>)<br /><br />I'm not especially familiar with cloud computing, or virtualization, so I was surprised to learn that <a href="http://en.wikipedia.org/wiki/OpenStack">Open Stack</a> is a <span style="font-weight: bold;">huge</span> initiative among big players (e.g. Intel, Cisco, and... NASA!?). The architecture involved here is mind-blowing: will the real platform please stand-up?<br /><br />Random thoughts:<br /><ul><li>I often wonder if programming language X will be the <span style="font-style: italic;">Next</span> Big Thing. Though it is in a different scope, virtualization is <span style="font-style: italic;">Right Now</span>. Every time I think I have an appreciation for its influence, I see another talk where the landscape has changed ever further.</li><li>Pythonistas unite! Though thinking at this level often reduces the programming language to an implementation detail, I was delighted to hear that the underlying system is written in Python.<br /></li></ul><a href="http://redis.io/">Redis</a> (by <a href="http://devcon.careertown.ca/participant/peter-doan/">Peter Doan</a>)<br /><br />At other conferences, I've missed talks on Redis, the key-value store. On the way to NB, I listened to a <a href="http://thechangelog.com/post/2801342864/episode-0-4-5-redis-with-salvatore-sanfilippo">changelog interview</a> with the author, Salvatore Sanfilippo. Consequently, I expected a simple, near-minimalist API, and Peter confirmed that with his code examples. Works for me.<br /><br />Natural Language Processing with Java (by <a href="http://twitter.com/#%21/chris_nicholls">Chris Nicholls</a>)<br /><br />Interesting piece on the state-of-the-art in NLP, especially <a href="http://en.wikipedia.org/wiki/Sentiment_analysis">sentiment analysis</a>. The two main libraries are <a href="http://alias-i.com/lingpipe/">LingPipe</a> (not free) and Apache's <a href="http://incubator.apache.org/opennlp/">OpenNLP</a>. I hadn't thought about NLP in a long time, and certainly not with respect to Twitter: (a) Twitter could be a gold-mine (b) '#' is a legit, vital punctuation mark.<br /><br /><a href="http://git-scm.com/">Git</a> (by <a href="http://chrisdail.com/">Chris Dail</a>)<br /><br />This was a thoughtful, solid intro to Git. I've been away from Git for awhile, so this was useful refresher, and pulled together a couple of tectonic plates floating in my consciousness.<br /><br />I especially enjoyed a section described branching in terms of highway lanes rather than trees. I appreciated anecdotes about using the Git client for Subversion as a rebel effort to 'subvert Subversion'. Note that Chris has a <a href="http://chrisdail.com/2011/05/24/migrating-to-git-from-subversion/">detailed blog post</a> about migrating from Subversion to Git.<br /><br /><a href="http://nodejs.org/">Node.js</a> (by <a href="http://jvaill.com/">Justin Vaillcourt</a>)<br /><br />Node is another topic that I haven't seen yet. For this talk, as my friend <a href="http://www.weiqigao.com/blog/">Weiqi Gao</a> would say: you had to be there. This was pure, unadulterated hackage, executed by a pack of young, feral dogs with unbridled enthusiasm for technology.<br /><br />Justin grinned though an abbreviated talk that ranged wildly. Just when frat-house interactions with his posse threatened to steal the show, out came jaw-dropping illustrations of Node.js.<br /><br />A key example used the socket.io package:<br /><ul><li>a visitor hits a website and scrolls around</li><li>an admin console shows a thumbnail of page the visitor is viewing</li><li>as the visitor scrolls, navigates in his/her browser, the thumbnail scrolls in the admin console</li></ul>This was done about 150-200 lines of Javascript. I don't know if this is a strong Node example. I'm still trying to wrap my mind around it.<br /><br /><a href="http://www.mongodb.org/">MongoDB</a> (by <a href="http://derekhat.com/about/">Derek Hatchard</a>)<br /><br />As with Redis and Node, I'm familiar with the buzz of MongoDB but hadn't looked into it. From the perspective of <a href="http://codetojoy.blogspot.com/2009/04/dear-speaker-10-thoughts-beyond-make.html">presentation techniques</a>, this was a strong talk. A good arc from the motivation through to code examples, with images instead of bullet-lists.<br /><br />Like Redis, the MongoDB API is deceptively simple. It's hard to appreciate the power. I was happy to see explanation of sharding with MongoDB, and very happy for an introductory theme on "no silver bullet", applied to relational DBs <span style="font-style: italic;">and</span> NoSQL tools.<br /><br /><span style="font-weight: bold;">Suggestions<br /><br /></span>My main suggestion is that the sessions should have written evaluations. This benefits the speakers, the organizers, and ultimately the attendees. Also, there should be an overall conference evaluation.<br /><br /><span style="font-weight: bold;">Bottom-line</span><br /><br />It is non-trivial to travel from PEI to Fredericton, but DevCon was worth it. The material and the energy felt like events in larger urban centers, and that's saying something.<br /><br />A shout-out to <a href="http://twitter.com/#%21/derekhat">Derek Hatchard</a>, other organizers, and sponsors: thanks! <span style="font-weight: bold;">I'll be back</span> next year, as an attendee (or possibly as a speaker?): after all, these are my people.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-31823605537139348112011-06-12T17:29:00.000-07:002011-06-12T18:43:12.905-07:00Random Walk Down NFJS (2011)Long-time readers know that I am a big fan of No Fluff, Just Stuff. There are many posts on this blog regarding <a href="http://codetojoy.blogspot.com/2009/03/no-fluff-just-stuff-st-louis-review.html">reviews</a>, <a href="http://codetojoy.blogspot.com/2007/09/nfjs-1-boredom-0-no-fluff-just-stuff.html">keynotes</a>, pianos, and so on.<br /><br />Often, I start writing a "random walk" post, intending it to be quick and whimsical, but I end up writing a full review. This one will be quick, otherwise it won't be written, alas. Here we go...<br /><br />I returned to St. Louis (again!) in May to attend the <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/home">Gateway Software Symposium</a>. As you can imagine, it was fantastic to catch up with old friends in a familiar environment. Just like old times.<br /><br /><span style="font-weight: bold;">Code As Proof</span><br /><br />I attended <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/session?id=21006">Venkat Subramaniam's talk </a>on concurrency without pain in Java. The talk was all-code with no slides. A few small examples began with "synchronized and suffer" (his phrase) model and scaled through various techniques, including locks, STM, and actors.<br /><br />All interesting stuff, but I was especially taken with the elegance of the examples. If you've studied math, you may know the minimalist charm of a proof: there is no excess fat; everything is a direct line from A to B. As a presentation style, Venkat's talk recalled that spirit. Every example added <span style="font-style: italic;">one element</span> to get to the next point.<br /><br /><span style="font-weight: bold;">HTML5</span><br /><br />HTML5 officially has my attention. I saw a few talks, and was taken especially with <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/session?id=21286">Nathaniel Schutta's session</a> on mobile jQuery. As someone who is notoriously divided on choosing Android versus iOS as a development platform, this blew my mind. A unified UI experience for mobile! I'm still trying to get my mind around the idea (and how to monetize it in the various app stores).<br /><br /><span style="font-weight: bold;">Sonar</span><br /><br />The headline: Apache applies Sonar to its projects, as <a href="https://analysis.apache.org/">shown here</a>. <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/session?id=22424">Matthew McCullough's talk</a> convinced me that this isn't merely a collection of code metrics. With experience, I think a Sonar guru can transcend the raw data and see interesting patterns over time, such as the impact of summer weather on code quality (!). This is a Freakonomics-like enabler.<br /><br /><span style="font-weight: bold;">Crafting Software</span><br /><br />Two <span style="font-style: italic;">paraphrased</span> thoughts that really stuck (I hope I've captured the essence).<br /><br />One from <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/speakers/peter_bell">Peter Bell</a>, along the lines of: on initial estimates for a project, give enough time to do the minimum spec, and include time to polish based on feedback from the first cut.<br /><br />From your friend and mine, <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/speakers/ken_sipe">Ken Sipe</a>: two major problems with software teams are (1) poorly defined acceptance tests and (2) dysfunction in the daily stand-up. When someone with Ken's experience distills things down to two items, that's powerful stuff.<br /><br /><span style="font-weight: bold;">And The Gradle Will Rock</span><br /><br />Ken also <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/session?id=21316">spoke on Gradle</a>. I'm a fan, and gave an intro talk back at GSS May 2010. The interesting story here is the growth. There is a lot of industry momentum here, and the training/book offerings are ramping up big-time.<br /><br /><span style="font-weight: bold;">Where's The Groovy!?</span><br /><br />I caught Venkat's <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/session?id=21314">talk on Spock</a>, and liked it very much. I didn't catch any Groovy or Grails talks, only because I'm very familiar with them. It was interesting to reflect on the history of these technologies. Grails has been 1.0 since Feb 2008! They grow up so fast.... *sniff*<br /><br /><span style="font-weight: bold;">Anapestic Tetrameter!<br /><br /></span>Nothing <span style="font-style: italic;">stresses me out</span> like poetic meter (pun intended). It is one of a handful of high-school subjects that I just Could Not Understand. When I saw <a href="http://www.nofluffjuststuff.com/conference/speaker/tim_berglund">Tim Berglund's </a>tweet that he was working in <a href="http://en.wikipedia.org/wiki/Anapestic_tetrameter">anapestic tetrameter</a>, I shivered out of reflex. Gah!<br /><br /><span style="font-style: italic;">Then</span>, at NFJS, Jay Z showed the video. All is forgiven. Tim crafted an ode to Kent Beck's <a href="http://www.amazon.com/dp/0321413091">Implementation Patterns</a>. <a href="http://www.dzone.com/links/r/oh_the_methods_youll_compose.html">Vote for Tim's vid</a> on DZone. Vote it up on YouTube. It is wonderful.<br /><br /><span style="font-weight: bold;">Thanks<br /></span><br />This may sound like trite, blanket statement, but I can't mention everyone. The weekend truly was chock-full of heartfelt re-unions and conversations, on many levels. See you again soon!Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com1tag:blogger.com,1999:blog-5427069094580312550.post-61126816316268196952011-05-04T16:34:00.000-07:002011-05-04T17:09:08.707-07:00Meet Me In St. LouisHello, Code to Joy Nation (esp. those in Saint Louis)!<br /><br />Next week, I'll be returning to Saint Louis to attend the <a href="http://www.nofluffjuststuff.com/conference/st_louis/2011/05/home">NFJS Gateway Software Symposium</a>. I can't wait to be back in town and see everyone!<br /><br />Long-time readers know I'm a fan of the tour, and think the speakers are top-shelf. Many keen insights and fond memories over the years.<br /><br />A fond highlight was speaking at the Saint Louis show in 2010. This spring, I wrote <a href="http://www.nofluffjuststuff.com/home/magazine_subscribe?id=22">an article</a> for the NFJS magazine. Both were true growth experiences for me.<br /><br />Last year, knowing I would be leaving, I wrote a personal 10 year retrospective, highlighting <a href="http://codetojoy.blogspot.com/2010/05/10-thoughts-as-attendee-at-nfjs.html">a certain piano at the Marriott West</a>. Well, tune 'er up! I've missed it.<br /><br />If you're at the conference, be sure to say hello...Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-66930021415091046152011-03-29T15:14:00.000-07:002011-03-30T03:45:02.955-07:00Local Website as Tool BeltQuick, answer this: on your dev machine, how many keystrokes does it take for you to find the documentation for the String class in your current language?<br /><br />As I've paired with developers over the years, I've noticed a few patterns:<br /><br /><span style="font-weight: bold;">Just Google It</span><br /><br />Gah! Consider working on a roof-top, say, at replacing shingles. Imagine needing a tool, and having to go down the ladder to get it. <span style="font-style: italic;">Now</span>, imagine going down the same ladder every time you need the tool. For a professional, that strikes me as painful.<br /><br /><span style="font-weight: bold;">Bookmarks</span><br /><br />Much better. If organized well, bookmarks are undoubtedly terrific. A minor downside is that navigating a bookmark hierarchy still takes time. I can't criticize someone who chooses this style, but I can't do it. It's as though we have a toolbox up on the roof, but that it's 10 feet away from where I'm working.<br /><br /><span style="font-weight: bold;">Local Website</span><br /><br />I worked with a developer circa 2003 who ran a local copy of Tomcat. He curated his own web pages according to his needs. I thought it was pretty crazy at first, but I adopted the idea.<br /><br />True, this ain't "rocket surgery", but I<span style="font-style: italic;"> </span>just<span style="font-style: italic;"> love</span> it. It strikes me as a tool belt, where everything is within reach. Here's why:<br /><br /><span style="font-size:85%;"><span style="font-weight: bold;">Use the home page for your bookmarks</span><br /></span><br />Rather than organizing my bookmarks in a given browser, I simply put my favourite sites on my home page. (As you might guess, the Javadoc for Java, Groovy, etc are front and center.)<br /><br />The advantages are:<br /><ul><li>You can see a lot more information immediately, just by hitting that big, inviting Home button. I have a geek column, an intranet column, and so on. Rather than navigate a hierarchy, I let my brain pattern-match on the shapes of the categories.</li><li>You may end up collecting more links that you would normally bookmark. e.g. I would never bookmark the 2011 calendar, and yet this way, I have a link for it.<br /></li><li>You can add various text, such as the phone extensions of teammates.</li></ul><span style="font-weight: bold;"><span style="font-size:85%;">Portability</span><br /><br /></span>When pairing with someone, often you are at their workstation. How will you find your bookmarks from there? With a local website, you can point them to your page (while you're at, have them bookmark it).<br /><br /><span style="font-weight: bold;"><span style="font-size:85%;">Beyond Web Pages</span><br /><br /></span>By having Tomcat on your machine, you are opening a world far larger than mere web pages and links. You can start to share <a href="http://groovy.codehaus.org/Groovlets">Groovlets</a> with your team. This can be a big productivity boost, and a subtle way to introduce the concept to others. (I've been working on a writing assignment that explores this further. Stay tuned.)<br /><br />Another bonus: if you need to work up a sanity check with CSS or jQuery, you already have Tomcat installed and running.<br /><br /><span style="font-weight: bold;">The Point<br /></span><br />As developers, we love shortcuts in our IDE because we strive for "typing at the speed of thought". If you google something more than twice a week, consider putting it on a local web page. Over the years, I've found it to be very useful.<br /><br />As always, I'm interested in your tips for productivity gains. Share 'em!Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com7tag:blogger.com,1999:blog-5427069094580312550.post-35958639409561655602011-01-31T17:04:00.000-08:002011-01-31T17:53:57.267-08:00Software Archeology And Video Time CapsulesI was recently listening to <a href="http://javaposse.com/java-posse-338-roundup-10-alternative-views-in-software-development">Episode 338</a> of the Java Posse podcast, which is a recording of a session at the Roundup 2010. Near the 19:30 mark, a chap draws an analogy between software maintenance and archeology. Assuming the original team leads are no longer available, he asks (paraphrased):<br /><ul><li>What was the culture of the team?</li><li>What were the designs/philosophies of the original architect?</li><li>How can we make those thoughts more explicit?</li></ul><span style="font-weight: bold;">Software Archeology</span><br /><br />I found the moment to be eloquent, and reminiscent of an <a href="http://www.se-radio.net/2009/11/episode-148-software-archaeology-with-dave-thomas/">episode of SE Radio</a>, where Dave Thomas uses a similar metaphor: code maintenance ultimately requires us to understand a culture <span style="font-style: italic;">by analyzing artifacts</span>. Call it software archeology.<br /><br /><span style="font-weight: bold;">Artifacts</span><br /><br />We can all name the usual artifacts: an architecture document, UML diagrams, sequence diagrams, and so on. If we are lucky, perhaps there are tests.<br /><br />Unfortunately, all too often, documentation is formal and poorly written. Reading it for culture is like trying to understand a society by reading its laws: useful, but abstract and without soul. Worse, the documentation may be out of date and only vaguely relevant.<br /><br /><span style="font-weight: bold;">A Potential Solution?</span><br /><br />As consumers, we spend untold amounts of money on video equipment, which is both powerful and easy to use. We think nothing of uploading staggering amounts of video to the cloud, documenting our lives, and yet in the corporate environment, nothing. This strikes me as <span style="font-style: italic;">absurd</span>.<br /><br />In addition to striving for new wikis, language constructions, and formal diagrams, why don't we use video?<br /><br />Consider this: what if the team lead gave a 1-hour architecture overview, once per release, and it was recorded and checked-in to source control? What if s/he took an afternoon to make a screencast of a random walk through the IDE? That is, what if we treated video time capsules <span style="font-style: italic;">as project artifacts</span>?<br /><br />For future software archeologists, they would be worth their disk space <span style="font-style: italic;">in gold</span>. Imagine the simple nuances and gems that are so difficult to express otherwise (e.g. "yes, we are bending the usual use of aspects here, but there was a trade show deadline. We hope to address this technical debt").<br /><br />Note that in my vision, the production quality would be low: these could be one-take, banzai attempts. Naturally, no one can possibly explain all of the corners of a code-base, but this isn't about corners: this is about <span style="font-style: italic;">culture</span>.<br /><br /><span style="font-weight: bold;">Counterpoint</span><br /><br />This strikes me as so obvious, that I must be missing something. Perhaps I am simply naive. Arguing against this idea, the main deterrents that I can see:<br /><ul><li>Companies may not be prepared to buy and manage video equipment. In terms of acquisitions and stewardship, it just isn't part of their DNA.</li><li>Managers may fear that video is somehow less secure than source-code.</li><li>For highly regulated industries, what happens if a team-lead describes a design flaw or technical debt? Could this be a legal liability? (This could be a major deal-breaker, but certainly not for all companies?)</li><li>There is no incentive for a team to prepare others for future maintenance. Even if video time capsules are effective, the status quo is good enough, and between leads, developers, and managers, no one will demand better.</li></ul>What do you think? Does your team use video?Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com2tag:blogger.com,1999:blog-5427069094580312550.post-71054143431182520782011-01-03T13:14:00.000-08:002011-01-03T16:14:56.972-08:00KoansFirst, note that <a href="http://www.ociweb.com/">my former employer</a> has a new look to its monthly newsletter, <a href="http://ociweb.com/sett">Software Engineering Tech Trends</a>. I've always appreciated the articles (and wrote two), but now that I live in an area without many local user groups, I count on SETT when planning my study path.<br /><br /><a href="http://sett.ociweb.com/sett/settJan2011.html">January's article</a> is a fantastic example. Your friend and mine, <a href="http://marioaquino.blogspot.com/">Mario Aquino</a>, introduces us to koans, covering exercise packages in Ruby, Javascript, and Clojure (see comments for Groovy resources, <span style="font-style: italic;">Editor</span>).<br /><br />The Javascript example is especially easy to start and work with. A browser and a text-editor: it could scarcely be easier!<br /><br />This is <span style="font-style: italic;">neat</span> stuff. Read Mario's article for the full scoop on about martial arts training and Eastern philosophies. I'm definitely a newbie, but so far, I've noticed:<br /><br /><span style="font-weight: bold;">Testing as a contract</span><br /><br />The koan style appears to embrace the view that testing is a useful prism for viewing an object. In normal software testing, the object is software, but here the focus is <span style="font-style: italic;">understanding</span>. Despite a different focus, the tests as a concrete contract.<br /><br />Not that we needed more evidence of being in a post <span style="font-style: italic;">documentation-centric</span> era (post to follow?!), yet here it is.<br /><br /><span style="font-weight: bold;">Zork<br /><br /></span>Both the interactivity and the sense of Zen paradox reminds me of early text-based adventure games, such as<a href="http://en.wikipedia.org/wiki/Zork"> Zork</a>. It would take serious work and creativity, but I envision a learning app that combines the spirit of the koans with a sense of an adventure game. Potentially a great way to introduce kids into programming (or to their 2nd language etc).<br /><br /><span style="font-weight: bold;">Fun</span><br /><br />Most of all, this stuff is outright fun. It's a potent combination of learning along with the electrochemical reward for passing tests. That's some mojo right there. What's not to love?Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com1tag:blogger.com,1999:blog-5427069094580312550.post-26811777319825180122010-12-23T15:08:00.000-08:002010-12-23T15:26:49.405-08:00Pro Tip: Ask for a 999 CutHello CtJ Nation!<br /><br />A short post to wish readers a splendid holiday season and a happy New Year. Thanks for staying with me through 2010. It has been a hectic year, and I've been unusually quiet.<br /><br />As a light-hearted thank you, I'm sharing some links from the Strange Passions sessions at the recent <a href="http://strangeloop2010.com/">Strange Loop 2010</a> conference.<br /><br />I once thought <span style="font-style: italic;">I </span>was an interesting person, but after seeing these talks, one is humbled and entertained at the same time. Wonderful, wonderful stuff.<br /><br />My favourites are <a href="http://strangeloop.blip.tv/file/4536696/">Entering Without Breaking</a> (it inspired the title of this post) by Galen Collins and <a href="http://strangeloop.blip.tv/file/4538358/">The Science of Musical Counterpoint and Illusion</a> by Daniel Spiewak. (If it matters, GC's talk is rated-R for occasional language.)<br /><br />All of the videos are <a href="http://strangeloop.blip.tv/posts?view=archive&nsfw=dc">available here</a>.<br /><br />Be safe, and be joyous.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-74515074209759391332010-11-30T17:49:00.001-08:002010-12-06T15:41:01.896-08:00Language PanelHere is a<a href="http://www.infoq.com/presentations/Future-of-Programming-Languages"> must-see video</a> from <a href="http://strangeloop2010.com/">Strange Loop 2010</a>. It features a panel of icons and rock-stars, with another as guest host. The topic is the future of programming languages. It was a true treat to be there.<br /><br />Some quick thoughts on the video:<br /><br /><span style="font-weight: bold;">Introductions part 1</span><br /><br />Notice how the panelists didn't feel the need to list the languages they've worked with. Relative to their achievements, their intros are brief.<br /><br />There is a calm confidence in brevity. I first noticed this when Dave Thomas introduced himself on the <a href="http://www.nofluffjuststuff.com/home/main">NFJS tour</a> with: "I'm a programmer".<br /><br />This separates the amateurs from the pros. Pros don't introduce themselves with the number of languages they know (a pet peeve of mine). It is <span style="font-style: italic; font-weight: bold;">assumed</span> that everyone has worked with a dozen or more. It is true, no matter how impossible, that for every person in the room, there is someone else who has seen more languages.<br /><br /><span style="font-weight: bold;">Introductions part 2</span><br /><br />Kudos to Alex Payne for paying respect. It struck me as sincere.<br /><br /><span style="font-weight: bold;">Introductions part 3</span><br /><br />Guy Steele is one classy guy. Note his emphasis: he likes <span style="font-style: italic;">all</span> languages. Each one has value and its own charming quirks. We get the sense that Guy is more interested in <span style="font-style: italic;">solving problems</span> than the current fashion of the industry. He has an air that inspires me to take the high road, and stay above the language wars.<br /><br /><span style="font-weight: bold;">Language Wars</span><br /><br />Alas, Guy's angelic aura only lasts for so long. The unvarnished truth is that I'm weak, and I <span style="font-style: italic;">can't resist</span> language wars. Though the gang were rough on Perl, Crockford's irreverent non-comment on Parrot, near the 30:00 mark is priceless.<br /><br /><span style="font-weight: bold;">My Non Question</span><br /><br />I nearly asked a question about escaping the surly bonds of ASCII in future programming languages. Unfortunately, I became distracted by my inner voice:<br /><ul><li>Is this a dumb question?</li><li>Am I asking this to impress the panel? To impress the audience?</li><li>Didn't Guy Steele, in a keynote, have a Unicode symbol in Fortress? Why wasn't I paying closer attention?</li><li>How could I travel 1800 miles for a conference and not have prepared a few questions?<br /></li></ul>And so on. In the end, I played it safe and sat on my hands. Though I may have avoided an embarrassing moment, I also passed up a chance at potential insight.<br /><br />Lesson learned: brevity rocks; reticence sucks.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com5tag:blogger.com,1999:blog-5427069094580312550.post-75841571891765833022010-11-12T17:04:00.000-08:002010-11-12T17:14:03.965-08:00https download with Internet ExplorerI strive to link to posts that have saved my team's bacon, as a modest payback. It might help search engines, and will certainly help me remember the experience, in the event I encounter it again.<br /><br /><span style="font-weight: bold;">The problem:</span> Internet Explorer won't download a document (e.g. an Excel report) via https.<br /><br /><span style="font-weight: bold;">The cause:</span> probably cache-prevention in the headers, per <a href="http://blogs.msdn.com/b/ieinternals/archive/2009/10/02/internet-explorer-cannot-download-over-https-when-no-cache.aspx">Eric Law's post</a>.<br /><br /><span style="font-weight: bold;">The bonus:</span> Eric mentions <a href="http://www.fiddler2.com/fiddler2/">Fiddler</a>. That tool might be very useful in general, though I haven't tried it.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-63489282877234339762010-11-12T16:55:00.000-08:002010-11-12T17:03:44.592-08:00Keynote to 2-up PDFThis post is simply grateful linkage to a useful <a href="http://tech.puredanger.com/2008/03/28/keynote-2up-pdf/">post by Alex Miller</a>.<br /><br />For a conference or business presentation, you may be asked for a 2-up B&W PDF. If you are like me, the first question is: "what is 2-up?" That question is <a href="http://www.tailrecursive.org/postscript/nup.html">answered here</a>.<br /><br />Easy. The next question is: how do I do that in Keynote? <a href="http://tech.puredanger.com/2008/03/28/keynote-2up-pdf/">Alex's post</a> gives the steps.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-50051641354655166962010-11-07T13:44:00.000-08:002010-11-09T16:22:23.269-08:00JavaScript and Expense ReportsThis is a loosely-connected collection of thoughts stemming from the recent <a href="http://strangeloop2010.com/">Strange Loop conference</a> and a book purchase.<br /><br /><span style="font-weight: bold;">Background</span><br /><br />For years now, I've known that thoughtful developers:<br /><ul><li>separate the JavaScript language from the DOM and wretched browsers</li><li>appreciate JavaScript as a lovely language inspired by (surprise!) Lisp </li></ul>So, I thought I "got it". Aside from the usual web development, I've even written significant production code in ActionScript in 2003-4.<br /><br />But I didn't truly learn the language.<br /><br />It fell into the dreaded <span style="font-weight: bold; font-style: italic; color: rgb(0, 0, 153);">Multi-Month Void of Cognitive Decay</span> (MMVCD).<br /><br />Here's what I mean: I only faced JavaScript every 3-6 months or so. When it did show up, the situation was urgent, and I felt as though I had to re-learn the basics. Previous 'lessons learned' were quickly lost in the fog of war. I gradually associated the frustration of re-learning with the topic itself.<br /><br />In this sense, poor JavaScript joined CSS and expense reporting software, falling into the dreaded MMVCD, a random window of cerebral entropy lasting between 3 and 18 months.<br /><br />(However, even in its worst hour, JavaScript was certainly better than either expense reports or CSS, both of which occupy the darkest corners of MMVCD)<br /><br /><span style="font-weight: bold;">Motivation</span><br /><br />Many friends have been interested in JavaScript (some in a <a href="http://rhyolight.posterous.com/">career-altering way</a>, no less). Many recommend Douglas Crockford's <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=cm_cr_pr_product_top">JavaScript: the Good Parts</a>. It is mentioned frequently at conferences and user groups.<br /><br />The tipping point was this review by <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=cm_cr_pr_product_top">Witek Radomski</a>:<br /><br /><blockquote style="color: rgb(0, 0, 153);">I used JavaScript as a garnish for web development... I was afraid of it. I knew I needed to confront the language and learn it properly.<br /></blockquote>Yow. This person saw into my soul. In fact, that review led to my recognition of the MMVCD.<br /><br /><span style="font-weight: bold;">JavaScript: the Good Parts</span><br /><br />This isn't a book review, but: the book is a delight. Minus the appendices, the book is <span style="font-weight: bold;">100 pages in 10 chapters</span>. That is an object lesson for authors and publishers alike! (I would love to know if Crockford faced pressure to add pages.)<br /><br />What's more, the premise is a winner: a language can contain a beautiful, subset within a complex, (at times) unappealing landscape.<br /><br /><span style="font-weight: bold;">Random Thought #1: Chained Dictionaries</span><br /><br />On <a href="http://www.se-radio.net/">SE-Radio</a>, someone once joked that Lisp is nothing more than an abstract syntax tree. Funny stuff, and not entirely fair (I believe it is a comic reduction of an earnest point by Paul Graham, though I have no link to support that). Yet there is certainly a grain of truth in it.<br /><br />My mental model of JavaScript: it has collections of properties. JavaScript does not call them dictionaries; I will. Dictionaries can be chained. A property may be a function. That's it: simple, elegant. Though this is neither fair nor accurate, that idea leaps to mind frequently.<br /><br /><span style="font-weight: bold;">Random Thought #2: Inheritance is an Interface</span><br /><br /><a href="http://twitter.com/scottbale">Scott Bale</a> gave an excellent talk at Strange Loop 2010, based on Crockford's book. During the talk, it struck me: when we learn that a language offers inheritance, it is a fallacy (and audaciously Java-centric) to assume the existence of classes. Classes are merely one implementation of inheritance.<br /><br />To wit, inheritance is an interface. It is a conceptual contract.<br /><br />As most will already know, JavaScript offers prototype-based inheritance. This is a different ballgame, but must be understood, if we are to comprehend JavaScript. Crockford banishes the pseudo-class-based inheritance of JavaScript out of the Garden of Good Parts.<br /><br />(As an aside, Crockford uses the terms 'prototypal' and 'classical'. I think this is a poor choice. To me, 'classical' has connotations of timelessness or an ideal. It took me a long time to realize Crockford doesn't mean to imply that.)<br /><br /><span style="font-weight: bold;">The Upshot</span><br /><br />If, like me, you find JavaScript to be in the Multi-Month Void of Cognitive Decay, Crockford's book is a gem. I'll be working through it.<br /><br />I realize there is now a book on <a href="http://www.amazon.com/HTML-CSS-Parts-Animal-Guide/dp/0596157606">HTML and CSS</a>, but I don't think I have the stomach for it. Ping me when Expense Reports: the Good Parts is available.<br /><br /><span style="font-weight: bold;">Postscript</span><br /><br />Be sure to check out the comments for interesting links on JavaScript material by <a href="http://www.lambdalounge.org/">Lambda Loungers</a>.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com3tag:blogger.com,1999:blog-5427069094580312550.post-78272190299513900742010-10-17T16:20:00.000-07:002010-10-18T03:40:05.418-07:00Strange Loop and Campus MemoriesI've returned from <a href="http://strangeloop2010.com/">Strange Loop 2010</a> in Saint Louis.<br /><br />For photos, presentation materials, and other reviews, check out <a href="http://twitter.com/strangeloop_stl">the Twitter feed</a>.<br /><br />This year, I'm not writing a full review or even my usual "random walk" through the conference. This is a quick, lyrical appreciation of the vibe. Future posts may include personal insights, one at a time. This is to serve my readers, who (correctly) point out the declining frequency of posts on here.<br /><br /><span style="font-weight: bold;">First Days on Campus</span><br /><br />Recall your first days on a university campus, or imagine them from a Hollywood film.<br /><br />It is a brilliant autumn afternoon. The crisp bite of the morning chill is gone, and the trees display their fiery leaves in the sun.<br /><br />Everywhere, there is energy. Outside, people hustle and bustle from one building to another. Along the paths and roads, the chatter is constant. Some are merely coordinating the next stop. <span style="font-style: italic;">Where</span> is it? <span style="font-style: italic;">When</span> is it?<br /><br />But most are sharing <span style="font-style: italic;">ideas</span>. The ideas initially come from respected professors, who set student minds ablaze. Then new thoughts arrive via inspiration; others are borne through rigorous debate. Somehow, they culminate in a virtuous cycle of intelligence and enthusiasm. Like the morning chill, cynicism and defeat cannot exist in this environment. The energy burns them off.<br /><br />In a season of change, humanity and nature join in a triumphant, zen sense of <span style="font-style: italic;"><span style="font-weight: bold;">here</span> and <span style="font-weight: bold;">now</span></span>.<br /><br /><span style="font-weight: bold;">Strange Loop 2010</span><br /><br />The 2-day conference brought me back to my first days on campus at grad school.<br /><br />That was the vibe. In my mind, there is no higher praise.<br /><br /><span style="font-weight: bold;">Postscript<br /><br /></span>For those not on Twitter, a final shout-out to all my tech friends in Saint Louis and beyond. It was terrific to catch up, and I only wish I had more time to chat. See you again soon.<br /><span style="font-weight: bold;"><br /></span><span style="font-weight: bold;">Reviews<br /><br /></span>For details, my friends <a href="http://www.weiqigao.com/blog/2010/10/18/strange_loop_2010_two_questions_not_answered.html">Weiqi Gao</a> and <a href="http://marioaquino.blogspot.com/2010/10/strangeloop-talks-day-1.html">Mario Aquino </a>have posted excellent reviews.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-71282815142912907992010-09-25T08:33:00.000-07:002010-09-25T09:40:16.336-07:00Moving Details<span style="font-weight: bold;">Background</span><br /><br />In case this helps anyone, Here are details about my recent international move. This is definitely a niche topic: no worries on skipping it. I wish I had this info when I started, and want to contribute back to the hive-mind.<br /><br /><span style="font-weight: bold;">Disclaimer</span><br /><br />This is a journal of my experience, and not advice. I hope this opens eyes to topics of research, but ultimately, you are on your own.<br /><br />Although the experience was a lot of research, with seemingly unending paperwork, this post is not intended as criticism toward Canada or the USA. Any comments disparaging either country will be deleted.<br /><br /><span style="font-weight: bold;">Executive Summary</span><br /><br />I am a Canadian who returned after working for several years in the USA (legally, on TN Visas). I have no dependents and didn't own a house.<br /><br />I found that there were three areas of concern:<br /><ul><li>stuff</li><li>finances</li><li>car</li></ul>My stuff was straight-forward. My finances were difficult. My car was surprising.<br /><br /><span style="font-weight: bold;">My Stuff</span><br /><br />I went with professional movers for my furniture and books. I packed important things (e.g. guitars) into my car and drove separately.<br /><br />Following instructions from <a href="http://www.cbsa-asfc.gc.ca/menu-eng.html">Canada Border Services</a>, I prepared a manifest that enumerated each box / item, with an estimated value for each. Per instructions, it isn't necessary to list "each pair of socks". My approach was to generalize clothes and books per box, but to list electronic equipment and guitars separately.<br /><br />The list has two sections: stuff in my car and stuff "to follow" (that is, on the moving truck).<br /><br />I arrived at the border before the truck, and showed the Canadian border guards the list. I paid duty on the vehicle (see below), but IIRC, I was exempt from duty on my belongings, given (a) everything was older than 6 months and (b) I was granted credit for every year that I was away.<br /><br />Despite having a delivery window of 3 weeks, the movers arrived <span style="font-weight: bold; font-style: italic;">6 weeks</span> later. I met them at an airport, which served as a port of entry / customs. I presented my manifest list and also the paperwork I had signed at the border.<br /><br />The downside of pro movers is the expense and the high likelihood of delayed arrival. I had considered U-Haul but that approach has its own issues, which are obvious.<br /><br /><span style="font-weight: bold;">My Finances</span><br /><br />I'm not going into gory details here. My main lesson is that I was wise to check with financial institutions about becoming a non-resident. First, it will be an extremely good test of a brokerage's customer service: it is an exotic question.<br /><br />From what I can tell, a US resident can certainly have holdings with a financial institution, but upon leaving, there are restrictions on activity. e.g. One cannot make transactions. It was never clear to me if one could simply leave the account open, without doing further trading. Most of my moving research was spent on this question.<br /><br />Another option is to liquidate. Depending on market conditions, this could be suicidal. For 401K accounts, it is definitely painful and drastic.<br /><br />A final option, for residents of Canada and the USA, is a cross-border brokerage. They are typically licensed to trade in both countries. However, these brokerages have a niche, affluent market and have the leverage to charge steep fees.<br /><br />Note that I haven't mentioned taxes. For me, that research lays ahead, due to the timing of my move.<br /><br /><span style="font-weight: bold;">My Car</span><br /><br />First, a car is not automatically welcome in another country. e.g. Canada does not accept all US cars. I checked mine against the list at the <a href="http://www.riv.ca/importingavehicle.aspx">Registrar of Imported Vehicles</a> (RIV). Thankfully, it is welcome (as most are).<br /><br />For the Canadian side, I did the following:<br /><ul><li>Before moving, get a letter from your local dealer that any recall work has been performed on the car, or that it is clear of recalls.</li><li>Estimate the value of your car in the destination of your move. This will be used to calculate duty at the border.</li><li>After crossing the border, within 30-45 days (check documentation), the car must undergo a federal inspection. The paperwork is faxed to the RIV. The RIV will mail a sticker that affirms the car is formally a Canadian vehicle.<br /></li><li>The car must also undergo the typical provincial inspection and registration.</li></ul>That's some work, but wait, <span style="font-style: italic;">there's more! </span><br /><br />There is an <span style="font-style: italic;">American aspect</span> to vehicles: one must contact the American border (at the point of departure), 3 days in advance, to alert them that you are leaving the country. They want VIN, title, etc, faxed to their office.<br /><br />I discovered this about a week before my departure. Be sure to verify that they received the information. Vehicle titles are a challenge for a fax machine. There is no charge on the American side. (This is probably a procedure to curb theft.)<br /><br /><span style="font-weight: bold;">Summary </span><br /><br />I've already blogged about my personal decision and my admiration for both countries. This post is sheer logistics, without the sentiment.<br /><br />If I were to do it again, I would consider selling my car before the move, paring down my belongings to an absolute minimum, and choosing U-Haul.<br /><br />I would also be very careful about investing in a country without a long-term plan (e.g. for retirement).<br /><br />The ultimate lesson is to do homework, and find professionals that you can trust. Just as you need a doctor and a dentist in life, in this arena, you need a cross-border accountant, an immigration attorney, and a financial planner.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com0tag:blogger.com,1999:blog-5427069094580312550.post-7853959206369381172010-08-05T17:00:00.000-07:002010-08-06T08:19:23.836-07:00Strange Loop 2010: a rhapsody<b><i>"Dammit, Alex!"</i></b> Our hero sets down his glass of Crown Royal, and rubs his eyes. The LCD monitors glow, lighting the dark cottage like a cyber fireplace. Outside, a loon's forlorn call pierces the still night, echoing along the moonlit, glassy lake. Soon, it will be daybreak.<br /><br />With a furrowed brow, our man returns to planning his trip. We know this much: he will visit Saint Louis in the fall. A triumphant reunion with friends and, perhaps, with an unrequited love from Spain (with whom he might have had a torrid fling, if not for an unfortunate Google translation of 'NP-Hard problems', over <i>tapas</i>).<br /><br /><b><i>"Focus, man!"</i></b> The question is: <i>when?</i><br /><br />The sentimental choice is mid-November. He could celebrate his birthday with friends. <a href="http://www.cinemastlouis.org/">The Saint Louis International Film Festival</a> doubles the allure, providing a perfect book-end to last year, when a wretched Romanian movie gave him startling insight. Late October works too, when cherished non-tech friends will gather to remember a weekend spent, with no electricity and a lone bottle of absinthe, in a Kansas City bus terminal. Nasty stuff, that KC.<br /><br />And then, there is the rub: <a href="http://strangeloop2010.com/">Strange Loop</a> on October 14-15. Our hero is torn. It would be great to see his geek compadres again, and Alex Miller has assembled a <a href="http://strangeloop2010.com/speakers">line-up</a> that is a tech <a href="http://en.wikipedia.org/wiki/Murderers%27_Row">Murderers' Row</a>. But, the timing is tricky. As are the logistics. There are other choices: SLIFF, Halloween, <i>la mujer</i>! There are a dozen reasons why it just won't work!<br /><br />With drink in hand, he rises to his feet and looks down at <a href="http://www.codersatwork.com/">'Coders At Work'</a>, laying open on the desk, radiant in the cyber glow. <i>Zounds:</i> the table of contents reveal interviews with Guy Steele and Douglas Crockford.<br /><br />Both men are <a href="http://strangeloop2010.com/speakers">keynote speakers at Strange Loop 2010</a>. Early-bird registration ends <a href="http://strangeloop2010.com/pages/register">August 6th.</a><br /><br /><b>"Well done, sir."</b>, our hero smiles. <b><i>"Checkmate."</i></b>Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com2tag:blogger.com,1999:blog-5427069094580312550.post-16984106736656508852010-06-28T15:39:00.001-07:002010-06-28T15:51:01.669-07:00Settling In and Spooling UpThis post is overdue, but as a shout-out to friends to whom I've not yet emailed, I've made it to eastern Canada, even if my belongings have not -- yet.<br /><br />It has been a long journey, from a touching series of farewells in Saint Louis, though the ~1800 mile drive that touched 11 states and 2 provinces.<br /><br />Though not completely 'settled in' just yet, I am definitely spooling up: I've been at the new gig for over a week now.<br /><br />Because of the job search and subsequent move, there is a fairly large backlog of ideas for blog posts. We'll see how far I get, but I suspect the next post will be a public service to a distinct niche audience: detailing the aspects of an international move. I'll post some of the facts that I wish I had known when I started.Michael Easterhttp://www.blogger.com/profile/14799771593145201161noreply@blogger.com3