Granted, I have not done a ton of personal research on this problem, but I have looked around a bit…anyhow, here is the problem:

My company is 100% Mac, except for our debian-based production environment. We are all running iCal to manage our milestones and meetings, but its really an adhoc solution, not as integrated as say…Exchange calendaring. I do know for a fact that there is an iCal Server, but I don’t really think its feasible to think I will be investing in an xserve + OS X server just to get my company a unified calendar.

Are there Unix-based solutions out there I can install on one of my Debian servers? I haven’t found anything very specific. I know that WebDav plays a part in all of this, is it just so elementary that there is no direct “solution” ?

Curious to see what others have done in this situation.

I don’t really have the stones to run “edge” rails, but I try to keep up to date with all of the stable releases wherever it makes sense to. As many know, Rails 2.1 was just released with a host of new, severely awesome, features (like named_scopes, better support for third-party VMs, etc.), but edge already has some intereging functionality that makes me look forward to 2.2. Here is some of the highlights that interest me:

#link_to has new block functionality

Say you had a block of HTML you wanted to wrap an anchor around. there wasn’t a very acceptable way to do this using link_to, you’d have to do something like this to utilize it:

1
2
3
4
<a href="<%= url_for :controller => 'users', :action => 'view', :id => @user %>">
<strong>Click this to view the user</strong>
<em>this is more text that I want to be in the link</em>
</a>

I absolutely hate the idea of having brackets inside of brackets. That just looks, hell it smells wrong! This feature is awesome because it prevents you from writing REALLY ugly code! Now you can just do this:

1
2
3
4
<%- link_to(:controller => "user", :action => "view", :id => @user) do %>
<strong>view this user</strong>
<em>more text here</em>
<%-end%>

That to me feels much more correct! Thanks to Sam Stephenson + DHH for this one.

String Inquirer

At first, I didn’t see much value to this feature, but after thinking about it for a bit, I can see its usefulness. Take a look at the example:

1
2
str = ActiveSupport::StringInquirer("awesome")
str.awesome? #=> true

Basically that new function saves you from manually writing this:

1
2
str = "awesome"
str == "awesome" ? true : false

Definitely a nice enhancement to the code, makes it much more readable. But, I don’t love the way you have to instantiate it, directly touching ActiveSupport that is. I’d prefer a syntax like “my string”.inquirize or something.

Along the lines of prettier code, we’ve also got the new Array#present? functionality which basically is a cleaner way of saying !Object#blank?

Declarative Block Syntax For Unit Testing

This is a very nice addition to the Test::Unit framework. A lot of people prefer RSpec over Test::Unit, but I prefer how close to the xUnit framework the syntax is. Anyhow, take a look at the old way to write unit test functions:

1
2
3
 def test_should_verify_user_logged_in
  assert_equal @user.is_logged_in?, true
 end

And now the new way to do things:

1
2
3
 test "should verify user is logged in" do
  assert_equal @user.is_logged_in?, true
 end

Its a subtle change, but, it makes the tests far more readable. I also like the move to a more DSL-esque syntax, rather than defining a bunch of functions.

All in all, the next Rails release continues to impress!

Drumset!

Filed Under life, music | 5 Comments

My birthday was Thursday, the 12th. My brother totally shocked me and bought me a drumset! Its a Gretsch Catalina Club set, which sounds absolutely awesome! I’ve never played a drumset that had such good tone. Its a simple 4 piece set (1 rack tom, 1 floor tom, bass drum, and a snare). I also got a decent set of Symbian cymbals (B8 series) which sound crisp and solid. The rest of the hardware came as a kit from PDP, it seemed pretty solid, and so far is holding up nicely.

This is definitely a fun kit, I am really excited because it seems our studio is basically completed now with the inclusion of this element! I am hoping this summer is going to be musical. It better be now! Now we’ve just got to figure out the best way to mic/record the set. Oh, and I should get a cowbell too :)

Mark the intern testing out the set!

I am really excited about Gears. Let me first start by clearing this up, Google has “opened” Gears, and removed their name from the application, so no, its not Google Gears, its just simply Gears. The big news for me in this release is the new support for Firefox 3! Although, I am going to be more excited when they support Safari. (They already support IE).

