Nathan Harrington - Projects and Articles
Create time-availability maps with Perl and Google Earth
Visualize when your team members, customers, or systems are available
Article available on IBM developerWorks.
Time-availability maps provide a listing of who is most likely to be available
for a certain hour in a certain location. Find out how to use Google Earth and
a log of your communications to map and identify the time and place when
availabilities match. Local cached text.
IBM developerWorks podcast with Scott Laningham.
Hackszine coverage.
Beef up the Find command in Firefox
Create a Greasemonkey script to highlight search entries relative to nearby content
Article available on IBM developerWorks.
The Find command in Firefox locates the user-specified text in the body of a
Web page. The command is an easy-to-use tool that works well enough for most
users most of the time. Sometimes, however, a more powerful Find-like tool
would make locating text easier. This article shows how to build a tool that
isolates relevant text in Web pages faster by detecting the presence and absence
of nearby words. Local cached text.
Integrate encryption into Google Calendar with Firefox extensions
Store only encrypted data for event names and descriptions in Google Calendar
Article available on IBM developerWorks.
Provide basic encryption support for user data in one of the most popular
online calendar applications. Building on the incredible flexibility of Firefox
extensions and the Gnu Privacy Guard, this article shows you how to store only
encrypted event descriptions in Google's Calendar application, while displaying
a plain text version to anyone with the appropriate decryption keys.
Local cached text.
Slashdot Discussion
Visualizing time-dependent data with distortion portals
Create useful visualization of data by linking their positions in time
Article available on IBM developerWorks.
Create an SDL-enabled application that allows you to create distortion portals
in sequential image frames to explore the relationship of data sets through
time. This article demonstrates code and techniques to create "animated
distortion portals" in the data to provide time-dependent visualizations of
various parts of the image. Additionally, certain aspects of the code are
presented that allow for effective visualization on slower-computing platforms
without sacrificing usefulness.
Local cached text.
Demonstration video at youtube.com
Multi-touch gesture support on Linux laptops.
Enable 'Three-Finger Swipe,' Open, and Close-Pinch using synclient and synthetic X events
Article available on IBM developerWorks.
Implement swipe and pinch gestures for Linux applications by analyzing
synclient program output for a Synaptics TouchPad. This article provides
tools and code needed to add some of this new gesture support on older
Linux-enabled hardware. Building on the output of the synclient program, the
Perl code presented here allows you to assign specific application functions
to "Three-Finger Swipe," as well as Open- and Close-Pinch gestures.
Local cached text.
Demonstration video at youtube.com
Identify speakers with sndpeek
Let your computer tell you who is speaking in teleconferences, podcasts, and live media events.
Article available on IBM developerWorks.
Use sndpeek and custom algorithms to match voices to a pre-recorded library.
Create applications to let you know who is speaking in teleconferences,
podcasts, and live media events. Build basic assistance programs to help the
hearing-impaired identify speakers in a bandwidth-limited context. Local cached text.
Demonstration video at youtube.com
Identify and verify users based on how they type
Integrate keystroke dynamics-based user verification in GDM.
Article available on IBM developerWorks.
Modify the GNOME Display Manager (GDM) to support user verification through
keystroke-dynamics processing. Create and store a one-way encrypted hash of
your keystroke patterns when entering your user name. Add code to GDM to read
current keystroke patterns and permit a user to log in when the characteristics
are a match. Local cached text.
Slashdot Discussion
ThinkPad aerobics: Rotate and shake your laptop to control applications
Mix HDAPS, Linux and perl to create a giant Wii-ish controller for applications
Article available on IBM developerWorks.
Use synthetic X Window System events and embedded accelerometers to control
applications by the movement of a laptop computer. Translate gestures, such as
shaking, into mode-switching commands with detection algorithms to interact with
applications in new ways. Develop tools to help build the next generation of
interfaces that use accelerometers, such as applications for laptops and
iPhones. Local cached text.
Demonstration video at youtube.com
Take your ThinkPad out for a walk to create wireless site surveys
Record wireless network strengths along a walking path and render data points automatically
Article available on IBM developerWorks.
Use the accelerometer embedded in a ThinkPad to record your movements while
monitoring your network connectivity. Use custom algorithms to extract footstep
features from the recorded data, then automatically plot signal strengths on a
floor-plan map to determine the best areas of coverage. Local cached text.
Expand your text entry options with keystroke dynamics
Use xev, Perl and custom algorithms to measure characters and how they are typed
Article available on IBM developerWorks.
Measure the total time of entry and verify the time between keystrokes to help
authenticate a user regardless of the data being entered. Require nonprintable
characters, such as backspace and break, in the password to enable new levels
of password obfuscation. Learn how to apply the open source tools xev and Perl
in keystroke dynamics to measure the more-subtle characteristics of
human-computer interaction. Local cached text.
Create automated verbal conversation annotations
Use Sphinx-4 and text-processing to extract relevant data from conversations.
Article available on IBM developerWorks.
Use the open source Sphinx-4 speech-recognition package to capture letters and
numbers from spoken conversations in near real time to create notes. Employ a
custom Sphinx-4 dictionary file to extract likely matches to spoken letters and
numbers. Process the text for higher order values such as phone numbers and
acronyms, and create a meeting annotator through search-engine lookups and local
databases. Local cached text.
Search structured LDAP data with a vector-space engine
Compensate for typographical and spelling errors with vector space LDAP search.
Article available on IBM developerWorks.
Use Perl and a vector-space search engine to search and display records from
your Lightweight Directory Access Protocol (LDAP) database. Use inflected
letters and numbers to create a useful vector space from structured LDAP data.
Compensate for typographical and spelling errors automatically while showing the
most appropriate match for any query entered. Local cached text.
IBM developerWorks podcast with Scott Laningham.
Make your 404 pages smarter with metaphone matching
Don't let typos and bad referrers get between site visitors and your content.
Article available on IBM developerWorks.
Create your own 404 error-message handler to provide useful links and redirects
for the contents of your site. Use metaphone matching and a simple weighted
score file to make typographical, spelling, and bad-link redirect suggestions.
Customize the suggestions based solely on your Web site's content and preferred
redirection locations. Catch multiple errors in incoming URL requests and
process them for corrections in directory, script, and HTML page names.
Local cached text.
Map places, people, and relationships inside a building.
Map building interiors with locations of people, team rooms, and other assets.
Article available on IBM developerWorks.
Google and MapQuest do a great job of creating maps of the outside world on the
fly. But what about our workspaces? This article shows how to define and map
places and people inside a building. Search, track, and plot individual
cubicles, rooms, employees, or assets. Graph the location of individuals or
groups of employees based on job function, or track unused office space visually.
Local cached text.
Precipitation proximity alerts using WSR-88D radar data
Process radar data with open source image processing tools to create custom alerts
Article available on IBM developerWorks.
Traditional weather reports will give notice of vague forecasts and severe
weather alerts in your general area. The code and tools presented in this
article will allow you to create precise detection zones so you can receive a
page, SMS, or e-mail a few minutes before a precipitation event is likely to
occur at the monitored location. Use GD and Perl for image processing of the
NOAA WSR-88D radar data to create your own precipitation alerts for precise
areas. Choose your notification method and let users know when the rain will
begin and when it will clear. Local cached text.
Explore relationships among Web pages visually
Use Graphviz to create new ways of visualizing any Web page's links.
Article available on IBM developerWorks.
The Graphviz program from AT&T Research and others is a fantastic tool for
automating the visualization of complicated link sets. This article shows how
to combine the Graphviz tool set with Web-page thumbnail generators to create
new ways of visualizing any Web page's link structures. You can use these
techniques and descriptions to refine your display logic, and create directed
and undirected Graphviz charts to enhance your understanding of organizational,
software, and other complex linked data sets. Local cached text.
Create custom data charting tools using Perl and GD
Deliver professional-looking graphs and visualizations automatically
Article available on IBM developerWorks.
Create professional-looking charts for data visualization using Perl and GD.
Move beyond standard pie charts to incorporate annotations, indicators, and
layering for enhanced informational delivery. Local cached text.
Custom cartographics with CAIDA's plot-latlong
Create geographical plots of your data using Perl, GD, and plot-latlong
Article available on IBM developerWorks.
Using world and custom U.S. maps, Perl, GD, and the Cooperative Association for
Internet Data Analysis (CAIDA) plot-latlong tool, this article demonstrates how
to create your own effective data visualizations in the spirit of Google maps
and the U.S. national atlas. Local cached text.
Ldap Search part 1
Use Perl and a regular-expression generator to search for and display LDAP
database records
Article available on IBM developerWorks.
Abstract: Find out how to use Perl and a regular-expression generator to search
and display records from your Lightweight Directory Access Protocol (LDAP)
database using simple keyword-type searches. Search and process your LDAP data
without knowing precisely which field the data is in or how it is formatted.
Part 2 of this "LDAP search engines" series introduces scoring and metaphone
suggestions to the code. Local cached text.
IBM developerWorks podcast with Scott Laningham
Ldap Search part 2
Use Perl and a regular-expression generator to search for and display LDAP
database records
Article available on IBM developerWorks.
Abstract: Learn how to add a scoring system to the search engine described in
Part 1 of this "LDAP search engines" series. Develop your own
metaphone-matching techniques for spelling corrections, query suggestions, and
effective display of search results. Local cached text.
IBM developerWorks podcast with Scott Laningham
Ghosd and Perl
Let system events kick off on-screen alerts displaying text and images
Article available on IBM developerWorks.
Abstract: Use Perl, Ghosd, and some network programming to display on-screen
overlays of text and graphics based on messages from your local system and
remote computers. Define custom images, font sizes, and colors to convey
information integrated with your desktop. Local cached text.
cmdWhistle
Control your computer with tones and patterns
Article available on IBM developerWorks.
Abstract: Use Linux or Microsoft Windows, the open source sndpeek program,
and a simple Perl script to read specific sequences of tonal events -
literally whistling, humming, or singing at your computer -- and run commands
based on those tones. Give your computer a short low whistle to check your
e-mail or unlock your your screensaver with the opening bars of Beethoven's
Fifth Symphony. Whistle while you work for higher efficiency. Local cached text.
O'Reilly Radar Release 2.0 'magic' link.
Cached copy.
Coverage and comments from Lifehacker.com.
Interesting implementation example at: perlmonks.org
Demonstation video of raising and lowering windows on video.google.com and
youtube.com.
IBM developerWorks podcast with Scott Laningham
emailMixer
Make incoming e-mail play custom tunes
Article available on IBM developerWorks.
Abstract: Use SoX, and a Perl script to do simple keyword matching and create
sound files played back upon receipt of e-mail. No more simple ding to indicate
the arrival of an e-mail regardless of recipient, sender, or subject. You can
now hear a ding-bang-whoosh signifying an e-mail from your manager, or a
bell-squawk-chirp to let you know your bank statement is available.
Local cached text.
What does it sound like?
Audio example with glasses, sparcle, space2.
Another example with glasses, laser, space3.
shakeReset
frustration communication for your linux laptop
Article available on: IBM developerWorks
Abstract: Modify the kernel to automatically reset your linux laptop when
shaken during a kernel panic. Implement a shake detection algorithm in the
kernel and user space to perform automatic shutdowns and restarts when certain
kinetic conditions are met. Place your computer on the leading edge of
cathartic interfaces. Local cached text.
Videos:
On youtube.com and
video.google.com
or direct download quicktime
for linux encoded.
chordStats
Monitor your computing environment with machine generated music
Article available on: IBM developerWorks
Abstract: Use Perl and fluidsynth to create a real-time musical composition of
your system status. Learn how to integrate various system monitoring data into
a harmony producing, midi controlled audio synthesis. Explore audible
information methods and configurations to help you monitor and manage your
computing environment. Local cached text.
What does it sound like?
Audio example with Hammered Instruments (think dulcimer, not intoxicated
saxophone), another example with Electronic Sounds, and another with Simple
Orchestral instruments.
Slashdot discussion
knockAge
control your computer by whacking it
Article available on: IBM developerWorks ; also the podcast with Scott Laningham
Abstract: For the first time, you can hit your computer and get a meaningful
response! Using Linux and the Hard Drive Active Protection System (HDAPS)
kernel drivers, you can access the embedded accelerometers on IBM and Lenovo
ThinkPads, then process the accelerometer data to read specific sequences of
"knocking" events -- literally rapping on the laptop case with your knuckles -
and run commands based on those knocks. Give your computer a double tap to
lock the screen, and knock in your secret code to unlock. Tap the display lid
once to move your mp3 player to the next track -- the possibilities are
endless. Local cached text.
Videos:
On youtube.com and
video.google.com or direct downloadquicktime for linux
encoded.
News article on newscientist.com
Slashdot discussion if only for the e.a. poe homage
Among the Top 10 IT Stories of the week at cio.com. (404 as of 20071113)
Entry in the Make blog.
hopie
real time visual effects
The original hopie demonstration article is available on developerworks
Abstract: Use EffecTV and Simple DirectMedia Layer (SDL) to create your own
real-time visual effects on live video. Learn how to integrate geometric
primitives, bitmap image loading, and simple motion tracking to create your own
games, leading-edge user interfaces, or immersive environments. Explore the
EffecTV and SDL architectures, and learn how to harness the power of open
source video processing on Linux. Local cached text.
Future versions to be published here shortly include more advanced
manipulations of the video input to make interesting games.
version 0.1 is a simple "ball falling down the screen game" where you have to
jump around and duck and dodge.
versions 0.2 adds shrinking of your image on the video screen, and occlusion of
your head with funny images.
Mentioned in the crazy ideas section of Gnome Cheese project. Actual
proof that some of these articles are being read.
mosaics
Photo and Movie mosaics with perl, imagemagick and mplayer
The original photo mosaic article on developerworks
Abstract: Use simple Perl scripts to automate the image manipulation, text
creation, and compositing of arbitrary mosaic images. Learn how to use
ImageMagick, GD, and The Gimp to create your own mosaic images suitable for
static display and dynamic content. Explore the capabilities of ImageMagick and
open source graphical editing tools. Local cached text.
And the sequel which creates mosaic movies:
Abstract: Use simple Perl scripts to automate the image manipulation, text
creation, and compositing of arbitrary mosaic images. Learn how to use
ImageMagick, GD, and The Gimp to create your own mosaic images suitable for
static display and dynamic content. Explore the capabilities of ImageMagick and
open source graphical editing tools. Local cached text.
xdmx
how-to article for distributed multi-head X windows support
Original article published on developerworks.
Abstract: Learn about the tools available to develop your own multiscreen
configuration and physical layout to enhance your computing experience. You can
use Linux® and Xdmx to create one contiguous desktop across multiple display
devices attached to separate computers. Combine your available laptop and
desktop computers running Linux to create one large display for enhanced
productivity. Explore large-scale display-wall setups and the creation of
multihead setups without purchasing graphics cards. Local cached text.