MacSanta Is Back!

MacSanta

MacSanta is back again this year with some nice savings on great software for Mac OS X! Each day they have 20% off deals on a subset of the software in their extended list (which is all 10% off until December 24th). Just use the coupon code, MACSANTA07, at participating vendors.

Hurry over and scoop up those apps which you’ve always wanted! So far, I’ve purchased MarsEdit and Webnote Happy.

Advanced Ruby Studio

Back in July I attended the Advanced Ruby Studio in Reston, VA. At the time I had wanted to blog about it but my life suddenly became extremely busy and I left my blog to languish for several months. To rectify that, I’ve decided to write up this post providing an overview of the studio and my impressions. The instructors for the three day course were Dave Thomas and Chad Fowler, two elite Ruby programmers (and excellent teachers). While I wouldn’t consider every topic covered during the course advanced, I will say that there was a good mix of intermediate and advanced content (and some of the advanced stuff was really advanced!)

Day 1

  • Blocks, Procs, and Closures
  • Ruby Internals
  • Your Own Private Ruby
  • Design in a Dynamic Language
  • Types
  • Performance

Day 2

  • Metaprogramming
  • Creating Domain Specific Languages
  • Exotic Control Flow

Day 3

  • Library Organization
  • Distributed Programming
  • Debugging and Profiling
  • Ruby Extras

The first day we jumped right into blocks, procs, and closures. At first, I thought this would be primarily review for me, but Dave and Chad always provide those few extra tidbits which make it interesting. From there we delved into the Ruby source code and learned how to construct Ruby classes in C code and how to find our way around the Ruby source. “Your Own Private Ruby” covered how to build Ruby (with specific extensions) and how to manage multiple copies of Ruby on the same machine. There were so many goodies in the “Design in a Dynamic Language” portion of the day, I don’t want to ruin the experience for those who haven’t attended yet. The second day of the studio was my favorite, covering metaprogramming, DSLs, and control flow. There was so much material that it’s hard to do it justice in a short blog posting. The exercises/labs were integral to understanding the material and I’m glad the slides and source code were provided as they’ve turned out to be useful references to refer back to. The third day was the ‘choose your own adventure’ day where each of us voted on the topics for the day. Even though there seemed to be some interest in JRuby on the first day, that topic didn’t make the short list for the final day. Concurrency also fell by the way-side (though the slides provided contained more than enough material on Ruby threads). Distributed programming was largely review for me having played with DRb and the Rinda tuple space, though the discussion of multicast and the ease of dealing with binary protocol using pack/unpack was new and useful to me. The primary message regarding library organization is to follow the conventions set forth by Rails, though this was the portion of the class where we packaged our own gem and served it up to classmates. Debugging and profiling Ruby applications was partially review, having used benchmark, ruby-debug, and profiler. Yet, I had never thought to debug my Ruby applications using gdb even though I use it frequently at work to debug C/C++ applications. Mike and Nicole Clark really brought everything together. Their stewardship of the event made it truly remarkable (as they seem to do every time). Their goal is to ensure that every single attendee has a wonderful time and they appear to be willing to do whatever it takes to make it so. Next time you’re at one of their events be sure to thank them for their diligence. Overall, I found the course to be of tremendous value as it got me thinking about even more ways to use Ruby. The insight that Chad and Dave provided was integral to unlocking the reasoning behind the design of the language. As is true with all of the Pragmatic Studio offerings I’ve attended, this class reinvigorated me and left me energized to tackle more projects. For those who have never been to a Pragmatic Studio event before, one of the best alumni benefits is the mailing list you’re able to join afterwards — the signal to noise ratio is extremely high. Now, if only I could convince my employer to send me four or five times a year.

A Tasty Treat for Your Mac

The folks over at Aquafadas are running a promotion entitled, “Give Good Food to Your Mac.” It’s a very sweet deal as you get to choose from 28 different Mac OS X apps and the more you purchase the bigger the discount. If you purchase three apps, you get a 30% discount, 40% for five, 50% for seven and 70% for ten.

Here’s a little hint, pick the five apps you really want (even if they are the most expensive apps available). This will start you off with a 40% discount for the apps you want. Then pick the two cheapest apps — once this brings your discount up to 50%, the total will probably be less than it was without those two apps (unless you’ve only been choosing the cheapest apps). Finally, pick the next three cheapest apps — you should end up with ten apps for a total cost which was less than price of your original five! You’re getting the five apps you want, plus another five free and then they’ll throw in another app at check out (for me it was Postino, a feed reader — I’m not sure if they give the same bonus app away to everyone or not).

This great deal is time limited and ends on December 9th, so get on over there and scoop up some great Mac apps.

