Have you ever heard the term "built for Adsense"? Have a look at this AJAX word processor site, and then come back here and place your bets on how long it takes for Google to buy the company behind it. Edit: Yes, Google already bought Writely, but this version is available for you to try out right now. Via Fosfor Gadgets.
Largish download, but well worth the wait. There's a description of the process at the website of sto.pp, the post-production house responsible. Make sure you sit through the opening 30 seconds or so and then click-and-hold on the image.
The relatively unknown (to the general public) web browser known as Opera is now free! From humble beginnings in 1996 with a public debut as a small Norwegian browser to 2005 and membership of a very exclusive club - browsers that cost money - Opera has had a good innings. Nvu 1.0 IMPORTANT WARNINGCan we all say 'a sense of foreboding'?
=================
Do **not** run Nvu directly from the disk image (the *.dmg file you just opened) or you will experience a never-ending loop. Please copy the Nvu icon in that disk image to your /Applications directory and run Nvu from there. Thanks.
ServuStats are one of the many free website statistics trackers who offer free services in return for a small javascript-generated button (seen to the left) on your site. Like many other people, I used to use ServuStats to keep track of my site's statistics. But as of today someone in the organisation has had the bright idea of replacing the small button with a gigantic banner ad, without notifying anyone.
This is what the banner looks like:

