Archive for the ‘Open Source’ Category

No Rest For The Unemployed

Posted on January 26th, 2010 in Books, Computer Science, Databases, Linux, Mac, Open Source, Opinion, Programming, Ruby, Ruby On Rails, tips | Comments

After two years, yesterday was my final day of being a developer for BarterQuest. As anyone living in expensive New York City in the same situation, I have been focusing part of my energy looking for a new gig. I’m pretty confident, despite the current economy, that I will land on my feet sooner rather than later. I have a few leads, with one in particular that I am really hoping will come through.

In the meantime, I’m not just throwing my resumé in the face of companies everywhere in the U.S. I have also decided that since now that I have quite a few extra hours in my days, I should really do productive things instead of sitting on my couch and re-watching all previous seasons of 24 (believe me, I would watch all 7 seasons in a row if I could) or jamming away to Guitar Hero. This is a perfect chance to do lots of technical things I’ve been wanting to do for months, but just never got the time to do so. Here’s a short list of some goals I’d like to get started on.

Learning new stuff

For the past two years, I’ve been exclusively using Ruby and Ruby on Rails at my day job. I’ve always wanted to broaden my skills by doing other types of programming, but when you take into consideration that I would usually be at work more between 9-10 hours per day, plus a commute that would sap an additional two hours, there wasn’t much time for me to be able to do personal things, let along learn new stuff. Now that I’m finally free, I can now spend more time with those things I’ve wanted to experiment with.

I’ve always wanted to learn iPhone application development. I know the basics of Objective-C, and have the book iPhone SDK Development by Bill Dudney, but I was never able to sit down and code something up. I have a few ideas for apps, so even if I can make a simple app that’s accepted to Apple’s App Store will be an achievement for me.

I’ve been very interested in implementing Push technology to web apps, like Comet or Web Sockets, using nginx’s Push Module and Orbited.

Although I’ve never had the opportunity to work with extremely large data sets, I’ve always been curious about frameworks like Google’s MapReduce and Apache Hadoop, particularly how well they can “crunch” the data thrown at them.

Keep on with what I already know

As I mentioned, I’ve been using Ruby for years now, and I know Ruby on Rails and Sinatra pretty well. However, just because I want to learn new things doesn’t mean that I want to abandon this awesome language. In fact, I want to keep using it more with the latest toys.

Thanks to Ruby Version Manager, I was able to safely install the latest versions of Ruby 1.9 and MacRuby and start learning their new features. I was also able to check any possible compatibility issues in my older applications with different major Ruby versions. Seriously, if you are a Ruby developer using a Mac or Linux, install RVM now if you haven’t.

Recently, there have been more and more news about Ruby on Rails 3, the next major release for the wonderful framework. I’d like to stay one step ahead of the pack and start learning about the new changes before it officially hits the web. One of the leaders of the newest Rails changes, Yahuda Katz, has written lots of blog posts relating to the changes in Rails 3. They’re definitely worth a read.

Strengthening my shortcomings

There are quite a few things – development-wise – that have been bugging me for a long time, yet I’ve never taken the proper steps to correct. Now is as good a time as any to take on these things and finally conquer them.

My main weakness, as a web developer, is that I’m pretty bad at design. I know CSS and its properties, I know about browser incompatibilities (having been a victim many times before by the evil and immortal Internet Explorer 6 browser) and all that stuff. But as far as design goes, like font sizes, element placement, usability and colors, these things are not my strong suit. I’ve actually stocked up on some books about these subjects (like Don’t Make Me Think by Steve Krug and Web Design for Developers by Brian Hogan), so I hope that by the time my unemployment ends, I’ll be much better off making my work look good – or at least decent.

Another weakness I consider is that I get distracted from development from time to time. It’s not frequent enough to affect the quality of my work, but it’s enough to annoy me when I do it subconsciously and I then catch myself in the act. I have read some people who had some success using the Pomodoro technique, so starting tomorrow I decided that I’ll give it a try. There’s a nice little app called Concentrate for the Mac that seems to be just the thing I need during those times when I need to get stuff done and not get distracted.

