Older blog entries for Pistos (starting at number 22)

Chopin – Mazurka in Ab Major, Op. 24, No. 3

A light mazurka that I found when leafing through my Chopin score collection.

Read more about my piano recording series here.


Related posts:

  1. Chopin – Prelude in A major, Op. 28, No. 7
  2. Chopin – Prelude Op. 28, No. 20 in C minor
  3. Chopin – Nocturne Op. 72, No. 1 in E minor

Syndicated 2009-12-05 08:50:34 from Catholicism Computes

Chopin – Nocturne Op. 72, No. 1 in E minor

An emotional Nocturne by Chopin. It starts out melancholy, but the greyness passes away as the piece journeys to its E major resolution.

Read more about my piano recording series here.


Related posts:

  1. Chopin – Prelude Op. 28, No. 20 in C minor
  2. Chopin – Prelude in A major, Op. 28, No. 7
  3. Debussy – Rêverie

Syndicated 2009-10-17 02:58:29 from Catholicism Computes

Beethoven – Sonata Op. 27, No. 2 (Moonlight), 2nd movement

The second movement of Beethoven’s famous Moonlight Sonata (No. 14).

Read more about my piano recording series here.


Related posts:

  1. Beethoven – Sonata Op. 27, No. 2 (Moonlight), 1st movement
  2. Beethoven – Für Elise
  3. Chopin – Prelude in A major, Op. 28, No. 7

Syndicated 2009-09-20 17:24:13 from Catholicism Computes

Beethoven – Sonata Op. 27, No. 2 (Moonlight), 1st movement

The first movement of Beethoven’s famous Moonlight Sonata No. 14 in C# minor.

Read more about my piano recording series here.


Related posts:

  1. Beethoven – Für Elise
  2. Chopin – Prelude in A major, Op. 28, No. 7
  3. Chopin – Prelude Op. 28, No. 20 in C minor

Syndicated 2009-09-18 02:03:28 from Catholicism Computes

Diakonos - version 0.8.12

Version 0.8.12 of Diakonos is now available.

Keying and the input line

The keying system of Diakonos has been refactored. What this means to the end user is the input line now supports the full range of keys. For example, keys like the Home and End keys actually produce multiple characters of input each, and so would not function properly in older versions. They are now are properly supported. As part of this new implementation, the notion of keying modes has been introduced. For now, there are only two hard-coded modes: “edit” and “input”. There is now an mkey configuration directive, used to bind a function to a key chord or sequence under a specific mode. The old directive, key is equivalent to mkey edit, and so acts as a shorthand.

Another nice enhancement to input is the fact that the input line can now scroll left and right, to allow proper editing of long inputs (inputs wider than the screen or terminal).

zsh and bash completion

This version includes in the tarballs files that can be used to provide tab completion for Diakonos under bash and zsh. Of course, all shells already provide tab completion for files and directories, but with the provided files, you can also have completion of session names for use with diakonos -s <session>.

Selection and Find

A new select_wrapping_block function has been added, with a default keychord of Alt-space. This function will select all lines at the current level of indentation (or deeper). That is, you can select the current code block with it. You can press Alt-space additional times to quickly and easily select increasingly shallower parent blocks.

The find functionality of Diakonos has been enhanced: if you perform a search with text selected, the search is restricted to the selected text. Put these two new features together, and you have a way to restrict searches to code blocks — something I find quite cool and useful. Haven’t you ever wanted to know “where else do I reference this variable within this method?” or asked similar questions? Well now you can find out things like this very easily.

Cursor stack

The cursor stack was broken in the last release, but it has been repaired and also enhanced. The cursor stack is now cross-buffer, instead of buffer-specific. This lets you return to logical work areas no matter which buffers they are in. (For those of you that don’t know, the cursor stack is essentially the equivalent of your web browser’s Back and Forward functionality, except within your editor.)

git integration

Diakonos git integration got a big boost recently, by way of a really cool git tool called tig. Of course, tig is neither required for Diakonos operation, nor bundled with Diakonos. However, if you install it, and also install the Diakonos git extension, then you get one-key access (F9) to a slick curses interface to git. If you are a git user, I certainly recommend you take tig for a whirl. With dk-git and tig, we Diakonos users get something comparable to emacs’ magit.


The full set of changes is listed in greater detail in the changelog:

  • Refactored keying system.
  • Introduced keying modes.
  • Ruby version now enforced, both at installation and run time.
  • Input line can now scroll if input is longer than screen width.
  • Added support for session completion in zsh and bash.
  • Added select_line.
  • Added select_wrapping_block (default key: Alt-space).
  • Searching is now restricted to the selected text, if any.
  • Added view.non_search_area.format.
  • Fixed cursor stack.
  • Cursor stack is now global (cross-buffer).
  • Simplified switch_to_next_buffer and switch_to_prev_buffer; no more history.
  • Added chdir function.
  • Various refactorings.
  • Various bug fixes.

As usual, report any bugs here, or come visit me in IRC!


Related posts:

  1. Diakonos - version 0.8.9
  2. Diakonos - version 0.8.11
  3. Diakonos - version 0.8.7

