Older blog entries for cbbrowne (starting at number 12)

Yay! There is now pl/scheme, a PostgreSQL procedural language handler for the Scheme programming language, specifically GNU Guile .

This allows implementing database stored procedures in Scheme.

It's a bit underdocumented at this point; it is not clearly documented how database parameters are passed into the Scheme level. The examples don't use Scheme functions; they instead use let structures, which is definitely more interesting...

What is also unclear is what the interaction between the database engine and the Guile interpreter is; open questions would include:

  • Does it spawn a separate instance for each backend?
  • Where does shared code reside, if anywhere?

It points me to wanting to get a PL/CLISP going...

I have been starting to learn Tai chi. Arguably the "least martial" of the martial arts... I'm not looking quickly to start beating people up :-).

It is a particular challenge in that there are so many little movements involved; I have never been a dancer, so coordinating hands, feet, legs, and body is something new to me.

While the art may appear langorous, that does not imply it is easy, either in terms of coordination, or, for that matter, use of strength. It is by no means an aerobic activity, but correctly moving slowly requires a pretty hefty degree of effort.

There are definitely places where the movements are counterintuitive; it's kind of neat that over time, I start recognizing a new intuition (which really is practice) that tells me both when I'm doing things right and when I'm doing things wrong.

What is kind of interesting is the impact on ordinary "walking around." The excruciating attention I need to pay to my movements during Tai Chi movements does map onwards. I'm becoming a bit more exacting about my steps when doing things completely unrelated to the martial art...

I am gradually moving towards the point where I will be able to, unattended, perform the Basic 24 Form Yang Form. That has the considerable merit that it is a not-very-long workout that provides some nominal health benefits, some stretching, some nominal exercise of strength, and a not-inconsiderable exercise of physical coordination. I could do way worse than to have this as a 5 minute morning exercise to get the blood flowing. And this has the merit of not requiring any special equipment, neither mats nor apparatus...

The question will be what to do once I can claim to have "mastered" the 24 forms of the "basic Yang form." It probably makes sense to start looking at the Zheng 37 form, which is supposedly a bit more martial. I'm not overly after the Ed Gruberman-esque "beating people up" , but having some means of self-defense seems no bad thing. The "martial" use of Tai Chi does seem to be strongly biased towards defense in its early application; the "offensive" parts would be way far down the road...

The Too Cool Thing that I discovered today is that there is now, many years later, a free software alternative to AMPL, namely ZIMPL .

What is that? It is a Little Language for transforming descriptions of mathematical problems into Integer Programming/Linear Programming formulations that may then be solved using an LP/MIP solver.

Why? Because the quasi-standard format for these problems, MPS, will make your ears bleed if you try to write up a complex model directly. If you're trying to describe a problem of interesting size (thousands of variables and constraints), you really do need to write a program to generate an MPS file.

AMPL, and now ZIMPL, allow you to describe your problem using reasonably nice looking equations, with two particularly pointed additions:

  • You can define model variables and parameters that draw their values from formatted data in external files, allowing you to use any sort of database / import scheme to define large portions of the problem and parameters

  • You can define sets of model variables with descriptive "subscripts," and have equation descriptions that generate gobs of model equations that are identically shaped by merely describing one of them

It's not difficult for 30 lines of AMPL/ZIMPL model description to combine with a data file with 50-100 parameter values to then expand to generate a planning model with tens of thousands of variables and constraints.

Of course, it would be bad news if this was insoluble; modern LP solvers on modern hardware can solve problems with hundreds of thousands if not millions of variables/constraints.

The one annoyance is that the default solver is anything but free; it's still all too common for Operations Research tools to be "free for purely academic use" but exceedingly proprietary anywhere else...

29 May 2006 (updated 29 May 2006 at 22:37 UTC) »

I think I busted some cfengine scripts the first time I remote-edited via Tramp; apparently, it doesn't preserve executable permissions :-(.

Ah, well, there are plenty of other cases where Tramping around to plain old config files works out fine. Yay, I can edit slonik scripts on application servers using Emacs.

Now, I just need to create an Emacs Slonik mode :-).

Emacs note du jour...

On Using Tramp which is a module that allows editing files on remote hosts using scp, ftp, or such...

To have it in place, you need, in $HOME/.xemacs/init.el, the following:

(require 'tramp)

Then, you can request editing a file on a remote host thus...

C-x C-f /[ssh/root@rg520-data-dotinfo]/etc/hosts

Tab completion works in various places...

Interesting protocols include ssh, ssh1, ssh2, scp, rsh, rsync, su, sudo, smb, ftp, telnet...

How about those wonderful people from SCO?

It all feels like a great All Your Linux Are Belong To Us .

More realistically, they seem to be heading down a similar road to Intergraph. Intergraph has a fairly nominal amount of income coming from sales of products. But the real profits come in from litigating against chip makers like TI and Intel.

It seems probable that Caldera made more money off of the judgement against Microsoft relating to DR-DOS than they ever did on selling Linux distributions.

(defun prolog-build-email-address (name host) (format nil "wm(X,Y):-write(X),write('@'),write(Y). wm('~A','~A')." name host))

(defun ocaml-build-email-address (name host) 
  (format nil "let name=~S and tld=~S in name ^ \"@\" ^ tld;;" 
          name host)) 

(defun ocaml-build-email-address-2 (name host) (format nil "let name=~S and tld=~S in String.concat \"@\" [name;tld];;" name host))

(defun snobol-build-email-address (name host &optional (revp nil)) (if revp (concatenate 'string "output = reverse(" (quotify (reverse host)) " " (quotify (reverse name)) ")") (concatenate 'string "output = (" (quotify name) " " (quotify host) ")")))

(defun sql-build-email-address (name host) (format nil "select '~A' || '~A';" name host))

(defun a+-build-email-address (name host) (format nil "~S,~S" name host))

Nifty News Du Jour

SBCL AMD64 Port is proposing a port of Steel Bank Common Lisp, a CMU/CL-related Common Lisp implementation, to run on the AMD x86-64 platform.

Bidding can be done here to provide funding for this...

Note To Self...

Need to put a few more language examples into the code generator in lispcookies.lisp . At present, it generates my email address using code fragments in Common Lisp, Icon, and Snobol.

I should certainly add in Prolog and OCAML. Parrot assembler would probably be a slick idea, too...

3 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!