Whats so exciting about Gears? Its not simply a way to make your web applications run offline, its about empowering today’s web applications with tomorrow’s technology, literally. Someday, we’ll all be able to bask in the glory of HTML 5, with its data-persistence capabilities, SVG support, canvas support, etc etc. But, we all know how slow the world of browsers can be! Google has decided to step in and lend a hand.

Gearheads
Gears is all about enabling all browsers (including mobile browsers) with the features and capabilities of HTML5, without having to wait! Think of it like a browser plug-in that allows you to time travel to the future of web application development.

Not only is Gears providing these features, they are doing their absolute best to stay as close to the implementation specification as possible. They hope, that one day, you’ll be able to simply switch off your Gears libraries and all your code will run natively in the browser, no Gears needed. You can partially do this today, most of the data persistence specification is already baked into the latest versions of webkit, the Gears API is mirroring the exact same implementation to make “upgrading” to the native environment as easy as possible.

JavaScript “threading”
I say “threading”, because its not truly threading support, but Gears has the ability to provide your JavaScript applications with “worker pools” that allow for concurrent processing and better utilization of your computer processor, directly in the browser! There has also been talk of being able to make “runtime specific” worker pools so you can write JavaScript 2.0 code that will work, in browser!

Offline Support
Everyone pretty much gets the idea behind this one, it works well, but really, this is not a feature that I am very interested in providing through my web applications these days.

Desktop Shortcuts
The latest release of Gears (0.3) adds the ability to make a nice favicon-powered desktop shortcut with just a few lines of JavaScript, a neat little feature, especially if you are utilizing the offline support functionality.\
So, there is a little overview of some of the features I find most interesting about Gears. Wordpress has just recently began embracing the technology to increase the performance of their app (worker pools), and so has MySpace! MySpace is using Gears’ database persistence capabilities to offload full-text indexing, of the user’s inbox, to their native processing power, rather than having to create a cluster of DB servers, snazzy! If you want to learn more about Gears, check out the google code page.

I am about to roll out a new edition of a client’s site that has some pretty significant code changes, and we will also be upgrading their current server infrastructure. Our team would be interested in recording some raw stress metrics to see how it compares to our new roll out. Now, when I was on the Windows platform, there was a great tool that they released called WAST (Web Application Stress Tool) that I used pretty extensively. I have VMWare Fusion, so in theory I could use this if there are no alternatives, but I am going to be pretty shocked if there really are no alternatives.

So, what do you guys use?

Since I’ve been talking about Ruby VM’s lately, I thought it’d be interesting to bring up another “segway” technology that is being offered by my friends at Phusion: The Computer Science Company. They call it: Ruby Enterprise Edition. What makes it enterprise? Nothing really :), Its pretty much a marketing name, from what they told me. But, if you look behind the name, you’ll see some serious benefits to utilizing their edition of the Ruby runtime.

Highlights

Allows your Ruby on Rails applications to use 33% less memory on average, when used in combination with Phusion Passenger.

100% compatible with the official Ruby interpreter, version 1.8.6.

Well-tested and extremely stable.

Easy to install, either via a native Linux package or via the included installer.

Can be installed in parallel with regular Ruby. 100% self-contained, 0% installation risk!

The smart folks over at Phusion have improved the built-in Ruby garbage collector by 33%, and according to their benchmarks, its performance is quite substantial.

This edition of Ruby, in my mind, is more of an interim, “drop-in”, replacement until things like MagLev become more prevalent. While improving the garbage collector is definitely helping us in the performance arena, its still not addressing other core needs.

Regardless, as far as what my clients and services will be running in the next months? Passenger has proven itself time and time again to me (they are already to version 2.0 in under a month, amazing release too!), and with the integration of Phusion’s new Ruby interpreter, I can’t wait to see my apps soar!

My friend, Jeff Coughlin just turned me onto a new book “shelfing” service called Shelfari. This is one of those web applications that makes me absolutely love the internet. It is snappy, with the right amount of AJAX and social networking. Its got a perfect focus, and it executes its purpose with plenty of style. One negative thing I will say about it is the widget system is clunky and slow…but oh well, just visit my shelfari directly!

I even bit the bullet and installed the shelfari bookshelf app into my Facebook profile. I have been very anti-facebook apps since they came out, not because I don’t think the platform is interesting, but it clutters the facebook experience, in my opinion. But, whats one bookshelf gonna do? (famous last words, right?)

Feel free to add me as a friend if you sign up!

There is a lot of talk right now about Ruby/Rails and scalablility. People are watching Twitter fall on its ass due to its massive popularity. A lot of people seem to point the figure at their development team and say they obviously must have written bad code, or they’ve made bad design decisions somewhere in their code, etc. But why couldn’t it be Ruby? Could it be that we’ve finally seen the limits of Rails and Ruby on the web? I’d say its possible. So this begs the question, would Twitter be more scalable in a different language? What if it was written in ColdFusion? What if it was ported to the Google App Engine? Surely the Google stack can handle it, right? :)

Languages like Java, Smalltalk, .NET, etc. Boast virtual machines, which in most performance cases, tends to be what makes or breaks a language under load. There is a ton of discussion out there in the Ruby community about Ruby and virtual machines. We have projects like Rubinius, and MRI which are out to build a “drop in” replacements for the original Ruby runtime that provides all of the benefits and power of virtual machines for the language we love. The only downside is, these projects are green. Rubinius (according to lighthouse) is about 85% away from a 1.0 Preview release. I am not sure that Twitter is going to want to run on a preview codebase, so you can imagine its hard for it to be taken seriously by the “enterprise”. But, there is a contender that has recently come into the spotlight.

MagLev

MagLev is a Ruby VM based on the GemStone S64 VM, which runs Smalltalk. The Smalltalk VM has been extended with special byte codes to make it Ruby compatible. GemStone’s Smalltalk VM has been used for over 20 years in sectors such as real time financial markets and the worldwide shipping industry. It as a mature, fast, stable, distributed, and transactional data store which can hold over a trillion objects or 17PB (Petabytes) worth of information. The goal of the MagLev project is to bring this distributed object technology to the world of Ruby on Rails.

This caught my attention. We’ve got a VM coming that has been in use for over 20 years running Smalltalk! MagLev has proven reliability and its coming to Ruby and Rails! The burst of innovation that Ruby has been seeing in the last 5 or 6 years is really impressive. Now, we are seeing robust technologies come to the surface to help push this language into bigger and more robust markets, its only a matter of time until we’ve rid ourselves of that “but can it scale?” question.

I can only dream of my future application stack:

Thats a real dream team in my mind!

I stopped writing my thoughts down. I shouldn’t have stopped, the longer I waited to get back into writing, the more I neglected to want to touch my blog. I don’t know what happened exactly, things got really busy in my life, and I didn’t even have the time to write them down. That sucks. I need to let my life slow down a bit so I can take a moment to reflect now and then, don’t you agree? I’ve decided to burn down my old blog, and start a fresh one. I had some posts in the old blog I plan to backdate and re-post here, but the old blog had crappy URLs so I am not worried about them being “lost in the fire”. My old blog was also completely overrun with spam (seriously, Akismet, you suck, get better at life), hopefully that won’t happen again.

I’ve moved away from Silicon Valley, now I am living in Albany, CA, right next to Berkeley. My place is a lot smaller than the ones I’ve lived in before, but to be honest, the quaintness makes me feel a bit more comfortable, and its easier to maintain from week to week. I have a pretty killer view two, the cats love it.

I’ve also quit my old job, and started a company with my brother, Jason. That is probably the biggest reason why I drifted out of rhythm of writing. Our company is Panoctagon, we have an office in Berkeley, CA and we are doing interesting things these days. I don’t want to really get into what it is just yet, I will save that for other posts.

I’ve fallen in love with Ruby. Ruby is a fantastic language, I started toying with it about a year ago, and began reading more and more about it. The language provides you with levels of expression that you don’t see in many of the popular, mainstream languages. Dynamic programming languages have a lot of interesting paradigms, and I am sure I’ll be writing about that more often.

We’re building a studio. My brother and I are really into music and music creation, so we’ve crossed our streams (of musical technologies) and are building our own little studio into our office (for after hours). My most recent purchase was my Moog Voyager, it make awesome sounds, monophonic and bright.

My brother and I both got scooters this spring. I have a Vespa GTV (250cc) and Jason got a Aprillia Sportcity (250cc). They are rad, a fun way to get to the office and buzz around the city, not to mention their are super gas friendly! 70 MPG works for me, and only about $8 to fill up a tank. This is my first two-wheeled vehicle, and probably not my last.

So, those are the biggest things that have happened since I’ve been away, I like this blog layout, makes me feel less clostrophobic, hopefully the new environment will be more condusive to writing more.