Needless to say, I will removing the ServuStats code as soon as I have a free moment.
Update: I have now clicked through the banner ad, and discovered that it takes me to my ServuStats page, and then redirects me to engineseeker.com. This rake-it-in-now attitude makes me think that ServuStats have been hacked, rather it being a misguided marketing ploy. I have sent them an email, we'll see what they have to say for themselves.
I mentioned Google's amazing new map service recently, noting that it only worked in Firefox and Internet Explorer. No longer! Google have now got it working with Safari as well.
Google Maps has gone beta. Most definitely worth a look, but only using Firefox or (ugh) Internet Explorer. Make sure you try click-and-drag on the map! Double-click it as well! Amazing stuff - streets ahead of the competition. It only covers the United States at the moment, but expect more countries to be added soon.
Over the last couple of days this site has had something in the region of 200 trackback spams proclaiming the wonders of online gambling. It's actually quite a refreshing change to have some spam again after 10 weeks of being spam free.
After doing a little research, it appears there is no reliable way to block trackback spam whilst allowing legitimate trackbacks, but given their relative unimportance turning off trackbacks for all previous entries appears to be a no-brainer. Clearly the mere fact that someone else is linking to this site is the important point, the trackback's main purpose (* see below) seems to be providing an ego-boosting acknowledgment of that link.
* The argument that trackback serves as a sort of 'continuing the discussion elsewhere' signpost could conceivably be an argument to keep trackback, were it not for the fact that the vast majority of trackbacks are the blogosphere's equivalent of UseNet "me too" posts.
Update: Phil Ringnalda wrote an insightful article on this subject.
ThreadWatch.org have posted a discussion on the possible solutions to blog spamming. Unsurprisingly, they've concluded that a installing a captcha system is probably the best single solution. There's a mention of the bBlog system which has implemented captchas right out of the box - possibly worth looking into.
Using Brad Choate's MTMacro plugin I've enabled smilies on this site
All I did was install the plugin as per the instructions, and then put a bunch of smilies inside a smilies folder (inside my icons folder).
Then I inserted this code into the head of each template (and repeated it with modifications for each different smiley):
<MTMacroDefine name="smiley1" string="">
<img src="<$MTBlogURL$>icons/smilies/biggrin.gif"
alt="" />
</MTMacroDefine>
I installed Adam Kalsey's Improved Related Entries System today. It's working great, except I'm having to go back and add keywords to some badly titled previous entries. Apologies if I accidentally re-pinged anyone - I forgot to turn off notifications in Ecto for the first entries I added keywords to.
It has now been exactly 30 days since MT-Captcha was installed on this site. In that time this site has not seen a single spam comment. The previous month saw spam figures pass the 600 mark, so it would seem reasonable to call that a glorious debut! Thank you James!
This site has recently started to attract spammers, extolling the virtues of viagra, cialis, and large penises in general. Since the Movable Type interface is relatively slow, deleting these spams has become a bit of a pain.
There are several methods of defence, ranging from simply removing the 'post message' button and forcing everyone to preview, to installing Jay Allen's MT-Blacklist, or a script which disables comments after a set period of time. Elise Bauer of the Learning Movable Type blog has an extensive description of the various approaches.
The best solution for minimal admin-interaction (i.e. the best solution for lazy folks like yours truly) appears to be James Seng's MT-Captcha, an MT plugin which adds a graphical security code which the commenter has to read and type in (thus defeating the automated spam bots). Apparently captcha stands for "Completely Automated Public Turing test to tell Computers and Humans Apart."
Fink hell
Unfortunately, in order to draw the images, MT-Captcha requires that you install the perl module gd. I had previously downloaded and attempted to install this using these instructions but got lost in a maze of dependencies and fink hell. However today I stumbled across a promisingly-titled document How To Install gd version 1.8.4 on Mac OSX on DarwinPorts!
However, this meant I had to install darwinports ...
Next up, DarwinPorts
I set about following the site's instructions:
% cd ~
% mkdir darwinports
% cvs -d :pserver:anonymous@anoncvs.opendarwin.org:/Volumes/src/cvs/od login
% cvs -d :pserver:anonymous@anoncvs.opendarwin.org:/Volumes/src/cvs/od co -P darwinports
% cd ~/darwinports/base
% ./configure
% make
% sudo make install
Unfortunately I hit a problem almost immediately. The second cvs command left me with this error:
cvs checkout: in directory darwinports:
cvs checkout: cannot open CVS/Entries for reading: No such file or directory
cvs [checkout aborted]: cannot write: No such file or directory
After a few minutes of Googling I discovered that this error was likely the result of already having a directory called darwinports (i.e. there is an mistake in the instructions). I removed the directory and tried the second cvs command again, and hey presto! Screenfuls of stuff scrolling past as darwinports downloads! This lasted several minutes on my half megabit ADSL.
Eventually it finished and I moved onto the next step. After switching directories as instructed I entered ./configure. Cue lots more scrolling, only to come to a premature end with this message:
Please install the X11 SDK packages from the Xcode Developer Tools CD
configure: error: Broken X11 install. No X11 headers
And then X11
Argh! I thought I had already installed XCode 1.1 back when I was getting tintin++ to work. Apparently I didn't install the X11 part of XCode. Popping in the XCode 1.1 CD confirmed that it was missing. A lengthy 35 minute install later (the last 1% of which took 15 minutes), I was back to the Terminal to try and configure darwinports again. This time ./configure went smoothly, and make and sudo make install both completed without incident.
Finally, gd
Now to install gd! Referring back to the How To Install gd version 1.8.4 on Mac OSX document, the first instruction was to type sudo port install gd. Naturally this didn't work (does any unix software work first time?) - 'port' was not recognised. Adding export PATH=$PATH:/opt/local/bin to my ~/.profile file fixed the problem. After a 5 minutes or so I ended up with a screen like this:
$ sudo port install gd
---> Fetching jpeg
---> Attempting to fetch jpegsrc.v6b.tar.gz from http://www.ijg.org/files
---> Verifying checksum(s) for jpeg
---> Extracting jpeg
---> Applying patches to jpeg
---> Configuring jpeg
---> Building jpeg with target all
---> Staging jpeg into destroot
---> Installing jpeg 6b_0
---> Activating jpeg 6b_0
---> Fetching libpng
---> Attempting to fetch libpng-1.2.6.tar.bz2 from http://voxel.dl.sourceforge.net/libpng
---> Verifying checksum(s) for libpng
---> Extracting libpng
---> Configuring libpng
---> Building libpng with target all
---> Staging libpng into destroot
---> Installing libpng 1.2.6_0
---> Activating libpng 1.2.6_0
---> Fetching gd
---> Attempting to fetch gd-1.8.4.tar.gz from http://www.boutell.com/gd/http/
---> Verifying checksum(s) for gd
---> Extracting gd
---> Applying patches to gd
---> Configuring gd
---> Building gd with target all
---> Staging gd into destroot
---> Installing gd 1.8.4_3
---> Activating gd 1.8.4_3
And that's it! gd is now installed.
Now onto MT-Captcha...
The instructions for installing MT-Captcha itself are quite simple. All you have to do is insert some code into your MT templates. However after making the necessary changes and rebuilding I got lots of these errors:
MT::App::Comments=HASH(0x815db34) print() on closed filehandle OUTFILE at lib/MT/SCode.pm line 5
This turned out to be incorrect permissions on my MT-Catchpa temporary folder. Setting the owner of that folder to www (UID 70) cured the rebuilding errors. However, my security code was still not appearing! According to James Seng if your image doesn't appear it is always related to your gd install. After much frustration I finally realised that my install was missing GD.pm! Seeing as how I know absolutely nothing about perl, I failed to appreciate that gd and GD.pm are two different things, and we need to install both.
Not just gd, GD.pm too
So, after some more googling, I found that GD.pm (version 2.17) can be found here. After downloading and expanding it, perl Makefile.PL resulted in hundreds of error messages:
GD.xs: In function `newDynamicCtx':
GD.xs:440: error: structure has no member named `gd_free'
GD.xs: In function `gd_cloneDim':
GD.xs:460: error: structure has no member named `alpha'
GD.xs:460: error: structure has no member named `alpha'
GD.xs:466: error: structure has no member named `thick'
GD.xs:466: error: structure has no member named `thick'
GD.xs: In function `XS_GD__Image_newFromPngData':
GD.xs:595: error: structure has no member named `gd_free'
GD.xs: In function `XS_GD__Image_newFromGdData':
GD.xs:614: error: structure has no member named `gd_free'
GD.xs: In function `XS_GD__Image_newFromGd2Data':
GD.xs:631: error: structure has no member named `gd_free'
GD.xs: In function `XS_GD__Image_newFromJpegData':
GD.xs:651: error: structure has no member named `gd_free'
GD.xs: In function `XS_GD__Image_newFromWBMPData':
GD.xs:676: error: structure has no member named `gd_free'
GD.xs: In function `XS_GD__Image_copyRotate90':
GD.xs:1189: error: invalid lvalue in assignment
GD.xs:1189: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_copyRotate180':
GD.xs:1210: error: invalid lvalue in assignment
GD.xs:1210: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_copyRotate270':
GD.xs:1231: error: invalid lvalue in assignment
GD.xs:1231: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_copyFlipHorizontal':
GD.xs:1252: error: invalid lvalue in assignment
GD.xs:1252: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_copyFlipVertical':
GD.xs:1273: error: invalid lvalue in assignment
GD.xs:1273: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_copyTranspose':
GD.xs:1294: error: invalid lvalue in assignment
GD.xs:1294: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_copyReverseTranspose':
GD.xs:1315: error: invalid lvalue in assignment
GD.xs:1315: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_rotate180':
GD.xs:1335: error: invalid lvalue in assignment
GD.xs:1335: error: invalid lvalue in assignment
GD.xs:1336: error: invalid lvalue in assignment
GD.xs:1336: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_flipHorizontal':
GD.xs:1353: error: invalid lvalue in assignment
GD.xs:1353: error: invalid lvalue in assignment
GD.xs:1354: error: invalid lvalue in assignment
GD.xs:1354: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_flipVertical':
GD.xs:1371: error: invalid lvalue in assignment
GD.xs:1371: error: invalid lvalue in assignment
GD.xs:1372: error: invalid lvalue in assignment
GD.xs:1372: error: invalid lvalue in assignment
GD.xs: In function `XS_GD__Image_stringFT':
GD.xs:2085: error: `gdFTStringExtra' undeclared (first use in this function)
GD.xs:2085: error: (Each undeclared identifier is reported only once
GD.xs:2085: error: for each function it appears in.)
GD.xs:2085: error: parse error before "strex"
GD.xs:2104: error: `strex' undeclared (first use in this function)
GD.xs:2108: error: `gdFTEX_LINESPACE' undeclared (first use in this function)
GD.xs:2112: error: `gdFTEX_CHARMAP' undeclared (first use in this function)
GD.xs:2114: error: `gdFTEX_Unicode' undeclared (first use in this function)
GD.xs:2116: error: `gdFTEX_Shift_JIS' undeclared (first use in this function)
GD.xs:2118: error: `gdFTEX_Big5' undeclared (first use in this function)
GD.xs:2140: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Image_stringFTCircle':
GD.xs:2188: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Font_DESTROY':
GD.xs:2353: warning: comparison between pointer and integer
GD.xs:2354: warning: comparison between pointer and integer
GD.xs:2355: warning: comparison between pointer and integer
GD.xs:2356: warning: comparison between pointer and integer
GD.xs:2357: warning: comparison between pointer and integer
GD.xs: In function `XS_GD__Font_Small':
GD.xs:2369: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Font_Large':
GD.xs:2380: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Font_Giant':
GD.xs:2391: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Font_MediumBold':
GD.xs:2402: warning: assignment makes pointer from integer without a cast
GD.xs: In function `XS_GD__Font_Tiny':
GD.xs:2413: warning: assignment makes pointer from integer without a cast
make: *** [GD.o] Error 1
Reverting to GD.pm 1.33
This error totally stumped me. There's a thread here which discuses it along with a possible fix, but it might as well be Greek as far as I'm concerned! Finally I read a note here, which suggested that reverting to GD.pm version 1.33 would work on OS X. After a quick download of the older version, I was once again installing GD.pm as per the ReadMe file. This time, despite hundreds of make test errors, make install worked perfectly! A quick rebuild of the site and - wow, stop the presses! I virtually jumped out of my chair as the sweet sight of a graphical security code greeted my eyes!
PS: for perl idiots like myself, here is a useful command to see if GD is working:
perl -e "use GD"
If there are no errors then GD is working.
Back to reality
Alas, despite the appearance of my security numbers, all was not rosy. After turning off comment approval and posting a few test comments, it became rapidly apparent that the security code was not being checked at all. Any comment was accepted, no matter what number was input into the security code field! Back to the drawing board...
Finally, success!
After flailing around for a couple more hours, and reading every one of the 500 comments on the MT-Captcha page, I've finally figured it out. There is a typo in the ReadMe!!! Growl. The key passage is this:
+++++++++++++++++++++++++++++++++++
INSTALLATION MT 3.x
+++++++++++++++++++++++++++++++++++From: http://www.setcomputing.com/blog/archives/computing/2004-September/incorporating_mtsecu.html
Follow Step 1 to 5 as above and then...
But this is wrong, wrong, wrong. What it should say is:
+++++++++++++++++++++++++++++++++++
INSTALLATION MT 3.x
+++++++++++++++++++++++++++++++++++From: http://www.setcomputing.com/blog/archives/computing/2004-September/incorporating_mtsecu.html
Follow Step 1 to 7 as above and then...
Once I completed steps 6 and 7 from the MT 2.x instructions (editing Comments.pm and the templates), the security code check FINALLY started working. I'm on cloud nine!
In the course of researching Movable Type anti-spam techniques, I came across a Bayesian filter plugin by James Seng. It looks promising, but after reading this entry at Al-Muhajabah's MT Tips blog, I've decided to hold off. Apparently you need something like 1000 comments before it 'learns' enough to be useful. I have about 100 comments, so maybe I'll try it in a couple of years
I've been attempting to install Jay Allen's MT-Blacklist in order to help deal with comment spam. However, despite widespread acclaim I found this software quite badly documented and hard to install. The help forums were notably unhelpful - they are full of people requesting help and little to nothing in the way of answers. That said, this is free software and I suppose one can't expect too much.
After precisely following instructions and installing the software (including installing Storable.pm) I ended up with an error when I tried to load mt-bl-config.cgi ("Use of uninitialized value in concatenation (.) or string at /Library/WebServer/CGI-Executables/extlib/File/Spec/Unix.pm line 78."). According to Jay Allen this is a "superfluous perl warning". Whatever it is, MT-Blacklist simply doesn't work. No matter what I click, it takes me to a login page which doesn't allow any logins. Using my Movable Type login and password merely causes the page to reload. Interestingly, using any other login information results in a red box saying 'Invalid Login'. So obviously I am using the correct password information, there's just something broken in MT-Blacklist.
One of the suggestions in the help forums (in reply to someone else's problem) was to simply reinstall MT-Blacklist. I wasted a couple of hours and did so, only to get to the loading stage (running mt-bl-config.cgi) be greeted by a message to the effect that there were pre-existing MT-Blacklist entries in the MySQL database which needed to be removed. After spending a fruitless hour searching for an idiot's guide on command-line commands to drop tables from a MySQL database, I ended up installing phpMyAdmin following these instructions. After that ordeal trying to load phpMyAdmin resulted in this error: " The configuration file now needs a secret passphrase (blowfish_secret).". A quick google led me to this page where I found the solution. Finally, something that worked! Like so much other unix software, this whole ordeal has been a case of 'one step forward, two steps back.'
Unfortunately, after removing the old MySQL tables and reloading MT-Blacklist, I'm getting the exact same problem as before - no matter what I click I get taken to a non-responsive login page. As you can imagine, this is intensely annoying
If anyone has a clue, I'd love to hear from them!
Updated the site! First I installed Marc Liyange's PHP Apache Module in order to experiment with PHP. Then I found a slick PHP random image script which led me to (finally) revamp the site's general look. Finally rid of those default Movable Type colours!
Ok ... I've been discovered by one particularly dorky spammer. He's just posted a spam comment to every single previous post! I am now investigating the options. There is a good summary here, but the best bets seem to be MT-Blacklist and SCode. However according to this page, SCode hasn't been tested with MT 3.x yet. In the meantime I've turned on comment approval, so comments will no longer appear on this site until approved by me. Sorry about that, hopefully it won't last long. Watch this space!
Upgraded this site's underlying software from Movable Type 2.661 to Movable Type 3.11 today. Following the upgrade instructions got me into trouble straight away simply because I uploaded the required files as the root user instead of from my user account. This gave all my files the wrong owner and group, which caused mt-upgrade30.cgi to give me this error:
Bad ObjectDriver config: Connection error: Access denied for user: 'thoughton@localhost' (Using password: NO)
After poking around a bit, I figured out that simply using the Finder instead of FTP to copy the required files from the MT-3.11-upgrade-en_us folder to my CGI-Executables folder solved this problem. Opening mt-upgrade30.cgi in a browser now produced some upgrading messages. Opening mt-upgrade31.cgi finished the job. Movable Type 3.1 should now be installed! But first I had to iron out a few problems.
The first thing I noticed upon logging into the new MT 3.11 installation was that the screen was all mixed up, with some new background images and some old (version 2.661) background images. Rebuilding the entire site fixed this, but on my first few rebuilds I got permissions errors involving index.html, index.rdf, index.xml, rsd.xml and archives.html files. Using the Finder to change the permissions of these files so that the group owner was 'www' and had read and write access fixed these rebuild errors.
Voila! Logging into the site worked fine now. One of the first things I did was to go to the preferences section and uncheck 'Use Old-Style Archive Links'. This switches the individual archive entries to have meaningful names (like upgrading_to_mo.html instead of 000090.html). Rebuilding after this produced a new permissions error involving MT's local archive path (on this site the path is tim/weblog/). Using the finder to change the ownership of the folder so that it was in the www group with read and write access fixed that problem.
I soon realised that the new site did not have the category icons anymore, but copying over topicon.pl and topicon.cfg from my old MT install followed by a rebuild fixed that! So far everything else seems to be working. Watch this space!
Update: Due to the extra two levels in the directory structure of the new meaningful-name archive files I also had to update some image paths on the archive templates.
Movable Type 3.1 was released yesterday. Looks good, perhaps one day soon I'll look into upgrading.
I wanted to add category icons to the website, so after a bit of reading I decided to give the TopIcon Movable Type plug-in a try. Installation was fairly straightforward - the only slightly obscure part was the documentation on the naming conventions for the icon files. I seem to have it cracked though, except for an odd spacing issue where the entry title doesn't extend to two lines.
Update: worked around the space problem by wrapping everything in a table with a defined width for the first cell.
Well, I've taken the plunge and installed Movable Type onto my PowerBook. It's a very popular web log package which also happens to be free if you install it yourself (which probably accounts for its popularity). Since I know nothing about MySQL, I did some googling and found a very useful installation tutorial which led me through most of the process. Everything looks pretty good so far, although I still need to customize the look of the new pages.
Updated the website and added fancier galleries courtesy of iPhoto4 and BetterHTMLExport.