Hacking

From Adam Katz

Jump to: navigation, search
matrix-rev3-blue.jpgmatrix-rev3-blue.jpgmatrix-rev3-blue.jpgmatrix-rev3-blue.jpg

Contents

Yes, I am hopelessly immersed in computers. My computers are all also servers and are therefore on. I haven't run a commercial operating system since half-way through college. I am a strong advocate for Free Software (aka Free Speech Software). I run GNU/Linux (of the Debian flavor) and am extremely happy with it.

While at Northeastern University's College of Computer Science, I was active in the local chapter of the ACM and won us the Best Website award as the chapter's webmaster. The year after I had the helm as the chapter president, we won Best Activities.

In past jobs, I have been a senior UNIX administrator and chief network architect, which highlighted my personal need to tweak environments. This has given me perspective over just how many systems there are, beyond just Linux, BSD, and Mac OS. I hope to never again encounter compatibility needs between those modern systems and HP-UX, IRIX, SunOS (pre-Solaris!), AIX, Tru64...

These days, I lead a team on message security within Cisco Systems. There are terabytes of data to pour through, involving lots of regular expressions and command-line fu, used to build powerful filters and statistical models.

Anti-spam

I have a number of spam-fighting ideas and implementations. See Anti-spam (note, that page pre-dates my entry to the anti-spam industry).

HTML/CSS/JS

I have been known to help friends with client-side web programming. My ability to abuse html and css is quite extensive, just take a look at You in D&D or perhaps this fake pitch for Hindenburg Balloons (written for a class on Human/Computer Interaction). Then again, if you use the standards ignoring Internet Explorer, you won't get a good feel for my abilities because the pages will look like crap. However, I word-process in HTML and always write my code by hand. My code is good enough that I usually don't bother to validate it, but I'm more likely to do that than check it in the standards-ignorant IE.

Mozilla

I've been using Mozilla since about M14 or earlier (that's before they started using numbers like 0.6!). While my involvement at a Qt development firm has certainly whetted my appetite for using a Qt/webkit-powered browser, my allegiance remains to Firefox ... at least until I can wean my way off of a large number of add-ons that I have become dependent on. I've had a poorly maintained Mozilla tweaking page for quite a while, though the only thing I still maintain on it is the list of add-ons I use.

I've also written a few Greasemonkey scripts (to spruce up your browsing experience on certain sites) and Stylish styles (just like Greasemonkey, but with CSS instead of javascript).

Unix/Linux/*BSD shell customizing and scripting

Years ago, I taught a course on Unix, covering the basics. A previous job of mine had equipped me with knowledge of a half-dozen Posix-like systems, and I'd done a lot of toying in Linux, Solaris, and Cygwin. A lot of people keep asking me how to "get colors in Unix," referring to vim, ls, PS1, and nonstandard terminals with transparent backgrounds. I've created a howto page on Getting Colors in Unix (dated to 2004) to assist. You now also can glimpse my zsh prompt settings and a screenshot demo of my zsh prompt.

I've also become quite handy at bourne (/bin/sh) and bash scripting, and zsh has become my shell of choice. I've had to handle several flavors of Posix-style systems in past jobs (AIX, HP-UX, Solaris, IRIX, * Linux, Cygwin, *BSD, MacOSX, ...), so most of these scripts will work almost anywhere. Here are a few of the scripts that seem worthwhile to share (assume they are released GPL if not otherwise stated):

adduser.darwin (bash script)
For UNIX and GNU admins, here's a familiar command for adding users via command prompt.
alarm (bash script)
bzzzz!
apt-update
Download and report APT upgrades available. Security upgrades sent daily, other upgrades sent weekly. See also my Slashdot post announcing apt-update.
cygtkdiff (for cygwin)
Invoke tkdiff, a graphical diff utility, from a Cygwin shell, converting the path. Tkdiff requires TCL (wish) which is a package in Cygwin. See also tkcvs, a must-have utility for CVS and Subversion users.
gray (perl script)
Make all stdout gray (so stderr remains white)
lnptr
Hand in a filename, get where it points to. Handles deep linking.
ls_looped
Loop examining a file until it stops changing (better than watch ls -l FILE').
mp
Wrapper for mplayer + youtube-dl. Just hand it youtube links (don't forget to use quotes around question marks). Also works for everything else mplayer can do. No tab completion needed.
mp3bitrate
Shows bitrate, frequency, play time, and size of given files (a wrapper for mp3info in the spirit of file).
namegen
Generate random names by the handful (because this is a really hard task, only a few of them will be usable). I find that the names generated by this script are significantly more usable than the names from other generators. If you use this to create your domain name, please tell me! [namegen.txt sample output].
pathtok
Clean your $PATH ... inefficiently; take a look at utok if you have GNU utils.
poke
Quickly determine if a server is up and running, works even when ping is blocked (defaults to checking port 80 if port isn't specified).
psmerge2
The standard psmerge utility doesn't work well. This replaces it.
PWD
Prints an abridged working directory path for things like $PS1
rdesktop-wrapper
Smart handling of ssh-tunnels and nicknames for rdesktop/mstsc plus command-line completion for zsh.
resume-screen
A script to include in your shell rc file (e.g. ~/.bashrc) so you can resume remote screen sessions automatically. Includes intelligent attaching into live sessions based on a unique client address (so you can have the same session open at home and at work but not twice at work).
spf
Traverses the SPF record of given domain(s). Also verifies MX records.
srv2port
Converts a service name to port number(s) or a port number to service name.
suck
Get rid of a number of characters at the front and/or end of each handed line. `ls -l |suck 16' will suck out file permissions.
tempfile.sh
Grab a reasonably safe name from /dev/urandom, mimic debianutils tempfile as closely as possible (great for when you can't compile debianutils and mktemp isn't good enough).
timecalc (perl script)
Convert between seconds and 00:00:00 format.
tsocks
Smart wrapper script for the tsocks(8) transparent socksification library. You can actually specify things in this one (unlike the standard wrapper). See see here for details.
trunc
Truncate piped output to the width of your terminal. Quite useful if you're like me and refuse to run terminal emulators maximized.
vol
Graphical indicator of volume, great for laptops (requires osd_cat and aumix).
xmms-songchange
Execute a dynamic command when a song changes -- allows 'stop after this song'

Some Ideas for Software Products

This is a wish-list for existing programs and a number of new concepts for genres, like a first-person-shooter.

adskinner

I've been creating customizations for various programs for quite a while. Sometimes this takes the form of a script, as above, or perhaps a application-specific configuration tweak, as on my mozilla page, or sometimes as a skin or theme. I have written a number of these in my time and now have a page to showcase my skins and themes. At some point in the future, this page will also include a number of backgrounds I have tweaked, mostly from hubble telescope pictures. I write such things under the name "adskinner," which has two meanings: My initials are adk, so it is really "AD, skinner," but for those of you out there who watched the X-Files, it is also FBI Assistant Director Skinner, "AD Skinner."

The Story of Mel - A Real Programmer

I liked this story of a "Real Programmer" so much that I decided to mirror it. This is a little piece of history whose meaning is bound to be forgotten. It makes for a good read for any person not afraid of computers. (An average understanding of what makes a computer program and what binary code is would help but is unnecessary).