FreshPorts -- The Place For Ports If you buy from Amazon USA, please support us by using this link.
Follow us
Blog
Twitter

I am looking for an LTO tape library. Do you have one to spare?
Port details
gamin File and directory monitoring system
0.1.10_8 devel on this many watch lists=125 search for ports that depend on this port

There is no maintainer for this port.
Any concerns regarding this port should be directed to the FreeBSD Ports mailing list via ports@FreeBSD.org search for ports maintained by this maintainer
Port Added: 02 Apr 2005 09:09:36
License: not specified in port
Gamin is a file and directory monitoring system defined to be a subset of the
FAM (File Alteration Monitor) system. This is a service provided by a library
which allows to detect when a file or a directory has been modified.

Whereas the FreeBSD port of FAM polls files every few seconds, this port
includes a kqueue(2) backend for immediate notification of most alterations.

WWW: http://www.gnome.org/~veillard/gamin/index.html
SVNWeb : Main Web Site : Distfiles Availability : PortsMon
Slave ports
  1. devel/py-gamin

NOTE: FreshPorts displays only information on required and default dependencies. Optional dependencies are not covered.

Required To Build:
  1. devel/gmake
  2. devel/pkgconf
Required Libraries:
  1. devel/gettext
  2. devel/glib20
  3. devel/pcre

This port is required by:

for Libraries * - deleted ports are only shown under the This port is required by section. It was harder to do for the Required section. Perhaps later...

To install the port: cd /usr/ports/devel/gamin/ && make install clean
To add the package: pkg install devel/gamin


Configuration Options
===> The following configuration options are available for gamin-0.1.10_8:
     GAM_POLLER=off: Use gamin's poller instead of kqueue's
     LIBINOTIFY=off: Use libinotify as the FAM backend
     RUN_AS_EUID=on: Drop privileges to effective user
===> Use 'make config' to modify these settings

Master Sites:
  1. http://distcache.FreeBSD.org/ports-distfiles/
  2. http://people.gnome.org/~veillard/gamin/sources/

Number of commits found: 63

Commit History - (may be incomplete: see SVNWeb link above for full details)
DateByDescription
04 Sep 2014 19:26:24
Original commit files touched by this commit  0.1.10_8
Revision:367307
antoine search for other commits by this committer
Change INSTALL_DATA to install with mode 644
Remove patches and hacks that were used to work around the previous
situation
This allows to stage more ports as a regular user

Differential Revision:	https://reviews.freebsd.org/D703
Reviewed by and discussed with:	bapt
With hat:	portmgr
30 Aug 2014 19:23:18
Original commit files touched by this commit  0.1.10_8
Revision:366670
tijl search for other commits by this committer
devel/gamin:
- Convert to USES=libtool and bump dependent ports
- Add INSTALL_TARGET=install-strip
24 Jun 2014 22:48:52
Original commit files touched by this commit  0.1.10_7
Revision:359167
bapt search for other commits by this committer
Use MAKE_CMD
04 Apr 2014 10:33:39
Original commit files touched by this commit  0.1.10_7
Revision:350090
rene search for other commits by this committer
- Fix build
- Drop leading indefinite article from COMMENT
- Reset maintainership to ports@
- Bump PORTREVISION

Approved by:	gnome (kwm), former maintainer
07 Mar 2014 09:16:09
Original commit files touched by this commit  0.1.10_6
Revision:347349
miwi search for other commits by this committer
- Stage support
04 Jan 2014 23:40:44
Original commit files touched by this commit  0.1.10_6
Revision:338691
antoine search for other commits by this committer
Convert the tree to USES=fam

Approved by:	portmgr (bapt)
20 Sep 2013 17:04:44
Original commit files touched by this commit  0.1.10_6
Revision:327723
bapt search for other commits by this committer
Add NO_STAGE all over the place in preparation for the staging support (cat:
devel part 2)
31 Jul 2013 11:57:46
Original commit files touched by this commit  0.1.10_6
Revision:324037
kwm search for other commits by this committer
The FreeBSD GNOME team presents a Glib and Gtk+ 3 update.

This update updates Glib20 to 2.36 and Gtk+ 3.8

* The gio-fam-backend port that used gamin for the GFileMonitor API is gone.
  It is replaced by a GIO kqueue implementation developed as part of a NetBSD
  GSoC 2011 project by Dimitry Matveev.
