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.

Well, excuse me for not going to Harvard…

Posted on September 3rd, 2009 in Computer Science, Opinion | Comments

Recently, I’ve been looked over two different job opportunities. That’s nothing new, and nothing that will bring me down. However, the reasons behind why I was looked over annoyed me a lot. Apparently, these companies were looking for people from Ivy League schools. Seriously? That was the main reason? If it was, to me it’s one of the most stupidest reasons out there to not give a job to someone who would otherwise be qualified for the job.

I do know that the difference between a well-qualified developer and an average one is usually huge. But is there really that big of a difference between a Harvard graduale and a graduate from another university with the same degree? It’s not like the fundamentals of Computer Science are different anywhere else. It’s not like people in Harvard use different design patterns, or use them more efficiently (or worse – come on, we’re all human). I still don’t understand why someone is over-looked because of the name of the university on their degree.

I guess these employers probably see that someone who graduated from one of these ‘high-class’ schools is a dedicated, super-smart individual. It doesn’t mean that I don’t have those qualities because I went to the Interamerican University of Puerto Rico. Perhaps I didn’t have thousands and thousands of dollars to go to one of those schools. The joke I have with my mom now ever since I told her this is that I will “never forgive her” for not sending me to an Ivy League school and ruining my life.

There are tons of smart, bright, über-talented people out there. I’m willing to bet most of them didn’t go to Harvard or Brown or Yale. Don’t skip a diamond in the rough because of their Alma Mater. You’d be surprised at what you can find if you broaden your views just a little bit.

Signup form from hell

Posted on August 20th, 2009 in Opinion, Web Development, tips | Comments

Today I stumbled upon a site which shows how to create a ‘magical’ user registration form, using a little bit of CSS and jQuery magic. Go ahead, play around with it once. I’ll wait.

Are you finished? Good. Now please don’t ever do this in your own websites. Ever.

Have you ever been around other websites where you need to register, only to see a humongous form that needs to be filled out? Chances are, as soon as you saw that huge form, you clicked on the ‘Back’ button of your browser, never to return again.

Now, imagine the same site and it still requires you to fill out that huge form. However, instead of showing you upfront about the time you need to spend filling out that info, it only shows you two fields. You immediately think “Cool, I’ll be registered in no time at all!” Then you click on the ‘Registration’ button… And more fields pop up. Begrudgingly, you fill out these additional fields… Only to be shown more fields. Do you see where I’m going?

Don’t torture your users into filling out needless information. Unless you’re working with some government or financial entity, you really don’t need all that information, do you? Keep it as simple as you possibly can. For example, I loved Heroku’s sign up process, where just an email address is required. They send you a link through email, where you click and voilà, you are now a registered Heroku user. Simple and effective.

Another alternative is what’s called “Lazy Registration”, where you can actually use the main functionality of the site without registering. Only when you need to actually register for something (like to save the information for future use), the sign-up form will appear. By this time, the user will know how much value your site gives to them, so if they were happy with what they saw with the non-registration parts of your site, they will gladly register and continue to use your site in the future. Also simple and effective.

You ultimately decide what needs to be in your registration form. Just don’t be surprised when you find that your 5-step registration process isn’t gaining any new users to your site. We’re not really dying to use your site, you know.

Update: As soon as I posted this, Jason Fried from 37signals wrote a post about signup form redesigns for their products. I thought I would add it here, as 37signals is a company I respect and appreciate for writing these kind of posts.

Twitter – It’s all about you

Posted on August 19th, 2009 in Opinion, Sites | Comments

It seems like the current hotness is Twitter, with tons of publicity about how their growth in the past couple of months has been staggering. Of course, as with any other service on the Internet, with more awareness about the product, more people feel the need to bash it because it’s not their thing. While Twitter has been blowing up, I see more and more comments around the Internet from people claiming that Twitter is anything from stupid to retarded, including editors from well-known tech publications. But it’s not only online – I’ve been in conversations with people who also declare the same things to anyone who’s listening in their vicinity.

While I understand and respect everyone’s opinion on the matter, I believe that it’s mostly a matter of them giving in to their perceptions of Twitter. Here are a few of the most-repeated issues people have against Twitter, and my own point of view regarding those issues.

“I don’t care about other people’s lives”

By far, the most common issue people have against Twitter is that they say they don’t care about the minor and insignificant details that people usually post on Twitter. I have to partially agree on this (I mean, who cares that someone smiled when listening to Ricky Martin on the radio?). But just because a lot of people do this, it doesn’t mean that the entire Twitter universe is filled with people who post every insignificant detail of themselves. While I do post stuff that no one would care about from time to time, I refrain from doing it full-time.

