March 08, 2007
The first edition of TechBits comes courtesy of Lifehacker. You know how Firefox resizes images to fit in the browser window when they're too large for it? Personally, I find that annoying, and if you don't like how Firefox behaves, here's how you can disable that feature:


- Open a new tab (Ctrl+T) in Firefox. Type about:config in the address bar and press Enter.
- In the "Filter" text box, start typing browser.enable_automatic_image resizing. You don't need to type the whole thing; you just need to make the setting appear in the list below.
- Double click on the browser.enable_automatic_image resizing entry in the list and the value should change to false.
- You're done!
December 07, 2006
I haven't been blogging regularly for the past few weeks, but the RubeTube has still been averaging around 50 hits a day despite my inactivity. (I know this is not a very impressive number, but hey, I'm just a small-time blogger.) There are a number of factors contributing to this phenomenon:
Here are some of the more popular posts on the RubeTube, in increasing order of exposure (by my own estimates):
Personally, I'm not in it for the AdSense hits, and I have no dreams (for the time being) of making it big in the blogosphere. It just makes me feel warm and fuzzy inside knowing that I made someone's day more interesting because of something he/she read on the RubeTube. That is blogging's greatest reward.
Happy blogging!
- I have been more "aggressive" in promoting my blog, via different media: email signatures, website profiles, YM status messages, use of Technorati tags, etc.
- More people are linking to my blog (mostly friends; thanks, friends!) which directly increases hits by providing more entry points, and indirectly by making my blog more reputable in the eyes of search engines (see how search engines work). This is a natural form of search engine optimization (SEO).
- My blog has reached the critical mass of content (quality content, of course) such that people are stumbling upon my blog through search engines. Never underestimate Google's power to drive traffic.
Here are some of the more popular posts on the RubeTube, in increasing order of exposure (by my own estimates):
- The YM status message trick. Apparently, a lot of people are wondering how their friends are able to put hyperlinks in their Yahoo Messenger status messages.
- How to remove the Blogger NavBar. "How to" posts are great; not only do you help people out, but they're also great for getting more visitors.
- PoW! Pandora Internet Radio. Visitors stumble upon this entry looking for a way to rip MP3s from Pandora.
- Taiwanese Guitar Idol. "Canon Rock" is a masterpiece and it's no wonder there are lots of people looking for a downloadable video of it. Also, a number of the visitors to this entry were Googling for "JerryC versus funtwo".
- Downloading Mozart. Try Googling for "download mozart collection". Everyone's on an MP3 hunt.
- How to rearrange programs on the Windows XP taskbar. I'm not the only one who wished there was a program like Taskbar Shuffle.
- Entrance of the Gladiators: "The circus music". By far the most popular post on the RubeTube. Now the whole world knows the name of "the circus music", and also, where to get a MIDI of it.
- Write unique blog entries. The battle for search engine supremacy is all about finding your own niche(s). Be the first or one of the few to write about something. You don't have to dedicate your entire blog to something totally out-of-this-world like the mating rituals of the Nicaraguan stag beetle; a few "odd" topics once in a while will do. I'd say there are around 5-7 people a day looking for circus music that end up at my blog. Certain categories of entries are also popular, such as the "how to" and the "top N" list. If you have a dozen or so of those "all-star" entries, it all adds up, which leads me to my next tip...
- Don't give up, keep on writing. You don't have to be a full-time blogger for people to visit your blog regularly. Just keep on writing. On some days, you'll just spew out crap; that's okay, blog space is cheap, if not free. On other days, you'll have masterpieces flowing out of your fingers like a blogging Mozart. But the question is: what to write about?
- Be spontaneous. The key is to just share whatever interests you. Every topic is a potential hit in the making. Your thoughts, observations, conversations, and experiences are probably as boring to everyone else as you fear, but you can make up for it by sheer volume (see tip #2). But that is no excuse to sacrifice quality over quantity. Quality, of course, is also very important, which leads us to my final tip...
- Pick your words carefully. There are two aspects to this tip. The first one is obvious: watch your grammar and spelling, and expand your vocabulary. Develop your own writing style that is pleasing to the eyes. You may have had the most fantastic near-death experience in the world, but no one's going to want to hear about it if your blog entry reads like a eulogy. The second aspect to this tip is more subtle. Pick your phrases such that people are more likely to stumble upon your blog when doing a web search. From the popular RubeTube entries above, sample key phrases are "rearrange programs on taskbar", "complete mozart collection", and "remove blogger navbar".
Personally, I'm not in it for the AdSense hits, and I have no dreams (for the time being) of making it big in the blogosphere. It just makes me feel warm and fuzzy inside knowing that I made someone's day more interesting because of something he/she read on the RubeTube. That is blogging's greatest reward.
Happy blogging!
November 01, 2006
I learned about this site a few months back on digg. It has a complete collection of MP3s of all of Mozart's compositions. I'm not really a fan of Mozart or of classical music in general, but I am trying to broaden my musical horizons.I told myself back then that I'd download all of this some day, when our broadband connection at home got fixed. Well, it's finally fixed (yahoo!). So my next problem was: how do I download all of the MP3s on the site automatically? I surely wasn't going to manually crawl the site to download every link.
Luckily, there's a tool for situations like this: Wget. Linux/Unix users are more likely to be familiar with Wget, but I'm betting that the more recent *nix adopters don't know about Wget or what it's really capable of. Most Linux distros should already have Wget, but Windows users can download the binaries here. The nice thing about Wget is that you can use it to download entires sites, i.e., create an offline mirror of everything on a site: pages, links, images, files. You can read the documentation yourself and figure out how to do this, but I'm telling you right now how to download the entire Mozart collection:
wget http://www.mozart-weltweit.de/mozart00.htm -mThe "-m" switch basically tells Wget to crawl the entire site and download everything on it. Use "wget --help" to see all the neat options that you can use with Wget. The great thing about mirroring the Mozart music site is that you also get the HTML pages which give you a nice little directory that you can use to browse the selection.
It'll take some time to get all the MP3s. I'm not even done yet and I've been downloading the whole day. Mozart is a freakishly prolific musical genius; even he would be surprised to learn how many gigabytes of music he's created. I've only downloaded 1 gig and I don't think I'm even at one-tenth of the entire collection.
The more recognizable Mozart pieces are "Symphony No. 40 (Allegro vivace)" under "Later Symphonies" and "Eine kleine Nachtmusik (Allegro)" under "Serenades for Orchestra". Happy listening (and Wget-ing)!
(Where can I find the complete Beethoven collection?)
(Addendum: After five days of continuous Wget-ing, I have finally managed to download the entire collection.)
Labels: classical music, Mozart, music, tips, Wget
October 10, 2006
Exhale all air out of your lungs before descending into the water. This will ensure that you'll sink like a rock. To sink deeper and faster, push your hands up into the water above!
This tip has been personally tried and tested in the swimming pool, by yours truly. If a certified hydrophobiac can sink, so can you! Behold the wonders beneath the surface! Teach all your friends so that you can take underwater pictures!
(Many thanks to Elbert for this life-saving tip.)
This tip has been personally tried and tested in the swimming pool, by yours truly. If a certified hydrophobiac can sink, so can you! Behold the wonders beneath the surface! Teach all your friends so that you can take underwater pictures!
(Many thanks to Elbert for this life-saving tip.)
September 16, 2006
I'm out. It's over for me. Here's the list of advancers to Round 2.
I just can't seem to get past Round 1 of Google Code Jam. Nevertheless, this year's result was better from last year's Code Jam. In Round 1, there are three problems worth 250, 500, and 1000 points each (as opposed to the qualifiers with just two problems: 250 and 1000). In 2005, I was only able to submit a solution for the 250-pointer, and it didn't make it past the Challenge Phase. (See the rules for more info; it's a 15-minute round where you can challenge the solutions of other people and make them fail.)
This year, I was only able to submit for the 250-pointer as well, but it was a solution solid enough not to get challenged. I did make a mistake though in unsuccessfully attempting to challenge, which got me a 25 point reduction. Still, I was able to submit my solution fast enough (208.61 points) so I netted 183.61 points in all. It would've been enough to advance (the "passing" score was 174.60) but my solution failed the System Testing Phase.
Tip for Code Jam 2007 participants: All you need to pass the Qualifying Round and Round 1 is a quick and correct submission for the 250-pointer.
The 250-point problem was like this: given a fraction in the form of n/d (where d and n are integers and d is positive) and a positive integer maxDenom, find a fraction n2/d2 such that d2 is less than or equal to maxDenom, d2 is positive, and the absolute difference between n/d and n2/d2 is as small as possible. If there are candidate ties, take the one with smaller d2; if the numerators are equal, take the one with smaller n2. My solution seemed correct, but my waterloo was floating-point number precision. Given that I was using C#, I should've used the decimal data type insted of double.
I just needed to do a find and replace from "double" to "decimal"! Argh!!! (pounds head in frustration)
Well, that's that. What really sucks is that I have to wait another year for the next Code Jam. But hey, at least I've got a shirt from last year!
I just can't seem to get past Round 1 of Google Code Jam. Nevertheless, this year's result was better from last year's Code Jam. In Round 1, there are three problems worth 250, 500, and 1000 points each (as opposed to the qualifiers with just two problems: 250 and 1000). In 2005, I was only able to submit a solution for the 250-pointer, and it didn't make it past the Challenge Phase. (See the rules for more info; it's a 15-minute round where you can challenge the solutions of other people and make them fail.)
This year, I was only able to submit for the 250-pointer as well, but it was a solution solid enough not to get challenged. I did make a mistake though in unsuccessfully attempting to challenge, which got me a 25 point reduction. Still, I was able to submit my solution fast enough (208.61 points) so I netted 183.61 points in all. It would've been enough to advance (the "passing" score was 174.60) but my solution failed the System Testing Phase.
Tip for Code Jam 2007 participants: All you need to pass the Qualifying Round and Round 1 is a quick and correct submission for the 250-pointer.
The 250-point problem was like this: given a fraction in the form of n/d (where d and n are integers and d is positive) and a positive integer maxDenom, find a fraction n2/d2 such that d2 is less than or equal to maxDenom, d2 is positive, and the absolute difference between n/d and n2/d2 is as small as possible. If there are candidate ties, take the one with smaller d2; if the numerators are equal, take the one with smaller n2. My solution seemed correct, but my waterloo was floating-point number precision. Given that I was using C#, I should've used the decimal data type insted of double.
I just needed to do a find and replace from "double" to "decimal"! Argh!!! (pounds head in frustration)
Well, that's that. What really sucks is that I have to wait another year for the next Code Jam. But hey, at least I've got a shirt from last year!
September 08, 2006
I advanced to Round 1 of Google Code Jam 2006! Woohoo!
I am officially one of the top 1000 coders in the world (if we use Code Jam as a benchmark). Also, I'm the only contestant from the Philippines who was able to advance so I've been given the opportunity to solely represent my motherland (I'm equally proud and dismayed). The complete list of qualifiers can be found here; look for "punzki".
The elimination round for Code Jam was held last Wednesday, starting 12 AM (local time) and ending 24 hours later (Thursday midnight). I came home terribly exhausted from work on Tuesday night, and was ready to sleep (at 11:59 PM) when Akie messaged me on YM to remind me that the elimination round was starting a minute later. I really wanted to go to bed but I might not have even less energy if I take it Wednesday night so I went ahead and took it.
The elimination round had five sets of problems; I was assigned to Set 1. Each set had two problems: one worth 250, and a harder one worth 750. The faster you submit a solution to a problem, the more points you get, but if it fails the system test, you get no points for it (detailed rules here). I was able to do the 250-point problem very quickly and got 236.12 points, but the second problem (a variant of Little Bishops, except that there are some unusable squares) proved much more difficult. I had a correct solution, but it was too slow and exceeded the two-second time limit no matter how many times I tried to optimize it. I'll have to take a look at the solutions of those who got it correct to see where I went wrong.
Here are some quick statistics that may help those who are aspiring to get past the elimination round for Code Jam 2007:
That's the only advice I can provide; I wasn't able to get past Round 1 last year, though I did get a free Code Jam 2005 shirt. Unfortunately, this year, they'll only be sending shirts to the top 250 from Round 2. Well, I guess that means that I'll just have to make the top 250 this year, right? Wish me luck!
I am officially one of the top 1000 coders in the world (if we use Code Jam as a benchmark). Also, I'm the only contestant from the Philippines who was able to advance so I've been given the opportunity to solely represent my motherland (I'm equally proud and dismayed). The complete list of qualifiers can be found here; look for "punzki".
The elimination round for Code Jam was held last Wednesday, starting 12 AM (local time) and ending 24 hours later (Thursday midnight). I came home terribly exhausted from work on Tuesday night, and was ready to sleep (at 11:59 PM) when Akie messaged me on YM to remind me that the elimination round was starting a minute later. I really wanted to go to bed but I might not have even less energy if I take it Wednesday night so I went ahead and took it.
The elimination round had five sets of problems; I was assigned to Set 1. Each set had two problems: one worth 250, and a harder one worth 750. The faster you submit a solution to a problem, the more points you get, but if it fails the system test, you get no points for it (detailed rules here). I was able to do the 250-point problem very quickly and got 236.12 points, but the second problem (a variant of Little Bishops, except that there are some unusable squares) proved much more difficult. I had a correct solution, but it was too slow and exceeded the two-second time limit no matter how many times I tried to optimize it. I'll have to take a look at the solutions of those who got it correct to see where I went wrong.
Here are some quick statistics that may help those who are aspiring to get past the elimination round for Code Jam 2007:
- The lowest score that was able to qualify for Round 1 was a paltry 104.64. This was from Set 4, which had many qualifying scores in the low 100's.
- For Set 1 (my set), the lowest qualifying score (rank 200) was 201.86. I got 236.12, which was enough to rank me 76th in Set 1.
- For Set 1, only 27 were able to solve both problems. Four (ranked 28-31) got only the 750-point problem. All the rest (rank 32-200) were only able to solve the 250-pointer.
That's the only advice I can provide; I wasn't able to get past Round 1 last year, though I did get a free Code Jam 2005 shirt. Unfortunately, this year, they'll only be sending shirts to the top 250 from Round 2. Well, I guess that means that I'll just have to make the top 250 this year, right? Wish me luck!
August 26, 2006
Ever wondered how to add those "Add to..." buttons (e.g., "Digg this!", "Add to del.icio.us") to your site or blog? A lot of people are doing it and there are some good sites where you can learn how. It takes a bit of effort though because you have to copy and paste those URLs and add those cutesy little icons too.
I soon gave up on this because I figured that there just had to be an easier way. Enter Bookmarkz. It's a service that makes it a cinch to add social bookmarking links to any page. Just select the social bookmarking services you want to use (a whopping 94 to choose from!), choose whether you want just icons/text/both, specify a separator, insert the generated HTML code into your template, and that's it! Here's an example of how it'll look like:

One disadvantage with Bookmarkz is that it's a bit slow to load. So if you noticed, you won't see any bookmarklets on the RubeTube's main page, but you'll find them in the individual item pages (take a look here). But that's okay because Bookmarkz will only work on individual pages because it bookmarks by the page title and URL, so I can't use it with every single item on the main page.
If you are using Blogger, you'll probably need to add Bookmarkz' HTML code someplace after <$BlogItemBody>. Enclose it in an tag to make sure it only appears in the individual item pages:
Give Bookmarkz a try today!
P.S. You may have noticed that I have no shame in promoting services that I like. It's just my way of helping out; people who have a normal life don't have time to learn about these things. Too bad I'll never get any endorsement deals (probably not anytime soon anyway).
I soon gave up on this because I figured that there just had to be an easier way. Enter Bookmarkz. It's a service that makes it a cinch to add social bookmarking links to any page. Just select the social bookmarking services you want to use (a whopping 94 to choose from!), choose whether you want just icons/text/both, specify a separator, insert the generated HTML code into your template, and that's it! Here's an example of how it'll look like:

One disadvantage with Bookmarkz is that it's a bit slow to load. So if you noticed, you won't see any bookmarklets on the RubeTube's main page, but you'll find them in the individual item pages (take a look here). But that's okay because Bookmarkz will only work on individual pages because it bookmarks by the page title and URL, so I can't use it with every single item on the main page.
If you are using Blogger, you'll probably need to add Bookmarkz' HTML code someplace after <$BlogItemBody>. Enclose it in an
<$BlogItemBody$>
...
<ItemPage>
<script src=...></script>
</ItemPage>Give Bookmarkz a try today!
P.S. You may have noticed that I have no shame in promoting services that I like. It's just my way of helping out; people who have a normal life don't have time to learn about these things. Too bad I'll never get any endorsement deals (probably not anytime soon anyway).
August 09, 2006
Last Saturday, I had a chat/interview with Joey Gurango, Microsoft Solutions Architect MVP, CEO of Gurango Software, and also CEO of WEBWORKS OS, where I worked as a software developer intern for two months last year. I was interested in what's been happening at WWOS since I left the company, but more importantly, I was interested in an entry-level position.
It turns out that after my stint, WWOS had transitioned from being a consulting/outsourcing firm to one that focused on product development (and they massively cut down on the number of their employees in the process). I was wondering what the difference was when Joey mentioned that there were essentially three kinds of software development jobs:
I'm sure that there are people out there who are looking for a first job in software development but don't know what options are available for them. This blog entry is for you guys and gals who "just want a programming job". I'm not an expert on the subject by any means (anyone know of a Type-4?). But I hope I was still able to help out. Good luck (to us)!
It turns out that after my stint, WWOS had transitioned from being a consulting/outsourcing firm to one that focused on product development (and they massively cut down on the number of their employees in the process). I was wondering what the difference was when Joey mentioned that there were essentially three kinds of software development jobs:
- In-house software development. You'll be working to develop software for your employer, just for internal use or for providing services to their customers. If you work for an "I.T. department/group", then this is probably the kind of software development job you have. Basically, the company isn't really a software company and instead of having some consulting firm address their needs, they decide to do things on their own. One obvious disadvantage of this kind of job is that the software development process will most likely be very informal; the software might not even be subjected to any QA work at all! Because of this, project lifecycles tend to be short. Of course, this depends on the project; if the system will be used by customers, it will have to undergo rigorous testing before it goes into production. But chances are that you will probably not learn much about processes and methodologies even after a year.
If you are serious about learning the craft of software engineering, you really have to think about the experience you will gain from working for a Type-1 company. Examples of Type-1 companies in the Philippines: Smart, Globe, any bank, any organization that's not a software company. - Consulting/outsourcing. Your company addresses the I.T. needs of other companies. Therefore, the quality of the software you produce determines your company's reputation, and hence the number of future projects will you get from your clients and from referrals. Quality is given more emphasis than in a Type-1 company so the processes and methodologies used are well-documented and strictly followed. QA work is a must and the painful steps of requirements gathering and system analysis are given much thought. The source code is usually turned over along with the finished product. As opposed to Type-3 companies (see below), Type-2 companies tend to become bigger and bigger over time in order to be able to handle more projects. Because they need to get as many minds as possible, their hiring standards are relatively low (but this is definitely not a rule).
You'll gain experience with software development, but the amount of experience points you'll get depends on the reputation of the company and the potential for growth within the company. It's possible that you'll just be a coder for years without getting an opportunity to participate in design and planning. Examples of Type-2 companies in the Philippines: Accenture, HP (does consulting for P&G), Soluziona, Orange&Bronze, tons of companies out there with "Solutions" or "Consulting" in their name. - Product development. The experience with a Type-3 job is very similar to the one you'll get with a Type-2, but Type-3 companies develop software (usually proprietary) that is ready for customers to use. As a rule, the software is of the highest quality because one small bug will cause headaches for all your customers and for your tech support team. Much of your work will revolve around a few product lines, and depending on the maturity of the product, you'll either be working on the initial release, fixing bugs, or upgrading the product. Very few Type-3 companies in the Philippines develop software that is sold off-the-shelf; they are usually sold directly to customers.
Type-3 jobs are great opportunities to pick up experience. However, there are very few Type-3 jobs available here in the Philippines. Examples of Type-3 companies in the Philippines: Navitaire, WEBWORKS OS, Lakeside Technologies, can anyone name others?
I'm sure that there are people out there who are looking for a first job in software development but don't know what options are available for them. This blog entry is for you guys and gals who "just want a programming job". I'm not an expert on the subject by any means (anyone know of a Type-4?). But I hope I was still able to help out. Good luck (to us)!
Labels: employment, programming, tips, work