* Fix a bug in the glib20 Makefile so it includes -lintl in the glib-2.0
  pkgconfig file [1]. This broke static linking and newer binutils.
* Add introspection USE_GNOME component which sets GI_SCANNER_DISABLE_CACHE to
  prevent creation of /  root/.cache dir. Defaults to build & run depend,
  but :build and :run switches available.
* New x11-toolkits/pangox-compat port and companion USE_GNOME component for
  pangox support which was removed from the pango port. Add it to ports still
  using pangox API.

Exp-run by:	bapt@
PR:		ports/178958 [1]
Submitted by:	emaste@ [1]
26 Apr 2013 10:44:29
Original commit files touched by this commit  0.1.10_5
Revision:316596
ak search for other commits by this committer
- Convert USE_GETTEXT to USES (part 4)

Approved by:	portmgr (bapt)
23 Apr 2013 10:13:20
Original commit files touched by this commit  0.1.10_5
Revision:316333
bapt search for other commits by this committer
Convert devel to USES=pkgconfig
22 Mar 2013 16:30:36
Original commit files touched by this commit  0.1.10_5
Revision:314945
kwm search for other commits by this committer
Add patches to gamin to enable support for effective uid/gid, add a option for
this and turn it on by default.

Current gamin uses the current real uid to determine the location of the
socket and during the security routines. It also forks off a copy of
"gam_server" as the current real uid as well.

This breaks gamin functionality with any application that uses effective an
uid/gid for privilege separation, such as samba. Samba runs as root, but
always sets the effective uid/gid to that of the connecting user. Since
gamin is only aware of the real uid, it always creates a root-owned gamin
socket that the effective user can't touch (gamin's own security checks
refuse it).

PR:		ports/176203
Submitted by:	Danny Warren <danny@dannywarren.com>
Reviewed by:	marcus@
14 Feb 2013 09:42:13
Original commit files touched by this commit  0.1.10_4
Revision:312209
gahr search for other commits by this committer
- Get rid of PTHREAD_CFLAGS and PTHREAD_LIBS (category: devel)

Approved by:	portmgr
18 Jan 2013 00:01:10
Original commit files touched by this commit  0.1.10_4
Revision:310577
kwm search for other commits by this committer
Add patches to fix the build with newer glib20.
While here pet portlint, convert to OptionsNG and trim Makefile header.

Obtained from:	GNOME staging repo
14 May 2012 07:50:23
Original commit files touched by this commit  0.1.10_4
bsam search for other commits by this committer
1. Fix build with clang:  [1]
-----
clang -DHAVE_CONFIG_H -I. -I..  -I.. -I../libgamin -I../protocol -I../lib
-I../libgamin -I/usr/local/include/glib-2.0 -DBINDIR=\""/usr/local/libexec"\"
-DG_DISABLE_DEPRECATED -DGAM_DEBUG_ENABLED  -DHAVE_LINUX -I/usr/local/include 
-Wall -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes
-Wnested-externs -Wsign-compare -Wno-sign-compare -g -O2 -pipe
-fno-strict-aliasing -MT gam_eq.o -MD -MP -MF .deps/gam_eq.Tpo -c -o gam_eq.o
gam_eq.c
gam_eq.c:127:3: error: non-void function 'gam_eq_flush' should return a value
[-Wreturn-type]
                return;
                ^
1 error generated.
-----

2. Do not bump PORTREVISION.
3. Since upstream is almost dead it's unlikely that this patch will
   be committed to it's repository.

Attn: GNOME has switched from gamin to gio. Seems that this port
may/should be deprecated...

Approved by:    gnome (mezz)  [1]
Discussed at:   freebsd-gnome
12 Feb 2012 17:03:59
Original commit files touched by this commit  0.1.10_4
marcus search for other commits by this committer
Add optional libinotify support (default disabled) and fix the build
if devel/libinotify is installed.

PR:             164756
Submitted by:   sunpoet
23 Sep 2011 22:26:39
Original commit files touched by this commit  0.1.10_4
amdmi3 search for other commits by this committer
- Add LDFLAGS to CONFIGURE_ENV and MAKE_ENV (as it was done with LDFLAGS)
- Fix all ports that add {CPP,LD}FLAGS to *_ENV to modify flags instead