Beef up my GitHub profile

I have to admit that I’m a little bit ashamed to see my GitHub profile virtually empty. For a long time, I’ve been wanting to add more of the projects that I have in my laptop to GitHub and see if some of them take a life of their own. Sadly, for whatever reason, I haven’t done that. Most of the times I’m a bit too critical at my code and think it’s embarrassing to make public, but that’s really what I need to do to get better as a developer. I can take criticism with the best of them, so there’s really no excuse. I need to make more of my code open-source, period.

Not only do I want to show my own work, I also want to give back to the community. I have used so many open-source projects over the years, yet I’ve only submitted a handful of patches to very few projects. I don’t want to be a person who takes, takes, takes and never gives anything back in return. So I’m going to take steps to correct that. I’ve started cloning some repositories of my favorite projects from GitHub to my computer to start reading their code more in-depth, which I had been doing anyway. I’ll check if these projects have Lighthouse pages with open tickets, or if there are any open issues on their GitHub page. A few years ago, Dr. Nic wrote an excellent post titled “8 steps for fixing other people’s code” that inspired me to start finding features or defects that I can handle.

I have to say, I’m only one day into this routine, and I don’t remember the last time I felt this free and liberated doing what I wanted to do. Full-time employment is great for earning money and making substantial stuff, but sometimes there’s a feeling of emptiness due to not being able to explore on your own. Being unemployed doesn’t mean that you need to spend all your time looking for work. Unless you’re truly struggling economically and can’t pay the bills in the next couple of weeks or even days, why not spend part of your time gearing up for the future?

MongoShort – URL Shortener using SInatra and MongoDB

Posted on January 14th, 2010 in Announcements, Databases, Open Source, Programming, Ruby | Comments

As many other developers, I’ve been experimenting with the different “NoSQL” data stores. Most of them are really great, like Redis, Tokyo Cabinet and CouchDB. My favorite so far, however, is MongoDB. I think it hits the sweet spot between a normal relational databases and key-value stores. After a while playing around MongoDB, I decided to do something with it. That something that I did is called MongoShort.

MongoShort is a very simple URL shortening service, written with Sinatra and MongoDB. I originally wrote this little app to be used as part of a larger Rails application. However, it was mostly done as a way to do something with MongoDB. Particularly, I wanted to start using the awesome MongoMapper library. It’s really a breeze to use all these tools together, and it makes developing small apps on Ruby really fun. I hope someone can grab a copy of MongoShort and learn a bit of the basics of these wonderful tools.

Go fork MongoShort on GitHub now!

Redis rocks!

Posted on November 5th, 2009 in Databases, Linux, Mac, Open Source, Opinion, Programming, Software | Comments

In my development blog, I previously wrote that MongoDB was the future of database storage. I might reconsider my decision, now that I’ve discovered Redis. In a nutshell, Redis is a key-value store. But it’s not a simple key-value database, as it has lots of commands and extra goodies, such as file persistence (so data can be stored from memory to a file, and restored in case of failure) and awesome data structures like lists (with push / pop) and sets (even ordered sets). Besides that, Redis boasts atomicity and even master-slave replication. It’s quite a lot of stuff for a lean package.

One of the things I love the most about Redis is it’s speed. Believe me, this little database is fast. Redis includes a benchmark tool, so I ran the default benchmark (Approximately 10,000 total requests per command, from 50 simultaneous clients) just to demonstrate its raw speed. These tests were run on a Mac Mini (1.83 GHz Intel Core 2 Duo, 2 GB RAM) under Ubuntu 9.10 Server:


dennmart@ubuntu:~$ redis-benchmark
====== SET ======
10005 requests completed in 0.14 seconds
50 parallel clients
3 bytes payload
keep alive: 1

