<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">

<channel>
	<title>Jan-Krueger.net</title>
	
	<link>http://jan-krueger.net</link>
	<description>Creative Engineering</description>
	<lastBuildDate>Sat, 30 May 2009 13:35:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" -->
		<copyright>© </copyright>
		<managingEditor>jk@jk.gs ()</managingEditor>
		<webMaster>jk@jk.gs()</webMaster>
		<category />
		<ttl>1440</ttl>
		<itunes:keywords />
		<itunes:subtitle />
		<itunes:summary>Creative Engineering</itunes:summary>
		<itunes:author />
		<itunes:category text="Society &amp; Culture" />
		<itunes:owner>
			<itunes:name />
			<itunes:email>jk@jk.gs</itunes:email>
		</itunes:owner>
		<itunes:block>Yes</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://jan-krueger.net/wordpress/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<image>
			<url>http://jan-krueger.net/wordpress/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
			<title>Jan-Krueger.net</title>
			<link>http://jan-krueger.net</link>
			<width>144</width>
			<height>144</height>
		</image>
		<geo:lat>50.776787</geo:lat><geo:long>6.134597</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/jan-krueger" type="application/rss+xml" /><item>
		<title>Pain made useful: a story</title>
		<link>http://jan-krueger.net/life/pain-made-useful-a-story</link>
		<comments>http://jan-krueger.net/life/pain-made-useful-a-story#comments</comments>
		<pubDate>Sat, 30 May 2009 13:35:44 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Life Engineering]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=102</guid>
		<description><![CDATA[I haven&#8217;t posted anything for months, but I feel very strongly about an experience I had yesterday and I want to tell you about it. This is a story involving a person who had been feeling extremely strong pain for months and months, and myself.
At first glance this post will look like it&#8217;s rather unrelated [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t posted anything for months, but I feel very strongly about an experience I had yesterday and I want to tell you about it. This is a story involving a person who had been feeling extremely strong pain for months and months, and myself.</p>
<p>At first glance this post will look like it&#8217;s rather unrelated to what I have posted about before. In fact, it&#8217;s about the human mind and about how it works, and about how it changes.</p>
<p>Please understand that I have to suppress a lot of details and slightly warp the story to protect the identity of that person. I just flipped a coin to determine that I&#8217;ll be presenting that person as male, and I&#8217;ll call him Chris. I don&#8217;t know any person called Chris, so I guess that&#8217;s okay.</p>
<p>So Chris had been trying everything he could find. Pain medication, stronger pain medication, elaborate diagnostics, alternative approaches to healing, everything. All doctors pretty much agreed that there was no physiological basis for the pain. Chris found that hard to accept, because that had to mean that it&#8217;s a psychosomatic thing; a signal from the body that things aren&#8217;t going right&#8230; a signal that change needs to happen. Still, he started looking into psychotherapy. A few attempts had no real effect; at some point he found a therapist who could indeed help him reduce the pain for a while (in exchange for a lot of money, of course). A permanent solution wasn&#8217;t in sight, though. The last thing he tried was an inpatient therapy, during which on some days he actually felt really good&#8230; but there wasn&#8217;t any method to it. The pain would keep on coming back.</p>
<p>Then we met, and we talked about it. <span id="more-102"></span></p>
<h3>The setup</h3>
<p>Understandably, Chris was a bit hesitant to talk about his situation. Not many people are willing to accept psychological problems as real problems that need more than a stern talking to or a few words of encouragement. Many people who have acquired a seemingly irrational problem like a phobia or compulsive behaviour are met with ridicule, disbelief or even scorn every day.  If you have a problem like that and everybody just tells you that it&#8217;s really not that difficult, it&#8217;s easy to get an additional problem: you start asking yourself if you&#8217;re broken or if something is fundamentally wrong with you. These kinds of doubts in yourself really make things harder by giving you even more to beat yourself up about.</p>
<p>You probably noticed just now that I don&#8217;t agree with this approach of marginalizing other people&#8217;s experiences. When I talked to Chris, he already knew that (and that&#8217;s another story I won&#8217;t go into now), so he gave it a try, and I listened to him and did something that I have been learning to do: I made no negative judgements. Not even in my thoughts. That in itself, of course, doesn&#8217;t change anything, but it doesn&#8217;t make things worse, either. Most importantly, what it definitely doesn&#8217;t do is make Chris feel bad about talking about things.</p>
<p>I listened and asked clarifying questions. It was a very interesting story. Before Chris started experiencing this strong pain, he&#8217;d been working almost all the time. He had taken multitasking to an extreme: doing housework while eating, thinking about nothing but work during the (short) lunch break, working through half of the night. If he woke up with a splitting headache, and that happened very often, he just took pain medicine and kept on working all day long. In a way, it&#8217;s not surprising that the body eventually decided to up the ante.</p>
<p>When I asked him, Chris admitted that he felt two ways about the pain: he understood that it was an important message from his body, but he was also very frustrated because it was, well, an extremely painful message. I suggested to help him have an experience of getting a message from the body that isn&#8217;t painful at all, to really understand that the message isn&#8217;t meant to be primarily about feeling bad. He sounded very curious (admittedly, if you&#8217;re all out of options you&#8217;ll eventually take anything you can get, no matter how stupid it sounds), so we gave it a go. I had never done anything this audacious before (though I only told Chris that when we were already in the middle of the amazing things). All I had done was to talk to many people who have been doing this kind of thing very successfully for a long time, and to share my thoughts with them. And I had changed my way of looking at communication. Now the fire trial was upon me.</p>
<h3>The &#8220;magic&#8221;</h3>
<p>I can tell you that I was extremely nervous. I was literally shivering even though I was beyond confident that it would have <em>some</em> effect. My main fear, I guess, was that what I was going to say would sound very &#8220;out there&#8221;, to put it diplomatically. Anyhow, apparently I managed to state my case convincingly, and Chris proceeded to get an actual message from his body. He experienced a very distinct tingling (he described it as a feeling like a weak electrical current) in his left index finger. We played around with that and got a few other feelings, too. Chris was, understandably, amazed. He suggested to try and have the pain diminish, but his body apparently wouldn&#8217;t have that.</p>
<p>I&#8217;ll skip over a few dead ends we hit and so, a few minutes later, I literally started talking to Chris&#8217;s body. No, really. I did this because I believed that it would make sense to Chris (and, in a way, to his body) in his particular situation. The gist of it was that I suggested to his body to stop the pain as long as Chris went easy enough on himself to stay reasonably healthy. Then we started talking about something completely different. A few minutes later, when I asked Chris about the pain, it was <em>completely gone</em>. It stayed gone for at least another hour, at which point I had to leave.</p>
<p>A day later (today, in fact) I briefly met Chris again. I asked him about the pain, and he said that he felt it &#8220;a bit&#8221;, and he went right on telling me how he couldn&#8217;t sleep all night because something upsetting (unrelated to his story) had happened&#8230; as if he felt there was a connection between the two. As if he felt that there is a reason for the pain, and he now understands the pain better, and the pain understands him better. Sorry if that just sounded a bit weird.</p>
<p>Is this all a big fluke? Perhaps, even if I don&#8217;t think so. Why should my party tricks have made a difference when Chris had spent thousands of Euros on all kinds of treatments, even some of the more outrageous ones?</p>
<p>Still, I&#8217;ll have plenty of opportunity to speak with Chris over the next few weeks, and I&#8217;ll see how things develop. No matter what happens, however, I am confident that I am on to something.</p>
<p>So that post was rather different from the stuff I usually write. I may let you convince me to write more about it. A lot more, probably. But only if I know you&#8217;re interested, and you&#8217;re now officially in charge of telling me whether you are. That&#8217;s not too bad, is it? I&#8217;m not even asking for donations.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=ER327yQCWBY:UZSzBrAcSwI:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=ER327yQCWBY:UZSzBrAcSwI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=ER327yQCWBY:UZSzBrAcSwI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=ER327yQCWBY:UZSzBrAcSwI:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/ER327yQCWBY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/life/pain-made-useful-a-story/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Managing your web passwords the portable and secure way</title>
		<link>http://jan-krueger.net/comm/internet/managing-your-web-passwords-the-portable-and-secure-way</link>
		<comments>http://jan-krueger.net/comm/internet/managing-your-web-passwords-the-portable-and-secure-way#comments</comments>
		<pubDate>Fri, 06 Feb 2009 23:43:51 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=94</guid>
		<description><![CDATA[Dear users of browsers other than Firefox, I&#8217;m not talking to you now. Sorry. Dear remaining readers, have you ever disliked having to a) remember all of your different passwords for all websites or b) store them on your local computer so you can&#8217;t get at them from other places or c) use the same [...]]]></description>
			<content:encoded><![CDATA[<p>Dear users of browsers other than Firefox, I&#8217;m not talking to you now. Sorry. Dear remaining readers, have you ever disliked having to a) remember all of your different passwords for all websites or b) store them on your local computer so you can&#8217;t get at them from other places or c) use the same password everywhere even if that makes the impact of security issues a lot worse? I used to go with option b) but I didn&#8217;t really like it. Now I&#8217;ve found something else; allow me to share. <span id="more-94"></span></p>
<h3>Requirements</h3>
<ul>
<li>You need a single master password that&#8217;s rather secure. I&#8217;m not going to reiterate the usual password safety advice, I trust you to know about this stuff.</li>
<li>You need the Firefox extension <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a>.</li>
<li>You need the Greasemonkey user script I&#8217;ll be talking about now.</li>
</ul>
<p>The general idea here is to avoid all of the problems with the solutions mentioned above. How does that work? You install an extension that generates passwords out of your master password and the domain of each site. This eliminates a) because <em>you only have to remember a single password</em> (the domain of a site doesn&#8217;t tend to change, so it can be picked up automatically by the script); it eliminates b) because all you need to give the script is the master password, and you can do that pretty much anywhere because <em>it doesn&#8217;t store the master password anywhere</em>; finally, it eliminates c) because each site will get a different password and even if one of them gets compromised, there is <em>no known way to get your other passwords</em> that doesn&#8217;t take at least a couple of hundred years.</p>
<p>The script I recommend is called Password Composer, written by Johannes la Poutré and others. It&#8217;s rather nice to use; the downside is that the passwords aren&#8217;t quite as secure as they could be. I&#8217;ve modified the original Password Composer script to improve the password generation algorithm. That means the my version of the script won&#8217;t be compatible with any similar software but it will probably be significantly more secure than the original script.</p>
<h3>Boring technical details</h3>
<p>The original Password Composer uses a formula like <code>md5(&lt;master password&gt;:&lt;domain&gt;)</code> and trims the resulting MD5 hash to eight characters, so you get 4294967296 different passwords.</p>
<p>My script changes this in two ways: it uses a different way of mixing the master password and domain together, and it uses a tighter way of encoding the MD5 hash. The formula goes like <code>md5_base64(&lt;master password&gt;:md5_base64(&lt;domain&gt;:&lt;master password&gt;))</code>. This potentially improves the mixing quality of the overall hash function (it might not, but it can&#8217;t really be worse, so what the heck) and it raises the number of different passwords to 281474976710656 (again, eight characters, but this time it&#8217;s uppercase and lowercase letters, digits and three symbols).</p>
<h3>Instructions and download</h3>
<p>I&#8217;m not writing a separate <a href="http://www.xs4all.nl/~jlpoutre/BoT/Javascript/PasswordComposer/">instructions page</a> for the script since the user interface is exactly the same as that of the original script. The download link for the script itself is on my <a href="http://jast.heapsort.de/dev/gm.html">Greasemonkey</a> page; here&#8217;s a direct link: <a href="http://jast.heapsort.de/dev/dl/gm/password_composer.user.js">Password Composer 2.03j</a></p>
<p>I hope this script will be useful for you. Any feedback (including suggestions for improvement) is appreciated.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=r5gqAsRmmvg:PBo8FPx6arU:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=r5gqAsRmmvg:PBo8FPx6arU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=r5gqAsRmmvg:PBo8FPx6arU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=r5gqAsRmmvg:PBo8FPx6arU:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/r5gqAsRmmvg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/comm/internet/managing-your-web-passwords-the-portable-and-secure-way/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Song Fight(ish): Paper Thin</title>
		<link>http://jan-krueger.net/general-creativity/song-fightish-paper-thin</link>
		<comments>http://jan-krueger.net/general-creativity/song-fightish-paper-thin#comments</comments>
		<pubDate>Mon, 22 Sep 2008 03:45:47 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[General Creativity]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=63</guid>
		<description><![CDATA[The submission timeframe for the current Song Fight, &#8220;Paper Thin&#8221;, ended four days ago and the submissions were just published. Unfortunately I didn&#8217;t manage to submit my song in time (I recorded most of it in the last few hours) but you can listen to it anyway. 
Download
Because this song isn&#8217;t really official it doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>The submission timeframe for the current Song Fight, &#8220;Paper Thin&#8221;, ended four days ago and the submissions were just published. Unfortunately I didn&#8217;t manage to submit my song in time (I recorded most of it in the last few hours) but you can listen to it anyway. <span id="more-63"></span></p>
<h3>Download</h3>
<p>Because this song isn&#8217;t really official it doesn&#8217;t get its own page on the Internet Archive. Instead, you can download it from this server or stream it (Flash player required):</p>
<p></p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/"><img style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/de/88x31.png" alt="Creative Commons License" /></a><br />
<span>Paper Thin</span> by <a rel="cc:attributionURL" href="http://jan-krueger.net/">Jan Krüger</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Germany License</a>.</p>
<h3>Details</h3>
<p>In the first iteration of the idea, this was going to be a song about some very depressed person. Now it&#8217;s about a computer game addict and it&#8217;s shorter than planned because I didn&#8217;t bother writing more lyrics after the deadline passed. The mix is a bit overcompressed and some of the song&#8217;s parts feel a bit disjointed to me. Still, it&#8217;s not half bad. It&#8217;s also another vocals-only (a cappella) song. I really like doing those but they&#8217;re a lot more work (I need to record about three vocal takes to fill the song&#8217;s &#8220;soundscape&#8221; as much as one average acoustic guitar take). I&#8217;m particularly happy with the way the pseudo-brassy vocals turned out.</p>
<ul>
<li>Total time spent: 12 hours? I can&#8217;t remember.</li>
<li>Authors and participants: none. Well, not counting me.</li>
<li>Recording gear:
<ul>
<li>Yamaha MG 10/2 miniature mixing panel</li>
<li>El-cheapo clone of a rather well-known dynamic mic for vocals</li>
<li>REAPER 2.5, a really cool multi-track audio sequencing application (DAW)</li>
</ul>
</li>
<li>Instruments:
<ul>
<li>My voice. Layered on top of itself. Lots of times.</li>
</ul>
</li>
</ul>
<p>Thanks for listening; as always, I appreciate your feedback.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=8OtUft8wGR4:uCTHEONEEK0:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=8OtUft8wGR4:uCTHEONEEK0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=8OtUft8wGR4:uCTHEONEEK0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=8OtUft8wGR4:uCTHEONEEK0:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/8OtUft8wGR4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/general-creativity/song-fightish-paper-thin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://jan-krueger.net/songfight/2008-09-18-paper-thin.mp3" length="4762852" type="audio/mpeg" />
			<enclosure url="http://jan-krueger.net/wordpress/wp-content/uploads/songfight/2008-09-18-paper-thin.mp3" length="4762852" type="audio/mpeg" />
<itunes:duration>3:18</itunes:duration>
		<itunes:subtitle>The submission timeframe for the current Song Fight, "Paper Thin", ended four days ago and the submissions were just published. Unfortunately I didn't manage to ...</itunes:subtitle>
		<itunes:summary>The submission timeframe for the current Song Fight, "Paper Thin", ended four days ago and the submissions were just published. Unfortunately I didn't manage to submit my song in time (I recorded most of it in the last few hours) but you can listen to it anyway. 
Download
Because this song isn't really official it doesn't get its own page on the Internet Archive. Instead, you can download it from this server or stream it (Flash player required):




Paper Thin by Jan Kruuml;ger is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Germany License.
Details
In the first iteration of the idea, this was going to be a song about some very depressed person. Now it's about a computer game addict and it's shorter than planned because I didn't bother writing more lyrics after the deadline passed. The mix is a bit overcompressed and some of the song's parts feel a bit disjointed to me. Still, it's not half bad. It's also another vocals-only (a cappella) song. I really like doing those but they're a lot more work (I need to record about three vocal takes to fill the song's "soundscape" as much as one average acoustic guitar take). I'm particularly happy with the way the pseudo-brassy vocals turned out.

	Total time spent: 12 hours? I can't remember.
	Authors and participants: none. Well, not counting me.
	Recording gear:

	Yamaha MG 10/2 miniature mixing panel
	El-cheapo clone of a rather well-known dynamic mic for vocals
	REAPER 2.5, a really cool multi-track audio sequencing application (DAW)


	Instruments:

	My voice. Layered on top of itself. Lots of times.



Thanks for listening; as always, I appreciate your feedback.</itunes:summary>
		<itunes:keywords>General,Creativity,,Music</itunes:keywords>
		<itunes:author>jk@jk.gs</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>No</itunes:block>
	</item>
		<item>
		<title>Song Fight: Interesting Times</title>
		<link>http://jan-krueger.net/general-creativity/song-fight-interesting-times</link>
		<comments>http://jan-krueger.net/general-creativity/song-fight-interesting-times#comments</comments>
		<pubDate>Wed, 03 Sep 2008 22:47:24 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[General Creativity]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=57</guid>
		<description><![CDATA[Good news! A couple of weeks ago I found the Song Fight website. Song Fight works like this: a song title is posted. You write a song for that title within a week and submit it to the fightmaster. When the week is up, the fightmaster will publish the list of all entries on the [...]]]></description>
			<content:encoded><![CDATA[<p>Good news! A couple of weeks ago I found the <a href="http://songfight.org/">Song Fight website</a>. Song Fight works like this: a song title is posted. You write a song for that title within a week and submit it to the fightmaster. When the week is up, the fightmaster will publish the list of all entries on the website. Visitors can now vote for songs until the songs of the next fight are published. The winner of a fight gets to brag&#8230; and not really anything else. Apart from a serious boost in creativity and musical skills when you make it a habit to participate, that is.</p>
<p>Yesterday (going by the local timezone) I submitted my first Song Fight entry for the title &#8220;Interesting Times&#8221;. It will be up on the Song Fight website shortly, and it&#8217;s now available here. <span id="more-57"></span></p>
<h3>Download</h3>
<p>The song is available at the Internet Archive: <a href="http://www.archive.org/download/InterestingTimes/InterestingTimes.mp3">Interesting Times</a> (right click + &#8220;save target as&#8221; might be helpful). See also the <a href="http://www.archive.org/details/InterestingTimes">media item info page</a>.</p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/"><img style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/de/88x31.png" alt="Creative Commons License" /></a><br />
<span>Interesting Times</span> by <a rel="cc:attributionURL" href="http://jan-krueger.net/">Jan Krüger</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Germany License</a>.</p>
<h3>Listen inline (needs Flash)</h3>
<p></p>
<h3>All the gory details</h3>
<p>The idea came to me on Sunday evening. I had already known that I wanted a song in 5/8 time and, if possible, with lots of gratuitious time signature changes. On Sunday I was randomly strumming on my steel-string acoustic guitar when I suddenly found a nice combination of rhythm and chords. Seconds later I knew the tune of the chorus and I knew that it was going to be what I then thought to be a mix of 8/8 and 5/8 (but is actually a mix of 7/8 and 6/8). A general idea of the lyrics and overall melody developed over the next couple of minutes. I also wrote most of the lyrics that evening, and some parts on a bus ride to the Netherlands on Tuesday.</p>
<p>I started recording on Tuesday evening. Some time in the middle of the night I had finished everything up to the end of the second verse (though with considerably less tracks than the song has now). After a few hours of sleep all the rest followed, including more work on mixing and such (which I always start doing while I&#8217;m recording individual takes). Total estimated time of working on the song is about 12-14 hours.</p>
<p>WIth this song, I put a lot more thought into the mixing. I think it shows. On the other hand, I&#8217;m still far from as proficient as I want to be. Same goes for the actual performance, of course. Neverending journey and all that.</p>
<ul>
<li>Total time spent: 12-14 hours (404 diary not found)</li>
<li>Authors and participants: me and myself.</li>
<li>Recording gear:
<ul>
<li>Yamaha MG 10/2 (miniature mixing console)</li>
<li>Studio Projects B1 1&#8243; condenser microphone</li>
<li>REAPER 2.46, a really cool multi-track audio sequencing application (DAW)</li>
</ul>
</li>
<li>Instruments:
<ul>
<li>Voice (mine. Repeatedly.)</li>
<li>Guitars (Ibanez V72ECE-BK<a class="nounderline" href="http://www.thomann.de/de/ibanez_v72ece_bk.htm"><span class="oobiggernavtext"><strong></strong></span></a> and Yamaha Pacifica 112)</li>
<li>E-MU Proteus X LE</li>
</ul>
</li>
</ul>
<p>Hope you enjoy the song. Feedback is appreciated. Thanks!</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=mOg8q6IAruY:W_3EYNMX7Ys:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=mOg8q6IAruY:W_3EYNMX7Ys:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=mOg8q6IAruY:W_3EYNMX7Ys:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=mOg8q6IAruY:W_3EYNMX7Ys:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/mOg8q6IAruY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/general-creativity/song-fight-interesting-times/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.archive.org/download/InterestingTimes/InterestingTimes.mp3" length="5575584" type="audio/mpeg" />
			<enclosure url="http://jan-krueger.net/wordpress/wp-content/uploads/songfight/2008-09-03-interesting-times.mp3" length="5575584" type="audio/mpeg" />
<itunes:duration>2:54</itunes:duration>
		<itunes:subtitle>Good news! A couple of weeks ago I found the Song Fight website. Song Fight works like this: a song title is posted. You write ...</itunes:subtitle>
		<itunes:summary>Good news! A couple of weeks ago I found the Song Fight website. Song Fight works like this: a song title is posted. You write a song for that title within a week and submit it to the fightmaster. When the week is up, the fightmaster will publish the list of all entries on the website. Visitors can now vote for songs until the songs of the next fight are published. The winner of a fight gets to brag... and not really anything else. Apart from a serious boost in creativity and musical skills when you make it a habit to participate, that is.

Yesterday (going by the local timezone) I submitted my first Song Fight entry for the title "Interesting Times". It will be up on the Song Fight website shortly, and it's now available here. 
Download
The song is available at the Internet Archive: Interesting Times (right click + "save target as" might be helpful). See also the media item info page.


Interesting Times by Jan Kruuml;ger is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Germany License.
Listen inline (needs Flash)

All the gory details
The idea came to me on Sunday evening. I had already known that I wanted a song in 5/8 time and, if possible, with lots of gratuitious time signature changes. On Sunday I was randomly strumming on my steel-string acoustic guitar when I suddenly found a nice combination of rhythm and chords. Seconds later I knew the tune of the chorus and I knew that it was going to be what I then thought to be a mix of 8/8 and 5/8 (but is actually a mix of 7/8 and 6/8). A general idea of the lyrics and overall melody developed over the next couple of minutes. I also wrote most of the lyrics that evening, and some parts on a bus ride to the Netherlands on Tuesday.

I started recording on Tuesday evening. Some time in the middle of the night I had finished everything up to the end of the second verse (though with considerably less tracks than the song has now). After a few hours of sleep all the rest followed, including more work on mixing and such (which I always start doing while I'm recording individual takes). Total estimated time of working on the song is about 12-14 hours.

WIth this song, I put a lot more thought into the mixing. I think it shows. On the other hand, I'm still far from as proficient as I want to be. Same goes for the actual performance, of course. Neverending journey and all that.

	Total time spent: 12-14 hours (404 diary not found)
	Authors and participants: me and myself.
	Recording gear:

	Yamaha MG 10/2 (miniature mixing console)
	Studio Projects B1 1" condenser microphone
	REAPER 2.46, a really cool multi-track audio sequencing application (DAW)


	Instruments:

	Voice (mine. Repeatedly.)
	Guitars (Ibanez V72ECE-BK and Yamaha Pacifica 112)
	E-MU Proteus X LE



Hope you enjoy the song. Feedback is appreciated. Thanks!</itunes:summary>
		<itunes:keywords>General,Creativity,,Music</itunes:keywords>
		<itunes:author>jk@jk.gs</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>No</itunes:block>
	</item>
		<item>
		<title>Using TrueCrypt(R)’s encrypted system partitions from Linux, now with less bugs</title>
		<link>http://jan-krueger.net/development/dmsetup-tc-0-2</link>
		<comments>http://jan-krueger.net/development/dmsetup-tc-0-2#comments</comments>
		<pubDate>Sun, 17 Aug 2008 13:30:11 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=48</guid>
		<description><![CDATA[Take note if you had problems using dmsetup-tc, the program I published last month that allows you to use TrueCrypt®&#8217;s encrypted system drives/partitions (also called the &#8220;pre-boot authentication&#8221; feature) from Linux environments (and possibly other Unices). I have found a few rather embarassing bugs in it that made it rather unusable in pretty much all [...]]]></description>
			<content:encoded><![CDATA[<p>Take note if you had problems using <a href="http://jan-krueger.net/development/truecrypt-system-drive-on-linux">dmsetup-tc</a>, the program I published last month that allows you to use TrueCrypt®&#8217;s encrypted system drives/partitions (also called the &#8220;pre-boot authentication&#8221; feature) from Linux environments (and possibly other Unices). I have found a few rather embarassing bugs in it that made it rather unusable in pretty much all cases (it&#8217;s actually really astonishing that it even worked for myself&#8230;). So if previously you got a cryptic message like &#8220;fatal error: Success&#8221;, now would be a great time to try again.</p>
<p><a href="http://jan-krueger.net/src/dmsetup-tc-0.2.tar.bz2">Download dmsetup-tc 0.2</a> or review the <a href="http://jan-krueger.net/development/truecrypt-system-drive-on-linux">original article about dmsetup-tc</a> that explains the details. As usual, feedback is appreciated.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=RhnJov9X0yA:2uvDZYLDrwM:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=RhnJov9X0yA:2uvDZYLDrwM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=RhnJov9X0yA:2uvDZYLDrwM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=RhnJov9X0yA:2uvDZYLDrwM:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/RhnJov9X0yA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/development/dmsetup-tc-0-2/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to use TrueCrypt®-encrypted Windows system drives on Linux</title>
		<link>http://jan-krueger.net/development/truecrypt-system-drive-on-linux</link>
		<comments>http://jan-krueger.net/development/truecrypt-system-drive-on-linux#comments</comments>
		<pubDate>Wed, 23 Jul 2008 07:36:27 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=37</guid>
		<description><![CDATA[TrueCrypt® is a multi-platform on-the-fly drive encryption tool. It allows you to encrypt all your data in a filesystem and still use everything normally. On Windows, it supports encrypting the system (boot) partition (or the entire boot drive); you can even make TrueCrypt® encrypt your existing partitions live and continue working (though the I/O performance [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://truecrypt.org/">TrueCrypt</a>® is a multi-platform on-the-fly drive encryption tool. It allows you to encrypt all your data in a filesystem and still use everything normally. On Windows, it supports encrypting the system (boot) partition (or the entire boot drive); you can even make TrueCrypt® encrypt your existing partitions live and continue working (though the I/O performance sucks until it&#8217;s finished encrypting everything), pause and resume the encryption process (even across reboots). In short: it&#8217;s rather useful.</p>
<p>Even though TrueCrypt® introduced Windows system encryption in version 5.0 in February 2008 (that&#8217;s five months ago), its Linux version still doesn&#8217;t support accessing these encrypted partitions at all (it does mount &#8220;normal&#8221; TrueCrypt® volumes though). Since I recently encrypted my entire Windows drive but couldn&#8217;t live without the music files stored on it, I now humbly present the result of two wasted nights: a solution. <span id="more-37"></span></p>
<h3>This just in!</h3>
<p>A letter from the friendly folks over at truecrypt.org (®?) notified me that they don&#8217;t like my using their trademark TrueCrypt® in the name of my tool. To help avoid uncomfortable situations, I would like to point out to everybody that this tool is called dmsetup-tc and not dmsetup-TrueCrypt®.</p>
<p>To demonstrate that I take trademarks very seriously, I have taken great care in this article to give the trademark all the attention it undoubtedly deserves.</p>
<h3>Before you join the fun&#8230;</h3>
<p>I&#8217;d love to take a dive into technical details now but you&#8217;ll probably go away before I even get myself warmed up properly, so I&#8217;ll try and appease myself by mentioning that I learned lots of new things, including the gory details of XTS and PKCS#5/PBKDF2. Oh, and I first tried patching this stuff into TrueCrypt® but failed mainly due to two reasons: first, TrueCrypt® is written in C++ and it shows in the architecture; second, C++ itself. When I had everything but the correct initialization of the XTS tweak working, I gave up and started writing a separate tool. The positive side: it compiles in about a second and is snappier than TrueCrypt® when it runs, too (and it doesn&#8217;t do whatever weird things TrueCrypt® does with FUSE).</p>
<p>Oh, right, I wanted to keep the details out of this. Sorry.</p>
<h3>What you need</h3>
<ul>
<li>A computer with a little-endian architecture (rule of thumb: if Windows runs on it, you&#8217;re fine). Support for big-endian architectures will be added if someone else writes a patch. ;)</li>
<li>A Windows sytem partition or drive that has been encrypted (completely; partial encryption is absolutely not supported) with TrueCrypt®. Normal TrueCrypt® partitions are <em>not</em> supported; after all, TrueCrypt® for Linux works fine for them.</li>
<li>A Linux system that you want to access the partition(s) from.</li>
<li>libgcrypt (tested with version 1.2.4) and its development files.</li>
<li>GNU make.</li>
<li>A C compiler (tested with GCC 4.2.3).</li>
<li>Optionally, experience with C and so on if you want to track down (and fix) bugs or add features.</li>
</ul>
<h3>Install it</h3>
<ol>
<li>Download the source code: <a href="http://jan-krueger.net/src/dmsetup-tc-0.2.tar.bz2">dmsetup-tc-0.2.tar.bz2</a>.</li>
<li>Extract it somewhere.</li>
<li>Run make. You know the drill.</li>
<li>Put the resulting binary wherever you like.</li>
</ol>
<h3>Use it</h3>
<p>Now, suppose you&#8217;ve got an encrypted system drive on /dev/sda and you want to mount the partition /dev/sda1. Then you just do the following (as root):</p>
<pre>.../dmsetup-tc /dev/sda /dev/sda1 | dmsetup create win1</pre>
<p>This will create a DM device <em>/dev/mapper/win1</em>. You can now mount it. Assuming it&#8217;s got an NTFS filesystem (and you actually have a mountpoint called <em>/media/win1</em>):</p>
<pre>mount -t ntfs-3g -o uid=(your numeric uid),umask=077 /dev/mapper/win1 /media/win1</pre>
<p>There, all done. After umounting, remember to remove the DM device so that even root can&#8217;t get at your data anymore:</p>
<pre>dmsetup remove win1</pre>
<p><strong>Important:</strong> don&#8217;t use dmsetup-tc on its own; always pipe its output directly into dmsetup! It outputs your volume master keys. You don&#8217;t want anybody to get a hold of those. There is a certain security risk to piping the data, too (it might get paged out and end up in your swap, which is problematic if you don&#8217;t use encrypted swap; additionally, the data from the pipe might reside somewhere in your physical memory for some time, possibly allowing root to read the master key even after you have removed the DM device). You have been warned.</p>
<h3>Contribute</h3>
<p>I&#8217;m developing the tool in a Git repository and you can join in! See the <a href="http://repo.or.cz/w/dmsetup-tc.git">repository page</a> for details.</p>
<p>You can also contribute by sending me feedback, but my capacity for actively adding new features to this tool is very limited.</p>
<p>In either case, thank you very much!</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=qK6ydKUY7w4:cztB8_7VB_w:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=qK6ydKUY7w4:cztB8_7VB_w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=qK6ydKUY7w4:cztB8_7VB_w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=qK6ydKUY7w4:cztB8_7VB_w:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/qK6ydKUY7w4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/development/truecrypt-system-drive-on-linux/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Finally: the perfect CAPTCHA</title>
		<link>http://jan-krueger.net/comm/internet/finally-the-perfect-captcha</link>
		<comments>http://jan-krueger.net/comm/internet/finally-the-perfect-captcha#comments</comments>
		<pubDate>Tue, 22 Apr 2008 15:11:03 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=35</guid>
		<description><![CDATA[CAPTCHAs: these warped images you have to copy text out of in order to submit comments on an ever-growing number of websites.
The warped image approach has a number of serious flaws. Firstly, there is a strong correlation between the difficulty bots have with extracting the code from the image and the difficulty humans have with [...]]]></description>
			<content:encoded><![CDATA[<p>CAPTCHAs: these warped images you have to copy text out of in order to submit comments on an ever-growing number of websites.</p>
<p>The warped image approach has a number of serious flaws. Firstly, there is a strong correlation between the difficulty bots have with extracting the code from the image and the difficulty humans have with extracting the code from the image. In <a href="http://rapidshare.com/">some cases</a>, I hear it&#8217;s actually easier for machines than it is for humans.</p>
<p>Secondly, blind people and people without graphical output on their computers are automatically banned from your CAPTCHA-protected system. Bad.</p>
<p>A different approach is needed. Text-based CAPTCHAs, however, would likely require a knowledge base that challenges are generated from, and due to technical limitations, that knowledge base would probably be finite. A finite knowledge base means that it can probably be inferred from a decent number of challenges.</p>
<p>Some other approaches, such as Hashcash-style challenges, require that the user&#8217;s computer solves a difficult mathematical problem which ensures that it will be busy for quite a while until the correct solution is obtained (and the challenge can thus be passed). Again, this results in problems with accessibility.</p>
<p>Luckily, there is an alternative family of approaches that make spamming absolutely infeasible without causing any of the typical accessibility issues. As you know, spamming only pays off due to the ludicrously large number of places you can put your advertisements. Were said places to implement a disincentive to placing a large number of ads, spam would instantly leave them alone.</p>
<p>Enter the disincentive-based solution: ccCAPTCHA. Developed by myself, it works by charging commenters a certain monetary value. All the user has to do is supply their credit card number. You can now test ccCAPTCHA online at my <a href="http://jan-krueger.net/cccaptcha/">ccCAPTCHA prototype site</a>. On that page, I&#8217;m also making the technical parts of ccCAPTCHA available to other interested webmasters. And it&#8217;s all for free!</p>
<p>You&#8217;re welcome.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=i-1OHm-RZXg:8OJTUOKAoX8:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=i-1OHm-RZXg:8OJTUOKAoX8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=i-1OHm-RZXg:8OJTUOKAoX8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=i-1OHm-RZXg:8OJTUOKAoX8:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/i-1OHm-RZXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/comm/internet/finally-the-perfect-captcha/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>My first take on the “Album A Day” challenge</title>
		<link>http://jan-krueger.net/general-creativity/album-a-day-01</link>
		<comments>http://jan-krueger.net/general-creativity/album-a-day-01#comments</comments>
		<pubDate>Sun, 20 Apr 2008 21:18:24 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[General Creativity]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=34</guid>
		<description><![CDATA[Tom7, also known as Tom Murphy VII, has been challenging musicians to create an entire album in 24 hours. Consecutive hours, that is. In other words, this challenge is an excellent source of sleep deprivation and a great way to avoid doing things I ought to be doing instead. So I thought to myself: one [...]]]></description>
			<content:encoded><![CDATA[<p>Tom7, also known as Tom Murphy VII, has been challenging musicians to <a href="http://crapart.spacebar.org/aad/">create an entire album in 24 hours</a>. Consecutive hours, that is. In other words, this challenge is an excellent source of sleep deprivation and a great way to avoid doing things I ought to be doing instead. So I thought to myself: one day I simply must give this a try. That day was today (and yesterday). I proudly present my first Album-A-Day: <strong>You Vs. The Others</strong>. <span id="more-34"></span></p>
<p>I&#8217;d been contemplating creating an AAD since I first heard of it (which was a long time ago), but now I actually sat down and did it.</p>
<p>I deliberately didn&#8217;t listen to any of the existing AADs so that I didn&#8217;t have any pressure to reach any particular level of quality. I just went with pretty much all ideas that popped up in my head and made them into something longer than a minute (well, with one exception).</p>
<p>I started out at 10 pm (that&#8217;s yesterday, obviously) and it went pretty well. After a quarter of the allotted time was over, I already had eight minutes worth of music finished. Especially after the first song, I was rather impressed with myself. I wouldn&#8217;t have expected to be able to accomplish this much in this little time.</p>
<p>At 2 pm I took a break that ended up lasting until about 6 pm (I decided to get a bit of sleep after being awake for 24 hours in a row). At this point I had five songs finished, totalling at 14 minutes and 17 seconds. When the break ended, I spent about half of the remaining time <span style="text-decoration: line-through;">lazing around</span> recharging creativity and the rest writing the last couple of songs. I grudgingly had to include a purely instrumental (and completely improvised) song of two minutes and ten seconds to make it before the deadline. Well, that&#8217;s life.</p>
<h3>Take it out for a test drive</h3>
<p>Since I don&#8217;t care for exceeding my traffic limits, I have uploaded the songs to the Internet Archive. You can listen to them using some black Flash magic, or download them from the <a href="http://www.archive.org/details/jk_aad01_you_vs_the_others">Internet Archive details page</a>.</p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/de/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/de/88x31.png" /></a><br /><span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Sound" property="dc:title" rel="dc:type">You Vs. The Others</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://jan-krueger.net/general-creativity/album-a-day-01" property="cc:attributionName" rel="cc:attributionURL">Jan Kr&#252;ger</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/de/">Creative Commons Attribution-Share Alike 3.0 Germany License</a>.</p>
<p>Please note that the Flash thing below uses MP3 files of Some Quality, so you&#8217;d better have a broadband connection.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="170" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="xspf_player" /><param name="align" value="middle" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="src" value="http://www.archive.org/audio/xspf_player.swf?autoload=true&amp;playlist_url=http%3A%2F%2Fwww.archive.org%2Faudio%2Fxspf-maker.php%3Fidentifier%3Djk_aad01_you_vs_the_others%26playlist%3Dhttp%253A%252F%252Fwww.archive.org%252Fdownload%252Fjk_aad01_you_vs_the_others%252Fformat%253DVBR%2BM3U" /><embed id="xspf_player" type="application/x-shockwave-flash" width="400" height="170" src="http://www.archive.org/audio/xspf_player.swf?autoload=true&amp;playlist_url=http%3A%2F%2Fwww.archive.org%2Faudio%2Fxspf-maker.php%3Fidentifier%3Djk_aad01_you_vs_the_others%26playlist%3Dhttp%253A%252F%252Fwww.archive.org%252Fdownload%252Fjk_aad01_you_vs_the_others%252Fformat%253DVBR%2BM3U" bgcolor="#ffffff" quality="high" allowscriptaccess="sameDomain" align="middle"></embed></object></p>
<h3>Data about the album</h3>
<ul>
<li>Title: <strong>You Vs. The Others</strong></li>
<li>Total time spent, including breaks: about <strong>23 hours and 40 minutes</strong> (from 2008-04-19 22:00 to 2008-04-20 21:40 CEST)</li>
<li>Authors and participants: me and myself.</li>
<li>Recording gear:
<ul>
<li>Yamaha MG 10/2 (miniature mixing panel)</li>
<li>Studio Projects B1 1&#8243; condenser microphone</li>
<li>Sennheiser E835s dynamic microphone</li>
<li>REAPER 2.201, a really cool multi-track audio sequencing application</li>
</ul>
</li>
<li>Instruments:
<ul>
<li>Voice (mine. Repeatedly.)</li>
<li>Guitar (nylon and steel acoustic)</li>
<li>Samplers (Cockos ReaSynth &amp; ReaSynthDr and E-MU Proteus X LE)</li>
</ul>
</li>
<li>Full length: 20:02 (according to media player) or <strong>20:01</strong> (when I add up the numbers myself). Barely qualifies!</li>
<li>Average length of songs: 2:13 (standard deviation: 0:45)</li>
</ul>
<p>Now for the individual songs. Yes, the official track numbering does start at zero.</p>
<ol start="0">
<li>
<p><strong>Take Your Time</strong></p>
<p>This isn&#8217;t actually the first song I wrote, it&#8217;s the third. Apart from that, this list is in chronological order. I thought some sort of intro would be nice. It&#8217;s supposed to add a bit of perspective to the overall album, so there is a reference to the AAD challenge in it.</p>
<ul>
<li>Length: <strong>2:01</strong></li>
<li>Took me: <strong>90 minutes</strong></li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2000%20-%20take%20your%20time.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Go Alone</strong></p>
<p>Sometimes, you have to do things yourself. Outside help is a great thing but not if you&#8217;re going to lord your accomplishments over others; then you must work alone.</p>
<ul>
<li>Length: <strong>3:37</strong></li>
<li>Took me: <strong>4 hours</strong></li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2001%20-%20go%20alone.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Feature Creep</strong></p>
<p>The nightmare of every programmer. There are no fixed requirements and suddenly you&#8217;re supposed to make your software do everything on the fricking earth. By the way, feature creep can occur in songs, too.</p>
<ul>
<li>Length: <strong>2:29</strong></li>
<li>Took me: <strong>4 hours</strong></li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2002%20-%20feature%20creep.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Until The End</strong></p>
<p>Atheists. Pesky buggers. How can they honestly believe something that isn&#8217;t what I believe? I know I&#8217;m right! I always am.</p>
<ul>
<li>Length: <strong>3:53</strong></li>
<li>Took me: <strong>90 minutes</strong></li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2003%20-%20until%20the%20end.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Going Down</strong></p>
<p>A bit morbid perhaps.</p>
<ul>
<li>Length: <strong>2:28</strong></li>
<li>Took me: <strong>30 minutes</strong> (plus time to get the creative thing going)</li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2004%20-%20going%20down.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Sucks To Be Them</strong></p>
<p>Why not flaunt it for once? Just because they&#8217;re unhappy doesn&#8217;t mean you have to be. And you can make them even more unhappy by telling them so in the smuggest fashion you can muster.</p>
<ul>
<li>Length: <strong>1:37</strong></li>
<li>Took me: <strong>8 hours and 20 minutes</strong> (subtract the huge break and lots of laziness and it&#8217;s 1 hour 20 minutes)</li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2005%20-%20sucks%20to%20be%20them.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Cake</strong></p>
<p>I defeated GLaDOS and all I got was this lousy song. Warning: contains spoilers for a certain video game.</p>
<ul>
<li>Length: <strong>1:34</strong></li>
<li>Took me: <strong>1 hour</strong></li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2006%20-%20cake.txt">Lyrics</a></li>
</ul>
</li>
<li>
<p><strong>Improvised Right Padding</strong></p>
<p>Nothing to comment on, but without this one I would never have managed the 20 minutes requirement.</p>
<ul>
<li>Length: <strong>2:10</strong></li>
<li>Took me: <strong>2:10 times two</strong> :)</li>
</ul>
</li>
<li>
<p><strong>23 Seconds</strong></p>
<p>&#8220;Why not cut it as close as possible and still mess with some people&#8217;s heads?&#8221; I thought to myself. 23 seconds indeed.</p>
<ul>
<li>Length: <strong>0:23</strong> (oh, really!)</li>
<li>Took me: <strong>5 minutes</strong></li>
<li><a href="http://jan-krueger.net/aad/01/lyrics%20-%2008%20-%2023%20seconds.txt">Lyrics</a></li>
</ul>
</li>
</ol>
<p>There is no hidden bonus track. There can&#8217;t be. I would have run out of time.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=uIykT9i8xko:V0Jf9XJJ45Q:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=uIykT9i8xko:V0Jf9XJJ45Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=uIykT9i8xko:V0Jf9XJJ45Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=uIykT9i8xko:V0Jf9XJJ45Q:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/uIykT9i8xko" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/general-creativity/album-a-day-01/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HOWTO: encode a string into a complicated-looking trigonometric function</title>
		<link>http://jan-krueger.net/development/howto-encode-your-string-trigonometrically</link>
		<comments>http://jan-krueger.net/development/howto-encode-your-string-trigonometrically#comments</comments>
		<pubDate>Thu, 03 Apr 2008 18:49:19 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/?p=33</guid>
		<description><![CDATA[Today&#8217;s glance at reddit.com yielded a blog posting by a fellow who calls himself &#8220;Poromenos&#8221; and who recently wasted his day by designing a function made up of sines and cosines that encode the string &#8220;Hello world!&#8221;. &#8220;Hey&#8221;, I immediately thought, &#8220;I can do that too! I&#8217;m an expert at wasting my day, after all.&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s glance at reddit.com yielded a blog posting by a fellow who calls himself &#8220;Poromenos&#8221; and who recently wasted his day by <a title="Printing &quot;Hello world!&quot; using curve fitting techniques (or: The &quot;Hello world!&quot; function)" href="http://www.poromenos.org/node/89">designing a function made up of sines and cosines that encode the string &#8220;Hello world!&#8221;</a>. &#8220;Hey&#8221;, I immediately thought, &#8220;I can do that too! I&#8217;m an expert at wasting my day, after all.&#8221; Only I decided to go a step further and write a program that generates this sort of function. I&#8217;m lazy, remember?  <span id="more-33"></span></p>
<h3>The theory</h3>
<p>The magic behind Poromenos&#8217;s function is the Fourier theorem: any &#8220;mostly&#8221; continuous and periodic function can be expressed as a sum of sines and cosines. I&#8217;m not going to bore you with the details; suffice to say that this also works for sampled functions, i.e. discrete series of values.</p>
<p>There&#8217;s an algorithm called DFT (Discrete Fourier Transform) that takes a series of <em>N</em> complex sample values and generates a corresponding Fourier series which encodes the various sine/cosine coefficients in <em>N</em> complex output values. In the special case of real input values (which is an extremely common case), you can effectively throw away half of these output values and take the remaining <em>N</em> real/imaginary components, do a bit of magic, and end up with coefficients for a function of the form:</p>
<blockquote><p>f(t) = x<sub>0</sub> + x<sub>1</sub> cos(t) + x<sub>2</sub> sin(t) + x<sub>3</sub> cos(2t) + x<sub>4</sub> sin(2t) + &#8230;</p></blockquote>
<p>Now, <em>f(2 pi n/N)</em> returns exactly the <em>(n+1)</em>th character of the original string.</p>
<h3>Magic?</h3>
<p>Glad you ask. No, it&#8217;s not really magic. In fact, I used the trigonometric interpolation polynomial from Wikipedia&#8217;s article on the <a href="http://en.wikipedia.org/wiki/Discrete_Fourier_transform">Discrete Fourier transform</a> (remember: it&#8217;s science if you copied it from Wikipedia!):</p>
<blockquote><p>p(t) = 1/N * (X<sub>0</sub> + X<sub>1</sub> e<sup>it</sup> + &#8230; + X<sub>N/2</sub> cos(N/2 t) + X<sub>N/2+1</sub> e<sup>(-N/2+1)it</sup> + &#8230; + X<sub>N-1</sub> e<sup>-it</sup></p></blockquote>
<p>Here, <em>X<sub>i</sub></em> are the complex values of the Fourier series, and <em>e<sup>±it</sup></em> transforms to <em>cos t ± i sin t</em> according to Euler&#8217;s formula. The lone <em>cos</em> term in the middle doesn&#8217;t show up if <em>N</em> is odd.</p>
<p>Now, if the Discrete Fourier Transform is fed with real values, it holds that</p>
<blockquote><p>X<sub>i</sub> = X<sub>N-i</sub><sup>*</sup></p></blockquote>
<p>or, in other words, the right half of the series is equal to the complex conjugates (<em>(a + i b)<sup>*</sup> = a &#8211; i b</em>) of the left half in reverse order. Due to that, <em>p(t)</em> gets a lot simpler after a bit of reduction:</p>
<blockquote><p>p(t) = 1/N * (X<sub>0</sub> + 2 Re{X<sub>1</sub>} cos t &#8211; 2 Im{X<sub>1</sub>} sin t + &#8230; + Re{X<sub>N/2</sub>} cos(N/2 t)</p></blockquote>
<p>Again, the last term disappears for odd <em>N</em>.</p>
<p>There we are, all magic has now been reduced to more or less tangible math.</p>
<h3>The program</h3>
<p>I&#8217;ve written a small C program that takes as its input an arbitrary string and outputs the above function, modified a bit so that you can use the character index directly, i.e. f(4) gives you the<br />
fifth character of the original string.</p>
<p>The generated function will typically have an error of less than 0.1 at each position (which goes away by rounding the values as Poromenos does it in his code). In fact, for the string &#8220;Hello world!&#8221;, the mean square error is less than 0.0019.</p>
<p>Because this isn&#8217;t exactly a serious project, I didn&#8217;t spend any time adding stuff like UTF-8 support. You&#8217;ll have to resign yourself to using <acronym title="American Standard Code for Information Interchange">ASCII</acronym> or any 8-bit-per-character encoding.</p>
<p>Compiling the code requires that you have <a href="http://fftw.org/">fftw3</a> installed (including header files).</p>
<p>You can <a href="http://jan-krueger.net/src/fourierfit.c">download the code</a> or look at it in all its syntax-highlighted glory:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
<span style="color: #339933;">#include &lt;complex.h&gt;</span>
<span style="color: #339933;">#include &lt;math.h&gt;</span>
<span style="color: #339933;">#include &lt;fftw3.h&gt;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * fourierfit.c:
 * Fits a series of sines/cosines onto a series of character values from a
 * string.
 *
 * Copyright (c) 2008, Jan Krueger &lt;jast@heapsort.de&gt;
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
 */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * Compile like this:
 * cc -o fourierfit -lm -lfftw3 fourierfit.c
 */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * Precision of output function (in digits after decimal point).
 * Yes, it's a string. printf much?
 */</span>
<span style="color: #339933;">#define PRECISION &quot;3&quot;</span>
<span style="color: #808080; font-style: italic;">/* Names of cos/sin functions to use in output */</span>
<span style="color: #339933;">#define COSNAME &quot;cos&quot;</span>
<span style="color: #339933;">#define SINNAME &quot;sin&quot;</span>
<span style="color: #808080; font-style: italic;">/* Name of function variable */</span>
<span style="color: #339933;">#define FNAME &quot;t&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Don't change below here etc. */</span>
&nbsp;
<span style="color: #339933;">#define PREC_FORMAT &quot;%.&quot;PRECISION&quot;f&quot;</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>cos_format <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; %c &quot;</span>PREC_FORMAT<span style="color: #ff0000;">&quot;*&quot;</span>COSNAME<span style="color: #ff0000;">&quot;(&quot;</span>PREC_FORMAT<span style="color: #ff0000;">&quot;*&quot;</span>FNAME
	<span style="color: #ff0000;">&quot;)&quot;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>sin_format <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; %c &quot;</span>PREC_FORMAT<span style="color: #ff0000;">&quot;*&quot;</span>SINNAME<span style="color: #ff0000;">&quot;(&quot;</span>PREC_FORMAT<span style="color: #ff0000;">&quot;*&quot;</span>FNAME
	<span style="color: #ff0000;">&quot;)&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> format_term<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>f<span style="color: #339933;">,</span> <span style="color: #993333;">double</span> d<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> p<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> N<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>d <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">?</span> <span style="color: #ff0000;">'+'</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">'-'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		fabs<span style="color: #009900;">&#40;</span>d<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #808080; font-style: italic;">/* scale of function */</span>
		<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>p <span style="color: #339933;">*</span> M_PI <span style="color: #339933;">*</span> <span style="color:#800080;">2.0</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>N <span style="color: #808080; font-style: italic;">/* scale of parameter */</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> N<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> odd<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
	<span style="color: #993333;">double</span> <span style="color: #339933;">*</span>in<span style="color: #339933;">;</span>
	fftw_complex <span style="color: #339933;">*</span>out<span style="color: #339933;">;</span>
	fftw_plan p<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>argc <span style="color: #339933;">!=</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		puts<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Syntax: fourierfit &lt;string&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	N <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	odd <span style="color: #339933;">=</span> N <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
&nbsp;
	in <span style="color: #339933;">=</span> fftw_malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	out <span style="color: #339933;">=</span> fftw_malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span>fftw_complex<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	p <span style="color: #339933;">=</span> fftw_plan_dft_r2c_1d<span style="color: #009900;">&#40;</span>N<span style="color: #339933;">,</span> in<span style="color: #339933;">,</span> out<span style="color: #339933;">,</span>
		FFTW_ESTIMATE <span style="color: #339933;">|</span> FFTW_DESTROY_INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* Fill in array */</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		in<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	fftw_execute<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fftw_destroy_plan<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fftw_free<span style="color: #009900;">&#40;</span>in<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* &quot;DC&quot; */</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>PREC_FORMAT<span style="color: #339933;">,</span> creal<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span>N<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		format_term<span style="color: #009900;">&#40;</span>cos_format<span style="color: #339933;">,</span> <span style="color:#800080;">2.0</span><span style="color: #339933;">*</span>creal<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>N<span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		format_term<span style="color: #009900;">&#40;</span>sin_format<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color:#800080;">2.0</span><span style="color: #339933;">*</span>cimag<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>N<span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/* Nyquist component */</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>odd<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		format_term<span style="color: #009900;">&#40;</span>cos_format<span style="color: #339933;">,</span> creal<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#91;</span>N<span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>N<span style="color: #339933;">,</span> N<span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fftw_free<span style="color: #009900;">&#40;</span>out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>The example</h3>
<p>For the sake of completeness, here&#8217;s the function for &#8220;Hello world!&#8221; as generated by the above code:</p>
<blockquote><p>f(t) = 93.083 &#8211; 10.549*cos(0.524*t) &#8211; 0.195*sin(0.524*t) &#8211; 17.167*cos(1.047*t) + 22.805*sin(1.047*t) &#8211; 5.000*cos(1.571*t) &#8211; 1.833*sin(1.571*t) + 8.667*cos(2.094*t) + 19.630*sin(2.094*t) &#8211; 7.951*cos(2.618*t) &#8211; 1.638*sin(2.618*t) + 10.917*cos(3.142*t)</p></blockquote><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=C5uRvxbbpe8:sNjSvNTAp8U:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=C5uRvxbbpe8:sNjSvNTAp8U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=C5uRvxbbpe8:sNjSvNTAp8U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=C5uRvxbbpe8:sNjSvNTAp8U:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/C5uRvxbbpe8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/development/howto-encode-your-string-trigonometrically/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Why Humanity Is Blocked</title>
		<link>http://jan-krueger.net/comm/internet/why-humanity-is-blocked</link>
		<comments>http://jan-krueger.net/comm/internet/why-humanity-is-blocked#comments</comments>
		<pubDate>Sun, 25 Nov 2007 18:04:20 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://jan-krueger.net/uncategorized/why-humanity-is-blocked</guid>
		<description><![CDATA[ Please read carefully the following important message that does not come from the anonymous persons running whyfirefoxisblocked.com and whydiggisblocked.com.
You&#8217;ve reached this page because the site you were trying to visit now blocks visitors from the human race and other beings capable of browsing the web.
The users on continents such as America, Asia, Europe and [...]]]></description>
			<content:encoded><![CDATA[<p> Please read carefully the following important message that does not come from the anonymous persons running whyfirefoxisblocked.com and whydiggisblocked.com.</p>
<p style="text-align: center; font-size: 200%; color: #c10000; line-height: 120%">You&#8217;ve reached this page because the site you were trying to visit now blocks visitors from the human race and other beings capable of browsing the web.</p>
<p><strong>The users on continents such as America, Asia, Europe and Antarctica openly endorse critical thinking, a function of the human brain that allows humans to ignore irrelevant perceptions such as advertisement on web sites, and are well known for paying no huge amount of money  to the owners of sites they visit. Humans that ignore all advertisement are an infringement of the rights of web site owners and developers. Numerous web sites exist in order to provide quality content in exchange for displaying ads, humans who don&#8217;t click on these ads are stealing bandwidth without paying for it and website owners deserve a method to block this unauthorized bandwith theft.</strong></p>
<p><strong>Since the human brain does not allow website owners a method for excluding perceptions and do not obey &#8220;give away all your money&#8221; law, abiding webmasters are forced to block all humans. Demographics have shown that not only are humans a somewhat small and insignificant percentage of the planet, they actually are even smaller in terms of value, therefore blocking these beings seems to have only minimal financial drawbacks, whereas ending resource theft has tremendous financial rewards for honest, hard-working website owners and developers.</strong></p>
<p><strong>If you wish to view the site you came from we suggest stopping being human and becoming a machine instead.</strong></p>
<p>(Of course, <a href="http://whydiggisblocked.com/" rel="nofollow">humans using Digg are where the real evil is at</a>.)</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/jan-krueger?a=txclFO9c47Y:-xWHV-heaX8:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=txclFO9c47Y:-xWHV-heaX8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/jan-krueger?i=txclFO9c47Y:-xWHV-heaX8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/jan-krueger?a=txclFO9c47Y:-xWHV-heaX8:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/jan-krueger?d=cGdyc7Q-1BI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/jan-krueger/~4/txclFO9c47Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jan-krueger.net/comm/internet/why-humanity-is-blocked/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.343 seconds --><!-- Cached page served by WP-Cache -->