PR:             157936
Submitted by:   myself
Exp-runs by:    pav
Approved by:    pav
03 Jul 2011 14:59:23
Original commit files touched by this commit  0.1.10_4
ohauer search for other commits by this committer
-remove MD5
04 Dec 2010 07:34:27
Original commit files touched by this commit  0.1.10_4
ade search for other commits by this committer
Sync to new bsd.autotools.mk
31 May 2010 22:52:40
Original commit files touched by this commit  0.1.10_4
marcus search for other commits by this committer
Bump PORTREVISION and add USE_GETTEXT where missing.

PR:             147257
11 May 2010 15:22:45
Original commit files touched by this commit  0.1.10_3
kwm search for other commits by this committer
Fix fetching by adjusting master site.

PR:             ports/146494
Submitted by:   Stefan Walter <stefan@freebsd.org>
02 Aug 2009 19:36:34
Original commit files touched by this commit  0.1.10_3
mezz search for other commits by this committer
-Repocopy devel/libtool15 -> libtool22 and libltdl15 -> libltdl22.
-Update libtool and libltdl to 2.2.6a.
-Remove devel/libtool15 and devel/libltdl15.
-Fix ports build with libtool22/libltdl22.
-Bump ports that depend on libltdl22 due to shared library version change.
-Explain what to do update in the UPDATING.

It has been tested with GNOME2, XFCE4, KDE3, KDE4 and other many wm/desktop
and applications in the runtime.

With help:      marcus and kwm
Pointyhat-exp:  a few times by pav
Tested by:      pgollucci, "Romain Tartière" <romain@blogreen.org>, and
                a few MarcusCom CVS users. Also, I might have missed a few.
Repocopy by:    marcus
Approved by:    portmgr
06 Jun 2009 05:55:38
Original commit files touched by this commit  0.1.10_3
marcus search for other commits by this committer
Add bug parity with SGI FAM by treating directory symlinks as directories.
02 May 2009 01:01:54
Original commit files touched by this commit  0.1.10_2
marcus search for other commits by this committer
Further extend the previous patches to make sure that excluded paths
do not get opened (but rather they will be polled).
16 Apr 2009 17:32:57
Original commit files touched by this commit  0.1.10_1
marcus search for other commits by this committer
Fix a number of long-standing bugs with gamin.

* Do not use kernel notifications for paths like /mnt and /media.  This
  will allow such volumes to be unmounted.  This matches the behvaior
  of Linux.
* Allow the "poll" directive in gaminrc files to have an effect.
* Add some verbiage to pkg-message to instruct users how to configure
  gamin [1]

PR:             131121 [1]
Submitted by:   Graham Todd <gtodd@bellanet.org> (based on) [1]
Reported by:    countless users
Approved by:    portmgr (implicit)
10 Jan 2009 05:22:13
Original commit files touched by this commit  0.1.10
marcus search for other commits by this committer
Presenting GNOME 2.24 for FreeBSD.

See http://library.gnome.org/misc/release-notes/2.24/ for the general
release notes.  On the FreeBSD front, this release introduces Fuse support
in HAL, adds multi-CPU support to libgtop, WebKit updates, and fixes some
long-standing seahorse and gnome-keyring bugs.  The documentation updates
to the website are forthcoming.

This release features commits by adamw, ahze, kwm, mezz, and myself.  It would
not have been possible without are contributors and testers:

Alexander Loginov
Craig Butler [1]
Dmitry Marakasov [6]
Eric L. Chen
(Only the first 15 lines of the commit message are shown above View all of this commit message)
06 Jun 2008 13:21:59
Original commit files touched by this commit  0.1.9_2
edwin search for other commits by this committer
Bump portrevision due to upgrade of devel/gettext.

The affected ports are the ones with gettext as a run-dependency
according to ports/INDEX-7 (5007 of them) and the ones with USE_GETTEXT
in Makefile (29 of them).

PR:             ports/124340
Submitted by:   edwin@
Approved by:    portmgr (pav)
24 Mar 2008 03:50:55
Original commit files touched by this commit  0.1.9_1
marcus search for other commits by this committer
The FreeBSD GNOME team is proud to annunce the release of GNOME 2.22.0 for
FreeBSD.  The official GNOME 2.22 release notes can be found at
http://library.gnome.org/misc/release-notes/2.22/ .  On the FreeBSD front,
this release features an updated hal port with support for video4linux
devices, DRM (Direct Rendering), and better support of removable media.  Work
is also underway to tie webkit more closely into GNOME.  As part of the
GNOME 2.22 upgrade, GStreamer received a rather large upgrade as well.
Be sure to consult UPDATING on the proper steps to upgrade all of your
GNOME ports.