Also, these are the exact same people who visit TMZ every day and talk about what they showed in Access Hollywood the other night. Face it: by far, most human beings are attracted to gossip. Do you know somebody who apparently has nothing better to do than peek outside the window and check what the passers-by are doing? Are you one of those people? Trust me, I know a lot of people who do this. So why do these ‘curious’ people shun Twitter because people expose details about their life?

This brings me to my next issue.

“Only celebrities have anything interesting to say on Twitter”

Twitter’s explosive growth is thanks in large part by the constant news reports about celebrities joining in and chatting with their fans. Ashton Kutcher made major waves with CNN when they had their little ‘competition’ to see who would be the first to reach 1 million followers. Oprah Winfrey exposed the site to millions of her viewers when she created her account during one of her shows. Even ‘bad’ publicity seems to have helped – I bet that a lot of baseball fans signed up after hearing about Twitter when manager extraordinaire Tony La Russa sued Twitter over someone using his name on the service.

In any case, celebrities definitely are not the most interesting people on Twitter. Well, it depends on who you are. If you’re part of the TMZ-lovin’ group I mentioned above, then Twitter will be celebrity heaven for you. But for others, like myself, celebrities are pretty damn annoying. For example, I’m a fan of Shaquille O’Neal, but his Twitter stream makes my head hurt (one of his latest tweets: “thanks 2 all da fans who watched last nite & made my sho get da best numbers in yrs”). Also, while I adore Mark Hoppus of Blink-182, his tweets recently have no substance to them (“Apparently “make-up sex” has absolutely nothing to do with making love to the make-up at the mall cosmetics counter. Sorry everyone. My bad.” Funny, but what the hell?)

“I’m not interesting” / “Who the hell is going to follow me?”

You’re not interesting, you say? Guess what: I’m not either. I’m willing to bet that more than 99% of the millions of current Twitter users aren’t really that interesting either. But for every Twitter user that doesn’t interest you, there are lots of people do do find that Twitter user interesting. Like I said above, I’m not interested in reading through Shaq’s poor grammer, but there are two million Twitter users who do. I don’t expect everyone to follow what’s going on with GitHub, or see what J. Chris Anderson has been doing with CouchDB.

This brings me to my own conclusion about the use of Twitter:

It’s all about you

Yes, about you. It’s up to you how you decide to use Twitter. Like I showed above, most of the people I follow on Twitter are people within my own field. They share a lot of information about things I’m interested in, and a lot of times they also share information that really hasn’t hit ‘the rounds’. It’s fun to hear something on Twitter an hour or two before other major sites pick up on it.

Another use I give to my Twitter account is for my own selfish reasons: To have some sort of record about things that I might have forgotten if I hadn’t written it down somewhere. After all, Twitter is billed as a ‘micro-blogging‘ site, so I blog about these occurrences in my life. It’s a nice little place to see moments that were awesome or important in your life, like this tweet from December 2007, where I was interviewed for the job I currently hold in New York City. Yep, I’m sure these tweets make most everyone say “I don’t care”, but like I said, it’s all about me, in this case.

So it’s up to you decide how to use it, but ultimately, it’s up to you to decide not to use Twitter at all. I’ve encountered people who are rabid Twitter fans (the same type of people who felt ‘jittery’ and ‘naked’ when Twitter was down a few weeks ago) who desperately try to shove Twitter down other people’s throats, and get visibly frustrated when the other people say that they don’t feel like it’s useful to them. There are few worse things than having someone impose something on you that you simply don’t care about. There’s nothing in this world that works for everybody. When something exists that makes every single human being in this planet say “Whoa, that’s great! I’m going to use it all the time!”, let me know. I expect to be dead by then.

If you gave Twitter a try and still think it’s the lamest, most boring thing ever, then good for you. Just don’t think that the millions of Twitter users who do find it useful and/or entertaining are wasting their time. We surely aren’t.

Testing Windows 7 on a MacBook Pro

Posted on June 13th, 2009 in Guide, Reviews, Software, Windows | Comments

I had some time to spare during the weekend, so I decided to have some fun with my MacBook Pro. Now, I’ve been more or less full-time Mac user for the past year (I use Ubuntu Linux from time to time, though) ever since I could afford getting a Mac. Yes, Macs are expensive, but totally worth every dollar, in my humble opinion. But I digress.

