<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Lukáš Lalinský</title>
	
	<link>http://oxygene.sk/lukas</link>
	<description>Random notes and stuff</description>
	<lastBuildDate>Thu, 02 Feb 2012 20:17:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/LukasLalinsky" /><feedburner:info uri="lukaslalinsky" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>New AcoustID server release</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/9Jr-XYhaSYU/</link>
		<comments>http://oxygene.sk/lukas/2012/02/new-acoustid-server-release/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 20:17:03 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1744</guid>
		<description><![CDATA[I&#8217;ve just updated the AcoustID servers with the latest version of the code. There is a couple of changes on both the website and the API. One important change on the website is addition of email and website fields to &#8230; <a href="http://oxygene.sk/lukas/2012/02/new-acoustid-server-release/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just updated the AcoustID servers with the latest version of the code. There is a couple of changes on both the website and the API.</p>
<p>One important change on the website is addition of email and website fields to applications. If you are an author of an open source application that uses the AcoustID API, please fill them in so that I can contact you in case there is a problem with your API key. These fields are not displayed anywhere publicly.</p>
<p>Contributor statistics were also removed from the website. They were interesting when the project was small and had a couple of contributors, but recently I&#8217;ve had a increasing number of people asking to had their account removed from the statistics, so I&#8217;ve decided to remove the statistics completely.</p>
<p>The <code>/v2/lookup</code> method supports a new option <code>sources</code> in the <code>meta</code> parameter. It&#8217;s only applicable when <code>meta</code> includes also <code>recordings</code> and it tells the server to return also the number of sources for each returned recording (corresponding to the Sources field on the website).</p>
<p>There are also two new methods <code>/v2/user/lookup?user=X</code> and <code>/v2/user/create_anonymous?client=X&#038;clientversion=X</code>, to support anonymous user accounts. They can be used from applications that can&#8217;t ask the users to log in on the Acoustid website, but there are a number of rules that such applications should follow:</p>
<ul>
<li>The returned API keys must be stored in the user&#8217;s settings and re-used. Do NOT create a new API key every time the application is started.</li>
<li>You can&#8217;t assume the saved API key still exists. Unused anonymous accounts will get deleted after some time. Use the user lookup call to verify the API key still exists.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/9Jr-XYhaSYU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2012/02/new-acoustid-server-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2012/02/new-acoustid-server-release/</feedburner:origLink></item>
		<item>
		<title>Acoustid fingerprinter 0.5.1 released</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/yxgozHS-urI/</link>
		<comments>http://oxygene.sk/lukas/2012/01/acoustid-fingerprinter-0-5-1-released/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 13:03:14 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[fingerprinter]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1725</guid>
		<description><![CDATA[A new version of the Acoustid fingerprinter has been released. It&#8217;s contains just one small bug fix regarding compatibility with Qt 4.8. The official binaries for version 0.5 are not affected by this bug, so this is a source-only release. &#8230; <a href="http://oxygene.sk/lukas/2012/01/acoustid-fingerprinter-0-5-1-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A new version of the Acoustid fingerprinter has been released. It&#8217;s contains just one small bug fix regarding <a href="https://github.com/lalinsky/acoustid-fingerprinter/issues/3">compatibility with Qt 4.8</a>. The official binaries for version 0.5 are not affected by this bug, so this is a source-only release.</p>
<p>Download:</p>
<ul>
<li><a href="https://github.com/downloads/lalinsky/acoustid-fingerprinter/acoustid-fingerprinter-0.5.1.tar.gz">Source code tarball</a> (91KB)</li>
</ul>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/yxgozHS-urI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2012/01/acoustid-fingerprinter-0-5-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2012/01/acoustid-fingerprinter-0-5-1-released/</feedburner:origLink></item>
		<item>
		<title>Acoustid fingerprinter 0.5 released</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/rbqoTTIjty0/</link>
		<comments>http://oxygene.sk/lukas/2011/12/acoustid-fingerprinter-0-5-released/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 14:59:02 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[fingerprinter]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1719</guid>
		<description><![CDATA[A new version of the Acoustid fingerprinter has been released. The version adds support for Unicode file names on Windows, reading 24-bit audio file formats and can parse MBID tags from MP3 files written by foo_musicbrainz. Download: Windows application (7.5M) &#8230; <a href="http://oxygene.sk/lukas/2011/12/acoustid-fingerprinter-0-5-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A new version of the Acoustid fingerprinter has been released. The version adds support for  Unicode file names on Windows, reading 24-bit audio file formats and can parse MBID tags from MP3 files written by <a href="http://www.foobar2000.org/components/view/foo_musicbrainz">foo_musicbrainz</a>.</p>
<p>Download:</p>
<ul>
<li><a href="https://github.com/downloads/lalinsky/acoustid-fingerprinter/acoustid-fingerprinter-0.5-win32.zip">Windows application</a> (7.5M)</li>
<li><a href="https://github.com/downloads/lalinsky/acoustid-fingerprinter/acoustid-fingerprinter-0.5-mac.dmg">Mac OS X application</a> (14.4M)</li>
<li><a href="https://github.com/downloads/lalinsky/acoustid-fingerprinter/acoustid-fingerprinter-0.5.tar.gz">Source code tarball</a> (70K)</li>
</ul>
<p>Changes since version 0.4:</p>
<ul>
<li>Unicode filename support on Windows.</li>
<li>Support for 24-bit sample formats.</li>
<li>Reading MBID tags from foobar2000-written MP3 files.</li>
<li>Added .desktop file for Linux.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/rbqoTTIjty0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/12/acoustid-fingerprinter-0-5-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/12/acoustid-fingerprinter-0-5-released/</feedburner:origLink></item>
		<item>
		<title>Chromaprint 0.6 released</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/3UGRwIgRRKE/</link>
		<comments>http://oxygene.sk/lukas/2011/12/chromaprint-0-6-released/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 14:27:50 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[chromaprint]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1712</guid>
		<description><![CDATA[A new version of Chromaprint has been released. As with the previous version, the core library hasn&#8217;t changed much. The fpcalc utility now supports 24-bit sample formats and by default calculates fingerprints using the first 2 minutes of audio. The &#8230; <a href="http://oxygene.sk/lukas/2011/12/chromaprint-0-6-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A new version of Chromaprint has been released. As with the previous version, the core library hasn&#8217;t changed much. The fpcalc utility now supports 24-bit sample formats and by default calculates fingerprints using the first 2 minutes of audio. The Python bindings previously included in Chromaprint have been moved to a separate library, <a href="http://pypi.python.org/pypi/pyacoustid">pyacoustid</a>.</p>
<p>Download:</p>
<ul>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-0.6.tar.gz">Source code tarball</a> (530K)</li>
<li>Static binaries for the <code>fpcalc</code> tool:
<ul>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.6-win32.zip">Windows</a> (695K)</li>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.6-osx-i386.tar.gz">Mac OS X, 32-bit, 10.4+</a> (582K)</li>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.6-osx-x86_64.tar.gz">Mac OS X, 64-bit, 10.4+</a> (582K)</li>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.6-linux-i686.tar.gz">Linux, 32-bit</a> (711K)</li>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.6-linux-x86_64.tar.gz">Linux, 64-bit</a> (689K)</li>
</ul>
</li>
</ul>
<p>Changes since version 0.5:</p>
<ul>
<li>Support for 24-bit file formats in fpcalc.</li>
<li>The fpcalc utility now uses 120 seconds of audio data by default.</li>
<li>Python bindings moved to a separate project (pyacoustid).</li>
</ul>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/3UGRwIgRRKE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/12/chromaprint-0-6-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/12/chromaprint-0-6-released/</feedburner:origLink></item>
		<item>
		<title>Inside the Acoustid server</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/jvfLGiDAhWo/</link>
		<comments>http://oxygene.sk/lukas/2011/12/inside-the-acoustid-server/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 16:42:54 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1663</guid>
		<description><![CDATA[Time flies really fast. It&#8217;s been over a year ago since I first released the server code for Acoustid. Back then, Acoustid was just an experiment, but the project is becoming more and more visible and these days it&#8217;s serving &#8230; <a href="http://oxygene.sk/lukas/2011/12/inside-the-acoustid-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Time flies really fast. It&#8217;s been over a year ago since <a title="Acoustid" href="http://oxygene.sk/lukas/2010/08/acoustid/">I first released the server code for Acoustid</a>. Back then, Acoustid was just an experiment, but the project is becoming more and more visible and these days it&#8217;s serving between <a title="Acoustid Statistics" href="http://acoustid.org/stats">500k and 600k lookups every day</a>.</p>
<p>What makes me more happy than that the project is being useful is that the decisions I&#8217;ve made regarding the server architecture turned out to work very well and the server generally very fast and scalable. The average lookup processing time is around 60ms and I expect the number to go down, not up in the future.</p>
<p>As the <a title="How does Chromaprint work?" href="http://oxygene.sk/lukas/2011/01/how-does-chromaprint-work/">post about Chromaprint</a> says, the audio fingerprints used in Acoustid are basically vectors of numbers. For performance reasons on the client side, applications are now calculating these fingerprints only from the first two minutes of audio files. That means that when the server scores the results, it only considers the first two minutes of audio. If two tracks have the same intro that is over two minutes long and then they get different, Acoustid will unfortunately see them as the same. This doesn&#8217;t cause too many practical problems though. The MusicDNS service that MusicBrainz currently supports also use only the first two minutes.</p>
<p>Before scoring the results, the server must somehow get the results in the first place, and this is where normally things get slow. The database currently has more than 10M fingerprints. If we assume all fingerprints have at least two minutes (which means 948 numbers per fingerprint), that&#8217;s 9480M numbers to search in. Just saving these numbers on disk, together with the pointers to the fingerprints they come from, would require 76GB of space. And since the search must be fast, the data must fit in RAM. This is obviously not the way to go if we want to be able to host the service on a single server and yet get response times below 100ms. The search space must be reduced.</p>
<p>Because Acoustid is meant to be used for file identification, I don&#8217;t necessarily need to search anywhere in the fingerprint. I know that the fingerprints I get are from the start of the song, I know that if the two fingerprints are similar enough, they must match across the whole length and I can assume that they also must match a specific (smaller) part. So even though the original fingerprints are two minutes long, I decided to search only in the part between 0:10 and 0:25.</p>
<p>The sub-fingerprints that cover these 15 seconds are stored in the <a href="https://github.com/lalinsky/acoustid-index" title="Acoustid Index">Acoustid index</a> database. Whenever I search for a fingerprint, I extract the 15 seconds long sub-fingerprint (&#8220;query&#8221;) and send it to the index server. The server returns a list of matching fingerprint IDs (&#8220;candidates&#8221;). These candidates represents fingerprints that might match the original fingerprint, but to not necessarily have to, because all I know about them is that they matched the extracted 15 seconds long query.</p>
<p>The next step is to take these candidates and compare them against the original fingerprint. This is done in PostgreSQL, where the full fingerprints are stored. Each of the candidates is compared against the original fingerprint using a function that tries to align the two fingerprints and then calculates the bit-error-rate between the overlapping parts. The result of this function is a score between 0 and 1. Fingerprints with the score above a certain threshold are considered valid matches, MusicBrainz metadata is looked up for them, they are returned to the user and that&#8217;s the end of it.</p>
<p>The whole process looks something like this:</p>
<p><a href="http://oxygene.sk/lukas/blog/wp-content/uploads/arch.png"><img class="aligncenter size-full wp-image-1687" title="Acoustid Lookup Process" src="http://oxygene.sk/lukas/blog/wp-content/uploads/arch.png" alt="" width="537" height="291" /></a></p>
<p>This covers the searching side of the server. I&#8217;ll try to write another post soon about the data management side (importing, merging, etc).</p>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/jvfLGiDAhWo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/12/inside-the-acoustid-server/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/12/inside-the-acoustid-server/</feedburner:origLink></item>
		<item>
		<title>AcoustID server release</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/vfxUNNEw-C0/</link>
		<comments>http://oxygene.sk/lukas/2011/11/acoustid-server-release/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 12:21:58 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1639</guid>
		<description><![CDATA[I guess it&#8217;s time for AcoustID to have release notes when something gets released, so here is my first AcoustID server release blog post. Some time ago I added overall search statistics. This release adds similar statistics for individual applications. &#8230; <a href="http://oxygene.sk/lukas/2011/11/acoustid-server-release/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I guess it&#8217;s time for AcoustID to have release notes when something gets released, so here is my first AcoustID server release blog post.</p>
<p>Some time ago I added overall search statistics. This release adds similar statistics for individual applications. For example:</p>
<p><a href="http://oxygene.sk/lukas/blog/wp-content/uploads/acoustid_application_statistics.png"><img class="aligncenter size-medium wp-image-1640" title="Application Statistics" src="http://oxygene.sk/lukas/blog/wp-content/uploads/acoustid_application_statistics-300x267.png" alt="" width="300" height="267" /></a></p>
<p>Of course, these statistics are only available to the owners of the applications.</p>
<p>Another change related to external application support is that the submission API call now accepts a new parameter <code>clientversion</code>. This is the first step to allowing a single application API key to be used by multiple versions of the application. In following releases I&#8217;ll be changing the API key structure to allow applications to have a number of API keys that can be disabled/enabled any time.</p>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/vfxUNNEw-C0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/11/acoustid-server-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/11/acoustid-server-release/</feedburner:origLink></item>
		<item>
		<title>Chromaprint 0.5 released</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/E1umG9ZW2XA/</link>
		<comments>http://oxygene.sk/lukas/2011/10/chromaprint-0-5-released/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 10:31:51 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[chromaprint]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1629</guid>
		<description><![CDATA[A new version of Chromaprint has been released. The code library hasn&#8217;t been changed, but there are some bug fixes in the fpcalc utility and the Python bindings. Download: Source code tarball (530K) Ubuntu packages Static binaries for the fpcalc &#8230; <a href="http://oxygene.sk/lukas/2011/10/chromaprint-0-5-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A new version of Chromaprint has been released. The code library hasn&#8217;t been changed, but there are some bug fixes in the fpcalc utility and the Python bindings.</p>
<p>Download:</p>
<ul>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-0.5.tar.gz">Source code tarball</a> (530K)</li>
<li><a href="https://launchpad.net/~luks/+archive/acoustid">Ubuntu packages</a></li>
<li>Static binaries for the <code>fpcalc</code> tool:
<ul>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.5-win32.zip">Windows, x86</a> (634K)</li>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.5-osx.tar.gz">Mac OS X, x86, 10.4+</a> (524K)</li>
<li><a href="https://github.com/downloads/lalinsky/chromaprint/chromaprint-fpcalc-0.5-linux.tar.gz">Linux, x86</a> (651K)</li>
</ul>
</li>
</ul>
<p>Changes since version 0.4:</p>
<ul>
<li>Unicode command line handling in fpcalc.</li>
<li>Fixed a crash in fpcalc when FFmpeg was not able to identify the codec.</li>
<li>Added encode_fingerprint to the Python bindings.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/E1umG9ZW2XA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/10/chromaprint-0-5-released/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/10/chromaprint-0-5-released/</feedburner:origLink></item>
		<item>
		<title>MusicBrainz/Acoustid integration</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/WuKU7Cp4uTg/</link>
		<comments>http://oxygene.sk/lukas/2011/08/musicbrainz-acoustid-integration/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 13:06:56 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[MusicBrainz]]></category>
		<category><![CDATA[acoustid]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[userscript]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1604</guid>
		<description><![CDATA[Update: As of Jan 12, 2012, Acoustid links are now displayed on MusicBrainz by default. While the Acoustid database is reimporting, I wanted to do something fun, so tried to integrate Acoustid links into the MusicBrainz website. I wrote a &#8230; <a href="http://oxygene.sk/lukas/2011/08/musicbrainz-acoustid-integration/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em><strong>Update: </strong>As of <a href="http://blog.musicbrainz.org/?p=1244">Jan 12, 2012</a>, Acoustid links are now displayed on MusicBrainz by default.</em></p>
<p>While the Acoustid database is reimporting, I wanted to do something fun, so tried to integrate Acoustid links into the MusicBrainz website. I wrote a simple <a href="http://userscripts.org/scripts/show/110183">user script</a> that calls the Acoustid API, loads all IDs linked to a recording and displays the data right next to the list of PUIDs. If you install the script, the &#8220;PUIDs&#8221; page will now look like this:</p>
<p><a href="http://oxygene.sk/lukas/blog/wp-content/uploads/mbacoustid-mb.png"><img class="aligncenter size-medium wp-image-1605" title="MusicBrainz/Acoustid integration" src="http://oxygene.sk/lukas/blog/wp-content/uploads/mbacoustid-mb-300x230.png" alt="" width="300" height="230" /></a></p>
<p>It links back to the Acoustid track pages, which you can see for example <a href="http://acoustid.org/track/c149da2b-91fb-4253-80fe-c9645fe8e92f">here</a>. The database is still very small, so you will probably not see the links too often, but that should get better soon.</p>
<p>The next step, which is probably not going to be this easy, will be adding the &#8220;Remove&#8221; links to the pages also for Acoustid tracks and actually making them work.</p>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/WuKU7Cp4uTg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/08/musicbrainz-acoustid-integration/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/08/musicbrainz-acoustid-integration/</feedburner:origLink></item>
		<item>
		<title>Acoustid database rebuilding</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/7rx-jlJbFPU/</link>
		<comments>http://oxygene.sk/lukas/2011/08/acoustid-database-rebuilding/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 21:07:24 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Acoustid]]></category>
		<category><![CDATA[Announce]]></category>
		<category><![CDATA[acoustid]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1591</guid>
		<description><![CDATA[I&#8217;ve released a new version of the Acoustid server today. This release changes the way fingerprints are matched, so it required the database to be rebuilt, which means all previous &#8220;track IDs&#8221; will be lost. I&#8217;m expecting it will take &#8230; <a href="http://oxygene.sk/lukas/2011/08/acoustid-database-rebuilding/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve released a new version of the Acoustid server today. This release changes the way fingerprints are matched, so it required the database to be rebuilt, which means all previous &#8220;track IDs&#8221; will be lost. I&#8217;m expecting it will take at least a week before the database is back at the full size. This is probably the last rebuild and the IDs will stay stable from now on, but in case I discover some serious problems it might be necessary to do it one more time.</p>
<p>Here is a complete list of changes in this release:</p>
<ul>
<li>Faster and more robust way of comparing fingerprints.</li>
<li>Mapping of fingerprints to PUIDs.</li>
<li>Initial support for storing custom foreign IDs.</li>
<li>Better tracking of the source for each fingerprint and fingerprint<->ID mapping.</li>
<li>Tracks now have UUIDs attached to them, so the default result ID format will change in a future version of the web service.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/7rx-jlJbFPU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/08/acoustid-database-rebuilding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/08/acoustid-database-rebuilding/</feedburner:origLink></item>
		<item>
		<title>My story (as a programmer)</title>
		<link>http://feedproxy.google.com/~r/LukasLalinsky/~3/vJT3LFdtYzc/</link>
		<comments>http://oxygene.sk/lukas/2011/08/my-story-as-a-programmer/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 21:00:09 +0000</pubDate>
		<dc:creator>Lukáš Lalinský</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[bio]]></category>
		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://oxygene.sk/lukas/?p=1554</guid>
		<description><![CDATA[I started writing this as a bit longer bio blurb for the About page, but somehow it got too long before I was even halfway finished, so I decided to edit it a little bit and put it here instead. &#8230; <a href="http://oxygene.sk/lukas/2011/08/my-story-as-a-programmer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I started writing this as a bit longer bio blurb for the <a href="http://oxygene.sk/lukas/about/">About</a> page, but somehow it got too long before I was even halfway finished, so I decided to edit it a little bit and put it here instead. Not the usual stuff I post here, but not many people know how I got into programming and didn&#8217;t have the heart to just delete it. :)</p>
<p>I was introduced to programming as a kid at the elementary school. Seeing that I can use mathematical functions and some funny English words, which I didn&#8217;t understand, to draw circles on the TV pretty much changed my life. I wanted to learn more and more about the BASIC language, but it was more theoretical than practical, because I didn&#8217;t have any computer at home back then. Even though I could only play with a computer at school, I loved reading programming books and learning more about it. A little later I got a computer and spent days and nights learning &#8220;real&#8221; programming in Pascal. While my classmates were having fun outside playing football, I was having fun learning about sorting algorithms and data structures. I didn&#8217;t believe I could actually work at a programmer when I get older, but I very interested in learning more and more anyway.</p>
<p>Several years later I discovered <a href="http://en.wikipedia.org/wiki/Demoscene">demoscene</a>, which brought my programming experience to the next level. I was never able to make my own demo, but I found it fascinating to hack on multimedia software, especially in environment like MS DOS which was not multimedia-friendly at all. I spent a huge amount of time learning how you can make a computer produce sound, how module players worked, even experimented with making my own <a href="http://en.wikipedia.org/wiki/Tracker_(music_software)">tracker</a>. This was also the time when I had to leave Pascal and (painfully) start looking into C and even some x86 assembler. I made some <a href="http://pouet.net/groups.php?which=2403">256b intros</a> &#8212; they aren&#8217;t any interesting, but I was very proud of myself back then. :)</p>
<p>The next breakthrough happened when I found MS DOS too limiting and installed Debian on the 386 machine I had. This brought me to the world of open source software, where I could take a look the code of every application that I used. Programming on a real operating system that didn&#8217;t allow me to just write to any memory address and reset/freeze the computer by doing that was a great change too. :) Of course, I was still interested by music software, so I starter learning Linux programming by porting the <a href="http://www.cubic.org/sources.html">MXMplay</a> module player (and later<a href="http://www.fmod.org/index.php/download#FMODMini">MiniFMOD</a>) to Linux.</p>
<p>The next period was pretty boring. I learned a few things about making websites, enrolled at university and needed money, so I started working as a PHP programmer. I wasn&#8217;t very good at it, but I quickly learned what I needed to know. This went for a few years, I was working on various kinds of websites, writing content management systems, creating modules for eCommerce systems. I got pretty good at it at the end, so web technologies ended up being the main focus of my professional career. I learned Python and some other languages and programming for me generally started being more about work and less about fun.</p>
<p>This changed when I discovered <a href="http://musicbrainz.org/">MusicBrainz</a>. At first I only wanted to tag my files to get better stats on <a href="http://www.audioscrobbler.net/">Audioscrobbler</a>, but I realized that it&#8217;s an open source project I can contribute to, and it&#8217;s about web stuff <em>AND</em> music. I submitted a few smaller patches for the MusicBrainz server, then I was unhappy with the tagger application and started helping with <a href="http://musicbrainz.org/doc/MusicBrainz_Picard">Picard</a>. Eventually I ended up maintaining Picard, which brought me to many other music-related open source projects. Since then, I probably touched the code of every component that MusicBrainz ever used. I worked on the client libraries, learned Perl to work more on the server, introduced many database schema changes, did some coding on the Java version of the search server. Heck, I even designed the graphic layout MusicBrainz is currently using. :)</p>
<p>After I finished the university and switched jobs, I didn&#8217;t have that much time for open source projects. I disappeared from MusicBrainz for some time, focused more on my career where I was working on larger and larger projects. I needed something fun to work on though and that&#8217;s basically when I started looking into audio fingerprinting and how the <a href="http://acoustid.org/">Acoustid</a> project was born. It was something new and challenging and yet something that was needed. After a few months of reading papers, I started writing some code, got &#8220;good enough&#8221; results, wrote more code and that&#8217;s basically where I&#8217;m today. </p>
<p>During the last two years I started realizing that the web programming I do at work is probably not what I want to continue doing, at least not full-time, so this is actually the last month at my current job. I&#8217;ll have to deal with some health issues, then take a longer vacation and we will see what happens next&#8230; :)</p>
<img src="http://feeds.feedburner.com/~r/LukasLalinsky/~4/vJT3LFdtYzc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://oxygene.sk/lukas/2011/08/my-story-as-a-programmer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://oxygene.sk/lukas/2011/08/my-story-as-a-programmer/</feedburner:origLink></item>
	</channel>
</rss>