This release would not have been possible without the contributions and
testing efforts of the following people:

Pawel Worach
kan
edwin
Peter Ulrich Kruppa
J. W. Ballantine
Yasuda Keisuke
Andriy Gapon
10 Aug 2007 19:24:21
Original commit files touched by this commit  0.1.8_1
marcus search for other commits by this committer
Update to 0.1.9.
24 May 2007 03:58:04
Original commit files touched by this commit  0.1.8_1
marcus search for other commits by this committer
Fix gamin on 64-bit platforms.  This has been broken for a while, but is
now becoming apparent with GCC 4.2.

Approved by:    portmgr (implicit)
19 Mar 2007 05:14:07
Original commit files touched by this commit  0.1.8
marcus search for other commits by this committer
Presenting GNOME 2.18 for FreeBSD.  GNOME 2.18 is a departure from recent GNOME
releases in that it focuses more on stability and functionality than on
new features.  Not that it doesn't have its share of new and exciting
items.  See http://www.gnome.org/start/2.18/ for all the goodies in
this release.

GNOME 2.18 for FreeBSD would not have been possible without the hard work
of the FreeBSD GNOME Team and our intrepid band of testers including
J. W. Ballantine, Pawel Worach, Yasuda Keisuke, Pascal Hofstee, miwi,
Yoshihiro Ota, Vladimir Grebenschikov, Jukka A. Ukkonen,
Phillip Neumann, Franz Klammer, and Neal Delmonico.
28 Jan 2007 09:07:47
Original commit files touched by this commit  0.1.7_2
kris search for other commits by this committer
Use libtool port instead of included one to avoid objformat a.out botch
05 Nov 2006 02:56:37
Original commit files touched by this commit  0.1.7_2
mezz search for other commits by this committer
INSTALLS_SHLIB -> USE_LDCONFIG.

Found by:       portlint (cports.sh)
23 Feb 2006 15:33:39
Original commit files touched by this commit  0.1.7_2
ade search for other commits by this committer
Fix up PORTREVISION

Approved by:    portmgr (implicit)
23 Feb 2006 10:40:45
Original commit files touched by this commit  0.1.7_1
ade search for other commits by this committer
Conversion to a single libtool environment.

Approved by:    portmgr (kris)
14 Feb 2006 17:46:36
Original commit files touched by this commit  0.1.7_2
marcus search for other commits by this committer
Fix build on 4.X.

PR:             93271
14 Feb 2006 09:04:18
Original commit files touched by this commit  0.1.7_2
jylefort search for other commits by this committer
When the GAM_POLLER option is disabled:
  - force polling for remote file systems
  - do not initialize the vendor's poller [1]

Obtained from:  marcus [1]
11 Feb 2006 06:58:29
Original commit files touched by this commit  0.1.7_1
marcus search for other commits by this committer
* Restore the stale socket cleanup code from gamin 0.1.5 to ensure that even
  if gamin crashes or is killed with SIGKILL, a leftover socket does not
  prevent gam_server from starting.

* Revert to using the home-grown poller in gamin's kqueue backend instead
  of gamin's built-in poller.  The built-in poller can still be enabled if
  desired via OPTIONS.

* If gamin's poller is used, make sure all local file systems are handled
  by kqueue where as all remote file systems are handled by polling.

Reviewed by:    jylefort
09 Feb 2006 06:40:18
Original commit files touched by this commit  0.1.7
marcus search for other commits by this committer
* Update to 0.1.7, and add support for file system type detection (currently,
  only UFS file systems are handled by kqueue, but this might change in the
  future if kqueue on NFS proves stable) [1]

* Switch py-gamin to use USE_FAM+WANT_FAM_SYSTEM

* Switch test target to regression-test so that pointyhat will run tests
  automatically

