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
Monday, October 09,
2006
at 21:29
194 comments
| Printer friendly version
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
Tuesday, October 10,
2006
at 13:57
293 comments
| Printer friendly version
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
- Tcl 54.28%
- Tcl Bindings 8.55%
- Core C 35.71%
- Other 1.46%
Some of the major users of SQLite that he's allowed to talk about
- GE
- Apple
- AOL
- Sun (Solaris 10)
- Subversion
- Yum
- Philips
- Monotone
- General Dynamics
- Toshiba
- Symbian
- Firefox
- Federal Aviation Administration
- Microsoft (xbox)
Possibly the most widely distributed Tcl extension in the world.
Uses for SQLite
- Replacement for client-server RDBMS
- Stand-in for enterprise RDBMS during testing and demos
- Local cache of enterprise RDBMS data
- Persistence of objects, configuration
- Complex data structures
- ...
Complex Data Structures
- Class <-> Table
- Object <-> Row
- Instance Variable <-> Column
Automated undo/redo
using triggers.
Application File Format
- File/Open reads and parses the entire application file
- Error prone
- Lots of code to maintain
- Application crash causes data lost
- File/Save requires the user to remember to save, possible to
overwrite of independent changes, corruption if file generator and parser
do not match
What if ...
- No need to read and parse file content
- updates are atomic, consistent, isolated and durable
- automatic concurrency control
- Changes are written to disk immediately
- No data loss after unexpected power failure
- The save and save as options are obsolete -- remove them
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
- tokenize into words
- case folding
- stemming (convert each word into its root form; porter stemmer very
popular stemmer for English; recommended -> recommend;
books -> book)
- remove stop words
- 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
- Insert a new document:
Break the document into words;
Append the document ID to the posting list for each word
- Perform a query:
Lookup the posting list for each word in the query;
Combine posting lists
Keeping the Working Set Small
- Limit size of the lexicon (stemming, stop words)
- Compress the posting list aggressively
- Spill stationary parts of posting list into a separate table that is not cached
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).
- FTS1 permanent-beta
- FTS2 will ship before Christmas
Potential uses:
- Search for private websites
- Email clients
- Online documentation search
- Searchable history in web browsers (like a Google search but instead of searching the whole corpus of the web search only those sites I've browsed to in the last x months)
- Chatroom archive search
- Search version diffs in a configuration management system
- Text editors and IDEs
Pervasive Full-Text Search (users want it; made easy using Tcl and SQLite).
— Michael A. Cleverly
Wednesday, October 11,
2006
at 09:38
836 comments
| Printer friendly version
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
Wednesday, October 11,
2006
at 11:19
311 comments
| Printer friendly version
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
Wednesday, October 11,
2006
at 14:04
1682 comments
| Printer friendly version
Andrew Mangona presnted his work on TclRAL, a relational algebra extension for Tcl. It provides:
- relational values native to Tcl
- rigirous & complete set of relational operators
- useful set of integrity constraints
- explore relational concepts in Tcl programming
- no new (Tcl) syntax required
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:
- Not a DBMS
- Not SQL based
- No NULL's or three valued logic
- No transparent persistence (do provide lots of way to save off relvars and
constraints, including inside a Metakit db)
What's next:
- Relvar tracing
- Cascading update and delete
- Default values and system assigned identifiers
- Procedural constraints
- Transparent persistence
- Continuing improvements in the code base
— Michael A. Cleverly
Wednesday, October 11,
2006
at 14:31
266 comments
| Printer friendly version
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
Wednesday, October 11,
2006
at 15:28
237 comments
| Printer friendly version
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
- IE via OpTcl or Tcom on Windows
- New genre of applications (e.g., NewzPoint)
- Handy if you want to format + print tables in Tk
- What about *nix?
Possible approaches
- 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.
- 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).
- 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.
- entice.xul: 90 lines of javascript
- entice.tcl: 250 lines of Tcl
Thanks to GPS for making it possible (TkXext) and Mike Doyle for sponsoring it.
Tkhtml3
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
- Hyptertext label widget
- Geometry manager (for example form layout very natural)
- Internal document viewer
- web browser component
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:
- Use [bind] to detect mouse click
- Query widget to determine the node or nodes that were clicked on
- Figure out if a hyperlink node has been clicked on
- Do something about it if so
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
- Still alpha
- Rendering correctness is not a barrier to moving to beta stage
- Hv3 proves that a modern "scriptless" web browser is already viable
- Barriers: DOM support (Tkhtml3 will not supply a DOM API but enough
functionality that it can be built on top of it) and problems with managed windows (issue with CSS specified replacement content being baseline aligned,
CSS allows boxes to be drawn on top of replaced content, etc.)
Available at tkhtml.tcl.tk. The
shared library on Linux is ~220kb.
— Michael A. Cleverly
Wednesday, October 11,
2006
at 16:29
390 comments
| Printer friendly version
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
Wednesday, October 11,
2006
at 17:20
241 comments
| Printer friendly version
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
Thursday, October 12,
2006
at 08:58
223 comments
| Printer friendly version
Will's first slide made
people laugh—
WARNING
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
- Models civilian population in asymetric warfare environments
- Used by Battle Command Training Program
- JNEM 1.1 implemented for U.S. Army's National Simulation Center
- Cooperates with other training simulations
- Communications via HLA/RTI
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.
Definitions
- Federation
- a collection of cooperating HLA applications
- Federate
- one of those applications (a federate can join or resign from a federation)
- Interaction
- 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.
- Object
- 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
- One to one mapping from C++ to Tcl
- Code should be readable by an experienced RTI programmer without reference to the man page
- But wanted to follow standard Tcl conventions and exploit Tcl's strength
- Shouldn't implement application or federation specific policies
- Not a loadable extension (compiled into tcl shell)
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
- Doesn't use Tcl/Tk event loop
- API overly verbose (to match C++ API)
- Lots of policy functionality left to the application
- Callbacks are too large-grained (one callback for all interactions and
object updates)
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
Thursday, October 12,
2006
at 09:54
244 comments
| Printer friendly version
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)
- Defined by IEEE 1014-1987 and others
- Physical standard for cards
- Electrical standard for the bus
- Set of protocols for using the bus
Went through a series of slides explaining how the VME-BUS works
(arbitration and read cycle).
Bus used in three systems at NSCL:
- Accelerator Control systems
- Experiment Control systems
- Data Taking
The extension is targeted primarily for the experiment control systems.
Extension provides not much:
- Create a slice of memory/map of address space for each of the
common address modifiers (A16, A24, A32 and GEO)
- Ability to set/get long words, words or bytes in an arbitrary
offset relative to the start of the address map
- Address map boundary protection
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
Thursday, October 12,
2006
at 10:24
232 comments
| Printer friendly version
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.
- file.shp
- contains the shape data
- file.shx
- contains index to data in the shape file
- file.dbf
- 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
Thursday, October 12,
2006
at 10:46
241 comments
| Printer friendly version
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
Thursday, October 12,
2006
at 13:38
241 comments
| Printer friendly version
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
- File transport: FTP, HTTP (every file transport can look like every
other; even Windows Explorer does it)
- File archiving: (.tar, .zip, metakit vfs for starkits)
Drawbacks of previous implementations
- Emphasis on read functions (as opposed to write)
- Incomplete implementations ("good enough")
Challenges of the present
- A VFS should be flexive (one should be able to serve as info source
of another)
- Should be graftable as a branch of another VFS
- Should be scalable
- Should be as complete a metaphor as possible
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:
- Collating VFS (multiple locations appear as one; sometimes referred to as a union filesystem)
- SSH VFS (turns remote SSH server into file server)
- Quota VFS (imposes quotas on file attributes)
- Chroot VFS (makes all but a specified subdirectory invisible to the interpreter)
- Versioning VFS (preserves all file edits commited)
- Delta VFS (designed to work with versioning VFS, generates deltas of file edits to save on disk space)
They can all be combined/stacked/chained. Analogous to Unix pipes and
streams but maps to hierarchial data.
Future
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
Thursday, October 12,
2006
at 14:07
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
Thursday, October 12,
2006
at 14:19
192 comments
| Printer friendly version
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
- Most of human understanding is wrapped around things that sit still
- Only dead or inanimate things sit still
- Humans, database records, screen elements and documents are not dead nor inanimate
- Why should we write programs that assume things are the same when we begin as when we end?
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.
Heresies/Features
- Uses incremental Tcl-like notation
- Does not honor data or method hiding
- Allows for some pretty/wonky code creating code systems
- Makes it very easy for a class to be defined/efiled in multiple places in multiple ways
- Stress the use of mini-languages for large scalable development
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
Thursday, October 12,
2006
at 14:21
207 comments
| Printer friendly version
Reinhard Max talked about
the OpenSUSE project.
"OpenSUSE.org: SUSE's answer to Fedora, just done right." :-)
Current challenges
- Different target platforms
- Patches during upstream updates
- Merge code back to external repositories
- No version update for released distributions
- Deal with differences on various distros
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
Thursday, October 12,
2006
at 15:26
872 comments
| Printer friendly version
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
Thursday, October 12,
2006
at 16:30
262 comments
| Printer friendly version
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
Friday, October 13,
2006
at 08:38
171 comments
| Printer friendly version
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.
- Identify potential critical locations on each girder of bridge
- calculate capacity at each location from bridge design drawings
- Calculate moment and sheer demands at each location for suite of rating vehicles
- Calculate the rating index to indicate probability of demand exceeding capacity
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:
- Apply methodology to other bridge types
- 3D bridge model
- Mult-hazard rating (earthquake, corrosion)
- Network-based testing and simulation as part of NEES
- Pre- and post-processor using Fox
Thanks to Oregon Department of Transportation for sponsoring this research.
— Michael A. Cleverly
Friday, October 13,
2006
at 09:04
51 comments
| Printer friendly version
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
Friday, October 13,
2006
at 09:05
53 comments
| Printer friendly version
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
Thursday, October 19,
2006
at 19:27
206 comments
| Printer friendly version
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).
- Cryptonomicon (Neal Stephenson)
- Neuromancer (William Gibson)
- The Hitchhiker's Guide to the Galaxy (Douglas Adams)
- Stranger in a Strange Land (Robert Heinlein)
- To Kill a Mockingbird (Harper Lee)
- The Lord of the Rings (J.R.R. Tolkien)
- Foundation (Isaac Asimov)
- Nineteen Eighty-Four (George Orwell)
- Animal Farm (George Orwell)
- The Hobbit (J.R.R. Tolkien)
- All Quiet on the Western Front (Erich Maria Remarque)
- The Sound and the Fury (William Faulkner)
- The Great Gatsby (F. Scott Fitzgerald)
- Billy Budd (Herman Melville)
- Heart of Darkness (Joseph Conrad)
- Treasure Island (Robert Louis Stevenson)
- 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%:
- The Lord of the Rings (J.R.R. Tolkien)
- The Foundation Trilogy (Isaac Asimov)
- Stranger in a Strange Land (Robert Heinlein)
- A Wizard of Earthsea (Ursula K. Le Guin)
- Neuromancer (William Gibson)
- Fahrenheit 451 (Ray Bradbury)
- Ender's Game (Orson Scott Card)
- The Hitchhicker's Guide to the Galaxy (Douglas Adams)
- The Silmarillion (J.R.R. Tolkien)
- Starship Troopers (Robert Heinlein) [one of the books I'm currently reading]
- 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
Saturday, October 21,
2006
at 13:42
226 comments
| Printer friendly version
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
Monday, October 23,
2006
at 10:07
65 comments
| Printer friendly version
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
Sunday, October 29,
2006
at 14:59
102 comments
| Printer friendly version
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
Tuesday, October 31,
2006
at 22:25
575 comments
| Printer friendly version