diff --git a/_layouts/default.html b/_layouts/default.html index 1509719..c62a015 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -31,7 +31,6 @@ Brian Doll, Software/Systems Architect, San Francisco Bay Area, California
- @@ -46,8 +45,11 @@
-
- Brian Doll is a husband, father, thought worker, tree-hugging, music-loving, punk, atheist, non-conformist, optimist, Quality seeker. Here you'll find a mix of thoughts on fitness (Crossfit, Paleo foods), philosophy and programming (Ruby, Rails and other goodies). +
+
About the author:
+

Brian Doll is a business-focused technologist who has been building things on the web for over 13 years. He has extensive experience in retail, media and financial service industries in both start-up and large enterprise environments.

+

He enjoys speaking on lean engineering, web application performance and systems architecture. Having been inspired by Ruby and reinvigorated by Rails, Brian has been an avid contributor in the Ruby/Rails community since early 2007.

+

Additionally, he is a husband, father, thought worker, tree-hugging, music-loving, punk, atheist, non-conformist, optimist, Quality seeker. Phew! Here you'll find a mix of thoughts on fitness (Crossfit, Paleo foods), philosophy and programming (Ruby, Rails and other goodies).

diff --git a/_layouts/post.html b/_layouts/post.html index c38cbb5..aa04a9e 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -2,6 +2,10 @@ layout: default --- +

{{page.title}}