Submitted by:   ale [1]
06 Feb 2006 17:17:15
Original commit files touched by this commit  0.1.5_3
jylefort search for other commits by this committer
Open monitored files with the O_NONBLOCK flag: prevents gam_server
from locking up when a file for which open() blocks forever is
monitored.
23 Nov 2005 22:41:05
Original commit files touched by this commit  0.1.5_2
pav search for other commits by this committer
- Add SHA256 checksums
16 Nov 2005 19:45:48
Original commit files touched by this commit  0.1.5_2
ade search for other commits by this committer
USE_AUTOTOOLS setup got reversed by the script

Submitted by:   pointyhat/kris (no $1000 dinner though :)
15 Nov 2005 06:52:12
Original commit files touched by this commit  0.1.5_2
ade search for other commits by this committer
Mass-conversion to the USE_AUTOTOOLS New World Order.  The code present
in bsd.autotools.mk essentially makes this a no-op given that all the
old variables set a USE_AUTOTOOLS_COMPAT variable, which is parsed in
exactly the same way as USE_AUTOTOOLS itself.

Moreover, USE_AUTOTOOLS has already been extensively tested by the GNOME
team -- all GNOME 2.12.x ports use it.

Preliminary documentation can be found at:
        http://people.FreeBSD.org/~ade/autotools.txt

which is in the process of being SGMLized before introduction into the
Porters Handbook.

Light blue touch-paper.  Run.
05 Nov 2005 05:22:06
Original commit files touched by this commit  0.1.5_2
marcus search for other commits by this committer
Bump PORTREVISION to chase the glib20 shared library update.
21 Oct 2005 06:04:27
Original commit files touched by this commit  0.1.5_1
jylefort search for other commits by this committer
If there is a leftover socket when the server starts, delete it
(otherwise the bind() call will fail and the server will not start).
28 Aug 2005 08:08:37
Original commit files touched by this commit  0.1.5
marcus search for other commits by this committer
Add a forgotten patch to fix the build on non_linux systems.
28 Aug 2005 07:30:51
Original commit files touched by this commit  0.1.5
marcus search for other commits by this committer
Update to 0.1.5.
17 Jul 2005 20:56:43
Original commit files touched by this commit  0.1.2_2
marcus search for other commits by this committer
Fix alignment problems when checking socket credentials on non-i386
platforms.
16 Jul 2005 22:57:23
Original commit files touched by this commit  0.1.2_1
marcus search for other commits by this committer
Gamin was using its own, debugging, versions of the g_list glib functions.
They were written to find problems in GList usage, but were causing gamin
to segfault on 4.X.  Disable debugging by default, and only use the debugging
versions of g_list_* if debugging is enabled.

Additionally, add <string.h> to gam_api.c which would certainly fix problems
on 4.X alpha.

Reported by:    Stefan Thurner <thurners@nicsys.de>
13 Jul 2005 16:13:00
Original commit files touched by this commit  0.1.2
jylefort search for other commits by this committer
Update to 0.1.2
10 Jun 2005 17:38:28
Original commit files touched by this commit  0.1.1
jylefort search for other commits by this committer
Update to 0.1.1
19 May 2005 19:41:48
Original commit files touched by this commit  0.1.0
jylefort search for other commits by this committer
Update to 0.1.0
09 May 2005 23:54:51
Original commit files touched by this commit  0.0.26_13
marcus search for other commits by this committer
Only declare the tests and post-install targets if we aren't in a slave
port.  This fixes the py-gamin slave build.
09 May 2005 15:46:39
Original commit files touched by this commit  0.0.26_13
jylefort search for other commits by this committer
Improve the kqueue backend:

  - also use kqueue to monitor files within a monitored directory
  - tremendously improve the scalability of the backend when
    monitoring very large directories
  - periodically attempt to switch polled files to kqueue notification
  - do not perform an extra useless lstat() when a missing file is created
  - code cleanups

Approved by:    marcus
25 Apr 2005 05:31:22
Original commit files touched by this commit  0.0.26_12
marcus search for other commits by this committer
Fix gamin on -CURRENT by not using LOCAL_CREDS.  While it works, it does
not provide the pid information that the cmsgcred structure gives us.
Gamin will now behave the same way on all versions of FreeBSD.
24 Apr 2005 20:43:38
Original commit files touched by this commit  0.0.26_11
marcus search for other commits by this committer
Add a ``tests'' target to run the built-in gamin regression tests.