Syndicated 2009-08-01 19:12:48 from Catholicism Computes

Diakonos - version 0.8.11

Version 0.8.11 of Diakonos is now available.

This release brings a handful of minor feature enhancements and fixes, but the most important addition is the new extension system.

Diakonos Extensions

Diakonos has been scriptable for many versions now, but with this release I have baked in an official system and structure for extensions. Diakonos dances to the same tune as Ruby, insofar as it exposes pretty much the entire core to any enterprising developer who wants to add new features. Later on, I’ll describe some of the ways a programmer might extend Diakonos, but first, let’s take a look at the Hello World extension that comes with the Diakonos tarball.

The Anatomy of an Extension

Every extension must have an info.yaml file. This YAML file contains lots of information about the extension. Here are the contents of the info.yaml file of the Hello World extension:

name: Hello World
description: An example of a Diakonos extension
    name: Pistos
    email: somebody@example.com
    uri: http://blog.purepistos.net
version: 1.0.0
    homepage: http://github.com/Pistos/diakonos/tree/master/extensions/dk-hello-world
    repository: git://github.com/Pistos/diakonos.git
licence: MIT
        minimum: 0.8.11
            - 0.8.11
        # - gemname:
            # minimum: 1.0.0
            # tested:
                # - 1.0.0
                # - 1.1.0
notes: >
    This extension adds a hello_world function to Diakonos.
    Pressing Shift-F11 will activate the function.

I think the file contents and format are self-explanatory. The only thing to keep in mind is that the requirements key is required. All other items are optional. The fields are all fully described in Diakonos’ built-in help.

Besides the info.yaml file, an extension can have one or more .conf and .rb files. The .conf files are of the same format as normal Diakonos configuration files. The Ruby (.rb) files are where all the code of the extension is placed.

Here is the code of the Hello World extension:

module Diakonos
  module Functions
    def hello_world
      @current_buffer.paste "Hello, world!"

In it, a new function, hello_world, is defined. Obviously, it pastes “Hello, world!” into the current buffer (at the current cursor position).

The Hello World conf file has just this line:

key f23   hello_world

So, once the Hello World extension is loaded, you can press Shift-F11, and you’ll receive the well-known greeting.

Managing Extensions

Extensions are simply self-contained directories of files, and so can be packaged into tarballs, made into git repositories, or whatever strikes your fancy.

To install an extension, just copy or unpack (or even symlink) its directory under ~/.diakonos/extensions/. For example, ~/.diakonos/extensions/dk-hello-world/.

To activate an extension, use the load_extension directive in your Diakonos configuration. For example:

load_extension dk-hello-world

You can see what extensions are loaded and active with the new About page, accessible with default hotkey F11. Any extensions that failed to load will also be listed.

What Extensions Can Do

An extension might do any number of things, like:

  • provide a new language definition
  • set up an alternative key mapping
  • provide an alternative shared or default colour scheme
  • share a user’s personal configuration settings
  • add new functions to Diakonos, and map them to keys
  • provide new status line variables
  • install code to run on Diakonos hooks

The range of possibilities is very broad. I have begun filling out source code documentation for Diakonos. I hope to add more and more documentation with each release. The current docs can be accessed at http://purepistos.net/diakonos/rdoc/. As of this writing, it’s quite incomplete, but at least the classes and methods are enumerated. Since this documentation is sparse, don’t be afraid to dive right into the source code. Although I am continually refactoring, and some [very] old code is still hanging around, I think most of the codebase is readable and understandable. Also, of course, you can always come and ask questions in our IRC channel if you need help with writing extensions, or using Diakonos in general.

Example Extensions

A few extensions have already been made to help exemplify the new extension system. Check out their source to learn more about extending Diakonos.

  • Hello World - A minimal example extension
  • git - A git extension
  • Selector - An extension for CSS/XPath selecting on the current HTML/XML buffer
  • Comment Toggle - Smart (un)commenting for Diakonos

Release Changelog

Here is the detailed changelog for this release:

  • Added join_lines_upward (Alt-Shift-J).
  • Added one-key selection in buffer list.
  • Added support for single line indentation.
  • Added extension system.
  • Added surround_selection and related functions.
  • Added “about” page.
  • Various bug fixes and refactorings.

Report any bugs here, or come visit me in IRC!


Related posts:

  1. Diakonos - version 0.8.8
  2. Diakonos - version 0.8.6
  3. Diakonos - version 0.8.7

Syndicated 2009-07-07 10:18:31 from Catholicism Computes

Diakonos - version 0.8.10

Version 0.8.10 of Diakonos is now available.

With this release, I’d like to welcome Dominik Honnef (dominikh) to the Diakonos development team. He has already made several contributions, including some fixes which were cherry-picked from the master development branch and included in this version. His other contributions to date will be seen in the next version (0.8.11), and I think we can expect more from him in future versions.

Starting with this version, Ruby 1.8 support is officially dropped. Diakonos will now only run on Ruby 1.9. There’s no need to rush the upgrade on your systems; it is quite possible to have both 1.8 and 1.9 installed on the same system. Search the web for how to do this.

