WebMake

<webmake>

<content name="index.txt" format=text/et>
Where To?
---------

  - <a href=http://taint.org/>My Weblog</a>

    This is my weblog, and is the most frequently updated part of
    this site.  Recommended.

  - <a href=home/>My Homepage</a>

    If you're wondering who I am, or how to get in contact, this is probably
    worth a visit.

</content>
<content name="travelsmap.source" src="map/tst.html"></content>
<content name="map/index.txt" format=text/et>
My Travels
----------

This is a map of my travels over the past few years.  Most
of the interesting bits are due to a round-the-world trip in 2001/2002...

<div align=center>
${travelsmap.source}
</div>

Thanks to <a href=http://joi.ito.com/>Joi Ito</a> for putting up <a
href=http://joi.ito.com/archives/2003/04/07/flash_map_of_my_travels_this_year.html>his own map</a>; without that, I'd never have known about <a
href=http://www.bryanboyer.com/indyjunior/>Bryan Boyer's nifty IndyJunior</a>
flash mapping tool.

</content>
<content name="home/index.txt" format=text/et>
About Me
---------

I currently work on <a href=http://spamassassin.org>SpamAssassin</a>.

In 2001/2002, I <a href=$(map/index)>did some wandering around Australia, NZ,
Southeast and South Asia for a year</a>, which was great fun and highly
recommended.  (While I was over there, I found out that the
spam filter product I'd come up with had gone and become big news,
hitting Wired News and the New York Times without me!  I wound
up giving quotes to Wired from an internet cafe in Bombay, which was
pretty crazy.)

Before that, I was working at <a href=http://www.netnoteinc.com/>Netnote</a>,
hacking on the <a href=http://www.netnoteinc.com/>Webnote</a>, which
originally was a low-cost internet access device (but has mutated in
various other directions since).

Previously, I was the IONA sysadmin for four years or so, right when they
started up -- I was one of the first employees, and wound up with employee
number 1, which got right up Annrai's nose.  He shoulda done a Steve Jobs,
and renumbered from zero ;)

