-~ metanote ~- Except for this note, this is the document I sent to the people of FOSDEM 2015 as my talk submission. I also did an ASCII splash screen to facilitate navigation to and from the different projects during the talk. Now, I have changed the paths to URLs, so it should serve the same purpose for anyone interested. Here is the splash screen: http://user.it.uu.se/~embe8573/fosdem/fosdem.el |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| | Long story Lisp (and thank God not as long) | | | | by Emanuel Berg | | | | Tue Dec 9 03:29:19 CET 2014 | | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ My name is Emanuel Berg. I'm soon-to-be done stying Computer Science at Uppsala University, Sweden. This document contains my projects with the Lisp programming language. I will mention them briefly. All projects have - or should have - ambitious README files (or "Commentary" sections in the source files that serve the same purpose). So if anything catches your interest, follow the URL. In many cases there are screenshots as well. Let's start with something light. Here is the README file for a cute tool, to compute the distances between cities of the world. The entire program: http://user.it.uu.se/~embe8573/distance The README file: This is a distance-between-cities calculation tool. The interface is the 'distance' script: $ distance 'Easter Island' Santiago Easter Island -> Santiago: 3758.04 km $ distance Tokyo Paris Tokyo -> Paris: 9706.70 km $ distance Uppsala Brussels Uppsala -> Brussels: 1301.91 km The 'loc' script is what fetches the locations from Wikipedia. (Yes: both scripts must be made executable, and you need the Internet.) The distance.el is the Elisp program that does the job: it uses the geometry Haversine formula to do the calculation. (So yes, you need Emacs. By the way, the word "geometry" sure nailed it this time.) This method is based on the assumption that Earth is a sphere, which of course it is, but not completely so: of course, nothing in nature is perfect in the math sense. Still, the results are so good compared to those found in books so one would think Earth for all practical purposes is spherical enough. The files mentioned: -rwxr-xr-x 1 user 265 Dec 9 03:39 distance -rwxr-xr-x 1 user 250 Dec 9 03:38 loc -rw-r--r-- 1 user 1009 Dec 9 03:50 README -rw-r--r-- 1 user 1.2K Dec 9 03:46 distance.el And now some more Lisp... I first did some Lisp in the CS course "Functional Programming" (specifically Common Lisp; the other languages were Haskell and Erlang by the way), but I didn't start doing Lisp for my own purposes until I got eye problems, and I realized I could make it more efficient (i.e., less computer time to do things: less eye strain) and also qualitatively better (not as much irritation and pain) with certain Elisp configurations and extensions to Emacs. Nowadays the eye problems are solved, thank God, but it took some years; and, I continued writing Elisp for other purposes as well. Some of the principles behind that work is described here: http://user.it.uu.se/~embe8573/about/degree/x.pdf (page 27 onwards) - though the code later on is probably more interesting! (As always.) The Emacs work now encompasses some 50 files, including work on w3m and Gnus. I am especially proud of the w3m search interface, but there are many things I can go on about when it comes to all that sweet Lisp. There are also some interesting combinations with tmux, zsh, and X; while that is not (only) Lisp, the Elisp works with those interfaces, and most often combinations of technology give an even sweeter taste than when enjoyed in isolation (the xsel.el package is a good example; there are others as well). http://user.it.uu.se/~embe8573/conf/emacs-init I only turned a few of those files into proper packages - those have "Commentary" sections in the source which describe them in some detail: * buc --- move between buffers based on category source: http://user.it.uu.se/~embe8573/conf/emacs-init/buc.el screenshot: http://user.it.uu.se/~embe8573/dumps/buc.png * moggle --- iterate headers and body in message-mode http://user.it.uu.se/~embe8573/conf/emacs-init/gnus/moggle.el * wrap-search --- wrapped, noninteractive search http://user.it.uu.se/~embe8573/conf/emacs-init/wrap-search.el * xsel --- use X clipboard to/from terminal/tty Emacs http://user.it.uu.se/~embe8573/conf/emacs-init/xsel.el * caps-back -- one-keystroke word pre-capitalizer http://user.it.uu.se/~embe8573/conf/emacs-init/caps-back.el Of those source files that aren't packages, but might still be as interesting (they could be packages), probably the most exciting are: [ I removed this list to motivate me to make them into proper packages. ] - all to be found in the same directory. The work on Gnus is more esthetical-functional in nature, so I put together a small site on Gnus with some nice screenshots to look at: http://user.it.uu.se/~embe8573/gnus For another university project, I did an Emacs major mode for the fpscalc tool, which has to do with computing execution times for real-time software (or parameters to be exact). I also did an associated tool in LaTeX to produce cool diagrams to illustrate the execution flows. Everything can be found here, including a README, and screenshots of both the Lisp and LaTeX projects. http://user.it.uu.se/~embe8573/fps For yet another university project, I did an Elisp number-cruncher to do all-numbers buffers, and then produce some basic stats. It isn't exactly advanced but helpful in its simplicity and for its purpose. The code is included at the end of this yet-unfinished report: http://user.it.uu.se/~embe8573/hs-linux/docs/report/report.pdf Or, if you prefer plain source: http://user.it.uu.se/~embe8573/conf/emacs-init/times.el That's all, thank you :) Feel free to contact me with whatever thoughts and corrections, of course.