Ship It! LIVEShip It! LIVE
home about services writing contact

We develop, test, and create fine software products, and design creative solutions to your problems.
The development of software is an intrinsically creative process. We are dedicated to improving our mastery of the art.
Links · RSS Feed
Popular Pages

With much code, all eyes are shallow
-Jared Richardson
...It would be really nice if, as an industry, we could stop being such a bunch of screwed-up clowns and start living up to our potential. Ship It! is one of the things that could help, if only tho...
-Mike Gunderloy
Quoting Watts Humphrey, "Developers are caught in a victim's mentality." We never think it's our fault, it's always somebody else's.
-Jared Richardson

Tonight at AgileRTP: Lining Up Agile with Higher Level Business Goals (Jun 25)
At our meeting tonight Ryan Shriver is speaking about this practical topic. We had to move the meeting forward a week to dodge the holidays and a trip Ryan is making to London for another conference.

In addition to having a great speaker in the house, we're also giving away some great No Fluff, Just Stuff swag. We've got a free pass to the Research Triangle Software Symposium show to give away (an $800 value), and a few NFJS 2007 shirts, a NFJS backpack, and copies of the No Fluff Just Stuff Anthology- 2007 Edition.

Our pizza sponsors tonight are Agile Artisans (where have I heard that name before?) and The Ettain Group.

Here's our Meetup Page with directions and more information. Our "official" starting time is 6 pm, but it gets rolling about 6:15 or 6:30. Come out and meet local agilists from the Java, Ruby, and C# space. It's a great chance to meet great people and do some local networking.

Category: Agile

Getting Started with Grails: Tonight with Jason Rudolph (Jun 18)
Jason Rudolph is presenting his popular talk on Getting Started with Grails tonight at the RTP Java User's Group. If you're wanting to learn more about this dynamic language innovation on the Java platform, don't miss this event.

Even if you don't use Grails at your day job today, you need to understand the basic concepts. Then you'll be able to intelligently evaluate other frameworks when they come across your desk tomorrow.

Category: Java

Summing Up Ruby and Rails (Jun 15)
This picture on Dave Thomas' flickr stream just sums it all up. I wish I could read Matz' addition!

RubyKaigi2007_59

If you can't say this about your programming language (or your career for that matter!), you're doing it wrong.

Category: Ruby

Distributed and Threaded Continuous Integration (Jun 15)
This week I was in Iowa for both a Central Iowa Java Users's Group meeting and Agile Iowa meeting. (The trip was sponsored by the Central Iowa Software Symposium... coming in August!) One of the attendees commented on how they had to move away from CruiseControl because it was single threaded and they needed a more scalable solution.

First, let me say that there are tons of great Continuous Integration tools available (see this chart for a list). I'm more concerned with whether or not you run ~any~ continuous integration software that whether or not you run my favorite CI package.

But I hate to see anyone switch away from CruiseControl because they aren't aware of the feature set. CC has threaded builds and distributed builds. Both features are turned off by default to make your initial set up as easy and painless as possible, but the features are there.

To learn how to turn on threading in CruiseControl, read this configuration document. Just add the system/configuration/threads elements to your config.xml and the functionality will be enabled.

Directions on how to run CruiseControl builds distributed across machines can be found on this page. I think this page is up to date, but visit the CruiseControl user's list for the absolute latest information.

Category: Agile

Nginx: My New Web Server (Jun 10)
I recently heard about Nginx. It's a web server with a great track record in Russia that's starting to spread out to the rest of the world. According to a recent podcast I heard, Zed seems to be using it with his production Rails apps, which is always a good sign. At RailsConf I got to eat with Adam Keys and his enthusiasm for it's speed, ease of configuration, and stability caught my attention.

The greatest attraction for me is the ease of configuration. I've wrestled with Apache conf files on and off though the years, but I've never felt like I really "got it". Apache can do nearly anything, but you've got to really invest the time to become an Apache specialist to do anything useful with it. And I never really felt the motivation to become an Apache specialist.

When I set up this web site, I tried to get my Mongrel cluster up and running with Apache but couldn't get it working. So I gave up and dropped back to Pound and Mongrel. Pound load balanced and Mongrel served everything, including the html, Javascripts, CSS, and graphics. A complete reload of the main page took about 30 seconds. Nearly all the time was spent loading graphics, two at a time. And once the browser had the graphics cached, it ran great.

But today I switched to Nginx and a clean reload is taking me 8 seconds. Granted, Mongrel wasn't designed to serve your static content, but wow... that's an improvement!

Here are some Nginx links to get you started.

And here's my configuration file:

worker_processes  2;
events {
    worker_connections  1024;
}
http {
    include       conf/mime.types;
    default_type  application/octet-stream;

    upstream mongrel {
        server 127.0.0.1:7000;
        server 127.0.0.1:7001;
        server 127.0.0.1:7002;    
        server 127.0.0.1:7003;
    }
    log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile        on;
    server {
        listen       80;
        root /usr/local/nginx/html;
        access_log  /usr/local/nginx/logs/access.log  main;
        rewrite_log on;

                location ~ ^/$ {
                  if (-f /index.html){
                    rewrite (.*) /index.html last;
                  }
                   proxy_pass  http://mongrel;
                }

                location / {
                  if (!-f $request_filename.html) {
                    proxy_pass  http://mongrel;
                  }
                                        }

                location ~ .html {
                   root /usr/local/nginx/html;
                }

                  location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar
|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov)$ {
                  root /usr/local/nginx/html;
                }
         }
}

Update: Apparently this call request.host_with_port gets confused when Nginex proxies for Mongrel. If you're reading this via the RSS feed, then you probably noticed that all my URLs were wrong for a few hours. It's fixed now. I should wrap that with a test!

Category: Rails

Previous page Next page


© 2007 Agile Artisans.