In a blog entry earlier this month, I compared the Firefox branch builds to the Firefox trunk builds (and concluded at the time that it was best to stick with the branch builds for now). Though the previous entry goes into more detail on the “branch” vs the “trunk”, here’s a mini-recap: the Firefox development team creates a separate copy of the codebase just before every major release; and, only low-risk bugfixes are applied to this “branch”. And, for a time after the Firefox 1.0 release, the “1.0 branch” was more stable than the trunk. (more…)
It seems our blog is starting to get some attention. Unfortunately, it is by comment spammers. Realizing that dropping their links across blogs everywhere is a great way to up their search engine rankings, comment spammers make fake comments on posts, much to the annoyance of bloggers everywhere.
To fight this, today I installed the Wordpress plug-in “Spam Karma.”
Spam Karma was a very simple install. I downloaded a .zip file from the link above, unzipped the file, uploaded one file to an existing directory on our blog server, and put the rest of the files in a new directory. Then, I logged into our blog’s adminstration interface and activated the plug-in. Once that was set up, Spam Karma immediately found 27 comment spams.
Spam Karma works by comparing every comment submitted to a “blacklist” of known spammers and words often used in comment spam (like poker and various prescription drugs). Comments are given a score based on the likelihood that they are spam. Comments with a low score are automatically posted, comments with a high score (obvious spam) are deleted, and comments that fall in the middle are sent to a moderation queue. For a more in-depth explanation of Spam Karma’s process, check out Introduction to Spam Karma.
When building a web application you sometimes need to dynamically generate the image. In my case I’m not using HTTP authentication so I have to secure the images another way. I tucked the images outside of the document root and pull them in through a php script as needed. At it’s simplest your php script merely sets the Content-Type, Content-Length and dumps the image.
$fh=@fopen('path/to/image.jpg','rb');
if ($fh) {
header('Content-Type: image/jpeg');
$s_arr = fstat($fh);
header('Content-Length: '.$s_arr['size']);
fpassthru($fh);
}
This is all well and good except that php is adding all sorts of headers to prevent the browser from caching. By overriding php’s headers and adding some of our own we get a much more intelligent solution that allows the browser to cache images locally if they have not changed. The first thing we need to do is generate an Entity Tag or Etag header. (more…)
Since long before I was born, it’s been a Busch Family Tradition to have chili & hot chocolate on Christmas Eve. Nobody’s sure exactly what year or why this began, but given that my father grew up in Wisconsin, we imagine it probably happened whatever year was the coldest, and when his family didn’t have a lot of extra cash for extravagant dinners. It worked out so well, we suppose, that people in my family have enjoyed it every year since.
Well, most of us have enjoyed it. (more…)
As a web application developer I get frustrated by the sluggish user interface that most web applications provide. I want interaction with a web application to be as quick as a desktop application. A number of web applications take advantage of the XmlHttpRequest object, Google suggest being a recent notable addition. All versions of IE 5 and up have XmlHttpRequest, as well as Safari and the Mozilla based browsers. This magic little object lets you make asynchronous HTTP requests behind the scenes and dynamically update the web browser. Apple has a great writeup on XmlHttpRequest in Safari.
Over the coming weeks I am going to publish a series of articles on using XmlHttpRequest that demonstrate the following tasks:
- Demonstrate how to dynamically update form elements
- Using a POST based XmlHttpRequest for when you need to update a lot of stuff
- A technique for making sure the form works without Javascript
- How to use basic authentication with the request
As one of the three three major layout mechanisms — in addition to absolute and relative positioning — floated elements are not uncommon these days. However, the occasional browser weirdness can contribute to float’s already-tricky nature. In particular, IE has the bizarre habit of doubling margins on a floated element if that margin is in the same direction as the floating (such as margin-left on a float:left element). Fortunately, there’s a solution. (more…)

Chris, Leia, Dan & Bryan are in Ottawa this week.
Today’s high temperature is 9 degrees Fahrenheit.
Be back soon!
Yesterday, a visit to the used CD store during lunch revealed the differing tastes we all have in music. Alex picked up a few metal discs. Bryan grabbed a TV show’s soundtrack. I grabbed two CDs (Christmas with the Rat Pack and Cool December) for a holiday party I’m co-hosting this weekend.
We all enjoy listening to our own music in our headphones (and sometimes out loud, particularly when Bryan busts out singing). We thought it would be neat to have our playlists post to our blog. So now, in the left column, below our lists of links, you’ll find the current songs that are are playing “in our headphones”.
One of my coworkers asked me the other day about whether absolutely positioned elements can be placed over form elements. I recalled back to yesteryear when that certainly was an issue, though I wasn’t sure if that still affected browsers today. (Most commonly, the issue would come up with dynamic menus which form elements could sometimes peek through.) (more…)
For some reason, my fellow team members here at RD2 seem to find it amusing to criticize the words that I use. It seems that they all think that they are so smart (and they usually are) about the English language, that they often make funny faces and noises while I am talking. This usually occurs when I use a word that may or may not be in Webster’s dictionary. Let’s just get this right out in the open. I fully realize that there are times that I get a little emotional when I am talking. Sometimes my arms start flapping around uncontrollably while I am speaking my own personal sign language to make a point. Then, for some reason, words start to come out that are not real words. According to my collegues, they should not be used in the first place. I refuse to appologize for the words that I sometimes use. And, I think there are times when these words are so appropriate, that we should all use them. Now, some of the words escape me, but I will list just a few that I often use and explain them. **Some of these are not my words. While I cannot remember where they came from, they seem like words that I likely took from somewhere else. (more…)