MJ

Difference between version 113 and 114 - Previous - Next
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.
   * [Track] a library that can be used to write your own web framework.


'''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]   * Tcl kernel for jupyter with support for display commands [https://github.com/mpcjanssen/tcljupyter/blob/master/examples/example.ipynb]

'''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.

======

--- 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