<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Trapdoor</title><link href="https://www.trapdoor.org/" rel="alternate"></link><link href="https://www.trapdoor.org/feeds/all.atom.xml" rel="self"></link><id>https://www.trapdoor.org/</id><updated>2025-03-09T21:26:00+00:00</updated><entry><title>How to expand a Windows VM disk</title><link href="https://www.trapdoor.org/how-to-expand-a-windows-vm-disk.html" rel="alternate"></link><published>2025-03-09T21:26:00+00:00</published><updated>2025-03-09T21:26:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2025-03-09:/how-to-expand-a-windows-vm-disk.html</id><summary type="html">&lt;p&gt;I like to keep my VM guests reasonably tidy and minimise how much they encroach
onto the host, but this means sometimes I run into the need to enlarge the
VM's drive.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I like to keep my VM guests reasonably tidy and minimise how much they encroach
onto the host, but this means sometimes I run into the need to enlarge the
VM's drive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note that these instructions assume that there are no snapshots.&lt;/strong&gt; These &lt;em&gt;can&lt;/em&gt;
be handled, but it gets more complicated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;With the VM off, go to the Virtual Media Manager in Virtualbox&lt;/li&gt;
&lt;li&gt;Expand the drive size by dragging the slider&lt;/li&gt;
&lt;li&gt;Boot from a GParted live cd (or similar)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;sfdisk&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/dev/sda
&lt;span class="go"&gt;Desk /dev/sda 60GiB, 64424509440 bytes, 125829120 sectors&lt;/span&gt;
&lt;span class="go"&gt;Disk model: VBOX HARDDISK&lt;/span&gt;
&lt;span class="go"&gt;Units: sectors of 1 * 512 = 512 bytes&lt;/span&gt;
&lt;span class="go"&gt;Sector size (logical/physical): 512 bytes / 512 bytes&lt;/span&gt;
&lt;span class="go"&gt;I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;/span&gt;
&lt;span class="go"&gt;Disklabel type: dos&lt;/span&gt;
&lt;span class="go"&gt;Disk identifier: 0x359d5cbf&lt;/span&gt;

&lt;span class="go"&gt;Device     Boot     Start       End   Sectors  Size Id Type&lt;/span&gt;
&lt;span class="go"&gt;/dev/sda1  *         2048    104447    102400   59M  7 HPFS/NTFS/exFAT&lt;/span&gt;
&lt;span class="go"&gt;/dev/sda2          104448 103811496 103707049 49.5G  7 HPFS/NTFS/exFAST&lt;/span&gt;
&lt;span class="go"&gt;/dev/sda3       103813120 104853503   1040384  508M 27 Hidden NTFS WinRE&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;sfdisk&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;/dev/sda
&lt;span class="go"&gt;Unparitioned space /dev/sda: 10GiB, 10739515392 bytes, 20975616 sectors&lt;/span&gt;
&lt;span class="go"&gt;Units: sectors of 1 * 512 = 512 bytes&lt;/span&gt;
&lt;span class="go"&gt;Sector size (logical/physical): 512 bytes / 512 bytes&lt;/span&gt;

