Review of Instant MuseScore

Since I’ve always been interested in computer-aided music notation and a strong proponent of open-source software, I’ve been advocating MuseScore among my fellow musician colleagues since multiple releases. When learning the usage of a new piece of software, questions always pop up about the most common sheet music engraving tasks. When Packt Publishing asked me to review Instant MuseScore, I was eager to see whether this e-book fulfills its promise of being a pragmatic hands-on quickstart guide to the first steps of using MuseScore. Here are some of my thoughts.

Its workflow-oriented structure is very practical (although I would definitely not put the “Barlines and repeats” section into the “Formatting” chapter, especially repeats are clearly not a matter of formatting). The tip about setting the velocity of special notes (e.g. slashes) was new and useful for me. The notes about potential caveats are also helpful and can save a lot of frustration.

For an “Instant” book which aims to be quickly skimmable, more formatting emphases would be good, as well as indicating the keyboard shortcuts for every command mentioned. The used version of MuseScore could be more prominent because there are major UI changes between new versions.

I would note that ties can be inserted with the numeric plus sign (on most keyboards this character is bound to Shift+3, which is reserved for inserting a third below), and also I think it would be important to emphasize that unfortunately, extracted parts are separate copies, not views (as opposed to MuseScore’s commercial counterparts).

When describing expression anchors, I miss mentioning that they also affect playback obviously, not just the layout of the sheet music. In the lyrics chapter, it would be also worth showing the keyboard shortcut of inserting a space into a syllable. (Though this is not the most common case, it occurs quite frequently in some languages, e.g. in Italian.)

One tiny but apparent technical issue with the PDF version of the e-book: the embedded font does not support the Cmd and the spacer icon.

Although I doubt that a book (especially a printed one) is the most suitable medium for teaching the usage of such a complex application (screencasts are better, the best would be tutorials integrated into the interface of the application itself), if you can afford its not too low price, Instant MuseScore will give you a gentle introduction to this feature-packed but yet maturing program.

Language Features Enhancing Trust

Alex just facepalmed.

