Bottom Line Computer
Software & Services
Rowland's page

Why I program
The point of having a computer is to make it do what you want. And the only sure way to get a computer to do exactly what you want is to program it yourself. In the Information Age, if you don't control your computers, ultimately you don't control much of anything.

About these samples and demos
A sample to show a technique should contain all that's needed to perform the technique, with a minimum of distraction. The best sample code is short but complete, and it should run and do something. I've tried to make my samples adhere to this principle. I hope you find them helpful.

When I present a demo, I also make it as straightforward as I can, because I feel that overcomplicated programming is in bad taste. Adding stuff that the user doesn't need just to look "good" does the user no real good, gets in the way, and introduces opportunities for bugs.

All my samples and demos use open standards. Open standards insure interoperability and user (and programmer) choice. Open standards avoid the expense and loss of choice that comes with vendor lock-in.

My web service demos are running on a PC that does not (yet) have a permanent IP address or hostname. Until this changes, the only sure way to reach these demos is through the links on this page. Don't bookmark them.

Bottom Line Computer
Contact me


Tom DeMarco: Quick or Dead
  
I attended Tom DeMarco's presentation at Boston SPIN on 21 February, 2006. Here are my thoughts.

His main point was that organizations and workers waste too much time and energy that don't contribute to the custmer's purpose. Email and poorly conceived meetings have taken over. He blames this on what he calls addicitive behaviors.

An addictive behavior is an activity that relieves some pain for the short term but has a long term effect of increasing the pain. We're kept in slavery to them by a defect of reasoning that sess the behavior as the only answer to the pain.

Reading email is a defensive action, not a productive one. People feel they have to read and reply to all emails in order to avoid giving implied consent by their silence. Of course this makes for ever more email to reply to.

Most meetings are empty ceremony. Groups meet for the sake of meeting as opposed to meeting in order to make a decision. Tom calls typical meetings the 'dinner with Dad' model. The boss interacts with oen person at a time, serially. He propses a better model, the 'West Wing' model, where individuals interact informally in the corridors to arrive quickly at a consensus on a well defined problem.

In the Q&A segment, we discussed telecommuting, and the possbility that it was an addictive behavior. He didn't come out against it categorically. He ceded that it could be real solution to the inefficiency of commuting. But he was concerned that you can't 'have lunch together' over the Internet, because the 'pipe is too narrow'. You need too see the other person's face in detail, to gauge his mood, make eye contact, etc.

My thoughts are that collaboration over the Internet is a must. It's just not practical to do things the old way, with gas prices and commute times what they are. Travel is the problem. But he's got a point about the human interaction. I asked if a wider screen would help provide a more satisfactory telepresence experience. He didn't object ot the idea, but he didn't have an answer ready.

A lot of groups I'm involved with are dying off because they can't get together for meetings. But collaboration over the Internet definitely has a 'narrow pipe' problem to it. I've been in the worst of both worlds where a project leader tried to have 'dinner with Dad' over the Internet and teleconferencing. At least I didn't waste any gas money that way.

I think what we urgently need is a more immersive version of online presence. Make the pipe fatter somehow.

  


Sites I maintain
  
SIBMUG - a PC user's group
Toastmasters of Manchester
SWANH software best practices matrix
SENH forums - a PHPBB discussion site
Freenet Web gateway
Voting records of New Hampshire politicians

  


Database servlet samples
  

Guest book - source code in one file: GuestBookServlet.java - as a standalone Jetty servlet
Here's a JSP version Source: Guestbook2.jsp
Here's a standard servlet, using init parameters. Source: gb3.java
This one adds cookie storage of user name, and remote host name for default name. Source: gb4.java
This one adds email notification of new entries, using JavaMail. Source: gb5.java


PC101 - a sample database application, using MySql, JDBC and Jetty
To log in to the PC101 sample, use account name: "admin" password "s00perd00p"
For read-only access, try account name "salesman" password "herbtarlek"


Utility classes to help with using Jetty: RowlandServletDesc.java, RowlandJettyServer.java



Hit counter servlet
Source code:
Feedback.java

  


My programming projects
  

Dynamic noise filter plugin for XMMS. This plugin filters out tape hiss from old recordings, with minimal damage to the music. It has an adjustable squelch threshold, so you can control how much is filtered out.


JavaParser.java: parses Java source code, analyses it, and builds static HTML pages to trace the relationships among entities in the source. In time I'll expand this into a full-fledged source analyzer, comparable to SNIFF+.

  


Java samples and resources
  

