Category Archives: Web

Tech Advent Calendars

As in year’s past, several tech communities are running Advent calendars during the month of December:

I have a combined RSS feed (created with Yahoo! Pipes) that picks up all of these advent calendars: http://feeds.feedburner.com/TechAdventCalendars. (Yahoo Pipe source).

Movable Type 5.2 on Mac OS X

It’s been a while since my notes about local development copies of Movable Type and WordPress on XAMPP – a local LAMP stack that runs on Windows. I’m still using both blogging platforms and wanted to update the steps now that I’m doing most of my work on a Mac laptop.

The steps below walk through the installation of a local copy of Movable Type 5.2 on Mac OS X.

These instructions assume you already have MySQL, PHP, Perl, and Apache installed. I believe most of these are present in stock OS X installations, but in my case I’ve upgraded everything manually to more recent versions:

  • Mac OS X 10.6.8
  • PHP 5.3.15
  • Perl 5.10.0
  • Apache 2.2.22
  • MySQL 5.5.17

As an alternative, you could use MAMP which is a packaged, pre-configured compilation of Apache, MySQL, and PHP. You may still need to upgrade some Perl modules, however, as Perl is not included in MAMP.

Important Note: In the instructions below I’m using a lot of settings which should not be used in a production environment (like having a MySQL root user with no password). Since this is a local dev environment, we can take a few shortcuts, but don’t do the same on a live site.

Apache

First we’ll set up Apache for our local hosting of Movable Type.

I’m going to host everything under my home directory: mkdir -p /Users/brian/mt/cgi-bin; chmod 777 /Users/brian/mt. We’ll use this path in the examples below, so change it accordingly for your system.

Next, edit the Apache configuration which is based in /etc/apache2. Edit httpd.conf and make the following changes:

  • Find and comment-out the line that starts: ScriptAliasMatch ^/cgi-bin/... (if present)
  • Add a line somewhere to include our custom config: Include /private/etc/apache2/extra/httpd-mt.conf

Under the /etc/apache2/extra location, create a new file httpd-mt.conf with the directory and virtual host settings:

<Directory "/Users/brian/mt">
AddHandler cgi-script .cgi
AllowOverride None
Options FollowSymLinks +ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerAdmin brian@example.com
DocumentRoot "/Users/brian/mt"
ServerName localhost.mt
ErrorLog "/private/var/log/apache2/mt-error_log"
CustomLog "/private/var/log/apache2/mt-access_log" common
SetEnv DYLD_LIBRARY_PATH /usr/local/mysql/lib/
</VirtualHost>

Next, restart Apache: sudo apachectl -k restart.

Add our virtual host “localhost.mt” to the /etc/hosts file:

127.0.0.1 localhost.mt

To confirm that Apache is set up correctly, visit http://localhost.mt in a browser. Check /var/log/apache2/ to see content in both of the MT log files and confirm there are no errors.

MySQL

Next we’ll set up the MySQL user (mt), password (password) and empty database (mt) for Movable Type.

$ mysql -u root
mysql> create user 'mt'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.07 sec)
mysql> grant all on mt.* to 'mt'@'localhost';
Query OK, 0 rows affected (0.04 sec)
mysql> create database mt default character set = utf8;
mysql> show grants for 'mt'@'localhost';
+-----------------------------------------------------------------------------------------------------------+
| Grants for mt@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mt'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `mt`.* TO 'mt'@'localhost'                                                        |
+-----------------------------------------------------------------------------------------------------------+
mysql> exit;

Movable Type Download

In the instructions below we’ll download the latest open source Movable Type. (Similar steps could be followed for any of the commercial versions of Movable Type.)

The steps below use the Movable Type “Install via SSH” instructions if you want to follow on. The first step is to download and example the .zip file, then move and set up the directories:

$ wget http://www.movabletype.org/downloads/stable/MTOS-5.2.zip
$ unzip MTOS-5.2.zip
$ mv MTOS-5.2/* cgi-bin
$ cd cgi-bin
$ chmod 777 mt-static/support
$ chmod 777 themes
$ cd ..
$ ln -s cgi-bin/mt-static mt-static

Note: If your perl is in a location other than /usr/bin/perl, you will need to edit all of the .cgi files to change the first line.

Movable Type System Check

Now we run the Movable Type system checker script: http://localhost.mt/cgi-bin/mt-check.cgi

This script will check all the required Perl modules. Make sure your Perl configuration has all of the required modules and the database module you intend to use. (In this example I’m using MySQL.) Use Perl CPAN to install additional modules as required.

In my case the Perl modules were pretty straightforward except for DBD::mysql. I finally found the solution (including the SetEnv DYLD_LIBRARY_PATH in Apache config above) from this Stackoverflow answer about Perl CGI not working with MySQL.

Movable Type Configuration

Once we have all the required Perl modules in place, create a config file for MovableType. Copy mt-config.cgi-original to mt-config.cgi and set the appropriate values for the web paths and database settings:

CGIPath        http://localhost.mt/cgi-bin/
StaticWebPath  http://localhost.mt/mt-static
ObjectDriver   DBI::mysql
Database       mt
DBUser         mt
DBPassword     password
DBHost         localhost

With the configuration in place we can login to Movable Type for the first time: http://localhost.mt/cgi-bin/mt.cgi

The first step will create the admin login account and password. I suggest using your real email address here to test any of the system messages.

Next is the “Create your first Website” dialog. Make sure to set the website URL and root correctly using the paths above. For example, above we have the Movable Type files in /Users/brian/mt/cgi-bin, and the website root will be /Users/brian/mt.

Finally you should be able to log in to the Movable Type interface. Create a blog and publish it, then confirm you can view it with the local path provided.

Happy hacking!

Adding DuckDuckGo Search Box to Movable Type

DuckDuckGo is a search engine startup whose claim to fame is their strict privacy policy:

DuckDuckGo does not collect or share personal information. That is our privacy policy in a nutshell. The rest of this page tries to explain why you should care.

Like most other search engines, DuckDuckGo offers a search box code snippet that can be used for site-specific search. Adding this to a Movable Type blog is very straightforward:

  1. Create your own search box on the DuckDuckGo site (make sure to add your domain in the Site Search field); copy and save the iframe code snippet
  2. Login to your Movable Type installation and navigate to the Widgets page
  3. Create a new widget named “SearchDuckDuckGo” and set the content as shown below
  4. Add the SearchDuckDuckGo widget to the appropriate widget set
  5. Rebuild your blog to see the results

The Movable Type widget code will look like the following, with the <iframe> portion copied from the DuckDuckGo site:

<div class="widget-search widget">
<h3 class="widget-header">Search
<div class="widget-content">
<iframe src="http://duckduckgo.com/..."></iframe>
</div>
</div>

If you have a little more room, you can get fancier and include the DuckDuckGo logo, or use the banner version which has a quick summary of the service:

DuckDuckGo Search Box Examples

DuckDuckGo Search Box Examples

Note: These steps were confirmed on Movable Type 4.x and should be similar on 5.x.

How to Remove Yourself from www.Spoke.com and Center.Spoke.com

This is an update to my 2010 article about removing yourself from Spoke. Since that time, the original Spoke service split into two variants: www.Spoke.com and Center.Spoke.com.

To remove your profile from both services, their FAQ provides the steps needed:

I found my Profile in search engines like Google and I don’t want it there. How do I remove it?

Both members and non-members of Center.Spoke have the choice to remove their profile from being viewed in search engines, although the process for each is different. Members can remove their information using functionality for managing their profile. Simply edit your privacy settings to ‘Private’ and the profile will be removed from any Search Engine results.

If you would prefer to remove your profile from search engines, but are not a member, access your profile by searching for your name on Center.Spoke.com and choosing the profile you would like to remove. When viewing the profile, click the “This is me” button. On the next page, locate the ‘To suppress your profile, click here’ link on the right side of the next page and follow the instructions.

Please note, you will need access to a corporate email address to remove a profile, but that access to the email address associated with the profile you would like to remove is not mandatory. Center.Spoke requires a corporate email address to remove profiles so that identities can be verified and fraudulent claims can be avoided. If you do not have a corporate email address, please log a support ticket for further assistance.

How do I remove my profile from the new service, WWW.Spoke.com?

Removing member information from www.spoke.com is easy. We ask that you do so sparingly, as the collective value to the business information ecosystem is made greater by every relevant piece of data that we are able to provide it with. However, that being said, we are sensitive to the fact that not every business professional wants to have a presence on the internet and for these cases, we’ve put in place a process that you can use to request suppression.

First start from a page on www.spoke.com (note that if you are reading this, you are on center.spoke.com, not www.spoke.com). Simply go to your profile page, click the link at the bottom that will initiate this removal process, and submit the completed form. After we have approved your request, it is important to note that it can take from a few days to several weeks for links to a profile to be fully removed from search engines’ rankings. Unfortunately this part of the process is not under our control and is dependent upon the indexing activities of the search engines.

After following these steps, your Spoke.com page will probably appear up in search results for a little while, but should eventually clear stop. In any case, anyone clicking on my profile will just see the message “This profile is no longer available”.

I recommend not installing their toolbar or providing any further information on the site. You should be able to give just enough to “claim” your profile, then disable the public view of it.

JIRA OnDemand: Great Solution For Vendors and Partners

Keeping track of technical issues, bugs and tasks between companies can be a real hassle. In my current job, we’ve been using Excel spreadsheets with a couple of partners, emailing them back and forth with changes and updates. These quickly get out of sync, causing us to lose track of important issues. Also, this is only helpful for a very short summary of each issue — forget trying to have a more detailed conversation or screenshot attachments.

For one project we decided to try JIRA OnDemand and couldn’t be happier with the results. For only $10/month for the first 10 users, we’ve got a shared online tracking system that both companies can access. We divided the 10 users up across the two companies, and were up and running in about 10 minutes.

It helps that JIRA is pretty simple to learn and use, especially for anyone who’s used any type of bug tracking system. We’ve got email notifications, attachment support, and the ability to converse in detail on each issue as we resolve them.

Highly recommended!

JIRA OnDemand pricing chart
JIRA OnDemand pricing starts at an easy $10 per month for 10 users!