+ +
{{ page.date | date(page.date,'%B %Y') }}
+ {{ content }}
diff --git a/_posts/2007-03-28-passing-by-value-reference-and-somewhere-in-between.textile b/_posts/2007-03-28-passing-by-value-reference-and-somewhere-in-between.textile index 67e9c59..1a1762d 100644 --- a/_posts/2007-03-28-passing-by-value-reference-and-somewhere-in-between.textile +++ b/_posts/2007-03-28-passing-by-value-reference-and-somewhere-in-between.textile @@ -3,8 +3,6 @@ layout: post title: Passing by Value, Reference and somewhere in between --- -h1. {{ page.title }} - I had recently run into what one might call an anti-pattern in a code base I was recently working in, and wanted to refresh my memory on exactly how java deals with object parameters that are modified within the method body. To be totally honest, the code (similar to the first code snippet below) was so strange to me because I had never ever seen that (anti-)pattern before. It’s likely an artifact left over from a C programmer that may have forgotten the language differences. This discussion is often had, but usually leaves the participants more confused than when they started. Java passes by value, right? Or is it reference? What is it with primitives again? Oh man, forget it. diff --git a/_posts/2007-06-28-software-engineering-book-recommendations.textile b/_posts/2007-06-28-software-engineering-book-recommendations.textile index b1b6e22..c853561 100644 --- a/_posts/2007-06-28-software-engineering-book-recommendations.textile +++ b/_posts/2007-06-28-software-engineering-book-recommendations.textile @@ -3,8 +3,6 @@ layout: post title: Software Engineering Book Recommendations --- -h1. {{ page.title }} - I always find it fascinating what books people prefer on various topics. I put together the following list of books I really enjoy, broken down by category. Please feel free to add to the list, or to comment on the selections. h3. People, Projects and surviving them both diff --git a/_posts/2007-07-28-drag-and-drop-apple-script-to-convert-video.textile b/_posts/2007-07-28-drag-and-drop-apple-script-to-convert-video.textile index 4854805..4f4ff82 100644 --- a/_posts/2007-07-28-drag-and-drop-apple-script-to-convert-video.textile +++ b/_posts/2007-07-28-drag-and-drop-apple-script-to-convert-video.textile @@ -3,8 +3,6 @@ layout: post title: Drag and drop AppleScript to convert video --- -h1. {{ page.title }} - My parents were kind enough to get us a "JVC Everio digital video camera":http://www.jvc.com/presentations/everio_g/ after our son was born. The camera has incredible picture quality, loads of features and fits in the palm of your hand. We shot loads of video of his first few weeks and soon enough it came time to make our first DVD to send to friends and relatives. It turns out the Everio cameras create .mod files, which are similar to MPG files, but.. um.. aren't. I'm guessing this was a way to avoid paying royalties for MPG compression, but this does leave a little bit of leg work for the user. (And *no*, you can't just rename them to .mpg, I have no idea why most websites suggest that as they are not compatible.) diff --git a/_posts/2007-09-28-testing-static-vs-dynamic-typing.textile b/_posts/2007-09-28-testing-static-vs-dynamic-typing.textile index dd607aa..3f3a7e6 100644 --- a/_posts/2007-09-28-testing-static-vs-dynamic-typing.textile +++ b/_posts/2007-09-28-testing-static-vs-dynamic-typing.textile @@ -3,8 +3,6 @@ layout: post title: Testing - Static vs. Dynamic Typing --- -h1. {{ page.title }} - Cedric Beust recently wrote an article entitled "Continuous Tax":http://beust.com/weblog/archives/000462.html where he describes the term "Continuous Tax" to be "dead-on" in describing what it's like to work with dynamically typed languages. This topic interests me for a variety of reasons but mostly because Cedric is quite authoritative in the world of software testing, what with the "framework":http://testng.org/doc/ and the "book":http://beust.com/weblog/archives/000459.html and all. diff --git a/_posts/2007-10-26-leaky-abstractions-seepage-of-a-dangerous-kind.textile b/_posts/2007-10-26-leaky-abstractions-seepage-of-a-dangerous-kind.textile index df028ee..cf28f81 100644 --- a/_posts/2007-10-26-leaky-abstractions-seepage-of-a-dangerous-kind.textile +++ b/_posts/2007-10-26-leaky-abstractions-seepage-of-a-dangerous-kind.textile @@ -3,8 +3,6 @@ layout: post title: Leaky abstractions, seepage of a dangerous kind --- -h1. {{ page.title }} - (This is an excerpt from an article I wrote at my day job. Specifics about team members and the projects at hand have been removed.) *What are leaky abstractions?* diff --git a/_posts/2007-11-04-dancing-with-dynamic-features-in-ruby.textile b/_posts/2007-11-04-dancing-with-dynamic-features-in-ruby.textile index fefca8d..3c43b8b 100644 --- a/_posts/2007-11-04-dancing-with-dynamic-features-in-ruby.textile +++ b/_posts/2007-11-04-dancing-with-dynamic-features-in-ruby.textile @@ -3,8 +3,6 @@ layout: post title: Dancing with dynamic features in Ruby --- -h1. {{ page.title }} - I was working on a "browse" page recently for a rails-based web application. The page was not all that uncommon, requiring a listing of categories with a long list of subcategories. Without getting into much detail, I'll note that each of these top-level types are represented by different models. A particular "bad smell" emerged when seeing some repetitious code in a controller: diff --git a/_posts/2007-12-05-blocks-closures-and-the-ruby-way.textile b/_posts/2007-12-05-blocks-closures-and-the-ruby-way.textile index 4528656..ad13b3a 100644 --- a/_posts/2007-12-05-blocks-closures-and-the-ruby-way.textile +++ b/_posts/2007-12-05-blocks-closures-and-the-ruby-way.textile @@ -3,8 +3,6 @@ layout: post title: Blocks, Closures and The Ruby Way --- -h1. {{ page.title }} - I recently attended my first "Ruby Meetup":http://ruby.meetup.com/6/calendar/6597195/ here in San Francisco. One of the talks, given by "Bala":http://ruby.meetup.com/6/members/3936949/ was on "Blocks" in Ruby. Let me first say that I have somewhat of a crush on Ruby right now. I haven't been this excited about hacking at some code in ages. Ruby is a dynamic language, letting me do things I used to do in Perl, but in a way that seems clean and concise. I won't dare talk ill of Perl, but I'm betting you know what I mean. diff --git a/_posts/2007-12-18-actionwebservice-on-rails-2.textile b/_posts/2007-12-18-actionwebservice-on-rails-2.textile index afc6272..2d5a3fb 100644 --- a/_posts/2007-12-18-actionwebservice-on-rails-2.textile +++ b/_posts/2007-12-18-actionwebservice-on-rails-2.textile @@ -3,8 +3,6 @@ layout: post title: ActionWebService on Rails 2 --- -h1. {{ page.title }} - Well, I can't just say _nothing_ about the recent release of Rails 2 _(.0.2)_, right? One of the apps I'm working on uses a SOAP web service. I know, how old skool. As you have likely read, "ActionWebService (AWS) has been ousted from rails core.":http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done diff --git a/_posts/2008-01-06-quick-book-thoughts-presentation-zen.textile b/_posts/2008-01-06-quick-book-thoughts-presentation-zen.textile index 85257bd..3408299 100644 --- a/_posts/2008-01-06-quick-book-thoughts-presentation-zen.textile +++ b/_posts/2008-01-06-quick-book-thoughts-presentation-zen.textile @@ -3,8 +3,6 @@ layout: post title: Quick Book Thoughts - Presentation Zen --- -h1. {{ page.title }} - I've been anticipating the release of "Presentation Zen":http://www.amazon.com/Presentation-Zen-Simple-Design-Delivery/dp/0321525655/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1199680549&sr=8-1 by "Garr Reynolds":http://www.presentationzen.com/ for a few months now. My copy arrived on Friday, the first of three days without electricity due to a bit of a storm we've had out here in Northern California. The book was fun to read in all respects and the design of the book itself, along with the presentation samples inside, are truly elegant. diff --git a/_posts/2008-01-26-troubleshooting-tips.textile b/_posts/2008-01-26-troubleshooting-tips.textile index c6259c5..4ae19c0 100644 --- a/_posts/2008-01-26-troubleshooting-tips.textile +++ b/_posts/2008-01-26-troubleshooting-tips.textile @@ -3,8 +3,6 @@ layout: post title: Troubleshooting Tips --- -h1. {{ page.title }} - Troubleshooting a software issue can be at once fun and frustrating. We're elated when the problem is solved (or at least, understood), but the methodical process of troubleshooting can be as much familiar as frantic. Here are a few troubleshooting tips we all probably know, but need reminding of from time to time: diff --git a/_posts/2008-03-06-news-traveling-around-the-internets.textile b/_posts/2008-03-06-news-traveling-around-the-internets.textile index d0a7b6a..d15b69f 100644 --- a/_posts/2008-03-06-news-traveling-around-the-internets.textile +++ b/_posts/2008-03-06-news-traveling-around-the-internets.textile @@ -3,8 +3,6 @@ layout: post title: News traveling around the internets --- -h1. {{ page.title }} - A few interesting tidbits came across the many diverse and often redundant news sources I pay attention to lately. It occurred to me that there is somewhat of a natural flow to information these days. First, some event occurs, then somebody tweets about it.. and so on it goes. It takes a bit of time to jump from one medium to the next, and the accuracy tends to wane while the audience grows. Here is how I see it: diff --git a/_posts/2008-03-18-google-calendar-sync-doesntgoogle-calendar-sync-doesnt.textile b/_posts/2008-03-18-google-calendar-sync-doesntgoogle-calendar-sync-doesnt.textile index 38774fa..503baeb 100644 --- a/_posts/2008-03-18-google-calendar-sync-doesntgoogle-calendar-sync-doesnt.textile +++ b/_posts/2008-03-18-google-calendar-sync-doesntgoogle-calendar-sync-doesnt.textile @@ -3,8 +3,6 @@ layout: post title: Google Calendar Sync Doesn't --- -h1. {{ page.title }} - Many folks were near jubilation when Google "announced Google Calendar Sync":http://googleblog.blogspot.com/2008/03/google-calendar-sync.html. It's a windows application that lives in the dock that handles the chaos involved in syncing two calendars, not to mention dealing with Exchange. Unfortunately, for business users the _hoorah!_ did not last very long. Users will need to pay special attention when reading the "known issues":http://www.google.com/support/calendar/bin/static.py?page=known_issues.cs to find: diff --git a/_posts/2008-03-24-quick-book-thoughts-the-back-of-the-napkin.textile b/_posts/2008-03-24-quick-book-thoughts-the-back-of-the-napkin.textile index 31d5b98..f9c61c1 100644 --- a/_posts/2008-03-24-quick-book-thoughts-the-back-of-the-napkin.textile +++ b/_posts/2008-03-24-quick-book-thoughts-the-back-of-the-napkin.textile @@ -3,8 +3,6 @@ layout: post title: Quick Book Thoughts - The Back of the Napkin --- -h1. {{ page.title }} - With a densely populated landscape of business books out there, it's nice to see something truly unique. "Solving problems and selling ideas with pictures", reads the apt subtitle of this napkin-shaped, unassuming book that may finally be what you've been looking for. "Dan Roam":http://digitalroam.com/ has written a fun and frank book about ideating through business ideas using visual methods. Dan focuses on the _communication_ aspect of problem solving, using simple yet surprisingly impactful techniques for expressing ideas in ways that ensure everybody "gets it". diff --git a/_posts/2008-05-06-soap-headers-per-request-in-ruby.textile b/_posts/2008-05-06-soap-headers-per-request-in-ruby.textile index 6f12603..4498de0 100644 --- a/_posts/2008-05-06-soap-headers-per-request-in-ruby.textile +++ b/_posts/2008-05-06-soap-headers-per-request-in-ruby.textile @@ -3,8 +3,6 @@ layout: post title: Supporting unique headers per SOAP request in soap4r --- -h1. {{ page.title }} - "soap4r":http://dev.ctor.org/soap4r is a SOAP implementation in Ruby. If you're writing a SOAP client in Ruby (with or without Rails), soap4r is great. Until it isn't. Since this is a rather specific use case that I'm solving for, I'll assume that you have some experience using soap4r. *Headers* diff --git a/_posts/2008-05-22-connecting-to-oracle-from-ruby-on-rails.textile b/_posts/2008-05-22-connecting-to-oracle-from-ruby-on-rails.textile index 0ed7fad..746d4eb 100644 --- a/_posts/2008-05-22-connecting-to-oracle-from-ruby-on-rails.textile +++ b/_posts/2008-05-22-connecting-to-oracle-from-ruby-on-rails.textile @@ -3,8 +3,6 @@ layout: post title: Connecting to Oracle from Ruby on Rails --- -h1. {{ page.title }} - When Rails 2 was "initially announced":http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done, we heard that commercial database adapters would be maintained outside of rails core.
The commercial database adapters now live in gems that all follow the same naming convention: activerecord-XYZ-adapter. So if you gem install activerecord-oracle-adapter, you’ll instantly have Oracle available as an adapter choice in all the Rails applications on that machine. You won’t have to change a single line in your applications to take use of it. diff --git a/_posts/2008-06-10-deep-send-how-to-wrangle-with-large-object-graphs-and-come-out-alive.textile b/_posts/2008-06-10-deep-send-how-to-wrangle-with-large-object-graphs-and-come-out-alive.textile index 1a645f0..6e67e30 100644 --- a/_posts/2008-06-10-deep-send-how-to-wrangle-with-large-object-graphs-and-come-out-alive.textile +++ b/_posts/2008-06-10-deep-send-how-to-wrangle-with-large-object-graphs-and-come-out-alive.textile @@ -3,8 +3,6 @@ layout: post title: Deep Send --- -h1. {{ page.title }} - h3. or, How to wrangle with large object graphs and come out alive In a perfect world, all of our objects are small, orderly and well defined. They encapsulate data that is semantically obvious and easy to work with. And then... in an obvious homage to "Jack Handey":http://en.wikipedia.org/wiki/Jack_Handey, we attack that world with large, complex and ugly object graphs, mostly the result of monolithic integration technologies like SOAP. diff --git a/_posts/2008-08-14-new-gem-rails_framework_diff.textile b/_posts/2008-08-14-new-gem-rails_framework_diff.textile index dc8943c..46eebcf 100644 --- a/_posts/2008-08-14-new-gem-rails_framework_diff.textile +++ b/_posts/2008-08-14-new-gem-rails_framework_diff.textile @@ -3,8 +3,6 @@ layout: post title: New gem - rails_framework_diff --- -h1. {{ page.title }} - It started on twitter:
It's amazing how hard it is to find problems when caused by developers incorrectly modifying framework-generated files. - "Chad Fowler":http://twitter.com/chadfowler/statuses/885401839 diff --git a/_posts/2008-09-03-statulous-how-getting-fit-somehow-still-involves-programming.textile b/_posts/2008-09-03-statulous-how-getting-fit-somehow-still-involves-programming.textile index 89e60dd..501696f 100644 --- a/_posts/2008-09-03-statulous-how-getting-fit-somehow-still-involves-programming.textile +++ b/_posts/2008-09-03-statulous-how-getting-fit-somehow-still-involves-programming.textile @@ -3,8 +3,6 @@ layout: post title: statulo.us - how getting fit somehow still involves programming --- -h1. {{ page.title }} - First, "David Heinemeier Hansson":http://loudthinking.com/ spoke of "the surplus":http://railsconf.blip.tv/#1170044. Spend it on yourself, he said. Invest in you. What does that mean to you? How do you interpret that? Jamis got into woodworking. Somebody else is playing the banjo. The ukulele perhaps? "Get out of your editor", David said, and I somehow quickly forgot about that part. diff --git a/_posts/2008-09-08-transparency-responsibility-accountability.textile b/_posts/2008-09-08-transparency-responsibility-accountability.textile index 3f4b4eb..fede692 100644 --- a/_posts/2008-09-08-transparency-responsibility-accountability.textile +++ b/_posts/2008-09-08-transparency-responsibility-accountability.textile @@ -3,8 +3,6 @@ layout: post title: Transparency, Responsibility, Accountability --- -h1. {{ page.title }} - "Kent Beck":http://www.google.com/search?hl=en&q=kent+beck speaking at RailsConf 2008. I think this is the most interesting and poignant presentation of the year.

