<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>skrud.net &#187; linux</title>
	<atom:link href="http://skrud.com/articles/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://skrud.com</link>
	<description>Trust Your Geekflex</description>
	<lastBuildDate>Mon, 24 Nov 2008 20:13:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting Sidetracked</title>
		<link>http://skrud.com/articles/2005/11/01/getting-sidetracked/</link>
		<comments>http://skrud.com/articles/2005/11/01/getting-sidetracked/#comments</comments>
		<pubDate>Tue, 01 Nov 2005 14:23:47 +0000</pubDate>
		<dc:creator>Skrud</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[school]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://www.skrud.net/2005/11/01/getting-sidetracked/</guid>
		<description><![CDATA[The problem with having courses about really interesting stuff is that I (and my lack of priorities) can very easily get sidetracked while &#8220;studying.&#8221; The irony of it is that the sidetracking starts with something that I&#8217;m studying.  Tonight I was reading about NFS and figured it would be a really handy way of [...]]]></description>
			<content:encoded><![CDATA[<p>The problem with having <a href="http://www.cs.concordia.ca/~soen321_2/2005F/">courses about really interesting stuff</a> is that I (and my lack of priorities) can very easily get sidetracked while &#8220;studying.&#8221; The irony of it is that the sidetracking starts with something that I&#8217;m studying.  Tonight I was reading about <acronym title="Network File System">NFS</acronym> and figured it would be a really handy way of sharing files between my Linux box and my laptop.</p>

<p>So I looked up a few guides and got it working, added an automount rule to my NetInfo Database &#8211; but I couldn&#8217;t get write access. Something about how NFS treats uid&#8217;s &#8230; which coincidentally is what&#8217;s wrong with it as a secure protocol in general, which is why I was studying it in the first place&#8230;</p>

<p>Then I learned that I can set up <a href="http://www.apple.com/macosx/features/networking/">Apple File Protocol</a> on Linux with <a href="http://netatalk.sf.net">netatalk</a>. Using <a href="http://www.porchdogsoft.com/products/howl/">howl</a>, I can have <a href="http://www.zeroconf.org/">Zeroconf</a> Networking (à la Bonjour) between my Linux and Apple computers. There was even a <a href="http://gentoo-wiki.com/HOWTO_Share_Directories_via_AFP">tutorial on the Gentoo Wiki</a> that took only a few minutes. Now my home directory is easily mounted as a Network drive on my PowerBook&#8217;s desktop. I can even tunnel the connection over <acronym title="Secure SHell">SSH</acronym> when I&#8217;m not home for <em>secure</em> operation. Which is pretty sweet, and totally painless to set up. It&#8217;s even running over TCP, so I didn&#8217;t have to bother with getting an AppleTalk server running.</p>

<p>The problem is that I did all this starting at 3am. I didn&#8217;t get much sleep (in fact, I&#8217;m not sure I even <em>fell</em> asleep). And what&#8217;s worse is I have to stay at ConU until about 10pm tonight&#8230; <em>sigh</em>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://skrud.com/articles/2005/11/01/getting-sidetracked/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The Cross-Platform Nightmare</title>
		<link>http://skrud.com/articles/2005/10/17/the-cross-platform-nightmare/</link>
		<comments>http://skrud.com/articles/2005/10/17/the-cross-platform-nightmare/#comments</comments>
		<pubDate>Mon, 17 Oct 2005 21:38:06 +0000</pubDate>
		<dc:creator>Skrud</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://www.skrud.net/2005/10/17/the-cross-platform-nightmare/</guid>
		<description><![CDATA[I can just imagine everyone seeing the title of post and shaking their heads, shriveling their brows and frowning. I bet they&#8217;re thinking &#8220;Skrud, you should be writing in Java. It&#8217;s cross platform.&#8221; Well, I haven&#8217;t even begun to tell you about my nightmare yet.

It&#8217;s a complete myth that the cross-platformability of any code is [...]]]></description>
			<content:encoded><![CDATA[<p>I can just imagine everyone seeing the title of post and shaking their heads, shriveling their brows and frowning. I bet they&#8217;re thinking &#8220;Skrud, you should be writing in Java. It&#8217;s cross platform.&#8221; Well, I haven&#8217;t even begun to tell you about my nightmare yet.</p>

<p>It&#8217;s a complete <em>myth</em> that the cross-platformability of any code is dependent upon the programming language it&#8217;s written in. It drives me crazy when people tell me that Java is wonderfully cross platform. That&#8217;s just marketing. In case you don&#8217;t believe me, take a look at the platforms that Sun releases Java for: Solaris Sparc (Sun&#8217;s own platform), Intel i586, AMD64. What about Java on Alpha? Well there are builds by HP. Java on PowerPC? Apple has its own builds. So you see, Java is as portable as the VM, and Sun only releases the VM for their own Sparcs and the popular Intel platform. All the other platform builds are released by third parties. How exactly is this different from having a C compiler on different platforms? Or even just telling gcc to cross-compile. How many platforms is GCC released for? I don&#8217;t know, why don&#8217;t <a href="http://gcc.gnu.org/install/specific.html">you count</a>.</p>

<p>But this isn&#8217;t about any language being better than any other, and this also isn&#8217;t about the <acronym title="Java Virtual Machine">JVM</acronym>. Again, being cross-platform means writing <em>portable</em> code. You can write portable code in <em>any</em> language. (Java included). You can also <em>not</em> write portable code in any language, Java included. Portable code has no platform-dependent aspects and will run smoothly with a negligible effort of porting. Portable code has a limit, and it has to be able to adapt to different platform specific properties. This means that for each target you&#8217;ll have some source code files that need to be reimplemented, changed, etc. In the case of operating systems, this is unavoidable. By nature, an operating system needs to interface with hardware. You <em>must</em> have processor-dependent source code for the parts that need to be processor-dependent. Take a look at the Linux kernel. A lot of the processor dependent features are handled through macros that automatically replace certain snippets of code with the processor-dependent feature that is needed. There are also different source trees for different platforms. These separate source code files are <em>not</em> portable, which means that your entire product can only run on as many platforms as you&#8217;ve manually configured it for. In the case of Java, you have standard implementations of <code>awt</code>, <code>swing</code>, and <code>swt</code> that make your life easier. Because these are environments that exist on virtually every platform that Java does.</p>

<p>But I&#8217;m not talking about operating systems either. What I&#8217;m talking about is <a href="http://java3d.dev.java.net/">Java3D</a>. Java3D is supposed to be a development platform for 3D graphics and &#8220;Advanced Imaging&#8221; for Java. It is not cross platform. A program is certainly not cross-platform if it can only be built on <em>Sparc</em>, <em>i586</em> or <em>AMD64</em>. i586 and AMD64 are both versions of the i386 platform anyway. So they&#8217;re really the same thing. If you want them to run on a different platform, you&#8217;ll need to build the libraries yourself. If the code is written portably, you should have no problems compiling the source code, linking against your own system&#8217;s libraries, and having a nice custom version that will work on your PC. Unfortunately <a href="http://java3d.dev.java.net/">Java3D</a> isn&#8217;t written like that.</p>

<p>You know something is wrong if the build instructions look like:</p>

<ol>
<li>Add this to the j3d-core/build.xml file: <div class="typocode"><pre><code class="typocode_xml "><span class="punct">&lt;</span><span class="tag">condition</span> <span class="attribute">property</span><span class="punct">=&quot;</span><span class="string">isMacOSXOnPPC</span><span class="punct">&quot;&gt;</span>
<span class="punct">&lt;</span><span class="tag">os</span> <span class="attribute">family</span><span class="punct">=&quot;</span><span class="string">mac</span><span class="punct">&quot;</span> <span class="attribute">arch</span><span class="punct">=&quot;</span><span class="string">ppc</span><span class="punct">&quot;/&gt;</span>
<span class="punct">&lt;/</span><span class="tag">condition</span><span class="punct">&gt;</span></code></pre></div></li>
<li>Add a build target for Mac OS X, too: <div class="typocode"><pre><code class="typocode_xml "><span class="punct">&lt;</span><span class="tag">target</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">setupMacOSX</span><span class="punct">&quot;</span> <span class="attribute">if</span><span class="punct">=&quot;</span><span class="string">isMacOSXOnPPC</span><span class="punct">&quot;&gt;</span>
<span class="punct">&lt;</span><span class="tag">property</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">ostype</span><span class="punct">&quot;</span> <span class="attribute">value</span><span class="punct">=&quot;</span><span class="string">macosx</span><span class="punct">&quot;/&gt;</span>
<span class="punct">&lt;</span><span class="tag">property</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">platform</span><span class="punct">&quot;</span> <span class="attribute">value</span><span class="punct">=&quot;</span><span class="string">macosx-ppc</span><span class="punct">&quot;/&gt;</span>
<span class="punct">&lt;/</span><span class="tag">target</span><span class="punct">&gt;</span></code></pre></div></li>
<li>Re-implement <code>javax.media.j3d.J3DGraphicsConfig</code>, <code>javax.media.j3d.NativeScreenInfo</code>, <code>javax.media.j3d.NativeWSInfo</code> to use MacDrawingSurface.</li>
</ol>

<p>And to boot these aren&#8217;t official build instructions, I found them on a forum. There are no official build instructions for OS X. You know, there actually _is_ a sun.awt.MacDrawingSurface class that they could&#8217;ve used. There&#8217;s also an X11 implementation for OS X that they could&#8217;ve used, since the Linux version of Java3D uses X11 it shouldn&#8217;t be too difficult to port. But a better question would be: why are they not using portable windowing code to begin with? Probably for speed/performance reasons, but still &#8211; what&#8217;s the point of a Java API that only works on 2 different platforms? (And seriously, how many people use Sparcs?)</p>

<p>This comes as I&#8217;m trying to get more involved with the <a href="http://ugene.sf.net">UGENE</a> project, and while talking with <a href="http://hci.cs.concordia.ca/www/hcse/people/j_benn/">Jon Benn</a> this afternoon I was trying to get Java3D to build on my PowerBook. Since Mac OS X is one of our target platforms, if it really does prove to be infeasable to build on OS X we&#8217;ll have to move to a platform other than Java3D. He suggested <a href="http://www.ogre3d.org/">OGRE 3D</a>, which is a C++ API. Looks like the foray into Java has come to a grinding halt.</p>
]]></content:encoded>
			<wfw:commentRss>http://skrud.com/articles/2005/10/17/the-cross-platform-nightmare/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Converting PAL to NTSC on Linux</title>
		<link>http://skrud.com/articles/2005/10/15/converting-pal-to-ntsc-on-linux/</link>
		<comments>http://skrud.com/articles/2005/10/15/converting-pal-to-ntsc-on-linux/#comments</comments>
		<pubDate>Sat, 15 Oct 2005 07:33:23 +0000</pubDate>
		<dc:creator>Skrud</dc:creator>
				<category><![CDATA[apps]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[movies]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://www.skrud.net/2005/10/15/converting-pal-to-ntsc-on-linux/</guid>
		<description><![CDATA[I had a bitch of a time trying to convert a PAL version of the (most awesome) Thai movie, The Bodyguard, to a locally playable NTSC encoded disc. After much googling and reading many guides and tutorials and other various things I realized that it would be much simpler to just buy an all region [...]]]></description>
			<content:encoded><![CDATA[<p>I had a bitch of a time trying to convert a PAL version of the (most awesome) Thai movie, <a href="http://skrud.net/posts/203/the-bodyguard-calamari-wrestler/">The Bodyguard</a>, to a locally playable NTSC encoded disc. After much googling and reading many guides and tutorials and other various things I realized that it would be much simpler to just buy an all region DVD player. I still agree. But after two days of wrestling with mplayer, mjpegtools, ffmpeg, and dvdauthor I&#8217;m proud to say that I&#8217;ve emerged victorious, and I can&#8217;t wait to watch The Bodyguard with friends and all.</p>

<p>I figured I&#8217;d help the next poor soul goolging for PAL -> NTSC conversions by describing what worked for me. In short, these are the steps:</p>

<ol>
<li>Use <a href="http://ffmpeg.sourceforge.net/">ffmpeg</a> to reencode the video and (if necessary) audio.</li>
<li>Use <a href="http://dvdauthor.sourceforge.net/">spumux</a> for DVD Menus (although it&#8217;s not that important).</li>
<li>Use <a href="http://dvdauthor.sourceforge.net/">dvdauthor</a> for authoring the DVD.</li>
</ol>

<p>Originally I had tried using a method I read about in <a href="http://www.linuxforums.org/forum/topic-8757.html">this forum</a> involving mplayer and mjpegtools, but this left me with out of sync audio (and, on top of that, mplayer would downmix the 5.1 AC3 Audio track to 2.0 channels).</p>

<p>I&#8217;m going to assume that you already have the DVD ripped and are dealing with straight VOB files now, and there are plenty of real guides out there for ripping/decrypting DVDs. <a href="http://freshmeat.net/projects/vobcopy/">vobcopy</a> works great. You can then use <a href="http://www.mplayerhq.hu">mplayer</a> to play the VOBs directly so you know which ones you want to convert (or you can just convert them  all &#8230; totally up to you).</p>

<p>You can actually use <a href="http://ffmpeg.sourceforge.net/">ffmpeg</a> to reencode and resize the video and audio together in one shot. Just like this:</p>

<pre><code>ffmpeg -i /path/to/vobfile -target ntsc-dvd -r '30000/1001' -aspect 16:9 -acodec copy outputfile.mpg
</code></pre>

<p>Obviously -i takes the input files as a paramenter, and -target ntsc-dvd is fairly straightforward. The -r option tells ffmpeg to encode at the standard NTSC framerate which is 29.997 fps (or, more accurately, 30000/1001) as oppose to PAL&#8217;s 25 fps. Meanwhile -aspect forces the output to be in a 16:9 (NTSC Widescreen) format. You could also use 4:3 for standard NTSC TV format. The -acodec copy option tells ffmpeg to copy the audio stream from the source. If you want, you can reencode it by using the -ar, -ab and -ac options&#8230;. check ffmpeg&#8217;s help for that. And finally you give it an output file. Remember, the main feature of a DVD can often take up more than one VOB file, so make sure you&#8217;re not forgetting any. Having more than one mpg file is fine, you can always string them together with DVDAuthor.</p>

<p>I&#8217;m not going to bother dealing with menus, because it can be really tedious (especially if you&#8217;re trying to rip the menus off an original DVD) or even make your own &#8230; but <a href="http://www.tappin.me.uk/Linux/dvd.html#menus">this tutorial</a> explains it much better than I could, and it&#8217;s what I followed.</p>

<p>The <a href="http://dvdauthor.sourceforge.net/doc/dvdauthor.html">man page for dvdauthor</a> was my best friend during the next process, and I had to make many small changes to the XML file to get it to work just right. <a href="http://dvdauthor.sourceforge.net/">dvdauthor</a> is a neat little program that takes an XML file as input and produces an authored DVD ready to be burned. It&#8217;s kind of tricky doing this by hand, so I would suggest just using one of the many frontends available from the list on the <a href="http://dvdauthor.sourceforge.net/">dvdauthor website</a>. The only time a frontend wouldn&#8217;t really help you is if you&#8217;re making your own menus, or you&#8217;re trying to have a movie in a menu &#8230; </p>

<p>Anyway, the XML file is fairly straightforward. This is what the one I used looked like:</p>

<div class="typocode"><pre><code class="typocode_xml "><span class="punct">&lt;</span><span class="tag">dvdauthor</span> <span class="attribute">dest</span><span class="punct">=&quot;</span><span class="string">/home/skrud/bodyguard_vts</span><span class="punct">&quot;&gt;</span>
        <span class="punct">&lt;</span><span class="tag">vmgm</span><span class="punct">&gt;</span>
                <span class="punct">&lt;</span><span class="tag">menus</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;</span><span class="tag">video</span> <span class="attribute">format</span><span class="punct">=&quot;</span><span class="string">ntsc</span><span class="punct">&quot;</span> <span class="attribute">aspect</span><span class="punct">=&quot;</span><span class="string">16:9</span><span class="punct">&quot;</span> <span class="attribute">widescreen</span><span class="punct">=&quot;</span><span class="string">nopanscan</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                        <span class="punct">&lt;</span><span class="tag">audio</span> <span class="attribute">format</span><span class="punct">=&quot;</span><span class="string">ac3</span><span class="punct">&quot;</span> <span class="attribute">channels</span><span class="punct">=&quot;</span><span class="string">2</span><span class="punct">&quot;</span> <span class="attribute">samplerate</span><span class="punct">=&quot;</span><span class="string">48khz</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                        <span class="punct">&lt;</span><span class="tag">pgc</span> <span class="attribute">entry</span><span class="punct">=&quot;</span><span class="string">title</span><span class="punct">&quot;&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">momentum_asia.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">momentum_pictures.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">piracy.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">post</span><span class="punct">&gt;</span>jump titleset 1 menu;<span class="punct">&lt;/</span><span class="tag">post</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;/</span><span class="tag">pgc</span><span class="punct">&gt;</span>
                <span class="punct">&lt;/</span><span class="tag">menus</span><span class="punct">&gt;</span>
        <span class="punct">&lt;/</span><span class="tag">vmgm</span><span class="punct">&gt;</span>
        <span class="punct">&lt;</span><span class="tag">titleset</span><span class="punct">&gt;</span>
                <span class="punct">&lt;</span><span class="tag">menus</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;</span><span class="tag">pgc</span> <span class="attribute">entry</span><span class="punct">=&quot;</span><span class="string">root</span><span class="punct">&quot;&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">spu_main_menu.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">button</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">play</span><span class="punct">&quot;&gt;</span>jump title 1 chapter 1;<span class="punct">&lt;/</span><span class="tag">button</span><span class="punct">&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">button</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">bonus</span><span class="punct">&quot;&gt;</span>jump title 2 chapter 1;<span class="punct">&lt;/</span><span class="tag">button</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;/</span><span class="tag">pgc</span><span class="punct">&gt;</span>
                <span class="punct">&lt;/</span><span class="tag">menus</span><span class="punct">&gt;</span>
                <span class="punct">&lt;</span><span class="tag">titles</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;</span><span class="tag">pgc</span><span class="punct">&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">movie_1.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">movie_2.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">movie_3.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">movie_4.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">post</span><span class="punct">&gt;</span>call menu;<span class="punct">&lt;/</span><span class="tag">post</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;/</span><span class="tag">pgc</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;</span><span class="tag">pgc</span><span class="punct">&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">making_of.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">trailer_borntofight.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">vob</span> <span class="attribute">file</span><span class="punct">=&quot;</span><span class="string">trailer_ongbak.mpg</span><span class="punct">&quot;</span> <span class="punct">/&gt;</span>
                                <span class="punct">&lt;</span><span class="tag">post</span><span class="punct">&gt;</span>call menu;<span class="punct">&lt;/</span><span class="tag">post</span><span class="punct">&gt;</span>
                        <span class="punct">&lt;/</span><span class="tag">pgc</span><span class="punct">&gt;</span>
                <span class="punct">&lt;/</span><span class="tag">titles</span><span class="punct">&gt;</span>
        <span class="punct">&lt;/</span><span class="tag">titleset</span><span class="punct">&gt;</span>
<span class="punct">&lt;/</span><span class="tag">dvdauthor</span><span class="punct">&gt;</span></code></pre></div>

<p>The <code>dest</code> attribute in the root tag is the directory where your output will go to.</p>

<p>Giving those menus the &#8220;title&#8221; and &#8220;root&#8221; names will link them up to your DVD Player&#8217;s Title and Root Menu buttons.  The VMGM tag specifies what gets played as soon as you pop the DVD in. In this case, the studio&#8217;s logos and an anti-piracy ad. (The video and audio tags are optional, but there&#8217;s more detail on them in the dvdauthor man page).  Each <code>pgc</code> tag declares a new title, and each <code>vob</code> entry implicitly declares a chapter. If you want to painstakingly set up chapters and times and crazy things like that, then follow another tutorial. Because I&#8217;m too lazy, and as you can see, I didn&#8217;t bother. </p>

<p>The <code>post</code> tag under <code>pgc</code> contains an action (in dvdauthor&#8217;s language) on what to do once everything in that pgc has finished playing. By the same token, there&#8217;s a <code>pre</code> tag that will let you set up an action to do something before a <code>pgc</code> starts playing. The <code>vob</code> tags just take a video file as an argument. In this case, following the anti-piracy ad, the DVD will jump to the &#8220;root&#8221; menu, which it recognizes as being the menu of the first <code>titleset</code> tag. A dvdauthor XML file can have plenty of titleset tags. And the <code>jump</code> command will take a number of &#8220;targets&#8221; as a parameter. Namely: <code>titleset &lt;n&gt; menu;</code>  (play the menu from titleset number n) or <code>titleset &lt;n&gt; title &lt;m&gt;;</code> (play title m in titleset n). More details again are in the man page. You&#8217;ll notice there is also a <code>call</code> function. This works similarly to <code>jump</code>, only it can be used to jump to a menu from a different titleset, which the <code>jump</code> command won&#8217;t do.</p>

<p>You&#8217;ll notice my root menu actually has buttons defined. The button names correspond to the names given in the spumux configuarion XML file that I used to create the menu mpg. dvdauthor and spumux are bundled together, so they understand each other when it comes to that kind of stuff. But again, I don&#8217;t want to go into detail about spumux, because imo it&#8217;s a bit of a waste of time and you&#8217;ll be better off using a frontend for it anyway. (I actually handcoded menu highlight images using <a href="http://www.gimp.org">The GIMP</a> of all things &#8230;. it was really cool, but still quite tedious).</p>

<p>Then all you have to do is run dvdauthor:</p>

<pre><code>dvdauthor -x &lt;xml file&gt;
</code></pre>

<p>And then use <a href="http://fy.chalmers.se/~appro/linux/DVD+RW/">growisofs</a> to burn a DVD image:</p>

<pre><code>growisofs -dvd-video -Z /dev/dvdrw /folder/with/video_ts
</code></pre>

<p>Anyway, I hope this helps someone out sometime! Really, the meat of the operation is done with that one ffmpeg command, and everything else is can be done with a dvd authoring tool&#8230; Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://skrud.com/articles/2005/10/15/converting-pal-to-ntsc-on-linux/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Linux Fairy</title>
		<link>http://skrud.com/articles/2005/08/04/linux-fairy/</link>
		<comments>http://skrud.com/articles/2005/08/04/linux-fairy/#comments</comments>
		<pubDate>Fri, 05 Aug 2005 00:37:44 +0000</pubDate>
		<dc:creator>Skrud</dc:creator>
				<category><![CDATA[ccss]]></category>
		<category><![CDATA[concordia]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[school]]></category>

		<guid isPermaLink="false">http://www.skrud.net/2005/08/04/linux-fairy/</guid>
		<description><![CDATA[I&#8217;m the Linux Fairy, happily prancing about with penguin wings, tossing free Ubuntu Linux CDs to all in my wake!

I ordered some 200 Install CDs from Ubuntu (they&#8217;re free!) after giving away all the CDs that Nadia ordered long ago. They finally arrived today. Only instead of going to ECA (which is where I ship [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m the Linux Fairy, happily prancing about with penguin wings, tossing free <a href="http://www.ubuntulinux.org">Ubuntu Linux</a> CDs to all in my wake!</p>

<p>I ordered some 200 Install CDs from <a href="http://www.ubuntulinux.org">Ubuntu</a> (they&#8217;re free!) after giving away all the CDs that Nadia ordered long ago. They finally arrived today. Only instead of going to ECA (which is where I ship parcels addresses to CCSS), they were delivered to the Department of Computer Science. So I got this weird e-mail from Dr. Lam (the chair) saying that there was a parcel of 200 Linux CDs with my name on it in the CSE Department Office.</p>

<p>Now, when you receive 200 CDs from Ubuntu, it comes in a big ass box:</p>

<p><img src="http://skrud.net/blog/wp-content/040805_1838.jpg" alt="Ubuntu CDs"/></p>

<p>(I made a little mess in the CCSS Office&#8230; sorry folks!)</p>

<p>So now we are 200 Ubuntu CDs richer. Well, 150 x86 CDs, 25 PPC and 25 AMD64 CDs. Mike suggested putting them in Frosh bags. I think that&#8217;s an awesome idea, that way every Froshie will get a nice, fresh copy of Linux as soon as they come to Concordia. Excellent way to set them on the right foot.</p>

<p>There was a ~$10 delivery charge that Canada Post tacked on, likely due to the fact that the box was pretty damned big. The department happily footed the bill, which was awfully nice of them! So a huge thanks to the CSE department from me!</p>
]]></content:encoded>
			<wfw:commentRss>http://skrud.com/articles/2005/08/04/linux-fairy/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ah, amaroK :)</title>
		<link>http://skrud.com/articles/2005/07/13/ah-amarok/</link>
		<comments>http://skrud.com/articles/2005/07/13/ah-amarok/#comments</comments>
		<pubDate>Wed, 13 Jul 2005 20:15:48 +0000</pubDate>
		<dc:creator>Skrud</dc:creator>
				<category><![CDATA[apps]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://www.skrud.net/2005/07/13/ah-amarok/</guid>
		<description><![CDATA[I used to stay away from amaroK like it was the plague &#8211; mainly because it used to crash literally every 5 seconds. Not a very useful music player in that sense ;) But recently I&#8217;ve started using it again. Until now I&#8217;ve been using Rhythmbox for my Linux music needs, because it comes stock [...]]]></description>
			<content:encoded><![CDATA[<p>I used to stay away from <a href="http://amarok.kde.org">amaroK</a> like it was the plague &#8211; mainly because it used to crash literally every 5 seconds. Not a very useful music player in that sense ;) But recently I&#8217;ve started using it again. Until now I&#8217;ve been using <a href="http://www.gnome.org/projects/rhythmbox/">Rhythmbox</a> for my Linux music needs, because it comes stock with <a href="http://www.ubuntulinux.org">Ubuntu</a> and <a href="http://www.gnome.org">Gnome</a>, but I find Rhythmbox to have a very primitive interface which is not very configurable.  It acts a lot lile <a href="http://www.apple.ca/itunes">iTunes</a> but nearly as smoothly or as fluidly &#8211; and worst of all it would crash in the middle of the night.</p>

<p>What I did like about <a href="http://www.gnome.org/projects/rhythmbox/">Rhythmbox</a> though was that with the right <a href="http://gstreamer.freedesktop.org">GStreamer</a> plugins it would play <em>anything</em> at all. And that&#8217;s kind of important because my music tends to be in a ton of formats other than the &#8220;typical&#8221; MP3 and OGG. That includes AAC/M4A (thanks to iTunes + my PowerBook), <a href="http://www.musepack.net">Musepack</a>, AC3, etc. <a href="http://developer.kde.org/~wheeler/juk.html">JuK</a>, the most simplistic and versatile music player for KDE &#8211; and my favourite &#8211; just couldn&#8217;t handle these files, despite the fact that it should support anything that GStreamer supports.</p>

<p>So I gave <a href="http://amarok.kde.org">amaroK</a> a shot. And it doesn&#8217;t crash as often anymore &#8211; which is a good thing. The GStreamer engine still had some trouble with AAC files so I hooked up the <a href="http://xine.sf.net">Xine</a> engine. The best part about Xine is that it supports 5.1 surround sound&#8230; so those AC3 DVD rips of Nightwish&#8217;s Once come through much better than they did before. So far so good :)</p>
]]></content:encoded>
			<wfw:commentRss>http://skrud.com/articles/2005/07/13/ah-amarok/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