In any case, I also stopped using Windows because of all the issues surrounding Vista. While there have been people who say that there’s nothing wrong with the operating system, in the time I’ve used it I found it extremely slow on a computer with more-than-decent hardware and experienced constant lock-ups and crashes. It might work fine for some people, but it never was the case for me.

Lately, I’ve been hearing more and more about Microsoft’s next operating system release, dubbed Windows 7. In a totally welcome change of pace for the company, Microsoft has allowed any user, not just developers or OEMs, to be able to download and test beta versions of the operating system. Everywhere I go on the Internet, people have only great things to say about it – essentially that it’s faster and more stable, even in its pre-release state.

As always, the curiosity is killing me, so I decided to take the latest release for a spin. I have plenty of free space on my MacBook Pro, so I decided to use Apple Bootcamp to test this out. Here’s an outline of the steps I took to successfully install Windows 7:

1) You can start off my downloading WIndows 7. At the time of this writing, Microsoft is offering users to test out the first Release Candidate for Windows 7 (stated for official release on October, 2009). When downloading, you have the opportunity to choose to download Windows for 32-bit architectures or 64-bit architectures. Since this post is for installing Windows 7 on a MacBook Pro, I chose to download the 64-bit version, although the 32-bit version should work just fine. Keep in mind that you’ll need a high-speed connection and a DVD burner, since the DVD image is approximately 3.05 GB.

By the way, when you download the DVD image, there will be a product key for Windows 7. Write this down, because you’ll be asked to enter it to activate Windows during the final steps of the installation process. Don’t worry if you forget – You’ll still be able to install Windows properly and activate it at a later date. But it’s just easier to do it from the beginning. Also, make sure you have your Mac OS X Installation Disc on hand. When Windows is installed, you’ll need to install the proper drivers for your hardware, and the Mac installation disc has them readily available.

2) Once you get the image downloaded and burned onto a blank DVD, you’ll need to partition your hard drive and create some space for Windows. I explained this in an earlier post, but I’ll just post it here since it’s slightly different. If you have Mac OS X 10.5 (Leopard) installed, you can use the Boot Camp Assistant to create a partition. Unfortunately, at this time, you won’t be able to use Boot Camp if your Mac 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. For the 64-bit version of Windows 7, the minimum requirements are to have at least 20 GB of free hard drive space. I recomment using at least 30 GB of free hard drive space, since you’ll most likely want to install and test out some Windows software. Once the partitioning is completed, the Boot Camp Assistant will ask if you would like to restart to begin installing your new operating system. Before clicking on the ‘Start Installation’ button, insert your newly-burned DVD of Windows 7. Once the DVD has been detected on your Mac (the DVD icon of the mounted drive should appear on your desktop), click on the ‘Start Installation’ button. The Mac will restart, and will boot from the DVD and start the installation process.

3) Installation is a fairly easy process. Over the years, Windows has streamlined the installation process of their operating systems, and it seems Windows 7 is the easiest one yet. The only small issue you need to look out for is that while the hard drive was partitioned properly, it wasn’t formatted for Windows 7 (specifically, NTFS). It’s fairly easy to correct this, though.

When you get to the section where all your computer’s drives are displayed, you’ll notice one labeled ‘BOOTCAMP’. This is the one the Boot Camp Assistant conveniently created for you. When you click on this drive, you’ll notice a message saying that Windows can’t be installed on that drive, before of the aforementioned issue. To correct this, click on ‘Drive Options’ after selecting the partition. There will be multiple options for you. Simply click on ‘Format’ to format the disk properly. Once this step is done, you can click ‘Next’ to install the operating system to the partition.

4) Please note that during the Windows installation process, your computer will be rebooted a few times. When your computer reboots, it won’t boot back to Windows automatically. Instead, it will boot back into Mac OS X. To be able to choose which partition you want to boot from, you need to press and hold the Option key before the Apple boot screen appears. This will them display all bootable partitions on your Mac. You should have one for your Mac OS X installation, and another for WIndows. Choose the Windows partition and hit the ‘Return’ key to boot back into Windows. Remember to keep an eye out while Windows is installing, or else you’ll find yourself rebooting from Mac OS X constantly.

5) Once Windows is installed, you’ll notice that the resolution is pretty crappy. This is because you have to install the drivers for the video card and other hardware in your Mac. This is where the Mac OS X installation disc comes in handy. Eject the Windows 7 DVD from your drive. In my MacBook Pro, I couldn’t get the DVD to eject by pressing on the Eject button on the keyboard. I was able to eject the disc by going to ‘Computer’ from the Windows menu, clicking once on the DVD, and then selecting ‘Eject’ from the toolbar.