34.89% <= 0 milliseconds
99.19% <= 1 milliseconds
100.00% <= 2 milliseconds
74111.11 requests per second

====== GET ======
10003 requests completed in 0.13 seconds
50 parallel clients
3 bytes payload
keep alive: 1

34.62% <= 0 milliseconds
99.79% <= 1 milliseconds
99.83% <= 2 milliseconds
99.87% <= 3 milliseconds
99.91% <= 4 milliseconds
99.94% <= 5 milliseconds
99.97% <= 6 milliseconds
99.99% <= 7 milliseconds
100.00% <= 8 milliseconds
74649.25 requests per second

====== INCR ======
10005 requests completed in 0.15 seconds
50 parallel clients
3 bytes payload
keep alive: 1

25.60% <= 0 milliseconds
99.73% <= 1 milliseconds
99.80% <= 2 milliseconds
99.83% <= 3 milliseconds
99.86% <= 4 milliseconds
99.89% <= 5 milliseconds
99.92% <= 6 milliseconds
99.95% <= 7 milliseconds
99.97% <= 8 milliseconds
100.00% <= 9 milliseconds
65392.16 requests per second

====== LPUSH ======
10001 requests completed in 0.13 seconds
50 parallel clients
3 bytes payload
keep alive: 1

37.62% <= 0 milliseconds
99.78% <= 1 milliseconds
99.82% <= 2 milliseconds
99.86% <= 3 milliseconds
99.89% <= 4 milliseconds
99.93% <= 5 milliseconds
99.96% <= 6 milliseconds
99.99% <= 7 milliseconds
100.00% <= 8 milliseconds
77527.13 requests per second

====== LPOP ======
10000 requests completed in 0.14 seconds
50 parallel clients
3 bytes payload
keep alive: 1

34.13% <= 0 milliseconds
99.69% <= 1 milliseconds
99.82% <= 2 milliseconds
99.86% <= 3 milliseconds
99.90% <= 4 milliseconds
99.93% <= 5 milliseconds
99.96% <= 6 milliseconds
99.98% <= 7 milliseconds
100.00% <= 8 milliseconds
74074.07 requests per second

====== PING ======
10000 requests completed in 0.12 seconds
50 parallel clients
3 bytes payload
keep alive: 1

43.79% <= 0 milliseconds
99.80% <= 1 milliseconds
99.85% <= 2 milliseconds
99.89% <= 3 milliseconds
99.91% <= 4 milliseconds
99.93% <= 5 milliseconds
99.97% <= 6 milliseconds
100.00% <= 7 milliseconds
86206.90 requests per second