go_to_char (Alt-N) and go_to_char_previous (Alt-P) have been added. These let you move the cursor directly to a specific nearby character.

The shell command has been adjusted a little, so that the results buffer is no longer cluttered with the command that was run.

The way you activate Klipper synchronization has been centralized and simplified. You now simply set “clipboard.external klipper”, instead of setting each clipboard-related key mapping. Along with this change, xclip support was added. This will let non-KDE users synchronize their X clipboard with Diakonos.

Sessions have been improved a bit: Cursor position is now saved, and Diakonos also remembers which was the current buffer when restoring a session.

Basic pair highlighting and jumping was added. Matching brackets are now highlighted, and you can press Alt-{ to jump to a match.

Dynamic prefix expansion was added. With this feature, you can complete long words — good for those of us who don’t like to type a lot. Type the beginning of a long variable name, or such, then press Alt-E. Diakonos will complete the word using a word found in the open buffers (the most frequently used one). Press Alt-E more times to cycle through all the matches. Here is a screencast which shows this feature in action:

Here is the full changelog for this version:

  • Ruby version 1.9+ now required. (Ruby 1.8 support dropped)
  • Added go_to_char (Alt-N).
  • Added go_to_char_previous (Alt-P).
  • shell command now shows executed command on interaction line.
  • shell command is now interruptible.
  • Klipper synchronization now a single setting (clipboard.external klipper).
  • Added xclip support.
  • Cursor and viewport positions now saved in and restored from sessions.
  • Current buffer number now saved in sessions.
  • Fixed context line.
  • Textual indication of no shell results now given.
  • Added basic pair (bracket) highlighting.
  • Added go_to_pair_match (Alt-Shift-[).
  • Fixed chmodding in installer.
  • Undo and redo now actually compare file contents to set “modified” flag.
  • Added support for a special ‘all’ language, whose formats apply no matter the current language.
  • Added dynamic prefix expansion (Alt-E).

Report any bugs here, or come visit me in IRC!


Related posts:

  1. Diakonos - version 0.8.5
  2. Diakonos - version 0.8.7
  3. Diakonos - version 0.8.4

Syndicated 2009-06-24 04:09:13 from Catholicism Computes

Diakonos - version 0.8.9

Version 0.8.9 of Diakonos is now available.

This release is primarily an internal refactor release. The only changes visible to the user are bug fixes. These include improvements to the installer, and vastly improved handling of X windows pasting. No more brutally slow terminal pasting!

The changes are listed in greater detail in the changelog:

  • Put interaction timer only on first stale session prompt, not any after that.
  • Changed all function names from camelCase to snake_case.
  • Added –help-dir switch to installer.
  • Fixed some issues with installer.
  • Changed delete_to_and_from to always assume given character is the left side character when matching pairs.
  • Fixed a line number display bug.
  • X windows pasting handled much better now.
  • Numerous internal refactorings and reorganizations.
  • Accepted patches from Decklin Foster.

Report any bugs here, or come visit me in IRC!


Related posts:

  1. Diakonos - version 0.8.8
  2. Diakonos - version 0.8.6
  3. Diakonos - version 0.8.7

Syndicated 2009-06-14 19:37:04 from Catholicism Computes

Beethoven - Für Elise

The very popular Bagatelle in A minor by Beethoven, commonly known as Für Elise.

Read more about my piano recording series here.


Related posts:

  1. Beethoven - Sonata in C minor, Op. 13, 2nd movement
  2. Chopin - Waltz Op. 64 No. 2 in C# minor
  3. Chopin - Waltz Op. 69 No. 1 in Ab major

Syndicated 2009-06-13 14:33:03 from Catholicism Computes

Ramaze vs. Rails: Battle of the default templating engines

Someone asked recently on the Ramaze mailing list:

Is Etanni a performance improvement over ERB? I’m just converting a site over to Ramaze and I’m wondering if it’d be worthwhile to convert my ERB tags to Etanni tags? :)

manveru promptly replied:

ERB is a lot larger, and does a lot more, but usually you don’t use that functionality. Etanni consists of a single regular expression substitution and should be faster than just about any other templating engine around, the whole core source of Etanni is around 4 lines.

So yes, i suggest you use Etanni instead of ERB :)

He also quickly wrote up some benchmarking code to substantiate his claims, and then enlisted me to solidify matters. I used his code as a base, and ran the same engine test code through better-benchmark. I put the benchmarking code up as a gist. The full results are embedded as a comment at the end of the gist. Here is a summary:

Template type Etanni faster
than ERb by
Just HTML (no templating) 38.3%
In-template loop with expression interpolation 20.7%
Ruby expression evaluation 43.9%

Based on the results of this little test we might conclude: If rendering speed is a concern, but you also want to just stick with your framework’s default engine to minimize gem dependencies, go with Ramaze. :)


Related posts:

  1. Rails’ memoization is not always faster
  2. Ramaze by Example - Part 4: View
  3. Ruby on Rails - Steering Is Futile

Syndicated 2009-06-02 16:14:53 from Catholicism Computes

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