<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>♩ ScoreRender ♫</title>
	<atom:link href="http://scorerender.abelcheung.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://scorerender.abelcheung.org</link>
	<description>sheet music rendering plugin for Wordpress</description>
	<pubDate>Wed, 01 Oct 2008 22:14:54 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>My most admired instrument</title>
		<link>http://scorerender.abelcheung.org/2008/10/02/my-most-admired-instrument/</link>
		<comments>http://scorerender.abelcheung.org/2008/10/02/my-most-admired-instrument/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 22:14:54 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[ABC]]></category>

		<category><![CDATA[Mup]]></category>

		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/?p=51</guid>
		<description><![CDATA[Though I used to play piano during old days (that&#8217;s why most of the demo pieces are from piano  ), pianist aren&#8217;t the kind of music player I admire most. At least, not as strong as towards drummer. I never said pianist is no good; their virtuosity for difficult (sometimes terrific) pieces keeps me [...]]]></description>
			<content:encoded><![CDATA[<p>Though I used to play piano during old days (that&#8217;s why most of the demo pieces are from piano <img src='http://scorerender.abelcheung.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), pianist aren&#8217;t the kind of music player I admire most. At least, not as strong as towards drummer. I never said pianist is no good; their virtuosity for difficult (sometimes terrific) pieces keeps me still addicted to concertos like Rachmaninoff&#8217;s and Prokofiev&#8217;s ones; but there are entirely different challenges for drummers, at least viewed from outsider&#8217;s angle. Example?</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-mup-9451dda00ca1d13e62f102134bb5891f.png' />
<input type='hidden' name='code' value='%5Bmup%5D%0A%2F%2F%21Mup-Arkkra-5.0%0Ascore%0Aleftmargin%20%3D%200%0Arightmargin%20%3D%200%0Atopmargin%20%3D%200%0Abottommargin%20%3D%200%0Apagewidth%20%3D%205%0Alabel%20%3D%20%22%22%0Ascore%0D%0Atime%20%3D%203%2F4%0D%0Abeamstyle%20%3D%204%2C4%2C%288%2C8%29%0D%0Astaff%201%0D%0Astafflines%20%3D%201%0D%0Amusic%0D%0A1%3A%208c%3B%20%7B16%3B16%3B16%3B%7D3num%3B%208%3B%20%7B16%3B16%3B16%3B%7D3num%3B%208%3B%3B%0D%0Abar%0D%0A1%3A%208c%3B%20%7B16%3B16%3B16%3B%7D3num%3B%208%3B%20%7B16%3B16%3B16%3B%7D3num%3B%20%7B16%3B16%3B16%3B%7D3num%3B%20%7B16%3B16%3B16%3B%7D3num%3B%0D%0Abar%0A%5B%2Fmup%5D'>
</form>
<p>Sounds familiar? How about this one:</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-abc-b020be19a18ce44c89aa6ff0a4c56e65.png' />
<input type='hidden' name='code' value='%5Babc%5D%0A%25abc%0A%25%25staffwidth%203in%0A%25%25stretchlast%20no%0A%25%25leftmargin%200.2in%0A%25abc2mtex%3A%20yes%0AX%3A1%0D%0AK%3AC%20clef%3Dnone%20stafflines%3D1%0D%0AL%3A1%2F16%0D%0AM%3A4%2F4%0D%0A%25%0D%0ABBBB%20B4%20BBBB%20B2BB%20%7C%20BBBB%20B2BB%20BBBB%20B4%20%7C%0A%5B%2Fabc%5D'>
</form>
<p>Probably even starters can learn these rhythms very soon, as they are easy ones. Even people who haven&#8217;t played drum in their live can tap these rhythms with finger in no time (hey, drum games on game consoles don&#8217;t count!). But I haven&#8217;t finished: what if one need to:</p>
<ul>
<li>Beat these rhythms non-stop for <strong>more than 10 minutes</strong></li>
<li>Make absolutely <strong>no single error</strong></li>
<li>Play at <strong>constant speed</strong> thoughout the whole passage, without anybody noticing any tempo change</li>
</ul>
<p><em>That</em> is not so easy. This is the case for first rhythm, which comes from <a href="http://en.wikipedia.org/wiki/Bol%C3%A9ro">Ravel&#8217;s Boléro</a>. Think about beating the same rhythm again and again and again for 12+ minutes without any error, and controlling tempo / loudness at the same time! Probably even professional drummers can&#8217;t do that at single pass. It needs undivided attention and dedication in order to achieve the result.</p>
<p>For 2nd rhythm, which comes from <a href="http://en.wikipedia.org/wiki/Symphony_No._7_(Shostakovich)">Shostakovich&#8217;s 7th Symphony</a>, it&#8217;s not so demanding for drummer &mdash; just about 7-8 minutes instead of 12+ minutes (in Ravel&#8217;s own interpretation probably around 17 minutes). But every other element is the same: repeat the same thing over and over, non-stop, no mistake, very gradual crescendo like Boléro. And again, it&#8217;s snare drum&#8217;s call.</p>
<p>No, I don&#8217;t think I can devote such concentration, that&#8217;s why I give my thumbs up to these drummers.</p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2008/10/02/my-most-admired-instrument/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Support on Windows</title>
		<link>http://scorerender.abelcheung.org/2008/09/19/support-on-windows/</link>
		<comments>http://scorerender.abelcheung.org/2008/09/19/support-on-windows/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 18:23:09 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/?p=41</guid>
		<description><![CDATA[After several nights of hair pulling, Windows support is there, as well as support for yet another notation: Philip&#8217;s Music Writer.
Let me talk about Windows support first. It took me way too much time to finish it than I anticipated. There are a couple of scaring problems for using PHP on Windows.
Command execution on Windows
Under [...]]]></description>
			<content:encoded><![CDATA[<p>After several nights of hair pulling, <a href="http://plugins.trac.wordpress.org/browser/scorerender/trunk">Windows support is there</a>, as well as support for yet another notation: <a href="http://www.quercite.com/pmw.html">Philip&#8217;s Music Writer</a>.</p>
<p>Let me talk about Windows support first. It took me way too much time to finish it than I anticipated. There are a couple of scaring problems for using PHP on Windows.</p>
<h4>Command execution on Windows</h4>
<p>Under PHP documentation of <code>system()</code> function, people have been talking about PHP <strong>incapable of executing any command line with more than 2 double quotes, since PHP 4.3.x</strong>. So the following command line:</p>
<blockquote><p><code>"C:\Program&nbsp;Files\ImageMagick\convert.exe" "C:\Temp&nbsp;Folder\1.gif" C:\1.png</code></p></blockquote>
<p>Produces an instant failure (because there are 4 double quotes). And adding insult to injury: it&#8217;s not limited to <code>system()</code>, any other program execution functions like <code>exec()</code>, <code>popen()</code> are affected as well. Now the newest stable version is 5.2.6, guess what? Nothing changed. And people simply invented schemes to circumvent the bug, the most obvious one being using batch file, and that&#8217;s what I end up doing as well.</p>
<h4><code>tempnam()</code> stupidity on Windows</h4>
<p>So this is an undocumented feature: <code>tempnam()</code> on Windows only uses 3 letter prefix and a sequentially increasing counter as suffix! Now compare with the Unix counterpart &mdash; people have been complaining how this temp file creation is a security problem on Unix, but it&#8217;s suddenly not a security problem anymore on Windows! Fantastic!</p>
<p>Other people have been bragging programmers not to invent their own schemes, and use native functions instead. But no way, I won&#8217;t listen to such &#8220;recommendations&#8221;!</p>
<hr width="75%" size="1" noshade />
<p>For Philip&#8217;s Music Writer support, it is also not as straight forward as it should be, the main problem being on image conversion. No matter how I indicated sheet size in PMW source, ImageMagick invariably insists image size is 612&times;792 (which translates to 8.5&quot; &times; 11&quot; under 72 <abbr title="Dot Per Inch">DPI</abbr>)! And the final resulting PNG file is a 1&times;1 pixel dot.</p>
<p>Probably the problem is on PMW&#8217;s side. Normally within PostScript preamble part there is at least a declaration of <code>%%BoundingBox</code>, specifying its size (some even go as far as specifying <code>%%DocumentPaperSizes</code> and <code>%%HiResBoundingBox</code>); yet nothing like that exists in PostScripts produced by PMW. Anyway, that problem is temporarily fixed by forcing paper size using ImageMagick <code>-page</code> option.</p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2008/09/19/support-on-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>0.2.0 debutted</title>
		<link>http://scorerender.abelcheung.org/2008/08/27/020-debutted/</link>
		<comments>http://scorerender.abelcheung.org/2008/08/27/020-debutted/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 23:59:54 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/?p=40</guid>
		<description><![CDATA[The much delayed release is out now. Download it by clicking on download icon!
Here is the list of more prominent changes since 0.1.x version:

Remove markup configuration, and adds lots more config options
Show statistics in dashboard
Clickable image showing music source
Start to migrate to PHP5-style classes
Image conversion routine redone
Allow clearing cache within admin page

However, to be sincere, [...]]]></description>
			<content:encoded><![CDATA[<p>The much delayed release is out now. Download it by clicking on download icon!</p>
<p>Here is the list of more prominent changes since 0.1.x version:</p>
<ol>
<li>Remove markup configuration, and adds lots more config options</li>
<li>Show statistics in dashboard</li>
<li>Clickable image showing music source</li>
<li>Start to migrate to PHP5-style classes</li>
<li>Image conversion routine redone</li>
<li>Allow clearing cache within admin page</li>
</ol>
<p>However, to be sincere, some of the changes <em>do</em> make me worried, namely:</p>
<ol>
<li><strong>Requirement of PHP5</strong>: though PHP5 growth is a bit stronger after PHP4 end of life, we are still seeing 41% adoption of PHP5 only (<a href="http://www.nexen.net/chiffres_cles/phpversion/18606-php_statistics_for_july_2008.php">statistics by nexen</a>). That means half of potential users can&#8217;t upgrade&#8230;</li>
<li><strong>Requirement of newer ImageMagick</strong>: I can&#8217;t stop cursing ImageMagick maintainers for this one. All packagers and software developers used to curse them, now I can feel the hatred in the guts too. ImageMagick can change API, compatilibility and even command line options between any minor, or even patch level releases! Damn it. Software versioning is completely meaningless for ImageMagick. As <a href="http://scorerender.abelcheung.org/2008/08/22/resuming-development/">I have said before</a>, <code>-channel alpha</code> no more creates alpha channel, causing all transparency rendering broken with previous release. However, not that many web servers have newest ImageMagick installed. I&#8217;d say the restriction is even more serious than PHP one. Perhaps I may need to think of another way to circumvent the problem in the coming releases.</li>
<li><strong>Potential of <abbr title="Cross Site Scripting">XSS</abbr> on showcode.php</strong>: right now showcode.php reads music fragment from POST request and dumps them only after minimal content filtering. I&#8217;m a bit worried it can be susceptible to XSS. Perhaps there is need to fire up XSS scanners in short future.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2008/08/27/020-debutted/feed/</wfw:commentRss>
		</item>
		<item>
		<title>All notations side by side</title>
		<link>http://scorerender.abelcheung.org/2008/08/26/all-notations-side-by-side/</link>
		<comments>http://scorerender.abelcheung.org/2008/08/26/all-notations-side-by-side/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 14:02:43 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[ABC]]></category>

		<category><![CDATA[GUIDO]]></category>

		<category><![CDATA[Lilypond]]></category>

		<category><![CDATA[Mup]]></category>

		<category><![CDATA[PMW]]></category>

		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/?p=35</guid>
		<description><![CDATA[Upon a time I have had compared the results of various notations side by side in my own blog, split into several posts. But comparing them within one single post is cooler, and easier for comparison purpose. So here presents the beginning 2 bars of Prokofiev Piano Sonata No. 8, second movement:
ABC:




Guido:




Mup




Lilypond




PMW:




Among all notations, Lilypond [...]]]></description>
			<content:encoded><![CDATA[<p>Upon a time I have had compared the results of various notations side by side in my own blog, split into several posts. But comparing them within one single post is cooler, and easier for comparison purpose. So here presents the beginning 2 bars of Prokofiev Piano Sonata No. 8, second movement:</p>
<p>ABC:</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-abc-c0234f4ad2d227269a7bc5d0a70b0d24.png' />
<input type='hidden' name='code' value='%5Babc%5D%0A%25abc%0A%25%25staffwidth%203in%0A%25%25stretchlast%20no%0A%25%25leftmargin%200.2in%0A%25abc2mtex%3A%20yes%0A%25%25vocalfont%20Times-Italic%2013.0%0D%0AX%3A1%0D%0AT%3A%0D%0AM%3A3%2F4%0D%0AL%3A1%2F4%0D%0AQ%3A%22Andante%20sognando%22%0D%0AK%3ADb%0D%0A%25%25staves%20%7B%281%202%29%203%7D%0D%0A%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%0D%0AV%3A1%20%20stv%3D3%0D%0A%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%0D%0AV%3A1%0D%0AA2%20%28B%2F4A%2F4%3DG%2F4A%2F4%20%7C%5C%0D%0Aw%3A%20dolce%20%7C%0D%0AL%3A1%2F8%0D%0Ad%29%26gt%3BA%20%5BDFA%5D%28%5BDFA%5D%5BCEG%5D%29%5BB%2CDF%5D%20%7C%0D%0A%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%0D%0AV%3A2%0D%0A%21p%21%5BEF%5D%20%5BDF%5D%20%5BC%3DE%5D%20%7C%5C%0D%0AL%3A1%2F4%0D%0A%5BDF%5D%20x2%20%7C%0D%0A%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%0D%0AV%3A3%20clef%3Dbass%0D%0A%5BD%2C%2CD%2C%5D%20%5BA%2C%2CA%2C%5D%20%5BA%2C%2C%2CA%2C%2C%5D%20%7C%20%5BD%2C%2CD%2C%5D%20%5BA%2C%2CA%2C%5D%20%5BA%2C%2C%2CA%2C%2C%5D%20%7C%0A%5B%2Fabc%5D'>
</form>
<p>Guido:</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-guido-5bdce4692d949c8c140f41e8778b2a32.png' />
<input type='hidden' name='code' value='%5Bguido%5D%0A%7B%20%5B%5Ctempo%26lt%3B%22Andante%20sognando%22%2Cdy%3D8%26gt%3B%0D%0A%20%20%20%5CbarFormat%26lt%3Bstyle%3D%22system%22%26gt%3B%0D%0A%20%20%5Cstaff%26lt%3B1%26gt%3B%20%5Cclef%26lt%3B%22g%22%26gt%3B%20%5Ckey%26lt%3B-5%26gt%3B%20%5Cmeter%26lt%3B%223%2F4%22%26gt%3B%0D%0A%20%20%5Ctext%26lt%3B%22dolce%22%2Cfont%3D%22Times%22%2Cfsize%3D10pt%2Cfattrib%3D%22i%22%2Cdy%3D4%2Cdx%3D0%26gt%3B%20%5Cspace%26lt%3B0%26gt%3B%0D%0A%20%20%5Ci%26lt%3B%22p%22%26gt%3B%20%5CstemsUp%20a%26amp%3B%2F2%20%5Cslur%28b%26amp%3B%2F16%20a%26amp%3B%20g%20a%26amp%3B%20%5Cbar%20d%26amp%3B2%2F8.%29%20a%26amp%3B1%2F16%20%5Cbeam%28%7Bd%26amp%3B%2F8%2C%20f%2C%20a%26amp%3B%7D%20%5Cslur%28%7Bd%26amp%3B%2C%20f%2C%20a%26amp%3B%7D%20%7Bc%2C%20e%26amp%3B%2C%20g%26amp%3B%7D%29%20%7Bb0%2C%20d1%2C%20f%7D%29%20%5D%2C%0D%0A%20%20%5B%20%5Cstaff%26lt%3B1%26gt%3B%20%5CstemsDown%20%7Be%26amp%3B%2F4%2C%20f%7D%20%7Bd%26amp%3B%2C%20f%7D%20%7Bc%2C%20e%7D%20%5Cbar%20%7Bd%26amp%3B%2C%20f%7D%20%5D%2C%0D%0A%20%20%5B%20%5Cstaff%26lt%3B2%26gt%3B%20%5Cclef%26lt%3B%22f%22%26gt%3B%20%20%5Ckey%26lt%3B-5%26gt%3B%20%5Cmeter%26lt%3B%223%2F4%22%26gt%3B%0D%0A%20%20%7Bd%26amp%3B-1%2F4%2C%20d%26amp%3B0%7D%20%7Ba%26amp%3B-1%2C%20a%26amp%3B0%7D%20%7Ba%26amp%3B-2%2C%20a%26amp%3B-1%7D%20%5Cbar%20%7Bd%26amp%3B-1%2C%20d%26amp%3B0%7D%20%7Ba%26amp%3B-1%2C%20a%26amp%3B0%7D%20%7Ba%26amp%3B-2%2C%20a%26amp%3B-1%7D%5D%0D%0A%7D%0A%5B%2Fguido%5D'>
</form>
<p>Mup</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-mup-6664da9ab389afb1c57d7883ac1f07f5.png' />
<input type='hidden' name='code' value='%5Bmup%5D%0A%2F%2F%21Mup-Arkkra-5.0%0Ascore%0Aleftmargin%20%3D%200%0Arightmargin%20%3D%200%0Atopmargin%20%3D%200%0Abottommargin%20%3D%200%0Apagewidth%20%3D%205%0Alabel%20%3D%20%22%22%0Ascore%0D%0Astaffs%20%3D%202%0D%0Atime%20%3D%203%2F4%0D%0Abeamstyle%20%3D%204%2C4%2C4%0D%0Akey%20%3D%205%26amp%3B%0D%0Abrace%20%3D%201-2%0D%0Abarstyle%20%3D%201-2%0D%0A%0D%0Astaff%201%0D%0Avscheme%20%3D%202o%0D%0A%0D%0Astaff%202%0D%0Aclef%20%3D%20bass%0D%0A%0D%0Amusic%0D%0Abold%20%2816%29%20above%20all%3A%200%20%5B-4%5D%20%22Andante%20sognando%22%3B%0D%0A1%201%3A%202a%3B%2016b%3B%20a%3B%20gn%3B%20a%3B%0D%0A1%202%3A%204ef%3B%20df%3B%20cen%3B%0D%0A2%3A%204d-d%3B%20a-a%3B%20a1a-%3B%0D%0Aphrase%20above%201%3A%203%20til%201m%2B1%3B%0D%0Aital%20above%201%3A%201%20%5B-2%5D%20%22dolce%22%3B%0D%0Aboldital%20%2814%29%20dyn%20between%201%26amp%3B2%3A%201%20%22p%22%3B%0D%0Abar%0D%0A%0D%0A1%201%3A%208.d%2B%20bm%3B%2016a%20ebm%3B%208dfa%20bm%3B%20d%26lt%3Bc%26gt%3Bfa%3B%20ceg%3B%20b-df%20ebm%3B%0D%0A1%202%3A%204df%3B%202s%3B%0D%0A2%3A%204d-d%3B%20a-a%3B%20a1a-%3B%0D%0Abar%0A%5B%2Fmup%5D'>
</form>
<p>Lilypond</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-lilypond-eb73f160d14f204e1fe965feae3dc100.png' />
<input type='hidden' name='code' value='%5Blilypond%5D%0A%5Cversion%20%222.8.1%22%0A%5Cheader%20%7B%0A%09tagline%3D%20%22%22%0A%7D%0A%5Cpaper%20%7B%0A%09ragged-right%20%3D%20%23%23t%0A%09indent%20%3D%200.0%5Cmm%0A%09line-width%20%3D%20360%5Cpt%0A%7D%0A%5Clayout%20%7B%0A%09%5Ccontext%20%7B%0A%09%09%5CScore%0A%09%09%5Cremove%20%22Bar_number_engraver%22%0A%09%7D%0A%7Dglobal%20%3D%20%7B%0A%20%20%5Ckey%20des%20%5Cmajor%0A%20%20%5Conce%20%5Coverride%20Score.RehearsalMark%20%23%27break-align-symbol%20%3D%20%23%27time-signature%0A%20%20%5Conce%20%5Coverride%20Score.RehearsalMark%20%23%27self-alignment-X%20%3D%20%23-1%0A%20%20%5Conce%20%5Coverride%20Score.RehearsalMark%20%23%27Y-offset%20%3D%20%232%0A%20%20%5Ctime%203%2F4%0A%20%20%5Cmark%20%5Cmarkup%20%7B%20%5Cbold%20%7BAndante%20sognando%7D%20%7D%0A%7D%0A%0Arh%20%3D%20%5Crelative%20c%27%27%20%7B%0A%20%20%26lt%3B%26lt%3B%0A%20%20%20%20%7B%20aes2%5E%5Cmarkup%20%7B%20%5Citalic%20%7Bdolce%7D%20%7D%20bes16%28%20aes%20g%20aes%20des8.%29%20aes16%20s2%20%7D%20%5C%5C%0A%20%20%20%20%7B%20%26lt%3Bees%20f%26gt%3B4%20%26lt%3Bdes%20f%26gt%3B%20%26lt%3Bc%20e%26gt%3B%20%26lt%3Bdes%20f%26gt%3B%20%5CstemUp%20%26lt%3Bdes%20f%20aes%26gt%3B8%20%26lt%3Bdes%20f%20aes%26gt%3B%28%20%26lt%3Bc%20ees%20ges%26gt%3B%29%20%26lt%3Bbes%20des%20f%26gt%3B%20%7D%0A%20%20%26gt%3B%26gt%3B%0A%7D%0A%0Alh%20%3D%20%5Crelative%20c%20%7B%0A%20%20%26lt%3Bdes%20des%2C%26gt%3B4%20%26lt%3Baes%27%20aes%2C%26gt%3B%20%26lt%3Baes%2C%20aes%2C%26gt%3B%20%26lt%3Bdes%20des%2C%26gt%3B%20%26lt%3Baes%27%20aes%2C%26gt%3B%20%26lt%3Baes%2C%20aes%2C%26gt%3B%0A%7D%0A%0Adynamics%20%3D%20%7B%0A%20%20s2-%5Cmarkup%20%7B%20%5Cdynamic%20%22p%22%20%7D%0A%7D%0A%0A%0A%5Cscore%20%7B%0A%20%20%5Ccontext%20PianoStaff%0A%20%20%26lt%3B%26lt%3B%0A%20%20%20%20%5Ccontext%20Staff%3Drh%20%7B%0A%20%20%20%20%20%20%5Cclef%20treble%20%5Cglobal%20%5Crh%0A%20%20%20%20%7D%0A%20%20%20%20%5Ccontext%20Dynamics%3Ddynamics%20%7B%0A%20%20%20%20%20%20%5Cdynamics%0A%20%20%20%20%7D%0A%20%20%20%20%5Ccontext%20Staff%3Dlh%20%7B%0A%20%20%20%20%20%20%5Cclef%20bass%20%5Cglobal%20%5Clh%0A%20%20%20%20%7D%0A%20%20%26gt%3B%26gt%3B%0A%0A%20%20%5Clayout%20%7B%0A%20%20%20%20%5Ccontext%20%7B%0A%20%20%20%20%20%20%5Ctype%20%22Engraver_group%22%0A%20%20%20%20%20%20%5Cname%20Dynamics%0A%20%20%20%20%20%20%5Calias%20Voice%20%25%20So%20that%20%5Ccresc%20works%2C%20for%20example.%0A%20%20%20%20%20%20%5Cconsists%20%22Output_property_engraver%22%0A%0A%20%20%20%20%20%20%5Cconsists%20%22Script_engraver%22%0A%20%20%20%20%20%20%5Cconsists%20%22Dynamic_engraver%22%0A%20%20%20%20%20%20%5Cconsists%20%22Text_engraver%22%0A%20%20%20%20%20%20%5Cconsists%20%22Axis_group_engraver%22%0A%0A%20%20%20%20%20%20%5Coverride%20TextScript%20%23%27font-size%20%3D%20%231.3%0A%20%20%20%20%20%20%5Coverride%20DynamicText%20%23%27font-size%20%3D%20%231.3%0A%20%20%20%20%20%20%5Coverride%20TextScript%20%23%27font-shape%20%3D%20%23%27italic%0A%20%20%20%20%20%20%5Coverride%20TextScript%20%23%27extra-offset%20%3D%20%23%27%280%20.%202.5%29%0A%20%20%20%20%20%20%5Coverride%20DynamicText%20%23%27extra-offset%20%3D%20%23%27%280%20.%202.5%29%0A%20%20%20%20%20%20%5Coverride%20Hairpin%20%23%27extra-offset%20%3D%20%23%27%280%20.%203%29%0A%20%20%20%20%20%20%25override%20DynamicTextSpanner%20%23%27bound-padding%20%3D%20%230%0A%20%20%20%20%20%20%5Coverride%20DynamicTextSpanner%20%23%27extra-offset%20%3D%20%23%27%280%20.%202.5%29%0A%0A%20%20%20%20%20%20%5Cconsists%20%22Skip_event_swallow_translator%22%0A%0A%20%20%20%20%20%20%5Coverride%20VerticalAxisGroup%20%23%27minimum-Y-extent%20%3D%20%23%27%28-1%20.%201%29%0A%20%20%20%20%7D%0A%20%20%20%20%5Ccontext%20%7B%0A%20%20%20%20%20%20%5CPianoStaff%0A%20%20%20%20%20%20%5Caccepts%20Dynamics%0A%20%20%20%20%20%20%5Coverride%20VerticalAlignment%20%23%27forced-distance%20%3D%20%237%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%5B%2Flilypond%5D'>
</form>
<p>PMW:</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-pmw-48fb592089125169299f2a6c55b2b9c8.png' />
<input type='hidden' name='code' value='%5Bpmw%5D%0ASheetsize%20A3%0ALinelength%20360%0AMagnification%201.5%0Aheading%20%22%22%0Akey%20D%24%0Atime%203%2F4%0Abrace%0Astavespacing%200%2F48%201%2F0%202%2F48%203%2F0%0A%0A%5Bstave%200%5D%0A%22%5Cbf%5CAndante%20Sognando%22q%20Q%20%7C%20Q%21%20%7C%20%402%0A%5Bendstave%5D%0A%0A%5Bstave%201%20treble%201%20stems%20up%5D%0AA%20%5Bslur%2Fa%5D%20b%3Da%3D%25g%3Da%3D%20%7C%20%401%0Ad%27-.%20%5Bes%5D%20a%3D%3B%20%28d-f-a-%29%20%5Bslur%2Fb%5D%20%28d-f-a-%29%20%28c-e-g-%29%20%5Bes%5D%20%28b%60-d-f-%29%20%7C%20%402%0A%5Bendstave%5D%0A%0A%5Bstave%202%20treble%201%20stems%20down%5D%0A%22%5Cbi%5Cp%22%2Fb%20%22%5Cit%5Cdolce%22%2Fa%20%28ef%29%20%28df%29%20%28c%25e%29%20%7C%20%28df%29%20Q%20%7C%20%402%0A%5Bendstave%5D%0A%0A%5Bstave%203%20bass%200%5D%0A%28d%60d%29%20%28a%60a%29%20%28a%60%60a%60%29%20%7C%20%28d%60d%29%20%28a%60a%29%20%28a%60%60a%60%29%20%7C%20%402%0A%5Bendstave%5D%0A%5B%2Fpmw%5D'>
</form>
<p>Among all notations, Lilypond takes me the most time to get positions of various dynamics and texts right. Much time is spent on Guido one too, but documentation on Guido is considerably easier to read than Lilypond&#8217;s, and much manual layout simply can&#8217;t be done by Guido <img src='http://scorerender.abelcheung.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> .</p>
<p>I have been saying that ABC notation shows promise; now I want to take back to word. It doesn&#8217;t even allow specifying text marks in arbitrary position! This is 2008, not 1988, but still. Though ABC standard version 2.0 has it, but (1) it&#8217;s a draft, and (2) which software is implementing 2.0 standard?</p>
<hr />
<p>2008-09-28 Edit: Add Philip&#8217;s Music Writer counterpart since it is recently supported.</p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2008/08/26/all-notations-side-by-side/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Resuming development</title>
		<link>http://scorerender.abelcheung.org/2008/08/22/resuming-development/</link>
		<comments>http://scorerender.abelcheung.org/2008/08/22/resuming-development/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 01:49:59 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/?p=36</guid>
		<description><![CDATA[ScoreRender have been put aside for some time, but right now I think it&#8217;s time for momentum again. The code still needs some scrutiny, but mostly works, as this site has been using development code for more than a year and there are no obvious breakage (yet).
The most problematic part is interaction of ImageMagick and [...]]]></description>
			<content:encoded><![CDATA[<p>ScoreRender have been put aside for some time, but right now I think it&#8217;s time for momentum again. The code still needs some scrutiny, but mostly works, as this site has been using development code for more than a year and there are no obvious breakage (yet).</p>
<p>The most problematic part is interaction of ImageMagick and various PostScript files generated by the programs. They constantly change, that&#8217;s the reason development is more difficult.</p>
<ul>
<li>Only recently did I discover ImageMagick no more creates alpha channel with <code>-channel alpha</code> or <code>-channel rgba</code> options; it must be explictly created with <code>-alpha activate</code>. Yet this change is only added to ImageMagick 1 year ago. What about compatibility with older web servers? Probably I need to sacrifice <em>something</em> this time. No wonder some web apps supports <a href="http://www.graphicsmagick.org/">GraphicsMagick</a> too, though IMO that&#8217;s more like a failure than success.</li>
<li>And <a href="http://moinejf.free.fr/">abcm2ps</a> changed too. Old testing score fragments no more work on development version of abcm2ps. Urgh.</li>
<li>I decided I was fed up with PHP 4.x. Specifically it&#8217;s about the <a href="http://hk.php.net/manual/en/migration5.incompatible.php">incompatibility</a> between PHP 4.x and 5.x, it is no more beneficial to support classes used in 4.x. Thus next version will be PHP 5 only. During the old days PHP 4 end of life still haven&#8217;t been declared, but right now it makes more sense. Not to mention I don&#8217;t have any machine with PHP 4 now, so testing will be difficult.</li>
</ul>
<p>That&#8217;s about it. Hopefully there will be a new release in these few days, when typhoon is storming here.</p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2008/08/22/resuming-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Guess this melody?</title>
		<link>http://scorerender.abelcheung.org/2008/07/14/guess-this-melody/</link>
		<comments>http://scorerender.abelcheung.org/2008/07/14/guess-this-melody/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 13:21:09 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Mup]]></category>

		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/2008/07/14/guess-this-melody/</guid>
		<description><![CDATA[Hint: it comes from main theme of a certain game, a classics within its genre. Few player would ever forget the melody, it&#8217;s so simple, so crystal clear, and so touching.




2008-10-02 edit: Time to disclose the answer. It&#8217;s the opening theme of Final Fantasy X, played with acoustic piano. And no, the music on main [...]]]></description>
			<content:encoded><![CDATA[<p>Hint: it comes from main theme of a certain game, a classics within its genre. Few player would ever forget the melody, it&#8217;s so simple, so crystal clear, and so touching.</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-mup-ea49d421cec7b2df033c0d972b96d834.png' />
<input type='hidden' name='code' value='%5Bmup%5D%0A%2F%2F%21Mup-Arkkra-5.0%0Ascore%0Aleftmargin%20%3D%200%0Arightmargin%20%3D%200%0Atopmargin%20%3D%200%0Abottommargin%20%3D%200%0Apagewidth%20%3D%205%0Alabel%20%3D%20%22%22%0Astaffs%20%3D%202%0D%0A%09key%20%3D%201%23%0D%0A%09time%20%3D%203%2F4%0D%0A%09brace%20%3D%201-2%0D%0A%09barstyle%20%3D%201-2%0D%0A%09beamstyle%20%3D%202.%0D%0A%09packfact%20%3D%201.3%0D%0A%0D%0Astaff%201%0D%0A%09aboveorder%20%3D%20mussym%2C%20chord%2C%20octave%2C%20dyn%20%26amp%3B%20othertext%0D%0A%0D%0Astaff%202%0D%0A%09vscheme%20%3D%202f%0D%0A%0D%0Adefine%20CHORD%28COUNT%2C%20KEY%29%0D%0A%09helvetica%20bold%2812%29%20chord%20above%201%3A%20COUNT%5B-2%5D%20%60KEY%60%3B%0D%0A%40%0D%0A%0D%0Amusic%0D%0A%2F%2F%20bar%201%0D%0A%091%3A%208e%2B%3B%20e%3B%20g%3B%20b%3B%20e%2B%3B%20d%2Bf%2B%3B%0D%0A%092%201%3A%202.b%3B%0D%0A%092%202%3A%202e%3B%204d%3B%0D%0A%09octave%20above%201%3A%200.5%20%228va%22%20til%203m%2B1.5%3B%0D%0A%09rom%20%2816%29%20above%201%3A%200%20%22Con%20sentimento%20%5C%28smup4n%29%20%3D%2085%22%3B%0D%0A%09CHORD%281%2C%20Em%29%0D%0A%09bold%20above%201%3A%200%5B-5%5D%20%22%5C%5BA%5C%5D%22%3B%0D%0A%09bar%0D%0A%0D%0A%2F%2F%20bar%202%0D%0A%091%3A%202.e%2Bg%2B%3B%0D%0A%092%3A%202.cc%2B%3B%0D%0A%09CHORD%281%2C%20C%29%0D%0A%09bar%0D%0A%0D%0A%2F%2F%20bar%203%0D%0A%091%3A%208d%2B%3B%20d%3B%20f%3B%20a%3B%20d%2B%3B%20c%2Be%2B%3B%0D%0A%092%201%3A%202.a%3B%0D%0A%092%202%3A%202d%3B%204c%3B%0D%0A%09CHORD%281%2C%20D%29%0D%0A%09bar%0D%0A%0D%0A%2F%2F%20bar%204%0D%0A%091%3A%202.d%2Bf%2B%3B%0D%0A%092%3A%202.b-b%3B%0D%0A%09CHORD%281%2C%20Bm%29%0D%0A%09bar%0A%5B%2Fmup%5D'>
</form>
<p><small>2008-10-02 edit: Time to disclose the answer. It&#8217;s the opening theme of <a href="http://www.square-enix-usa.com/games/FFX/">Final Fantasy X</a>, played with acoustic piano. And no, the music on main FFX website is just midi, it can&#8217;t represent the quality of the real game music.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2008/07/14/guess-this-melody/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PMX / M-Tx / MusixTex support delayed</title>
		<link>http://scorerender.abelcheung.org/2007/06/12/pmx-m-tx-musixtex-support-delayed/</link>
		<comments>http://scorerender.abelcheung.org/2007/06/12/pmx-m-tx-musixtex-support-delayed/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 14:13:47 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/2007/06/12/pmx-m-tx-musixtex-support-delayed/</guid>
		<description><![CDATA[With the upcoming version (0.2), it should be possible to set image width so that the image may not overflow blog content area width, thus content layout would not be &#8216;broken&#8217;. However, since TeX does not provide any control for arbitrary page width, any TeX-using music rendering applications (the most prominent one being PMX, M-Tx [...]]]></description>
			<content:encoded><![CDATA[<p>With the upcoming version (0.2), it should be possible to set image width so that the image may not overflow blog content area width, thus content layout would not be &#8216;broken&#8217;. However, since TeX does not provide any control for arbitrary page width, any TeX-using music rendering applications (the most prominent one being PMX, M-Tx and MusixTex) inherits such problem, and images rendered by them can&#8217;t perform any control on image width. So I&#8217;m temporarily postponing the support until 0.3.x.</p>
<p>Right now I can think of several solutions, of which none is perfect:</p>
<ol>
<li><strong>Resize image</strong>: the simplest and most obvious method. But won&#8217;t work if people change theme frequently &mdash; after each theme change images have to be regenerated or images might overflow again. Not to mention tall images may not be very visible again after resizing.</li>
<li><strong>Clipped to fit width</strong>: again, what happens after each theme change?</li>
<li><strong>Installing extra TeX package</strong>: I&#8217;m told that <a href="http://volker.dnsalias.net/soft/texmf/">Vmargin TeX package</a> allows arbitrary page size. I&#8217;m also told that package is exotic and not included in most TeX systems by default; but it looks like Vmargin is more widespread than I&#8217;ve thought. At least on Linux &mdash; Vmargin belongs to default LaTeX package for RPM-based distributions, and belongs to some LaTeX extra package for Debian-based ones. I&#8217;ll give it some more thinking later.</li>
<li><strong>Use <abbr title="Cascading Style Sheet">CSS</abbr> overflow property</strong>: looks like the best solution so far, but still has its own problem, namely old browser compatibility. Though I wouldn&#8217;t care too much about browsers without proper CSS support&#8230;</li>
</ol>
<p>Please leave message here if anybody has good solution!</p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2007/06/12/pmx-m-tx-musixtex-support-delayed/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lilypond with international characters</title>
		<link>http://scorerender.abelcheung.org/2007/06/11/lilypond-with-international-characters/</link>
		<comments>http://scorerender.abelcheung.org/2007/06/11/lilypond-with-international-characters/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 21:54:55 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Lilypond]]></category>

		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/2007/06/11/lilypond-with-international-characters/</guid>
		<description><![CDATA[



Neat, isn&#8217;t it? This example is taken from the one contained in Debian package, albeit the package itself is terribly outdated and unmaintained until Debian Etch comes. Even though the example was supposed to be usable during Lilypond 2.2.x days only (!), with some changes (specifically, filtered with convert-ly to remove obsolete constructs), it runs [...]]]></description>
			<content:encoded><![CDATA[<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-lilypond-85b80397db51d6ea073062b851abd93c.png' />
<input type='hidden' name='code' value='%5Blilypond%5D%0A%5Cversion%20%222.8.1%22%0A%5Cheader%20%7B%0A%09tagline%3D%20%22%22%0A%7D%0A%5Cpaper%20%7B%0A%09ragged-right%20%3D%20%23%23t%0A%09indent%20%3D%200.0%5Cmm%0A%09line-width%20%3D%20360%5Cpt%0A%7D%0A%5Clayout%20%7B%0A%09%5Ccontext%20%7B%0A%09%09%5CScore%0A%09%09%5Cremove%20%22Bar_number_engraver%22%0A%09%7D%0A%7D%5Cheader%20%7B%0A%20%20title%20%3D%20%22%E5%B0%8F%E5%AD%A9%E5%AD%90%E4%B9%96%E4%B9%96%20%28%5CXiao3%20%5Chai2%5Czi5%20%5Cguai1%5Cguai1%29%22%0A%20%20composer%20%3D%20%22%22%0A%20%20copyright%20%3D%20%22%22%0A%20%20footer%20%3D%20%22%22%0A%20%20tagline%20%3D%20%22%22%0A%20%20latexpackages%20%3D%20%22%5Bencapsulated%5DCJK%2Cpinyin%2C%5Bcjkbg5%5Ducs%22%0A%20%20fontencoding%20%3D%20%22C00%2COT1%22%0A%20%20atbegindocument%20%3D%20%22%5Cfontfamily%7Bbsmi%7D%22%0A%7D%0A%0Amelody%20%3D%20%20%5Crelative%20c%27%27%20%7B%0A%20%20g4%20c8%20a%20g4%20g%20%7C%0A%20%20e4%20g8%20a%20g4%20g%20%7C%0A%20%20a4%20g8%20e%20d4%20d%20%7C%0A%20%20e4%20g8%5B%20e%5D%20d%5B%20e%5D%20c4%20%7C%0A%0A%20%20a%278%20g%20a%20g%20e%20a%20g4%20%7C%0A%20%20e8%20g%20e%20d%20c4%20r%20%7C%0A%20%20a8%20c%20d%20e%20c4%20r%20%5Cbar%20%22%7C.%22%0A%7D%0A%0Atext%20%3D%20%5Clyricmode%20%7B%0A%20%20%E5%B0%8F%20%E5%AD%A9%20%E5%AD%90%20%E4%B9%96%20%E4%B9%96%0A%20%20%E6%8A%8A%20%E9%96%80%20%E5%85%92%20%E9%96%8B%20%E9%96%8B%0A%20%20%E5%BF%AB%20%E9%BB%9E%20%E5%85%92%20%E9%96%8B%20%E9%96%8B%0A%20%20%E6%88%91%20%E8%A6%81%20%E9%80%B2%20%E4%BE%86%0A%0A%20%20%E4%B8%8D%20%E9%96%8B%20%E4%B8%8D%20%E9%96%8B%20%E4%B8%8D%20%E8%83%BD%20%E9%96%8B%0A%20%20%E4%BD%A0%20%E6%98%AF%20%E5%A4%A7%20%E9%87%8E%20%E7%8B%BC%0A%20%20%E4%B8%8D%20%E8%AE%93%20%E4%BD%A0%20%E9%80%B2%20%E4%BE%86%0A%7D%0A%0A%5Cscore%20%7B%0A%20%20%26lt%3B%26lt%3B%0A%20%20%20%20%5Ccontext%20Voice%20%3D%20%22one%22%20%7B%0A%20%20%20%20%20%20%5Cset%20Staff.autoBeaming%20%3D%20%23%23f%0A%20%20%20%20%20%20%5Coverride%20Score.LyricText%20%23%27extra-offset%20%3D%20%23%27%281%20.%200%29%0A%20%20%20%20%20%20%5Cmelody%0A%20%20%20%20%7D%0A%20%20%20%20%5Clyricsto%20%22one%22%20%5Cnew%20Lyrics%20%5Ctext%0A%20%20%26gt%3B%26gt%3B%0A%7D%0A%5B%2Flilypond%5D'>
</form>
<p>Neat, isn&#8217;t it? This example is taken from the one contained in Debian package, albeit the package itself is terribly outdated and unmaintained until Debian Etch comes. Even though the example was supposed to be usable during Lilypond 2.2.x days only (!), with some changes (specifically, filtered with <code>convert-ly</code> to remove obsolete constructs), it runs happily with newest Lilypond.</p>
<p>But &mdash; this absolutely isn&#8217;t for the faint of heart.</p>
<ul>
<li>It took 35+ minute to render! Yes, <strong>35+ minute 100% CPU time on Celeron 2.4GHz</strong>. Very likely due to embedding chinese font glyph outline into postscript file.</li>
<li>One has to tweak <a href="http://www.fontconfig.org/">fontconfig</a> configuration file under Linux. Fontconfig has been <em>notoriously</em> bad at choosing <abbr title="Chinese Japanese Korean">CJK</abbr> fonts. Default config prefers Japanese fonts, and imagine what it looks like when a mixture of Japanese fonts and Chinese fonts are used in lyrics.</li>
<li>Installing Chinese fonts &mdash; actually this is the easy part. The score fragment in this post is rendered with Kai face (楷書) from <a href="http://www.freedesktop.org/wiki/Software/CJKUnifonts/">CJKUnifonts</a>, which is readily available in all major Linux distributions if Chinese support is enabled. Rendering Japanese and Korean requires fonts for corresponding language, of course.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2007/06/11/lilypond-with-international-characters/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Writing document for PHP code</title>
		<link>http://scorerender.abelcheung.org/2007/06/01/writing-document-for-php-code/</link>
		<comments>http://scorerender.abelcheung.org/2007/06/01/writing-document-for-php-code/#comments</comments>
		<pubDate>Thu, 31 May 2007 18:23:26 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/2007/06/01/writing-document-for-php-code/</guid>
		<description><![CDATA[Since last night I start to consider writing more complete documentation inside the plugin itself. Of course it&#8217;s just API documentation, which is NOT a replacement of how to use the plugin. (Hey, I know, I know, this plugin has no public API, it is just for converting posts and comments, and not intended to [...]]]></description>
			<content:encoded><![CDATA[<p>Since last night I start to consider writing more complete documentation inside the plugin itself. Of course it&#8217;s just API documentation, which is NOT a replacement of how to use the plugin. (Hey, I know, I know, this plugin has no public API, it is just for converting posts and comments, and not intended to be used for themes and templates)</p>
<p>The immediate solution found by googling is <a href="http://www.phpdoc.org/">phpDocumentor</a>. Not a very brilliant solution, but enough to get the job done, especially good because it parses PHP files quickly and is easy to learn. For example:</p>
<pre style="font-size: 80%; overflow: auto;"><code>
/**
 * Error constant used when content is known to be invalid or dangerous.
 *
 * Dangerous content means special constructs causing
 * inclusion of another file or command execution, etc.
 */
define('ERR_INVALID_INPUT', -1);

/**
 * Generate HTML content from error message or rendered image
 * <font color="red">@param</font> <font color="blue">string <strong>$input</strong></font> Music fragment to be rendered
 * <font color="red">@param</font> <font color="blue">object <strong>$render</strong></font> PHP object created for rendering relevant music fragment
 * <font color="red">@return</font> <font color="blue">string <strong>$html</strong></font> The HTML content
 */
function scorerender_process_content ($input, $render)
{
</code></pre>
<p>phpDocumentor has a <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.quickstart.pkg.html">quick start guide</a> on how to install itself through Pear. After getting the doc done, the hardest part is over; generating document is relatively easy. Just a single command:</p>
<pre style="font-size: 80%; overflow: auto;"><code>phpdoc -o HTML:frames:earthli -f *.php -t docs</code></pre>
<p><a href='/wp-content/uploads/2007/06/scorerender-in-phpdoc.png' title='ScoreRender inside phpdoc' rel='lightbox'><img src='/wp-content/uploads/2007/06/scorerender-in-phpdoc.thumbnail.png' alt='ScoreRender inside phpdoc' class='alignright' /></a></p>
<p>And voila! Documents are readily available under <code>docs/</code> directory for your browsing pleasure. Generally this step just takes a few seconds for small project with several small PHP files. What does it look like? See the pic on the right.</p>
<p><br clear='all' /></p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2007/06/01/writing-document-for-php-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mup test</title>
		<link>http://scorerender.abelcheung.org/2007/05/21/mup-test/</link>
		<comments>http://scorerender.abelcheung.org/2007/05/21/mup-test/#comments</comments>
		<pubDate>Sun, 20 May 2007 18:07:06 +0000</pubDate>
		<dc:creator>Abel Cheung</dc:creator>
		
		<category><![CDATA[Mup]]></category>

		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://scorerender.abelcheung.org/2007/05/21/mup-test/</guid>
		<description><![CDATA[Here is just some old fragment used for demonstration purpose in my personal site; as usual, click on the image to view the source.




Guess I should try to write some tips about how to use mup. But mysteriously my subscription to mup-users mailing list was terminated long time ago and I&#8217;m unable to contact Mup [...]]]></description>
			<content:encoded><![CDATA[<p>Here is just some old fragment used for demonstration purpose in my personal site; as usual, click on the image to view the source.</p>
<form target='fragmentpopup' action='http://scorerender.abelcheung.org/wp-content/plugins/ScoreRender/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://scorerender.abelcheung.org/sr-images/sr-mup-5c6eba1784f94eb5bbc632ed44678e58.png' />
<input type='hidden' name='code' value='%5Bmup%5D%0A%2F%2F%21Mup-Arkkra-5.0%0Ascore%0Aleftmargin%20%3D%200%0Arightmargin%20%3D%200%0Atopmargin%20%3D%200%0Abottommargin%20%3D%200%0Apagewidth%20%3D%205%0Alabel%20%3D%20%22%22%0Ascore%0D%0Astaffs%20%3D%202%0D%0Atime%20%3D%203%2F4%0D%0Abeamstyle%20%3D%204%2C4%2C4%0D%0Akey%20%3D%205%26amp%3B%0D%0Abrace%20%3D%201-2%0D%0Abarstyle%20%3D%201-2%0D%0A%0D%0Astaff%201%0D%0Avscheme%20%3D%202o%0D%0A%0D%0Astaff%202%0D%0Aclef%20%3D%20bass%0D%0A%0D%0Amusic%0D%0Arom%20%2816%29%20above%20all%3A%200%20%5B-4%5D%20%22Andante%20sognando%22%3B%0D%0A1%201%3A%202a%3B%2016b%3B%20a%3B%20gn%3B%20a%3B%0D%0A1%202%3A%204ef%3B%20df%3B%20cen%3B%0D%0A2%3A%204d-d%3B%20a-a%3B%20a1a-%3B%0D%0Aphrase%20above%201%3A%203%20til%201m%2B1%3B%0D%0Aital%20above%201%3A%201%20%5B-2%5D%20%22dolce%22%3B%0D%0Aboldital%20%2814%29%20dyn%20between%201%26amp%3B2%3A%201%20%22p%22%3B%0D%0Abar%0D%0A%0D%0A1%201%3A%208.d%2B%20bm%3B%2016a%20ebm%3B%208dfa%20bm%3B%20d%26lt%3Bc%26gt%3Bfa%3B%20ceg%3B%20b-df%20ebm%3B%0D%0A1%202%3A%204df%3B%202s%3B%0D%0A2%3A%204d-d%3B%20a-a%3B%20a1a-%3B%0D%0Abar%0A%5B%2Fmup%5D'>
</form>
<p>Guess I should try to write some tips about how to use mup. But mysteriously my subscription to mup-users mailing list was terminated long time ago and I&#8217;m unable to contact Mup people ever since.</p>
]]></content:encoded>
			<wfw:commentRss>http://scorerender.abelcheung.org/2007/05/21/mup-test/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