Yeah, you read that right. On this somewhat low-end computer (by today's standards), Redis still manages to do over 74,000 SET (write) and GET (read) operations per second. Push and pop list operations also do well over 70,000 requests. On bigger hardware, expect these numbers to be much higher. Besides speed, I've also been impressed by the stability of Redis. I've been running Redis non-stop on the Mac Mini for over two weeks, and I've never had a single issue with it.

I got really interested in Redis after Defunkt (of GitHub fame) open-sourced Hurl. Hurl was an entry in this year's Rails Rumble competition. I used it quite extensively when developing with PayPal's APIs. After it was released, I noticed that Hurl used Redis for persistence. I was kind of puzzled why a key-store value was used for this. However, Defunkt wrote an excellent post mostly explaining the SORT operation, but also included some additional details on how Redis was used in Hurl. It made the decision to use Redis clear. Well, I'm also willing to bet that he used Redis because us programmers love to use the new hotness.

I feel that Redis will be something big soon. There are a few open-source projects using it, including the aforementioned Hurl and Resque. I already have a few ideas where I can use some of this functionality for current sites that I'm working on (such as simple counters, or a tag-like system where we can push and pop tags from a list). Check Redis out if you need some quick and simple storage.

Installing Ubuntu 9.04 on a Mac Mini

Posted on May 25th, 2009 in Linux, Mac, Open Source, Software | Comments

Ever since I bought my MacBook Pro a few months ago, my poor ol’ Mac Mini has been alone and lonely. I really didn’t have much use for it, since I transferred all important work files to my new laptop. So what would I do with it? That’s when Ubuntu 9.04 was released. Back when I was in Puerto Rico, I would always get excited when a new release of my favorite Linux distributions (Fedora, Debian, Slackware and Ubuntu) was announced. It had been a while since I gave one of these new releases a test drive. It would also give me a chance to use my Mac Mini as a server, where I can test some new software that I’ve been wanting to check out for a while.

The Mac Mini seems like a good, cheap alternative for a server if you have one lying around unused. These machines are pretty quiet, consume low amounts of energy and are fast enough for most server tasks. Here were the steps I took to get a fully-functional Ubuntu Server installation on my Mac Mini. As a side-note, my Mac Mini is a Mac Mini Core 2 (1.83 GHz) with 1 GB of RAM and an 80 GB hard drive.

1) Download the Ubuntu Server disc image and burn it to a CD. I chose downloading via BitTorrent. Also, I downloaded the 64-bit version (torrent filename: ubuntu-9.04-server-amd64.iso.torrent), although the 32-bit version should work just fine. Make sure you seed for a while after you download your disc image!

2) You will need to partition your Mac Mini hard drive, to create some space for the Ubuntu installation. If your Mac Mini has Mac OS X 10.5 (Leopard), you can use the Boot Camp Assistant to create a partition. Unfortunately, you won’t be able to use Boot Camp if your Mac Mini is running Mac OS X 10.4 or an older version. When starting the Boot Camp Assistant, you will be asked to specify the size for your new partition. You’ll need at least 10 GB of free space in your hard drive to do this. Depending on how much hard drive space you have available, create a partition. Once completed, the Boot Camp Assistant will ask if you would like to restart to begin installing your new operating system. Don’t do this just yet. Quit the Boot Camp Assistant.

Note: I was having problems creating a partition, even though I had plenty of free space on my hard drive. The reason was because my hard drive was apparently too fragmented, and there were some files that couldn’t be moved to create the new partition. Since I have a 500 GB external drive and use Time Machine to back everything up, I decided it would be best to just do a clean install of Mac OS X 10.5. Once Leopard was installed, I created the new partition using Boot Camp Assistant without any problems.

3) Before restarting your Mac Mini, you will need to install a boot manager called rEFIt. rEFIt will help install Ubuntu easily, and makes selecting between Mac OS X and Linux after installation a breeze. To install rEFIt, download the Mac disk image (.dmg) file. Once the image is mounted, install the boot manager by executing the rEFIt.mpkg file. After installation, to make sure the boot manager was properly installed, there should be a directory named /efi in the root directory of your system. Open the Terminal application on your Mac Mini, and execute the following commands to properly install the boot manager (You will be prompted for your password):


cd /efi/refit
./enable-always.sh

4) After rEFIt is installed, insert the Ubuntu Server CD you created and restart your Mac Mini. When rebooting, you’ll immediately notice the rEFIt boot manager screen. This boot manager should recognize the Ubuntu Server CD (marking it with the ubiquitous Linux penguin logo). Select this option, and the Ubuntu installation process should begin.