In June 1993 I put up IONA's web server, which was one of the first 100
servers on the net, and the first Irish non-academic website; check out this
[[list of WWW servers [1]] from November '93 to get an idea of the web's size
in those days. I think IONA's was about number 70.

I recently came across IONA's listing in [[Marc Andressen's What's New list
[2]] (it's listed right at the end, Sep 3 1993).  As an illustration of link
rot, it can't be beaten; after 6 years, virtually all the links in the entire
page now get 404s.  Just in case this link ever goes off, a mirror of the
what's new list is kept [[here [4]].

  [1]: WWW-servers.txt
  [2]: http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/old-whats-new/whats-new-0993.html
  [3]: slack/
  [4]: whats-new-0993.html#IONA

<IMG align=right SRC="AnimatedOrbixWeb.gif" ALT="[Powered By OrbixWeb]"
BORDER=0 HEIGHT=31 WIDTH=88> After a few years of sysadmin, I moved to
coding for IONA.  I worked on Java and CORBA as part of the [[OrbixWeb [6]]
team, which was good fun, although it made me quite Java-phobic by the
end of it.

  [6]: http://www.iona.com/

<IMG align=right SRC="wonderwall.gif" ALT="[Wonderwall logo]" BORDER=2
HEIGHT=23 WIDTH=90> I also wrote IONA's IIOP firewall security product,
Wonderwall.  I didn't come up with the ludicrously dated name BTW, but I
__did__ manage to slip in a Subgenius reference, in the form of the magic
number 2965179317.  (If you can't see the significance of this, take
a good look at this page's background image.)

Talking of the Subgenii, way back in 1993, I hacked up the very first
[[Subgenius web pamphlet [13]] from Rev. Kareem du Gristle's USENET one.
It was one of the first web pages put up in Ireland.

  auto: [Subgenius]: http://www.subgenius.com/
  [13]: $(TOP/)slack/

<img
src=http://jmason.org/watchcam/2002_June_in_India/thumbnails/taj_mahal_far.gif
align=right height=122 width=122 /> If you're looking for pictures, there's a
whole load of them up <a href=$(TOP/)albums/>here</a>, and a slightly
smaller and fuzzier batch from my Casio watch camera <a href=$(TOP/)/watchcam/>
here</a>.

If you're really interested in finding out what I'm thinking about __right
now__ -- I have a <a href=http://taint.org/>weblog</a>.

As many other techies have experienced, I occasionally get drafted in as a
de-facto web designer for family and friends.  Naturally, having written <a
href=http://webmake.taint.org/>WebMake</a>, that's what I use to build those
sites ;)

So here's a couple worth plugging:

    - <a href=http://www.barrymasonphoto.com/>Barry Mason Photography, fine photography of the built environment</a>: my Dad's business -- he's a (very good) architectural photographer in Ireland.
    - <a href=http://www.andaluciaphotogallery.com/>Andalucia Photo Gallery</a>: his side project, some beautiful photographs of Andalusia, in Spain.

<span style="display:none"><a href=$(TOP/)foojlist.php> </a></span>
<br clear=all />
</content>

<!-- <editcgi href="http://localhost/cgi-bin/webmake.cgi" />
<use plugin="editbuttons" path="/edit" /> -->

<contents src="raw" name="*.txt" format="text/et" />
<contents src="raw" name="*.css" format="text/html" />

<option name=EtTextOldLinkStyle value=0 />
<contents src=howto name="*.txt" format="text/et" />

<metatable delimiter="|">
.|title
index.txt|jmason.org: Where To?
contact.txt|jmason.org: Contact Details for Justin Mason
home/index.txt|jmason.org: About The Author
cv.txt|Resume/CV for Justin Mason
software_idx.txt|jmason.org: Software
uffizi.txt|jmason.org: Software: Uffizi
jfortune.txt|jmason.org: Software: JFortune
map/index.txt|jmason.org: My Wanderings
packf-unseen.txt|jmason.org: Software: packf-unseen
mhthread_idx.txt|jmason.org: Software: mhthread
</metatable>

<media src= name="*.gif" />
<media src= name="*.jpg" />
<media src=images/ name="*" />

<!-- -------------------------------------------------------------------- -->

<template name=header format="text/html">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
      <title>$[this.title]</title>
      <META NAME="keywords" CONTENT="Justin Mason, jmason, jm">
      <META NAME="generator" CONTENT="${WebMake.GeneratorString}">
      <LINK REL="icon" href="favicon.png" TYPE="image/png">
      <link rel="meta" type="application/rdf+xml" TITLE="FOAF" href="$(TOP/)gems/my-foaf.xrdf" />
      <link rel="alternate" type="text/html" title="Blog" href="http://taint.org/" />

  <!-- ICBM coordinates file for ASF locator -->
  <meta name="author" content="Justin Mason"/>
  <meta name="ICBM" content="33.646059, -117.84237" />
  <meta name="ASF.role" content="committer" />
  <meta name="ASF.id" content="jm" />

      <style>
	${jmason.css}
      </style>
      <!--
      		Link to WPoison to thwart spambots:
      		<a href="/moreinfo.whtml">More Info</a>
                It's illegal to put it here, but their
                parsers won't know that.
      -->
  </head>

  <body TEXT="#FFFFFF" BGCOLOR="#004000" LINK="#BBBB68" VLINK="#EEFFEE"
	 BACKGROUND="$(B0BD0BB5.gif)">

  <font face="verdana,lucida,helvetica,sans-serif">${navbar}
  <font size=-6><a href="/moreinfo.whtml"></a></font>
  <hr>

</template>

<template name=footer format="text/html">
  <hr>

  <table width="98%"><tr><td valign=top>

  <div align=left>
<a href="$(contact)"><img src="$(license_plate.jpg)"
  ALT="jm /at/ jmason.org" border=0 height=40 width=136 /></a>
</div>

  </td>
  <td valign=top>

  <div align=right>
<a href="http://webmake.taint.org/">
  <img src="http://webmake.taint.org/BuiltWithWebMake.png" 
  width="88" height="31" border="0" alt="Built With WebMake" /></a>
</div>

  </td>
  </tr></table>

  </font>
  </body>
  </html>
</template>

<!-- -------------------------------------------------------------------- -->

<template name=header_cv format="text/html">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
      <title>$[this.title]</title>
      <META NAME="keywords" CONTENT="Justin Mason, jmason, jm">
      <META NAME="generator" CONTENT="${WebMake.GeneratorString}">
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      <!--
      		Link to WPoison to thwart spambots:
      		<a href="/moreinfo.whtml">More Info</a>
      -->
  </head>

  <body TEXT="#000000" BGCOLOR="#ffffff" LINK="#1B1B68" VLINK="#1E1F1E">

<table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tr>
<td bgcolor="#000000">
 <table border="0" cellspacing="4" cellpadding="4" width="100%">
 <tr>
<td bgcolor="#ffffff">
 <table border="0" cellspacing="4" cellpadding="4" width="100%">
 <tr>
 <td>
 <font face="verdana,lucida,helvetica,sans-serif">

</template>

<template name=footer_cv format="text/html">

  </font>
  </td>
  </tr>
  </table>
   
  </td>
  </tr>
  </table>
   
  </td>
  </tr>
  </table>

  </body>
  </html>
</template>

<!-- -------------------------------------------------------------------- -->

<template name=jmasonlogo>
<table width=100%>
<tr>
<td colspan=2>
<p align=center>
<img src=$(TOP/)jmason_org_bevel.png ${IMGSIZE}>
</p>
</td>
</tr>
</table>
</template>

<template name=navbar format="text/html"> <!-- navbar -->
<div align=center>
<table width=80%>
<tr>
<td>

  Sites:

</td><td>
<font size="2">

<nobr>
  [ <a href=$(TOP/)index.html>jmason.org</a> ]
</nobr>
<nobr>
  [ <a href=http://taint.org/>taint.org</a> ]
</nobr>

</font>
</td>
</tr><tr>
<td>

  <a href=$(TOP/)software/index.html>Downloads</a>:

</td><td>
<font size="2">

  <nobr>[ <a href=http://spamassassin.org/>SpamAssassin</a> ]</nobr>
  <nobr>[ <a href=http://sitescooper.org/>Sitescooper</a> ]</nobr>
  <nobr>[ <a href=http://webmake.taint.org/>WebMake</a> ]</nobr>
  <nobr>[ <a href=http://ettext.taint.org/>EtText</a> ]</nobr>
  <nobr>[ <a href=$(uffizi)>Uffizi</a> ]</nobr>
  <nobr>[ <a href=$(jfortune)>JFortune</a> ]</nobr>
  <nobr>[ <a href=$(packfunseen)>packf-unseen</a> ]</nobr>
  <nobr>[ <a href=$(mhthread)>mhthread</a> ]</nobr>
  <nobr>[ <a href=$(scripts)>Misc scripts</a> ]</nobr>
  <nobr>[ <a href=$(TOP/)software/index.html>Misc misc</a> ]</nobr>

</font>
</td>
</tr><tr>
<td>

  About the author:

</td><td>
<font size="2">

<nobr>
  [ <a href=$(contact)>Contact Me</a> ]
</nobr>
<nobr>
  [ <a href=$(home/index)>About</a> ]
</nobr>
<nobr>
  [ <a href=$(map/index)>Where</a> ]
</nobr>
<nobr>
  [ <a href=$(cv)>CV / Resume</a> ]
</nobr>
<nobr>
  [ <a href=http://taint.org/>Blog</a> ]
</nobr>

</font>
</td>
</tr></table></div>
<!-- /navbar -->
</template>

<template name=jmason_template>
${header}
<!-- body --> ${body} <!-- /body -->
${footer}
</template>
<template name=cv_template>
${header_cv}
<!-- body --> ${body} <!-- /body -->
${footer_cv}
</template>

<!-- -------------------------------------------------------------------- -->

<use plugin=thumbnail_tag />
<template name="thumbnail.thumbsize">240</template>
<template name="thumbnail.bordercolor">#000000</template>
<template name="thumbnail.borderwidth">1</template>
<template name="thumbnail.format">gif</template>
<template name="thumbnail.template">
        <div align=center>
          <a href="${thumbnail.href}"><img
              src="${thumbnail.thumb_src}" alt="[${thumbnail.filename}]"
              height="${thumbnail.height}" width="${thumbnail.width}"
              border="0" ${thumbnail.tag_attrs} /></a>
          <br />
          <small><em>$[${thumbnail.name}.title]</em></small>
          <br />
        </div>
</template>

<!-- find all the directories, first off -->
<media src="watchcam" name=".../metadata.csv" namesubst="s/\/.*.csv//"
        listname="all_image_dirs" />


<!-- --------------------------------------------------------------------- -->
<!-- and for each one... -->
<for name=dir values="${all_image_dirs}">

  <!-- define a fake content item to attach the page title to -->
  <content name="${dir}/index"></content>
  <!-- and load the images and metadata up -->
  <media src="watchcam/${dir}"
        name="RE:.*\.gif"
	metatable="metadata.csv" delimiter="|"
        skip="*thumb*"
        namesubst="s!^!${dir}\/!"
        listname="all_images_${dir}"
        />
</for>

<!-- sort the image lists -->
<{perl
  my @dirs = get_list ("all_image_dirs");
  foreach my $dir (@dirs) {
    my @list = get_list ("all_images_$dir");
    set_list ("all_images_$dir", sort @list);
    # warn "JMD: $dir: ".join(' ', @list)."\n";
  }
  '';
}>

<!-- and create the HTML indexes -->
<for name=dir values="${all_image_dirs}">
  <content name="watchcam/${dir}.txt">
    <h1>$[${dir}/index.title]</h1>
    <div align=center><table>
      <{perl make_thumbnail_table (3, get_list ("all_images_${dir}")); }>
    </table></div>
  </content>

  <out name="watchcam/${dir}" file="watchcam/${dir}/index.html">
    <{set body="${watchcam/${dir}.txt}"}>${jmason_template}
  </out>
</for>

<template name=watchcam_index_item>
  <li><a href=$(watchcam/${item})>$[${item}.title]</a></li>
</template>

<content name="watchcam/index.txt">
<wmmeta name="title" value="Photos from the Casio Watch Camera" />
<ul>
  <{perl make_list ("watchcam_index_item", sort { $a cmp $b } get_list ("all_image_dirs")); }>
</ul>
</content>

<!-- -------------------------------------------------------------------- -->

<!-- files in top dir -->
<for name="out" values="index contact home/index watchcam/index">
  <out file="${out}.html" name="${out}">
    <{set body="${${out}.txt}"}>${jmason_template}
  </out>
</for>

<out file="cv.html" name="cv">
  <{set body="${cv.txt}"}>${cv_template}
</out>

<!-- cv template works nicely here -->
<out file="howto/subpixel.html" name="subpixel">
  <{set body="${subpixel.txt}"}>${cv_template}
</out>

<out file="software/uffizi/index.html" name="uffizi">
  <{set body="${uffizi.txt}"}>${cv_template}
</out>

<!-- files in software/ subdir -->
<for name="out" values="jfortune">
  <out file="software/${out}.html" name="${out}">
    <{set body="${${out}.txt}"}>${jmason_template}
  </out>
</for>

<!-- --------------------------------------------------------------------- -->
<!-- scripts - make an index by reading the comments from the tops of
   - the scripts, and using that for the text.  Pretty simplistic this
   - but the results are good.
  -->

<contents src="software/scripts" name="*.txt" listname="all_scripts" />

<content name="scripts.txt">
<wmmeta name="title" value="Some Tidbits From ~/bin" />

<h1>$[this.title]</h1>
<p>Here's a few random scripts from my ~/bin.   Please take 'em and
use 'em, but do note where they came from originally, it's simply
good manners.</p>
<hr />

<{perl

  my @allscripts = get_list ("all_scripts");
  foreach my $scr (sort @allscripts) {
    print "making script index entry for $scr\n";
    my $text = get_content ($scr);

    my $scrname = $scr; $scrname =~ s/^.*\///g; $scrname =~ s/\.[^\.]+$//g;

    my $desc = '';
    my $inpod = 0;
    foreach my $line (split (/^/m, $text)) {
      if ($line =~ /^#!/) { next; }

      if ($inpod) {
        if ($line =~ /^=cut/) { last; }
	if ($line =~ /^\s+/) { $line = "<code>$line</code><br />"; }
      } else {
        if ($line =~ /^\s*$/) { last; }
        if ($line =~ /^=head1/) { $inpod = 1; }
      }

      $line =~ s/^#+\s+//g;
      if ($line =~ /^$/) { $desc .= "</p><p>"; next; }
      $line =~ s!^=head1 (.*)$!<strong>$1</strong>!g;   # POD heading
      $line =~ s/^\s*${scrname}\S* \-+ //;              # comment heading
      $desc .= $line;
    }
    $desc .= '';

    $desc =~ s/^(?:<\/p><p>)+//;         # trim empty paras at start
    next if ($desc =~ /^(?:<\/p><p>)*$/);        # just empty paras

    $_ .= qq{

        <p>
        <a href=\$(TOP/)software/scripts/$scr>$scrname</a>:
        $desc
        </p>
        <hr />

    };
  }
  $_;

}>

</content>

<!-- -------------------------------------------------------------------- -->

<!-- exceptions due to legacy URLs ;) -->
<out file="map/index.html" name="map/index">
  <{set body="${map/index.txt}"}>${jmason_template}
</out>
<out file="software/index.html" name="software/index">
  <{set body="${software_idx.txt}"}>${jmason_template}
</out>
<out file="software/scripts/index.html" name="scripts">
  <{set body="${scripts.txt}"}>${jmason_template}
</out>

<!-- old URLs -->
<out file="work.html">
<html><head> <meta http-equiv="Refresh" content="1; url=home/">
</head><body><A href=home/>Moved</A>, redirecting...</body></html></out>
<out file="home.html">
<html><head> <meta http-equiv="Refresh" content="1; url=home/">
</head><body><A href=home/>Moved</A>, redirecting...</body></html></out>
<out file="nonwork.html">
<html><head> <meta http-equiv="Refresh" content="1; url=home/">
</head><body><A href=home/>Moved</A>, redirecting...</body></html></out>

<{perl

system ("mkdir software/mhthread 2>/dev/null");
system ("cd software/scripts; tar cfz ../mhthread/mhthread.tar.gz mhthread.txt");
system ("cd software/scripts; pod2html mhthread.txt > ../mhthread/manpage.html");
system ("cd software/uffizi; pod2html uffizi.txt > pod.html");
'';

}>

<out file="software/packf-unseen/index.html" name="packfunseen">
  <{set body="${packf-unseen.txt}"}>${jmason_template}
</out>
<out file="software/mhthread/index.html" name="mhthread">
  <{set body="${mhthread_idx.txt}"}>${jmason_template}
</out>

<action event="site_changed">
<{perl

	print "changed\n";

}>
</action>

</webmake>


jm /at/ jmason /dot/ org

Hosted at
SourceForge