Frank Bannon

TCL hobbyist since 2000, computer scientist


* Bose Soundtouch (2020) control of the Bose Soundtouch wireless network speaker using TCL. The Bose API uses HTTP GET and POST messages with XML data, which are fairly easy to replicate in TCL. Can control the speaker's volume and switch to a preset from within TCL. Uses the Http package. Simple examples:

package require http
# request current volume
set [::http::geturl http://soundtouch-library:8090/volume](body)

# request list of presets
set [::http::geturl http://soundtouch-library:8090/presets](body)

# change volume to 30%
set data "<?xml version=\"1.0\" ?><volume>30</volume>"
# send POST
::http::geturl http://soundtouch-library:8090/volume -query $data

# change to preset 3 of 6
set data "<?xml version=\"1.0\" ?><key state=\"release\" sender=\"Gabbo\">PRESET_3</key>"
# send POST
::http::geturl http://soundtouch-library:8090/key -query $data

* Photo Tool (2020) this project kept me busy during the pandemic. In active development. I wanted to share photos that have metadata (EXIF/XMP) in them. Endpoint viewers would not display the names of people in the photo. From this need grew a tool written in TCL that reads JPG pictures and outputs new JPG files with the names of identified people as text in the photo, similar to movie subtitles. Initially the Tool called the excellent exiftool to read metadata, but for better speed I am writing my own exif/xmp parser. Currently the tool can read an entire folder of picture files and generate tagged output jpgs at the rate of about three per second. Can output original resolution jpg or a reduced screen resolution, intended for online sharing with reduced file size. Photo tool can display each person's age in the photo, based on the date of the photo and their birth year. This calculates the possible years of the photo based on who appears in it. Uses the packages: Img, JPEG/tcllib/jpegtcl; optional: exiftool perl library. Now over 3100 lines of TCL code.

* DIS-Tool (2014) new modular rewrite of DIS Monitor. TCL code is now read from modules, so bits of code can be modified in a file and read in (sourced) to update the tool while it runs. Listens to Distributed Interactive Simulation (DIS) traffic for simulation data, and decodes Protocol Data Unit (PDU) packets into readable format. Can save data to CSV files for later review. Displays individual entities with all pdu data decoded. Decodes common PDU types: Entity State, Fire, Detonation, Transmit, Signal, and others. Uses the UDP extension . See AS TCL Recipes

* DIS Monitor (2008) listens to Distributed Interactive Simulation (DIS) traffic for simulation data, and decodes PDU data to text, and decodes DIS enumerations to text from the SISO DIS reference. Decodes the PDU types: Entity State, Fire, Detonation, Transmit, Signal. Uses the UDP extension .

* URN Monitor (2008) listens to DIS traffic for Entity State PDUs, and displays all Marking fields that contain a URN. Shows what simulation entities are live/damaged/dead/moving/stale.

* PDU Generator (2008) creates DIS PDUs with your input data and sends them onto the network via UDP. Creates the PDU types: Entity State, Fire, Detonation, Transmit, Signal. Reads lists of various simulation entities (JCATS, VBS2, VRSG) to provide quick entry of known enumerations. Excellent tool to test interaction between simulations.

* iTunes (2010) control iTunes from tclsh. Uses TCOM package. See AS TCL Recipes


* Word-Search (2003, updated 2012) input scrambled letters, and it returns all possible English words. Solves Jumble word games, finds words and scores for Scrabble games. Very fast solutions (< 1s).

* Crossword Solver (2003, updated 2011) type in the letters you know, and this tool tells you all English words that fit.

* Boggle (2009, updated 2012) classic game of finding words in a grid of 4x4 random letters. Shows all possible words in the grid.

* Same Game (2002, updated 2013) puzzle game of removing same-type blocks

* Sink the Ship - Battleship game vs computer, with sounds and aiming hints