LilyPond 2.12.0 is out. Go. Download. It. Now. Seriously...it's wonderful! :-)
24 December 2008
13 December 2008
The Future of the Internals Reference
I hope you're prepared for another...ahem...*nerdy* post from me. As you have probably noticed, I care about LilyPond a lot. And guess what? The ``Internals Reference'' is a piece of the LilyPond documentation. So again, another post relating to LilyPond. Though LilyPond's Learning Manual and Notation Reference do a good job of explaining how to navigate the Internals Reference, this manual needs some major improvements. And since the Internals Reference is automatically generated from source code, these changes will likely be non-trivial to implement (except for the developers that are proficient in Scheme):
- The ``Music expression'' pages should indicate which ``Music properties'' they support. Implementing a new collection of pages similar to the ``Grob interface'' pages would be nice.
- What are ``Music classes''? I have a vague idea from browsing through the manual, but this concept should be cleared up.
- The list of grob interfaces on the grob pages should be placed above the list of standard settings, i.e. near the top. The current structure is less efficient from a navigation point of view.
- Every grob page should list *precisely* which grob properties the grob supports and *from which* grob interface each grob property belongs. If a grob *supports* an interface, this doesn't mean it supports *every* grob property in the interface; this is why documenting *only* the grob interfaces is less than ideal. However, implementing a system that improves the current setup might require more ``data dumping'' from the C++ side.
- The following items should be differentiated from the source code itself and not hardcoded in Scheme code: (a) Tunable versus internal context properties, (b) Tunable versus internal grob properties, (c) Whether or not a grob support a particular grob interfaces, (d) Precisely which properties a grob supports.
- Brand new sections need to be added to ``4. Scheme functions''. As I noted in an earlier post, there are *many* more Scheme functions available than the ones listed here. However, I admire this section in that it is *truly* auto-generated from source code. Every other section is too hard-coded to be completely useful.
~ Patrick at 4:09 PM 1 comments
New Glyphs!!
Sweet! Check out these new arrowed-accidental glyphs that have just been added to LilyPond: These are pretty awesome. I really want to learn Metafont *now*. But there are many programming languages in the queue right now. :-) Many thanks to Maximilian Albert and Werner Lemberg for adding these glyphs. Cheers!
~ Patrick at 12:14 AM 1 comments
12 December 2008
Scheme and Lily
A very interesting discussion is happening on the LilyPond Development mailing list (starting here) relating to improving LilyPond's support for tablature notation. LilyPond's syntax, as mandated by the parser, caters more to "note-centric" input; however it seems that tablature notation is best written in terms of "finger positions" without having to worry about what notes are indicated.
This got me thinking about LilyPond's syntax in general. It's "surface" syntax resembles that of TeX or LaTeX, with commands beginning with backslashes and curly braces used as delimiters. But its "beneath-the-surface" syntax uses the Scheme programming language and shows the music events that are taking place. However, this syntax can get pretty wordy and complex.
I think it would be very interesting to try implementing a macro language for the underlying Scheme language using Scheme! After all, that is what Scheme is useful for: building an abstraction on top of another, and another, and another, etc. IMO, this would look very elegant. So instead of typing this:
\version "2.11.65"
I could type this instead:
(version 2.11.65)
And instead of this:
\relative c' { c4 d e f g1 }
I could type:
(relative-to C4 'sequential (c-quarter d e f g-whole))
I don't know yet, but I think it would be kind of neat. :-)
~ Patrick at 1:06 AM 2 comments
09 December 2008
Millions of Functions
LilyPond's documentation is quite extensive, and it's a great source of information if you're interested in learning how to use the software. Some of LilyPond's documentation is automatically generated straight from Scheme source code. This part of the documentation cover's much of LilyPond's "internals", including a complete list of music expressions, grobs, grob properties, etc. It also covers public functions that are exported to Scheme at runtime from C++ code. All of these functions begin with `ly:', so they are easy to recognize. However, there are *many* functions that are defined in the Scheme source that don't have autogenerated documentation. Some have docstrings, but many do not. Eventually I plan on getting all of these functions documented too, because some of them are incredibly useful. I didn't realize until today that some of these functions are generated *on-the-fly*, so it might be more tricky to document these particular functions. Some examples are `make-simple-markup', `make-bold-markup', etc. In fact, a `make-BLAH-markup' function is created for *every* markup command. So Lily's markup command \simple performs the same operation as `make-simple-markup' would in Scheme. Interesting stuff. I'm slowly becoming more familiar with how LilyPond operates, so the huge number of (unfortunately) undocumented Scheme functions is definitely helping me understand things better.
~ Patrick at 8:04 PM 1 comments
24 November 2008
Thoughts on operating systems
I have been using Arch Linux now for about 1.5 years. All of the years that I spent in the world of Microsoft Windows is gradually fading from my memory. It's a very strange feeling. I don't have any regrets about using Windows, even though I love my current operating system much more than any Windows system. It was just the natural evolution of things. Windows was what I knew and the only thing I knew. Hell, I loved "tweaking" my system by invoking regedit and deleting or modifying registry keys. It was fun to make Windows faster. But now that I use an operating system that stays fast, at all times, my thinking has thus evolved. I used to have the desire to convert Windows users to GNU/Linux, but that's no longer a desire of mine. I believe, over time, the popularity of GNU/Linux will increase, so the number of users will naturally increase. It would be silly to try and speed up the process. Windows 7...Many people will be switching to it, but I will not. Why? Well, because I'm not really interested in it. My operating system could become Windows-7-esk if I wanted it to be. But no thanks. I would rather have a minimal setup with frequent updates to my favorite applications (one of the perks of Arch Linux); I don't want to pay for it, not have to rely on a commercial company for support, etc. Off to bed...
~ Patrick at 1:43 AM 1 comments
04 November 2008
Obama is Awesome!!
Congratulations to Mr. Obama for becoming our next President of the U.S.A. YAY!!
~ Patrick at 8:22 PM 0 comments
26 October 2008
Quote of the Day
My roommate said this earlier (yesterday):
"Buying a laptop with Ubuntu on it was one of the best decisions I've ever made."
I will say nothing further.
~ Patrick at 12:11 AM 1 comments
25 October 2008
Vim discovery
It will take me a while to get used to this, but I just discovered that <CTRL>+[ is equivalent to <Esc>. OMG. This is amazing. The vimtutor desperately needs to mention this. I'm ecstatic.
~ Patrick at 11:35 PM 1 comments
23 August 2008
Pushing LilyPond to the extreme!!!
I'm pretty sure that the "shortest" note Sibelius recognizes is the 512th note. I've never *really* used Finale for more than 5 minutes, so I can't tell you how it compares to Sibelius. My *guess* is that it has a similar limit. Now, LilyPond is a different animal. I knew that LilyPond's limit for *unbeamed* notes is the 64th note, a la: But, when it comes to *beamed* notes, all I remember hearing is "the sky is the limit". So, I have put LilyPond to the test. Here is a case where LilyPond fares very well with 131072nd notes: Yes. Now if you ask me, that is FREAKIN' awesome! I won't make you count the beams, but there are 15!!! Trust me! I tried an example with 262144th notes, but the formatting isn't as pleasing: I'm pretty sure you could squeeze even more extreme note lengths from LilyPond if you use a smaller font size (these examples use the 20pt default). :-P All I can say is... Take that, Finale and Sibelius!! (P.S. Click on the images to see them in higher resolution)
~ Patrick at 4:43 PM 1 comments
05 August 2008
Backward compatibility
Backward compatibility... Is it worth the time and effort? It depends on the circumstances and the technology in question. The fact that USB 2.0 is backward compatible with USB 1.1 is an absolute lifesaver for me. The fact that Firefox is capable of rendering some of most horribly-written, deprecated, typo-laden HTML with grace is another case where backward compatibility shines through. Over time, I've made a habit to always upgrade my software when updates are available. Arch Linux makes this easy for me. A simple `pacman -Syu` automates the process for me. Software developers release new versions of their software for a reason: 1) They have fixed some bugs 2) They have added new features 3) They have improved existing features 4) Any combination of the above The result is (almost) always an improved piece of software. This is a very optimistic point of view on my part, but it is usually true. Thus, I feel obligated to download their new, improved version. As a result, I am always living on the bleeding edge in terms of software. So I don't care too much about backward compatibility in relation to software. If it works with my hardware, I'm okay with it. Yes, Vista works fine on my hardware too, but I'm not going there. I wiped that baby from my hard drive in a flash... What do you think about backward compatibility? Any thoughts, anonymous commenters?
~ Patrick at 7:11 PM 1 comments
The Awesome Bar
Okay. Now that Firefox 3 has been out for a while, and the comments around the net have died down, I would like to say a few things about the revamped Location Bar (AKA, the "Awesome Bar"). First of all, the Awesome Bar is very awesome. It knows about your bookmarks, search history, tags, the frequency and recency of each visit to a site, etc. And it magically optimizes its behavior based on the way you use the browser. In other words, the Awesome Bar can be trained. Since I only frequently visit a few web sites on any given day, I bookmark these sites (click the star), since the Awesome Bar seems to give preference to bookmarks. Also, if I clear my browser history, the bookmarks are still saved (thankfully), so the Awesome Bar becomes even more useful. In fact, I've only clicked on the `Bookmarks' menu approx. 4 times since I've used Firefox 3. The most commonly criticized aspect of the Awesome Bar is its "intrusive" nature and "lack of polish" as compared to the old Location Bar. I can understand what these people are saying, but I honestly don't care. I love the Awesome Bar for its functionality and adaptive-learning characteristics. I don't care how it looks. I don't find OpenOffice.org's UI very attractive, but I do find OOo to be incredibly reliable and simple to use. Mozilla, you rock! Firefox 3.5 is going to be even more amazing!
~ Patrick at 6:43 PM 2 comments
02 August 2008
RTL8187B will soon be supported
Fantastic news! The upcoming Linux kernel (2.6.27) will provide support for the RTL8187B (Realtek) chipset for wireless USB adapters. This is the chipset in my adapter, so I'm thrilled. Many people have tried to make these adapters work with the native Linux drivers. Info can be found here: http://www.datanorth.net/~cuervo/rtl8187b/ http://www.a110wiki.de/wiki/Wireless There are two different USB IDs associated with this chipset (0bda:8187 and 0bda:8189), and they will both be supported. I accidentally discovered this information from browsing the commit history in the Linux git sources. All of the patches relating to RTL8187B were committed in July (so far)! Here are links to a bunch of the patches (mostly for my reference, but others might be interested in looking at the patches too): http://tinyurl.com/68ayq7 http://tinyurl.com/5w4au9 http://tinyurl.com/5oube6 http://tinyurl.com/6fxkls http://tinyurl.com/6k8sp3 http://tinyurl.com/6hgmp4 http://tinyurl.com/5jr3r9 http://tinyurl.com/67nesc Long live GNU/Linux!!
~ Patrick at 7:03 PM 1 comments
10 July 2008
LilyPond Bug...Crushed!!!
I never thought I would *stumble* upon a bug in LilyPond, but I did. It was an outstanding bug that's been around for 1 1/2 years, and I believe that the default LilyPond build runs quite a bit faster now that the bug has been fixed.
As I said, I discovered the *typo* by accident. When I was compiling LilyPond's documentation from scratch a few days ago, a compile-time error was preventing me from completing the build. It's strange though, because when I redirected stdout and stderr to a file, like so:
$ make web > lily-makeweb.log 2>&1
the build successfully completed! After inspecting the log file, I noticed these *bogus* "programming errors" appearing at the spot where the build usually failed. I grepped the phrase in the source code, which took me to lily/include/smobs.hh. It turns out that this programming error was only supposed to appear when building an unoptimized, debugging build of LilyPond (which is not the default). But there was a typo in the #ifndef test (it checked for NDEDUG instead of NDEBUG), so the subroutine to check for these "programming errors" was being included in the binary no matter the configuration.
Anyway, nobody else has mentioned a speed increase yet, so maybe it's just relevant to my setup. But it's exciting.
I hope you enjoyed my convoluted bug-crushing story that involved changing one letter in an identifier name in a preprocessor conditional construct. :-)
~ Patrick at 6:28 PM 2 comments
17 June 2008
Firefox 3 is here!!
This is SO exciting!! If you are reading this, download Firefox 3 right now. You should, for two reasons: 1) It is the best and fastest browser currently available 2) You can take part in setting a Guinness World Record for the most downloads in one day if you download it by approx. 11AM PDT on June 18. Here is what Firefox 3 looks like on my machine (first run): Isn't that awesome! Now, hurry! Go download. Download, download, download!
~ Patrick at 1:00 PM 1 comments
24 April 2008
Blackboard...you have issues!
Okay. Blackboard and Linux do not get along at all. It turns out that Blackboard is currently 'unsupported' on the Linux platform. Not cool. I think Blackboard's programming team is living in the dark ages. Anyways...to the point: Fortunately, most of Blackboard's functionality is web-based, and since Firefox (all any platform) is more than capable of handling anything HTML/CSS/JavaScript, Blackboard works.......mostly. Since the Linux operating system is not 'supported', Blackboard performs a user-agent check to see if you are running Windows or Mac. If not, you cannot upload files to Blackboard. Not cool. I have tried the Firefox extension called User Agent Switcher that lets you 'spoof' your browser's identification, the version of your browser, and your operating system. For example, I could be running Mozilla Firefox 3.0 Beta 5 on Linux, and using the User Agent Switcher, I could pretend to be running Microsoft Internet Explorer 7 (GASP!!) on Windows Vista (GASP!!), and no website would know the difference. Isn't that wonderful? Firefox lets the user be in control, and that's what I love about it. Unfortunately, this doesn't fool Blackboard. Blackboard looks for filenames that have backslashes in them. Aha! So if I try to upload a file called myCrazyLongFileName.cpp, Blackboard won't let you upload it. But if I rename the file to be \myCrazyLongFileName.cpp, Blackboard recognizes the file. And it gets better: Blackboard strips this backslash after you upload the file. Yes!! Glorious!!
~ Patrick at 4:43 PM 2 comments
23 April 2008
Arch Linux!!
Arch Linux rules! It is not too difficult for beginners to figure out; if you read the Beginner's Guide on the Arch Linux Wiki, you'll be ready to go. If you want to try Arch Linux, there is a new "Arch Live" ISO image coming out very soon (the Release Candidate has already been released). Even though I've had Arch installed on my PC for about 8 months now, I will definitely test out the Live CD once the final ISO is released. Since Arch Linux is a fairly "bleeding-edge" distro, I have become accustomed to receiving regular software updates (sometimes up to 10 updates per day). In other words, when a new version of a software package on my system is released, I expect the Arch Linux development team to send the updates to me. And...they usually do. Recently, I have been a little frustrated (okay, very frustrated) that my printer software package (HPLIP) doesn't get updated in a timely fashion. It's okay though, because now I know how Arch's ABS system works. I am running the latest version HPLIP, compiled using up-to-date configure options and updated dependencies, and now I'm happy. There is currently a Udev problem on my system, but that's okay. It'll be fixed eventually, and running /etc/start_udev is a temporary workaround. Now go install Arch Linux! If you use Windows, Mac OS X, BSD, or a different GNU/Linux distribution and feel adventurous, I would highly recommend trying out Arch Linux using the upcoming Arch Live CD. Make sure you read (or print out) the Beginner's Guide first though. It, along with the Arch Linux Forums, will answer any questions you may have. Have fun!!!! :-)
~ Patrick at 11:11 PM 1 comments
08 January 2008
Oh, Wonderful Vim
I have been using Vim as my primary text editor and web development IDE for a couple of months now, and my experience so far has been excellent. I would classify myself as an "intermediate" Vim user right now, since I'm still learning some of the more advanced commands (that make my life easier), but I am making huge progress.
Here is a tip for Linux users that I just discovered yesterday. It assumes that you have Vim as well as GVim installed.
On the command line, type
$ gvimdiff firstfile secondfile
Notes: The "$" symbol above is the prompt (it could be "#" for a root user). "firstfile" and "secondfile" are the locations of two files you wish to compare.
GVim will open in a two paned window, illustrating colored diffs between the two files (assuming your ~/.gvimrc allows for the color). I highly recommend using the Desert colorscheme to compare the files; the diffs really stand out as a result.
This works for comparing more than two files as well. Just tack the additional locations on the end:
$ gvimdiff firstfile secondfile thirdfile ... ... ...
I hope this is helpful!
~ Patrick at 12:17 PM 1 comments