October 15 - 19, 2018

Crowne Plaza Houston River Oaks
Houston, Texas, USA
2712 Southwest Freeway, 77098
Phone: 1-713-5238448
Fax: 1-713-5771273

Technical Session Abstracts

Keynote — Religious Wars: Perl, Python and Tcl in the EDA community

Andrea Casotto

Religious Wars: Perl, Python and Tcl in the EDA community

Keynote — State Of Tcl

Don Porter

The anual State Of Tcl presentation by our Release Manager

A Reboot of the Starpack Build Process for Tcl 8.6 and Beyond

Stephen Huntley, Gunes Koru, Yili Zhang, Urmita Banerjee, Leroy Kim, Clif Flynt

We describe an initiative to simplify drastically the compilation of Starkit basekits for Unix and Windows, which excises no-longer-needed code and relies wholly on Tcl tools for build scripts. Starkit code providing once-essential features (e.g., reflected channels, zlib compression, encoding configuration) is now redundant thanks to Tcl 8.6's feature set, and is eliminated. Our changes facilitate a professional standard of security auditing and accountability of basekit contents, make it easier to upgrade separate library components, and will ease future support of new platforms. Tcllib's TEPAM package was used to create a human-friendly command line wrapper, and Ghostscript's tmake.tcl (a partial clone of standard make) was used as a flexible and configurable backend compile engine.

Auto-Updating for Client-Server Software

Yili Zhang, Stephen Huntley, Urmita Banerjee, Leroy Kim, Clif Flynt, Gunes Koru

Health IT Lab developed a fast and efficient machanism of auto-updating for client-server software, by leveraging the sync function in Starkit Developer eXtension kit. The mechanism has been applied to a data quality toolkit software (DQT) with high performance.

Building a Fault-Tolerant Distributed System with zookeepertcl

Garrett McGrath

My talk will demonstrate how to employ Tcl to implement a high-availability distributed system with automatic failover. Using the zookeepertcl library and the Zookeeper project's leader election recipe, I will discuss the design decisions necessary for turning these generic building blocks into a concrete system. As part of my demonstration, several best practices and potential pitfalls of the zookeepertcl library will be noted. Primarily, though, the talk will answer a number of questions that arise when using Zookeeper for implementing a distributed system in Tcl. Throughout my talk, discussion will be informed by my experience in building such a system at FlightAware.

Clay - A Minimalist Framework for TclOO Libraries

Sean Woods

Clay is an attempt to take a career's worth of decent design ideas and condense them into a single language tool. Clay provides a vocabulary to describe the complex interactions possible in TclOO. It also allows programmers to harness that complexity in a deterministic fashion.


Joe Mistachkin

Comdb2 is a distributed database system designed for geographical replication and high availability. In contrast with the latest trends in this field, Comdb2 offers full transactional support, a standard relational model, and the expressivity of SQL. Moreover, the system allows for rich stored procedures using a dialect of Lua. Comdb2 implements a serializable system in which reads from any node always return current values. Comdb2 provides transparent High Availability through built-in service discovery and sophisticated retry logic embedded in the standard API. In addition to the relational data model, Comdb2 implements queues for publisher-to-subscriber message delivery. Queues can be combined with table triggers for time consistent log distribution, providing functionality commonly needed in modern OLTP.

Debugging Tcl with VS Code

Jonathan Cone

Visual Studio Code is an increasingly popular tool for software developers. The IDE supports linting, debugging, intellisense, and formatting for languages such as python, node, C#, PHP and others.

Extensions exists for Tcl language support (mainly syntax highlighting and snippets), but no debugging extensions are available.

We have created a new extension for Visual Studio Code that supports debugging Tcl in the Visual Studio Code editor. The extension is built using the debug adapter protocol defined by Visual Studio Code with Tcl debug logic from the Tcl Pro Debugger. The Visual Studio Code Tcl debugger currently supports setting breakpoints, stepping through code, and variable and stack display in a modern IDE.

We are working to add more features and will ultimately publish the debug adapter for public contributions and comments.

Experiences with Adopting the Tcl/Tk Ecosystem in a University Research Lab Setting

Gunes Koru, Yili Zhang, Urmita Banerjee, Leroy Kim, Clif Flynt, Stephen Huntley

Our students develop client-server and multiuser software prototypes in the scope of applied research projects. These prototypes are used by the professionals in the field which results in their further refinement and improvement. Tcl/Tk ecosystem which we define as the language, libraries, sqlite3, and Fossil have proved to be highly beneficial. The pros were ease of learning and using the language, database, and the versioning system, an integration among these components, ability to develop GUI in the same language, and the event loops and threads in Tcl. The cons were perceived lack of popularity, libraries, and information resources.

Extending the Text Widget

Clif Flynt, Leroy Kim, Gunes Koru, Urmita Banerjee, Yili Zhang, Stephen Huntley

The text widget is an incredibly powerful tool. With specialized tags and bindings it can be more powerful. This paper will discuss extending the emacs editing features, adding full font control (as done in WYSIWYG word processors) and import/export functionality.

Object Lifetimes in Tcl - Uses, Misuses, Limitations

Phil Brooks

The management of the lifetime of an object in Tcl presents a number of unique challenges.

Popeye - flight tracking with Tcl, Sqlite, and C++

Peter da Silva

Popeye combines Tcl, a custom C++ tcl extension, and the sqlite extension to provide real-time access to the combined feed of flight events at FlightAware.

SWIMming in Tcl

Frank Morlang

Against the background that all future air traffic participants are requested to act as System Wide Information Management (SWIM) communicating sub-systems by the future Single European Sky Air Traffic Management Research (SESAR) SWIM 'Intranet for ATM' concept, SWIM compliance of future ATM information sharing software modules is of utmost importance. The paper describes Tcl/Tk usage in this context, focusing on a prototype referring future space / air traffic integration needs.

