Kevin Kenny

See Also

Kevin's web site
Kevin's Mathematical Musings
Video introductions by Kevin to mathematical hobby projects.


Who's Kevin Kenny?

I'm the guy who labels postings to this Wiki with KBK, and whose postings usually originate from, a tremendously overburdened firewall machine. (in the Tcler's wiki chat, known as kennykb)

I have been an avid Tcl user since 1991, when I first became interested in it as an integration platform.

I'm probably the Tcl community's worst offender with respect to creating abandoned software. Alas, my most lasting contribution to the Tcl community has been the horrible exec magic that launches Tcl scripts on the Un*x platform:

  # the next line is a comment in Tcl, but /bin/sh interprets it \
  exec /path/to/wish "$0" ${1+"$@"}

Some of my better abandoned projects include:

  • tclTCP - This was a TCP/IP remote procedure call for Tcl, intended for those platforms that couldn't do send. I released it, and it enjoyed a following for a while. What happened? Brian Smith et al. did a tclDP package that did a better job, and the world (including me) switched over. Then the core team finally put sockets into the Tcl core and the world switched over again. Maybe someday we'll get UDP/IP back.
  • tclFrame and tclXess - These were Tcl interfaces to the FrameMaker desktop publishing system and the Xess spreadsheet. Alas, I no longer have either one, so I have no way of maintaining these. The last I heard, tclXess was still shipping with Xess; does anyone know if the vendor is still in business?
  • tkAuxLib - This was (mostly) a set of extended bindings to the Tk widgets that let users have TAB traversal, entry validation, bindtags, F10 menu access, and several other cool features. All of these features were cool enough that they showed up in the Tcl core over the following few releases, and I put tkAuxLib to bed.
  • tclLoad - This was (as far as I know) the first multi-platform dynamic loader for Tcl[L1 ]. I wrote it in 1993 primarily to prove that it was possible, and to embarrass the core team into getting the load command working. Once load was added, I gratefully relegated my implementation to the scrap heap.
  • tclSolver - This one is actually something I'd like to pick up again, make TEA compliant, and get out into the community. It's an extremely simple-minded algebraic equation solver. If, for example, it is provided with a formula like A / B = C / D, it can determine the value of any of the four variables A, B, C, and D when the user supplies values for the other three. You can read about it at [L2 ]. It's similar in flavor to the commercial TK!Solver product, and I originally developed it so that I would have a solver engine for a project where I was putting engineering calculations on the Web. That project wound up getting written up in the February, 1996 issue of Communications of the ACM.

Right now, I divide my time between working on the Tcl/Tk applications that run the NBC broadcast network 24/7 [L3 ], [L4 ], and doing Tcl-based automation software for GE's next generation of medical X-ray machines. In other words, I'm mad enough to be using open-source code in mission-critical systems.

Using Tcl in soft-real-time systems has given me a keen interest in the precision of the Tcl clock, hence the changes described in TIP #7 [L5 ].

I'm also author or coauthor of several more TIP's [L6 ], [L7 ], [L8 ], [L9 ], [L10 ].

In fact, these TIPs made me enough of a Tcl Core Team gadfly that the TCT invited me to join its ranks in the summer of 2001. I continued writing and sponsoring TIPS - and my first official act as a TCT member was to call a vote on the TIP for bundling [incr Tcl] with the Tcl distribution. (Little did I imagine how difficult it would be to get that actually to happen.)

Anyway, I've continued in the TIP process, contributing to several [L11 ], [L12 ], [L13 ], [L14 ], [L15 ], [L16 ], [L17 ].

I've been on the program committee of the Tcl conferences in 1995, 1997, 1998, 2001, and 2003 and chair the program committee in 2002.

I'm one of the Tcl maintainers who understand Parsing, bytecodes and execution and The anatomy of a bytecoded command.

I know a bit about combinatorics, giving rise to Binomial coefficients, Cartesian product of a list of lists, Power set of a list, and similar pages. I know just enough numerical analysis to be dangerous, and things like Constrained minimisation in one dimension come out of that.

I'm fond of recreational mathematics, whence come pages like Fraction math and Solving cryptarithms. Enough people got confused about what a cryptarithm is (thinking it was a cryptogram) that I was motivated to put up a page on Solving cryptograms as well.

I suppose I should count the Convex hull page as recreational mathematics as well, since I'm not an expert in computational geometry by any means!

Diff in Tcl is sort of mathematical, I suppose, too.

I strongly encourage people to make proper use of the Tcl event loop, which is subtle but rewards those who understand it. Countdown program, Update considered harmful, Centering a window and Keep a GUI alive during a long calculation are all exhortations to do so.

I still find time, occasionally, to develop the odd clever hack in Tcl, for instance Shuffle a list. I also know a few tricks about dealing with Microsoft Windows and Tk, such as Printing a canvas under Windows and Register file types under Windows. I also have a few things up my sleeve about making Tk's look and feel more Windows-like, such as Scroll bars that appear only when needed and a Resize control.

People can send me email at [L18 ].

  proc Quine {} {
    set n [lindex [info level 0] 0]
    append s [list proc $n [info args $n] [info body $n]] \n [list $n]
    puts $s

John Ousterhout himself best summarized Kevin's early career with Tcl with his acknowledgment that it was KBK who showed "that Tcl can be used to interface to almost any conceivable application." [ref to book]

In isolation, that sounds unintentionally funny.

KBK: That last line sounds like one of Cameron Laird's enigmatic utterances. For the benefit of the unenlightened:

The first few years of Tcl's existence, most Tcl users saw it as an embeddable shell -- a C library that you'd add to your application to give it a command-line and scripting interface. When I picked up Tcl in 1991 or so, I saw that Expect, the [exec] command, and TclX were adding substantial capability for interface to existing applications -- once that weren't designed originally to have a Tcl interface. Inspired by that realization, I started trying to push the idea as far as it would go (incidentally producing the first cross-platform implementation of load), and eventually had wired applications that communicated with X PropertyNotify events, SunRPC, various vendor-supplied C API's, sockets, DDE, .... The interesting thing was that the interface layers that talked these protocols were the only C modules I wrote. 'Wish' and 'tclsh' were the main applications -- the interfaces were embedded in Tcl, not the other way around. The fact that I and a few other brave souls were actually successful treating Tcl as an integration platform rather than a library came as something of an epiphany for John.

"GE Computer Department in Phoenix made mainframes. It was bought out by Honeywell in 1970 (I worked there from 1977-1984). .... 1984-1990 I was studying/teaching/working at University of Illinois Urbana-Champaign. In 1990 I went to Northrop Research in Palos Verdes, Calif. When they closed the plant a year (to the day!) later, I came to GE, having been referred here by a colleague from UIUC, who had started working here a year earlier."

See also KHIM

ARR 2007-12-11

Hi Kevin, today I found this interesting information about your tclSolver project. I am currently working on an engineering worksheet which is part of a product configuration system. I think tclSolver could be a very central component within this system which is a mission critical application.

Are you still working on it? Are you interested in any cooperation in that area? I did not find any sources on the web. I am able to get some people helping us in c and c++ to make a TEA compliant package and extent the functions also.

Please let my know how we can get further on this subject. Please mail me at liesche|AT|

What's the B for? Bernard.