&lt;span class="go"&gt;    Start       End  Sectors Size&lt;/span&gt;
&lt;span class="go"&gt;104853504 125829119 20975616  10G&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+20975616&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sfdisk&lt;span class="w"&gt; &lt;/span&gt;/dev/sda&lt;span class="w"&gt; &lt;/span&gt;-N&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--move-data
&lt;span class="go"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Refresh gparted and expand sda2&lt;/li&gt;
&lt;li&gt;CLI equivalent (although the gparted live CD doesn't have &lt;code&gt;growpart&lt;/code&gt;
  installed, so you will have to run
  &lt;code&gt;apt-get update &amp;amp;&amp;amp; apt-get install cloud-guest-utils&lt;/code&gt; first):&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;growpart&lt;span class="w"&gt; &lt;/span&gt;/dev/sda&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;ntfsresize&lt;span class="w"&gt; &lt;/span&gt;/dev/sda2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Tech Tips"></category><category term="windows"></category><category term="virtualbox"></category></entry><entry><title>Escaping PHP</title><link href="https://www.trapdoor.org/escaping-php.html" rel="alternate"></link><published>2010-01-30T18:10:36+00:00</published><updated>2010-01-30T18:10:36+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2010-01-30:/escaping-php.html</id><summary type="html">&lt;p&gt;Various escaping methods in PHP&lt;/p&gt;</summary><content type="html">&lt;p&gt;There are various escaping methods in PHP, named according to PHP's usual naming convention (which I think involves a blindfold):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;htmlspecialchars&lt;/em&gt; - a partial htmlentities. Quotes can be selectively converted. Translates only necessary characters:
  &amp;amp; " ' &amp;lt; &amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;htmlentities&lt;/em&gt; - translate ALL possible characters into html entities. Quotes can be selectively converted.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;urlencode&lt;/em&gt; - replace everything but [a-zA-Z0-9_.-] with %hex and spaces as +. The format is application/x-www-form-urlencoded; the format used by post forms. This is different from RFC1738&lt;/li&gt;
