Leaving for Naperville, Illinois

I'm leaving for Naperville, IL in the morning to attend the Thirteenth Annual Tcl/Tk Conference.

Flying, of course, since if I'd taken the train I'd probably be somewhere in Colorado or Nebraska right now.

— Michael A. Cleverly

194 comments | Printer friendly version

$2 muffins and 31 = 24 + what?


The flight from Salt Lake to Chicago was mostly uneventful, other than a minor hostage situation: American Airlines was trying to charge their captive audience $2 for a single muffin. Luckily juice, soda, and water were still somehow free. (I didn't buy a muffin on principle; neither did Lin or Todd.) If I'd spent the $135 upgrade to fly first-class (something I haven't done since Shauna and I ended up in first-class from Salvador to Brasilia a decade ago) hopefully they would have had all-you-can-eat muffins.

Here in Chicago the same franchisees apparently own and operate both Baskin Robbins 31 Flavors and Dunkin' Doughnuts under a single roof, and they also serve deli sandwiches.

When asked what he'd like to order Lin responded to the teenage clerk by asking where they kept the other seven flavors hidden (only twenty-four flavors were on display to choose from). She responded with a blank stare. "You only have twenty-four flavors of ice cream here" he pointed out. "Yeah, so what?"

Lin dropped that line of inquiry, probably realizing (like I was) that 7 = 31 - 24 might be beyond her abilities. Needless to say Lin's double-scoops were much smaller than Todd's & mine.

One toll road later ($0.80, exact change; how many people probably end up having to overpay to a full $1?) and we found the conference hotel conveniently located right off the freeway here in Naperville.

Right now the Tuesday afternoon tutorial sessions are in swing. After typing this post, catching up on email, and maybe even sneaking in a quick nap, I'll wander downstiars, find Lin and Todd and hopefully bump into Will or Steve or some of the other regulars before dinner.

The schedule for the technical sessions this year looks awesome. Lots of interesting papers to be presented.

— Michael A. Cleverly

293 comments | Printer friendly version

SQLite Keynote

D. Richard Hipp, author of SQLite presented this years keynote. A fascinating jaunt from the civilized realms into barbarian territory and back. Here are some of the notes I took—

(Incidentally I noted that Richard pronounces SQLite S-Q-L-ite, not Sequel-Lite.)

Non-Comment Source Lines in SQLite 3.3.7 tree

Some of the major users of SQLite that he's allowed to talk about

Possibly the most widely distributed Tcl extension in the world.

Uses for SQLite

  1. Replacement for client-server RDBMS
  2. Stand-in for enterprise RDBMS during testing and demos
  3. Local cache of enterprise RDBMS data
  4. Persistence of objects, configuration
  5. Complex data structures
  6. ...

Complex Data Structures

Automated undo/redo using triggers.

Application File Format

What if ...

Key concept: SQLite wants to replace fopen()/[open] not Oracle/Oratcl.

Useful example code/utilities

Crossing into barbarian lands now...

Q: What is Full Text Search?
A: In brief: what Google does.
Q: Why is full text search important?
A: Internet search enginges have users spoiled. Modern applications need to support full text search in order to be competitive.
Q: Is it difficult to implement?
A: It is tricky for large data sets to get it right.

Basic approach

  1. tokenize into words
  2. case folding
  3. stemming (convert each word into its root form; porter stemmer very popular stemmer for English; recommended -> recommend; books -> book)
  4. remove stop words
  5. for each word left create posting list per word

OR queries do an intersection. AND queries do a union.

Phrase Queries: naive method: do an AND query, then examine every document in the result set in a second pass and eliminate those that lack the phrase. Very bad performance in pathalogical cases. Instead update posting list to store document:position (multiple occurances included multiple times).

Basic Operations

Keeping the Working Set Small

Full Text Search (version 1) built into SQLite 3.3.8 released Monday

As of SQLite 3.3.8 (released Monday!) full text search support in SQLite. Ricahrd's authorized to announce help from engineers at Google. Later question elicited that roughly half of the FTS code was written by him & Dan, the other half by four engineers [didn't have time to write down their names] from Google. He isn't able/can't comment on their motivations/plans/internal usage. (Obviouslyy won't be replacing their search engine with SQLite.)

Some example usage

CREATE VIRTUAL TABLE email USING fts1(content);

CREATE VIRTUAL TABLE email USING fts1("from" TEXT, "to" TEXT, subject TEXT, body TEXT, tokenize porter);

SELECT rowid, subject FROM email WHERE email MATCH 'wyrick sqlite';

SELECT rowid, subject FROM email WHERE email MATCH $::querytext;

MATCH: when left operand is the name of the table match against any column can specify a particular column $::querytext can specify columns i.e., "from:wyrick"

Built in snippet generator: SELECR rowid, snippet(email) FROM email WHERE email MATCH ...

FTS1 comes standard with Tcl bindings for SQLite (>= 3.3.8).

Potential uses:

Pervasive Full-Text Search (users want it; made easy using Tcl and SQLite).

— Michael A. Cleverly

836 comments | Printer friendly version

The ActiveState of Tcl

The second presentation after D. Richard Hipp's SQLite keynote was Jeff Hobb's ActiveState of Tcl.

Reviewed Tcl development history. New versions of Tcl/Dev Kit, other AS programs. Added support for OS X very near. Reviewed major developments in Tcl 8.4 and 8.5. (8.4 20%-30% performance improvements, matches 8.0 [pre-unicode] speed, but now with Unicode & solid threading support, unlike 8.0)

Hopefully 8.5 will go beta in December 2006 with a target of a spring 2007 release. 8.6 or 9.0 after? Will depend on what TIPs get complete for 8.5 and which ones slip.

New TEAPOT package repository. Teapot is the server; teacup is the client (separate clients for "admin" and regular users apparently). Consider the version on the conference CD as a release candidate, final release later this month.

Does require TIP #268 versioning (which they've back ported to 8.4). Command line only client yet, no GUI (they want to get the client solid first). SQLite database is used as the meta data store.

Two archive formats: Tcl module (meta data embedded as Tcl comment(s)). Zip archive (general; meta data stored in .zip file teapot.txt). No [centralized] documentation integration integration yet.

ActiveState won't take binary submissions from package authors--their teapot server will only host binaries they've built from source. Other people can run teapot servers and a teapot client can be configured to point to multiple teapots.

— Michael A. Cleverly

311 comments | Printer friendly version

Larry McVoy's Love/Hate relationship with Tcl gives birth to L

Larry McVoy gave the first afternoon talk. I missed the first couple of minutes of the beginning of it. Again, here are my notes:

Why not use someone elses $SCRIPTING_LANGUAGE. None can be extended from C as easily as Tcl. "Python is the obvious choice but has crappy bindings to Tk." Java slow startup [and something else I didn't write down in time]. Says he tried to convince Sun originally to make Tk be the GUI for Java.

Why not pure Tcl? No C-like structs in Tcl. Associative arrays don't count. No lint like tools in Tcl (dynamic languages make that impossible to get 100% right) No type checking. Optimizing Tcl is harder than L (L is a "weaker" language, easier to optimize).

Why not C & native GUIs? No need to assemble a Tk + Title + ... + distro. GUI functionality—it's still hard to beat the canvas and text widgets. Development costs are at least 6x higher (3x engineering cost, 3x QA cost) for native code. They target a lot of platforms: Windows, MacOS, X11, and maybe java. More variations == more support costs. Goal of BitMover is to drive the company to where they need zero support.

Basic types: int, float, string like C (mostly). variable interpolation requires ${foo} or really just any L expression ${1+2}. :magic_constants such as: text(".t", :bg, "white", :fg, "black");

Locals get initialized to zero, the empty string, whatever is appropriate. Strings are first class objects. No character type ("we are unicode, what the hell is the length of a character?")

Associate arrays (swiped Perl syntax for initializing them). Keys and values are string. Tcl dicts under the covers.

C like arrays (int v[]). They look like C but don't need specified size. They autogrow on assignment.

Structs: currently like C but may get initializers. Tcl lists under the covers. Structure fields are in "::L::struct eg" (for introspection).

Pass by value as expected like Tcl & C.

By reference: automatic for hashes and arrays. Needs & for other types. Implemented as syntactic sugar using upvar. L pointers used where upvar won't work.

New Tcl Object:

struct pointer {
        int    depth; //upvar #depth
        string name;  //tcl var pointed to
        string index; // optional index

Used in places like: checkbutton(".f.v1", :variable, &foo.v);

Control flow: Usual C stuff plus, perl regex statements, iterating over hashes. Some minor sugar: unless {expr} stmt; until {expr} stmt;

Switches cases may be constats, regexps, or globs.

loops for hashes. iterating over an array of whatever. Looking for a better syntax than: foreach (h as key => val) {...}

Top-level compilation. Because there is no L interpreter path.

Changes to the Tcl Parser. #lang(tcl), #lang(L) to switch languages. If filename is not .L (.l ?) then assume Tcl mode. When you see #lang(L), grabs until eof or #lang(tcl) and feeds it to L. Don't need to match curly braces.

Left to do: Type checking isn't done; They haven't written substantial programs in it; Plan to rewrite their [BitMover's] GUIs in L; Check back next year...

Future work: scoping, pre-compiled modules, optimizations, debugging, dynamic type checking.

Last slide: L@bitmover.com. Apparently they have a Wiki somewhere, but it only has one page at the moment, and they didn't mention what the URL was.

Gerald Lester asked about: foreach i in v { ... }. Unless Larry has studied that carefully will he remember that i is an index value or a value.

Richard Hipp: So does the name of the language stand for Larry? Larry: It doesn't stand for "Loser". Earlier names: LORD (Larry Oscar Richard D____), HINT (Hint Is Not Tcl). Open to suggestions.

License is Tcl license, no strings attached.

Guiding principles: if we can't compelling use case we just don't. (Larry has to be able to understand it.) Slammed C++ here (wish I'd got it word for word—very inflammably quotable ;-)

Gerald: You didn't mention catch or anything like it; do you guys just not need it because you don't make errors? Larry: need some experience first. Pointed out that anything that is a Tcl procedure [command] can be called by L, so can use [catch].

— Michael A. Cleverly

1682 comments | Printer friendly version

Relational Algebra in Tcl

Andrew Mangona presnted his work on TclRAL, a relational algebra extension for Tcl. It provides:

Tuple type, 3 part list. Tuples have a heading: attribute name, attribute type.

Relvars are mirrored as standard Tcl variables. Relvars can have referential integrity constraints applied to their values. The extention provides 38 relational operators. No time to cover them all in his talk.

Examples of important operators

Set operations
union, intersection, difference, comparison
Selection operators
restrict, project, eliminate
Join operations
join [natural join], times [cartesian product], divide, semijoin, semiminus
Computational operations
summarize, extend, rank
Linkage to other Tcl data types
ordinary variables, arrays, dict, matrix

TclRAL enforces declarative referential integrity constraint: Association Constraints, Partition Constraints and Correlation Constraints.

Any time a relvar is modified the constraints are evaluated. Either you pass the constraints and can go forward; otherwise throw an error.

Association constraints define traditional (database-like?) referential constraints. Attributes in one relation refers to attributes in another relation. References are identifiers. Multiplicity and conditionality can be specified.

Partition constraints define a set of relations that are completed and disjoint sub-sets of some super-set relation.

Correlation constraints: Correlation constraints define an integrity constraint between two relvars that is mediated by a 3rd. The correlating relvar references the two other relvars in the constraint. Often arises in a many-to-many situation.

Lots of screenshot examples, but with a notation that while I'm sure is common to those who work with relational algebra, I did not understand well enough to transcribe from the back of the room.

TclRAL is NOT:

What's next:

— Michael A. Cleverly

266 comments | Printer friendly version

Spider Widgets

Dr. Stan Driskell of CHIMetric. A human factors person more than a Tcl'er. Not interested in close vs open source software. He is interested in results. He has patented these ideas. Can talk offline about that. Results have been experimentally verified in two separate experiments and seven focus groups.

Productivity increase calculated using Fitt's Law.

Hard to talk about without the pictures that accompanied his talk. Looks like it might be useful for applications where people need to be able to quickly do a lot of work in a GUI.

— Michael A. Cleverly

237 comments | Printer friendly version

Browsing in Tk: Enticing Firefox into Tk and Tkhtml3

The next two afternoon talks (Steve Landers and then Dan Kennedy, both very talented programmers from down under) both deal with the marriage of web browsing and Tcl/Tk. I'll report on both of them together.

Entice: Embedding Firefox in Tk

Steve Landers: "I was going to write a language called S but that was already taken. Now L is too."

"Tcl meets Ajax. 100% buzzword compliant."

Embedding browsers in Tk

Possible approaches

  1. Browser library wrapped as a Tcl extension (TkGecko). Pro's: complete, controllable from Tcl. Cons: can't be self-contained. Huge footprint. Difficult to build Gecko.
  2. Tk-based browser (TkHTML). Pro's: 80/20 approach, can be self-contained, easy to control from Tcl. Con's: some situations need the last 20% (that percentage decreasing over time as work on TkHTML3 progresses).
  3. Re-parent browser window into Tk container. Pro's fully featured browser. Cons: not so easy to control from Tcl. Applications aren't self contained.

Entice is built on top of [frame -container], and GPS's TkXext (search for X11 window ID by window title, get a handle, re-parent the window by ID).

Firefox talks back to the entice library on a server socket listening from Tcl. Various security features. Tell firefox to connect back to localhost on Entice's port, and get a custom chrome (.xul). Entice substitutes the listening port into the .xul and sends to Firefox.

Controlling Firefox via XMLHttpRequest. Javascript object running in the browser that waits asyncronously for a connection. Basically a GET operation that is asyncronous. It is at the heart of AJAX.

Thanks to GPS for making it possible (TkXext) and Mike Doyle for sponsoring it.


The problem with existing HTML widgets is simple: "Most documents found on the WWW are rendered incorrectly." Lightweight web browsers generally have the same problems (often because CSS is not supported well—if at all).

Although not always possible, Tkhtml3 tries to focus on CSS. Delegates most HTML functionality to the application. More of a CSS renderer than an HTML renderer.

Anticipated uses

HTML can be specified incrementally. .css (zero to many) must be fully prepared.

The document tree: constructed by parsing step, creates a tree. Not DOM compatible (but provides simillar levels of functionality). For the time being only read access to the tree is provided.

Document tree can be queried: for root node, for all nodes that match a specific selector, for whats under a given mouse coordinate.

Tkhtml does not implement hyperlinks(!). Applications are expected to:

This approach makes for maximum flexibility.

Element handlers: parse handlers, script handlers, and node handlers.

To support images the application implements the -imagecmd callback. The callback is given a URI and is expected to return a Tk image.

Tkhtml3 uses images as backgrounds, list markers, and as replaced content.

Replacement objects. Any node in the tree can be mapped to display in another widget in place of a node's content.

Applications can specify regions of text to be tagged.

Hv3: A web browser built using Tkhtml3

Leverages existing Tcl/Tk extensions. [img] allows it to support more image types than any other web browser(!). The tls package for SSL, etc.

Project status

Available at tkhtml.tcl.tk. The shared library on Linux is ~220kb.

— Michael A. Cleverly

390 comments | Printer friendly version

Tcl Core Team Panel

After the final afternoon talk was the annual Tcl Core Team Panel Q&A. Present were Joe English, Kevin Kenny, D. Richard Hipp, Donal K. Fellows, and Jeff Hobbs.

Here are the notes I attempted to transcribe (in realtime). As I should have expected Larry McVoy ended up dominating the conversation with his perennial rants about Tk's L&F. And dropped the f-bombs that were missing from his talk earlier this afternoon.

(Note: what follows will not be 100% word for word, but is as close as I could and still try and keep up typing...)

Q. [JCW] What is the direction for moving Tcl_Obj to hydra instead of stork model or some measure of immutability?

A. [JH] Miguel Sofer proposed an idea on the tcl-core list last week involving returning a code (currently signature is void). ...

A. [KK] One thing Paul Duffin had in feather that would be almost backward compatible is that he had an extended Tcl_Obj structure interfaces. One was list, support by index and iterator. How he managed to extend and keep it almost compatible was to put a NULL GetStringFromObj slot and overlayed one of the other pointers to the extending things. It's nasty. Horribly nasty. It would be a potential path forward if we decided to swallow our bile and adopt that route.

Q. [Something about the OO-tip 279]

A. [DKF] 279 is an alternative for how to do OO in the core proposed by chief XOTcl maintainer. It describes how to do XOTcl in the core. It satisfies some of the needs that were identified in [Tip] 257. ... I don't think it can be as optimized as much as 257 could be. For obvious reasons I don't favor it over 257.

[Steve Landers]: We don't throw pies at the TCT because they haven't voted on it yet. ... Let's not beat up on Donal or the TCT because there hasn't been any vote. If the TIP is accepted and you don't like it then you can beat up on them. Those who think it can't be done should get out of the road of those who are doing it (general principle).

[KK]: The result of the vote, whatever it [eventually] is will disappoint a large number of people.

Q. [Larry McVoy]: What needs to be applied to whom/where to get a distribution that doesn't have a BWidget checkbox, Tile [etc.], and no redundant implementations. I don't give a f*** if it is in the core or not. ... If you just came to Tk you'd think it was sh*t. ... But if you know to take this from BWidget, and this from ... Our company has a little bit of money and a little bit of time. We're prepared to fork Tcl/Tk if that is what we have to do to move it forward. This is the white elephant sitting in the room ... I don't give a f*** what you want. I care what about users want and what they see when they come into the Tcl community. ... Here is TclPro, this is what you want. What do we have to do to get that.

[JE]: ActiveTcl is filling that role.

[LMV]: It's 20 megs ... I want a 5mb image. If I wanted [bloat] I'd go to Sun.

[JE]: What you want is everything you need?

[LMV]: Everyone wants a tree widget ... wants sh*t that Microsoft has shipped for 20 years. ... It's easy to say that I can't pick the right [stuff] ... if you need someone to do it, I'll do it. I'll volunteer to decide. If you don't want me to decide, pick someone to decide. There should be a CD that I can get with stuff that I can create decent looking applications from ... without having to carry along the 95% of the sh*t in BWidgets that I don't need.

[JE]: How close is stock Tclkit?

[JH]: Sorry, but I think the rest of the crowd is missing the point. This is the success of Ruby on Rails. It succeeds because there aren't 10 ways to do it. ActiveTcl does support lots of legacy needs by packaging (iwidgets, bwidgets, etc.). What they are looking for--as far as 8.5, with ttk it gets a lot of them, but is missing some.

[LMV]: What we're looking for is you guys who know more than I do, to give us best of breed.

[JE]: You do need both.

[LMV]: I'm looking for best of breed. If I have to pick through 19 different checkboxes I'll go do something else.

[JH]: Too often we see people who come into the Tcl'ers chat and ask where to get a combobox. ... Solved in 8.5 ... [talks about all the possible answers and various places to download]. That does no service to Tk or to the community.

[Someone]: Start throwing out the ones no one cares about.

[WHD]: Once you've got Teapot going, you could let ActiveTcl include only best of breed ... then those that want something else [legacy] can get ...

[MR]: No problem with choice, huge problem with forcing people to make a choice.

[JH]: ... maybe it has to do with just better packaging like Tktreectrl that very few people are willing to [build] so that it's [just] right there. Everything we build for what is in ActiveTcl 8.5 when Reinhardt updates SuSE distribution for their 8.5, and for whoever does the Debian mantle, when they upgrade. ... I think you'll really see that it takes off. It's an experience I've seen inside ActiveState who were agnostic about Tcl except that it was old and doesn't look good, but we turned that around with 8.5 [with Tile] ... it pulled [people] back over. More interesting thing, one of the guys asked, what do they do if they don't have you on staff? ... Hopefully they'd find an answer on comp.lang.tcl or the [chat].

[Oscar]: <Talking about RoR point> -- you want sensible defaults. If you want to do something really simple you should be able to do something simple. ... You start with Tk and you get something that looks crappy and there are a zillion options you can try ... if there was [good] defaults ... the original Tk ... it looked like sh*t but that was the standard [of the day].

[Someone]: There are additional widget support in tklib under widget that is using the new ttk.

[JH]: That's my personal widget library. That's the only one worth using.

[Someone]: Somehow we need to steer away from presending with two places to go get things.

[KK]: There is nothing, once tile and oo are in the core, there is nothing [in principle] for those moving into the Tk core.

[JH]: ... megawidgets and oo go really good together. Snit is a very poor commercial solution for debugging. ... not very friendly error messages which is why some core oo needed to launch a whole wealth of functionality at the Tk level.

[Someone]: Is the batteries included [a Tk only concerned]

[LMV]: ... what I'm looking for is the out-of-box experience for new users. Every /. little brat in the world who knows how to make icons and applications. You pop up a Tk app and it looks like something I wrote which is not a positive endorsement. The out-of-the-box experience should look like Brian [Oakley's] stuff. ... No one cares about that legacy [Motif] L&F.

[JE]: People will come out of the woodwork ...

[LMV]: What is their age? How many 25 year olds come out? You can cater to the people who are growing pot bellys and beards, and I'm growing in that direction ...

[Someone]: <A document with sample question/answer>

[MR]: If you are trying to document something that really smells bad you'd be better to just change it in the first place.

[JH]: ...

[David Bigelow]: I nominate Will--he does a good job with his Snit documentation. ... One thing I think we have to be careful with legacy vs future, this isn't apple ... it's largely dependant on the user community, their ideas and skills. We've used a little bit of everything. BWidget, looking forward to Tile. It's only come out over time because of the evolution of the process. ... From a new user base, if you want to get up to speed quick and get a certain look, a certain feel, here are the recommended packages. I think it is kind of dangerous to cut off stuff because even today there are spinoffs. ... We should respect the rest of the stuff that has evolved over time.

[Steve Landers]: How many people here do commercial GUIs on Tcl/Tk, not just for internal use, but that you actually have to market. Now we're narrowing it down to Larry's question to people who should say what is best of breed. If you go to the Tile site on the Wiki it gives several examples, you'll know the sorts of issues we have to deal with. Preserve whats great about the Tcl community while stimulating progress. I don't think we need to get every fanboy to describe, but what we're currently doing is putting up false barriers to people adopting Tcl.

[LMV]: It's interesting watching the Tcl development process, to some extent it's mirrored sort of the process I've gone through in running BitMover. Early on it was wild and crazy, stuff happened really fast. Then you get an installed base. Then you get nervous about screwing up your installed base. Then I hired Oscar "you don't let me do anything man". At Sun [the idea] was that "it's got to perfect." ... TIP process same ... If I don't ease up good sh*t doesn't happen. You've got to back off and play some. It's a balance. You don't want to screw all your customers, but you don't want to stagnate.

[Steve Landers]: <clarifies that it's Tk, not Tcl>

[LMV]: Tcl is in reasonable shape. Tk not so much. It's been very slow, lots of various off shoots. Bwidgets was cool but it didn't get in the core so it kind of died. There needs to be some process that lets things move faster. If the core can't let things move forth some other process needed. ActiveTcl model not good (everything goes in).

[JCW]: I don't understand what is wrong with a repository and a page of recommendations.

[LMV]: The answer is that what a new user wants, is going to do apt-get install tcl, apt-get install tk, and they are done. If what they get at that point is isn't what they want, then they don't know what teapot (what the hell is a teapot?) This is the failing of the core model, is that the good stuff isn't in the core. Credit where credit is due, what I said isn't right, the stuff that is in the core is really really good. ... People ought to recognize [that]. People are going to think Larry is this *sshole who flames. People think Tk is this ugly thing that is from 1980. Most people only see the flames and they only see the ugly stuff. Until there is something that is called Tcl/Tk, looks good and is there ... it's perfectly fine to have Tcl/Tk-lite, but what people think of Tcl/Tk ought to be the stuff that is best of breed.

[Oscar]: GTK is horribly painful. But you look at the application thats nice. They jump through hoops--they don't have a zillion [implementations of] widgets

[WHD]: A whole lot of what I've heard over the last 20 minutes is stuff we've heard over and over. Let's be fair here. We're on a road map to get Tile into the core by this spring. Getting tile written was a major piece of work. I'm sure Joe can talk about that. I'm sure it's been lots of pain for him. It is a major accomplishment. It deals with very many of the problems we had back in Ann Arbor. We're on track to getting it in. It's not like nothing has been happening. I hear what you are saying Larry, but we are getting there. It is happening. Lets not sell it short.

[JH]: Anything besides Tk?

[Someone]: Is there any plan to put UDP support in?

[JE]: I still say we should pull up Ceptcl, polish it off

[JH]: Ceptcl did it well. You do need a parallel set of commands stream commands. ... It does have to have a parallel side bit to support that. I'm not sure if people when they say that if some efforts to make all [gets] and [puts] should support UDP, or just some way to do UDP.

[Someone]: TclUDP adds to fconfigure. Is it just because 8.5 has this channel command?

[CF]: <No UDP gurantees...; [hard to hear]>

[KK]: I suppose you could have a bunch of read-only fconfigure

[CF]: Is there anything else besides UDP?

[JE]: I'm not sure how well TclUDP does, but Ceptcl does multicast very well. Ceptcl does a very good job of giving you the information of where that packet came from.

[DRH]: I used it some years ago and it would tell you but I always had trouble with it. We had to kludge around it ... I never traced the bug down.

[CF]: Would you like to wrap up?

[DRH]: Yes we would.

— Michael A. Cleverly

241 comments | Printer friendly version

"Tcl as a way of life"

My notes from the Richard Suchenwirth's invited talk. (This was a great surprise and a treat, and worth coming to the conference just to meet him and hear him speak.)

You code it, you test it and it works. Some languages give you this more often than others.

Majored in Chinese studies with focus on linguistics and computer science, except there was no computer science speciality (formally) in 1977. Took a seminar on linguistic computing--was only student.

First big iron was an IBM 1130 programming on punch cards in Fortran. Had 32K. Moved on to Univac, Vaxen, etc. until personal computers. Languages wise looked around and did substantial things in Basic, Lisp, Prolog, C, Forth, APL. Quite a variety of machines and languages. He thought this would continue for ever.

12 years ago he switched to industy (Siemens). 10 years ago first introduced to Tcl. Decided to use it as a configuration and flow control language. Worked developing software dealing with postal automation. Internally mostly in C and C++, but Tcl used in various parts for special settings, testing, and configuration. Tcl is a good language to work with.

Expected an even better language to come along, but nothing has. Except awk on the command line for short things.

He wondered what makes Tcl different? Foremost conclusion is that Tcl is a friendly language. It has a friendly syntax that doesn't frighten people away; can be sketched on the back of the envelope. Tcl has friendly memory management. Tcl has friendly errors--this sounds strange. Errors sound like something bad (newer languages call them Exceptions which makes them sound like high levels of engineering). Error messages in Tcl are the most friendly of all the languages he has seen so far. The other extreme is C where you either get a segmentation failure or bus error. In Tcl you can just type something you know is wrong but Tcl will tell you how you might have wanted to do it right. Works as online documentation.

Not aware of other languages where you can write your own debugger in the language in <= 6 lines yourself. Doesn't think the demand for debuggers is as big in other languages where you are in trouble without them.

Finally when everything else fails, read the manual. Every word of the man page can be read and taken seriously. They are a friendly neighbor. When you need them they are there and you can rely on them.

He's observed that Tcl has a very friendly community. comp.lang.tcl has a lower flame rate and higher signal to noise ratio. He's checked that for comp.lang.c and comp.lang.lisp, etc. He's learned much from the community that is active there.

DKF put one of Richard's comp.lang.tcl posts on the wiki in 1999 (radical language modification). Didn't know about the wiki before. After thinking about it a day realized wiki was a great way to publish information to others. Wiki format allows longer explanatory format. The wiki has been a fascination for seven years now. Has moved a small selection of the hundreds of wiki pages to the Tcl wiki book project (wikibooks is a sister project of wikipedia). The book is now eight or nine chapters. Printer-friendly version is now about 160 pages (on A4 paper).

The three legs that the community stands on worldwide is the wiki, the newsgroup, and the chat (since 2001). It is always worth having a look at the chat.

What makes Tcl feel different from almost all the languages (although Lisp and Logo come close) is the feeling of empowerment. In Tcl it is possible to unconceivably much with comparably little effort. Wishful thinking is a very useful thing in Tcl. And a pen and a back of an envelope. "Tcl might be one of the shortest parsers between specification and implementation." It's a fascinating experience after ten years.

Tcl supports (encourages) simple thinking. If you came from years of assembly you might have a different style but Tcl will support it.

William Occam said "entities shall not be multipled beyond necessity." Make things as simple as possible. Code for today. What do you know about tomorrow? Especially feature creep. Too often we have more features than we really want. Lessons can be taken from extreme programming community. Need to meet in the middle of under-engineering and over-engineering where true engineering occurs. Easier to reach starting from the under-engineering end of the spectrum.

Prefers idea reuse to straight code reuse. One example is the K combinator. proc K {a b} {set a}. Simple programs can be read like poetry. Could put this line of code in a library, but then you'd have to do a [package require ...]. For such a simple thing it is not worth creating a dependency, even on tcllib.

He remembers what hard work it was to write software for Chinese, Russian, Arabic, etc. before the days of Unicode. Tcl's Unicode support is superb. In a world with so many cross connections cannot ignore the fact that other languages [other than western ones] exist. Very pleasant to display in Tk if you have the appropriate font.

If you've looked around the wiki seen pages ending in -lish. Comes from greeklish a greek term when they use latin characters to write greek. His wiki pages started as a fun project.

On the weekends it sometimes happens he is bored. Then it is time for a fun project. Thinking of something that is new interesting that he's never done. Thinks about it, paper and pen as starting place. Design APIs. Go to the computer code it, test it then upload it to the Wiki. It is getting harder and harder to find interesting bits that can be done in half a day that hasn't been done before. Part of the fun is starting from an empty piece of paper in the morning to complete results in the afternoon. Keep an eye on http://wiki.tcl.tk/RS.

Tcl is a great experimental language. One could call it a great computer science library, like Lisp. Possible to write a state machine in ten lines. Great to get something in such short length.

Functional programming. In the last decades there has been considerable development. John Backus presented in 1977 theoretical design of programming without variables. Functions composed with other functions. It was pretty amazing reason. As so often his fingers began to itch. "How would one do this in Tcl?" Didn't take very long and he could run the examples from Backus's paper one by one. After half a day or so he could make a Wiki page describing the code.

Another flavor is reverse polish notation like in Forth, Postscript, or Joy. You have one big variable that is a stack. Every function pushes or pops from the stack. Functions fall together in a way that they do what they should. In English if you describe an algorith, hypotenus. The square root is the sum of the squares. This just describes functions that compose together.

Has heard someone say "advocating object oriented programming is like promoting pants oriented clothing. Sometimes it covers your ass but it doesn't always fit."

NEM posted a wiki page about using [namespace ensemble] as an object system. RS and Miguel Sofer added and sketched out new ideas. Method dispatch is very fast.

Some possibilities and comparisons are always good to have. Doesn't know of any other language that supports so many different flavors of OO. Everyone can hack up their own OO in ten to fifty lines of code. Not so important that a guru come down from the mountain with an OO system.

Fortran and Lisp, still in use after fifty years. He's confident that fifty years from now Tcl will still be alive. On the chat and the newsgroup see newbies asking questions. Community is very patient and very supportive. Best possible reaction.

From ten years of being in the community, not good at hype and not good at proselytizing. Language is not only engineering, but it is also an art form and a matter of taste. You can't force someone to share your taste. What we can do is spread the word. Mention Tcl in suitable situations. Show some Tcl code if it is worthy to be shown. And (most importantly) help people. If we stay a friendly community no need to worry that we'll die out.

— Michael A. Cleverly

223 comments | Printer friendly version

rti(n): A Tcl Binding

Will's first slide made people laugh—


This presentation contains C++ snippets of a graphic nature.

Viewer discretion is advised.

Thought of the day: SQLite rocks.

Also JPL looking to hire someone good. Contact Will for more information.

JNEM: Join Non-kinetic Events Model

Army did not expect it to be delivarable in < a year, but Tcl made it more than possible.

HLA/RTI born because "Your ground sim won't play nicely with my air sim!"

Early efforts: ALSP (Aggregate Level Simulation Protocol or "A Little Slower Please"). DIS (Distributed Interactive Simulation, still in use). Military thinkers decided "We need a Run-Time Infrastructure that supports our High Level Architecture". HLA/RTI was born.


a collection of cooperating HLA applications
one of those applications (a federate can join or resign from a federation)
Message sent from one federate to all interested federates (notices "this happened", orders "please do this for me" but no notion of a return status). Interaction is basically a dictionary containing parameters and their values. Sender publishes interaction class, receivers subscribe to the interaction class.
a dictionary of attributes and their values (couldn't be parameters ;-). A federate publishes attributes of an object class; others subscribe. A federate registers an object; others discover the object. Federate updates attributes of the object; other federates reflect the updated attribute values. (Standard likes to use as many different terms as possible. Member function names are extremely verbose. All RTI API calls are member functions of RTIambassador class.)

Fom-o-rama (when you get together with other federates to decide the FOM—Federation Object Model).

Tcl API goals for the rti(n) extension developed for JNEM

JNEM all exceptions handled by bgerror (with stack traces to the debugging log). Users astounded that JNEM never crashes.

Examples of very verbose C++ code contrasted with their much more brief (and readable) Tcl equivalents.

Some deficiencies

Created a Snit rtiproxy object to avoid these deficienciences. Provides a heirarchial command set (like the [text] and [canvas] widgets). Tk man pages are automatically outline oriented. Snit makes it easier to create simillar structures. Slides showing difference between rti and rtiproxy calls.

JNEM is the sexiest simulation the Army has seen. Has had nine federations want JNEM to join them.

Got permission from project sponsor on Tuesday to open source it the rti(n) Tcl extension being described in the paper. Will work through JPL procedures to do so in the near future.

— Michael A. Cleverly

244 comments | Printer friendly version

Taking a ride on the VME bus

The second talk Thursday morning was by Ron Fox about a small extension that allows experimental physicists (who aren't professional programmers) to control their experiments.

VME bus (VersaModule Eurocard)

Went through a series of slides explaining how the VME-BUS works (arbitration and read cycle).

Bus used in three systems at NSCL:

The extension is targeted primarily for the experiment control systems.

Extension provides not much:

package require vme
vme create name -device amod base nbytes
name set {l|w|b} offset value
name get {l|w|b} offset
vme delete name
vme list

All ~500 lines of C++. Various pure Tcl packages built on top.

Showed GUIs that were developed using the package that control experiments.

— Michael A. Cleverly

232 comments | Printer friendly version

Getting a handle on the weather

Third Thursday talk was presented by Devin Eyre of Impact Weather. Tclshp implements the C API of shapelib in Tcl. Shapelib processes shapefiles which are used to store geographic shapes. Used in Geographical Information Systems (GIS) applications.

contains the shape data
contains index to data in the shape file
contains data about the individual shapes

Other languages have APIs for shapelib too (Delphi, Python, .NET, Visual Basic, Java, Perl, etc).

Various code examples shown. Showed a demo, using the Tcl plugin, of forecasts from advanced predictions during last years Hurricane Katrina.

Extension is licensed under the LGPL and is available on SourceForge.

— Michael A. Cleverly

241 comments | Printer friendly version

Vlerq and Ratcl

Jean-Claude Wippler delivered his talk on Vlerq & Ratcl after lunch. Unfortunately the group I went to lunch with got a bit turned around by some road work/detours in Naperville and I missed the first fiteen minutes or so of Jean-Claude's talk. (Update: Jean-Claude emailed me to let me know that his slides are available online at http://www.vlerq.org/vlerq/346. Thanks jcw!)

Why views? Relational and set and vector operations. Loop-less programming ("think `wham'"). A million-row join is sub-second operation on even an average machine. Persistence for free (views can be on disk). Scales far beyond available memory(!).

Dataflow: changes propagate across view operations. Selections, joins and sorts all become dynamic. Tcl traces can be tied to view changes. View-aware widgets could auto-update the GUI(!). Implication: views automatically track remote changes.

Vlerq is a C (not C++) extension for Tcl. Ratcl is a Tcl wrapper. Data files are compatible with Metakit. MIT-license. Vlerq 3 out now, vlerq 4 in progress (adding dataflow).

A view is a value, not a reference. Can be passed around as arguments (like a dict, not an array). Massive internal data sharing (including disk—memory-mapped files). Makes very efficient use of Tcl_Obj's dual representation. Values clean up automatically. No side-effects (copy-on-write). Views tied to variables are mutable.

You could treat any view as a string (but not usually the most efficient approach). A view is not a result. It is a description of how to get that result. Lazily evaluated. (Very cool!)

Geared for what is fast. Performance tests show that sorting is up to 50x 15x faster than Metakit (which is already quite fast).

— Michael A. Cleverly

241 comments | Printer friendly version

Virtual File Systems—possibly the killer app

The second afternoon talk was presented by Steve Huntley. He talked about his work creating VFS's in Tcl. (I strongly suspect he has more experience applying TclVFS than anyone else in the world!) I was very interested in hearing about his work and can imagine a number of possibilities I could apply it to in my own work.

"Virtual filesystems are the killer app for Tcl total world domination." :-)

Heirarchial filesystems are a universally applicable abstraction. Databases can be made to look like a set of files.

The past

Drawbacks of previous implementations

Challenges of the present

A template virtual filesystem: Only function is to be a complete metaphor (with read/write, all file info services, complete error handling, and adequate performance). Could also be called a service-providing virtual filesystem.

Types of VFS already developed on the template:

They can all be combined/stacked/chained. Analogous to Unix pipes and streams but maps to hierarchial data.


Could be used as a metaphor for handly any tree data (LDAP, XML, etc.). New transport paradigms all the time (P2P, BitTorrent, RSS, etc.) Arbitrary meta data has potential.

Abstraction of data collections. Source configuration (SCM) and content management (CMS), and Package Management.

Could make Tcl virtual filesystems visible to the operating system and thus to all programs. We have the technology (FUSE on Linux and WebDrive on Windows).

Available at filtr.sourceforge.net under the Tcl license. New version, not yet committed, should be there within a week or so.

— Michael A. Cleverly

530 comments | Printer friendly version


Third talk of the afternoon was presented by Clif Flynt. He described his work creating a libtclsh.a for C, Fortran & ADA programmers to link into their code.

I couldn't read Clif's slides (my bad eyesight and all) because they look like they were typeset in 10-point Courier. :-(

Clif's solution packs the contents of the Tcl libraries in a compress format into a memory structure, mount it via a VFS under /mem. Tested with compiling under gcc versions three and four. Final link library for a build with Tk support ends up 6 megs unstripped.

Unclear to me what the advantages would be over star .dll's, etc.

— Michael A. Cleverly

192 comments | Printer friendly version

The Zen of Tao?

Sean Woods gave a verly lively energetic romp through his vision of Tao what he calls the Tcl Architecture of Objects. My notes on what he said:

Classical trees are only half the picture. (The stuff we see plus the roots under the ground.) Usually we deal with dead trees lying on the ground. Where did we get the idea that trees have a starting point? Trees are useful for organizing dead things (dinosaur evolution slide).

Also good for tracking dead people ... well, except everyone has two parents. Maybe for org charts? The CEO the "root"? No, the board really would be (plus all those dotted-line relationships).

The problem

TAO is not an object system. It's not an architecture it's about dealing without one. Uses an sqlite backend.

Unused class strucutres are cheap to keep around. No class strucutre or is implied or assumeed.


Why? Developed to solve certain problems with a family of general purpose web database applications.

Code is text passed into a wrapper. The wrapper breaks apart the code and populates the SQLite database. Don't need the code anymore once it is in the SQLite database.

Objects (anything carried over from method call to method call) is stored in a global array (in a namespace?). A stack tracks what object is currently employing what method.

Currently used in Linux shell scripts, Web-based Databases, and an Content Management system.

"Please still this idea. It works, it's fast, it's on easy on resources."

— Michael A. Cleverly

207 comments | Printer friendly version


Reinhard Max talked about the OpenSUSE project.

"OpenSUSE.org: SUSE's answer to Fedora, just done right." :-)

Current challenges

Build Service hosts all sources, provides build system to create packages, makes available download & mirror infrastructure. Tools are used for local operation on the workstation. Tools are open source. A public REST-based .xml API is provided. Not limited to just SUSE, open for all.

Project space provided can be compared to SourceForge except that it is for binaries where SourceForge is for source code. Automatic dependency rewriting to handle differences between different distributions a package is being built for. Supports conditionals in spec files.

Future ideas are being collected on their Wiki. Plans for translation service. Public beta open now in Q4 2006.

Provided an online demo of building a package.

— Michael A. Cleverly

872 comments | Printer friendly version

A half dozen works in progress

First up: Brian Griffin showed off a Finite State Machine viewer converted from C++ to half the number of lines of IncrTcl. Performance only begins to be an issue when you near 10,000 nodes (but graph is generally unreadable at such scales anyway).

Second: Steve Landers showed off the latest new features in Critcl 2. critcl::preload—removes the need to link statically against dependent libs (not always available on small devices, i.e., cell phones like the Nokia 770). Supports Linux, Mac OS X, and Windows. Now supports Mac OS X Universal Builds (x86+powerpc).

Third: Ron Fox demonstrated more experimental physics widgets.

Fourth: Sean Woods demoed his work on 3d Matrix transformations.

Fifth: Donal Fellows gave a live demo of using the Tip #257 oo work he's done. (Hard to follow from the back due to the size of the font being projected.) One or two syntactic things to clean up before calling for a vote on the tip.

Sixth: Steve Redler pushes the boundaries of custom Tile theming. (Look for it on the wiki soon?)

— Michael A. Cleverly

262 comments | Printer friendly version

The Whim Window Manager

The first talk Friday morning was by Steve Redler. Steve demonstrated the Whim window manager he co-developed with George Peter Staplin. Entertaining presentation and great kiosk potential (an area I dabbled in at a previous employer). Without further ado, my notes:

Ever since he learned Tcl/Tk his projects always seem to succeed. He's a linux zealot :-) for the last nine years because he can tweak every last bit of it. Couldn't tweak X11 window managers because he doesn't have a deep understanding of xlib.

Whim was made possible by George Peter Staplin and the Pwm extension he created to allow more/better interaction to xlib from Tcl/Tk. Supplied the missing bits needed for Tk to be able to be used as a window manager. George is an xlib expert.

The background is a Tk canvas. Has weather info and Tcl'ers Wiki rss feeds for real time information. Task bar is a secondary component (separate starkit). Built in ability to take a screenshot.

Started project because he had usability issues with Microsoft Windows and various Linux windows managers. Works with lots of open windows. Whim allows him to add some simple Tcl code to control new behaviors that are more usable for him. Configuration through text files (with Tcl code). No GUI to configure the window manager (yet).

Since Whim is a starkit you can run it under another window manager (Gnome, KDE) and try it out first. Or run Whim inside of whim. Has support for multiple desktops (workspace management?).

Whim applets can be internal to Whim or external programs. Have shared IPC via shared arrays (array sync) built on (inspired by?) the work Jean-Claude did some years ago on Tequilla.

Whim has had support for using Tile since the beginning.

One good use would be industrial automation and kiosk development where you want to tighten things down interaction-wise. Goal is to have it work as a GUI in industrial plants where he has full control but kiosk users don't.

Been in use around the clock for approaching two years now.

— Michael A. Cleverly

171 comments | Printer friendly version

Increasing future bridge safety in Oregon with Tcl

The second talk Friday was Michael Scott talking about how Oregon rates the safety of highway bridges.

Rating is done to compare the bridge capacity with demand imposed by vehicles. Large number of diagonally-cracked bridges exist (fatigue, corrosion; reduction in capacity). Purpose of assessment: vehicle weight restriction and prioritization for repair.

Tcl extension built to make use of OpenSees, an open-source software framework for computational models and solution algorithms for finite element analysis of structural systems developed at Berekely.

Tcl fully programmable, thus suited to repetitive nature of moving load analysis. Showed some example scripts (foreach truck $truckLibrary { ... }). Calculates a statistical rating for each bridge. Can graph rating index at all critical locations for each bridge. Makes it possible to do targeted repairs.

Future enhancements:

Thanks to Oregon Department of Transportation for sponsoring this research.

— Michael A. Cleverly

51 comments | Printer friendly version

Database-backed GUI testing framework

Third talk was presented by Gerald Lester.

Designed to test computer aided process planning and shop floor manufacturing system. GUI built to enforce business rule on an Oracle database.

Gray box testing: gather important state info at beginning and the end while monitoring database transactions. Tester friendly: record/playback model (no need to write scripts though recordings must be "editable").

Not designed to be a generic testing tool. Their tool is designed for their application, but the ideas should be applicable to other projects. Techniques can be re-used in testing other GUIs that are front ends to a database with business rules.

State capture: walk visible widget tree. Capture logged in user, variables in widgets. Extract information from the Oracle data dictionary (common cause of bug reports in the field is when a DBA has added a unique index on a column that wasn't intended to be unique). Capture GUI events. Database "events" are compared, not actually played back.

— Michael A. Cleverly

53 comments | Printer friendly version

Laptop charging woes

I've been using a 15" PowerBook now for a little over two years. In the last day or two I can no longer get the laptop battery to charge. When I plug in either of my two power adapters (or even a friends brand-new one) the orange light comes on, but the battery does not charge (or at least not very fast). Leaving it plugged in and charging overnight moved me from 7% battery to 10% battery.

When I'm plugged in with the laptop on (and not sleeping) the battery recharging icon will flicker on for a somewhere between a half and a full second and then go back to the battery-indicator (and the screen dims). After another second or so the indicator goes back to charging on AC power and the screen gets brighter. (Very annoying to use this way with the brightness constantly alternating/flickering back and forth).

I haven't been able to come up with the right combination of search words while Googling to find anyone else describing this exact problem. The closest I've found to anything helpful on Apple's website is their troubleshooting iBook, PowerBook G4 and MacBook Pro power adapters. But my symptoms don't match any of the ones they list.

I guess I'll need to take my laptop in to the local Apple store tomorrow and hope they can help (I do have the three year AppleCare Protection Plan still so I should be under warranty). I tried to sign up for an appointment for tomorrow but you can only do that if you are a ProCare customer; all non-ProCare customers can only make same-day reservations.

I haven't ever heard of ProCare or how it differs from AppleCare. I tried going to www.apple.com/retail/procare but that page consistantly causes Firefox 1.5 to crash (on my work laptop). So it remains a mystery to me what ProCare is...

— Michael A. Cleverly

206 comments | Printer friendly version

Lists of books and how I rate

Two lists of books I've come across recently:

How many of these ostensibly great books have I read? Well, I better live for a long time yet because I'm nowhere near ready to die based on my reading! Here are the books from that list that I've read (books I at least started—but never [yet] finished—are marked in italics).

1,001 books to read...

  1. Cryptonomicon (Neal Stephenson)
  2. Neuromancer (William Gibson)
  3. The Hitchhiker's Guide to the Galaxy (Douglas Adams)
  4. Stranger in a Strange Land (Robert Heinlein)
  5. To Kill a Mockingbird (Harper Lee)
  6. The Lord of the Rings (J.R.R. Tolkien)
  7. Foundation (Isaac Asimov)
  8. Nineteen Eighty-Four (George Orwell)
  9. Animal Farm (George Orwell)
  10. The Hobbit (J.R.R. Tolkien)
  11. All Quiet on the Western Front (Erich Maria Remarque)
  12. The Sound and the Fury (William Faulkner)
  13. The Great Gatsby (F. Scott Fitzgerald)
  14. Billy Budd (Herman Melville)
  15. Heart of Darkness (Joseph Conrad)
  16. Treasure Island (Robert Louis Stevenson)
  17. The Scarlet Letter (Nathaniel Hawthorne)

That makes 1.69% of the list I've read. As for the top fifty science fiction & fantasy books, I'm doing a lot better at 22%:

Top 50...

  1. The Lord of the Rings (J.R.R. Tolkien)
  2. The Foundation Trilogy (Isaac Asimov)
  3. Stranger in a Strange Land (Robert Heinlein)
  4. A Wizard of Earthsea (Ursula K. Le Guin)
  5. Neuromancer (William Gibson)
  6. Fahrenheit 451 (Ray Bradbury)
  7. Ender's Game (Orson Scott Card)
  8. The Hitchhicker's Guide to the Galaxy (Douglas Adams)
  9. The Silmarillion (J.R.R. Tolkien)
  10. Starship Troopers (Robert Heinlein) [one of the books I'm currently reading]
  11. The Sword of Shannara (Terry Brooks)

Yes, in case you're wondering, it is true I haven't even begun to read #26, Harry Potter. As a general rule I avoid series that aren't complete yet (evern since I had to wait—impatiently—for David Eddings to finish up The Mallorean series years ago :-).

What books have you read from these lists?

— Michael A. Cleverly

226 comments | Printer friendly version

Native Portuguese speakers outnumber those of French, German, Italian and Japanese

An article in todays New York Times begins:

More people speak Portuguese as their native language than French, German, Italian or Japanese. So it can rankle the 230 million Portuguese speakers that the rest of the world often views their mother tongue as a minor language and that their novelists, poets and songwriters tend to be overlooked.

And concludes:

Spanish-speakers have sometimes jokingly dismissed Portuguese as simply "Spanish, badly spoken." But because of Brazil's huge size and dynamic economy, cities like Buenos Aires and Santiago, in neighboring countries, are now awash in fliers and billboards offering Portuguese language courses.

"For 850 years, our neighbors next door have been saying that there is no future for Portuguese," said Mr. Soares, of the community, referring to Spain. "But here we are, still. The dynamic for the language may come from Brazil, but there is no doubt in my mind that Portuguese as a language will remain viable."

Personally I've always viewed Spanish as degenerate-Portuguese. (Since Portuguese has a wider range of vowel sounds than Spanish... :-)

— Michael A. Cleverly

65 comments | Printer friendly version

[chan available]: TIP 287 patch available

Thursday I authored TIP 287 which proposes adding a [chan available] command to Tcl 8.5. This command would allow programmers at the Tcl level to introspect how much input is currently buffered & available to be read on a channel.

This command would be very useful to proactively avoid a potential class of DoS attacks on network daemons implementing line-oriented protocols (such as HTTP, SMTP, etc.)

This afternoon I finished my patch to implement the proposed functionality and uploaded it to SourceForge (TCL RFE #1586860).

I expect this TIP to be totally non-controversial and hope that the TCT will vote on it (and accept it! :-) prior to the December 1st feature freeze for Tcl 8.5.

— Michael A. Cleverly

102 comments | Printer friendly version

One week until mid-term elections

Mid-term elections in the United States are a week from today.

In the spirit of Halloween I invite all my family & friends to read How to steal an election by hacking the vote (also conveniently available as a PDF) and ponder on the fact that it would only take one bad apple... (no, not that kind of Apple Rachael! ;-)

Oh, and potentially that one bad apple could be in a whole nother country...

Reminds me of listening to the Doug Wright show on KSL (something I generally avoid doing) prior to the primary elections earlier this year. Doug's guest was either the Lt. Governor or someone from his office who was on talking about the new electronic voting machines that were going to be used for the first time. When asked whether people should be concerned over the security of electronic voting the answer was something along the lines of "well to tamper someone would have to be willing to commit a pretty big felony." It struck me as absolutely one of the dumbest things I'd ever heard anyone say—ever.

If you're too busy to read the Ars Technica article then at least watch this relatively short video please.

— Michael A. Cleverly

575 comments | Printer friendly version

-> Next month (with posts)
-> Last month (with posts)