if ( Boolean.TRUE.equals(employee.isHappy) ) {

“Wow, the human invention never ceases to come up with new ways to adorn boolean expressions! Too bad Eclipse doesn’t have a Quick Assist for simplifying them…”
Ah, one of those WWTC moments. That’s when the Show Annotation feature of Subversive comes in handy… which revealed that Bob is the author (unless he only adjusted the whitespaces in that line). “But he already left the office for today. Now, I’ll just simplify it and similar occurrences manually and tomorrow, I’m going to considerately mention to him that he could have written this condition umm… more concisely.” Alex pondered a bit over the commit message, but practiced self-restraint and wrote simply

Simplify boolean expressions...

(though he couldn’t help omitting those ellipses).
Next day, some of the tests of Bob’s module were failing.
– Hi Bob, could we have a look at your code? First, there are some red tests, and…
– Hmm, but I haven’t modified that module since yesterday. Let’s see the exception!
– Okay…

Exception in thread "main" java.lang.NullPointerException
at EmployeeLoader.loadEmployee(EmployeeLoader.java:41)

“Hmm, exactly the line I modified. But…” – thought Alex.
– …how could a simple condition without a single dereferencing cause a NPE?! – asked Bob, confused just like Alex.
– Uh-oh, I think I have a suspicion… Please show the declaration of isHappy

private Boolean isHappy;

Alex facepalmed once again, but this time the cause was himself.
– NOOO! The dreaded autoboxing! But again, why isn’t it a primitive boolean?
– Hey, now I remember! Employees are parsed from XML using an autogenerated schema. The attribute isHappy is optional, so it might very well be null.
– Sorry, Bob. I feel silly for acting without asking you in advance or running the tests before committing. See, I couldn’t have imagined how this kind of change could break.
– Take it easy, Alex. 🙂 Now you can. In fact, I thought Boolean.TRUE would refer to the attribute’s type being non-primitive unambigously, and the Yoda condition would evoke the possibility of the null value immediately.
– I understand you, but to avoid such misunderstandings in the future, would you mind writing

if ( (employee.isHappy == null) && employee.isHappy ) {

to make it totally explicit that isHappy can be null? Or rather set an optional false value for this attribute in the schema?
– OK, I’ll consider.
Fortunately, Bob took the incident very lightly and his commit message was just:

Revert Alex's "simplifications" :)

The first thing Alex did was to set a warning for boxing and unboxing among the Java compiler settings. As he was accepting the changes, he thought: “Null and primitive types as well are billion dollar mistakes coming from arbitrary language design decisions which reflect implementation details. But at least they tought me to trust my fellow’s code – or at least to inspect the types before refactoring.”

How I recorded my part for the Virtual Choir

When I heard of Eric Whitacre’s Virtual Choir, I was immediately sold. After a lot bit of procrastination, I finally got to recording my part. However, things went not as easy as I had thought.

The first obstacle I encountered was that my MacBook’s built-in microphone is extremely noisy, so I had to record the video and audio separately, since there’s anyway a conductor track to synchronize to (so the video and audio won’t shift out of sync, there will be only temporary discrepancies), and I will attempt the recording multiple times anyway.

The next unpleasant surprise: playing a video consumes so much CPU that the fan is turned on, which is way too noisy. This was also a showstopper. I would have tried CPU throttling, but unfortunately cputhrottle didn’t work: the binary archive was corrupted, and the source couldn’t in any way compile. I almost gave up, when the LG GT540 Android smartphone I just got for this Christmas came into mind: it could serve perfectly as the video player!

This also wasn’t easy as pie, though. After downloading the video with Video DownloadHelper and copying it to the SD card, Android’s pre-bundled Media Player couldn’t open it. I found the excellent arcMedia player, which could play it, but at an impossibly slow frame rate. So I had to resize it: I chose HandBrake, and with the preset iPod conversion profile selected (320×192), the downgraded video played smoothly even in the built-in Media Player.

So I finally grabbed the phone, my Yamaha Pocketrak 2G recorder and the printed sheet music (I preferred the SATB score to the part), and dwelved into the music. (Of course, our neighbor’s dog barked into the silence at the end – I already expected that, but I managed to cut it out.)

However, replacing the audio track of the video was also hampered: iMovie ’08 can’t import the clip it recorded to a project, so I had to Google again. After another fair amount of time, I found SimpleMovieX, which suited my needs. I separated the video & audio track, added the new audio track to the video, synchronized them a bit and at last, the dubbed version was ready.

You can view the result here. I’m glad to finally be able to join a worldwide choir in this innovative social media experiment.

Árnyékköpések 2: Baljós árnyak

Folytatódnak kalandozásaink 2072-ben, humorunk egyre árnyaltabb lesz…

JK: Csak annyit tudtam meg, hogy híres vagyok.

Egy JK1 (kalóz) által vízbe visszadobott hal és JK2 (pap) többszöri sikertelen mágiadetekciója után:
JK2: Megfogok valamit, ami nem törékeny, és odavágom a falhoz.
JK1: Kár, hogy most dobtam vissza a halat.

KM: Addig kell, hogy dobj, amíg critical glitch nem jön ki.

KM: (lelkiismeretesen) Előre is elnézést kérek a modulért.
JK: Ööö… azaz ma mind meghalunk?

KM: Minden motoroson két ember ült.

(karakterlap-elemzés)
KM: Neked nagyon jók a fizikához kapcsolódó képességeid.
JK: Mint Einsteinnek? Vagy jól vezetem az elektromosságot?

(túszejtő akció közben)
JK1 (rigger): Átadom VR-ben a drone fegyvereinek vezérlését a fegyverspecialistának.
JK2 (fegyverspecialista, tússzal a kezében): Egy tipp: lehetőleg csak azután tedd, miután bevonszoltam a foglyot a kocsiba…

JK1: Nekem 2 SIN-em van!
JK2: KétSINű…

JK1 (rég eltűnt, de megkerült NJK nagybácsijának): Halálra kerestelek téged!
JK2 (az azóta befutott runner): Mi pedig halálra kerestük magunkat.

Nemrég HMHVV révén keletkezett vámpír NJK egy keresztet szorongat, amit papunknak jó lenne megszereznie:
JK1 (pap a vámpírnak): Segíteni jöttem.
JK2: Segíteni hordozni a keresztjét?
JK1: Mindenkinek megvan a maga keresztje…

Árnyékköpések: Food Fight

Életünk első kalandozása a Shadowrun világában, mely egy ártatlan bevásárlásnak indult, és amelyben sajnos minden NJK-nak volt neve. Featuring: Timi hangokat halló kalóza, TeoZ gremlin-elf adeptje, D-nee tárgyalóképes fegyverspecialistája, Overander figyelemelterelő covert ops specialistája, Eversong troll riggere, és természetesen Stampie, mint egykor ember KM.

JK1 (gremlins negative qualityvel): Nem csoda, hogy nincs commlinkem.
JK2: Persze, hiszen gremlin vagy.
JK1: Nem gremlin vagyok, hanem elf.

JK (rigger): Milyen messze vagyunk a kocsimtól?
KM: (hasból) …1 km-re.
JK: Pont 1 km a hatótávolságom!

JK1: Ott valaki mozog.
JK2: (miután perception testre dobott critical glitch folytán képzelődött) Én meg hangokat hallok!

JK: (NJK-król) Vagy egyszerűen nem álltak le gondolkodni.
KM: Túl sok az augmentation…

JK1: (két kétajtós szekrénnyel való harc közben) Mekkora egy szekrény sebzése?
JK2: Ez egy gyenge idegzetű szekrény.

JK: (miután elintéztük az összes ellent, de erről a karakter nem tudhatott, csak a játékos) Én felkiáltok, hogy nincs több… szerintem.

NJK: (frissen megmentve, félelemmel a hangjában) Kik vagytok ti?
JK: Shadowrunnerek, akik éppen most fejezték be első moduljukat.

Intelligencia – a telligencia ellentéte.