Articles for the 'Web' Category

Searchable tab switching in Firefox 3.6

As an emacs user, I've found iswitchb (interactive-switch-buffers) to be a huge time saver. Basically, to switch files (buffers) you enter a typically byzantine key combination and then type to search through your open files - as less and less files match your search, the choices narrow down, and you can choose between them. This ends up being way faster than switching with a mouse even in tabbed editors, and I've managed to set up a similar thing in Eclipse/Aptana. But until recently I didn't have the same functionality for switching tabs in Firefox.

Apple text emboss

Back in the days of OS X 10.1 I wasn't a really big fan of the striped backgrounds, overblown transparency, and over-the-top animations Apple was using to show off their new desktop. However, in the last few releases they've tightened up the look of their OS, made it much more consistent, and have ended up with a really nice design that I find very inspiring. The OS X aesthetic has of course translated over to the iPhone, where it's even more elegant.

Posts I haven't written

I haven't been updating this blog too much recently. I never meant for this blog to run on a schedule, but I did intend to post more frequently than this. My original idea was that the blog would serve two major purposes. First, it is a place for me to announce new projects or updates to software and websites I've already released. It's done that quite well, though I haven't had much to announce recently. My job has been taking the majority of my development time, and most of the projects I've been working on at home are either private or haven't been released in the form I'd like to because my employer hasn't approved them for release yet.

The second major purpose for my blog is as a place for me to record the solution to problems I run across while developing software, so that others won't have to spend hours Googling or using trial and error to come to the same conclusion. I didn't intend to rehash things that were easily found or that had already been discussed - only to post when I felt it was something that added value to the internet that hadn't been there before. So a lot of the blog posts are not really a narrative or running commentary - they're not meant to be subscribed to, but found individually. It's for this reason that my most popular posts tend to include the exact text of error messages. This type of post has suffered both because I haven't been doing as much development, because I can't discuss a lot of what I've learned due to the nature of the projects I'm working on, and because I've been learning new stuff (like Ruby on Rails) and haven't done enough to have solved problems others haven't already posted solutions for.

The third reason I have this blog is to occasionally talk about my thoughts on different technical topics, from web development to video games. Again, I don't like to make a post unless I think I'm adding something new, and most of the topics I've wanted to talk about have already been covered. I had a lot of draft posts sitting around about web development, web standards, and the evolution of browsers, but then I discovered Alex Russell's blog and it turns out he's already said most of what I wanted to say, and better than I could. Other stuff, like my impressions of Windows Vista, critique of stackoverflow.com and suggestions for the Xbox Live Arcade lineup, have been covered to my satisfaction in plenty of places. Maybe some of them will end up posted, but probably not.

Another part of the reason I haven't posted much is the sheer weight of unfinished posts I have. Right now I have 64 drafts and only 52 real posts! So I'm going to attempt to clear things out by writing a little about what I haven't posted. A lot of this stuff wasn't posted because it fell under that third point above, but some of it I was just too lazy to flesh out into real posts. Some of it's just random stuff. So here's what's been happening in the last year:

Setting up IIS7 (with bonus PHP instructions!)

Every time I try to set up IIS7 on a Windows Vista machine I run into the same series of problems. You'd think I'd have learned by now, but I usually just struggle through the cryptic error messages and get it working one way or another, then forget about it until the next time I need IIS7 on a machine that doesn't have it. Finally I'd had enough and so I decided to write myself a little guide here so I won't waste as much time next time. These instructions are basically the same as these, but with additional detail and screenshots.

Firefox bug rendering list items next to floated elements

I was working on a web app a couple weeks ago when I hit a weird problem. I had a sidebar floated right, and an unordered list right next to it. What was weird is that each list item was getting “pushed aside” by the floated sidebar. This went against what I thought I knew about how floats work in CSS. My understanding was that floats should be removed from the page layout, and appear above any other block level elements, like my list items. Reading CSS Float Theory: Things You Should Know and the W3C spec on floats only backed up what I thought. Floats should always appear above block boxes, like LIs. I wrote up a minimal test case and tried it out. What I expected was something like this, where the green boxes are LIs, the red box is my floated DIV, and the purple box is a normal block element like a P:

MSN Messenger needs to be able to sign in from multiple locations at once

Like most Americans, I've been using the AOL Instant Messenger IM network for the last 10 years or so. As I've made more friends who prefer other networks, I expanded to multi-platform IM clients that let me sign into all the major IM networks at once. I've used Trillian, Adium, Meebo, and Pidgin over the years, and I have active screen names on AIM, MSN, Yahoo, GTalk, and various Jabber services. So when it was announced that the Xbox 360 would include an MSN Messenger client with the Spring update, I was excited. I'm already signed in to MSN all the time, so I thought this would just be another great way to stay connected.

Installing Aptana on Windows Vista with Aero Glass

I've recently given up Dreamweaver entirely in favor of Aptana, a great (and free!) Eclipse-based web development IDE. It features great JavaScript IntelliSense, document outline view, AJAX library function autocomplete, and an FTP component that should make Dreamweaver users very comfortable. Even better, with plugins like Subclipse, you get source control for your websites. Basically, it's one of my favorite programs.

Creating nested custom configuration sections in ASP.NET 2.0

This weekend I decided to go through the hodgepodge of common code that's shared between a lot of my ASP.NET websites and refactor it a bit. I'd only just learned about the magic of HttpModules and HttpHandlers, and I immediately saw a lot of canidates in my copy-paste code and global.asax handlers where a HttpModule would be a better solution. One of these was the code I was using to redirect old pages to new pages whenever I moved them. For example, at some point I had moved http://www.numbera.com/rome/tools.aspx to http://www.numbera.com/rome/tools/, and I wanted anyone who visited the old URL to get redirected to the new one. Previously, I just had some code in global.asax that hooked Application_OnError, checked to see if it was an HttpException (a 404 file not found, specifically), and then redirected if it knew where the file really was. Pretty simple, but not very general. So I broke it out into an HttpModule that basically did the same thing, but no longer required me to cut and paste code into my global.asax. However, one improvement I wanted to make was to allow for configuration through my web.config file, instead of having to hardcode an if/else tree for each redirect. I basically wanted to have a section in my web.config like this:

<configSections>
    <sectionGroup name="brh.web">
     <section 
       name="redirectOldUrls" 
       type="Brh.Web.RedirectConfigurationHandler, Brh.Web.Utility"
     />
 </sectionGroup>
</configSections>

<brh.web>
  <redirectOldUrls>
      <redirect filePattern="tools.aspx" url="~/tools/" />
    <redirect filePattern="strategy.aspx" url="~/strategy/" />
    <redirect filePattern="military_people.aspx" url="~/people/" />
    <redirect filePattern="history.aspx" url="~/history/" />
    <redirect filePattern="teacher.aspx" url="~/teacher/" />
  </redirectOldUrls>
</brh.web>

Hogblog

It seems these days that everyone has a blog (or two). There are big news blogs, little blogs with useful articles (such as the many C# blogs I read), the countless teenagers with MySpace or livejournal blogs. There are blogs about tech, politics, clothing… there are even blogs about blogging! Even I have been sucked into the blogging scene. Even my Xbox 360 has a blog. So why shouldn't my hedgehog have a blog?