Arm.java: Manipulate a jointed arm in 3D.
Doorknob.java - listen for trojans, worms and back doors trying to connect
EachInDirectory.java - calls a callback for each file in a directory.
FTPupload.java - upload a file to an FTP server via java.net.URLConnection
Globe.java: Globe in Java. Draws a globe and rotates it in three dimensions.
Globe2.java: A fancier version, with perspective, written in more object-oriented style.
LineFieldsParser.java - parses each line in a file into fields.
MailNotifier.java - sends an email notification via JavaMail.
MboxParser.java - parses a file of email messages.
Multiple choice test applet in client-side Java, with source
Arm.java: Manipulate a jointed arm in 3D.
proxylogserverer.java: a TCP proxy with logging capability
SmtpListener.java - implements SMTP protocol, server side
SmtpSender.java - implements SMTP protocol, client side
SmtpSendAtt.java - sends an SMTP email message with text attachments
SQLLogger.java - maintains an event log as a mySQL table.
SQLMapStringToNumber.java - maintains a one-to-mapping of strings to integers in a mySQL database table.
TextToJpeg.java - creates a JPEG image of a text string.
TryMany.java - attempt to connect to a list of hosts on a given port. Useful for scanning for usable IRC servers.
TryManyPooled.java - this version uses a thread pool.


Java 1.4 class reference
com.sun.image.codec.jpeg
J2EE 1.4 class reference
James class reference
java.nio samples
Contents of all JARs and SARs on my system

  


Perl samples
  

mail.pl - uses POP3 and MIME-tools to list waiting email messages
mail.tk.pl - version of mail.pl using Tk to provide a GUI
dblist.pl - CGI script to list out the contents of a SQL table
posts.pl and parse_links.pm - scans Websites for articles, showing just titles and links. Uses HTTP::Daemon, LWP::UserAgent and HTML::Parser.

  


Python samples and resources
  

email.py: lists unread incoming messages on a POP3 account
globe.py: a sample Python script using Tkinter and canvas. Draws a globe and rotates it in three dimensions.
ftpup.py: upload a file via FTP
globdo.py: print a sorted list of files matching a pattern
gsr.py: global search and replace with regular expressions
httpdn.py: download (HTTP GET) URL to standard output
httpformdn.py: extract CGI forms from URL to standard output
tcpproxy.py: Redirect a TCP service from one host and port to another
urldn.py: download any URL to standard output, using urllib
urlparse.py: download URL and parse its HTML via htmllib
proxy.py: a generic TCP pass-through proxy. Useful for debugging TCP applications.


Python module index

  


Software tools I've worked with
  

ThreadX, a real time operating system with a small footprint.
Vxworks, a full featured real time operating system.
I've also tried Windows CE. That's an experience I'd rather not repeat.
ClearCase, a very full-featured source management tool
Perforce, a source management tool
gcc - GNU's C development tools
Microsoft Visual C++ and MFC.
Keil tools for 8051 software development
OpenSSL - an open source SSL implementation
Gladman's AES implementation
Sniff+ - a nifty source code diagrammer and analyzer

Web development: Jetty - a lightweight servlet and web application container
Tomcat - the reference platform for J2EE.
MySQL - a relational database
PHP - a simple and widely supported Web scripting language

  


Hardware I've worked with
  

NMEA-0183, a protocol for talking to GPS receivers.
ALST makes laser range finders
Embedded PowerPC
ColdFire processor
8051 family chips
PC104 stacks

  


My favorite Web sites
  

Linux Today
Slashdot
SourceForge
alt.audio.* via Google
alt.music.* via Google
rec.audio.* via Google
rec.music.* via Google
IPDG3 message board
Programmer's Corner on EzBoard
HTML Quick Reference

Multimedia links

  


Click fraud
  
I hesitate to get into any pay per click scheme because I know there's a lot of click fraud out there. I've got a honeypot and I'm seeing people from APNIC (Asia Pacific) using squid proxies to fake thousands of clicks through these sites. They've got the tracking cookies and session IDs intact, but the rate of traffic and the pattern makes it obvious to a human observer they're using a script.

I haven't noticed much of this directly through Google but I've seen them use other search sites to get to Google. What I'm seeing is an awful lot through sites like these:

adm.com
www.appliedsearch.net
death-house.com
c.enhance.com
epilot.com
indology.com
internetsearchnetwork.com
kanoodle.com
kitanet.ne.jp
partner.lookquick.com
looksmart.com
partners.mygeek.com
searchfeed.com
searchpixie.com
sedoparking.com
simpli.com
upspiral.com
xrea.com

These queries are coming from a handful of addresses in 219.x.x.x. They're coming almost contantly at several per second. The topics seem random. They're laways followed up with 'click's on banner ads and a fetch of each site's home page.

  


Editorials
  
Javascript and its dangers
Diebold and their electronic voting machines

  

Created by Rowland