The full list of apps can be found after the jump.

  • Remote Buddy – Remote control your apps using Bluetooth hardware (iPhone, iPod Touch, Wii Remote, etc).
  • Personal Trader – Manage your stock portfolio.
  • CoverScout
    • Find iTunes art work anywhere on the web.
  • Magnet – Customize and share movies.
  • Morphage – Morph/warp images and movies.
  • iDive – Manage video and DV clips and integrate with iMovie and Final Cut Pro.
  • Expert Wine Cellar – Manage your wine collection, pairings, and preferences.
  • iStopMotion Home – Easy to use stop motion animation software.
  • Cheetah3D – 3D modeling, rendering, and animation package.
  • BannerZest – Create Flash banners easily (Flash not required).
  • VideoPier – Visualize clips from your camera that Quicktime would refuse to open.
  • PulpMotion – Presentation software.
  • CSSEdit – Easy to use CSS editor for web developers.
  • Contactizer Pro – Solution for managing, sharing and organizing your personal and business information.
  • Contactizer Express
    • Solution for managing, sharing and organizing your personal information.
  • Geophoto – Organize and browse your photos by location.
  • Merlin – Project management software.
  • RapidWeaver
    • Web design software.
  • Freeway 4 Express – Web design software.
  • Freeway 4 Pro – Web design software.
  • Money – Organize and manage your personal finances.
  • Art Text – A tool for creating textual graphics, headings, logos, icons, web banners and buttons.
  • FotoMagico Express – Slideshow creator.
  • Feeder – App for creating, editing and publishing RSS feeds.
  • Together – Keep your documents, images, movies, bookmarks and web pages in one place, preview them, and organize them.
  • Pixelmator – Image editor.
  • Tables – Spreadsheet.
  • Unity Indie – Easy to use multiplatform game development tool.

In Space No One Can Hear You Blog

My how time has flown. It’s been four months and a day since I last blogged and I need to get back to it. By now I’ve probably lost all of my subscribers and NetNewsWire doesn’t even recognize it as a dinosaur (I guess that means my blog’s turned into oil — yay for me with it nearing $100/barrel). I have several unfinished posts stuck here in WordPress and several more rattling around in my head. For those of you who are still hanging around, here are some of the topics:

  • The Advanced Ruby Studio (I attended this back in July).
  • How to distribute your Ruby app without giving away your source code.
  • Performance tuning a networking application (in C).
  • Developing for mobile phones (specifically the iPhone and Google’s Android).
  • Game programming in Ruby (with and without Rails).
  • Interviewing technical candidates.
  • Startups.
  • Book reviews.

July NoVA RUG

This past Wednesday we held the July Northern VA Ruby Users Group. We started off with two short talks, first by Patrick Reagan on two mocking libraries for Ruby (Flexmock and Mocha), the second was on Haml and Sass by Devin Mullins. For the final hour of the meeting, Matt Scilipoti spoke about using Rails with legacy databases. Patrick’s talk, entitled “Mockfight! Flexmock vs Mocha”, provided a nice overview of both libraries and several examples comparing the libraries side-by-side. From the title, I thought Patrick would be able to declare a clear winner but since both libaries try to maintain feature parity they are essentially equivalent. My main takeaway from the presentation was the benefit of using a mocking library in your tests to bypass expensive or dangerous code paths. Devin eschewed slides in favor of a live coding session where he converted Rails scaffold generated eRB (rhtml) to haml. Personally, I don’t like haml markup even though it is definitely more concise than XHTML with eRB. When I develop, I like to be able to view my template files in the browser, so I’d like to be able to go in the other direction where my views are completely XHTML, perhaps something closer to Java’s Tapestry (without the XML descriptor files). Here’s an example comparing eRB vs haml:


<h2>Welcome to our site!</h2> <p> <%= print_information %> </p> </div>
<%= render :partial => “sidebar” %> </div> </div> #content .left.column %h2 Welcome to our site! %p= print_information .right.column= render :partial => “sidebar”


Matt’s talk on working with legacy databases was the final presentation of the evening. He used the Takahashi Method of presenting and ripped through his slides quickly. The first part covered the issues he encountered trying to build a Rails app around his legacy database and all of the false starts he made trying to override the opinions of Rails. One of the approaches he discussed which looked promising but turned out to be too much trouble in the end were database views. Using views he could overlay his own view on a table and remap it to conform to the Rails conventions, unfortunately this turned out to be a very leaky abstraction — for example he had to maintain the id fields manually. His finaly solution involved writing a plugin which handles the transformations between what Rails expects and how the database is actually implemented. He is planning on releasing this though he hasn’t settled on a name for his plugin yet (some suggestions were: acts_as_rails, acts_as_greenfield, etc). He also mentioned that he doesn’t have to deal with composite keys so he doesn’t plan on supporting them out of the gate. Though like all open source projects, contributions are welcome, so if you need this functionality give Matt a hand. Next month’s meeting will be on August 22 and Rodney Degracia will be presenting on the Ruby CLR for .NET.