Insert the Mac OS X installation disc into your computer. You should get a message asking to auto-run the setup program from the disc. Do not run this, as it will install the 32-bit drivers. Instead, go to the Windows menu, select ‘Run’, and enter D:\Boot Camp\Apple in the field and click ‘OK’. There should be an executable file called Bootcamp64.msi in the directory. Double-click this file, and the drivers installation process should start automatically. After they’re installed and your computer reboots, you’ll have a fully-functional Windows 7 installation on your MacBook Pro!

This might seem to be a long process, but I think I’m just being too verbose in writing. It really is a short, straight-forward process. As I mentioned above, the installation process is fairly easy. Although I’m guessing that most Windows users won’t go through this process, as they’ll most likely already have it installed on any new computers they purchase. But for those who actually have some fun doing the whole installation thing, it really couldn’t get easier than the Windows 7 installation.

As far as the actual operating system goes, it does seem faster and much more stable than its predecessor. In the couple of hours I spent today using the operating system (and typing this blog post, as well), I didn’t encounter a single problem. I also installed quite a lot of software, and they all ran without a hitch. So far, so good.

I don’t have any official numbers here, but I’m willing to bet that while Microsoft still has the dominant share of the operating system market, it has lost more than a few percentage points. Although that didn’t happen solely because of Vista, I know more than a fair share of people who have dumped Vista for alternatives, with many more downgrading to Windows XP. Windows 7 feels like it’s a step in the right direction for Microsoft. I just wonder if Apple will be able to continue to run those snarky ads for long.

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.

Take The Risk – It’s Totally Worth It

Posted on March 11th, 2009 in Opinion | Comments

The following post is something I sent a friend who’s still works at my former workplace. She was feeling a bit down due to the circumstances that have been happening there (and that I know all too well), so I offered her this piece of advice. This really isn’t technology related or anything, but it’s something I wanted to post to keep on my blog, to remind myself whenever I feel stuck in my life.

You’ve been there much longer than I was, and you know better than I that nothing will ever change. When I left, I was obviously happy, but I still felt a bit bad for those who stayed behind. But as I think about it, the people who have stayed are usually because of their own choice. It might sound cruel, and it’s not my intention to make it sound like I’m a heartless bastard, but usually people are in negative situations because of themselves, because they don’t do anything about it.

I spent the better part of 2007 doing everything I could to find a new job – I would learn new things related to my field, I would scour job sites, looking for jobs that sounded better than my current situation at the time, I would send resumes all over the place. It takes a while, and you get pretty damn frustrated when you get interviewed by companies and never hear back from them. But I’m a firm believer that if you want something and you work for it, eventually everything falls into place.

I want you to take a moment and honestly assess yourself. Have you done anything to improve your current work situation? If not, why haven’t you done anything? Are those situations really impeding your ability to move on to something better, or are they just excuses for procrastinating? On the same note, if you are doing something to try to make things better, are you giving it your all? You’ll need to really want something to have a good chance at getting it.

I tell you these things because for a while I was pissed off because things didn’t get better. In reality, they weren’t getting better because while I thought I was trying to make things better, I really wasn’t doing much to improve anything. Sometimes you need to take a good, long, hard look at yourself to find what’s wrong. Only then can you begin to take steps to cure everything.

Hopefully you don’t take this message the wrong way. I got nothing but love for you, and I’m truly happier when someone is doing awesome than when I do well myself. I want to see my friends succeed even more than I do. So I hope you’ll be able to do so. And if you need help, then what the hell am I here for?

The above post truly reflected my life a few years back. I was miserable, feeling stuck in a job with no opportunity to shine or do anything worthwhile. But I realized I really wasn’t doing anything to help my situation. So it was pretty stupid of me to be angry at the world when it was really my fault. Once I realized that and got my ass back on track, things started falling into place.

This whole mindset I sent my friend was due to a book that was recommended to me, called The Ultimate Secret to Getting Absolutely Everything You Want. I admit, I’m pretty skeptical about these types of books, but Mike Hernacki (the author) kept this secret as simple as possible. It all boils down to one thing: If you want something, you must be willing to do whatever it takes to accomplish it. That’s it. Simple, isn’t it? And it’s so true. People are so afraid to take risks, that opportunities pass them by when they could’ve reached out and taken control of what they wanted.

I’m pretty happy at this moment in my life. But if the need ever arises to find change, I know what to do. I hope my friend does too.

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.