Re: [Orgmode] Re: Literate Programming with Org mode
Sam, sam kleinman wrote: ... Here's a literate programing example: I talked with a statistician, programer and human rights violation researcher, who wrote (with his team) reports of statistical studies of data regarding possible genocide incidents. He wrote the LaTeX documents which, within the text of the document, all values and analysis' were called in and generated when LaTeX ran, so that as data was collected, and the report was recompiled the analysis was completed with the most up-to-date version of the data, and that the production of the text was isolated from the collection of data, and from the analysis of those figures. The stack itself, was comprised of Sweave <http://www.stat.umn.edu/~charlie/Sweave/> R for stats processing, make, and a little bit of python for glue. I think. This is how it is often used in R (or S), and is compatible with the original idea, which is a little broader. The idea is to write a full software application by first writing a document about its design and implementation (in whatever organization is clearest for humans), but at a high enough level of detail that *all* code in *all* source files in the final application gets included somewhere in code snippets within the documentation. To compile your program, you run a program to "tangle" your text into C files, makefiles, or whatever is appropriate, and then compile that (with no additional editing). See http://www.literateprogramming.com/ Every time I have tried this, I have given up in frustration at the tools. I have put together some org code to do it, and have used it successfully for some small projects, but I am still pulling my hair out on being able to properly contribute it to org, and it would need to be reworked in light of other developments anyway. org-babel now has includes literate programming in it as well, but I have not yet experimented with it (but am very interested in trying). -Eric -- Eric H. Neilsen, Jr. http://home.fnal.gov/~neilsen ___ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode
[Orgmode] Re: A tool for creating source code files from example and src blocks in org files
Chris, Yes, I am also unhappy with the use of numbering to order chunks, but the traditional LP mechanism of using substitution of named chunks has some major flaws I have not figured out how to address. The basic problem is that it can be used as a mechanism for code reuse, probably will be if it is present. This is not necessary (code reuse like this probably means poor use of the code reuse mechanisms of the programming language in any case), hides the fact that the code is reused from debugging and performance tools that rely on the source code, and makes the task of untangling much harder, and impossible to completely automate. Consider a program in which the same chunk appears twice in the tangled source code. Using a debugger, you find a bug in the chunk. You fix it in the source code, but only in one place. You then find another bug, or even the same bug in a different guise, and fix it differently in the other appearance. What is the untangler supposed to do with the result? Which new version do you want? Do you want the changes merged? Do you actually want both versions, and if so, how does it edit the org-mode document to include them? Yes, I know, from an LP purists point of view, the untangler is an abomination. Unfortunately, few (if any) code development tools (debuggers, performance analyzers, etc.) support debugging or analysis of source code embedded in CWEB, noweb, or org-mode text files. This, to me, is a deal-breaker. With an untangle command, I can write my code in an org-mode file, tangle it and get emacs buffers with all C, headers, makefiles, java, or whatever code in it, use emacs's extensive code development tools (eg the emacs front end to gdb) to build and debug it, and pull the source code back into the org-mode file when the bugs are fixed. In fact, the code development tools do not even need to be embedded in emacs; anything tools can look at a traditional source file becomes useful. There is an additional problem, although one that can be solved by "just doing more work." At present, org-tangle can use the existing org-mode export code to do all necessary weaving. org-mode, in turn, takes advantage of the many independently supported modes for each language to format them properly. If we introduce a new syntax (for substitution) inside the literal blocks, it means that we will need an org-weave that can properly format each language. I am not sure how practical this is; I am certainly not that ambitious. It may be a little while before my itself makes an appearance. Not only do I need to wait for my employer to figure the legal stuff, I have also received enough feedback that I want to address issues better before anyone else is tempted to use the code. -Eric -- Eric H. Neilsen, Jr. http://home.fnal.gov/~neilsen ___ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode
[Orgmode] A tool for creating source code files from example and src blocks in org files
Hi, First, thank you Carsten and others, for putting this thing together; org-mode is the most useful tool I've run across in a long time. I recently put together a few commands to create source code files from SRC and EXAMPLE blocks in org-mode files. The original idea is to be able to compile examples in my notes without needing to merge them into a separate source file by hand. As I was writing it I realized this is exactly the same tool one needs to turn org-mode into a literate programming tool (see http://www.literateprogramming.com/ ), so I adopted some of the nomenclature. (I tried literate programming a few years ago, and gave up in frustration with the tools. I am tempted to try again with org-mode.) The two user level commands are org-tangle and org-untangle, best explained through example. Running org-tangle in a buffer that looks like this: -- begin /tmp/test.org --- * Some file Some text here #+CHUNK file1.sh 1 #+BEGIN_SRC bash echo "line 1" echo "line 2" #+END_SRC more text ** Some subsection #+CHUNK file1.sh 2 #+BEGIN_SRC bash echo "line 5" echo "line 6" #+END_SRC blah blah blah #+CHUNK README.txt 1 #+BEGIN_EXAMPLE text line 1 text line 2 text line 3 #+END_EXAMPLE foo foo bar baz #+CHUNK file1.sh 1.5 #+BEGIN_SRC bash echo "line 3" echo "line 4" #+END_SRC -- end /tmp/test.org results in the creation of these two files, opened in emacs buffers: - begin /tmp/file1.sh # ORGCHUNK /tmp/test.org 1 echo "line 1" echo "line 2" # ORGCHUNK /tmp/test.org 1.5 echo "line 3" echo "line 4" # ORGCHUNK /tmp/test.org 2 echo "line 5" echo "line 6" - end /tmp/file1.sh - and begin /tmp/README.txt - text line 1 text line 2 text line 3 end /tmp/README.txt --- If you then edit file1.sh and run org-untangle in the buffer, changes to it will overwrite the literal blocks in the org-mode file from whence they came. Is there any interest in this? My organization's rules for releasing code to open source projects are being revised, but I am likely to be able to do so under a BSD-like license. If there is interest, I will push to try and figure out how to do this, and maybe even see if I can do the assignment of copyright stuff needed for it to get under the main umbrella (although I am not optimistic). (If anyone feels like rewriting it, that would be even better; aside from a fairly straightforward .emacs, this is my first ever lisp code, so it is likely to need cleaning and refactoring.) -Eric -- Eric H. Neilsen, Jr. http://home.fnal.gov/~neilsen ___ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode