<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>DaveG @ PhUSE </title>
<link>http://DaveG.tiddlyspot.com/index.html</link>
<description>Talks, Tutorials, blog </description>
<language>en-us</language>
<copyright>Copyright 2006 DaveGarbutt</copyright>
<pubDate>Thu, 09 Nov 2006 18:27:25 GMT</pubDate>
<lastBuildDate>Thu, 09 Nov 2006 18:27:25 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>TiddlyWiki 2.0.11</generator>
<item>
<title>UploadLog</title>
<description>| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |&lt;br /&gt;| 22/6/2006 10:52:43 | DaveGarbutt | [[/|http://tiddlyspot.com/stestphuk/]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 22/6/2006 10:52:57 | DaveGarbutt | [[/|http://tiddlyspot.com/stestphuk/]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 23/6/2006 17:23:3 | DaveGarbutt | [[/|http://tiddlyspot.com/stestphuk/]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 23/6/2006 18:25:13 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 23/6/2006 18:26:31 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 23/6/2006 18:26:48 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 23/6/2006 18:27:5 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 23/6/2006 18:27:42 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 23/6/2006 18:37:28 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 27/6/2006 10:56:27 | DaveGarbutt | [[DaveG-tiddlyspot.html|file:///E:/DaveG-tiddlyspot.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 10/7/2006 19:28:53 | DaveGarbutt | [[DaveG.html|file:///E:/DaveG.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 10/7/2006 19:32:0 | DaveGarbutt | [[DaveG.html|file:///E:/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 10/7/2006 19:38:58 | DaveGarbutt | [[DaveG.html|file:///E:/DaveG.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 10/7/2006 19:39:8 | DaveGarbutt | [[DaveG.html|file:///E:/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 10/7/2006 20:20:3 | DaveGarbutt | [[DaveG.html|file:///E:/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 11/7/2006 10:44:14 | DaveGarbutt | [[DaveG.html|file:///E:/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 16/7/2006 17:40:46 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 16/7/2006 17:41:38 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 16/7/2006 22:33:16 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 20/8/2006 14:10:33 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 20/8/2006 15:8:59 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 20/8/2006 23:33:24 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/stestphuk/store.php]] | . | index.html | . |&lt;br /&gt;| 20/8/2006 23:39:52 | DaveGarbutt | [[DaveG.html|file:///Volumes/DAVEGARBUTT/DaveG.html]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 23/8/2006 20:25:32 | YourName | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 23/8/2006 20:27:48 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 23/8/2006 20:38:47 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 23/8/2006 20:46:39 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 23/8/2006 21:51:59 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 23/8/2006 22:14:1 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 23/8/2006 22:27:54 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 26/8/2006 19:35:27 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 27/8/2006 11:42:10 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 27/8/2006 15:38:32 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 27/8/2006 17:19:48 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 27/8/2006 18:33:28 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 29/8/2006 16:54:45 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 29/8/2006 18:29:45 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 9:24:6 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 10:6:57 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 30/8/2006 10:57:31 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 30/8/2006 11:15:15 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 30/8/2006 11:30:16 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 30/8/2006 11:46:43 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 14:16:26 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 14:54:23 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 30/8/2006 15:12:0 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 15:28:38 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 30/8/2006 16:10:1 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 17:16:3 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 18:46:7 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 19:52:34 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 19:57:30 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 30/8/2006 22:38:37 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 1/9/2006 12:25:50 | DaveGarbutt | [[/|http://tiddlyspot.com/daveg/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 5/9/2006 17:34:14 | DaveGarbutt | [[/|http://tiddlyspot.com/DaveG/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 8/9/2006 10:30:57 | DaveGarbutt | [[/|http://tiddlyspot.com/DaveG/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 18:27:43 | DaveGarbutt | [[/|http://tiddlyspot.com/DaveG/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 18:57:46 | DaveGarbutt | [[/|http://tiddlyspot.com/DaveG/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . | Ok |&lt;br /&gt;| 10/9/2006 19:1:7 | DaveGarbutt | [[/|http://tiddlyspot.com/DaveG/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 23:32:57 | DaveGarbutt | [[/|http://daveg.tiddlyspot.com/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 23:35:42 | DaveGarbutt | [[/|http://daveg.tiddlyspot.com/]] | [[store.php|http://tiddlyspot.com/DaveG/store.php]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 23:36:56 | DaveGarbutt | [[/|http://daveg.tiddlyspot.com/]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 23:37:34 | DaveGarbutt | [[/|http://daveg.tiddlyspot.com/]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 10/9/2006 23:47:49 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://tiddlyspot.com/DaveG/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 10/9/2006 23:50:28 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 11/9/2006 1:52:38 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 11/9/2006 3:5:57 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 11/9/2006 3:29:35 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 11/9/2006 22:31:32 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 15/9/2006 22:59:30 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 15/9/2006 23:57:45 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 16/9/2006 17:59:44 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 16/9/2006 18:2:21 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 16/9/2006 18:25:4 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 17/9/2006 12:1:17 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 17/9/2006 12:13:45 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 17/9/2006 13:10:6 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 17/9/2006 14:12:16 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 17/9/2006 18:28:53 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 18/9/2006 0:17:55 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 18/9/2006 1:14:53 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 18/9/2006 2:16:16 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 20/9/2006 19:16:6 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 4/10/2006 9:10:28 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 4/10/2006 9:10:42 | DaveGarbutt | [[index.html|file:///Users/dave/Documents/BSI/PhUSE%20Papers%202006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 26/10/2006 10:48:6 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 26/10/2006 10:52:14 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 26/10/2006 10:52:33 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 26/10/2006 10:52:58 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 26/10/2006 10:53:54 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 26/10/2006 11:3:36 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 26/10/2006 11:9:57 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 26/10/2006 11:22:35 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 26/10/2006 11:28:11 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 26/10/2006 11:59:44 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 27/10/2006 11:49:24 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 27/10/2006 12:51:48 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 27/10/2006 12:54:28 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 27/10/2006 15:9:22 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 27/10/2006 15:18:5 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 27/10/2006 19:21:50 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 6/11/2006 15:18:29 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 6/11/2006 15:46:4 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 6/11/2006 19:3:42 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 7/11/2006 11:52:40 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 8/11/2006 0:34:38 | DaveGarbutt | [[index.html|file:///Volumes/DAVEGARBUTT/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 8/11/2006 1:15:8 | DaveGarbutt | [[index.html|file:///Volumes/DAVEGARBUTT/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 8/11/2006 15:30:39 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |&lt;br /&gt;| 9/11/2006 16:20:57 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 9/11/2006 16:31:7 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |&lt;br /&gt;| 9/11/2006 19:27:22 | DaveGarbutt | [[index.html|file:///E:/PhUSE%20Dublin%2006/index.html]] | [[store.cgi|http://DaveG.tiddlyspot.com/store.cgi]] | . | index.html | . |</description>
<link>http://DaveG.tiddlyspot.com/index.html#UploadLog</link>
<pubDate>Thu, 09 Nov 2006 18:27:22 GMT</pubDate>
</item>
<item>
<title>Gnit Your Own - final</title>
<description>This text is copied out of the presentation file, I will gradually unify it with the draft version in [[Gnit your own]], adding the untransferred text and making the commands and results into popups.&lt;br /&gt;&lt;br /&gt;&lt;&lt;slideShow&gt;&gt;&lt;br /&gt;--s--&lt;br /&gt;!Gnit your own - creative uses of Unix Text Tools for everyday problems&lt;br /&gt;!Dave Garbutt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TU04  @ PhUSE 2006, Dublin&lt;br /&gt;--s--&lt;br /&gt;!Introduction&lt;br /&gt;# What commands are available, and&lt;br /&gt;# Which problems they solve, with&lt;br /&gt;# Relevant examples of&lt;br /&gt;# How you can put them together to solve problems.&lt;br /&gt;# And lastly introduce you to&lt;br /&gt;# !the power of regular expressions (RE).&lt;br /&gt;*This is a little different from programming in SAS -&lt;br /&gt;* but learning a new way to think about, and solve problems&lt;br /&gt;* is only going to help your programming in SAS, or out of it.&lt;br /&gt;--s--&lt;br /&gt;! These Examples&lt;br /&gt;*I have written the following examples during my everyday work as a SAS programmer. They have already helped me. I hope they will help you too.&lt;br /&gt;*Experiment!&lt;br /&gt;* Find an example that tackles a problem you have (or near to it at least) and copy it to your system. With command pipelines it is very easy to take them apart and see what each step does.&lt;br /&gt;*Then modify the steps and see the effect.&lt;br /&gt;*I have added a &gt; character at the start of lines that are commands, this is to separate the commands from their output better.&lt;br /&gt;* Do not paste this character!&lt;br /&gt;*Other shells might start the line with a different character&lt;br /&gt;--s--&lt;br /&gt;! In short...&lt;br /&gt;*Quick solutions for problems where writing a SAS program is not worthwhile.&lt;br /&gt;* The ability to process text files before reading them into SAS by using the pipe facility of Filename can also save you a lot of SAS programming.&lt;br /&gt;*Practice with regular expressions outside of SAS&lt;br /&gt;--s--&lt;br /&gt;!Unix text commands&lt;br /&gt;*What they operations do they do?&lt;br /&gt;*Commands on the whole file&lt;br /&gt;*tr, iconv, wc, expand, cat, tee, split, sort, spell&lt;br /&gt;*Commands (only) selecting observations&lt;br /&gt;*comm, join, uniq, grep&lt;br /&gt;*Commands selecting variables&lt;br /&gt;*cut -c, cut -f, colrm&lt;br /&gt;*Commands that can select obs, vars or derive new variables&lt;br /&gt;*sed,awk,shells (eg korn), perl,ruby&lt;br /&gt;--s--&lt;br /&gt;!How do they fit together?&lt;br /&gt;*Unix commands can all be fitted together in long sequences&lt;br /&gt;*| Separated by the vertical bar character.&lt;br /&gt;*The output of each program becomes the input of the next&lt;br /&gt;{{{&lt;br /&gt;command 1 -options files | command2 -options | command3 -options  [&gt;redirect to file]&lt;br /&gt;}}}&lt;br /&gt;*These sequences are known as pipes.&lt;br /&gt;*By combining a few text commands very flexible and powerful processing can be written quickly&lt;br /&gt;*So quickly that all kinds of tasks not worth automating become available for solution&lt;br /&gt;*Fast&lt;br /&gt;--s--&lt;br /&gt;!Regular expressions- wild, wild cards&lt;br /&gt;* Like: *.sas&lt;br /&gt;*Extended… but different rules from file matching&lt;br /&gt;*Normally we control an action (keep, drop) with the RE, but&lt;br /&gt;*We can also extract the exact matched text&lt;br /&gt;*Confusion points&lt;br /&gt;*Dot(.)  means *, I.e. any character&lt;br /&gt;*labl*.sas --&gt; lablllzsas!&lt;br /&gt;*labl.*\.sas&lt;br /&gt;*Much less coding than typical with SAS character functions&lt;br /&gt;--s--&lt;br /&gt;!Build up bit by bit&lt;br /&gt;*No match = silence ''means //always// test'' on data with some known matches in&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!RE syntax&lt;br /&gt;*Rules:&lt;br /&gt;*Patterns are applied line-by-line&lt;br /&gt;*Matches are found anywhere on the line unless there is an anchor&lt;br /&gt;*Expressions to be matched have these components (all optional)&lt;br /&gt;&lt;br /&gt;{{{ ^Abc.+[abc]*\ (big|small)present{2,3}$ }}}&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Characters, ranges,alternatives repetitions, anchors, escapes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Simple RE examples:&lt;br /&gt;*[_A-Za-z][_A-Za-z0-9]{0,7}&lt;br /&gt;*matches a V6 SAS variable identifier&lt;br /&gt;&lt;br /&gt;*.*\.sas7b[cd]at&lt;br /&gt;*matches the file names of SAS catalogues and datasets&lt;br /&gt;&lt;br /&gt;*population&lt;br /&gt;*matches the string 'population', anywhere on the line&lt;br /&gt;--s--&lt;br /&gt;!RE example: Searching SAS logs&lt;br /&gt;*Your boss asks you to check Wiley T. Programmers' logs because he has gone home…&lt;br /&gt;*They haven't even finished printing yet!&lt;br /&gt;1.{{{&gt; grep ERROR wtpsas.log}}}&lt;br /&gt;2.{{{&gt; grep -E `^ERROR:` wtpsas.log}}}&lt;br /&gt;3.{{{&gt; grep -E '^ERROR[ ]*:' wtpsas.log}}}&lt;br /&gt;4.{{{&gt; grep -E '^[Ee][Rr]+[Oo][Rr][ ]*:' wtpsas.log}}}&lt;br /&gt;5.{{{&gt; grep -i -E '^ERROR[ ]*:' wtpsas.log}}}&lt;br /&gt;6.{{{&gt; grep -i -E '^ERROR[ ]*:' *.log}}}&lt;br /&gt;*No output!&lt;br /&gt;*&quot;Yes, that fast ☺&quot;. 17:18 - out of the door.&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Frequently Posed Worries&lt;br /&gt;*Do I have to learn all these commands before I can get anything done?&lt;br /&gt;*Are your tips only for one kind of Unix, or one kind of shell?&lt;br /&gt;*What about Windows?&lt;br /&gt;*Won't this take a long time, (my log files are taking up about 500KB) to run on my 200 listings?&lt;br /&gt;*It looks like Chinese, how can I ever understand that gobbledygook?&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!So with the worries gone, let's look at examples&lt;br /&gt;*These are hard to show well in PowerPoint&lt;br /&gt;*So read the text paper&lt;br /&gt;*And see them online at [[here|http://daveg.tiddlyspot.com/]]&lt;br /&gt;*More text is in the slide notes&lt;br /&gt;--s--&lt;br /&gt;! EG 1: Can I see who has access to my studies?&lt;br /&gt;*On my home system a clinical project has a single group. So if we check the group membership we will get the answer.&lt;br /&gt;{{{&gt; lsgroup MYPROJ}}}&lt;br /&gt;{{{MYPROJ id=8996 admin=false users=scott,ccadmin,flopsy,mopsy,cottontailo&lt;br /&gt;,peter registry=files}}}&lt;br /&gt;*But it isn't exactly easy to read. To just get the list of users:&lt;br /&gt;{{{&gt; lsgroup -a users meproj}}}&lt;br /&gt;{{{MYPROJ users=scott,ccadmin,flopsy,mopsy,cottontailo ,peter}}}&lt;br /&gt;----&lt;br /&gt;* These examples are all fictionalised, and you can tell from this one because a&lt;br /&gt;Unix user name must be 8 characters or less.&lt;br /&gt; --s--&lt;br /&gt;!Eg1 page 2&lt;br /&gt;*Let us drop scott and sort by user id, but first we have to get every user on a separate line.&lt;br /&gt;* The octal for line-feed is '\012', using tr we can translate commas to line&lt;br /&gt;ends.&lt;br /&gt;* We delete the first line with the sed program, 1d means for line 1, do a delete.&lt;br /&gt;{{{&gt; lsgroup -a users MYPROJ |  tr ',' '\012' |sed '1d' | sort }}}&lt;br /&gt;*gives:&lt;br /&gt;{{{&lt;br /&gt;ccadmin&lt;br /&gt;cottontailo&lt;br /&gt;!flopsy&lt;br /&gt;!mopsy&lt;br /&gt;peter&lt;br /&gt;}}}&lt;br /&gt;*Much more readable!&lt;br /&gt;--s--&lt;br /&gt;!A file I copied from Windows gives me strange messages&lt;br /&gt;&lt;br /&gt;*All text files are not equal.&lt;br /&gt;!Windows uses two characters to mark the end-of-line and Unix only one.&lt;br /&gt;This extra ^M (control+M, ASCII 15 (octal)) character is a legal character in a&lt;br /&gt;file name so it causes all sorts of issues.&lt;br /&gt;*There are various ways to fix it perhaps the simplest is:&lt;br /&gt;{{{&lt;br /&gt;!tr -d '\015' &lt;inputfile &gt;cleaned_file ; mv -f cleaned_file inputfile&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!I am programming the flagging of lab values…&lt;br /&gt;*how can I see just the lines with flags?&lt;br /&gt;*The file is 12,000 lines long!&lt;br /&gt;*We want to select rows that have at least once the pattern:&lt;br /&gt;{{{'number&lt;space&gt;flagchar'}}}&lt;br /&gt;*no lines with only {{{number&lt;space&gt;number}}} should show&lt;br /&gt;{{{&lt;br /&gt;grep -E '[0-9]+[ ]*[#$^+]+'  labl*.lst&lt;br /&gt;}}}&lt;br /&gt;* labl_23.lst:&lt;br /&gt;{{{&lt;br /&gt;Week  64    22MAY2006/378    09:12  404#    465#    443#    755     88      137&lt;br /&gt;labl_23.lst:&lt;br /&gt;Week -2     09NOV2004/-105   08:42  467     551 $   521 $   717     130     154&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Did I remember to run the formats program?&lt;br /&gt;# {{{&gt; ls ../../report/pgm_a/format*  ../../report/pgm_s/format*&lt;br /&gt;../../report/data_a/format*&lt;br /&gt; -r--r-----   1 CCadmin this-study     507904 Feb  4 09:04 /vob/myproj/this..sas&lt;br /&gt;-r--r-----   1 CCadmin this-study     507904 Feb  1 07:34 /vob/myproj/this…cat&lt;br /&gt;}}}&lt;br /&gt;# {{{&gt; ls ../../report/*/format*}}}&lt;br /&gt;# {{{&gt; ls -l /vob/this-study/report/@(data|pgm)_[sa]/formats.@(sas|sas7bcat)}}}&lt;br /&gt;* {{{@(data|pgm)}}} means {{{data}}} or {{{pgm}}},&lt;br /&gt;*{{{[sa]}}} means an {{{s}}} or an {{{a}}}, but no other character at this position,&lt;br /&gt;*{{{@(sas|sas7bcat){{{ means one of {{{sas}}} and {{{sas7bcat}}}&lt;br /&gt;!The directories searched are&lt;br /&gt;{{{&lt;br /&gt;!report/data_a,report/data_s,report/pgm_a,report/pgm_s&lt;br /&gt;}}}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Did I remember…?&lt;br /&gt;*Another approach would be to use compound (shell) commands.&lt;br /&gt;{{{&lt;br /&gt;cd /vob/myproj/this-study/report/data_a/&lt;br /&gt;&lt;br /&gt;[[formats.sas -nt formats.sas7bcat ]] &amp;&amp;&lt;br /&gt;   print &quot;run the program!&quot;&lt;br /&gt;}}}&lt;br /&gt;*{{{[[}}} and {{{]]}}} surround a logical test, meaning the command is evaluated&lt;br /&gt;as a true/false expression.&lt;br /&gt;*{{{-nt}}} is true if the left hand file is newer than the right hand file,&lt;br /&gt;* {{{&amp;&amp;}}} means that if the command is true the second command is run, else, it&lt;br /&gt;is not.&lt;br /&gt;--s--&lt;br /&gt;!Have I run all the SAS programs in the current directory?&lt;br /&gt;*We could check if there is a log for every program:-&lt;br /&gt;{{{&lt;br /&gt;&gt; ls *.sas | wc -l&lt;br /&gt;200&lt;br /&gt;&gt; ls *.log | wc -l&lt;br /&gt;  200&lt;br /&gt;}}}&lt;br /&gt;*That's all very well, but what if there are some old listings left?&lt;br /&gt;*Let's just look at the dates of the listings.&lt;br /&gt;*Then, if they are not all today we obviously have a problem.&lt;br /&gt;--s--&lt;br /&gt;!Have I run all the SAS programs in a directory?&lt;br /&gt;*We can use ls to get lists of files and information about them.&lt;br /&gt;{{{&lt;br /&gt; ls -l  *.sas&lt;br /&gt;120 -rwxr-xr-x  1 dave  unknown   55380  6 Dec  1999 A55219.sas&lt;br /&gt; 40 -rwxr-xr-x  1 dave  unknown   18798 27 Mar  2001 clin_stats.sas&lt;br /&gt;144 -rwxr-xr-x  1 dave  unknown   71352 18 Apr  2001 basic_ods.sas&lt;br /&gt;}}}&lt;br /&gt;*Let us just get the dates, just to get a feel for how many are today or last week…&lt;br /&gt;{{{&lt;br /&gt;&gt; ls -l -H -t *.sas | cut -c 38-49&lt;br /&gt; 6 Dec  1999&lt;br /&gt;18 Apr  2001&lt;br /&gt;27 Mar  2001&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Histogram of file dates&lt;br /&gt;*Count how many files were modified on each date in the current directory&lt;br /&gt;{{{&lt;br /&gt;ls -l -H -t  |&lt;br /&gt;# list all the files , with date details -l and no header -H, sorted by time . -t&lt;br /&gt;        sed 1d | # delete the first line (total )&lt;br /&gt;            cut -c 44-51 |&lt;br /&gt;                # keep only columns 44 to 51 (where the date is)&lt;br /&gt;                uniq -c |&lt;br /&gt;                      # delete duplicate dates (list is already sorted&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!How do I run every SAS program in a directory?&lt;br /&gt;*Strategy:&lt;br /&gt;*Generate a list of all the programs&lt;br /&gt;*Pass this list to a command to execute the passed names&lt;br /&gt;1.{{{&gt; apply 'sas -noterminal -noovp %1 &amp;'  *.sas }}}&lt;br /&gt;2.{{{apply 'sas -noterminal -noovp %1 '  *.sas &amp;}}}&lt;br /&gt;3.{{{sas -noovp -noterminal *.sas &amp;}}&lt;br /&gt;&lt;br /&gt;* The {{{&amp;}}} means 'run in background'&lt;br /&gt;* Note where the {{{&amp;}}} is:&lt;br /&gt;#  runs a separate SAS job for each, but at the same time,&lt;br /&gt;# runs the whole apply command in the background, it runs one SAS at a time.&lt;br /&gt;# does this too but calls SAS once, and writes only one log file&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!How many patients in each lab listing? Consistent?&lt;br /&gt;*Extract from a lab listing:&lt;br /&gt;*Every patient is identified like this, so&lt;br /&gt;*If we count how many patient ids there are&lt;br /&gt;* we are home.&lt;br /&gt;*How?&lt;br /&gt;*The classic : select, sort, de-duplicate&lt;br /&gt;--s--&lt;br /&gt;!How many patients in each lab listing? Consistent?&lt;br /&gt;*Great - but this is the whole line&lt;br /&gt;*Select a field with awk or cut&lt;br /&gt;--s--&lt;br /&gt;!How many patients in each lab listing? Consistent?&lt;br /&gt;*Great - but there are duplicates&lt;br /&gt;--s--&lt;br /&gt;!How many patients in each lab listing? Consistent?&lt;br /&gt;*Now we just count how many lines…&lt;br /&gt;*Add wc -l at end of pipe:&lt;br /&gt;{{{&lt;br /&gt;&gt;  grep -E '[A-Za-z]+/[0-9]+/.+/' llab_21.lst |&lt;br /&gt;          awk '{print $1}'| sort | uniq |&lt;br /&gt;          wc -l&lt;br /&gt;200&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Could we get a count for all the lab listing files?&lt;br /&gt;*Add a wild card, and scan all lab files:&lt;br /&gt;{{{&lt;br /&gt;&gt; grep -E '[A-Za-z]+/[0-9]+/.+/' labl1_2?.lst  | head&lt;br /&gt;llab_21.lst: ROW/0001/00001  49/F/Ca…&lt;br /&gt;llab_21.lst: ROW/0001/00001  49/F/Ca…&lt;br /&gt;llab_21.lst: ROW/0002/00010  55/M/Ca…&lt;br /&gt;}}}&lt;br /&gt;*This adds the file name at the start of the line&lt;br /&gt;*Extract the pat id plus file name&lt;br /&gt;*Sort | uniq&lt;br /&gt;*Drop the patid and&lt;br /&gt;*Sort uniq again…&lt;br /&gt;--s--&lt;br /&gt;!Could we get a count for all the lab listing files?&lt;br /&gt;*Two step scan and count&lt;br /&gt;{{{&lt;br /&gt;&gt; grep -E '[A-Za-z]+/[0-9]+/.+/' llab_2?.lst |  awk '{print $1, $2}' | sort |  uniq |&lt;br /&gt;        awk '{print $1}' | uniq -c&lt;br /&gt; 200 llab_21.lst:&lt;br /&gt; 200 llab_22.lst:&lt;br /&gt; 200 llab_23.lst:&lt;br /&gt;   8 llab_24.lst:&lt;br /&gt; }}}&lt;br /&gt;--s--&lt;br /&gt;!Can I extract the population used from all the listings?&lt;br /&gt;{{{&lt;br /&gt;&gt;  grep  'population' llab_2[1-9].lst  | sort | uniq | head -20&lt;br /&gt;llab_21.lst: Extension Safety population&lt;br /&gt;llab_22.lst: Extension Safety population&lt;br /&gt;llab_23.lst: Safety population&lt;br /&gt;llab_24.lst: Efficacy population&lt;br /&gt;llab_25.lst: Extension Safety population&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Hmmm, interesting, can I match it up with the patient counts?&lt;br /&gt;*Save the pops list and the counts in files&lt;br /&gt;* then list the files to remind ourselves of the layout&lt;br /&gt;{{{&lt;br /&gt;&gt; cat file-count.txt&lt;br /&gt; 200 llab_21.lst:&lt;br /&gt; 200 llab_22.lst:&lt;br /&gt; 200 llab_23.lst:&lt;br /&gt;   8 llab_24.lst:&lt;br /&gt; 155 llab_25.lst:&lt;br /&gt;&gt; cat labpops.txt&lt;br /&gt;llab_21.lst: Extension Safety population&lt;br /&gt;llab_22.lst: Extension Safety population&lt;br /&gt;llab_23.lst: Extension Safety population&lt;br /&gt;llab_24.lst: Extension Safety population&lt;br /&gt;llab_25.lst: Extension Safety population&lt;br /&gt;}}}&lt;br /&gt;* join on file name - in different columns in each file&lt;br /&gt;{{{&lt;br /&gt;&gt; join  -1 2 -2 1 file-count.txt labpops.txt&lt;br /&gt;llab_21.lst: 200 Extension Safety population&lt;br /&gt;llab_22.lst: 200 Extension Safety population&lt;br /&gt;llab_23.lst: 200 Extension Safety population&lt;br /&gt;;lab_24.lst: 8 Extension Safety population&lt;br /&gt;llab_25.lst: 155 Extension Safety population&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Could we extend this to count patients per treatments  per per file?&lt;br /&gt;*Here is a solution to this problem. It does a two level summary by using the &lt;br /&gt;{{{ sort}}} {{{ | }}} {{{uniq}}} sequence twice.&lt;br /&gt;1.get the lines from top of each page giving the Treatment:  and save the treatment label in a variable.&lt;br /&gt;2.get the lines with a patient id and print just the patient id from that line, but add the filename and treatment label first.&lt;br /&gt;3.run uniq to get one line per patients (per file and treatment). This is because patients are more than once in a listing if the program has split parameters into two sections&lt;br /&gt;4.run uniq again with -c to count how many pats per file and treatment&lt;br /&gt;5.add an awk to end of pipe to print filename once and tabs to lay output out ''NICELY''&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Could we extend this to count patients per treatments  per per file?&lt;br /&gt;{{{&lt;br /&gt;gawk '/^[tT]reatment:/ {sub(&quot;Treatment[ ]*:&quot;,&quot;&quot;); trt = $0 } # store the&lt;br /&gt;treatment /[A-Za-z]+[/][0-9]+[/].+/ {print  &quot;|&quot;FILENAME&quot;|&quot;trt&quot;|&quot;$1  }&lt;br /&gt;                      # print file &amp; treat for every line with an id&lt;br /&gt;     ' app9l1_12?.lst | sort   | uniq |&lt;br /&gt;     awk -F&quot;|&quot; '{ print $2&quot;: &quot;$3} ' |&lt;br /&gt;     #  select just two fields&lt;br /&gt;     uniq -c |&lt;br /&gt;               # and count&lt;br /&gt;     awk '{ if ( oldfile != $2 ) {print &quot;\nFile &quot;,$2&quot; :&quot;;&lt;br /&gt;           oldfile = $2}}&lt;br /&gt;          # pattern1 :print file name once, when it changes&lt;br /&gt;          {print &quot;\t&quot;$1&quot;\t&quot; $3,$4,$5,$6,$7,$8}                                                                       # print for all lines:&lt;br /&gt;   # add tabs (\t) for first two fields but not others '&lt;br /&gt;}}}&lt;br /&gt; --s--&lt;br /&gt;!Could we extend this to count patients per treatments  per per file?&lt;br /&gt;*It might output:&lt;br /&gt;{{{&lt;br /&gt;File  app9l1_121.lst: :&lt;br /&gt;        35      Bio 30mg qd (core) + combination&lt;br /&gt;        87      Draino 50mg bid (core) + combination&lt;br /&gt;        78      Draino 50mg qd (core) + combination&lt;br /&gt;&lt;br /&gt;File  app9l1_124.lst: :&lt;br /&gt;        2       Bio 30mg qd (core) + combination&lt;br /&gt;        4       Draino 50mg bid (core) + combination&lt;br /&gt;        2       Draino 50mg qd (core) + combination&lt;br /&gt;&lt;br /&gt;File  app9l1_125.lst: :&lt;br /&gt;        27      Bio 30mg qd (core) + combination&lt;br /&gt;        67      Draino 50mg bid (core) + combination&lt;br /&gt;        61      Draino 50mg qd (core) + combination&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!I need to make a last check of all the titles to ensure they match the specifications&lt;br /&gt;*Is it possible to list the titles, when there are different numbers of title lines in each output?&lt;br /&gt;*Some versions of grep have the -p option that prints the paragraph (set of lines delimited by a blank lines) around the matched text.&lt;br /&gt;*If there is text that is on every first page title then&lt;br /&gt;{{{&gt; grep -ip '(Page 1 of' *.lst}}}&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!I need to make a last check of all the titles to ensure they match the specifications - no grep -p?&lt;br /&gt;*The key to this trick is to set he&lt;br /&gt;*field separator to \n (line end) and the&lt;br /&gt;*record separator to null&lt;br /&gt;(awk interprets this as a blank line).&lt;br /&gt;*The awk program has two clauses&lt;br /&gt;*the string to be matched in /…/ followed by the&lt;br /&gt;*program to be executed when a match is found enclosed in {…}.&lt;br /&gt;*FILENAME is an awk system variable&lt;br /&gt;*$0 is the whole record (i.e. a paragraph in this case)&lt;br /&gt;*BEGIN is a program executed before the scanning of input starts.&lt;br /&gt;{{{&lt;br /&gt; &gt; gawk    'BEGIN { FS= &quot;\n&quot; ; RS = &quot;&quot;}&lt;br /&gt;      /Page 1 of/ { print FILENAME&quot;:\n&quot; $0 } ' *.lst&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!How can I check for issues that reappear?&lt;br /&gt;*How about getting the first page?&lt;br /&gt;*Saving in a date stamped file name&lt;br /&gt;*Using diff later&lt;br /&gt;*If we set the RS to page feed and line end as field separator we get one (logical) record per page. Then we can extract all first pages to keep track of changes. &quot;\014 is ^L, ctrl+L, or page feed.&lt;br /&gt;{{{ &gt;gawk 'BEGIN { FS= &quot;\n&quot; ; RS = &quot;\014&quot;} /Page 1 of/ { print &quot;\014&quot;FILENAME&quot;: &quot; $0 } ' *.lst }}}&lt;br /&gt;*To save the first 9 pages change {{{/Page 1 0f/}}} to {{{/Page [1-9] of/}}}&lt;br /&gt;--s--&lt;br /&gt;!How can I check my RTF files were all re-created today?&lt;br /&gt;*This example is very interesting for me. When I saw this problem (and not all the RTF files had listings so using the lst files was not an option) I thought there would be no way without learning a lot of RTF and writing a parser (this has already been done for perl, incidentally). But, one day I looked at an RTF file and thought - all I need is the matching string out of the file. The markup doesn't matter.&lt;br /&gt;*So looked for a way to extract the matching text and there is an awk function to do it.&lt;br /&gt;--s--&lt;br /&gt;!How can I check my RTF files were all re-created today?&lt;br /&gt;I wrote an awk program:&lt;br /&gt;*	It assumes the date the file was written is in a line containing the program file path, which begins with /report/ (the path is report/key or report/tier1, or report/tier2, perhaps)&lt;br /&gt;*	On these lines there is a date - which is the file write date&lt;br /&gt;*	We need to find the lines with a date (why not match on lines containing any date?).&lt;br /&gt;*	Then extract the date from the line...&lt;br /&gt;*	This is done with the match function: it returns 1 if it found a matching string, and then&lt;br /&gt;*	It puts the location into awk system variables that we can plug in to the substring function to get the date into a variable.&lt;br /&gt;*	Then if we found a date on the line the print statement prints the file &amp; date&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!How can I check my RTF files were all re-created today?&lt;br /&gt;{{{&lt;br /&gt; &gt; gawk  '/report\// {&lt;br /&gt;       match($0,&quot;report[/].*\sas&quot;);&lt;br /&gt;       file=substr($0,RSTART,RLENGTH);&lt;br /&gt;       ok=match($0,&quot;[0-9]+[A-Z]+[0-9]+&quot;);&lt;br /&gt;       date=substr($0,RSTART,RLENGTH);&lt;br /&gt;       if (ok) print date, file } ' *.rtf|&lt;br /&gt; sort -t&quot; &quot;   |&lt;br /&gt; uniq&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Just one more thing…&lt;br /&gt;&lt;br /&gt;*Checks  performed like this are measuring directly what is in the deliverable;&lt;br /&gt;*They make no assumptions about the datasets, variable names etc.&lt;br /&gt;*They can be applied to many reporting systems if they use the same output conventions&lt;br /&gt;*And they can be scripted and run automatically so you can keep an up to date summary table or document and perhaps compare it to a version printed from SAS.&lt;br /&gt;*This adds up to a uniquely powerful way to tackle output validation and testing&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Visual Summary&lt;br /&gt;* see paper version :-)&lt;br /&gt;--s--&lt;br /&gt;!Conclusions&lt;br /&gt;*Gnit your own:&lt;br /&gt;*Complementary skills to SAS&lt;br /&gt;*Ideal for restricted, focussed, specific, one-off needs because of speed and readability&lt;br /&gt;*Good place to learn regular expressions (very interactive) for SAS V9&lt;br /&gt;*And hashed arrays - also in V9&lt;br /&gt;*Can be Fun too&lt;br /&gt;* http://www.tiddlyspot.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Questions?&lt;br /&gt;&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;It is not because things are difficult that we do not dare,&lt;br /&gt;it is because we do not dare that they are difficult.&lt;br /&gt; --Seneca&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;--s--&lt;br /&gt;!Contact Information&lt;br /&gt;I would value your comments and questions on this paper.  Please contact me&lt;br /&gt;at: DaveG&lt;br /&gt;--s--&lt;br /&gt;</description>
<category>gnit</category>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BGnit%20Your%20Own%20-%20final%5D%5D</link>
<pubDate>Thu, 09 Nov 2006 15:30:39 GMT</pubDate>
</item>
<item>
<title>PhUSE-Talks2006</title>
<description># [[TiddlyWiki - the software I wish I had written]]&lt;br /&gt;# [[Gnit your own]] - creative uses of Unix Tools in Safety Programming&lt;br /&gt;** [[Gnit Your Own - final]] (developed version of above but without tables)&lt;br /&gt;# [[Why Safety Reporting IS like Rocket Science]]</description>
<category>PhUSE</category>
<link>http://DaveG.tiddlyspot.com/index.html#PhUSE-Talks2006</link>
<pubDate>Thu, 09 Nov 2006 15:19:26 GMT</pubDate>
</item>
<item>
<title>Gnit your own</title>
<description>&lt;&lt;slideShow clock:'-40'&gt;&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!  Creative Unix solutions for SAS programmer&lt;br /&gt;&lt;br /&gt;Dave Garbutt&lt;br /&gt;&lt;br /&gt;[[TU04|http://www.lexjansen.com/phuse/2006/tu/tu04.pdf]]  @ PhUSE 2006, Dublin&lt;br /&gt;+++^30em^[Abstract]&lt;&lt;moveablePanel&gt;&gt;&lt;br /&gt;Unix text tools are perhaps partly responsible for its reputation as a system only for experts. I aim to show you how a little knowledge can go a long way to solving your everyday testing and validation problems. These are not tools for developing big user-friendly systems with, they are for getting fast answers for specific questions that will most likely never recur. The Unix one-liner is the epitome of a fast and light programming system and it is a perfect fit as a second skill for SAS programmers. This tutorial will work up from simple beginnings to show you how to gknit your own, but also give you some canned examples that will be useful today. Incidentally, Windows users should still come along because these tools are now available for Windows XP free from Microsoft.&lt;br /&gt;===&lt;br /&gt;--s--&lt;br /&gt;! INTRODUCTION:&lt;br /&gt;The hardest thing learning a new system is that lost feeling when you are faced with a problem you have no idea how to tackle.&lt;br /&gt;!! This talk will&lt;br /&gt;My idea in this talk is to give you a fast overview of &lt;br /&gt;# what commands are available, and &lt;br /&gt;# which problems they solve, and to&lt;br /&gt;# how you can put them together to solve problems they cannot do alone.&lt;br /&gt;# the power of [[regular expressions]]&lt;br /&gt;--s--&lt;br /&gt;!! Plumbing with pipes&lt;br /&gt;Because [[Unix commands]] all can be fitted together in long sequences it is becomes easy to break complex tasks into sub-problems you know how to solve. &lt;br /&gt;Perhaps you then find one step you cannot solve, then you can revisit the key tables here to get clues about how to tackle the problem.&lt;br /&gt;--s--&lt;br /&gt;!! Examples &lt;br /&gt;I plan to take some examples, all starting from simple everyday questions, &lt;br /&gt;* mainly to do with validating your work, and by &lt;br /&gt;* building them up piece by piece illustrate&lt;br /&gt;* how you can quickly learn to make fast one-line programs that will really help your everyday work. &lt;br /&gt;--s--&lt;br /&gt;!! In short...&lt;br /&gt;* Quick solutions where writing a SAS program is not worthwhile.&lt;br /&gt;* Any examples we don't cover here are available from the [[website|http://daveg.tiddlyspot.com/#Gnit your own]] for this talk and in the paper. The web site is hyperlinked and is recommended for browsing and copy&amp;paste to a terminal session for experimenting.&lt;br /&gt;--s--&lt;br /&gt;! WHAT ARE UNIX TEXT TOOLS?&lt;br /&gt;* a group of commands (i.e programs provided with the system) concentrated on reading, writing and selecting text.&lt;br /&gt;* they are found on pretty well all systems&lt;br /&gt;* although they fit together well, they are not totally integrated, but &lt;br /&gt;* they are fast and easy to use after you have some familiarity&lt;br /&gt;--s--&lt;br /&gt;! WHAT OPERATIONS DO THEY DO?&lt;br /&gt;* They do what you can do with SAS, //selecting// ''variables'' and or ''observations''&lt;br /&gt;* and some tools &lt;br /&gt;** can transform (edit) the values&lt;br /&gt;** and calculate totals and other simple statistics &lt;br /&gt;* and reformat the output&lt;br /&gt;* and even do sorting and merging&lt;br /&gt;--s--&lt;br /&gt;! Classifying the operations Unix Text commands do&lt;br /&gt;!! Commands that work on the whole file:&lt;br /&gt;|Change content, by character|send content to pipe or commands|rearrange rows|h&lt;br /&gt;| [[tr]], [[iconv]], [[wc]], [[expand]], [[unexpand]] | [[print]], [[echo]], [[cat]], [[tee]], $(&lt;//file//) | [[sort]], [[fold]], [[paste]], [[split]], [[csplit]] |&lt;br /&gt;--s--&lt;br /&gt;! Classifying the operations Unix Text commands do&lt;br /&gt;!! Commands that can //only// select observations&lt;br /&gt;|by observation number|by content of whole line| by [[RE]]|by content of key fields|h&lt;br /&gt;| [[head]], [[tail]], [[split]] | [[comm]], [[uniq]], [[sort]] -u | [[grep]], [[csplit]] | [[join]], [[comm]], [[sort]] -m |&lt;br /&gt;--s--&lt;br /&gt;! Classifying the operations Unix Text commands do&lt;br /&gt;!! Commands selecting only columns&lt;br /&gt;|keep by column number|drop by column number|keep by field|h&lt;br /&gt;| [[cut]], [[col]] | [[colrm]] | [[cut]] |&lt;br /&gt;--s--&lt;br /&gt;! Commands able to select columns or observations&lt;br /&gt;# Pipes constructed using previous commands&lt;br /&gt;# Commands that are also scripting languages:&lt;br /&gt;** [[awk]]&lt;br /&gt;** [[sed]]&lt;br /&gt;** [[perl]]&lt;br /&gt;** [[ruby]]&lt;br /&gt;--s--&lt;br /&gt;! Classifying the operations Unix Text commands do&lt;br /&gt;!! for detailed table see [[Capabilities of Unix Text commands]] or [[UnixTextTools table]]&lt;br /&gt;&gt; &lt;&lt;slider chkUnixcmnds &quot;Capabilities of Unix Text commands&quot; &quot;Reveal: Capabilities of Unix Text commands&quot;&gt;&gt;&lt;br /&gt;+++^30em^[UnixTextTools table]&lt;&lt;moveablePanel&gt;&gt;&lt;br /&gt;&lt;&lt;tiddler [[UnixTextTools table]]&gt;&gt;&lt;br /&gt;===&lt;br /&gt;!! Note on terms&lt;br /&gt;* observations is approx = to rows &lt;br /&gt;* but columns are not = to variables, &lt;br /&gt;!! Unix text commands:&lt;br /&gt;In &lt;&lt;wikipedia List_of_Unix_programs&gt;&gt; check the section on text commands. &lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! HOW DO THEY FIT TOGETHER?&lt;br /&gt;//Piper at the gates of dawn…//&lt;br /&gt;&gt; [[The pipe of piece]]&lt;br /&gt;+++^30em^[The pipe of piece] &lt;&lt;moveablePanel&gt;&gt;&lt;br /&gt;&gt; &lt;&lt;tiddler [[The pipe of piece]]&gt;&gt;&lt;br /&gt;===&lt;br /&gt;&gt; &lt;br /&gt;--s--&lt;br /&gt;! REGULAR EXPRESSIONS – WILD WILD CARDS &lt;br /&gt;Build up piece by piece testing as you go...&lt;br /&gt;&lt;br /&gt;+++^30em^[Getting started with Regular Expressions] &lt;&lt;moveablePanel&gt;&gt;&lt;br /&gt;&gt; &lt;&lt;tiddler [[Getting started with Regular Expressions]]&gt;&gt;&lt;br /&gt;===&lt;br /&gt;--s--&lt;br /&gt;! COMMONEST UNIX COMMANDS&lt;br /&gt;&gt; &lt;&lt;slider chkcomunicomm &quot;My Commonest Unix Commands&quot; &quot;Reveal: My Commonest Unix Commands&quot;&gt;&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! HOW DO PATTERNS OF USE OF UNIX TEXT TOOLS COMPARE TO SAS PROGRAMS?&lt;br /&gt;!! Actually they are very similar!&lt;br /&gt;** read data with set; add variable, drop variables, derive variables&lt;br /&gt;** reformat data and print //nicely//&lt;br /&gt;** sort data&lt;br /&gt;** select unique observations&lt;br /&gt;** count observations according to their content to make simple tables&lt;br /&gt;** Join up datasets with merge&lt;br /&gt;** Fit nonlinear models &lt;br /&gt;* ...well it must be said the last is out of scope, but the others are not.&lt;br /&gt;* although joining files is easier in SAS but &lt;br /&gt;** for some small problems the text tools will see you through&lt;br /&gt;** see example : of log checking&lt;br /&gt;--s--&lt;br /&gt;! HOW DO PATTERNS OF USE OF UNIX TEXT TOOLS COMPARE TO SAS PROGRAMS?&lt;br /&gt;!! What is different from SAS about this way?&lt;br /&gt;* + very fast and light to write and run&lt;br /&gt;* + easy to test and develop (no compiling)&lt;br /&gt;** (run, look at result, &lt;up arrow&gt;, edit line, &lt;return&gt;,...)&lt;br /&gt;* + easy to read &lt;br /&gt;* + easy to adapt&lt;br /&gt;* - Not so readable when more than a few lines&lt;br /&gt;* + program small enough to be self documenting&lt;br /&gt;* + fast enough to run on significant amounts of data&lt;br /&gt;--s--&lt;br /&gt;! What is the Same?&lt;br /&gt;* just like a complicated data manipulation in SAS&lt;br /&gt;* you build it bit by bit by &lt;br /&gt;## checking the output (dataset) as you go&lt;br /&gt;## analysing what (observations, or variables) you still need to remove&lt;br /&gt;## this is where the creativity of Gnitting lies, knowing (or guessing) where to start and &lt;br /&gt;## when to stop cutting...&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! EXAMPLE PROBLEMS - ILLUSTRATING THE BUILD IT BIT-BY-BIT METHOD:&lt;br /&gt;List all examples:&lt;br /&gt;&lt;&lt;tag GnitExample&gt;&gt;&lt;br /&gt; &lt;br /&gt;--s--&lt;br /&gt;! CONVERTING ONE-LINERS TO SCRIPTS&lt;br /&gt;#When?&lt;br /&gt;#How?&lt;br /&gt;--s--&lt;br /&gt;! FPW (FREQUENTLY POSED WORRIES)&lt;br /&gt;* [[Are your tips only for one kind of Unix, or one kind of shell?]]&lt;br /&gt;* [[What about Windows?]]&lt;br /&gt;* [[Won’t this take a long time, (taking up about 500KB) to run on my 200 listings?]]&lt;br /&gt;* [[It looks like Chinese, how can I ever understand that gobbledegook?]]&lt;br /&gt;--s--&lt;br /&gt;! CONCLUSION&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;I hope I have convinced you it is worth learning to use Unix text tools for helping in your daily work. &lt;br /&gt;Yes, it does take some effort: but they are light weight and once you have attained a certain level of familiarity you can use them for //ad hoc// problems that would not be worth writing a bigger SAS program for. &lt;br /&gt;And, after getting what you need ''now'' in a few minutes, after a bit of head scratching and typing, and you'll be going home tonight with a bit grin, like the day you first..., well, you get the idea ;-)&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;* Unix text tools occupy a space complimentary to your SAS skills&lt;br /&gt;* The rewards are worth the learning effort&lt;br /&gt;--s--&lt;br /&gt;! FURTHER READING&lt;br /&gt;* Unix documentation for your system&lt;br /&gt;* [[Unix Power Tools]] (OReilly) &lt;br /&gt;* A shell programming guide&lt;br /&gt;&gt; &lt;&lt;tag Gnit_readon&gt;&gt;&lt;br /&gt;</description>
<category>PhUSE</category>
<category>gnit</category>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BGnit%20your%20own%5D%5D</link>
<pubDate>Thu, 09 Nov 2006 14:33:49 GMT</pubDate>
</item>
<item>
<title>perl</title>
<description>&lt;&lt;man Perl&gt;&gt;&lt;br /&gt;&lt;br /&gt;See also this introduction to Perl [[one-liners|http://www.builderau.com.au/program/unix/print.htm?TYPE=story&amp;AT=320266188-339024638t-320000993c]]</description>
<category>Unix commands</category>
<link>http://DaveG.tiddlyspot.com/index.html#perl</link>
<pubDate>Thu, 09 Nov 2006 14:29:47 GMT</pubDate>
</item>
<item>
<title>UnixTextTools table</title>
<description>! UNIX TEXT COMMANDS:&lt;br /&gt;* This table classifies the commands that can process text (files, or pipes) by the type of operations they can do.&lt;br /&gt;* This enables you to easily find a command to do what you need. &lt;br /&gt;* The next step is to refer to the man page, or try the defaults to see if that is enough.&lt;br /&gt;* If the column marked edit is YES it means there is a way to change the values either of one field, or the whole record. In [[awk]] and [[sed]] this is done with the sub(stitute) functions.&lt;br /&gt;* Although I have included perl here it is not much used for one-liners, but is a good basis for developing general programs.&lt;br /&gt;&lt;br /&gt;!!!! Note: &lt;br /&gt;* this table is sortable - click the link on the column to re-sort on that column. (one at a time :-)&lt;br /&gt;* the column type is allocated as follows:&lt;br /&gt;0 - operates on whole file&lt;br /&gt;1 - operates on rows only&lt;br /&gt;2 - operates on columns only&lt;br /&gt;3 - operates on rows and/or columns&lt;br /&gt; &lt;br /&gt;|Program|Type|Select Rows?|Select Cols?|Default field separator|Edit?|Multiple files?|Comments|h&lt;br /&gt;|[[cut]]|2|NO|YES, by col number or field |-d&quot;\t&quot;|NO|YES||&lt;br /&gt;|[[join]]|2|NO|YES,by field content |-t&quot;\t&quot;|YES, select any non-key columns|TWO files only|Print the common lines. Files must be sorted on the fields used|&lt;br /&gt;|[[head]]|1|YES, first -n|NO|-|NO|YES|top of file or pipe|&lt;br /&gt;|[[tail]]|1|YES, last -n|NO|-|NO|NO (some versions, YES)|bottom of file or pipe, -f option keeps dynamic watch|&lt;br /&gt;|[[sort]]|1|YES|NO|-t&quot;\t&quot;|NO|YES|Sorts on entire record by default, can drop records with duplicate keys (-u) and merge files (-m)|&lt;br /&gt;|[[fold]]|0|NO|NO|col number||NO|Wraps long lines|&lt;br /&gt;|[[paste]]|2|NO|YES|-d&quot;\t&quot;|NO|YES|merges content of files in to one column by column|&lt;br /&gt;|[[wc]]|0|NO|NO|||YES|Counts characters, words and lines|&lt;br /&gt;|[[diff]]|0|NO|NO|-|NO|TWO files|prints differences between files|&lt;br /&gt;|[[comm]]|3|YES|NO whole line is matched|-|NO|TWO files|list lines in common, or in only one of the files|&lt;br /&gt;|[[col]]|2|NO|YES|||YES|processes reverse line feeds. Does not do what you think! Try [[cut]]|&lt;br /&gt;|[[colrm]]|2|NO|YES|startcol - endcol|||copy only the given columns to std output|&lt;br /&gt;|[[print]] [[echo]]|0|NO|NO||||Print the input (KSH Shells) |&lt;br /&gt;|[[sed]]|4|YES|YES|none|||editing, line selection and substitution|&lt;br /&gt;|[[spell]]|0|NO|NO|||YES|prints mis-spelled words|&lt;br /&gt;|[[awk]]|4|YES|YES|-F&quot; &quot;|YES|YES|print matching records; select fields as $1,$2..., programmable|&lt;br /&gt;|[[perl]]|4|YES|YES|||YES|Power string and data processing tool. OO programming|&lt;br /&gt;|[[fmt]]|0|NO|NO|-|NO|YES|fill lines to the same length|&lt;br /&gt;|[[look]]|3|YES|NO|-|NO|YES|Returns lines where start of line matches the sring given. File must be sorted|&lt;br /&gt;|[[locate]]|3|YES|NO|-|NO|Finds file names|&lt;br /&gt;|[[diff]]|0|NO|NO|-|NO|TWO|locates differences in the files|&lt;br /&gt;| The separator is given with the option used to set it. \t means tab. Many awk versions allow a regular expression to be the separator. The separator can also be a non-printable character (e.g. \015, or ^L, page feed)|c&lt;br /&gt;----</description>
<category>ref</category>
<category>Unix commands</category>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BUnixTextTools%20table%5D%5D</link>
<pubDate>Thu, 09 Nov 2006 11:56:40 GMT</pubDate>
</item>
<item>
<title>Colophon</title>
<description>This Tiddlywiki was built at tiddlyspot using the MPTW version.&lt;br /&gt;&lt;br /&gt;The Extensions used are listed in the Extensions control Centre:&lt;br /&gt;&lt;&lt;tiddler ExtensionsControlCentre&gt;&gt;&lt;br /&gt;&lt;br /&gt;* There are some stylesheet changes&lt;br /&gt;** the main font is Trebuchet Ms&lt;br /&gt;** long names in the side bar tabs are indented after the first line&lt;br /&gt;** the sidebar tab is wider by default (20 vs 16em)&lt;br /&gt;* the hove menu and related plugins allow easy navigation and also switching of focus by hiding the title bar and sidebars&lt;br /&gt;* main extra is the plugin for running a slide show&lt;br /&gt;* the tiddlerExcerpt is used to give the first line of a tiddler as tooltip rather than the default time &amp; author info.&lt;br /&gt;* the timeline is removed from tabs menu&lt;br /&gt;* the author &amp; time info is taken out of ViewTemplate because it is not needed&lt;br /&gt;* the sortable table plugin is used for the [[UnixtextTools table]]. this means it is easy to focus on alphabetical reference //or// processing type as wished.&lt;br /&gt;* QUOTD plugin is used to display a tip from [[BrianEno]]'s ObliqueStrategies. Often more cryptic than Unix :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
<category>about</category>
<link>http://DaveG.tiddlyspot.com/index.html#Colophon</link>
<pubDate>Wed, 08 Nov 2006 14:28:00 GMT</pubDate>
</item>
<item>
<title>Why Safety Reporting IS like Rocket Science</title>
<description>&lt;&lt;slideShow&gt;&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Why Safety Reporting IS like Rocket Science&lt;br /&gt;[[Dave Garbutt|DaveG]]&lt;br /&gt;&lt;br /&gt;[[AD13|http://www.lexjansen.com/phuse/2006/ad/ad13.pdf]]  @ PhUSE 2006, Dublin&lt;br /&gt;--s--&lt;br /&gt;! Introduction&lt;br /&gt;*I am going to explore ways in which safety reporting (SR) &lt;br /&gt;IS&lt;br /&gt;Like, &lt;br /&gt;Rocket Science&lt;br /&gt;*Along the way we will meet the SEL,&lt;br /&gt;*Learn what 30 years research on software development has taught &lt;br /&gt;*Make comparisons to SR&lt;br /&gt;*And think about where we go next…&lt;br /&gt;--s--&lt;br /&gt;! Normal Software development&lt;br /&gt;1. Requirements&lt;br /&gt;2. Design&lt;br /&gt;3. Code&lt;br /&gt;4.Build&lt;br /&gt;5.Test (? Go to 3)&lt;br /&gt;6.Beta release&lt;br /&gt;7.Final Push&lt;br /&gt;8.Sales Push , Web Site&lt;br /&gt;9.Money comes in&lt;br /&gt;10.Minimal maintenance , given competition&lt;br /&gt;--s--&lt;br /&gt;! Software Development for Safety Reporting&lt;br /&gt;9.	Specs made according to 'standards', extended or modified by whim&lt;br /&gt;8.	Coding and checking by programmer&lt;br /&gt;7.	Database changes, additional tables &lt;br /&gt;6.	Modified headers, footers, subset, formatting&lt;br /&gt;5.	Dry run and test (lots of eyeballing and cross checking with specifications)&lt;br /&gt;4.	Checks of code or by re-programming by independent programmer&lt;br /&gt;3.	Data Base Lock&lt;br /&gt;2.	N days for validation and rework.&lt;br /&gt;1.Ignition - &lt;br /&gt;0.  Lift OFF&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Rocket Science? &lt;br /&gt;*YES, it is , because:&lt;br /&gt;*No software patches up in Space&lt;br /&gt;*10,9,8,7….0&lt;br /&gt;*Bang!&lt;br /&gt;*Everything has to work&lt;br /&gt;&lt;br /&gt;* see [[this|http://today.reuters.com/news/articlenews.aspx?storyID=2006-11-06T191457Z_01_N06275670_RTRUKOC_0_US-SPACE-SHUTTLE.xml]]&lt;br /&gt;for a different viewpoint. &lt;br /&gt;* this 1996 article by [[Charles fishman:|http://www.fastcompany.com/online/06/writestuff_Printer_Friendly.html]] &lt;br /&gt;--s--&lt;br /&gt;! SR What is Different?&lt;br /&gt;*Write once, use once&lt;br /&gt;*We will run our programs on one set of actual data&lt;br /&gt;*WE cannot test with exactly that set of data&lt;br /&gt;*Data Checking or Program Validation?&lt;br /&gt;*Do we Validate Programs?&lt;br /&gt;*Or Check Listings?&lt;br /&gt;*The answer is BOTH&lt;br /&gt;*This is what makes SR software development different and more like Rocket Science&lt;br /&gt;--s--&lt;br /&gt;! The Software Engineering laboratory - it was Rocket Science&lt;br /&gt;*Existed 1976 till 2001&lt;br /&gt;*Actually measured performance of many software projects&lt;br /&gt;*An amazing record of improvement of software quality&lt;br /&gt;*Compared methodologies by experimentation and by results&lt;br /&gt;*Defects per thousand lines of code &lt;br /&gt;The SEL at NASA&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;	The SEL has achieved productivity comparable to the average MIS or IT system, at the same time achieving quality levels that are at least 10 to 20 times better.&lt;br /&gt;To put it a little differently, the average MIS shop would need about 14 calendar months and 110 staff-months to deliver a 100,000 line-of-code MIS system, and it would typically contain about 850 defects when delivered. &lt;br /&gt;The NASA SEL would deliver a system of that size with about the same amount of time and effort, but it would contain only about 50 defects. &lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;&lt;br /&gt;Source: [[http://www.stevemcconnell.com/sgcrib.htm]]&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! What has / is SE telling us?&lt;br /&gt;*Software Engineering has been a discipline for over 30 years&lt;br /&gt;*Methodology matters&lt;br /&gt;*Select correct methodology for situation&lt;br /&gt;*Plan, Architect, Test&lt;br /&gt;*Test: &lt;br /&gt;*Units&lt;br /&gt;*Integration&lt;br /&gt;*Regression &lt;br /&gt;*Review code&lt;br /&gt;*Failure rates do not sum together&lt;br /&gt;--s--&lt;br /&gt;! SEL's Top Ten ways to reduce defects&lt;br /&gt;1.Finding and fixing a software problem after delivery is often 100 times more expensive than finding and fixing it during the requirements and design phase.&lt;br /&gt;2.About 40-50% of the effort on current software projects is spent on avoidable rework.&lt;br /&gt;3.About 80% of the avoidable rework comes from 20% of the defects.&lt;br /&gt;4.About 80% of the defects come from 20% of the modules and about half the modules are defect free.&lt;br /&gt;5.About 90% of the downtime comes from at most 10% of the defects.&lt;br /&gt;6.Peer reviews catch 60% of the defects.&lt;br /&gt;7.Perspective-based reviews catch 35% more defects than non-directed reviews.&lt;br /&gt;8.Disciplined personal practices can reduce defect introduction rates by up to 75%.&lt;br /&gt;9.All other things being equal, it costs 50% more per source instruction to develop high-dependability software products than to develop low-dependability software products. &lt;br /&gt;However, the investment is more than worth it if significant operations and maintenance costs are involved.&lt;br /&gt;10.About 40-50% of user programs enter use with nontrivial defects.&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Waterfall If	&lt;br /&gt;*- The requirements are knowable in advance,&lt;br /&gt;*- The requirements have no unresolved, high-risk implications,&lt;br /&gt;*- The requirements satisfy all the key stakeholders' expectations,&lt;br /&gt;*- A viable architecture for implementing the requirements is known,&lt;br /&gt;*- The requirements will be stable during development,&lt;br /&gt;*- There is enough calendar time to proceed sequentially. (USC)&lt;br /&gt;--s--&lt;br /&gt;! Incremental If-&lt;br /&gt;*- The initial release is good enough to keep the key stakeholders involved,&lt;br /&gt;*- The architecture is scalable to accommodate needed system growth,&lt;br /&gt;*- The operational user organizations can adapt to the pace of evolution,&lt;br /&gt;*- The evolution dimensions are compatible with legacy system replacement,&lt;br /&gt;*- appropriate management, financial, and incentive structures are in place. (USC)&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Measurement and process improvement -SEL Don'ts&lt;br /&gt;*Don't let team members work in an unsystematic way.&lt;br /&gt;*Don't set unreasonable goals.&lt;br /&gt;*Don't implement changes without assessing their impacts and obtaining approval of the change board&lt;br /&gt;*Don't assume that a schedule slip in the middle of a phase will be made up later.&lt;br /&gt;*Don't assume that a large amount of documentation ensures success.&lt;br /&gt;*Don't overstaff, especially early in the project.&lt;br /&gt;*Don't &quot;gold-plate.&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Measurement and process improvement -SEL Do's&lt;br /&gt;*Create and follow a Software Development Plan. &lt;br /&gt;*Empower project personnel.&lt;br /&gt;*Minimize the bureaucracy.&lt;br /&gt;*Define the requirements baseline and manage changes to it.&lt;br /&gt;*Take periodic snapshots of project health and progress,&lt;br /&gt;*RE-plan, Re-estimate system size, effort, and schedules periodically&lt;br /&gt;*Define and manage phase transitions.&lt;br /&gt;*Start the project with a small senior staff.&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Recent trends in methodology&lt;br /&gt;* The limitations of waterfall development have been widely recognized and&lt;br /&gt;* Agile development has been born&lt;br /&gt;* Xtreme programming, pair programming&lt;br /&gt;* Test-driven Development&lt;br /&gt;--s--&lt;br /&gt;! Waterfallen - gather, design, do&lt;br /&gt;*'Our process begins with requirements' says IT&lt;br /&gt;*Expecting the user to know their development guidelines and bring a neat set of points and features.&lt;br /&gt;*Which, with luck exactly fits the latest whizzpopper technology the developers all want to try…&lt;br /&gt;--s--&lt;br /&gt;! Waterfallen - blame the requirements &lt;br /&gt;*This will NEVER happen.&lt;br /&gt;*Why?&lt;br /&gt;*Imagine asking a DOS user ca. 1982 for their system requirements for the new faster PCs&lt;br /&gt;*Would they ask for Norton Commander integration or,&lt;br /&gt;*Would they sketch this?&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! The desktop….&lt;br /&gt;* screenshot of Mac version 1 desktop&lt;br /&gt;* and the grouch&lt;br /&gt;--s--&lt;br /&gt;! Software begins with NEEDS:&lt;br /&gt;*To do your job more efficiently,&lt;br /&gt;*More accurately&lt;br /&gt;*Faster&lt;br /&gt;*With less tedium&lt;br /&gt;*In a new way that enables any or all of the above&lt;br /&gt;*It is always easier to &lt;br /&gt;*Critique, Suggest based on, or Tweak &lt;br /&gt;*something than already exists&lt;br /&gt;*Than it is to create.&lt;br /&gt;*For this reason building bit by bit with feedback can get you further&lt;br /&gt;--s--&lt;br /&gt;! Methodology: test driven development&lt;br /&gt;*It is becoming more and more accepted that test should be written with the code they test&lt;br /&gt;*All trivial and other test cases should be done&lt;br /&gt;*When you are putting software on a Rocket&lt;br /&gt;*It better be tested before the button is pushed&lt;br /&gt;*And my perception is that in SR we do not operate like this…&lt;br /&gt;--s--&lt;br /&gt;! Test, TEST, and test again&lt;br /&gt;*When the data changes under the program and &lt;br /&gt;*The only data that really matters arrives at the critical moment of blast-off&lt;br /&gt;*Then if…&lt;br /&gt;*you have validated programs (peer- reviewed, tested)&lt;br /&gt;*And know they will run on standard testing data - still (to catch unexpected changes) and &lt;br /&gt;*You can run independent checks on the output&lt;br /&gt;*You will be a Rocket Scientist, my son!&lt;br /&gt;--s--&lt;br /&gt;! Test Oriented Development (I)&lt;br /&gt;*Independent suite of checks on the output text &lt;br /&gt;*- Goal - eliminate eyeballing&lt;br /&gt;*Like Nature and Nurture the quality of deliverables is jointly the data and the transforms&lt;br /&gt;*Goal - less in-fighting&lt;br /&gt;*Tools to make individual tailored checking easier &lt;br /&gt;*Goal - exploit people's brilliance&lt;br /&gt;*Share code - share tests&lt;br /&gt;*Goal- re-use of pre validated work&lt;br /&gt;--s--&lt;br /&gt;! TOD (II)&lt;br /&gt;*Measure error and issue rates as well as deadlines &lt;br /&gt;*Goal - reward accuracy and speed&lt;br /&gt;*Use process control plots for error rates&lt;br /&gt;*And for assessing data issues, and programming quality&lt;br /&gt;*Goal:  give statisticians an active QC role&lt;br /&gt;*Publish the rates on the intranet&lt;br /&gt;*Reward people that find errors! Do not solely praise staff that deliver on time.&lt;br /&gt;*Always plot your data. Develop QC plots. Run as data arrives.&lt;br /&gt;--s--&lt;br /&gt;! TOD ( III )&lt;br /&gt;*Make comparisons vs previous versions a routine&lt;br /&gt;*Goal-&gt; timing of when errors appear is vital for diagnosis&lt;br /&gt;*If outputs have too much date &amp; time identifiers produce also versions without or build filters&lt;br /&gt;*Use metadata created from the listings to automate checks of patient counts&lt;br /&gt;--s--&lt;br /&gt;! IN SHORT:&lt;br /&gt;*Integrate testing and quality control into the production process&lt;br /&gt;--s--&lt;br /&gt;! Conclusions&lt;br /&gt;*We need a conversation in the industry about how to move quality forward in SR&lt;br /&gt;*Comparing ourselves to Rocket Scientists makes more sense than comparing ourselves to Microsoft&lt;br /&gt;*Goal-&gt; feel good about our craft&lt;br /&gt;*The combination of our unique needs:&lt;br /&gt;*Data plus program is the delivery unit&lt;br /&gt;*No beta phase allowed, no tests after ignition&lt;br /&gt;*Immense pressure to shorten ignition to lift-off and orbit times &lt;br /&gt;*Means we need a different methodology &amp; testing strategy from the rest of the software industry&lt;br /&gt;*TOD or death!&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Questions?&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;It is not because things are difficult that we do not dare,&lt;br /&gt;it is because we do not dare that they are difficult.&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt; --Seneca&lt;br /&gt;--s--&lt;br /&gt;! Further Reading:&lt;br /&gt;* this 1996 article by [[Charles fishman:|http://www.fastcompany.com/online/06/writestuff_Printer_Friendly.html]] &lt;br /&gt;* and [[this|http://today.reuters.com/news/articlenews.aspx?storyID=2006-11-06T191457Z_01_N06275670_RTRUKOC_0_US-SPACE-SHUTTLE.xml]]&lt;br /&gt;for a different viewpoint and a slight oversight. &lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;! Contact Me&lt;br /&gt;* I would value your comments and questions on this paper.  &lt;br /&gt;* Please contact me via: DaveG&lt;br /&gt;* A pdf version of this paper is available at [[Lex Jansen's web site|http://www.lexjansen.com/phuse/2006/ad/ad13.pdf]]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BWhy%20Safety%20Reporting%20IS%20like%20Rocket%20Science%5D%5D</link>
<pubDate>Wed, 08 Nov 2006 00:14:00 GMT</pubDate>
</item>
<item>
<title>SideBarOptions</title>
<description>&lt;&lt;search&gt;&gt;&lt;&lt;closeAll&gt;&gt;&lt;&lt;permaview&gt;&gt;&lt;&lt;newTiddler&gt;&gt;&lt;&lt;newJournal 'DD MMM YYYY'&gt;&gt;&lt;&lt;saveChanges&gt;&gt;&lt;&lt;upload http://DaveG.tiddlyspot.com/store.cgi index.html . .  daveg&gt;&gt;&lt;&lt;slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'&gt;&gt;&lt;br /&gt;&lt;html&gt;&lt;br /&gt;&lt;!--Creative Commons License--&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.5/&quot;&gt;&lt;img alt=&quot;Creative Commons License&quot; border=&quot;0&quot; src=&quot;http://creativecommons.org/images/public/somerights20.png&quot;/&gt;&lt;/a&gt;&lt;br/&gt; &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.5/&quot;&gt;Creative Commons &lt;/a&gt;.&lt;!--/Creative Commons License--&gt;&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;&lt;br /&gt;		&lt;Work rdf:about=&quot;&quot;&gt;&lt;br /&gt;			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.5/&quot; /&gt;&lt;br /&gt;	&lt;dc:type rdf:resource=&quot;http://purl.org/dc/dcmitype/Text&quot; /&gt;&lt;br /&gt;		&lt;/Work&gt;&lt;br /&gt;		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/2.5/&quot;&gt;&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;br /&gt;&lt;/html&gt;</description>
<link>http://DaveG.tiddlyspot.com/index.html#SideBarOptions</link>
<pubDate>Tue, 07 Nov 2006 10:50:00 GMT</pubDate>
</item>
<item>
<title>CheckSASLogs - Original Many Greps Approach</title>
<description>{{{&lt;br /&gt;grep ^ERROR:             *.log  | grep -v &quot;limit set by errors&quot; | grep -v &quot;errors printed on pages&quot;  &gt;|  _check.error.txt&lt;br /&gt;grep ^STLERROR:          *.log                                                                       &gt;|  _check.stlerror.txt&lt;br /&gt;grep ^WARNING:           *.log  | grep -v compression                                                &gt;|  _check.warning.txt&lt;br /&gt;grep ^NOTE:              *.log  |  grep uninit                                                       &gt;|  _check.uninit.txt&lt;br /&gt;grep ^NOTE:              *.log  |  grep invalid                                                      &gt;|  _check.invalid.txt&lt;br /&gt;grep ^NOTE:              *.log  |  grep repeat                                                       &gt;|  _check.repeat.txt&lt;br /&gt;grep ^DEVELOPER_WARNING: *.log                                                                       &gt;|  _check.developer_warning.txt&lt;br /&gt;}}}&lt;br /&gt;&lt;br /&gt;Original from StevePike&lt;br /&gt;&lt;br /&gt;See also [[chklogs]] which has a summary printing code added, and faster searching by using [[regular expressions]] to replace the pipelines and many checks shown here.</description>
<category>regular expressions</category>
<category>grep</category>
<category>validation</category>
<category>log</category>
<category>Example scripts</category>
<category>check</category>
<category>SASLogs</category>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BCheckSASLogs%20-%20Original%20Many%20Greps%20Approach%5D%5D</link>
<pubDate>Mon, 06 Nov 2006 18:02:00 GMT</pubDate>
</item>
<item>
<title>TiddlyWiki - the software I wish I had written</title>
<description>&lt;&lt;slideShow&gt;&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!TiddlyWiki and MicroContent&lt;br /&gt;Dave Garbutt&lt;br /&gt;&lt;br /&gt;[[PD02|http://www.lexjansen.com/phuse/2006/pd/pd02.pdf]]  @ PhUSE 2006, Dublin&lt;br /&gt;--s--&lt;br /&gt;!Introduction&lt;br /&gt;*Follow this application up!&lt;br /&gt;*What is a TiddlyWiki?&lt;br /&gt;*What can I do with it?&lt;br /&gt;*Why is it important?&lt;br /&gt;*Find out more!&lt;br /&gt;*The WIKIWikiWeb editable web sites&lt;br /&gt;*A new niche in the paperless office is filled&lt;br /&gt;--s--&lt;br /&gt;!MicroContent?&lt;br /&gt;*A TiddlyWiki keeps 'pages' and visible until you exit or close one. Each 'page' can be opened independently. This piece of genius - to change what seems 'normal' and 'the obvious way to do things'&lt;br /&gt;*A document that is a single page application&lt;br /&gt;*Free the paragraph from the prison of context&lt;br /&gt;*The unit is the called a tiddler&lt;br /&gt;--s--&lt;br /&gt;!Problems with MacroContent&lt;br /&gt;*Documents gets their structure from the closeness of paragraphs&lt;br /&gt;*Therefore we have to have a reader in mind - an audience&lt;br /&gt;&gt;&gt; It is an axiom well regarded that a document possessed of an author must be in search of a reader…&lt;br /&gt;*But MicroContent can break this mould forever&lt;br /&gt;*By allowing a combination of many audiences (and shared material) in one document&lt;br /&gt;*Without dazzling the beginner or boring the expert&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Personal, nonlinear.extensible, web notebook&lt;br /&gt;*Personal&lt;br /&gt;*A single  file&lt;br /&gt;*No server needed&lt;br /&gt;*Free, open source&lt;br /&gt;*Web Notebook&lt;br /&gt;*A TiddlyWiki is a single HTML file containing about 300k of JavaScript&lt;br /&gt;*which manages the display and addition of tiddlers&lt;br /&gt;--s--&lt;br /&gt;!Non-linear&lt;br /&gt;*there is no fixed order to the tiddlers&lt;br /&gt;*You determine the order and&lt;br /&gt;*What is visible&lt;br /&gt;*Individualized document&lt;br /&gt;*Structured with&lt;br /&gt;*Links&lt;br /&gt;*Tags&lt;br /&gt;*Lists and summary tables or tabs of tiddlers&lt;br /&gt;*Grouping tiddlers for opening as a unit&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Extensible and customisable&lt;br /&gt;*CSS dynamic styling&lt;br /&gt;*Plugin architecture e.g. In-line JavaScript:&lt;br /&gt;{{{&lt;br /&gt;config.macros.man = {};&lt;br /&gt;config.macros.man.handler= function(place,macroName,params) {&lt;br /&gt;   var key=params[0];&lt;br /&gt;   wikify(&quot;[[&quot;+key+&quot;|http://unixhelp.ed.ac.uk/CGI/man-cgi?&quot;+key+&quot;]]&quot;,place)&lt;br /&gt;}&lt;br /&gt;}}}&lt;br /&gt;1.Copy  it in a new tiddler,&lt;br /&gt;2.tag the tiddler systemConfig,&lt;br /&gt;3.save the TiddlyWiki,&lt;br /&gt;4.reload into the browser.&lt;br /&gt;5.Add this to your tiddler about the awk command: &lt;&lt;man awk&gt;&gt;&lt;br /&gt;--s--&lt;br /&gt;!Using TiddlyWiki&lt;br /&gt;*Adding information&lt;br /&gt;*Formatting&lt;br /&gt;*Tables, block quotes, preformatted, headers&lt;br /&gt;--s--&lt;br /&gt;!Structuring your information&lt;br /&gt;*Linking, auto linking&lt;br /&gt;*AutoLink WikiWords,&lt;br /&gt;*Tagging&lt;br /&gt;*Add keywords or phrases to label tiddlers&lt;br /&gt;*Tagging can create structure content 'free'.&lt;br /&gt;&gt;For example consider tiddlers with Unix programming tips. &lt;br /&gt;&gt;&gt; Tag each tip as you create it with the Unix commands used in it.&lt;br /&gt;&gt;&gt; Then you can look at the autogenerated awk tiddler and see everywhere it is tagging, &lt;br /&gt;&gt;&gt;&gt; ie all the pages you thought were relevant to awk.&lt;br /&gt;&gt;&gt; This can include tiddlers where awk is not mentioned in the text&lt;br /&gt;--s--&lt;br /&gt;!Structuring your Document&lt;br /&gt;* Aggregating tiddlers&lt;br /&gt;* Disaggregating&lt;br /&gt;* Sequences&lt;br /&gt;* Adding tags&lt;br /&gt;* Authoring tools&lt;br /&gt;--s--&lt;br /&gt;!Sharing your TiddlyWiki&lt;br /&gt;* Put on a web server&lt;br /&gt;* A disk share&lt;br /&gt;* A USB stick&lt;br /&gt;* Use a server version&lt;br /&gt;* Get a hosted TiddlyWiki&lt;br /&gt;* Automatic sharing and updating is planned : to compete with portals costing millions&lt;br /&gt;--s--&lt;br /&gt;!Uses&lt;br /&gt;* Journal, Diary and Day planner&lt;br /&gt;* Technical notes&lt;br /&gt;* Presentations&lt;br /&gt;* Generating validation reports&lt;br /&gt;* Construct from custom text files&lt;br /&gt;* Delivering Documentation&lt;br /&gt;--s--&lt;br /&gt;!Creating a Validation document&lt;br /&gt;{{{&lt;br /&gt;find $PWD -type f  -print | sort |&lt;br /&gt;    awk -v pwd=$PWD -v date=&quot;`date `&quot; '&lt;br /&gt;    {if (NR == 1 ) print &quot;|No.|File | OK? | Notes and comments | re-done OK? |h\n|&gt;|&gt;|All files in:|&quot; pwd&quot;|&quot;date&quot;|&quot; }&lt;br /&gt;     {sub(pwd,&quot;.&quot;,$1); print &quot;| &quot;NR&quot;|&quot;$1&quot; | | | |&quot;}'&lt;br /&gt;}}}&lt;br /&gt;*prints plain text on the terminal like this:&lt;br /&gt;{{{&lt;br /&gt;|No.|File | OK? | Notes and comments | re-done OK? |h&lt;br /&gt;|&gt;|&gt;|/vob/CMyPROJ/CMyPROJ0103/report|&gt;|Thu Apr  6 17:14:11 DFT 2006|&lt;br /&gt;| 1|./pgm_a/autoexec.sas | | | |&lt;br /&gt;| 2|./pgm_a/pops.sas | | | |&lt;br /&gt;| 3|./pgm_a/subpops.sas | | | |&lt;br /&gt;| 4|./pgm_a/ds_aevs.sas | | | |&lt;br /&gt;|&gt;|&gt;|&gt;| and so on...|&lt;br /&gt;| 21|./pgm_a/mk_trtm.sas | | | |&lt;br /&gt;}}}&lt;br /&gt;--s--&lt;br /&gt;!Validation form…&lt;br /&gt;*Giving a rendered table like this:&lt;br /&gt;|No.|File | OK? | Notes and comments | re-done OK? |h&lt;br /&gt;|&gt;|&gt;|/vob/CMyPROJ/CMyPROJ0103/report|&gt;|Thu Apr  6 17:14:11 DFT 2006|&lt;br /&gt;| 1|./pgm_a/autoexec.sas | | | |&lt;br /&gt;| 2|./pgm_a/pops.sas | | | |&lt;br /&gt;| 3|./pgm_a/subpops.sas | | | |&lt;br /&gt;| 4|./pgm_a/ds_aevs.sas | | | |&lt;br /&gt;|&gt;|&gt;|&gt;|&gt;| and so on...|&lt;br /&gt;| 21|./pgm_a/mk_trtm.sas | | | |&lt;br /&gt;--s--&lt;br /&gt;!Demonstration&lt;br /&gt;*Demo&lt;br /&gt;*Look and feel&lt;br /&gt;*Navigating around&lt;br /&gt;*Adding text&lt;br /&gt;*Tagging&lt;br /&gt;*Journals&lt;br /&gt;*Dcubed&lt;br /&gt;*My tiddlyspot&lt;br /&gt;--s--&lt;br /&gt;!Frequently Posed Worries&lt;br /&gt;*Scalability&lt;br /&gt;*Above 2MB response slows down&lt;br /&gt;*Privacy&lt;br /&gt;*Not private&lt;br /&gt;*Encryption available (but big plugin)&lt;br /&gt;*Safety of typing investment&lt;br /&gt;*OK&lt;br /&gt;*Conversion to WORD&lt;br /&gt;*Not much fun&lt;br /&gt;*Till someone writes a WORD macro that converts Wiki text to styles / markup&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Conclusions&lt;br /&gt;*For many of the examples I have given it is currently the best solution.&lt;br /&gt;*Try it yourself:&lt;br /&gt;*http://mptw.tiddlyspot.com&lt;br /&gt;*Gnit your own:&lt;br /&gt;* http://www.tiddlyspot.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--s--&lt;br /&gt;!Acknowledgements and thanks&lt;br /&gt;*Jeremy Ruston for creating it&lt;br /&gt;*and building a great community of developers&lt;br /&gt;--s--&lt;br /&gt;!Further Reading&lt;br /&gt;*See the TiddlyWiki web site http://www.tiddlywiki.com&lt;br /&gt;*The google groups&lt;br /&gt;*The public tutorials&lt;br /&gt;*The plug-in repositories&lt;br /&gt;*All linked from the main site&lt;br /&gt;! My [[PhUSE|http://www.lexjansen.com/phuse/2006/pd/pd02.pdf]] 2006 Presentations at Lex Jansen's website&lt;br /&gt;--s--&lt;br /&gt;!Questions?&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;It is not because things are difficult that we do not dare,&lt;br /&gt;it is because we do not dare that they are difficult.&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;&gt;--Seneca&lt;br /&gt;--s--&lt;br /&gt;!Contact Information&lt;br /&gt;* I would value your comments and questions on this paper.  &lt;br /&gt;Contact details [[here|DaveG]]&lt;br /&gt;&lt;br /&gt;</description>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BTiddlyWiki%20-%20the%20software%20I%20wish%20I%20had%20written%5D%5D</link>
<pubDate>Mon, 06 Nov 2006 14:42:00 GMT</pubDate>
</item>
<item>
<title>WordCountMacro</title>
<description>/***&lt;br /&gt;(Almost) as posted by BradleyMeck on the mailing list, 21-Oct-2006. To use put this somewhere in your ViewTemplate:&lt;br /&gt;{{{&lt;div style=&quot;font-size:150%&quot;&gt;(&lt;span macro=&quot;wordCount&quot;&gt;&lt;/span&gt; words)&lt;/div&gt;}}}&lt;br /&gt;***/&lt;br /&gt;//{{{&lt;br /&gt;merge(config.macros,{&lt;br /&gt;	wordCount: {&lt;br /&gt;		handler: function(place,macroName,params,wikifier,paramString,tiddler) {&lt;br /&gt;			createTiddlyText(place,tiddler&amp;&amp;tiddler.text?tiddler.text.match(/\w+/g).length:&quot;0&quot;);&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;});&lt;br /&gt;//}}}&lt;br /&gt;</description>
<category>systemConfig</category>
<link>http://DaveG.tiddlyspot.com/index.html#WordCountMacro</link>
<pubDate>Thu, 02 Nov 2006 09:55:00 GMT</pubDate>
</item>
<item>
<title>CheckSpaceOnSASTmp</title>
<description>!!! print space on sastmp as GB total &amp; GB free&lt;br /&gt;* For rows with a /dev. at start convert the 3rd &amp; 4th field by dividing by 1024^^2^^&lt;br /&gt;{{{&lt;br /&gt;gbl df -k /proj/sastmp | awk '{ if ( $1 ~ /\// )  { print $1&quot;\t&quot; $2 / 1024 /1024 , &quot;\t&quot;$3 /1024 / 1024 ,&quot;\t&quot; $4 &quot;   &quot; $5  &quot;    &quot;$6, $7} else print }'&lt;br /&gt;&lt;br /&gt; gbl running on the all my hosts : h1 h2 h3 h4 h5&lt;br /&gt;&lt;br /&gt;Executing command on h1 -----------------------------------------------------------------------&lt;br /&gt;Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on&lt;br /&gt;/dev/lv_sastmp  12.75   7.92882         38%   5344    1% /proj/sastmp&lt;br /&gt;&lt;br /&gt;Executing command on h2 -----------------------------------------------------------------------&lt;br /&gt;Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on&lt;br /&gt;/dev/lv_sastmp  64      59.67   7%   12915    1% /proj/sastmp&lt;br /&gt;&lt;br /&gt;Executing command on h3 -----------------------------------------------------------------------&lt;br /&gt;Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on&lt;br /&gt;/dev/lv05       65      59.9316         8%   27023    1% /proj/sastmp&lt;br /&gt;&lt;br /&gt;Executing command on h4 -----------------------------------------------------------------------&lt;br /&gt;Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on&lt;br /&gt;/dev/lv_proj    4       1.96415         51%   6497    2% /proj&lt;br /&gt;&lt;br /&gt;Executing command on h5 -----------------------------------------------------------------------&lt;br /&gt;Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on&lt;br /&gt;/dev/lv03       15      11.8174         22%   10146    1% /proj/sastmp&lt;br /&gt;&gt;&lt;br /&gt;}}}&lt;br /&gt;&lt;br /&gt;* convert titles from 1024-k blovks&lt;br /&gt;{{{&lt;br /&gt; gbl df -k /proj/sastmp | awk '/^File/ {sub(&quot;1024-blocks&quot;,&quot;    - GB&quot;) } { if ( $1 ~ /\// &amp;&amp; !  /^File/ )  { print $1&quot;\t&quot; $2 / 1024 /1024 , &quot;\t&quot;$3 /1024 / 1024 ,&quot;\t&quot; $4 &quot;   &quot; $5  &quot;    &quot;$6, $7} e&lt;br /&gt;lse print }&lt;br /&gt;}}}</description>
<category>Example scripts</category>
<category>SAS</category>
<category>awk</category>
<category>awk_calc</category>
<category>by_row</category>
<category>df</category>
<category>GnitExample</category>
<link>http://DaveG.tiddlyspot.com/index.html#CheckSpaceOnSASTmp</link>
<pubDate>Fri, 27 Oct 2006 17:20:00 GMT</pubDate>
</item>
<item>
<title>SideBarTabs</title>
<description>&lt;&lt;tabs txtMainTab  All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore&gt;&gt;</description>
<link>http://DaveG.tiddlyspot.com/index.html#SideBarTabs</link>
<pubDate>Thu, 26 Oct 2006 09:58:00 GMT</pubDate>
</item>
<item>
<title>Are your tips only for one kind of Unix, or one kind of shell?</title>
<description>&lt;&lt;&lt;&lt;br /&gt;No. &lt;br /&gt;I have tried to use Unix commands available on all versions of Unix, and actually this is not hard to do, because the common, most-useful, commands came in to the Unix world early on and are universally available.&lt;br /&gt;&lt;br /&gt;It is not true to say that all their options are the same (or mean the same across versions).  So, if you see examples from this talk failing first check your systems man pages &lt;&lt;man man&gt;&gt;.&lt;br /&gt;An obvious place where you may see this is in commands using cut because it is dependent on output being in fixed columns and the output of {{{ls -l}}} and {{{ps}}} for example are system dependent.&lt;br /&gt;&lt;br /&gt;The few shell examples are run on [[Korn shell|http://en.wikipedia.org/wiki/Korn_shell]] which is becoming more widely available since it the source was opened by Lucent. The [[Bash shell|http://en.wikipedia.org/wiki/Bash_shell]] is widely available and is pretty compatible with Korn. Both of these shells descend from the Bourne Shell (sh), and can run Bourne shell scripts without change.&lt;br /&gt;They have significant advantages over it for programming and interactive use.&lt;br /&gt;&lt;&lt;&lt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; </description>
<category>FPW</category>
<category>gnit</category>
<category>ls</category>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BAre%20your%20tips%20only%20for%20one%20kind%20of%20Unix%2C%20or%20one%20kind%20of%20shell%3F%5D%5D</link>
<pubDate>Thu, 26 Oct 2006 09:29:00 GMT</pubDate>
</item>
<item>
<title>GettingStarted</title>
<description>* Welcome to a Tiddly wiki contianing my talks from the PhUSE conference this year.&lt;br /&gt;* For more about the ~TiddlyWiki hosting service ~TiddlySpot see [[http://www.tiddlyspot.com/]]&lt;br /&gt;* For more about ~TiddlyWiki see my talk under the PhUSE-talks2006 and accessible from the menu. And also:&lt;br /&gt;!Learn more about ~TiddlyWiki&lt;br /&gt;Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki.&lt;br /&gt;&lt;br /&gt;* the talks run as slideshows - click the slideshow button.&lt;br /&gt;&lt;br /&gt;&gt; for information on how this site is constructed, what [[TiddlyWiki|http://www.tiddlywiki.com]] plugins are used (and why) see [[Colophon]]&lt;br /&gt;&lt;br /&gt;For internal info : [[GettingStarted at TiddlySpot]]&lt;br /&gt;&lt;br /&gt;! [[Contact Me|DaveG]]&lt;br /&gt;&lt;br /&gt;</description>
<link>http://DaveG.tiddlyspot.com/index.html#GettingStarted</link>
<pubDate>Thu, 26 Oct 2006 09:11:00 GMT</pubDate>
</item>
<item>
<title>GettingStarted at TiddlySpot</title>
<description>Welcome to your brand new [[MonkeyPirateTiddlyWiki|http://simonbaird.com/mptw/]]. This is the standard empty [[TiddlyWiki|http://www.tiddlywiki.com/]] (version &lt;&lt;version&gt;&gt;) preconfigured with a few bits and pieces from MPTW, in particular the layout, the colours, and the popular [[TagglyTagging|http://simonbaird.com/mptw/#TagglyTagging]]. If you're new to ~TagglyTagging then try the (slightly out-of-date) [[FAQ|http://simonbaird.com/mptw/#TagglyTaggingFAQ]] and [[Tutorial|http://simonbaird.com/mptw/#TagglyTaggingTutorial]].&lt;br /&gt;&lt;br /&gt;To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:&lt;br /&gt;* SiteTitle &amp; SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)&lt;br /&gt;* MainMenu: The menu (usually on the left)&lt;br /&gt;* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened&lt;br /&gt;You'll also need to enter your username for signing your edits: &lt;&lt;option txtUserName&gt;&gt;&lt;br /&gt;&lt;br /&gt;To create your own tiddlers, click 'new tiddler' in the right sidebar. To edit a tiddler click the 'edit' button in the tiddler's toolbar. To save all your tiddlers click 'save changes' in the right sidebar. If you're new to TiddlyWiki check out the formatting info [[here|http://www.tiddlywiki.com/#MainFeatures]].&lt;br /&gt;See also info and PW settings in: AboutTiddlySpot&lt;br /&gt;&lt;br /&gt;Use this to import tiddlers from another TiddlyWiki. You can use a local file (click Browse...) or type the url of an online TiddlyWiki.&lt;br /&gt;&lt;&lt;importTiddlers inline&gt;&gt;&lt;br /&gt;To change your colour scheme you can edit the styles in StyleSheet. (Refer to StyleSheetColors and StyleSheetLayout for all styles used).&lt;br /&gt;&lt;br /&gt;</description>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5BGettingStarted%20at%20TiddlySpot%5D%5D</link>
<pubDate>Thu, 26 Oct 2006 08:56:00 GMT</pubDate>
</item>
<item>
<title>AboutTiddlySpot</title>
<description>!Welcome to your ''tiddlyspot.com'' ~TiddlyWiki!&lt;br /&gt;''[[tiddlyspot.com|http://tiddlyspot.com]]'' gives you an instant [[TiddlyWiki|http://tiddlywiki.com]] hosted on our ''tiddlyspot.com'' servers.&lt;br /&gt;&lt;br /&gt;Want to work online? No problem, you can go to your ''tiddlyspot.com'' URL (which is http://DaveG.tiddlyspot.com/index.html ) and start editing. Click &quot;save to web&quot; and your changes are saved directly to your ''tiddlyspot.com'' home -- no messing about with local files or ftp.&lt;br /&gt;&lt;br /&gt;Want to work offline? No problem, your ''tiddlyspot.com'' ~TiddlyWiki is a real, fully functioning ~TiddlyWiki that you can save onto your hard drive or USB stick. Use the link below to save to your local computer. As you make changes, use the &quot;save to disk&quot; button to save to your local file. Whenever you're ready to sync up again, just click &quot;save to web&quot;.&lt;br /&gt;&lt;br /&gt;!To save online&lt;br /&gt;Enter the upload password provided when you created your ~TiddlyWiki. Then click the &quot;save to web&quot; button below (or in the right side column) to save your ~TiddlyWiki.&lt;br /&gt;Upload Password: &lt;&lt;option pasUploadPassword&gt;&gt;&lt;br /&gt;&lt;&lt;upload http://DaveG.tiddlyspot.com/store.cgi index.html . . daveg&gt;&gt;&lt;br /&gt;&lt;br /&gt;!To save offline&lt;br /&gt;To take this ~TiddlyWiki offline, right click on this link: http://DaveG.tiddlyspot.com/index.html and choose &quot;save as..&quot;&lt;br /&gt;&lt;br /&gt;!Learn more about ~TiddlyWiki&lt;br /&gt;Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki.&lt;br /&gt;&lt;br /&gt;The [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]] is an excellent place to ask questions and get help.&lt;br /&gt;&lt;br /&gt;!Enjoy!&lt;br /&gt;We hope you like using your ''tiddlyspot.com'' ~TiddlyWiki. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments.&lt;br /&gt;&lt;br /&gt;----</description>
<link>http://DaveG.tiddlyspot.com/index.html#AboutTiddlySpot</link>
<pubDate>Thu, 26 Oct 2006 08:53:00 GMT</pubDate>
</item>
<item>
<title>DaveG</title>
<description>David J Garbutt&lt;br /&gt;BSI AG&lt;br /&gt;Täfernstrasse 16A&lt;br /&gt;CH - 5405  Baden-Dättwil&lt;br /&gt;Work Phone: +41 56 484 1920&lt;br /&gt;Fax: +41 56 484 1930&lt;br /&gt;Email: [[=djg|http://public.xdi.org/=djg]]&lt;br /&gt;Web: www.bsiag.com&lt;br /&gt;&lt;br /&gt;</description>
<category>contacts</category>
<link>http://DaveG.tiddlyspot.com/index.html#DaveG</link>
<pubDate>Thu, 26 Oct 2006 08:45:00 GMT</pubDate>
</item>
<item>
<title>sample table</title>
<description>|No.|File | OK? | Notes and comments | re-done OK? |h&lt;br /&gt;|&gt;|&gt;|/vob/CMyPROJ/CMyPROJ0103/report|&gt;|Thu Apr  6 17:14:11 DFT 2006|&lt;br /&gt;| 1|./pgm_a/autoexec.sas | | | |&lt;br /&gt;| 2|./pgm_a/pops.sas | | | |&lt;br /&gt;| 3|./pgm_a/subpops.sas | | | |&lt;br /&gt;| 4|./pgm_a/ds_aevs.sas | | | |&lt;br /&gt;…&lt;br /&gt;| 21|./pgm_a/mk_trtm.sas | | | |&lt;br /&gt;&lt;br /&gt;</description>
<category>gnitExample</category>
<link>http://DaveG.tiddlyspot.com/index.html#%5B%5Bsample%20table%5D%5D</link>
<pubDate>Wed, 11 Oct 2006 10:41:00 GMT</pubDate>
</item>
</channel>
</rss>