5) Installing Ubuntu is beyond the scope of this post, but it’s pretty easy to install if you have never done it before. Don’t be intimidated by the command-line look of the installation process! Just following the instructions and everything should be installed in no time. There were a few things I had to do differently in my case:

  • When the Ubuntu partitioner starts, it will show all available partitions in the hard drive, including the partition for Mac OS X. You’ll recognize the difference between the Mac OS X partition and the one you created using the Boot Camp Assistant by looking at the format of the partition (Mac OS X uses the HFS format, while the one you created is using the FAT32 format). Since I wanted to use a different format for this partition (ext3), I selected the FAT32 partition and deleted it. Once deleted, you’ll see ‘Free Space’ where your partition used to be. Select the free space, and the partitioner should ask if you want to let it create the necessary partitions. This is the easiest way to set up your new partition for Ubuntu.
  • After installing the operating system, the Ubuntu installer will ask where you want to install its boot manager, GRUB. Since we don’t want to over-write rEFIt that’s install on the drive’s Master Boot Record, we need to install the GRUB boot manager in the boot record of the new partition. So where the installer prompts you to write the location where GRUB should be installed, write hd(0,2), which is the location of the new partition (provided you only have the Mac OS X partition and the new Linux partition).

6) If everything went smoothly, your Mac Mini will eject the CD and reboot. rEFIt will be on display once again, this time letting you choose to boot Mac OS X or Linux. Select Linux, and after all of Ubuntu’s processes start, you’ll be presented with a prompt. Congratulations, you have Ubuntu 9.04 installed in your Mac Mini!

I’m sure that installing any other Linux distribution will be more or less the same. Keep in mind that since I installed the server edition of Ubuntu (command-line only), I have no idea if video, sound, wireless connectivity (I connected my Mac Mini to my router using a Cat-6 cable) or other things will work properly in a Mac Mini. I’m sure the Ubuntu community (and the Linux community in general) have solved most common issues by now. If I install a different Linux distribution using a GUI, I’ll write about it and let everybody know.

What Have I Been Up To?

Posted on March 6th, 2009 in Books, Databases, Mac, Open Source, Opinion, Programming, Ruby On Rails | Comments

It’s been quite a while since I last updated this blog. I should seriously start writing more often. So, what have I been up to? With the cold weather here in New York City, it gets difficult sometimes to go out and have fun in the city. As usual, most of my time is spent on technology, software development, stuff like that. Here’s a brief recap of what I’ve been working on:

Got a new MacBook Pro, and I love it – I finally gave in and bought myself a shiny new MacBook Pro. I’m having a blast with it. For the open-source developer in me, this has everything I could ever want. It’s a beautiful and sleek machine that has gotten me highly motivated to start expanding my knowledge in different directions. While I still consider these laptops to be pricey, they’re really great.

Learning Objective-C for Mac and iPhone development – Since I got a nice Mac, I figured I should start learning Objective-C, then eventually get into Cocoa and the iPhone SDK. I’ve always been impressed by some nicely-done open-source Mac applications, and iPhone apps have always seemed to be so creative, so I wanted to learn how to build some myself. Since I’ve been working for so many years on dynamically typed languages (like PHP and Ruby), it’s kind of a total change of pace to go back to a somewhat-statically typed language like Objective-C. It’s been a bit of a challenge, since I last used a C-based language back in my college days. But it’s going along well so far.

I’ve compiled quite a few resources for learning all of these things. I recently purchased a book called Programming In Objective-C, which seems like the de-facto book on Objective-C, as it’s pretty extensive..And there are a few good screencasts – PeepCode developed a screencast dubbed Objective-C for Rubyists, and The Pragmatic Programmers have a screencast series by Bill Dudney called Coding in Objective-C. Of course, Apple has done a fine job with their Objective-C documentation. All of these resources should get you coding in Objective-C in no time.

The iPhone development part is mostly being learned because at my day job we would like to create a nice iPhone app for users of our site. I truly think that a mobile interface will expand our user base easily, even if people say they don’t really use mobile interfaces for a lot of things. I find myself using Facebook and Amazon’s iPhone apps more than I visit their sites.

BarterQuest is getting better and better – It’s been a wild ride on BarterQuest since we launched. We’ve been featured all over the place, from blogs to television shows, and we’re getting more and more users visiting, registering and trading on our site every single day. I’ve even traded twice already, and everything has gone as smoothly as it possibly could. It’s a great way to get the stuff you want by getting rid of the stuff you don’t want.

