<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Neil Ang (programming)</title>
    <link>http://neilang.com</link>
    <description>Neil Ang Feed</description>
    <language>en-us</language>
    <generator>Symphony (build 1701)</generator>
    <item>
      <title>Generating a calendar using XSLT</title>
      <link>http://neilang.com/entries/generating-a-calendar-using-xslt/</link>
      <pubDate>Sun, 16 Nov 2008 07:43:00 GMT</pubDate>
      <guid>http://neilang.com/entries/generating-a-calendar-using-xslt/</guid>
      <description>&lt;p&gt;Recently I was tasked to build an interactive calendar in XSLT. I wanted the calendar to always start on a Sunday as well as have clean markup. I couldn't find any good examples on the web while I was building it, so I decided to post the base of my solution.&lt;/p&gt;

&lt;p&gt;
	&lt;img src="/workspace/upload/calendar.png" alt="Picture of final product" /&gt;
&lt;/p&gt;

&lt;p&gt;Insert the following variables and templates into your stylesheet:&lt;/p&gt;

&lt;code&gt;&amp;lt;xsl:variable name="DisplayDate" select="date:date()"/&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="Year" select="date:year($DisplayDate)"/&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="Month" select="date:month-in-year($DisplayDate)"/&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="MonthName" select="date:month-name($DisplayDate)" /&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="NumberOfDaysInMonth"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:call-template name="DaysInMonth"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="month" select="$Month" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="year" select="$Year" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt; &amp;lt;/xsl:variable&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="FirstDayInWeekForMonth" select="date:day-in-week(date:date(concat($Year,'-', $Month, '-01')))" /&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="WeeksInMonth"&amp;gt;&amp;lt;xsl:value-of select="($NumberOfDaysInMonth + $FirstDayInWeekForMonth - 1) div 7" /&amp;gt;&amp;lt;/xsl:variable&amp;gt; &lt;br /&gt; &lt;br /&gt; &amp;lt;xsl:template name="DaysInMonth"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:param name="month"&amp;gt;&amp;lt;xsl:value-of select="$Month" /&amp;gt;&amp;lt;/xsl:param&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:param name="year"&amp;gt;&amp;lt;xsl:value-of select="$Year" /&amp;gt;&amp;lt;/xsl:param&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:choose&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:when test="$month = 1 or $month = 3 or $month = 5 or $month = 7 or $month = 8 or $month = 10 or $month = 12"&amp;gt;31&amp;lt;/xsl:when&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:when test="$month=2"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:choose&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:when test="$year mod 4 = 0"&amp;gt;29&amp;lt;/xsl:when&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:otherwise&amp;gt;28&amp;lt;/xsl:otherwise&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:choose&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:when&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:otherwise&amp;gt;30&amp;lt;/xsl:otherwise&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/xsl:choose&amp;gt; &lt;br /&gt; &amp;lt;/xsl:template&amp;gt; &lt;br /&gt; &lt;br /&gt; &amp;lt;xsl:template name="Calendar"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;table summary="Monthly calendar"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;caption&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="$MonthName" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="$Year" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/caption&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tr&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Sunday"&amp;gt;Sun&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Monday"&amp;gt;Mon&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Tuesday"&amp;gt;Tue&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Wednesday"&amp;gt;Wed&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Thursday"&amp;gt;Thu&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Friday"&amp;gt;Fri&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;th abbr="Saturday"&amp;gt;Sat&amp;lt;/th&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/tr&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:call-template name="CalendarWeek"/&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/table&amp;gt; &lt;br /&gt; &amp;lt;/xsl:template&amp;gt; &lt;br /&gt; &lt;br /&gt; &amp;lt;xsl:template name="CalendarWeek"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:param name="week"&amp;gt;1&amp;lt;/xsl:param&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:param name="day"&amp;gt;1&amp;lt;/xsl:param&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;tr&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:call-template name="CalendarDay"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="day" select="$day" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/tr&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:if test="$WeeksInMonth &amp;amp;gt; $week"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:call-template name="CalendarWeek"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="week" select="$week + 1" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="day" select="$week * 7 - ($FirstDayInWeekForMonth - 2)" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/xsl:if&amp;gt; &lt;br /&gt; &amp;lt;/xsl:template&amp;gt; &lt;br /&gt; &lt;br /&gt; &amp;lt;xsl:template name="CalendarDay"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:param name="count"&amp;gt;1&amp;lt;/xsl:param&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:param name="day" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;xsl:choose&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:when test="($day = 1 and $count != $FirstDayInWeekForMonth) or $day &amp;amp;gt; $NumberOfDaysInMonth"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td class="empty"&amp;gt;&amp;lt;xsl:text disable-output-escaping="yes"&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/xsl:text&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:if test="$count &amp;amp;lt; 7"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:call-template name="CalendarDay"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="count" select="$count + 1" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="day" select="$day" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:if&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:when&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:otherwise&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="$day" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/td&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:if test="$count &amp;amp;lt; 7"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:call-template name="CalendarDay"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="count" select="$count + 1" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:with-param name="day" select="$day + 1" /&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:if&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:otherwise&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/xsl:choose&amp;gt; &lt;br /&gt; &amp;lt;/xsl:template&amp;gt;&lt;/code&gt;

