Real name Mark Janssen ([Tcl Chatroom] nick: mjanssen). I have been using Tcl since 2004 and I love it.
----
There are several reasons I love Tcl:
* It supports Unicode in code and GUI
* The community is great
* It is truly interactive: Open a console in your application and see what is really going on
* Tclkit or Starkit deployment is very, very convenient
* It is very easy to install libraries without changing config files all over the place
* The community is great
* Very simple syntax and everything is a string: This allows for some funky stuff like redefining proc
* The C-API is one of the easiest of any of the ones I have seen (Perl, Python, Ruby) this makes it very easy to wrap C libraries. See for an example [readline]
* The community is great
----
'''Current projects'''
* Embedding [tcc] in a Tcl extension. It can compile an example Tcl extension at the moment [tdom] and supports [VFS]
'''Pages I contributed to'''
* [Alternative Namespaces]
* [Tailing widget]
* [Tcl Interface to WinPCAP]
* [less]
* [readline]
* [Angles on a compass]
* [exec quotes problem]
* [SNMP parser]
* [WBXML]
* [tedit] - Tcl only text editor with Emacs like functionality (sort of). Bindtags are so cool.
* [newexec]
* [Self Programming Language%|%Self] and my C-implementation at [SELF extension]
* [scriptaculous]
* [SOCKS proxy]
* [XOTcl Objects as Tcl Commands with subcommands]
* [Tuplespace]
* [Event tutorial]
* [Engineering Notation]
* [Overridden commands] - restoring Tcl internal commands that have been overridden beyond your control
* [Wizard]
* [Retrieve file icon using the Win32 API]
* [Scratchpad]
* [NTLM]
* [cal]
* [chan mode]
* [Extending chan] - Extending Tcl core commands implemented with [namespace ensemble]s
* [Tcl in a hybrid of RealLife and More Equal Pigs]
* [SCGI]
* [Splitting an amount in parts]
* [Retrieving movie information from IMDB]
* [TkTreeCtrl]
* [tcc] - and more specifically [tcltcc], a Tcl binding to [tcc] (hosted at [http://code.google.com/p/tcltcc/])
* [tunnel]
* [freezeconfig]
* [Entering Unicode characters in a widget]
* [Finding duplicate files]
* [Interfacing Windows Search]
* [A Simple Wiki with Outlook backend]
* [A DSL to generate XSD files]
* [Tcl2Exe] Using sdx and a build file to quickly wrap tcl scripts and applications as executables.
* [Example of a Tcl extension in Free Pascal] Using FreePascal to write stub enabled Tcl extensions.
'''Random ideas I like to pursue'''
* Everything will be compiled (so not only procs)
* Image based Tcl ala [Smalltalk]
* Fast OO ala [Self Extension]
* Extensible parser allow {..}[...] to be extended from script level
* Better [exec]
* Faster [Tcl IO performance]
* [Typed Tcl]
'''TODO'''
* Tcl frontend to fossil db's
* Caching in the [Self extension] using epoch counters
'''Autoexpansion of leading word'''
I have created a Tcl git repo with changes needed to have auto-expansion of a leading word at [http://github.com/mpcjanssen/tcltk-autoexpand]. This allows data structures like [TOOT with {*}]. To demonstrate that example:
======
% set m {matrix {{1 2 3}
{4 5 6}
{7 8 9}}
}
% proc matrix {matrix {method {}} args} {
if {$method eq {}} {
# return the 'typeless' matrix
return $matrix
}
switch $method {
row {
return [lindex $matrix [lindex $args 0]]
}
}
}
% $m ; #gives the undecorated matrix
{1 2 3}
{4 5 6}
{7 8 9}
% $m row 1
4 5 6
======
Which is a thing of beauty IMO.
The git repo linked to is dead, but the change to enable autoexpansion seems to be almost trivial.
=======Index: generic/tclParse.c
==================================================================
--- generic/tclParse.c
+++ generic/tclParse.c
@@ -301,11 +301,11 @@
parsePtr->commandStart = src;
type = CHAR_TYPE(*src);
scanned = 1; /* Can't have missing whitepsace before first word. */
while (1) {
- int expandWord = 0;
+ int expandWord = (parsePtr->numWords==0);
/* Are we at command termination? */
if ((numBytes == 0) || (type & terminators) != 0) {
parsePtr->term = src;
=======
----
Everything I post on the wiki is in the public domain unless explicitly marked otherwise. I would love to hear if some of it was useful to you though.
<<categories>> Person