Sqlbird - Keeping PosgreSQL database tables replicated in SQLite using Tcl

Karl Lehenbauer

Sqlbird obtains table definitions from PostgreSQL, defines corresponding tables in SQLite, and with reasonable efficiency replicates the tables from PostgreSQL to SQLite, keeping them updated according to a defined schedule, making SQLite databases available to concurrent readers who can then perform full SQL queries on them (including JOIN, etc), accessing data mirrored from the PostgreSQL database. Clients can often do work without needing to communicate with PostgreSQL at all.

Most SQL queries that work in Postgres will run unmodified in SQLite, as long as the referenced tables are present. Sqlbird's apex user function, sqlbird::select, will try the SQL query first in SQLite and fall back to PostgreSQL if it doesn't work. This gives developers functionality akin to superbird, but letting them stay with SQL rather than having to specify queries in the speedtables query language.

Sqlbird consists of a package and a few programs. Most of the work is done through calls to functions defined in the sqlbird package. This talk covers how sqlbird works, how it is configured and operated, various design decisions that were made, and details experiences from using it in commercial production.

State Of Tcl Community Association

Clif Flynt

The state of the TCA operating the conference

State of FlightAware Tcl Bounties

Karl Lehenbauer

The Bounty Program was intended to speed up the pace of development and evolution of the Tcl language. Some bounties were successfully fulfilled, resulting in bug fixes, enhancements, and performance improvements to the Tcl language itself or to one of a number of popular and widely used packages, while others were not attempted or the efforts did not meet the conditions of success.

In this talk we'll go over the bounties that have been fulfilled and what the results have been, discuss some of the ones that weren't fulfilled, what happened and any lessons learned, and we'll introduce several new bounties for 2018/2019.

Tcl @ FlightAware

Karl Lehenbauer

Tcl @ FlightAware

Tcl Nano

Roy Keene

Tcl Nano

Tcl package for Sqlite3 database schema migration

Urmita Banerjee, Yili Zhang, Gunes Koru, Clif Flynt, Stephen Huntley, Leroy Kim

HealthIT lab at UMBC leveraged the easy relationship between SQLite and Tcl/Tk to develop a migration package which maintains database schema migration by using Tcl on the sqlite database. The package is to update or revert the database's schema to a newer or older version.


Migration of database schema in software used to be hard coded in the program, which reduced the flexibility to change, manage, and track the evolution of database schemas. To fulfill this gap, a migration package was developed to manage schema alterations in Sqlite3 database which allows generating and executing forward and backward database migration scripts.


Schema migration refers to the management of incremental or reversible changes of a relational database schema, such as table creation and drop, column addition and removal, and table renaming. Functions are created in the migration package to fulfill the requirements of these changes, with generation of Tcl script files.Each function is designated to a database schema change action, and the script generated for it includes an "Up" function and a "Down" function. The "Up" function updates the database while the down function reverts the database to an older state.

The name of these script files include timestamp along with the associated action and the name of table or column modified. The time stamp in the name of files can help execute a series of data schema changes in time sequence, both in forward and invertedorder. Thus, executing scripts in order with "Up" fucntions can establish the database, and executing scripts in inverted order with "Down" functions can degenerate the database.


The migration package was included in a software developed in Health IT Lab. The migration scripts were integrated into the code as per their requirement which constructed the expected database scenarios, and enabled data schema change without damaging the data. With progression and evolution of the application, the data model also evolved and it was handled easily by running migration scripts.

Some of the migration examples are as follows: The Up script of Add Table function for a particular entity introduces that table into the data model while the Down script of Add Table function removes the particular table from the schema if it exists and reverts the database to an older version. Similarly a Up script of Delete Table for a particular entity successfully deletes the table from the database while Down script of Delete Table fucntion inserts the table back into the database and constructs an earlier state of the database.


Database Schema Migration is an essential process in agile software development. It helps adapting the database with evolutions in requirements. The database schema can be updated to a new state or reverted to an earlier state and its evolution can be tracked. The utilization of the schema migration removes the need to fully redesign data models up-front with every little alterations in the database. The primary purpose of schema migration is to handle database evolutions without impacting the existing data in the database. However preservation of data in general is not guaranteed as schema changes like column deletion can affect data negatively.

The Httpd module and Toadhttpd

Sean Woods

This paper explores the internals of the new httpd module in tcllib. It will explain the development path from the original tclhttpd, and why objects, coroutines, and the demands of ever more complex web applications drove this new approach.

The paper will also explore the development of the httpd kernel into a full fledged web server, Toadhttpd. The paper will also explore embedding the httpd module into an existing application (the Integrated Recoverability Model) as a documentation viewer. The paper will also outline how the httpd module will be used in upcoming projects as a supercomputing job dispatch hub.

Web Application Development Using Rivet/TCL and JavaScript: Developer Patterns for Interfacing between Rivet/TCL and JavaScript.

Anne-Leslie Dean

Website developers have a variety of scripting languages to choose from when programing web applications. A common denominator for modern website development is to choose JavaScript to create a dynamic browser based user experience rivaling that of applications developed for native operating systems. It is common in web application development to use another scripting language besides JavaScript for rendering the basic HTML document. Such a hybrid environment of scripting languages poses a number of challenges for developers to produce well designed code. This presentation demonstrates several techniques to develop a maintainable web application implemented in Rivet/TCL and JavaScript.

cpptcl, a helper to write Tcl C++ extensions

Shannon Noe

I would like to present a talk on cpptcl. https://github.com/flightaware/cpptcl

Contact information

[email protected]