It’s the 4th of July. I spent the morning getting some client work done, then getting my second run in for the month. 2.39 miles in 25 minutes. Getting faster! About to head out for the rest of the day.
Interesting things I’m thinking about when time permits:
Functional Reactive Programming or FRP: a programming paradigm for reactive programming using the building blocks of functional programming. Reactive programming itself is a paradigm oriented around data flows and the propogation of change. (Data binging anyone?) Data Flow is the idea that changing the value of a variable should automatically force recalculation of the values of variables which depend on it. Spreadsheets are the most widely used embodiment of data flow.
Session – Reinventing the REPL: I haven’t watched this whole talk yet, only the first half, but it’s about making a richer and more widely accessible REPL for Clojure and ClojureScript. The first half of the talk takes a look at the very advanced REPL within Mathematica. I’m now super curious about Mathematica and hoping to get some time to dig into it soon.
Comments Off on Happy 4th
In the world of software development, there are two similar goals that run somewhat opposed to each other. One is speed and ease of creating new software. It’s important to go fast and get things done. Another goal is code that’s simple to reason about and easy to maintain and extend. It’s very easy to quickly generate reams of code that basically works, but leaves behind a complex web of entangled logic. If you’d like to learn more about these two somewhat opposed ideas, and the characteristics of each, do yourself a favor and watch Rich Hickey’s talk Simple Made Easy. (There are two recordings of this talk. This is a more recent version given in March of 2012.) Once you watch it, wait a week and watch it again. Many have reported getting more out of it with repeated viewings.
What are the key components of maintainable software? One is code that is simple to reason about. Another is doing more with less. If solution A takes 20 lines and the functionally equivalent solution B takes 10, is solution B better? Possibly, unless it abstracts away the details to the point where if a second developer comes along, they cannot understand it.
Clojure is a relatively new language, created in 2008 by the previously mentioned Rich Hickey and designed with simplicity over ease in mind. It’s based on Lisp which is relatively old, but remains relevant. Clojure runs on the JVM and achieves near native-Java speed while leaving behind a lot of the cruft of the host language. It encourages (but doesn’t enforce) functional programming concepts. Everything distills down to functions that operate on data structures. Ideal functions are pure, free of side effects and simply transform data from one representation to another. Since side effects are still required to do something useful like output to the screen or write to disk, Clojure allows side effects. But they tend to be explicit. The core data structures in Clojure are immutable, which means once they are set, they do not change. This does not mean things must remain static. To make a change, you make a copy of the original data to a new location with the required change. Loops are declared using functional iterators and recursion instead of being constructed manually with counters.
It’s a different way of thinking. Those accustomed to imperative programming where variables can be set and changed at will, and object oriented design where object methods modify state will have some initial learning curve to get over before becoming truly productive. The side effect of learning these concepts is the ability to build software that is simple to reason about, and ready for concurrency, since data stored in memory does not change and can be accessed safely across threads.
At Open Source Bridge in Portland last week, I gave an introduction to using Clojure to build web apps, and the slides are below.
There are many resources on the web for Clojure and Lisp, and if you decide to pick it up, you’ll likely need to go over the ideas repeatedly and from a few different sources for it to really sink in. I think it’s worth it!
Comments Off on Closing Over Simplicity
So it’s 11:45pm, cutting it a bit close to the wire for day two of the July challenge. I had a long day and wasn’t able to sit down to write until about an hour ago. Tomorrow I plan to get started earlier.
A new wrinkle in the challenge has appeared: my friend Kevin Lynagh has proposed a wager to make things more interesting, and I’ve accepted. He’ll do the challenge as well – write every day and run three times a week for July. If either of us fails, we pay the other $500. Not only would I fail publicly and suffer the embarrassment, I’d also lose a significant chunk of change. Or 100 IPAs.
So today I ran for the first time in the fancy new shoes. I also used the Nike+ app to quantify and track my progress. 2.23 miles in 25 minutes, around the ol’ neighborhood. Not bad for the first in over a month. Feels great. Also helped a friend move this afternoon and played drums for an hour this evening, so all in all an active day.
2012 Midpoint Review
Now that it’s July, it’s a good time to review the past six months. This year I planned to go back to working for myself, and did so. In February I started Olio Apps, a company dedicated in part to web development consulting, and also in part to launching new products. The classic strategy. On the consulting side, I’ve got a steady stream of work coming in. On the product side, I’ve made good start/stop progress on a couple projects, and hope to get one of them out the door in the next month or so. I need to update the website, start a company blog, and a host of other things. I love the freedom to pick and choose which projects to work on, who to work with, and what technology is used.
I also planned to do some slow travel and working remotely with my girlfriend, and we successfully accomplished that earlier this year – staying a month in Hawaii and a month in Florida. It was a great experience in both instances. I now feel a basic freedom of movement. The trade off for this freedom is a small amount of additional stress. Figuring things out, securing plans for a place to stay and transportation, the additional expenses involved, finding someone to take care of the cat, and receiving important mail. Both places we stayed this spring were in the United States, so it’s still relatively easy. We’re considering going somewhere outside of the county next time.
I picked up Clojure, a very cool programming language based on Lisp and focused on simplicity. I’ve absorbed the functional programming dogma and have started preaching the good word to others. More on that soon as well.
So the goals for the rest of the year – continue to build on Olio Apps initial success. Refine the messaging and post an online portfolio. Launch a product that’s currently in the works. Possibly travel later in the fall. More tomorrow.
Comments Off on 2012 Midpoint Review
As a guy who’s fond of personal challenges and setting goals for myself, I started thinking about what the theme for July would be a couple weeks ago. I’ve decided to make July “improve personal communication” month, and to that end, I’m going to try to blog every day this month. Maybe it’ll become a habit, maybe I’ll fail after a week. But I’m going to give it a shot. Yesterday I sat down and brainstormed a bunch of ideas and content planned the first week. It’s going to be a mixture of personal, tech, business, music, travel, how-tos, and whatever else comes up.
I’m also going to incorporate one fitness goal into this month: start running again! Not that I’ve ever been a huge runner, but I get into it now and then. While I was in Hawaii, the weather was so nice and there was a marsh near the house with a long running trail, and it was so easy to just go out for a couple miles. The beaches in both Hawaii and Florida were also great places to run.
Once I got back to Portland, I planned to get running shoes at some point. And then a month passed! So today I went to Portland Running Company, where they really took the time to help me out and had me try on like 4 pairs of shoes. After checking my stride, they said I’m a slight over pronator, which is normal for runners with low arches. Pronation is where the foot rolls inward after the heel strikes the ground. About 15 degrees of roll is normal. More than that and you’re over pronating. Less than that, you guessed it – under pronating. So, you get shoes which help compensate for that. The shoes I bought (“Brooks” is the brand) felt awesome at the store, massive improvement over what I had been running with. Feels like I’m just gliding over the ground. Tomorrow I’ll give them the field test.
The dude at the shoe store suggested running every other day to get back into it, and try to aim for time, not distance, so that’s what I’ll do. 25 minutes every other day.
But I haven’t gone running yet, instead this evening I went on a 15 mile bike ride around the Portland waterfront, down the springwater corridor and back. We also stopped by the Doug Fir Lounge for “Pickin’ on Sundays” on the Back Patio. NodeConf is starting tomorrow at the Jupiter Hotel here, and though I don’t have a ticket to this one, it was funny to see the telltale signs of a tech conference underway – dudes sitting around staring at Mac laptops in the bar / lounge area. Normal at a coffee shop, not an everyday occurance at the Doug Fir. Having just gone to and presented at Open Source Bridge last week, I’m all nerd-conferenced out at the moment, so I’m fine with not going to NodeConf. Might stop by the evening parties though.
Other goals for July: Go camping atleast once. Bike to Hood River and back with a group. Possibly combine the previous two things. Fix some issues with my FL house and my car. Do lots and lots of client work. And not fail to post every day. Until tomorrow…
When I last wrote, it was the beginning of February and I’d just finished my January challenge of dietary restrictions. It’s now mid May, and of course, much has changed!
On February 10th, I left my full time job at Jive Software to start a new company, Olio Apps, a software development and consulting firm, with a focus on mobile, social, and web apps. There are many challenges that go along with starting a new company – getting all of the paperwork in place, setting up systems for accounting and time tracking, getting booked up with work, and generally getting acclimated with juggling many more balls at once than an employee at a mid-size firm has to deal with. It’s been challenging, and I love it.
Along with that, my girlfriend and I have been achieving our goal of traveling slowly – living and working in one place for a month at a time. In late February we travelled to Oahu Hawaii and lived there for a month, staying with some family/friends who recently moved there, working on our laptops during the weekdays, and exploring Oahu on the nights and weekends. A month is a long time, and it’s quite a different experience than a shorter trip. It’s not quite like a vacation, since we’re still working. We’re also cooking meals, doing laundry, paying bills, visiting friends, and doing all of the other things you do over the course of a month. There is enough time to explore most of an area, and even go back and revisit favorites.
After Hawaii, we came back to Portland, travelled to Scottsdale Arizona for a few days to attend a conference (JSConf), came back to Portland for a couple weeks, and then flew to Florida for a month, where we are now. Why Florida? For one it’s where I grew up, and much of my family still resides here. Living in Portland, I don’t get much chance to see family and old friends that much, except electronically through email and Facebook, and that doesn’t always cut it. Secondly, being a native of Florida, I start to go a little nuts in the spring time in Portland, when it generally stays cold and rainy a bit longer than the rest of the country. All that has made me wonder over the past couple years – “wouldn’t it be nice to go live in Florida for a bit in the spring?” So, this year I managed to do it.
Has it been worth it? Absolutely. When I lived in Florida permanently, I lived about 45 minutes from the beach. For this trip we got a place a couple minutes from the beach. It’s quite a different experience, and we have a routine of having a nightly evening walk or run on the beach at sunset, which does wonders for decompressing from a day of work. We’ve also managed to squeeze in a lot of time with friends and family, checked out a lot of new places to eat, drink, and get coffee that didn’t exist before, and even attended a couple great concerts – Beach House in Orlando, and a reunion show for a local band I used to look up to and admire, Spiller.
We’re here for a few more days, and I’m excited to get back to Portland, be in my own space, see Portland friends, start playing music again, be closer to work colleagues, and generally enjoy all that Portland has to offer. So yeah, travel works. Energy renewed.
I have more to say, but lets not blow it all in one giant post eh? Stay tuned for the next post, “Just Ship It”, about writing, recording, and mixing a new song in one day.
Comments Off on Working to Live, Traveling Slow
January is over, which means the challenge is complete!
Over the holidays I was inspired by the coming new year and made up a few rules to impose on myself for a month. Why? To see what I could accomplish in a month, instead of a longer term, unrealistic resolution. It was a test of willpower and a forced break in habits. The challenge was to eat out only once a week, be vegetarian except the occasional fish, drink no alcohol, consume less sugar, stay away from coffee and drink tea instead, and stop all recreational internet surfing.
How did it go? Overall, quite well. The first week was the hardest – I’d developed a habit of going out to eat nearly all the time, and having a drink or two a few times a week. Changing that habit was tough at first. Humans develop grooves, like records, and you can go outside those grooves for a couple days, but you naturally fall back into your old way, and it was hard not to. By the second week I was more used to it, and by the third and forth it became normal.
For example – I’ve been drinking tea this past month instead of coffee. My morning routine now is to go fix myself a cup of tea, and when I arrived at work this morning, I just automatically made tea without thinking about it. Then I realized “hey! I can drink coffee! I’ll get a latte later!” but I never made it to the coffee shop. No guarantees for tomorrow.
- Eating out once a week: B, I stuck to this for breakfast and dinner, but I made a few exceptions to go out to lunch with co-workers, and forgot to bring it a couple other times. On the eating at home front, each week we sat down and developed a meal plan, and bought all of our groceries in one shot. Gotta give my girlfriend a lot of the credit for this. It worked amazingly well, the food was never boring, and we made some amazing dishes. My cooking repertoire has expanded quite a bit, and cooking is no longer a rare event, its the default.
- No meat except fish once a week: A, I ate no beef, pork or poultry in January. We made some very tasty meals, mostly vegetarian, and a few with fish.
- no alcohol: A – This was challenging, but doable. This despite my work having a scotch tasting party. I’m used to drinking casually a couple times a week. Glad to not have this restriction anymore, but I do feel a bit less obligated to buy a drink when I go out now.
- no excess sugar: B – I don’t drink soda, but I do love desserts. I mostly stayed away, but I did have a cupcake.
- no coffee: A – Stayed off the sauce. Had a headache the first few days but then got back to normal. This was part of what made week #1 hard. But this has been great, I need less caffeine now, and I drink more tea than coffee.
- no recreational internet: B – I stayed off Facebook except to check my messages a couple times, snuck a few glances at Twitter, and mostly stayed away from the various news and tech sites I tend to frequent. Not being able to read internet news, I started to read more “offline” materials again, like books. Crazy talk. Towards the second half of the month I started checking sites I go to again, but with less frequency. It’s hard not to when you work on a computer all day.
Overall I’ve started a few good habits – especially the meal planning bit. Cutting back on things you normally do makes space for new kinds of experiences to happen.
It’s January 1st, 2012! According to some wackos, this might be the year the world ends. It probably won’t, since from the beginning of mankind there have been countless predictions of the end of the world and so far they’ve all been wrong, so I’m gonna guess this year follows that pattern. On the off chance that they’re right, or that it might be my last year personally, I’ve decided to make it count. This year will be my “year of hustle“, as shall soon be further detailed.
It’s the season for resolutions and fresh starts, so in that spirit, one of the first things I’m doing is a “cleanse” of my own design for the month of January. I’m actually calling this cleanse a “challenge” since that sounds more fun and I enjoy challenges. This challenge isn’t forever. No new years resolution of “from now on, I’ll never _____ again!” because that’s unrealistic and doomed to fail. This is a rational one month challenge that any person with self control ought to be able to achieve.
The challenge includes
- No eating out (more than once a week)
- No meat (fish is allowed once a week)
- No excess sugar
- No alcohol
- No coffee
- No recreational internet
I got this idea from an article I read online called the “Argon Challenge“, where a guy who goes by the name of Argon takes an even more extreme approach than what I outline here, eliminating many other things I have not listed. He’s been doing it for years, and each year he adds another element to his challenge. This is my first year, so I’m starting from a different place. I’ll call it the Becker Challenge.
Feel free to play along. My girlfriend has decided to do most of this along with me, which makes things easier, as we’ll both be helping to motivate the other and cook meals together. She’s foregoing the recreational internet challenge, as she actually has to use Facebook and Twitter as part of her job. This is comforting, since if something actually important happens to scroll past Facebook she can be my liaison to the social web through which I can communicate for the month.
To go into a bit more detail:
No eating out
My girlfriend and I have become a little shall we say, “dependent” on restaurants, food carts, and drive throughs for about 80% of our dietary needs. One could argue this is primarily my influence, being the lazier of the two in the kitchen, but she loves to try new places and eat out, so it’s a perfect storm. This is a) expensive, and b) not so healthy. Food at restaurants is generally very rich and fatty, to maximize the deliciousness, which is understandable. I want to challenge myself to pay better attention to what I eat and take more responsibility for being healthy. There’s no better way to do this than making your own food. It’s a skill I obtained as a teenager working as a food prep in the kitchens of various restaurants, but slowly neglected over time since leaving the food service industry. I hope to regain and hone my chef skills this month and add a few new recipes to my limited repertoire. My girlfriend’s pro kitchen skills will ease the transition a bit, but doing this the entire month might get a bit extreme, so we’ll have one restaurant outing a week as a reward for our cook-at-home / eat-healthy efforts.
I once challenged myself to be vegetarian, in order to eat healthier, and also just to see if I had the willpower. Turns out I do. I lasted a year. Eventually I gave in to my cravings for chicken and fish, and then the flood gates opened and I was back to eating burgers, steak, bacon, and anything else from the animal kingdom that found its way on to my plate. I am most definitely an omnivore, but that year taught me a few things. A) If you’re only eating vegetables, you’re going to eat ALL your vegetables, because you need sustenance and a feeling of “fullness”, and anything on your plate that counts as food will be eaten in order to get closer to that aim. B) Vegetarian dishes can be way more colorful, creative, spicy, and delicious than your typical meat and potatoes dish. To be vegetarian is to buck the status quo, and force yourself to think outside the box. That alone is worth doing for a month, to force yourself to think different.
No excess sugar
Refined sugar makes things taste sweeter, and provides a quick energy and mood boost. The problem is it provides an equally fast energy and mood crash. I’m not much of a sugar addict now. I don’t drink soda, but I love chocolate, such as an occasional cafe mocha or chocolate chip cookie. I’m stepping off the sweets train for the month. This should help level out my moods and allow me to sleep better.
I live in Portland Oregon, which has a thousand awesome drinking establishments, which I quite enjoy. I don’t drink to excess on any particular night, typically having a max of two drinks, but I estimate I’ve had at least one drink per day for probably 75% of last year. I don’t have a highly addictive personality, and I don’t drink at home alone, only socially with friends, or sharing a couple glasses of wine with my girlfriend. I don’t think I have an alcohol problem. But I’m curious to see what happens. If I eliminate it for a month, will I crave it? Will I not miss it at all? Sometimes you don’t know if you’ve become dependent on something until its gone.
There’s no question with this one. I have a coffee dependency. In the last few years I’ve gone from drinking 0-1 cups of coffee a day to 3-4, refilling at breakfast a few times, or getting a late afternoon latte. Many of these being outings to Portland’s numerous amazing coffee shops. I can’t get enough of that delicious espresso. Like sugar, coffee gives us an energy boost and corresponding crash. I’m not going to strictly cut out caffeine though, just minimize it. I’m allowing myself 1-2 cups of black tea a day. This is to ease off the caffeine, without causing headaches. I’ll need to drink twice as much tea to get the same effect as a cup of coffee. This too should help the sleep cycle.
No recreational internet
This one is huge. I have a slight internet addiction. As a software engineer, I work on the internet every day, and I need it to search for solutions to issues and questions that come up, but in between those times, I’ve allowed myself quite a bit of free reign to read interesting articles, blog posts, friend’s updates on Facebook and Twitter, and other things that aren’t really contributing to my productivity. It’s become my substitute for TV, which I don’t watch, but this is just as bad as channel surfing. It is a muscle memory reflex I do without thinking whenever I start getting bored. I love Hacker News, and there’s tons of good information on there, but there comes a time when you need to stop consuming and start producing. The internet is a two-way communication medium, so this month I’m focusing on trying to produce more and consume less. After this month I’ll resume reading blogs and social networking sites, and hopefully find a more healthy balance.
That about wraps it up. I’m already experiencing the positive benefits of this challenge. We made our own breakfast today, planned our meals and shopped for groceries for the week. Normally I would have then hopped on the internet and read a bunch of blogs and news sites. Instead of surfing the internet, I freed up the time in order to write this blog post. I’ll update as we go along, and announce a few other things happening soon as well.
Comments Off on A Fresh Start and a One Month Challenge
Hello! Here is a long overdue update to Asset Packager, which now makes the main branch Rails 3 and Ruby 1.9 compatible. Thanks to all those on Github who sent me patches with these fixes.
- Fix thread safety issue.
- JSMin compatibility fix for Ruby 1.9.1 – Fixnum#ord
- Rails >= 2.3 test compatibility
- Rails 3 deprecations – change RAILS_ROOT to Rails.root, change RAILS_ENV to Rails.env, move tasks to lib dir
Comments Off on Asset Packager – Rails 3 / Ruby 1.9 Compatible
Got another quick presentation for ya. I discovered Sammy yesterday. I gave a quick talk about it today. That’s how easy it is to understand!
Watch the preso for more…
If you want to learn more about Sammy, check out Aaron’s blog post which has a nice introduction and screencast.
Comments Off on All About Sammy
In this presentation, I first gave an overview of Test Driven Development for those front-end JS developers who might not have heard of it yet (!) and then the difference of TDD vs. Behavior Driven Development.
I then walked through some tools:
- Screw.Unit, a nice BDD framework for JS that is quite similar to RSpec in Ruby land.
- Blue Ridge, a plugin for rails that integrates Screw-Unit with Rhino and Env.js and some rake tasks to create a command-line driven headless (no-browser == fast) testing workflow.
- JS Test Driver, a project that mounts one or more browsers as slaves, and a command-line tool which notifies all the listening browsers to run tests and aggregates the results. Very cool!
In the actual presentation I even did some live coding examples of Blue Ridge and JS Test Driver, and they worked perfectly. Here are the slides from the talk: