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.
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.
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.
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.
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!