After sitting on an XHTML Strict template for years and years, I've finally migrated this site's theme to HTML 5. A number of new elements have been put to use, styles have been trimmed a little, and I'm using one less web-font. Hopefully I haven't broken too much; if you spot something, let me know in the comments below. As always, expect sporadic updates as I add polish.
Migrating to HTML 5
Jan 20, 2015Electrolysis Growing Pains
Jan 16, 2015In their march to copy Google Chrome, Mozilla is moving Firefox to a multi-process architecture. The code name for this project is Electrolysis. As of this writing, this project's integration target for released levels of Firefox is at the end of 2015. Dates can always slip, and are likely to, but that target seems real soon now.
Frustratingly, Mozilla has been surprisingly quiet about this upcoming change, at least from a developer standpoint. For months the Mozilla Add-ons Blog has promised upcoming articles on the changes necessary for add-on authors, but as of this writing, nothing has appeared. What documentation does exist is, as usual, poorly written. The examples they provide aren't real-world enough for me to fully understand.
It frightens me that Mozilla should be so lackadaisical about evangelizing these changes. This architecture shift will affect the vast majority of add-ons in one form or another. I verified tonight in a nightly build that both Googlebar Lite and CoLT are affected by this change, the former being broken in a number of areas. It seems to me that Mozilla should shift their evangelism of this new architecture into high gear. Every developer who cares about application compatibility needs to be working on these changes sooner rather than later; otherwise, a ton of add-ons won't work properly come release day.
Redirection Woes
Sep 5, 2014I recently made a change to this site to remove the 'www' from the front of the URL. Well, it turns out this caused a large number of headaches with WordPress (though I think the actual root cause of the problem lies in a custom .htaccess rule set that I wrote). Anyways, I'm going back to the old-school 'www' style URL until I have more time to fix it. If you see problems with the site, please let me know.
French Toast
May 6, 2014I've been meaning to transcribe this recipe for some time:
- 3 beaten eggs
- 3/4 cup milk
- 1 tablespoon sugar
- 1/4 tsp salt
- Ground cinnamon (optional)
In a shallow bowl beat together eggs, milk, sugar, and salt. Dip bread in egg mixture, coating both sides. Sprinkle cinnamon over the surface of each slice as you cook them.
Firefox Extension Utilities
Apr 28, 2014I have created a GitHub repo storing several Firefox extension utility scripts that I wrote. Here's the rundown on what this repository contains:
- compareLocales.pl
- Compares all of the locales it finds against a "master" locale (
en-US
by default) and reports the number of exact duplicate entries for each. This is useful for figuring out which locales have not been updated. - entityToProperty.pl
- Converts a given list of locale entities into corresponding properties. Handy for migrating existing entity localizations into a
.properties
file. - removeLocaleEntries.pl
- This script removes a given list of entries from all of the locale folders it finds in the current working directory and below. Useful for cleaning up strings that are no longer needed.
Hopefully others will find these scripts to be useful. I hope to add additional scripts to this repository over time.
Born Geek on GitHub
Mar 22, 2014I have uploaded the source of both CoLT and Googlebar Lite to GitHub:
This should make it way easier for folks to submit new ideas and bug reports for each extension, provide patches (if you feel so inclined), and view sample code for Firefox extension development. I've already posted a few issues to the CoLT repo, and a number should be appearing for Googlebar Lite as well.
Exploration in Gaming
Oct 10, 2013For a little while now, I've been playing and enjoying Terraria, a side-scrolling exploration game (somewhat similar, from what I hear, to Minecraft). Its 16-bit vibe really hits the nostalgia button for me, not to mention that it's just plain fun.
That said, I think the single most attractive feature of this game is that you get to really explore a computer-generated world (no two of which are alike!). It's the exploration factor that attracts me most. Once I hit the "hard mode" portion of the game, it starts to feel like a grind to me. The discovery of brand new places and items is my carrot on the stick; once I've fully uncovered the map, the game loses its luster.
I think the same thing can be said for a number of other games I have enjoyed in the past, including ones like Skyrim. The expansive world is just plain fun to explore; there's always a new cave, or city, or ruin to find and explore. Quests can keep things interesting, but it's seeing new places that really gets me excited.
Are there any games out there that are, to some degree, solely about the exploration? I'm pretty sure that Dear Esther fits that bill (and I have yet to play it), but I'm wondering if there are others I've missed. I have to believe that purely exploration-based games have a market (see Beyond Eyes, for example). If anyone can provide recommendations for titles in this space, I'd love to hear them.
NC SECU's Car Buying Service
Sep 26, 2013Let me get the crux of this review out of the way: the car buying service offered by the North Carolina State Employees' Credit Union (of which I am a member) rocks. Before I get to the details, allow me to provide a little background.
I've been driving a 1999 Mazda Protege since June of 2000. The Protege is an extremely reliable car, but mine was really starting to show its age: rust was visible in a few places, the pin stripes on the side were flaking off, and the car had gotten quite loud on the road (the wind and road noise were pretty unbearable). Having talked about getting a new car for a year or two, I finally decided to take action. In searching for a new car, I had a few essential criteria:
- It should be a four-door sedan
- It should have a quiet and smooth ride
- It should be a step up in quality from my Protege
I ended up test driving five vehicles, all in the same size and price class: the Honda Accord, Hyundai Sonata, Mazda 6, Nissan Altima, and Toyota Camry. All of these vehicles have their own strengths and weaknesses (e.g. the Mazda 6 was the sexiest on the outside, but had a rather loud and "active" ride), but I was able to whittle it down to two cars: the Altima and the Camry. I ended up choosing the Camry (though it was admittedly a tough choice; the Altima is a pretty nice vehicle).
Once I knew what I wanted, I started looking at local dealers' prices. My dad reminded me that our credit union had a car buying service, so I looked into it, mostly out of curiosity. Their process typically works as follows:
- You select the make, model, and year of the car you're looking for.
- You select the color and options you're interested in.
- You provide some contact information and submit.
Once the credit union has your information, they'll look for a car that most closely matches what you asked for. They'll then negotiate a price for that car, and will let you know what that price is. The turnaround time for this entire process was only two days (I submitted the request on a Monday and had a quote the very next day). My primary goal was to get an anchor price that I could use when negotiating with the local dealers.
The quote I received for the car I was interested in was way less than I expected it would be; nearly $5500 off the sticker price! Not only that, but they offered me nearly double what Carmax would have given me for my Protege! Needless to say, I was stunned at how competitive the deal was. Car shopping is an intimidating process and the negotiation phase was something I wasn't looking forward to at all. This service shortcut that headache altogether!
I decided to not even bother trying to negotiate for a better deal elsewhere. I'm sure there are people who could have gotten a better deal, but I decided that my time and efforts were worth something, and SECU's offer was very tempting. The car was delivered to my local SECU branch (they can deliver to your house, if you so desire), and most of the paperwork was handled for me. I essentially drove to my bank and swapped cars with the driver who delivered it (after signing the requisite forms, of course).
All in all, I would definitely use this service again. I'm so impressed with how easy it all was, and it took the most frustrating aspect of car buying out of the equation completely. If you're a member of a credit union, I highly recommend checking out this kind of service if it's available. It just might be the way I handle car buying from now on.
Font Rendering & Firefox Hardware Acceleration
Apr 11, 2013By default, Firefox ships with the Use hardware acceleration when enabled option turned on. Unfortunately, Firefox has a number of font rendering bugs under the hardware acceleration umbrella (the following are a select few):
- Line spacing problem with D2D enabled(use hardware acceleration when available)
- Text using hardware acceleration looks inferior to and considerably different from text with acceleration disabled and on other browsers
- Increased line heights with DirectWrite (unlike in IE9)
As a result of these bugs, I've run with hardware acceleration disabled on my personal systems for quite some time. This, however, has resulted in an unforeseen consequence with my web development. The apps and pages I've developed look great in every browser, except stock Firefox! I only recently ran into this issue when I re-enabled hardware acceleration on my work laptop (in the process of creating a new profile). To my horror, several sites I had developed looked pretty terrible, my photo site being one among them.
I have since rolled out an updated stylesheet to my photo site, fixing the problems that showed up in stock Firefox. It should (hopefully) still look alright in all other browser variants (if you spot a bug, let me know). It's worth knowing, however, that enabling hardware acceleration in Firefox is a worthwhile thing to do if you develop things for the web. The underlying bugs in the rendering engine may bring out underlying flaws in your design.
New Responsive Design is Live
Apr 2, 2013I have just pushed out the responsive version of this site's theme, so you should see it immediately. Though the various tweaks may not be immediately apparent, the experience of this site on a mobile device or tablet (or a smaller screen in general) should be much better than before. Resize your browser window in the horizontal direction to see the style changes in real time!
There are still a few pain points to work through:
- I'm still a little unsure how to handle the syntax-highlighted code snippets in the various posts around the site. Snippets that don't use syntax highlighting will word-wrap, but the syntax-highlighted blocks currently just offer a horizontal scroll bar.
- Various images in older posts need to have their hard-coded sizes removed from the
img
tags, so that they'll scale appropriately. This is just a matter of going through and making those changes.
There could be other issues that I have yet to stumble across. From my limited testing, the site looks alright in Firefox, Chrome, and IE-9. I'm sure I'll be tweaking stuff here and there over the next few days. If you spot problems, please let me know by leaving a comment.
Controlling Mobile Browser Layout
Mar 26, 2013I'm currently working on converting this site's layout to a fluid, responsive-design variant, which will make the site much more usable on mobile devices (as of this writing, the mobile experience is pretty bad). In my efforts to improve the design, I noted that the browser on my Android phone didn't respond to my changes at all. The Responsive Design View in Firefox yielded acceptable results, as did the developer tools available in Chrome (which, by the way, are pretty terrible). So why did my phone look so different?
The answer has to do with the concept of the viewport. I found a terrific pair of articles detailing the ideas behind viewports on both the desktop and mobile devices (be sure to read the desktop article first; it sets the stage for the second). It turns out that my page's header was missing a key meta
element, whose very existence we can thank Apple (of all people) for. The tag looks like this:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=8" />
Using this meta
entry allows devices to scale their layout viewport appropriately. Adding this one element fixed my phone, causing the site to render as expected. There are other articles that discuss this element better than I could, so give them a look. And don't forget this one line if you're designing responsively; it'll save you a lot of potential headache!
Improving Code Snippets
Feb 15, 2013I have decided to start using the SyntaxHighlighter package here at this website, to make various code snippets a little easier to read. This package really appeals to me since it supports a number of languages, has a graceful fallback mechanism, and looks nice. Rolling out these changes will be slow, however, since I have to go through and apply some styling to all the appropriate code blocks. As always, let me know if you spot a problem with this new feature.
Missing Backslashes
Feb 14, 2013I just realized that a number of posts that were imported to this site from my old blog are missing backslash characters. After doing some investigation, I found out that there's an associated WordPress bug (Ticket #21007) against the importer utility. Apparently, backslashes aren't preserved as they should be.
I'm working to fix all of the relevant posts and comments. When I've completed this task, I'll update this post.
Update: I believe I have fixed all of the relevant posts. If you spot a problem somewhere, let me know!
Logging to Firebug From XUL
Jan 24, 2013The Firebug extension is a very helpful tool for web development. But did you know that you can use its console as an output target for your Firefox extensions? It's pretty simple to do:
Firebug.Console.log("Text to log"); // Output text Firebug.Console.log(myObj); // Output an object
Is that easy or what? Having this capability is a great way to print out JavaScript objects from your Firefox extensions, making your debugging life much easier.
Fixing Location Services in Android
Nov 5, 2012I have a Samsung Galaxy Tab 7.0 Plus running the Ice Cream Sandwich version (4.0.4) of Android. For some unexplained reason, the location services feature stopped working a few months ago, but only for what seemed like a few applications. Google Plus no longer knew my location, Radar Now no longer knew it, and the stock web browser was also clueless. Google Maps, on the other hand, knew right where I was. Since I use the tablet in the house, GPS isn't much help. I frustratingly was unable to fix things, until today, when I stumbled on a solution. Here's how I did it:
- I opened up Settings » Location services and unchecked the Location and Google search option
- I rebooted my device
- Back in Settings » Location services, I rechecked the Location and Google search option
- I then toggled the Use wireless networks option, and answered a prompt that appeared about using my network location in third-party apps (or something similar; I don't have the exact message in front of me).
- Success!
Using GPS to lock in on my position worked outside, but that alone didn't seem to set things right. Disabling the above option, rebooting, and then re-enabling it seemed to do the trick. Hopefully this will help anyone else who might have a similar problem.
Installing iTunes Without the Bloat
Oct 25, 2012I went looking for how to install iTunes recently without the bloat (because I remember seeing an article about doing just that a while back), and though I found the article, it had apparently moved from its original location. As such, I'm going to note down the steps here in case said article ever disappears. The following is intended for use on a Windows 7 64-bit system, but I think these steps should work in general. It's also intended for using an iPod classic, which is the only Apple device I care to use (though these instructions also work with the nano, mini, and shuffle variants).
- Download the iTunes installer
- Unpack the installer using something like IZArc
- Run the installers, using the given commands, in the following order:
- AppleApplicationSupport.msi /passive
- Quicktime.msi /passive (if this installer is present)
- iTunes64.msi /passive
Torchlight 2 Review
Oct 9, 2012Back in 2009, I reviewed the original Torchlight. Now that the sequel is out, I thought I'd post a few brief thoughts on it as well. Note that I've only played the single-player aspect of this game so far (oddly enough, that's the kind of gaming I prefer). In short, not only does this game blow the original out of the water, it comes close (in my opinion) to doing the same to Diablo 2, which is my favorite action-RPG of all time.
The Good
- Bigger Maps
- The maps in Torchlight 2 are so much larger than in the first game, that it's ridiculous. There are tons of places to explore, including some sub-dungeons that are completely optional! Make sure you explore every nook and cranny; you might otherwise miss something awesome.
- Level Randomization
- The randomization of each level is mind blowing. I currently have five characters I'm playing (I've finished the game with two of them so far), and in every play through I've seen something different. And I'm not just talking about level layout; I've actually seen different set pieces every time I've played! Finding new stuff is always a thrill.
- Great Graphics
- I've seen lots of people complain about the look of this game, but I love it. Sure it may look "cartoony," but that's part of the charm. It's different. And it runs really well on my aging computer, which is always a plus.
- New Classes
- This time around there are four new classes to play. Although they share some features with the original game's classes, for the most part they are all unique and different. How you play each will change drastically, depending on the build you develop over time. There's a ton of re-playability right here alone! As of this writing, I've completed the game with the Berserker and the Engineer. I'm currently playing as an Embermage, and will try out the Outlander (which looked to be the weakest class) last.
- Cheap
- It's still only $20!
The Bad
- No Respecs
- Unfortunately, you can only respec the last three skills you've earned at any given time (for a price!). This makes it very easy to paint yourself into a corner with a lousy character build. Being able to respec all of my character's skills would be great, so I could try different builds on the fly. Hopefully someone will improve this situation when the modding tools are released.
- Weak Story (Again)
- The storyline in this game is pretty weak (as it was in the first one), and isn't as clear as it should be. I wasn't expecting much, though, so this is a minor gripe.
The Verdict
Torchlight 2 is a fantastic game, and has more fun-per-dollar baked in than any other game on the market. At only $20, the only question worth asking is why wouldn't you buy this game? A+
On the Importance of Documentation Updates
Sep 20, 2012Even though the site aggravated me at first, I still occasionally troll Stack Overflow. One of the leading problems I see in questions pertaining to PHP & MySQL, is people's use of the MySQL extension in PHP. This extension, it turns out, is being deprecated. But does the documentation reflect this fact? Yes and no.
Certain function pages, such as mysql_real_escape_string, have big red boxes at the top indicating that the extension is being deprecated. "Don't use this", they seem to shout. Other function pages, however, such as the mysql_result page, don't have these warnings. Likewise, the top-level MySQL Drivers and Plugins page lists the MySQL extension first, with no indication whatsoever that the extension is being deprecated.
At the very least, every single documentation page that deals with the MySQL extension in any form or fashion, needs to include information about its intended deprecation. Otherwise, thousands upon thousands of programmers will write code using a plugin that is quickly nearing it's end-of-life. Which, based on what I see at Stack Overflow, already seems to be the case.
Target Weight Acheived!
Jul 16, 2012Back in June of 2010, I began tracking my weight using the Libra app for Android. For those who don't recall, this app uses some of the tracking ideas presented in The Hacker’s Diet, a fantastic (and free!) weight loss book.
Over the weekend, I finally got the trend line to dip below my target weight for the first time! Here's a snapshot of the latest chart:
This new goal line is slightly modified from my original goal, which can be seen in the old chart:
As you can see, I used to be up in the "overweight" section for someone my height; now I'm down into the "normal" range! I cannot recommend this app highly enough. Simply tracking my weight has been a useful tool in helping me to get a little healthier. Hopefully it can help others out there as well!
Year of the Code Monkey Closed
Jul 1, 2012After a great deal of preparation, I have finally closed the doors on Year of the Code Monkey, my former blog URL. All of the old URLs should redirect to this site instead, including the RSS feed. If you have a subscription to the old Year of the Code Monkey RSS feed, please update the URL to point to the Born Geek feed instead. At some point in the future, I will remove the redirection rule for that feed.
As always, let me know if you spot some sort of problem with this migration.