Discussed with: jylefort
19 Apr 2005 03:10:58
Original commit files touched by this commit  0.0.26_11
marcus search for other commits by this committer
Only use USE_INC_LIBTOOL_VER if we're installing gamin itself.  The slave
ports don't need this.

Reported by:    pointyhat via kris
11 Apr 2005 08:22:59
Original commit files touched by this commit  0.0.26_11
adamw search for other commits by this committer
Fix build on 4.X.
10 Apr 2005 20:34:05
Original commit files touched by this commit  0.0.26_11
marcus search for other commits by this committer
Have gamin install libtool archives since KDE needs them.  This is inline
with what devel/fam does.

Submitted by:   kwm
10 Apr 2005 17:36:26
Original commit files touched by this commit  0.0.26_10
marcus search for other commits by this committer
Add a patch forgotten in the previous commit.
10 Apr 2005 17:36:02
Original commit files touched by this commit  0.0.26_10
marcus search for other commits by this committer
* Fallback to polling for files not supported by kqueue
* Do not send an ENDEXISTS event on NOTE_REVOKE
* Handle kevent aggregation if multiple event types are requested
* Mimic FAM's behavior of never following symbolic links
* Add exhaustive error handling
* Remove all the legacy thread-safe code since gamin is now single-threaded

PR:             79680
Submitted by:   Jean-Yves Lefort <jylefort@brutele.be>
07 Apr 2005 01:18:24
Original commit files touched by this commit  0.0.26_9
marcus search for other commits by this committer
* When a file monitored with kqueue is moved or removed, gamin does
  not monitor it anymore. The patch fixes the issue by adding
  moved/removed files to the exist_list, so that gamin detects when
  they are recreated
* No CHANGED event is emitted for the files contained in a monitored
  directory, because kqueue can't do that. The patch adds periodic
  polling for these files
* Instead of calling kevent() every second, the patch uses an I/O
  watch (g_io_add_watch())

PR:             79605
Submitted by:   Jean-Yves Lefort <jylefort@brutele.be>
02 Apr 2005 09:12:14
Original commit files touched by this commit  0.0.26_8
marcus search for other commits by this committer
Remove a file that should never have made it into the gamin addition.
02 Apr 2005 09:08:47
Original commit files touched by this commit  0.0.26_8
marcus search for other commits by this committer
Add gamin, a file and directory monitoring server and API.  Gamin can be
used as a drop-in replacement for FAM.  Gamin is designed to be more secure
than FAM as itdoes not require RPC, and runs a separate instance for each
user.  While it is API and ABI compatible with FAM, it does not [yet]
support all of FAM's features.

This version of gamin comes with an optional (defaults to on) kqueue
backend for FreeBSD.  This backend can only be used with UFS file
systems.  If you need FAM-like support on non-UFS file systems, you
must build without the kqueue backend.

Number of commits found: 63

Login
User Login
Create account

Servers and bandwidth provided by
New York Internet, SuperNews, and RootBSD

This site
What is FreshPorts?
About the authors
FAQ
How big is it?
The latest upgrade!
Privacy
Forums
Blog
Contact

Search
Enter Keywords:
 
more...

Latest Vulnerabilities
ntpDec 20
ntp-develDec 20
gitDec 19
otrsDec 16
mod_dav_svnDec 15
subversionDec 15
subversion16Dec 15
subversion17Dec 15
nvidia-driverDec 14
nvidia-driver-173Dec 14
nvidia-driver-304Dec 14
asterisk11Dec 11
bind99Dec 11
xorg-serverDec 10
unboundDec 09

10 vulnerabilities affecting 27 ports have been reported in the past 14 days

* - modified, not new

All vulnerabilities


Ports
Home
Categories
Deleted ports
Sanity Test Failures
Newsfeeds

Statistics
Graphs
NEW Graphs (Javascript)
Traffic

Calculated hourly:
Port count 24436
Broken 145
Deprecated 70
Ignore 398
Forbidden 2
Restricted 207
No CDROM 93
Vulnerable 19
Expired 0
Set to expire 65
Interactive 0
new 24 hours 3
new 48 hours7
new 7 days24
new fortnight43
new month128

Servers and bandwidth provided by
New York Internet, SuperNews, and RootBSD
Valid HTML, CSS, and RSS.
Copyright © 2000-2014 Dan Langille. All rights reserved.