If you haven’t checked out our site yet, or haven’t done so in a while, I highly recommend you visit us soon. We’re going to be adding support for Real Estate in a few weeks, so our range of tradable items will greatly expand. And stay up to date with all that we’re doing by following us on Twitter.

Learning (and liking) CouchDB – My curiosity with CouchDB started when people were mentioning it quite a bit, and some Rails libraries like CouchRest were gaining some attention. So I checked it out for the first time, and I had no freakin’ clue why someone would use document-oriented databases, when relational databases did just fine.

Then a week I was working on a side project, and when trying to design my classes, I noticed that I would either have to denormalize my database tables, or be strict with normalization, but have a rather messy database schema. Then it just hit me – I finally knew the reason why CouchDB would rock in this scenario, where the data I was storing wouldn’t always follow the same structure. So I got into it, and I’m really liking it a whole lot. It’s something different, yet really useful in some situations. Seeing that there’s a market for databases like these, like Amazon SimpleDB, it seems like CouchDB (and document-oriented databases in general) will gain much popularity in the foreseeable future.

These are just a few things I’m playing along with. It seems like there are a lot of fun times ahead in software development and computing in general. I’m just happy to be able to ride the wave.

Securing MySQL’s Default Installation – Quick And Dirty Too!

Posted on October 2nd, 2008 in Databases, Open Source, Security | Comments

I just stumbled upon a script that MySQL includes nowadays called mysql_secure_installation. It runs a series of steps to remove some of the default installation options that MySQL installs, like an anonymous user and a test database. When you run the script, it does for the following:

  • Prompts you to change your MySQL root password, especially if you haven’t set a root password yet.
  • Removes anonymous access to your database server.
  • Restricts root access to localhost only.
  • Drops the ‘test’ table that’s installed automatically.
  • Flushes the privileges so that all changes are taken immediately without having to restart the database server.

Here’s the output when running the mysql_secure_installation in one of my servers.

In all, it’s something that I’ve been doing manually for a while. And I bet that there are many, many developers out there who, even on production servers, don’t even bother to remove these things. Obviously, this isn’t the “be-all and end-all” of MySQL security, but it’s a big step away from the default installation. Go run this script now! Well, unless you’re a security expert who already did this, either manually or with the script. If so, then I salute you.

Delete Your Crap

Posted on May 6th, 2008 in Open Source, Opinion, Privacy, Software | Comments

I posted this story on a non-technical message board I frequently visit, as a service for some of the users there who might not have a clue on how easy it is to retrieve data from a supposedly-formatted drive. I decided to pass it along here as well. I think privacy is very important, and with the proliferation of electronic devices that store data, it’s getting easier to retrieve information from others.

Here’s a story of some dumb-ass kids who recorded themselves smoking weed on a digital camcorder, returned the camcorder to the store, forgot to erase their tapings (most likely due to said kids smoking weed previously) and the next person who bought the open-box camera from the story posted the videos all over the Internet for all the world to see:

Remember to delete your stuff from electronic equipment if you’re returning it, selling it or giving it away. And even then, be wary of it.

I was once sold a USB flash drive from a friend, and although my buddy deleted the contents, I was able to see what he had their previously before with a freely-available program off the Internet (don’t remember exactly which one right now), out of curiosity. Dude had some… let’s say ‘interesting’ pics of his then-girlfriend.

His way of deleting the contents was to simply do a quick format on the drive from his Windows machine before giving it to me. To avoid all the technical details, for those who don’t know, what this does is simply destroy the FAT table and/or boot sector, which is a sort of ‘table of contents’ for the drive, thus nothing appears when you try to access the drive. But the data is still in the drive’s sectors, and unless you rewrite those sectors (either by copying something new in the flash drive or using some software, which I’ll get to in a minute), they’re easily accessible.

The program I’ve used for a while with Windows is called Eraser (I carry a portable version of this program on my USB drive, called Eraser Portable), which makes sure your data is clear from your portable device (like flash drives, SD cards for digital cameras, even iPods). In short, what this does is over-write the sectors on the drive multiple times with ‘garbage’, so it’ll be virtually impossible to get that information from freely-available tools. I’m guessing the government has more advanced tools, so for the overtly paranoid, you’d be better off just smashing the drive to pieces and dipping them in a vat of acid.

Just wanted to pass this info along so you people can keep your privacy, and know how easy it is to grab a hold of your data.

Zed Shaw – Exposing the ‘Ghetto’

Posted on January 3rd, 2008 in Open Source, Ruby, Ruby On Rails | Comments

Before I begin, I just want to wish everyone a Happy New Year! May 2008 bring happiness, peace and prosperity to all.

I’ve been keeping myself very busy lately with RSpec and Behavior-Driven Development, basically learning the ropes and how all the pieces fit together. For now, I’m totally enjoying it. But more on that in a future post.

Now, I know that everyone who read Zed Shaw’s rant towards most of the Ruby and Rails communities will have an opinion on this. But I’ll give my own thoughts on it. All I hope is that someone doesn’t read this and think “Who the hell is this guy to give an opinion?” I might not be a ’somebody’ in the Ruby or Rails communities at the moment, but I would really like to be part of those communities sometimes in the near future.

Upon first glance, Zed’s rant seems like a completely immature piece, just looking to damage the reputations of certainl people and companies. But if you read closely, ignoring the unprofessional language scattered throughout the text, there’s a whole lot of valid thoughts and reasoning to this entire rant.

Most of his attacks are aimed at two people: Kevin Clark and Dave Thomas. Kevin Clark has been a pretty big part of the Rails community, regularly contributing code and such, and Dave Thomas of course is the author of possibly the most well-known Ruby and Rails books in the market. His story on Kevin is that they possibly never got along and clashed multiple times, while the story on Dave is that supposedly Zed had a fix for a pretty serious bug in Ruby, yet Dave and others ‘threatened’ Zed to not release it. For what reason, it’s not clear in the rant. Now, about these allegations, I don’t know whether they’re true or not (there’s always two sides to a story). But from my own views, I think any environment has these types of problems all the time. My own workplace can be used as personal experience on these manners. There’s always someone who wants to be smarter and better than you, and for some unknown reason they go out of their way to make sure they come out looking better than you can. It’s stupid, but it’s just human nature, I guess. I bet almost any other open-source community is the same.

He also goes on to write about Thoughtworks, a software consulting company that jumped on the Rails bandwagon a while back. Zed’s beef with them is the fact that they charge a shitload of cash while providing not-so-great work in return. Isn’t this is the case with almost all software consultancy places? I can name a few off the top of my head here in Puerto Rico. In fact, all you need to do is go to a website one of these ‘expert software consultants’ made, look at how the site is built, and anyone with an eye for software development standard practices can name a dozen things they would change immediately. This is no surprise here.

I do commend Zed for not making this a 100% negative jab towards Ruby and Rails. He included some people who he knows and have helped him out or were unlike those who he vilified before. Like I said, all communities have their share of bad apples, mostly people who want to be most widely known at your own expense. So the fact that he names some people who were cool to him shows that.

I’ve read a lot of other blogs where people are dismissing Zed for the way he expressed his views, that he burned his bridges and what not. But that’s what he apparently wanted. He said he’s not happy being part of the Rails community, so he wants out. This is his way of getting out. Now, I may not agree with the way he did this at all. You never know when you need to cross a bridge you burned in the past, after all. But being in the position he was, seeing and knowing a lot of things that went down, he has a valid opinion, and he’s simply entitled to it.

