Moved to WordPress for technical blogging

So I’ve decided to move my technical blog to wordpress, the .org version, not the .com version; that is, to host my own instance of wordpress. The move came from various reasons:

  1. syntax highlighting for soure codes,
  2. LaTeX support for my stat/math display,
  3. post via email,
  4. post via emacs,
  5. text-to-html syntax for blogging (think org-mode),
  6. easy to backup,
  7. all these features must be permanent (ie, the services above cannot be changed and my posts no longer look “right”), and finally,
  8. extensible

Points 4, 5, and 8 were never addressed with blogger, and point 2 was not consistent (contradicts point 7).

Posterous seemed very nice when i tried it out (especially point 3), but it didn’t seem too good for points 1 and 2 (although points 2 can be addressed by mathurl or Sitmo’s Equation Editor based on this post). I tried once, but thought it was inadequate. I knew it was possible to install your own wordpress version on a server but thought it was too much of a hassle. However, out of the blue I looked into the above features and found that wordpress had plugins (point 8) that really much fulfilled a lot of my needs.

I will outline how I installed wordpress on my school’s server and how I customized it to give me the features I want.

I pretty much followed the instructions from wordpress. My server already had apache on it, so I installed the following in addition:

<pre class="src src-sh">sudo apt-get update

sudo apt-get install php5 sudo apt-get install mysql-server sudo apt-get install php5-mysql ## mod_rewrite Apache module already installed wget tar xvf latest.tar.gz mysql -u root -p ## enter password

In mysql, I have to set up the user and password:

<pre class="src src-sql">CREATE USER <span style="color: #ffa07a;">'ENTER MY USERNAME'</span>@<span style="color: #ffa07a;">'localhost'</span> IDENTIFIED BY <span style="color: #ffa07a;">'ENTER MY PASSWORD'</span>;


I also have to set up a database for the blog’s data by:

<pre class="src src-sh">mysql -u USERNAME -p

 IDENTIFIED BY "Enter WordPress Password";

We also need to update the wp-config.php file:

<pre class="src src-sh">emacs -q -nw wp-config.php <span style="color: #ff4500;">## </span><span style="color: #ff4500;">follow instructions in above site, generate random key, and set table_prefix to "snc_" for supernerdycool</span>

cd ~/ cd cp -rf ~/Downloads/wordpress/* ./

sudo emacs -q -nw /etc/apache2/conf.d/virtual.conf sudo emacs -q -nw /etc/apache2/conf.d/virtual.conf ## make sure it looks like following: # # We’re running multiple virtual hosts. # NameVirtualHost * ## done

## make sure following is in /etc/apache2/httpd.conf: LoadModule rewrite_module /usr/lib/apache2/modules/

sudo emacs -q -nw /etc/apache2/sites-available/ place following in it: # # (/etc/apache2/sites-available/ #

# Basic setup ServerAdmin EnterMyEmail ServerName DocumentRoot /path/to/

# HTML documents, with indexing.

Options Indexes FollowSymLinks MultiViews

## enable site sudo ln -s /etc/apache2/sites-available/ /etc/apache2/sites-enabled/ sudo /etc/init.d/apache2 restart

## go to in web browser

I initially had some errors with mysql and php, but this showed me that I was missing mysql-php in the install (apt-get); restart apache again.

To install plugins, it is easiest to have an ftp server set up for the server. I installed it via “apt-get install proftpd ## select standalone.”

I addressed what I wanted above with:

  1. SyntaxHighlighter Evolved,
  2. wp-latex,
  3. postie (require php5-imap for imap) or wordpress’s native email support (this didn’t work too well for me’) – email does not work well with wp-latex and syntaxhighlighter as this modifies the incoming text,
  4. weblogger mode in emacs (turn on xml-rpc in wordpress),
  5. Markdown for WordPress and bbPress
  6. backup by using rsync (for wordpress files) and mysqldump for the database (data),
  7. since these are installed on my own server, of course all these services are permanent (of course I can move them to another server too),
  8. other plugins: Akismet, WP-reCAPTCHA, Acronyms, Search and Replace (very good for updating all posts), Search Unleashed(uncheck “Some themes don’t display any search result content. Enable this option to force the theme to display results” in options or when visiting post from google search result, syntax highlighting will get screwed up), ShareThis (share to twitter, facebook, …, all social media), and Simple Image Widget.

The SyntaxHighlighter Evolved and Markdown didn’t play nicely together. This post’s comments has the solution, by wrapping the source code chunk with the div tag and changing the add_filter line in markdown to 9 (see below). Since this is hard to display, I will describe the characters in text:

<pre class="src src-sh">LeftAngleBracket div RightAngleBracketDiv LeftSquareBracket bash RightSquareBracket

my code LeftSquareBracket FORWARD SLASH bash RightSquareBracket LeftAngleBracket FORWARD SLASH div RightAngleBracket

Also change markdown.php:

<pre class="src src-php">add_filter('the_content_rss', 'Markdown', 6);


add_filter(‘the_content_rss’, ‘Markdown’, 9);

syntax highlighter’s is less than 9

See this site for the lnaguages supported.

For LaTeX, include code by:

<pre class="src src-sh">DOLLARSIGN latex ENTER LATEX CODE DOLLARSIGN

to get \(latex y=x’\beta_0\).

For Markdown syntax, look at this site for a quick reference. The main thing is to use two asterisks (\/\/) around the text for bold and one asterisk (\*) around the text for italics. For links, use

<pre class="src src-sh">LeftSquareBracket TEXT RightSquareBracket LeftParen URL RightParen

. There are a lot more, but these will be commonly used. I would like the syntax to be like that of org-mode, but I can’t have everything. I could hack the php file to modify the syntax like org-mode’s, but I’m too lazy now and don’t want to deal with the regexp’s.

I also like the notepad theme as it fits my technical blog quite nice.

backup wordpress site:

<pre class="src src-sh">rsync -av --modify-window=1 --delete username@myserver:location localLocation

## this backs up to my computer

backup database and some cron scripts (multiple scripts in the following):

<pre class="src src-sh"><span style="color: #ff4500;">### </span><span style="color: #ff4500;"></span>

mysqldump –add-drop-table -u MyUsername -p Databasename | bzip2 -c > ## wordpress is the database name, -p says to specify password after ## now enter password

#### restore database ### bzip2 -d mysql -u MyUserName -p Databasename < ## enter password

#### setup cron job on server #! /usr/bin/env bash mysqldump –add-drop-table -u MyUsername –password=MYPASSWORD Databasename | bzip2 -c > /path/to/

chmod +x chmod o-r

crontab -e: 00 12 * * * /path/to/ 59 23 * * * /path/to/ ## need a carriage return at end of file

#### setup cron job on my computer ## make sure passwordless ssh is on #! /usr/bin/env bash INCREMENT=date +%Y%m%d%H%M DIR=“$HOME/path/to/wherever” DIR=“$HOME/path/to/wherever/” # -q for quiet in cron rsync -q -av –modify-window=1 –delete username@server:/path/to/blog $DIR0/ scp -q username@server:/path/to/ $DIR/$INCREMENT.bz2 find $DIR -mtime +14 -exec rm -f {} \; ## delete files older than 14 days

crontab -e: 02 12 * * * /path/to/ 02 00 * * * /path/to/

About Vinh Nguyen


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>