Mon, 30 Jun 2014
KISSREC.py derivitive TAPETRANSFER available on githubI was looking at some older code to make available on github and noticed kissrec has already had a forked derivative named tapetransfer available there.
It's great to see some code I wrote ages ago take on a life and get more evolved thanks to open source, even with such a basic project such as this. I quite like the additions Christof Damian has made as well. If I ever make an updated version of kissrec (perhaps not locked in to 16 bit audio for starters) I'll look at this as a starting point.
Tue, 04 Jan 2011
GREENEWHEELS ELECTRIC BICYCLEJust made a post on Minirig documenting my experiences so far with the Greenewheels electric bicycle I got a while back but have only just become well enough to ride around. Update: greenewheels stuff no longer on minirig site, moved it over to it's own greenewheels section on the mk II zog blog
Thu, 12 Jun 2008
MSY site scraperCute site that scrapes the content of the MSY web site.
Sun, 08 Jun 2008
WORLD COMMUNITY GRID.A few months ago I got an inexpensive quad core cpu. I then overclocked it to 3GHz.. not long ago it was a daydream for people to have such CPU power readily available. I was thinking a pity this will just sit here running screensavers most of the time, cant I get it crunching away at some weighty problem like helping cure cancer or something: after a quick google I can:
Mon, 11 Feb 2008
Inside the Behringer MS20 Monitor Speaker.link to a very nerdy audio article made with a digital camera and a screwdriver
Sun, 28 Oct 2007
Inside the Behringer UCA-202Well as I have mentioned before this works great with Linux, but I got bored and opened it up and took a few pix, which I have put online on Minirig.org.au as part of adding additional nerdy audio content there.
Sat, 09 Jun 2007
this modern life
Wed, 02 May 2007
http://www.google.com.au/search?q=09-f9-11-02-9d-74-e3-5b-d8-41-56-c5-63-56-88-c0Geek meme of the moment:
This hex sequence sure seems popular all of a sudden.
Thu, 29 Mar 2007
SORBS SUCKSFairly simple, but succinct. Overzealous listing, confusing procedures for getting delisted, generally a shambles.
Thu, 15 Feb 2007
WHY LINUX SUCKSWell.. actually it doesn't suck at all, I have been a fanatical linux user since 1992 and endless is the hassles I have avoided with licensing, viruses trojans and security bugs by having a microsoft free home network, but sometimes the problem with infinite freedom is a million ways to do things.. leading to inconsistency and chaos. Sometimes this is great, but if you are trying to (for example) set up sound on Linux and find there are 2 seperate sound driver subsystems, Alsa and OSS, that are talked to by several sound subsystems (jackd, esd, artsd?) which of course may or may not be used by whichever application you are trying to make a noise with... leads to intense frustration for someting which really should have Just Worked ages ago.
Anyway, some people I know, Linux fans all, have made a site called Why Linux Sucks to help express these frustrations.
Sun, 24 Dec 2006
Hassles with DVI output on an nvidia fx5500 card at 1680x1050Well I got myself the Proview 22 inch lcd monitor from MSY (I love their JUST THE FACTS basic web design style as well).
Nice basic cheap and cheerful flatscreen monitor that looks nice on the desktop. It has a litle bit of "backlight bleeding" from the top and bottom, but only visible when the screen is nearly all black, none of it is visible during my normal usage patterns of it so I don't care. The model number is FP2226w.
Main problems aoccured trying to get the FX5500 to drive the monitor via DVI.. the nvidia drivers refused to go higher than 1440x900 when I can easily go to the max mode using the VGA mode, but it looked terrible. After some reading up and trial and error, the problem appears to be the line in the Xorg.0.log saying:
135.0 MHz maximum pixel clockWhich appears to be a driver enforced limit. Adding the option "NoMaxPClkCheck" to the driver section like:
Section "Device" Identifier "nVidia Corporation NV34 [GeForce FX 5500]" Driver "nvidia" Option "ModeValidation" "NoMaxPClkCheck" Option "NvAGP" "3" EndSectionStopped this arbitrary limit being enforced for enumerating video moded and now I have the monitor running perfectly at best resolution.
One problem with the Leadtek Winfast A340 PRO T card is that it has a really crap heat sink and no fan and was overheating when playing True Combat Elite or Enemy Territory.. another visit to MSY to get a $3 80mm case fan to bolt on to the heat sink and heat problems mostly resolved, I can play at 1024x768 or 1280x800 without any heating problems kicking in.. still hangs at 1440x900 for those games, but then again the game isn't playable on an FX5500 at that resolution anyway. Other OPenGL games play fine at full resolution so it must be the Quake3 derived games that really work the card hard or something.
Thu, 07 Dec 2006
Outgoing Google PageRankhere is a natty little web toy from php drupal wizz dgtmlmoon:
Tue, 14 Nov 2006
Mitsubishi Diamond R100 with OpenWRTThough I have not actively partaken in melb wireless I have remained on their mail list for the occasional interesting nerd discussion - from there I heard of a cheap deal wireless routers capable of running OpenWRT, so I snarfed one.
Installing the Asus wl500g version of OpenWRT White Russian RC6 via tftp I was able to get this excellent little distro up an running quickly, even booting with root on a USB key.. running it in bridged client mode so I can plug PCs in down the other end of the house, but fun having a well put together old school minimal Linux distro to play with as well.
Lets see how long I last with swap running on a USB memory stick..
Here is the output of dmesg, for the curious:
CPU revision is: 00024000 Enabling BCM4710A0 cache workarounds. Primary instruction cache 8kB, physically tagged, 2-way, linesize 16 bytes. Primary data cache 4kB, 2-way, linesize 16 bytes. Linux version 2.4.30 (mbm@reboot) (gcc version 3.4.4 (OpenWrt-1.0)) #1 Mon Nov 6 17:35:21 PST 2006 Setting the PFC value as 0x15 Determined physical RAM map: memory: 01000000 @ 00000000 (usable) On node 0 totalpages: 4096 zone(0): 4096 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200 CPU: BCM4710 rev 0 at 125 MHz Using 62.400 MHz high precision timer. !unable to setup serial console! Calibrating delay loop... 82.94 BogoMIPS Memory: 14212k/16384k available (1464k kernel code, 2172k reserved, 104k data, 84k init, 0k highmem) Dentry cache hash table entries: 2048 (order: 2, 16384 bytes) Inode cache hash table entries: 1024 (order: 1, 8192 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 4096 (order: 2, 16384 bytes) Checking for 'wait' instruction... unavailable. POSIX conformance testing by UNIFIX PCI: Fixing up bus 0 PCI: Fixing up bridge PCI: Setting latency timer of device 01:00.0 to 64 PCI: Fixing up bus 1 Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd Registering mini_fo version $Id$ devfs: v1.12c (20020818) Richard Gooch (email@example.com) devfs: boot_options: 0x1 JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB. Squashfs 2.1-r2 (released 2004/12/15) (C) 2002-2004 Phillip Lougher pty: 256 Unix98 ptys configured Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled b44.c:v0.93 (Mar, 2004) PCI: Setting latency timer of device 00:02.0 to 64 eth0: Broadcom 47xx 10/100BaseT Ethernet 00:11:2f:e1:00:4a PCI: Setting latency timer of device 00:08.0 to 64 eth1: Broadcom 47xx 10/100BaseT Ethernet 00:11:2f:e1:00:4a Amd/Fujitsu Extended Query Table v1.1 at 0x0040 Physically mapped flash: Swapping erase regions for broken CFI table. number of CFI chips: 1 cfi_cmdset_0002: Disabling fast programming due to code brokenness. Flash device: 0x400000 at 0x1fc00000 bootloader size: 262144 Physically mapped flash: Filesystem type: squashfs, size=0xda5f3 Creating 5 MTD partitions on "Physically mapped flash": 0x00000000-0x00040000 : "cfe" 0x00040000-0x003f0000 : "linux" 0x000bf400-0x001a0000 : "rootfs" mtd: partition "rootfs" doesn't start on an erase block boundary -- force read-only 0x003f0000-0x00400000 : "nvram" 0x001a0000-0x003f0000 : "OpenWrt" Initializing Cryptographic API NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP, IGMP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 1024 bind 2048) ip_conntrack version 2.1 (5953 buckets, 5953 max) - 332 bytes per conntrack ip_tables: (C) 2000-2002 Netfilter core team NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. NET4: Ethernet Bridge 008 for NET4.0 802.1Q VLAN Support v1.8 Ben Greear
All bugs added by David S. Miller VFS: Mounted root (squashfs filesystem) readonly. Mounted devfs on /dev Freeing unused kernel memory: 84k freed Warning: unable to open an initial console. Algorithmics/MIPS FPU Emulator v1.5 diag: Detected 'ASUS WL-500g' Probing device eth0: No Robo switch in managed mode found Probing device eth1: No Robo switch in managed mode found Probing device eth2: No such device Probing device eth3: No such device BFL_ENETADM not set in boardflags. Use force=1 to ignore. b44: eth0: Link is up at 100 Mbps, full duplex. b44: eth0: Flow control is off for TX and off for RX. mini_fo: using base directory: / mini_fo: using storage directory: /jffs usb.c: registered new driver usbdevfs usb.c: registered new driver hub PCI: Setting latency timer of device 00:04.0 to 64 usb-ohci.c: USB OHCI at membase 0xb8004000, IRQ 2 usb-ohci.c: usb-00:04.0, PCI device 14e4:4715 usb.c: new USB bus registered, assigned bus number 1 hub.c: USB hub found hub.c: 2 ports detected SCSI subsystem driver Revision: 1.00 Initializing USB Mass Storage driver... usb.c: registered new driver usb-storage USB Mass Storage support registered. hub.c: new USB device 00:04.0-1, assigned address 2 Journalled Block Device driver loaded scsi0 : SCSI emulation for USB Mass Storage devices Vendor: Model: USB DISK Pro Rev: 1.00 Type: Direct-Access ANSI SCSI revision: 02 Vendor: Model: USB DISK Pro Rev: 1.00 Type: Direct-Access ANSI SCSI revision: 02 Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi removable disk sdb at scsi0, channel 0, id 0, lun 1 SCSI device sda: 971776 512-byte hdwr sectors (498 MB) sda: Write Protect is off Partition check: /dev/scsi/host0/bus0/target0/lun0: p1 SCSI device sdb: 2880 512-byte hdwr sectors (1 MB) sdb: Write Protect is off /dev/scsi/host0/bus0/target0/lun1: unknown partition table WARNING: USB Mass Storage data integrity not assured USB Mass Storage device found at 2 jffs2: attempt to mount non-MTD device 08:01 SQUASHFS error: Can't find a SQUASHFS superblock on sd(8,1) kjournald starting. Commit interval 5 seconds EXT3 FS 2.4-0.9.19, 19 August 2002 on sd(8,1), internal journal EXT3-fs: mounted filesystem with ordered data mode. jffs2.bbc: SIZE compression mode activated. PCI: Setting latency timer of device 01:02.0 to 64 PCI: Enabling device 01:02.0 (0004 -> 0006) eth2: Broadcom BCM4320 802.11 Wireless Controller 220.127.116.11 Probing device eth0: No Robo switch in managed mode found Probing device eth1: No Robo switch in managed mode found Probing device eth2: [switch-robo.c:90] SIOCGETCPHYRD failed! [switch-robo.c:90] SIOCGETCPHYRD failed! No Robo switch in managed mode found Probing device eth3: No such device BFL_ENETADM not set in boardflags. Use force=1 to ignore. device eth0 entered promiscuous mode b44: eth0: Link is up at 100 Mbps, full duplex. b44: eth0: Flow control is off for TX and off for RX. device eth2 entered promiscuous mode eth2: attempt to add interface with same source address. br0: port 2(eth2) entering listening state br0: port 1(eth0) entering listening state br0: port 2(eth2) entering learning state br0: port 1(eth0) entering learning state br0: port 2(eth2) entering forwarding state br0: topology change detected, propagating br0: port 1(eth0) entering forwarding state br0: topology change detected, propagating b44: eth1: Link is up at 100 Mbps, full duplex. b44: eth1: Flow control is off for TX and off for RX. Adding Swap: 32760k swap-space (priority -1) device prism0 left promiscuous mode
Sun, 05 Nov 2006
googlestats plugin addedsince I am nerding out a bit on the blog I also added the google stats plugin.
Not sure if it will work, but we will see...
blog comments turned back onAfter upgrading to the backports.org newer version of pybloxsom, and installing the tweaked CAPTCHA plugin from Benjamin Mako Hill's pyblosxom plugin page Now to go through and eliminate all the spam comments that accumulated in the short time I did have captcha-less comments enabled.
Sat, 04 Nov 2006
nerd gear lust - nice monitors and power suppliesMy good mate Rig picked these up for a friend, didn't really get to check them out but liked them muchly:
- Proview 22 inch wide monitor (wierdly this monitor doesn't seem to exist on the Proview site)
Being shown evaluating the 3d real time performance using some kind of demanding simulation application.
- Super Flower moduler cable power supply
All purchased fairly cheaply from MSY. I didn't get to fully evaluate these, just they looked nice on first impression.
Mon, 23 Oct 2006
An example of xhtml web templates using python and meld3In the past I have used spambaye's pymeldlite but recently have been trying out meld3 which has a slightly different approach, and hopefully better performance. Here is a quick chunk of example code showing it in action, the type of thing I wish could have disected when I was starting to figure out how it all fits together. I have converted a simple html example form to work as an xhtml template with a python cgi backend:
- The original cgi-lib example form
- The xhtml template created from the original using HTML tidy and a bit of editing to add meld:id tags, etc.
- The form itself running as cgi
.. and of course the source code to the cgi
#!/usr/bin/python # # simple example of using meld3 and python cgi module to process a html form using an # xhtml template. # from meld3 import parse_xmlstring from meld3 import parse_htmlstring from StringIO import StringIO import sys, cgi, os colours = ["chartreuse", "azure", "puce", "cornflower", "olive draub", "gunmetal", "indigo2", "blanched almond", "flesh", "ochre", "opal", "amber"] debugenabled = False template = "template.xhtml" # log to a file so we can see whats going on without interfering with cgi output, if debugenabled turned on def debug(debugoutput): if debugenabled: f = open(DEBUGDIR+"/debug.out",'a') f.write(debugoutput) f.close() def process_form(root, form): # do a pile of stuff, to the encoded template, according to values from the form. # set the action to submit this cgi script root.findmeld('form1').attributes(action=os.environ.get('SCRIPT_NAME')) if form.has_key('name'): root.findmeld('name').content("name entered was "+form.getvalue('name')) root.findmeld('nameprompt').attributes(value=form.getvalue('name')) if form.has_key('quest'): root.findmeld('quest').content("name entered was "+form.getvalue('quest')) root.findmeld('questprompt').attributes(value=form.getvalue('quest')) if form.has_key('text'): root.findmeld('comment').content("name entered was "+form.getvalue('text')) root.findmeld('commentbox').content(form.getvalue('text')) if form.has_key('swallow'): root.findmeld('swallowtype').content("The swallow chosen was "+form.getvalue('swallow')) if form.getvalue('swallow') == 'african': root.findmeld('africanswallow').attributes(checked="") if form.getvalue('swallow') == 'continental': root.findmeld('continentalswallow').attributes(checked="") if form.has_key('color'): colourselected = form.getvalue('color') root.findmeld('colour').content(colourselected+" was the colour chosen") else: colourselected = '' iterator = root.findmeld('colouroption').repeat(colours) for element, item in iterator: element.attributes(value=item) element.content(item) if item == colourselected: element.attributes(selected="") return root try: xml = open(template).read() except: sys.stdout.write("Content-Type: text/html\n\n") sys.stdout.write("<html><b>Error reading temple file "+template+"</b></html>\n") sys.exit(0) try: root = parse_xmlstring(xml) except: t, v, tb = sys.exc_info() sys.stdout.write("Content-Type: text/html\n\n") sys.stdout.write("<html><b>XML Parse Error in template "+template+" :"+str(v)+" </b></html>") sys.exit(0) form = cgi.FieldStorage() root = process_form(root, form) sys.stdout.write("Content-Type: text/html\n\n") root.write_xhtml(sys.stdout) # print cgi.print_environ() # print cgi.print_form(form)
Sun, 02 Jul 2006
goodbye gnome2, hello xfce4After evaluating XFCE4 as a leightweight desktop environment for an old laptop with not a lot of RAM, I decided there isn't really anything on GNOME that it can't do as well that I use. So I installed xfce4 on every machine I use regularly. I was mainly using gnome on inertia as I am used to it, but still frustrated it by its fatness, wierd quicks and gradual loss of usefull features. I tried KDE and it was frustrating as well.
As its gtk2 based XFCE lets me use all the gnome applications I like without all the hassles of actually running gnome.
Only minor problem I ran into was one of my machines had the font very swmall with no apparent way to change it, the secret turned out to be tweaking the XPI setting in the .Xresources file.
Tue, 27 Jun 2006
kissrec.py: Keep It Simple Stupid audio recording for linux.Well I decided to update the nrecord program from wavnorm to work with ALSA. I ran into a barrier with using the newt library with the Alsa C API, and as I am lazy, re-implented it all in python. This allowed me to let the excellent pyalsaaudio and progressbar python modules do all the heavy lifting, while the kissrec.py program really just ties them together to make a simple audio recorder.
- Low CPU use
- Elapsed time counter
- VU meter
- Clip (max amplitude) indicator that can be reset.
Command line options
./kissrec.py --help usage: kissrec.py [options] outputfile.wav options: --version show program's version number and exit -h, --help show this help message and exit -dDEVICE, --device=DEVICE ALSA device to use, e.g. default for default device, or hw:1 for second sound card -v, --verbose
DownloadThe python code is here: kissrec.py
The prerequisites are:
Why did I make it?It is a trivial program, but on a low resource laptop all the more featureful Linux recording programs would produce glitchy recordings due to their overhead, while all the simple ones dont have the features to monitor what is going on adequately. This software allows simple recording to occur, but with monitoring of the input levels and if any clipping has occured.
- Package it, and it's requisites, for Debian
- Option to hit a key and start a new .wav file seamlessly, for marking tracks in long jams or DJ mixes (i.e. hit a key and seamlessly close recording01.wav and start on recording02.wav).
- Select all the sound card parameters on the command line.. presently hardcoded for 16 bit, stereo 44.1Khz.
Sat, 13 May 2006
last.fm player for debian fixed.Here is a tweaked .deb of the last.fm player with the annoying bug where it doesn't work with extra soundcards fixed.
Sun, 07 May 2006
free software plus lastfm equals goodnessLast.fm is great. My new USB soundcard is great. Whats not great is one didnt want to play on the other.
Lucky due to the wonders of free software.. and me wanting to tinker with sound cards on a rainy Saturday night.. I was able to find and fix the problem and get them all playing nicely together.
Mon, 01 May 2006
moving from TPG to Optusthe cheap cheap $50/month plan is gone, thanks to Tesltra being dodgy. As my land line is optus as well the Optus plan works out slightly better than the equivalent TPG plan. Been with TPG for years and they have been OK. Not fabulous, but at least dirt cheap, which is why I have accepted their terrible tech support with amusement.
Sun, 16 Apr 2006
vcf to ezmlmJust a real simple script for subscribing "Electronic Business Card attachment" vcard (.vcf) files into an ezmlm mailing list. Might save someone a bit of scripting. Doesn't like email addresses that have bash shell special characters.. fixing that is a excercise for the reader. No error checking.
#!/usr/bin/python # # really really simple script for dumping stuff from a vcf file into an ezmlm mailing list # import fileinput, sys, os # split lines have format ['EMAIL', 'type=INTERNET', 'type=WORK', 'type=pref:firstname.lastname@example.org\n'] # where they have the info we want # takes VCF file and dir where the mailing list lives as the args vcffile = sys.argv listdir = sys.argv command = "/usr/bin/ezmlm-sub %s %s" for line in fileinput.input(vcffile): words = line.split(";") if len(words) == 4 and words == 'EMAIL': email = words.replace('type=pref:','',1).strip('\n') print "adding %s to list at %s " % (email,listdir) os.system(command % (listdir, email))
Sun, 26 Mar 2006
Open Source Linux Driver for Traverse Pulsar ADSL cardI have been a very satisfied user of Traverse Technology's Pulsar PCI ADSL card for quite some time now. very stable and reliable. The one thing is that getting the drivers up and running needs a bit of technical knowledge.
Recently I have been using the OpenADSL drivers for this card, which are now absolutely rock solid, just follow the Debian howto in the docs and away you go, if you are using Debian Linux. Kudos to Guy and all the developers working on this project.
Just upgraded to the Linux 2.6.15 kernel in Debian/Testing, which needs the CVS version of the driver as it is compiled with gcc 4, but following the hints on the mailing list and I got it all running.
Sun, 26 Feb 2006
Got a cheapo UPSGot a cheap UPS from Dick Smith Electronics, after having some brownouts during yesterdays storms. Interestingly the UPS was priced at $128 in the store and $98 on the web site. They dropped the price to the web site price as soon as I mentioned this.
Fri, 30 Dec 2005
RPC in Python - a comparison of Pyro and xmlrpcI have been dabbling in rpc on python, after removing a home brew rpc system using pickle and unix domain sockets and replacing it with something more network aware. xmlrpc is cool, but seemed to be a bit slow. Poking around I found Pyro, which looked good and also passed my test of a server taking just a few lines of code to create.
So I made some test code using some ultra simplified versions of my rpc class methods that can work with either RPC scheme depending on the command line args. The results of timing the below code is that for this test, Pyro is 18 times faster. There are of course the various caveats about Pyro's security, and the standards compliance and interoperability of xmlrpc, so its also a case of different horses for different courses.
Also maybe handy as a simple example of xmlrpc and Pyro rpc under Python:
import Pyro.core import SimpleXMLRPCServer import os, sys class rpctest(Pyro.core.ObjBase): def __init__(self): Pyro.core.ObjBase.__init__(self) # get a file.. simple version def getfile(self,file): filedata = open(file,"r").read() return filedata def listdir(self,dirname): listdirresults = os.listdir(dirname) return listdirresults if sys.argv == "xmlrpc": server = SimpleXMLRPCServer.SimpleXMLRPCServer(("", 8000),logRequests=False) server.register_instance(rpctest()) print "running in xmlrpc mode" server.serve_forever() else: Pyro.core.initServer() daemon=Pyro.core.Daemon() uri=daemon.connect(rpctest(),"rpctest") print "The daemon runs on port:",daemon.port print "The object's uri is:",uri daemon.requestLoop()
client benchmark code
import Pyro.core import xmlrpclib, os, sys if sys.argv == "xmlrpc": rpctest = xmlrpclib.Server("http://192.168.1.1:8000") else: rpctest = Pyro.core.getProxyForURI("PYROLOC://192.168.1.1:7766/rpctest") for i in range(1000): print len(rpctest.getfile("/etc/passwd")) print len(rpctest.getfile("/etc/group")) print len(rpctest.listdir("/usr/bin"))
Wed, 30 Nov 2005
Signed this blog up at technorati.com. Comment spammed heavily shortly after. Comments now disabled.After playing with the cute How Much Is You Blog worth" toy - (mine is worth zilch, but JB's is worth a pile. I signed up to TECHNORATI.COM to see what (if anything) it does.. and shortly after got a torrent of blog comment spam. This is nothing against technorati per se, just spammers must be targetting sites linked from there, but I jave disabled blog comments until I suss out one of those blog spam "type the number in the picture" type spam preventers.
Sun, 07 Aug 2005
SPAMTICIPATIONA new tern coined by myself, to describe that strange period just after you install new antispam measures or otherwise alter your spamtraps, when you actually want to get some spam, to see if if is working or not..
Sat, 09 Jul 2005
pyblosxom comments addedGot bored and installed the pyblosxom comments plugin. Now to get it to work. Still pondering moving to the very impressive Wordpress, but I like the pythonicness and simplicity of pyblosxom as well.
Thu, 09 Jun 2005
greylisting could be THE solution to spam.I have just added greylisting for postfix and for qmail recently and it does an excellent job.. this, combined with already deployed RBL blacklisting and spambayes seems to have nearly eliminated spam, a pity it takes three overlapping techniques to truly nail it. But people not as spam exposed as me would probably get on fine with just the RBLs and greylisting.
Sat, 15 Jan 2005
trivial but useful hack for redirecting rsync through a firewallrsync is an excellent tool for replicating directory trees on a drive or across a network. You can specify the transport layer for network copies, it defaulting to use ssh. The below script just pipelines two sshs together cleanly to use as a the transport, to replicate a directory tree to/from a server inside a firewall:
example command line from outside the firewall:
ENDHOST=192.168.1.20 rsync --delete -vzaP --rsh ./dssh.sh firewall.example.org:/backups/ /backup/fubar/In this case ENDHOST is set to the IP address of the endpoint host inside the firewall, while firewall.example.org is the hostname of the firewall we have ssh access to to get to the firewall.
dssh.sh consists of the following
#!/bin/bash # simple ssh wrapper so we can treat 2 sshs pipelining as one.. MIDHOST=$1 shift 1 exec ssh $MIDHOST ssh $ENDHOST $*Nice and simple, and saves a lot of messing about with port forwarding, escaping of command line args etc.
Wed, 15 Dec 2004
free local internet access - if you can find itIf you are in my local neighborhoodand can find my access point I'll let you use some of my internet bandwidth - just be nice!
No I'm not going to tell you where it is.