I think Zed partly wrote this rant not to bash everyone associated to Ruby or Rails, but to try and help out, in his own way. He knows a lot more about the community than most of us will probably ever know. So hopefully some good comes out of him exposing some dirty details on how the Ruby and Rails world is run. In the end, it simply boils down to this: It’s one man’s opinion. No matter how important he is (or rather, was) to the Rails world, one man isn’t enough to kill it, in my opinion.

Zed, if you miraculously read this, best of luck to you in the future, buddy. Hope the rant was worth it!

At the speed of Rails

Posted on December 20th, 2007 in Open Source, Programming, Ruby, Ruby On Rails | Comments

I was going to write a small post about Rails and its brand-spankin’ new release, known at version 2.0. But in the time it took to write this, the Rails community not only released Rails 2.0, but also Rails 2.0.1 (thanks to a small error in the original 2.0 release) and 2.0.2 (bug fixes and some nice changes included) were released in short order. That’s part of what I love about the entire Ruby and Rails community: You need to be on your toes and always up-to-date. It may be a pain at times, especially when there’s barely any time for one to do anything at all. But it’s just a blast, and I’m enjoying the ride.

I’ve been using the new Rails features for the past five months now, thanks to access to the Rails Edge code. I really like the direction the framework is taking. RESTful routing is now the norm, multiple views of the same chunk of data are now a breeze, huge security benefits straight out of the box… There’s just too many good things Rails 2.0 has brought out. And the upcoming release of Ruby 1.9 (and its promised speedups) have me anxiously awaiting its arrival. In fact, I’m thinking of porting my Puerto Rican Rails site, RailsPR.com, from the “obsolete” Rails 1.2.3 to benefit from all the changes made by DHH and the rest of the Rails core team. Excellent job, guys. Here’s looking towards the bright, bright future of Ruby and Rails. I’m excited to be part of it.

Source Code Management – Not just for teams

Posted on November 12th, 2007 in Open Source, Programming, Software | Comments

I’ve been meaning to write about the subject of Source Code Management for a while now. The reason for this is that I’m very surprised about the amount of software developers I personally know who don’t use any type of Source Code Management tool at all. The main reason of this is because these people don’t even know such a tool exists. The very few who do know about these tools just know how it works, but never use it themselves. It’s shocking, to say the least.

When I got this VPS, I immediately installed Subversion for my own personal projects, even though I’m the only one working on said projects. This is where those very few people I mentioned above think wrongly about these tools. Their basic response was “If you’re the only one working on the code, why do need to share it?” Very big misconception, to say the least.

The reason I originally started learning about Source Code Management tools (first started with CVS, then move to Subversion, where I have stayed ever since) because there was an additional programmer in my company who was beginning to modify the software where only I had previously worked on before. So yes, I used SCM tools to ’share’ code and make sure our changed didn’t conflict with each other. But then I realized that I was only using probably less than 5% of its true power.

When I did a major screw-up and pushed some bad code into the repository and then into production by mistake (it was actually incomplete code I had mistakenly committed to the repository), I was grateful that I could roll back almost immediately. Then when I needed to have a separate copy of the code, I learned the wonders of branches and tags.

After these experiences, I wondered how I ever did any serious programming work without any Source Code Management. Right now, whenever I start a new project, I immediately create the basic folder structure for the SCM before doing anything else. I think it’s crazy to go forward with a new project without any SCM in place, which makes the fact that a lot of programmers aren’t using any SCM just insane.

For those of you not using any SCM right now, shame on you! Allow me to redirect you to a couple of interesting articles for my preferred SCM tool of choice, Subversion. Please note, there are a lot of different SCM options out there, both commercial and open-source. I would recommend doing some research first on these different tools before deciding to go with one.

Subversion Book – Version Control With Subversion – Excellent resource not only for finding out how Subversion works, but how SCM tools work in general.
Software Branching And Parallel Universes – Great blog post from Coding Horror that explains how branching works visually, along with some reasons when not to use branching.

http://www.codinghorror.com/blog/archives/000968.html