Chopin - Prelude Op. 28, No. 20 in C minor
A short, sombre prelude by Chopin.
Read more about my piano recording series here.
Related posts:
Chopin - Prelude Op. 28, No. 20 in C minor
A short, sombre prelude by Chopin.
Read more about my piano recording series here.
Related posts:
Chopin - Prelude in A major, Op. 28, No. 7
A very short prelude in A by my favourite composer.
Read more about my piano recording series here.
Related posts:
Diakonos - version 0.8.8
Version 0.8.8 of Diakonos is now available. This release delivers several new features, and also brings about a big change…
Beginning with this release, I am doing something radical: I am not releasing Diakonos as a Ruby gem. While that may seem strange to some, I think the move is not only justified, but better for Diakonos.
I don’t believe Diakonos has a tremendously large user base at the moment. According to DistroWatch and LinuxRank, Ubuntu is easily the most popular Linux distribution. If Diakonos is to gain any popularity, it behooves me to ensure that it installs onto and plays well with Ubuntu.
I noticed that the Debian package for Diakonos had fallen behind my upstream releases (it was stuck at 0.8.4). I exchanged e-mails with Ralph Amissah, the maintainer of the Debian package (and, by extension, indirect maintaner of the Ubuntu package too), and was thereby informed that the inception of the new help system (introduced in 0.8.6) impeded the downstream updates. In particular, Diakonos’ downloading of configuration and help files for first time users was behaviour that ran contrary to Debian policy.
I think Debian and Ubuntu users who are not advanced Linux users would be more inclined to install packages via the apt system, as opposed to via RubyGems.
Furthermore, I have concluded that the RubyGems system is tailored much more towards libraries, and not applications. It’s great for putting files where Ruby’s require and load statements can find them. But it’s not so well suited to moving global configuration files into /etc, or system-wide documentation into /usr/share/doc. I mumbled about this over two years ago. At first, I worked around the problem by having Diakonos installed via RubyGems, and then downloading configuration files (and, later, help files) from the Internet when the user first runs Diakonos. But, as I’ve mentioned, this prevented smooth inclusion into the Debian package repositories.
RubyGems is focused on letting Ruby developers disseminate their libraries to other Ruby developers; Diakonos is an end-user application. That it is written in Ruby is secondary and peripheral; it is not my intention to present a cute novelty to the amusement and delight of a fraction of the developers of a subculture programming language. My goal is to create the most user-friendly console editor for Linux (”a Linux editor for the masses”).
In light of these facts, I elected to abandon the RubyGems system in favour of a custom installer (install.rb in the package). This installer would allow a distro package maintainer to install Diakonos to specific locations of his or her choosing in the filesystem. I envision that package maintainers for all distros should have little difficulty using it to create or update their packages. Of course, it is easy to use for the end user himself, as well. It can be used to install Diakonos completely in userspace (i.e. somewhere under a user’s home directory, without the need for root/sudo privileges).
The new package (simply a tarball) contains everything needed to run Diakonos, including default configuration files and a full set of help files. Diakonos no longer accesses the Internet for these like it used to in previous versions.
Configuration is loaded from the system-wide location (specified during installation), but user-specific overrides are (as before) loaded from ~/.diakonos/diakonos.conf.
Configuration settings can now be inherited (cascaded). Simply use an equals sign (=) to set one setting to the value of another.
one.setting = another.setting
For an example, have a look at the Ruby language definition in the default config file. See how the shared settings are defined earlier in the file.
This inheritance will work for any setting, not just formatting. The important thing to remember is that Diakonos will parse configuration files top to bottom, and visit each included file in the order the include directives are encountered, with a depth-first strategy. So you should define ancestor settings before descendant settings.
You can now switch between block (columnar) selection and normal (flow) selection. Default keychains: <Alt-Shift-M, B> for block, <Alt-Shift-M, N> for normal. Mnemonic: M for Mark, B for Block, N for Normal.
Default keychord <Alt-Shift-L> can be used to toggle line numbering on and off. Line numbers appear in a left-side margin. Enable line numbering permanently by setting view.line_numbers to true in your config. Set view.line_numbers.width to the number of columns to use for the line numbering margin. view.line_numbers.number_format is the setting to use to define a sprintf format for the line numbers. Set the colour and brightness with view.line_numbers.format.
A cool thing I’ve added in this release is code block navigation. Using Ctrl-PageDown, you can jump to the next code block of the same indentation level as the current line. Ctrl-PageUp goes back in the opposite direction (up or previous block). You might use this to easily browse: the methods of a class; or the different when clauses of a Ruby case expression; or the components of an if-elsif-else tree; or the rules of a CSS stylesheet; and so on. Diakonos will automatically limit the extent of the navigation, so if you start your browsing within an if-elsif tree, your cursor won’t jump outside that tree if you press Ctrl-PageDown too many times.
Alt-PageDown brings the cursor one block level deeper; Alt-PageUp brings you out one level.
You can now define column markers using the view.column_markers.* settings. I’ve provided an example in the default config:
view.column_markers.margin.column 80
view.column_markers.margin.format 9
Uncommenting or adding these lines would set up a column marker named “margin”. The name “margin” is arbitrary; use whatever names you want for your markers. The “margin” marker would highlight the 80th column using the format code 9 (white on red in the default 16-colour configuration).
You might use such a column marker as a visual cue to help you not exceed a certain line length. You can set up as many column markers as you like.
Pressing Ctrl-W on the input line will now delete the last word on the line. I mainly included this to lop off file path components when opening new files or grepping directories.
Ruby 1.9 support is even better now. There are no known issues with Diakonos running under Ruby 1.9.1. If you encounter anything, please let me know.
As I move forward with development, I am preferring 1.9 styles and constructions where there is a choice. As such, some functions of Diakonos may no longer function under Ruby 1.8. I encourage you to install Ruby 1.9 if you have not already, and to keep both versions concurrently installed on your systems. The Ruby community benefits when people move forward to adopt and use this latest stable release of Ruby.
A corollary of running under 1.9 is the ability to open and edit files with encodings other than ASCII. The little test files I opened were handled by Diakonos without difficulty. I could insert and delete UTF-8 characters and save the file. Any real world usage (testing) of Diakonos with non-ASCII files is appreciated!
Also, don’t forget that things run faster under Ruby 1.9, and Diakonos is no exception!
Several bugs were fixed (see the git commit log for details). If you subscribed to the particular LinisTrac tickets in question, you would have already been notified.
The rest of the changes are described in this version’s full changelog:
As usual, report any bugs here, or come visit me in IRC. If you like Diakonos, please consider making a small donation.
Enjoy version 0.8.8!
Related posts:
Debussy - Rêverie
Another dreamy, reflective, cloudy piece by Claude Debussy.
Read more about my piano recording series here.
Related posts:
Diakonos - version 0.8.7
Version 0.8.7 of Diakonos is now available. Install by gem install diakonos. This version brings several new features and more bug fixes.
A strip_trailing_whitespace_on_save setting was added, defaulting to true. I’ve joined the camp of those who believe that trailing whitespace doesn’t belong in source control repositories (due to diff false positives).
I’ve added sessions to Diakonos, and use them all the time now. Name your session by starting diakonos with a -s option:
diakonos -s my-website
The default configuration will show the session name in the bottom right. If you close Diakonos and reopen it with the same session name, it will reopen all the same files as were open when you closed it.
If you open Diakonos without a session name, it will still maintain an anonymous session until you quit. If Diakonos or your computer should crash during your session, you can start up Diakonos and it will prompt you to restore any sessions that were not closed gracefully.
The previous release of Diakonos saw the inclusion of “find as you type”. This version provides grep as you type. Behold the coolness via this mini screencast:
Being forced to use vi on occasion at work, I’ve become acquainted with at least one neat thing: You can press “dt” in vi to “delete till”. So I brought this functionality over to Diakonos. Type Ctrl-D-T, " to change this:
some_method( "here is a string", 3 )
to this:
some_method( "here is a ", 3 )
Type Ctrl-D-I, " to change this:
some_method( "here is a string", 3 )
to this:
some_method( "", 3 )
The default diakonos.conf configuration file now has an include custom.conf directive. This lets you keep your custom Diakonos configurations in ~/.diakonos/custom.conf while allowing you to regularly upgrade diakonos.conf with each new Diakonos version.
Version 0.8.7 marks the first version of Diakonos that can run under Ruby 1.9. Diakonos 0.8.7 will also run under Ruby 1.8.6. Please be advised that I am tentatively planning on dropping Ruby 1.8.x support beginning with the next Diakonos version.
Here is this version’s full changelog:
Report any bugs here, or come visit me in IRC! Enjoy this release.
Related posts:
Ramaze 2009.02 released
Ramaze 2009.02 has just been released. There are just a few changes since 2009.01:
manveru has always been conscientious about Ruby 1.9 compatibility in Ramaze (indeed, in all his projects), so Ramaze had already been considered 1.9-compatible for some time. With the recent release of Ruby 1.9.1, though, a fresh problem crawled out of the woodwork. This release addresses the issue; see the mailing list thread for details.
As some of you can probably appreciate, 1.9 compatibility is a non-trivial assignment. If you encounter any sort of problems using Ruby 1.9.1+, please don’t hesitate to let us know.
Contributions to this release came from the following people (listed alphabetically):
Install or update Ramaze with
gem install ramaze
As usual, we’d love to hear from long-time users and newbies alike.
Stop by and say hello in our IRC channel (#ramaze on Freenode), or ask questions on our mailing list.
And don’t forget that the next generation of Ramaze, with an “Innate” core, is on the horizon, with several features and improvements. In the mean time, enjoy this release!
Related posts:
Selfmarks - anti-social bookmarking
I’d like to introduce a project I’ve been working on for the past week.
From the Selfmarks site:
Selfmarks is anti-social bookmarking for the technically endowed. Trouble-free bookmarking for geeks. Bookmarking without the centralization handcuffs; you take all the credit (and blame).
I used Diigo to manage all my bookmarks for the past couple years, and for the most part the service has been decent. I would still recommend them as a good site for social bookmarking. But now and again, I would find their servers responding very slowly, and I just got fed up with that, because I never really used the “social” part of social bookmarking. All I really wanted was a place on the Internet I could put my bookmarks.
So, after one more episode of dissatisfactory service, I finally cracked and started writing up my own bookmarking site.
Selfmarks is written in Ruby, using the Ramaze web framework. I access a PostgreSQL database using M4DBI for ORM. Thanks go to Alexut for the Selfmarks logo.
Selfmarks is OpenID-enabled, so go ahead and use your OpenID to instantly create an account and play with the site. You can import your bookmarks in delicious format.
The project is open source; grab it from github, or
git clone git://github.com/Pistos/selfmarks.git
Installing Selfmarks for oneself should only be a mild challenge for a seasoned programmer. There has already been one other successful installation by an experienced Rails and Ruby dev.
Let me know what you think! Leave a comment on this blog post, or chat with me on FreeNode.
Related posts:
Well, I've decided to do the Release Early, Release Often thing. The first half of that, anyway. :)
I know this is all probably too much bother for what you get out of it, but let me reiterate that this was more an exercise for me than anything else. I'm still trying to find a killer use for CRM (besides spam tagging).
I've been playing with CRM114, a nifty language-slash-application which sorts and filters virtually any text stream (it takes from stdin, spits to stdout).
I've managed to pull together some Ruby scripts, CRM scripts, and PHP to work together to highlight diary entries (and subentries) based on whether you think the content is interesting or not. (screenshot)
After a few more days of ironing things out, and putting it to "real" (non-test) use, I will go public with it.
MyAdvogato
I've made a mental note to check out MyAdvogato when I have time. One gripe I have about the Recent Diary entries page is that I prefer to read entries in ascending chronological order; would be nice to have an option for this somewhere.
At the same time, I've resigned myself to accepting that Advogato is not meant to be cutting-edge, feature rich community/blogging/forum software.
Only yesterday did I stumble upon "Why Software Should Be Free". As I read the first third or so, I found it very inspiring, and it made me glad to be an open-source-slash-freeware programmer. However, getting about two-thirds into it, I found myself not as interested, especially after passing the URL around to some acquaintances in IRC, and then being informed by one about the Stallman vs. Bushnell thang that seems to have occurred rather recently.
Nevertheless, it's still somewhat inspiring (though perhaps not as much as when I read only the first third), and I agree with most of the ideas and suggestions for social change. At the same time, I already have a religion, thank you very much. :)
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!