How to Fix a Little Eshell Issue

Wanting to set up a pleasant shell environment in Emacs, I invested in getting
Eshell happy. Everything went well but the fact that directory name
completion doesn’t work. The error message appeared:

Invalid variable reference

Lately I’ve been learning more about how to develop (or re-learning depending upon
how you look at it) so I set up the debugger to run when the error occurred:

(toggle-debug-on-error)

to receive:

Debugger entered--Lisp error: (error "Invalid variable reference")
  signal(error ("Invalid variable reference"))
  error("Invalid variable reference")
  eshell-parse-variable-ref()
  eshell-parse-variable()
  eshell-interpolate-variable()
  run-hook-with-args-until-success(eshell-interpolate-variable)
  byte-code("m\204-�\303\304!\206�\305\306f!\306u\210     \204�\202)�\n\204$�    C\307       C\244\210)\202��\306\207" [result eshell-current-argument eshell-arg-listified run-hook-with-args-until-success eshell-parse-argument-hook char-to-string nil t] 2)
  eshell-parse-argument()
  byte-code("m?\205$�`\303 `U\203�\304\305d{\"\210  \203 �\n       C\244\210*\202��\207" [here arg args eshell-parse-argument error "Failed to parse argument '%s'"] 4)
  eshell-parse-arguments(29 #<marker at 43 in *eshell*>)
  byte-code("\303\304         \"\207" [begin end args nil eshell-parse-arguments] 4)
  eshell-complete-parse-arguments()
  pcomplete-parse-arguments(nil)
  #[0 "\306!\2053�   \nU\203� \207\307\f !\206�
\310        T\311     \nV\203.�\312\313!\210\314\315\310\"\210 \210\262\207" [pcomplete-expand-before-complete pcomplete-index pcomplete-last pcomplete-command-completion-function pcomplete-command-name-function pcomplete-default-completion-function pcomplete-parse-arguments pcomplete-find-completion-function nil pcomplete-arg message "No completions" throw pcompleted pcomplete-stub] 5 "\n\n(fn)"]()
  funcall(#[0 "\306!\2053�   \nU\203� \207\307\f !\206�
\310        T\311     \nV\203.�\312\313!\210\314\315\310\"\210 \210\262\207" [pcomplete-expand-before-complete pcomplete-index pcomplete-last pcomplete-command-completion-function pcomplete-command-name-function pcomplete-default-completion-function pcomplete-parse-arguments pcomplete-find-completion-function nil pcomplete-arg message "No completions" throw pcompleted pcomplete-stub] 5 "\n\n(fn)"])
  pcomplete-completions()
  #[0 "\306\211\306\211\306\211\f\f

\307 \310\"\211\2056�\211@\311=?\2056�\211A\2056�\312A@\313>$.\207" [pcomplete-stub pcomplete-seen pcomplete-norm-func pcomplete-args pcomplete-last pcomplete-index nil pcomplete-completions pcomplete-do-complete listed pcomplete-insert-entry (sole shortest) pcomplete-autolist pcomplete-suffix-list pcomplete-last-completion-raw] 8 "\n\n(fn)"]()
  funcall(#[0 "\306\211\306\211\306\211\f\f

\307 \310\"\211\2056�\211@\311=?\2056�\211A\2056�\312A@\313>$.\207" [pcomplete-stub pcomplete-seen pcomplete-norm-func pcomplete-args pcomplete-last pcomplete-index nil pcomplete-completions pcomplete-do-complete listed pcomplete-insert-entry (sole shortest) pcomplete-autolist pcomplete-suffix-list pcomplete-last-completion-raw] 8 "\n\n(fn)"])
  pcomplete(1)
  call-interactively(pcomplete)
  byte-code("\203�\301\302!\207\302 \207" [interactively call-interactively pcomplete] 2)
  eshell-pcomplete(1)
  call-interactively(eshell-pcomplete nil nil)

This stacktrace is simpler because I unloaded yasnippet. This will be a good
project for me to learn more about this environment because right now I’m
not sure how to address an issue like this beyond the standard, universal issue addressing techniques.

Creation and conservation of computer files (C3F)

Wanting to learn literate programming in org-mode I figured that my Emacs configuration would be the simplest place to start. In that regard I was right, it just took a lot more work then I had expected, and that is OK. It was a non-trivial effort and I learned a lot. In my mind, the door is now wide open to utilize literate programming; the org-mode team has truly unleashed an amazing gift to the world and it may take the world some time to really understand and appreciate it.

My configs and document follow; the first one, C3F.html, is the human-readable document:

C3F

ditaa-simple

C3F.org

Cask

The Infinite Abacus

An Infinite Abacus (AIA) is both a mathematical and computational tool. Its features include the ability to store any kind of numerical measurement along with the ability to retrieve it. Conceptually it may record any number of measurements, but from an analysis perspective it would only make sense to record a single value “on” a particular device (datum), and as many as you see fit “with” a particular device (metadata). Its beads and frames may be used to model various computational systems, but it is not a mandatory feature of the tool.

The AIA should be viewed as a physical device that lives within the constraints of this reality but also exists beyond them. You may work with 1 of them as easily as you would work with 1 million of them. Additionally they have no identity or location within the time-space continuum, but for the sake of analysis they may be granted those elements for the sake of modeling so that spatial and material-property analyses may be performed given attributes of each AIA that we find valuable. AIA is not subject to death or decay. They have no mass of their own, or value of their own; instead they live only to serve. The masses of the things that they define, though, maybe be utilized; along with the reason for their existence.

The computational engineer is responsible for defining, allocating, collecting, analyzing, refining, and redefining a system of AIAs. An iterative processes is repeatedly performed as new AIAs are revealed and existing AIAs are returned. The primary limiting factors in defining a system of AIAs are the ignorance of the fundamental nature of this reality that comes with being human, the limited cognitive capacity that comes with it, and the relatively small knowledge base held by humanity given the magnitude and volume of the entirety of reality.

Reproducible Research, Literate Programming, and Inter-Language Programming with Babel

Babel is about letting many different languages work together. Programming languages live in blocks inside natural language Org-mode documents. A piece of data may pass from a table to a Python code block, then maybe move on to an R code block, and finally end up embedded as a value in the middle of a paragraph or possibly pass through a gnuplot code block and end up as a plot embedded in the document.

My current approach is to use multiple languages, build scripts, intermediate files to share data, and finally weaving it together inside of LaTeX. The babel way looks intriguing, with excellent support (via Emacs modes) for numerous languages. Very exciting.


2014-02-14
Here is a writeup that may speak to readers in a way good for them to hear it.