&lt;p&gt;For this code to work, you need to be using &lt;a href="http://exslt.org/"&gt;exslt&lt;/a&gt;.&lt;/p&gt;

&lt;code&gt;&amp;lt;xsl:stylesheet version="1.0" &lt;br /&gt; &amp;nbsp;&amp;nbsp;xmlns:xsl="http://www.w3.org/1999/XSL/Transform" &lt;br /&gt; &amp;nbsp;&amp;nbsp;xmlns:exslt="http://exslt.org/common" &lt;br /&gt; &amp;nbsp;&amp;nbsp;xmlns:date="http://exslt.org/dates-and-times"&amp;gt;&lt;/code&gt;

&lt;p&gt;Once you have added the templates you can call the calendar like this: &lt;/p&gt;

&lt;code&gt;&amp;lt;xsl:call-template name="Calendar" /&amp;gt;&lt;/code&gt;

&lt;p&gt;Finally add some CSS to the page so your calendar looks more presentable:&lt;/p&gt;

&lt;code&gt;&amp;lt;style type="text/css" media="screen"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;table{ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border:1px solid #CCC; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-collapse: collapse; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp;caption{ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-weight:bold; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size:120%; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom:8px; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt; &amp;nbsp;&amp;nbsp;td,th{ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-align:center; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertical-align:middle; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width:36px; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height:34px; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border:1px solid #CCC; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding:0; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt; &amp;nbsp;&amp;nbsp;th{ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height:inherit; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt; &amp;nbsp;&amp;nbsp;.empty{ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background-color:#EEE; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;lt;/style&amp;gt; &lt;br /&gt; &lt;br /&gt; &lt;/code&gt;

&lt;p&gt;This is only the base of the calendar I built, and you can expand this to make it browse-able. But I will leave that for another post. &lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/generating-a-calendar-using-xslt/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
    <item>
      <title>Converting seconds into a readable format in Perl</title>
      <link>http://neilang.com/entries/converting-seconds-into-a-readable-format-in-perl/</link>
      <pubDate>Wed, 18 Jun 2008 09:49:00 GMT</pubDate>
      <guid>http://neilang.com/entries/converting-seconds-into-a-readable-format-in-perl/</guid>
      <description>&lt;p&gt;Here is a short and easy Perl function to convert the difference between two time stamps, into something that is more human readable. There are Perl modules that can do this as well, however I thought I would share what I wrote incase someone finds it useful.&lt;/p&gt;

&lt;code&gt;#!/usr/bin/env perl -w &lt;br /&gt; &lt;br /&gt; sub convert_time { &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $time = shift; &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $days = int($time / 86400); &lt;br /&gt; &amp;nbsp;&amp;nbsp; $time -= ($days * 86400); &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $hours = int($time / 3600); &lt;br /&gt; &amp;nbsp;&amp;nbsp; $time -= ($hours * 3600); &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $minutes = int($time / 60); &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $seconds = $time % 60; &lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$days = $days &amp;lt; 1 ? '' : $days .'d '; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$hours = $hours &amp;lt; 1 ? '' : $hours .'h '; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$minutes = $minutes &amp;lt; 1 ? '' : $minutes . 'm '; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$time = $days . $hours . $minutes . $seconds . 's'; &lt;br /&gt; &amp;nbsp;&amp;nbsp;return $time; &lt;br /&gt; }&lt;/code&gt;

&lt;p&gt;When using this function, these are the outputs you should see:&lt;/p&gt;

&lt;code&gt;print convert_time(1); # result: 1s &lt;br /&gt; print convert_time(61); # result: 1m 1s &lt;br /&gt; print convert_time(3661); # result: 1h 1m 1s &lt;br /&gt; print convert_time(90061); # result: 1d 1h 1m 1s&lt;/code&gt;

&lt;p&gt;This code can easily be modified to output other formats as well. Let me know if you come up with something different.&lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/converting-seconds-into-a-readable-format-in-perl/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
    <item>
      <title>Title case names in perl</title>
      <link>http://neilang.com/entries/title-case-names-in-perl/</link>
      <pubDate>Tue, 17 Jun 2008 09:58:00 GMT</pubDate>
      <guid>http://neilang.com/entries/title-case-names-in-perl/</guid>
      <description>&lt;p&gt;While I was at work today I came across a script I wrote a couple of years ago to title case names in perl. This script will transform names to a nice, readable title case equivalent. E.g. "JOHN SMITH" to "John Smith", "JOHN O'BRIAN" to "John O'Brian" and "JOHN MCCOOL" to "John McCool" etc.&lt;/p&gt;

&lt;code&gt;#!/usr/bin/env perl &lt;br /&gt; &lt;br /&gt; use strict; &lt;br /&gt; &lt;br /&gt; sub title_case_name { &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $person = shift; &lt;br /&gt; &amp;nbsp;&amp;nbsp;my ($word, $subWord); &lt;br /&gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$person =~ s/\s+/ /g; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$person =~ s/^\s+//; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$person =~ s/\s+$//; &lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;my @namesArray = split(/ /, $person); &lt;br /&gt; &amp;nbsp;&amp;nbsp;$person = ''; &lt;br /&gt; &amp;nbsp;&amp;nbsp;foreach $word (@namesArray){ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$word = title_case($word); &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($word =~ /-/){ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my @subWordsArray = split(/-/, $word); &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$word = ''; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach $subWord (@subWordsArray){ &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$subWord = title_case($subWord); &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$word .= $subWord.'-'; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chop($word); &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$person .= $word.' '; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &amp;nbsp;&amp;nbsp;chop($person); &lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;return $person; &lt;br /&gt; } &lt;br /&gt; &lt;br /&gt; sub title_case { &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $name = shift; &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $temp_str1 = ''; &lt;br /&gt; &amp;nbsp;&amp;nbsp;my $temp_str2 = ''; &lt;br /&gt; &amp;nbsp;&amp;nbsp;$name = lc($name); &lt;br /&gt; &amp;nbsp;&amp;nbsp;$name = ucfirst($name); &lt;br /&gt; &amp;nbsp;&amp;nbsp;$temp_str1 = substr($name, 0, 2); &lt;br /&gt; &amp;nbsp;&amp;nbsp;$temp_str2 = substr($name, 2); &lt;br /&gt; &amp;nbsp;&amp;nbsp;if($temp_str1 eq 'Mc' || $temp_str1 eq "O'") { &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$temp_str2 = ucfirst($temp_str2); &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$name = $temp_str1 . $temp_str2; &lt;br /&gt; &amp;nbsp;&amp;nbsp;} &lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;return $name; &lt;br /&gt; } &lt;br /&gt; &lt;br /&gt; print title_case_name('JOHN SMITH') . "\n"; &lt;br /&gt; print title_case_name('JOHN O\'BRIAN') . "\n"; &lt;br /&gt; print title_case_name('JOHN MCCOOL') . "\n";&lt;/code&gt;

&lt;p&gt;&lt;a href="/workspace/upload/title_case_names.zip"&gt;Download this script.&lt;/a&gt;&lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/title-case-names-in-perl/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
    <item>
      <title>Dynamically set network location in Mac OS X</title>
      <link>http://neilang.com/entries/dynamically-set-network-location-in-mac-os-x/</link>
      <pubDate>Wed, 24 Jan 2007 10:10:00 GMT</pubDate>
      <guid>http://neilang.com/entries/dynamically-set-network-location-in-mac-os-x/</guid>
      <description>&lt;p&gt;I love macs, but sometimes things could have been implemented better. In particular, I hate having to set the network location on my laptop when I go between work and home every day. I have put together a small shell script which can do this. I run this script on startup and it just checks what day and time it is so it can switch between two profiles (work or home).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
day=`date +"%a"`&lt;br /&gt;
hour=`date +"%H"`&lt;br /&gt;
&lt;br /&gt;
if [ $day = "Sat" -o $day = "Sun" ]; then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;`scselect Home` &lt;br /&gt;
else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if [ $hour -gt 8 -a $hour -lt 16 ]; then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`scselect Work` &lt;br /&gt;
&amp;nbsp;&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`scselect Home`&lt;br /&gt;
&amp;nbsp;&amp;nbsp;fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
exit 0
&lt;/code&gt;&lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/dynamically-set-network-location-in-mac-os-x/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
    <item>
      <title>PHP: Explore your server through a PHP file browser</title>
      <link>http://neilang.com/entries/php-explore-your-server-through-a-php-file-browse/</link>
      <pubDate>Thu, 11 Jan 2007 10:09:00 GMT</pubDate>
      <guid>http://neilang.com/entries/php-explore-your-server-through-a-php-file-browse/</guid>
      <description>&lt;p&gt;In the past I've had to delete files from my server where the file permissions were set to apache and I could not override them because the host did not alllow terminal or shell access. So I quickly put together a PHP script that allowed me to navigate through the file system and unlink (or delete) files as the apache user. I haven't had to use the script for a while but I still think its pretty nifty to use when you want to explore a servers file system. &lt;/p&gt;

&lt;p&gt;In the code below I've stripped out the unlink code (as it can be dangerous to have a page like that on your server) and just made it into a file explorer. Copy the code into a page and give it a go. If you're like me and have set your localhost as your homepage you can use it to quickly access files you have been working on. If anyone is interested in the version that allows you to unlink files, just send me an email and I will post it on the site. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;


&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;PHP File Browser&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.error{ color:red; font-weight:bold; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// Explore the files via a web interface. &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$script = basename(__FILE__); // the name of this script&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$path = !empty($_REQUEST['path']) ? $_REQUEST['path'] : dirname(__FILE__); // the path the script should access&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;h1&amp;gt;Directory Browser&amp;lt;/h1&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;p&amp;gt;Browsing Location: {$path}&amp;lt;/p&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$directories = array();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$files = array();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// Check we are focused on a dir&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if (is_dir($path)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chdir($path); // Focus on the dir&lt;br /&gt;
&amp;nbsp;&amp;nbsp;    if ($handle = opendir('.')) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (($item = readdir($handle)) !== false) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Loop through current directory and divide files and directorys&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(is_dir($item)){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array_push($directories, realpath($item)); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array_push($files, ($item));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;        }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;        closedir($handle);  // Close the directory handle&lt;br /&gt;
&amp;nbsp;&amp;nbsp;    }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo "&amp;lt;p class=\"error\"&amp;gt;Directory handle could not be obtained.&amp;lt;/p&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo "&amp;lt;p class=\"error\"&amp;gt;Path is not a directory&amp;lt;/p&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// There are now two arrays that contians the contents of the path. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// List the directories as browsable navigation&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;h2&amp;gt;Navigation&amp;lt;/h2&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;ul&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;foreach( $directories as $directory ){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo ($directory != $path) ? "&amp;lt;li&amp;gt;&amp;lt;a href=\"{$script}?path={$directory}\"&amp;gt;{$directory}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;" : "";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;/ul&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;h2&amp;gt;Files&amp;lt;/h2&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;ul&amp;gt;";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;foreach( $files as $file ){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Comment the next line out if you wish see hidden files while browsing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(preg_match("/^\./", $file) || $file == $script): continue; endif; // This line will hide all invisible files. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo '&amp;lt;li&amp;gt;&amp;lt;a href="' . basename($file) . '" target="_blank"&amp;gt;' . $file . '&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo "&amp;lt;/ul&amp;gt;";&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;


&lt;/code&gt;&lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/php-explore-your-server-through-a-php-file-browse/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
    <item>
      <title>Sockets problem with MySQL/PHP and Mac OS X</title>
      <link>http://neilang.com/entries/sockets-problem-with-mysql-php-and-mac-os-x/</link>
      <pubDate>Thu, 21 Dec 2006 10:08:00 GMT</pubDate>
      <guid>http://neilang.com/entries/sockets-problem-with-mysql-php-and-mac-os-x/</guid>
      <description>&lt;p&gt;After installing MySQL 5 on OS X 10.4, you may have noticed that the install package has placed 'mysql.sock' in '/tmp/mysql.sock' instead of '/var/mysql/mysql.sock'. This will cause the following error when you attempt to access MySQL through PHP:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A simple solution is to place a symbolic link between the expected folder and the install directory. This can be achieved with the following terminal commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mkdir /var/mysql&lt;br /&gt;
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To test a database connection between PHP and MySQL, you can use the following script:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&amp;lt;?php&lt;br /&gt;
&amp;nbsp;&amp;nbsp;  $dbServer='localhost';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;    $dbUser='root';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;    $dbPass='root';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;    $dbName='test';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;    $link = mysql_connect("$dbServer", "$dbUser", "$dbPass") or die ('Could not connect.');&lt;br /&gt;&lt;br /&gt;

&amp;nbsp;&amp;nbsp;   echo 'Connected successfully&amp;lt;br /&amp;gt;';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;   mysql_select_db("$dbName") or die('Could not select database.');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;   echo 'Database selected successfully&amp;lt;br /&amp;gt;';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;   mysql_close($link);&lt;br /&gt;
?&amp;gt;
&lt;/code&gt;&lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/sockets-problem-with-mysql-php-and-mac-os-x/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
    <item>
      <title>PHP: Sending HTML Emails</title>
      <link>http://neilang.com/entries/php-sending-html-emails/</link>
      <pubDate>Tue, 19 Dec 2006 10:06:00 GMT</pubDate>
      <guid>http://neilang.com/entries/php-sending-html-emails/</guid>
      <description>&lt;p&gt;Just like the general nature of PHP, the PHP mailing functions are simple to use as well. The easiest way to send an email is to use the &lt;a href="http://www.php.net/manual/en/function.mail.php"&gt;mail&lt;/a&gt; function built into PHP 3, PHP 4 and PHP 5. However, to send HTML based emails (or any other content-type for that matter), you will need to alter the header values of the email. The following is a short example on how to do this with PHP. &lt;/p&gt;

&lt;h3&gt;Configure PHP.ini&lt;/h3&gt;

&lt;p&gt;To send an email, you must first check your php.ini mail settings are correct (if these setting are correct, skip down below to the code). If you are using Windows, you will need access to a SMTP server (your web host should provide you with one, otherwise you can setup your own), otherwise if your using a Mac or Linux, you will need the &lt;a href="http://www.sendmail.org/"&gt;sendmail&lt;/a&gt; mail transfer agent (this is usually preinstalled with the OS).&lt;/p&gt;

&lt;p&gt;For Windows users, locate and open your php.ini file and find the following lines:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[mail function]&lt;br /&gt;
; For Win32 only.&lt;br /&gt;
;SMTP = &lt;br /&gt;
;smtp_port = &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
; For Win32 only.&lt;br /&gt;
;sendmail_from = 
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add the correct settings and remove the line comment marks (semi-colons) so the configuration looks similar to this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[mail function]&lt;br /&gt;
; For Win32 only.&lt;br /&gt;
SMTP = localhost&lt;br /&gt;
smtp_port = 25&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
; For Win32 only.&lt;br /&gt;
sendmail_from = me@example.com&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For non-Windows users locate the following lines in the php.ini:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;; For Unix only.  You may supply arguments as well (default: "sendmail -t -i"). &lt;br /&gt;
;sendmail_path =&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Uncomment and add the full path to sendmail like this:&lt;/p&gt;
 
&lt;p&gt;&lt;code&gt;; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").&lt;br /&gt;
sendmail_path = /usr/sbin/sendmail&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Save and close php.ini. If you are using PHP through a web server, it might require a restart for changes to take effect.&lt;/p&gt;

&lt;h4&gt;The code&lt;/h4&gt;

&lt;p&gt;The following PHP code when executed will create a HTML message and send it to a recipient (or multiple recipients by separating each email address in the '$to' variable with a comma):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&amp;lt;?php &lt;br /&gt;&lt;br /&gt;

&amp;nbsp;&amp;nbsp;$to = 'anywhere@example.com';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$subject = 'My Test HTML';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$message =&amp;lt;&amp;lt;&amp;lt;EOM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;My HTML Message&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;This is text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/html&amp;gt;&lt;br /&gt;
EOM;&lt;br /&gt;&lt;br /&gt;
  
&amp;nbsp;&amp;nbsp;$headers = 'From: no-reply@example.com' . "\r\n" .
             'content-type: text/html;'. "\r\n";&lt;br /&gt;&lt;br /&gt;
             
&amp;nbsp;&amp;nbsp;if(mail($to, $subject, $message, $headers)){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo 'Mail sent successfully!';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo 'Mail could not be sent, please check your settings.';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;
  
?&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the SMTP server you are using is on a protected network that won't accept emails from your host, you can use PHP to create the email through the SMTP host.&lt;/p&gt;

&lt;p&gt;The following code is an example of how this could be done:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&amp;lt;?php &lt;br /&gt;&lt;br /&gt;

&amp;nbsp;&amp;nbsp;$to = 'anywhere@example.com';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$subject = 'My Test HTML';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$message =&amp;lt;&amp;lt;&amp;lt;EOM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;My HTML Message&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;This is text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/html&amp;gt;&lt;br /&gt;
EOM;&lt;br /&gt;&lt;br /&gt;
  
&amp;nbsp;&amp;nbsp;// Enter the SMTP server and port here&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$conn = fsockopen("smtp.example.com", 25);&lt;br /&gt;&lt;br /&gt;

&amp;nbsp;&amp;nbsp;if($conn){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "HELO\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "MAIL FROM: $from\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "RCPT TO: $to\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "DATA\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "Subject: $subject\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "content-type: text/html\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "$email \r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, ".\r\n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  fwrite($conn, "QUIT");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  echo "Finished Sending Email";&lt;br /&gt;&lt;br /&gt;

&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;else{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  echo "Couldn't connect!\n";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;

?&amp;gt;
&lt;/code&gt;&lt;/p&gt;
					     &lt;p&gt;&lt;a title="What are you, chicken?!" href="http://neilang.com/entries/php-sending-html-emails/#comment"&gt;Post a comment&lt;/a&gt; (I dare you!)&lt;/p&gt;
					   </description>
    </item>
  </channel>
</rss>