diff --git a/_posts/2008-09-19-new-gem-greatest_common_factor.textile b/_posts/2008-09-19-new-gem-greatest_common_factor.textile index 670174f..a758ea9 100644 --- a/_posts/2008-09-19-new-gem-greatest_common_factor.textile +++ b/_posts/2008-09-19-new-gem-greatest_common_factor.textile @@ -3,8 +3,6 @@ layout: post title: New gem - greatest_common_factor --- -h1. {{ page.title }} - Ruby already provides the ability to find the greatest common factor (gcf) of two integers. What if we could determine the greatest common factor across a whole array of integers? Now we can. I've just released "greatest_common_factor on github.":http://github.com/briandoll/greatest_common_factor/tree/master diff --git a/_posts/2008-11-28-quick-and-easy-cache-rss-feeds-rails.textile b/_posts/2008-11-28-quick-and-easy-cache-rss-feeds-rails.textile index 58da122..3e95e9f 100644 --- a/_posts/2008-11-28-quick-and-easy-cache-rss-feeds-rails.textile +++ b/_posts/2008-11-28-quick-and-easy-cache-rss-feeds-rails.textile @@ -3,8 +3,6 @@ layout: post title: Quick and Easy - Cache RSS feeds in your Rails app --- -h1. {{ page.title }} - Displaying a feed within your Rails app is pretty easy. It turns out caching that RSS feed is pretty easy too. I recently added cached RSS feeds to an app and had a few tiny hoops to jump through, so I thought I'd document them here for anyone else looking to solve the same problem. Caching is easy. Cache invalidation is hard. For an RSS feed, we'd have to ping the feed to determine if any data had changed. Why bother? Instead of fetching the RSS feed on every single page request, let's cache it for a fixed period of time. diff --git a/_posts/2008-12-13-train-to-not-suck-at-life.textile b/_posts/2008-12-13-train-to-not-suck-at-life.textile index b73e0e2..12ef97b 100644 --- a/_posts/2008-12-13-train-to-not-suck-at-life.textile +++ b/_posts/2008-12-13-train-to-not-suck-at-life.textile @@ -3,7 +3,6 @@ layout: post title: Train to not suck at life --- -h1. {{ page.title }} In an early edition of the "CrossFit Journal":http://journal.crossfit.com, Coach Glassman talks about the "foundations of CrossFit":http://www.crossfit.com/cf-download/Foundations.pdf (pdf):
diff --git a/_posts/2009-01-12-clean-eating-how-I-make-it-work.textile b/_posts/2009-01-12-clean-eating-how-I-make-it-work.textile index 1489911..1efa561 100644 --- a/_posts/2009-01-12-clean-eating-how-I-make-it-work.textile +++ b/_posts/2009-01-12-clean-eating-how-I-make-it-work.textile @@ -3,7 +3,6 @@ layout: post title: Clean Eating, How I make it work --- -h1. {{ page.title }} h2. "But I already eat healthy!" diff --git a/_posts/2009-04-20-Golden-Gate-Ruby-Conference.textile b/_posts/2009-04-20-Golden-Gate-Ruby-Conference.textile index b6109b2..ae71686 100644 --- a/_posts/2009-04-20-Golden-Gate-Ruby-Conference.textile +++ b/_posts/2009-04-20-Golden-Gate-Ruby-Conference.textile @@ -3,8 +3,6 @@ layout: post title: Golden Gate Ruby Conference --- -h1. {{ page.title }} - "GoGaRuCo":http://gogaruco.com/ was a huge success by any measure. "Josh Susser":http://blog.hasmanythrough.com/ first mentioned his idea for a local Ruby conference during a "San Francisco Ruby Meetup":http://www.meetup.com/sfruby/ a year ago or so. This past weekend 200 rubyists gathered at the "Swedish American Hall":http://www.cafedunord.com/?page=directions ready for "18 presentations":http://gogaruco.com/schedule/ and lots of break time in between to hang out and hack. "Pivotal Labs":http://pivotallabs.com/, a sponsor of the event, provided live video coverage ("video available soon":http://pivotallabs.com/gogaruco/talks) and live-blogged every talk. Instead of rehashing each presentation, I wanted to collect my thoughts on the presentations that I liked the most. diff --git a/_posts/2009-05-02-automated-user-acceptance-testing.textile b/_posts/2009-05-02-automated-user-acceptance-testing.textile index 41b3860..d792260 100644 --- a/_posts/2009-05-02-automated-user-acceptance-testing.textile +++ b/_posts/2009-05-02-automated-user-acceptance-testing.textile @@ -3,8 +3,6 @@ layout: post title: Is there such a thing as free automated user acceptance testing? --- -h1. {{ page.title }} - "User acceptance testing":http://en.wikipedia.org/wiki/Acceptance_testing#User_acceptance_testing is a big milestone in software development, regardless of the methodology in use. At this stage, the customer (business analyst, system owner, client, etc.) is determining if the feature that's been developed actually matches their needs. To perform acceptance testing on web-based applications, people tend to fire up their browser and click around until they feel confident that things are working as expected. Tests like these are very coarse grained. Unlike a "unit test":http://en.wikipedia.org/wiki/Unit_testing, where specific small components are tested in isolation, an acceptance test requires all the various moving parts to work together perfectly. Even when your unit test suite runs perfectly, that's no guarantee that the entire application stack is performing as expected. However, when an acceptance test fails, you know something is wrong. It also requires much more work to locate the exact issue, since there may be many moving parts that are working together in support of a particular feature. diff --git a/_posts/2009-05-19-always-a-student.textile b/_posts/2009-05-19-always-a-student.textile index 85b7a86..8526f81 100644 --- a/_posts/2009-05-19-always-a-student.textile +++ b/_posts/2009-05-19-always-a-student.textile @@ -3,8 +3,6 @@ layout: post title: Always a student --- -h1. {{ page.title }} - "You're like a student of this stuff", he said. I thanked him, realizing that it was one of the greatest compliments I had ever received. I never felt the urge to pursue an advanced degree; my associates degree in _visual communications_ was hardly a deep dive into academia. Instead, I have always felt a constant need to learn on my own. In a way, I'm a life-long student of everything that I find interesting. I'm always surprised, then, to meet people interested in a topic, but never actually learning much about it. "I was never given the opportunity" or "My company never paid for that training course" are poor excuses. The act of learning something can be different from person to person. Some people can learn a lot just by reading, others learn best by seeing and doing. Any way you slice it, you too can become an "autodidact":http://en.wikipedia.org/wiki/Autodidact, you just need to have the right perspective on learning. diff --git a/_posts/2009-09-06-the-rules-of-software-deployment.textile b/_posts/2009-09-06-the-rules-of-software-deployment.textile index 2f9d414..fa12528 100644 --- a/_posts/2009-09-06-the-rules-of-software-deployment.textile +++ b/_posts/2009-09-06-the-rules-of-software-deployment.textile @@ -3,8 +3,6 @@ layout: post title: The rules of software deployment --- -h1. {{ page.title }} - Any sufficiently complex software application will require a well thought-out deployment strategy. While a basic deployment strategy is quite suitable for a basic application, many applications require careful orchestration of interdependent systems to make for a successful release. For example, a web application may need to consider: source code, configuration files, content management data, application data, user data, cached data, search indexes, content delivery networks, background jobs, system monitoring tools, external services and APIs, as well as the user experience during the release process. No matter how seemingly simple or complex your application is, there are a number of rules that should be followed. These rules apply regardless of language, release schedule, SCM, deployment toolset or infrastructure. diff --git a/_posts/2009-10-01-multiple-assertion-failures-per-test.textile b/_posts/2009-10-01-multiple-assertion-failures-per-test.textile index a3bb645..756e611 100644 --- a/_posts/2009-10-01-multiple-assertion-failures-per-test.textile +++ b/_posts/2009-10-01-multiple-assertion-failures-per-test.textile @@ -3,8 +3,6 @@ layout: post title: Allowing multiple failed assertions per test --- -h1. {{ page.title }} - h3. One assertion per test This is a very common TDD guideline. Jay Fields posted "a good summary of why he feels one assertion per test is a good practice":http://blog.jayfields.com/2007/06/testing-one-assertion-per-test.html. If you read closely, however, you can see that the main reasons Jay doesn't like multiple assertions per test is that the feedback provided from the test suite is usually poor. diff --git a/_posts/2009-11-23-has_many_through_across_databases.textile b/_posts/2009-11-23-has_many_through_across_databases.textile index 8f74a0d..9d4cfd7 100644 --- a/_posts/2009-11-23-has_many_through_across_databases.textile +++ b/_posts/2009-11-23-has_many_through_across_databases.textile @@ -3,8 +3,6 @@ layout: post title: has_many :through across multiple databases in Rails --- -h1. {{ page.title }} - h3. A tale of two databases Web applications usually start out so simply, yet so few of them stay that way for long. Some applications grow to utilize multiple databases, for instance. Perhaps your an eCommerce site that has a different database for your catalog and transactional data. "In Rails, we can do this pretty easily.":http://jonathansng.com/ruby-on-rails/multiple-database-connections-with-rails/ diff --git a/_posts/2009-12-05-lean-software-engineering-a-progression-toward-kanban.textile b/_posts/2009-12-05-lean-software-engineering-a-progression-toward-kanban.textile index 1760434..1d5eae7 100644 --- a/_posts/2009-12-05-lean-software-engineering-a-progression-toward-kanban.textile +++ b/_posts/2009-12-05-lean-software-engineering-a-progression-toward-kanban.textile @@ -3,10 +3,6 @@ layout: post title: Lean Software Engineering - My progression toward Kanban --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- h3. In the beginning, there was... _Nothing_. That's right. I'll bet that long before many of us suffered "the waterfall model":http://en.wikipedia.org/wiki/Waterfall_model we first suffered from the lack of any process at all. As a maker of things, having no defined process can feel wonderful and free at first. In hindsight, many have called this "cowboy coding":http://en.wikipedia.org/wiki/Cowboy_coding but it's actually worse than that. Cowboy coding sounds romantic. A man or woman on their horse, acting on any whim that strikes them, as hedonistic as they want to be. In reality, having no process, no schedule, and basically no rules leads to nothing more than horse shit. No maker wants that. diff --git a/_posts/2009-12-27-favorite-books-of-2009.textile b/_posts/2009-12-27-favorite-books-of-2009.textile index 15a7307..6fcde1b 100644 --- a/_posts/2009-12-27-favorite-books-of-2009.textile +++ b/_posts/2009-12-27-favorite-books-of-2009.textile @@ -3,10 +3,6 @@ layout: post title: My favorite books from 2009 --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- It looks like I made my way through about 35 books in 2009. I've never actually evaluated how much I've read before, but it felt like a fairly good year for page turning. Some books were pretty forgettable without the help of browsing through my Amazon order history, but a few really stood out as major influences throughout the year. So here they are... my favorite books from this year: diff --git a/_posts/2010-02-09-people-not-process-the-soul-of-agile.textile b/_posts/2010-02-09-people-not-process-the-soul-of-agile.textile index 0e67e7d..3c69dee 100644 --- a/_posts/2010-02-09-people-not-process-the-soul-of-agile.textile +++ b/_posts/2010-02-09-people-not-process-the-soul-of-agile.textile @@ -3,10 +3,6 @@ layout: post title: People, not process, is the soul of "agile" --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- I've been guilty of it myself. I even "wrote about it recently":http://emphaticsolutions.com/2009/12/05/lean-software-engineering-a-progression-toward-kanban.html. Working in an "agile" environment seems to bring out the tinkerer in all of us. Not only do we get to devise new and interesting techniques in the software we build, but with a focus on "agile" methodologies, we get to tweak and shape and adjust and hone the _process_ of _how_ we build our software too. In a sense, "agile" is an excuse to for endless "yak shaving":http://catb.org/esr/jargon/html/Y/yak-shaving.html. h2. _Individuals and interactions over processes and tools_ diff --git a/_posts/2010-02-16-the-dangers-of-url_for-in_rails_apps.textile b/_posts/2010-02-16-the-dangers-of-url_for-in_rails_apps.textile index 12d7d5d..295bf78 100644 --- a/_posts/2010-02-16-the-dangers-of-url_for-in_rails_apps.textile +++ b/_posts/2010-02-16-the-dangers-of-url_for-in_rails_apps.textile @@ -3,10 +3,6 @@ layout: post title: The dangers of url_for in Rails applications --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- In a great post about "named routes in Rails, path vs. url":http://www.viget.com/extend/rails-named-routes-path-vs-url/, Viget Labs ponders which variant is best used. Most often we use foo_path, which when used in Rails URL helpers will generate a relative path, where foo_url generates a full URL. In most cases the path makes most sense, but not always. diff --git a/_posts/2010-02-20-rit-the-anti-CMS-content-scheduling-system-in-Rails.textile b/_posts/2010-02-20-rit-the-anti-CMS-content-scheduling-system-in-Rails.textile index 64b773b..69436e5 100644 --- a/_posts/2010-02-20-rit-the-anti-CMS-content-scheduling-system-in-Rails.textile +++ b/_posts/2010-02-20-rit-the-anti-CMS-content-scheduling-system-in-Rails.textile @@ -3,10 +3,6 @@ layout: post title: Rit. - The anti-CMS content scheduling system in Rails --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- You have a web app. Your marketing folks would like to update some site content. You need a content management system, right? Probably not. If you're building a cute little website for the bakery down the street that needs to occasionally update prices, go get yourself that fancy CMS. If you'd like a Rails-based CMS, go ahead and use "Radiant":http://radiantcms.org/. As they say, _Radiant is a no-fluff, open source content management system designed for small teams._ diff --git a/_posts/2010-06-06-twitever-a-workflow-for-twitter-and-evernote.textile b/_posts/2010-06-06-twitever-a-workflow-for-twitter-and-evernote.textile index 2e0b49b..1631fe0 100644 --- a/_posts/2010-06-06-twitever-a-workflow-for-twitter-and-evernote.textile +++ b/_posts/2010-06-06-twitever-a-workflow-for-twitter-and-evernote.textile @@ -3,10 +3,6 @@ layout: post title: Twitever - A workflow for Twitter and Evernote --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- I fell in love with Evernote as soon as I started using it. Like any nerd, I come across a dizzying amount of information during a typical day. I would often find a really interesting article or blog post I wanted to read at inconvenient times. Evernote let me stash away all this great information into what they refer to our "online brain" and come back to it later. I can search it, tag it or find stuff by date. It's awesome. For me, the primary source for finding great stuff to read online comes from Twitter. I'd see posts from people throughout the day, linking to something that sounded interesting. I would click on the link, opening it in my browser, and use an Evernote browser plugin to create a note from that webpage and stick it into Evernote. diff --git a/_posts/2010-06-07-get-fit-to-win.textile b/_posts/2010-06-07-get-fit-to-win.textile index fa025ad..b95899d 100644 --- a/_posts/2010-06-07-get-fit-to-win.textile +++ b/_posts/2010-06-07-get-fit-to-win.textile @@ -3,10 +3,6 @@ layout: post title: Get Fit to Win! --- -h1. {{ page.title }} - -
{{ page.date | date(page.date,'%B %Y') }}
- "Ignite":http://ignite.oreilly.com/ is an intense, addicting and inspired format of sharing ideas in a very short time. The tagline for any Ignite event is: "Inspire us, but be quick about it!" I was honored to have "my proposal":http://igniterailsconf.com/speakers/365 selected for the first annual "IgniteRailsConf":http://www.igniterailsconf.com/ event this year. I wanted to share with my fellow nerds that physical fitness is important, is not out of reach for anyone, and to help inspire them toward their own fitness goals. diff --git a/archive.html b/archive.html new file mode 100644 index 0000000..d956ec2 --- /dev/null +++ b/archive.html @@ -0,0 +1,9 @@ +--- +layout: default +title: Brian Doll - emphatic solutions +--- + +{% for post in site.posts %} +
{{ post.title }}
+
{{ post.date | date(post.date,'%B %Y') }}
+{% endfor %} \ No newline at end of file diff --git a/css/base.css b/css/base.css index 81f3d41..a6b8c5b 100644 --- a/css/base.css +++ b/css/base.css @@ -87,12 +87,26 @@ h1 { color: #1C7DB2; } +.big-index { + color: #FF4500; + font-size: 24px; + font-weight: 700; +} + +h1 a { + color: #1C7DB2; +} + h2 { font-size: 20px; font-weight: 700; color: #1C7DB2; } +h2 a { + color: #1C7DB2; +} + .talk-title { font-size: 14px; font-weight: 700; diff --git a/index.html b/index.html index 7253ba4..3587f74 100644 --- a/index.html +++ b/index.html @@ -2,8 +2,39 @@ layout: default title: Brian Doll - emphatic solutions --- -{% for post in site.posts %} + +
+
Latest writing:
+ {% for post in site.posts limit: 7 %}
{{ post.title }}
{{ post.date | date(post.date,'%B %Y') }}
-{% endfor %} + {% endfor %} +
+ +
+

The Treasure Trove: Archive of less-recent musings...

+
+ +
+
Upcoming and Recent Talks:
+
+
Rit. – The anti-CMS content scheduling system in Rails
+
San Francisco and East Bay Ruby Meetup : June 15, 2010
+
+ +
+
What should we work on next?
+
RailsConf : June 8, 2010
+
+ +
+
Get fit to win!
+
Ignite RailsConf : June 6, 2010
+
+ + +
+
\ No newline at end of file diff --git a/talks.html b/talks.html index ac6f647..cd7554f 100644 --- a/talks.html +++ b/talks.html @@ -3,50 +3,41 @@ title: Brian Doll - emphatic solutions --- -

Upcoming Presentations

+

Upcoming / Recent Presentations

-
Get fit to win!
-
Ignite RailsConf
-
June 6, 2010
+
Rit. – The anti-CMS content scheduling system in Rails
+
San Francisco and East Bay Ruby Meetup : June 15, 2010
-

-
What should we work on next? Tuning apps without getting bogged down in maintenance
-
RailsConf
-
June 8, 2010
+
What should we work on next?
+
RailsConf : June 8, 2010
-

-
Rit. – The anti-CMS content scheduling system in Rails
-
San Francisco and East Bay Ruby Meetup
-
June 15, 2010
+
Get fit to win!
+
Ignite RailsConf : June 6, 2010
-

-

Recent Presentations

+
+
Shining New Light on Solr Performance
+
Online with Lucid Imagination: June 2010
+
-
Developing and Implementing Search Strategies Specifically for E-Commerce Sites
-
Hosted by Lucid Imagination
- -
April 2010
+
Developing and Implementing Search Strategies for E-Commerce
+
Online with Lucid Imagination: April 2010
-

-
Optimizing Solr for performance and User Experience
-
SFBay Apache Lucene/Solr Meetup
- -
January 2010
+
Optimizing Solr for performance and User Experience
+
SFBay Apache Lucene/Solr Meetup : January 2010
-

-
Optimizing Your Online Store for the Holidays
-
Hosted by New Relic and RailsLab
- -
September 2009
+
Optimizing Your Online Store for the Holidays
+
Online with New Relic and RailsLab : September 2009
+ +

Many of my presentations are also available on slideshare