&lt;li&gt;&lt;em&gt;rawurlencode&lt;/em&gt; - as per RFC1738 (difference is the spaces).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;addslashes&lt;/em&gt; - escape ' " \ NUL with \&lt;/li&gt;
&lt;li&gt;&lt;em&gt;addcslashes&lt;/em&gt; - escape with \ any chars in charlist. 0, a, b, f, n, r, t and v are escaped literally, anything else is escaped as octal.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;convert_uuencode&lt;/em&gt; - uuencode&lt;/li&gt;
&lt;li&gt;&lt;em&gt;base64_encode&lt;/em&gt; - base64 encode&lt;/li&gt;
&lt;/ul&gt;</content><category term="Reference"></category></entry><entry><title>Date Formats</title><link href="https://www.trapdoor.org/date-formats.html" rel="alternate"></link><published>2010-01-30T18:04:41+00:00</published><updated>2010-01-30T18:04:41+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2010-01-30:/date-formats.html</id><summary type="html">&lt;p&gt;Date formats in PHP, Javascript and MySQL&lt;/p&gt;</summary><content type="html">&lt;h3&gt;PHP&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Component -&amp;gt; UNIX timestamp (seconds)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="x"&gt;int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;UNIX timestamp (seconds) -&amp;gt; Component&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="x"&gt;array getdate ( [int timestamp] )&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example returned values&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"seconds"&lt;/td&gt;
&lt;td&gt;Numeric representation of seconds&lt;/td&gt;
&lt;td&gt;0 to 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"minutes"&lt;/td&gt;
&lt;td&gt;Numeric representation of minutes&lt;/td&gt;
&lt;td&gt;0 to 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"hours"&lt;/td&gt;
&lt;td&gt;Numeric representation of hours&lt;/td&gt;
&lt;td&gt;0 to 23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"mday"&lt;/td&gt;
&lt;td&gt;Numeric representation of the day of the month&lt;/td&gt;
&lt;td&gt;1 to 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"wday"&lt;/td&gt;
&lt;td&gt;Numeric representation of the day of the week&lt;/td&gt;
&lt;td&gt;0 (for Sunday) through 6 (for Saturday)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"mon"&lt;/td&gt;
&lt;td&gt;Numeric representation of a month&lt;/td&gt;
&lt;td&gt;1 through 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"year"&lt;/td&gt;
&lt;td&gt;A full numeric representation of a year, 4 digits&lt;/td&gt;
&lt;td&gt;Examples: 1999 or 2003&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"yday"&lt;/td&gt;
&lt;td&gt;Numeric representation of the day of the year&lt;/td&gt;
&lt;td&gt;0 through 365&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"weekday"&lt;/td&gt;
&lt;td&gt;A full textual representation of the day of the week&lt;/td&gt;
&lt;td&gt;Sunday through Saturday&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"month"&lt;/td&gt;
&lt;td&gt;A full textual representation of a month, such as January or March&lt;/td&gt;
&lt;td&gt;January through December&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Seconds since the Unix Epoch, similar to the values returned by time() and used by date().&lt;/td&gt;
&lt;td&gt;System Dependent, typically -2147483648 through 2147483647.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;UNIX timestamp (seconds) -&amp;gt; Formatted string&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="x"&gt;string date ( string format [, int timestamp] )&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Javascript&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Date object constructors&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;//Use the current date and time&lt;/span&gt;
&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;//String format is &amp;quot;month day, year hours:minutes:seconds&amp;quot;.&lt;/span&gt;
&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;//Year is 0 to 99, Month is 0 to 11, Day is 1 to 31&lt;/span&gt;
&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Date object -&amp;gt; components&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//0-23&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;//0-59&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSeconds&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;//0-59&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMonth&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//0-11&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;//1-31&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDay&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;//0-6&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;//Years since 1900&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getFullYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//YYYY&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;//ms since epoch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Date object -&amp;gt; UNIX timestamp (milliseconds)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;UNIX timestamp (milliseconds) -&amp;gt; Date object&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setTime&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;MySQL&lt;/h3&gt;
&lt;p&gt;See also &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html"&gt;MySQL Manual - Date-Time functions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Passing dates to MySQL&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;datetable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;VALUES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2006-06-06&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;timetable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;VALUES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;21:55:01&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bothtable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atdat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;VALUES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2006-06-06 21:55:01&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Data Types&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DATE&lt;/strong&gt;      ''YYYY-MM-DD ('1000-01-01' to '9999-12-31')''. Can be assigned as string or number.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TIME&lt;/strong&gt;      ''HH:MM:SS ('838:59:59' to '838:59:59')''. Can be assigned as string or number.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DATETIME&lt;/strong&gt;  ''YYYY-MM-DD HH:MM:SS ('1000-01-01 00:00:00' to '9999-12-31 23:59:59')''. Can be assigned as string or number.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TIMESTAMP&lt;/strong&gt; ''YYYY-MM-DD HH:MM:SS ('1970-01-01 00:00:00' to '2037-something')''. +0 to get as number&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Functions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;''CURDATE()'' returns 'YYYY-MM-DD' or YYYYMMDD.&lt;/li&gt;
&lt;li&gt;''CURTIME()'' returns 'HH:MM:SS' or HHMMSS.&lt;/li&gt;
&lt;li&gt;''DATE(expr)'' returns the DATE part of expr.&lt;/li&gt;
&lt;li&gt;''DAY(date)'', ''DAYOFMONTH(date)'' 0..31&lt;/li&gt;
&lt;li&gt;''DAYNAME(date)''&lt;/li&gt;
&lt;li&gt;''DAYOFWEEK(date)'' 1(Sunday)..7(Saturday)&lt;/li&gt;
&lt;li&gt;''FROM_UNIXTIME(timestamp)'', ''FROM_UNIXTIME(timestamp, fmt)'' timestamp is seconds since epoch&lt;/li&gt;
&lt;li&gt;''DATE_FORMAT(date,fmt)''&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Specifier&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;%a&lt;/td&gt;
&lt;td&gt;Abbreviated weekday name (Sun..Sat)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%b&lt;/td&gt;
&lt;td&gt;Abbreviated month name (Jan..Dec)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%c&lt;/td&gt;
&lt;td&gt;Month, numeric (0..12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%D&lt;/td&gt;
&lt;td&gt;Day of the month with English suffix (0th, 1st, 2nd, 3rd, ...)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%d&lt;/td&gt;
&lt;td&gt;Day of the month, numeric (00..31)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%e&lt;/td&gt;
&lt;td&gt;Day of the month, numeric (0..31)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%f&lt;/td&gt;
&lt;td&gt;Microseconds (000000..999999)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%H&lt;/td&gt;
&lt;td&gt;Hour (00..23)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%h&lt;/td&gt;
&lt;td&gt;Hour (01..12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%I&lt;/td&gt;
&lt;td&gt;Hour (01..12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%i&lt;/td&gt;
&lt;td&gt;Minutes, numeric (00..59)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%j&lt;/td&gt;
&lt;td&gt;Day of year (001..366)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%k&lt;/td&gt;
&lt;td&gt;Hour (0..23)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%l&lt;/td&gt;
&lt;td&gt;Hour (1..12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%M&lt;/td&gt;
&lt;td&gt;Month name (January..December)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%m&lt;/td&gt;
&lt;td&gt;Month, numeric (00..12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%p&lt;/td&gt;
&lt;td&gt;AM or PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%r&lt;/td&gt;
&lt;td&gt;Time, 12-hour (hh:mm:ss followed by AM or PM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%S&lt;/td&gt;
&lt;td&gt;Seconds (00..59)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%s&lt;/td&gt;
&lt;td&gt;Seconds (00..59)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%T&lt;/td&gt;
&lt;td&gt;Time, 24-hour (hh:mm:ss)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%U&lt;/td&gt;
&lt;td&gt;Week (00..53), where Sunday is the first day of the week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%u&lt;/td&gt;
&lt;td&gt;Week (00..53), where Monday is the first day of the week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%V&lt;/td&gt;
&lt;td&gt;Week (01..53), where Sunday is the first day of the week; used with %X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%v&lt;/td&gt;
&lt;td&gt;Week (01..53), where Monday is the first day of the week; used with %x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%W&lt;/td&gt;
&lt;td&gt;Weekday name (Sunday..Saturday)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%w&lt;/td&gt;
&lt;td&gt;Day of the week (0=Sunday..6=Saturday)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%X&lt;/td&gt;
&lt;td&gt;Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%x&lt;/td&gt;
&lt;td&gt;Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%Y&lt;/td&gt;
&lt;td&gt;Year, numeric, four digits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%y&lt;/td&gt;
&lt;td&gt;Year, numeric (two digits)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%%&lt;/td&gt;
&lt;td&gt;A literal ‘%’ character&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%x&lt;/td&gt;
&lt;td&gt;x, for any 'x' not listed above&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ranges for the month and day specifiers begin with zero due to the fact that MySQL allows the storing of incomplete dates such as '2004-00-00'.&lt;/p&gt;</content><category term="Reference"></category></entry><entry><title>Postcode Validation</title><link href="https://www.trapdoor.org/postcode-validation.html" rel="alternate"></link><published>2010-01-30T17:49:18+00:00</published><updated>2010-01-30T17:49:18+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2010-01-30:/postcode-validation.html</id><summary type="html">&lt;p&gt;Postcode Validation Regex&lt;/p&gt;</summary><content type="html">&lt;p&gt;Regular Expression to match valid postcode format:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="sr"&gt;/^\s*([A-Z]{1,2}[0-9][A-Z0-9]?)\s*([0-9][ABD-HJLNP-UW-Z]{2})\s*$/i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This is according to the PAF digest as published by Royal Mail (2003).&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leading and trailing whitespace ignored (can remove \s* from beggining and end if there is a trim() function. JS does not have one)&lt;/li&gt;
&lt;li&gt;OPTIONAL whitespace separating outcode and incode.&lt;/li&gt;
&lt;li&gt;Any separating whitespace is not pre-stripped, therefore if it is provided it can help detect invalid codes, which would by chance become valid if the space were ommited.&lt;/li&gt;
&lt;li&gt;Matching is case-insensitive (can remove the i flag if the case is known).&lt;/li&gt;
&lt;li&gt;The letters C,I,K,M,O,V never appear in the incode, and the regular expression checks this.&lt;/li&gt;
&lt;li&gt;The outcode and incode are reliably captured.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Shortcomings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If a space is not provided, and the incode is mis-typed, it may still form a valid postcode:&lt;/li&gt;
&lt;li&gt;Intended: A12 3BB (A123BB without space)&lt;/li&gt;
&lt;li&gt;Typed: A12BB (missed 3)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Matched: A1 2BB (Valid, but different postcode)
There is no way to avoid this, it is a flaw in the design of the postcode, due to the oft-omitted space.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Partial postcodes are not matched.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;It would be relatively easy to make the incode optional.&lt;/li&gt;
&lt;li&gt;Most applications requiring partial matches will have RM postcode data to hand, and can use that to match.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Reference"></category></entry><entry><title>Nifty Algorithms</title><link href="https://www.trapdoor.org/nifty-algorithms.html" rel="alternate"></link><published>2010-01-30T17:34:25+00:00</published><updated>2010-01-30T17:34:25+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2010-01-30:/nifty-algorithms.html</id><summary type="html">&lt;p&gt;Algorithms I find satisfying in some way&lt;/p&gt;</summary><content type="html">&lt;h3&gt;Array Intersection&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;O(n+m) on pre-sorted arrays&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arrays must be sorted&lt;/li&gt;
&lt;li&gt;Start at the beginning of both arrays&lt;/li&gt;
&lt;li&gt;Compare elements&lt;/li&gt;
&lt;li&gt;If they are equal, add to intersection and advance both pointers&lt;/li&gt;
&lt;li&gt;If they are not, advance the pointer of the smaller element&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;intersection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;intersection&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// or b[i], obviously&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="Reference"></category></entry><entry><title>libfdms 0.9.0 released - First release of libfdms</title><link href="https://www.trapdoor.org/libfdms-090-released-first-release-of-libfdms.html" rel="alternate"></link><published>2009-12-13T00:00:00+00:00</published><updated>2009-12-13T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2009-12-13:/libfdms-090-released-first-release-of-libfdms.html</id><summary type="html">&lt;p&gt;First release of libfdms&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Stripped code from FDMS-FS&lt;/li&gt;
&lt;li&gt;Major refactor to use volume,program and track handles&lt;/li&gt;
&lt;li&gt;Added functions to obtain non-audio data such as the signature and tempo maps&lt;/li&gt;
&lt;li&gt;Added functions to obtain raw data for debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/FDMS-0.9.0-Linux.tar.gz"&gt;FDMS-0.9.0-Linux.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="libfdms"></category><category term="release"></category></entry><entry><title>libfdms 0.9.0-win32 released - Win32 Version</title><link href="https://www.trapdoor.org/libfdms-090-win32-released-win32-version.html" rel="alternate"></link><published>2009-12-13T00:00:00+00:00</published><updated>2009-12-13T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2009-12-13:/libfdms-090-win32-released-win32-version.html</id><summary type="html">&lt;p&gt;Win32 Version&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;.dll&lt;/li&gt;
&lt;li&gt;.h for all compilers&lt;/li&gt;
&lt;li&gt;.lib for mingw32&lt;/li&gt;
&lt;li&gt;.def for MSVC&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/FDMS-0.9.0-win32.zip"&gt;FDMS-0.9.0-win32.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="libfdms"></category><category term="release"></category></entry><entry><title>FDMS-FS 0.4.1 released - Fixed bug causing truncation of audio</title><link href="https://www.trapdoor.org/fdms-fs-041-released-fixed-bug-causing-truncation-of-audio.html" rel="alternate"></link><published>2008-07-16T00:00:00+01:00</published><updated>2008-07-16T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-07-16:/fdms-fs-041-released-fixed-bug-causing-truncation-of-audio.html</id><summary type="html">&lt;p&gt;Fixed bug causing truncation of audio&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed bug which caused 24bit audio to be truncated to 3/4 length&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/fdmsfs-bin_0.4.1.tar.gz"&gt;fdmsfs-bin_0.4.1.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://www.trapdoor.org/releases/fdmsfs_0.4.1.tar.gz"&gt;fdmsfs_0.4.1.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="FDMS-FS"></category><category term="release"></category></entry><entry><title>Decorum 0.5.1 released</title><link href="https://www.trapdoor.org/decorum-051-released.html" rel="alternate"></link><published>2008-06-30T00:00:00+01:00</published><updated>2008-06-30T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-06-30:/decorum-051-released.html</id><summary type="html">&lt;p&gt;Build sub-dependencies by default&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Build sub-dependencies unless @build="false"@ is specified&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.5.0 released - Recursive class-path from jar manifests</title><link href="https://www.trapdoor.org/decorum-050-released-recursive-class-path-from-jar-manifests.html" rel="alternate"></link><published>2008-05-20T00:00:00+01:00</published><updated>2008-05-20T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-05-20:/decorum-050-released-recursive-class-path-from-jar-manifests.html</id><summary type="html">&lt;p&gt;Recursive class-path from jar manifests&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Unless @expandclasspath="false"@ is specified, recursively add jar Manifest Class-Path attributes to the output class path&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.12 released - Bugfix release</title><link href="https://www.trapdoor.org/decorum-0412-released-bugfix-release.html" rel="alternate"></link><published>2008-05-19T00:00:00+01:00</published><updated>2008-05-19T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-05-19:/decorum-0412-released-bugfix-release.html</id><summary type="html">&lt;p&gt;Bugfix release&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed inverted logic in id check. How did this happen?&lt;/li&gt;
&lt;li&gt;Refactored dist jar matching code and fixed to match most recent jar&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.10 released - Bugfix release</title><link href="https://www.trapdoor.org/decorum-0410-released-bugfix-release.html" rel="alternate"></link><published>2008-04-20T00:00:00+01:00</published><updated>2008-04-20T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-04-20:/decorum-0410-released-bugfix-release.html</id><summary type="html">&lt;p&gt;Bugfix release&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed bug in id comparison&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>FDMS-FS 0.4.0 released - Major refactor</title><link href="https://www.trapdoor.org/fdms-fs-040-released-major-refactor.html" rel="alternate"></link><published>2008-04-20T00:00:00+01:00</published><updated>2008-04-20T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-04-20:/fdms-fs-040-released-major-refactor.html</id><summary type="html">&lt;p&gt;Major refactor&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Major code tidy&lt;/li&gt;
&lt;li&gt;64bit support&lt;/li&gt;
&lt;li&gt;Portability improvements&lt;/li&gt;
&lt;li&gt;Working D2424, D160 and 64bit host support.&lt;/li&gt;
&lt;li&gt;Many bug fixes and some significant refactoring.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many thanks to Mario DeFacendis for debugging this with me.&lt;/p&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/fdmsfs-bin_0.4.0.tar.gz"&gt;fdmsfs-bin_0.4.0.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://www.trapdoor.org/releases/fdmsfs_0.4.0.tar.gz"&gt;fdmsfs_0.4.0.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="FDMS-FS"></category><category term="release"></category></entry><entry><title>Properties 0.11.0 released</title><link href="https://www.trapdoor.org/properties-0110-released.html" rel="alternate"></link><published>2008-03-11T00:00:00+00:00</published><updated>2008-03-11T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-03-11:/properties-0110-released.html</id><summary type="html">&lt;p&gt;0.11.0&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.11.0&lt;/p&gt;</content><category term="Properties"></category><category term="Properties"></category><category term="release"></category></entry><entry><title>Decorum 0.4.9 released - Added ability to skip build but still calculate deps</title><link href="https://www.trapdoor.org/decorum-049-released-added-ability-to-skip-build-but-still-calculate-deps.html" rel="alternate"></link><published>2008-02-22T00:00:00+00:00</published><updated>2008-02-22T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-02-22:/decorum-049-released-added-ability-to-skip-build-but-still-calculate-deps.html</id><summary type="html">&lt;p&gt;Added ability to skip build but still calculate deps&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Added ability to skip build but still calculate deps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/decorum-0.4.9.jar"&gt;decorum-0.4.9.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.7 released - Bugfix release</title><link href="https://www.trapdoor.org/decorum-047-released-bugfix-release.html" rel="alternate"></link><published>2008-02-20T00:00:00+00:00</published><updated>2008-02-20T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-02-20:/decorum-047-released-bugfix-release.html</id><summary type="html">&lt;p&gt;Bugfix release&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Fixed overzealous dependency skipping (added id matching)&lt;/p&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.4 released - Check dependencies only once</title><link href="https://www.trapdoor.org/decorum-044-released-check-dependencies-only-once.html" rel="alternate"></link><published>2008-02-08T00:00:00+00:00</published><updated>2008-02-08T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-02-08:/decorum-044-released-check-dependencies-only-once.html</id><summary type="html">&lt;p&gt;Check dependencies only once&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Added check for previous decorum instances so we don't check deps more than once&lt;/p&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.5 released</title><link href="https://www.trapdoor.org/decorum-045-released.html" rel="alternate"></link><published>2008-02-08T00:00:00+00:00</published><updated>2008-02-08T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-02-08:/decorum-045-released.html</id><summary type="html">&lt;p&gt;0.4.5&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.4.5&lt;/p&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.2 released - Quick hack to check modification times</title><link href="https://www.trapdoor.org/decorum-042-released-quick-hack-to-check-modification-times.html" rel="alternate"></link><published>2008-02-01T00:00:00+00:00</published><updated>2008-02-01T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2008-02-01:/decorum-042-released-quick-hack-to-check-modification-times.html</id><summary type="html">&lt;p&gt;Quick hack to check modification times&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Quick hack to check modification times&lt;/p&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.1 released - Improved messages to include all failed dependencies</title><link href="https://www.trapdoor.org/decorum-041-released-improved-messages-to-include-all-failed-dependencies.html" rel="alternate"></link><published>2007-09-13T00:00:00+01:00</published><updated>2007-09-13T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-09-13:/decorum-041-released-improved-messages-to-include-all-failed-dependencies.html</id><summary type="html">&lt;p&gt;Improved messages to include all failed dependencies&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Improved messages to include all failed dependencies&lt;/p&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>Decorum 0.4.0 released</title><link href="https://www.trapdoor.org/decorum-040-released.html" rel="alternate"></link><published>2007-08-14T00:00:00+01:00</published><updated>2007-08-14T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-08-14:/decorum-040-released.html</id><summary type="html">&lt;p&gt;0.4.0&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.4.0&lt;/p&gt;</content><category term="Development Tools"></category><category term="Decorum"></category><category term="release"></category></entry><entry><title>JLaunch Initial release released - Initial release</title><link href="https://www.trapdoor.org/jlaunch-initial-release-released-initial-release.html" rel="alternate"></link><published>2007-07-12T00:00:00+01:00</published><updated>2007-07-12T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-07-12:/jlaunch-initial-release-released-initial-release.html</id><summary type="html">&lt;p&gt;Initial release&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed jlaunch compilation problems and made type detection more portable&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/jlaunch_0.8.1_i386.deb"&gt;jlaunch_0.8.1_i386.deb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="JLaunch"></category><category term="release"></category></entry><entry><title>FDMS-FS 0.2.2 released - 24bit support, Fixed SEGV, General tidy</title><link href="https://www.trapdoor.org/fdms-fs-022-released-24bit-support-fixed-segv-general-tidy.html" rel="alternate"></link><published>2007-05-21T00:00:00+01:00</published><updated>2007-05-21T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-05-21:/fdms-fs-022-released-24bit-support-fixed-segv-general-tidy.html</id><summary type="html">&lt;p&gt;24bit support, Fixed SEGV, General tidy&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed SEGV for incomplete images&lt;/li&gt;
&lt;li&gt;Bit width and sample rate selectable&lt;/li&gt;
&lt;li&gt;Tidied tree and makefile&lt;/li&gt;
&lt;li&gt;Updated docs&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="FDMS-FS"></category><category term="release"></category></entry><entry><title>cup.vim Initial release released - Initial release</title><link href="https://www.trapdoor.org/cupvim-initial-release-released-initial-release.html" rel="alternate"></link><published>2007-03-21T00:00:00+00:00</published><updated>2007-03-21T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-03-21:/cupvim-initial-release-released-initial-release.html</id><summary type="html">&lt;p&gt;Initial release&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Initial release&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/cup.vim"&gt;cup.vim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Development Tools"></category><category term="cup.vim"></category><category term="release"></category></entry><entry><title>Properties 0.8.3 released</title><link href="https://www.trapdoor.org/properties-083-released.html" rel="alternate"></link><published>2007-01-07T00:00:00+00:00</published><updated>2007-01-07T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-01-07:/properties-083-released.html</id><summary type="html">&lt;p&gt;0.8.3&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.8.3&lt;/p&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Binary: &lt;a href="https://www.trapdoor.org/releases/properties-0.8.3.jar"&gt;properties-0.8.3.jar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://www.trapdoor.org/releases/properties-0.8.3-src.jar"&gt;properties-0.8.3-src.jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Properties"></category><category term="Properties"></category><category term="release"></category></entry><entry><title>Properties 0.8.2 released</title><link href="https://www.trapdoor.org/properties-082-released.html" rel="alternate"></link><published>2007-01-06T00:00:00+00:00</published><updated>2007-01-06T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2007-01-06:/properties-082-released.html</id><summary type="html">&lt;p&gt;0.8.2&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.8.2&lt;/p&gt;</content><category term="Properties"></category><category term="Properties"></category><category term="release"></category></entry><entry><title>FDMS-FS 0.2.1 released - Fixed bug which filled silence segments with junk</title><link href="https://www.trapdoor.org/fdms-fs-021-released-fixed-bug-which-filled-silence-segments-with-junk.html" rel="alternate"></link><published>2006-11-09T00:00:00+00:00</published><updated>2006-11-09T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2006-11-09:/fdms-fs-021-released-fixed-bug-which-filled-silence-segments-with-junk.html</id><summary type="html">&lt;p&gt;Fixed bug which filled silence segments with junk&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed bug which filled silence segments with junk&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="FDMS-FS"></category><category term="release"></category></entry><entry><title>FDMS-FS 0.2.0 released - Conversion from ripper</title><link href="https://www.trapdoor.org/fdms-fs-020-released-conversion-from-ripper.html" rel="alternate"></link><published>2006-10-26T00:00:00+01:00</published><updated>2006-10-26T00:00:00+01:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2006-10-26:/fdms-fs-020-released-conversion-from-ripper.html</id><summary type="html">&lt;p&gt;Conversion from ripper&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Added fdmsfs to Makefile&lt;/li&gt;
&lt;li&gt;Improved usage message&lt;/li&gt;
&lt;li&gt;Created readme&lt;/li&gt;
&lt;/ul&gt;</content><category term="FDMS"></category><category term="FDMS-FS"></category><category term="release"></category></entry><entry><title>Properties 0.8.1 released</title><link href="https://www.trapdoor.org/properties-081-released.html" rel="alternate"></link><published>2006-02-07T00:00:00+00:00</published><updated>2006-02-07T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2006-02-07:/properties-081-released.html</id><summary type="html">&lt;p&gt;0.8.1&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.8.1&lt;/p&gt;</content><category term="Properties"></category><category term="Properties"></category><category term="release"></category></entry><entry><title>Properties 0.8.0 released</title><link href="https://www.trapdoor.org/properties-080-released.html" rel="alternate"></link><published>2005-11-26T00:00:00+00:00</published><updated>2005-11-26T00:00:00+00:00</updated><author><name>Jon Siddle</name></author><id>tag:www.trapdoor.org,2005-11-26:/properties-080-released.html</id><summary type="html">&lt;p&gt;0.8.0&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Changes&lt;/h2&gt;
&lt;p&gt;Version 0.8.0&lt;/p&gt;</content><category term="Properties"></category><category term="Properties"></category><category term="release"></category></entry></feed>