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

<channel>
	<title>Sredzkistraße &#187; Computers</title>
	<atom:link href="http://ventolin.org/category/computers/feed/" rel="self" type="application/rss+xml" />
	<link>http://ventolin.org</link>
	<description></description>
	<lastBuildDate>Tue, 28 Feb 2012 16:52:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Albumart Replacer</title>
		<link>http://ventolin.org/2012/02/albumart-replacer/</link>
		<comments>http://ventolin.org/2012/02/albumart-replacer/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 17:33:53 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=829</guid>
		<description><![CDATA[The Albumart Replacer is a little script I wrote to automatically find higher-resolution copies of album covers. For listening to music, I use foobar2000 and although the wonderful foo_discogs automatically adds album art to my music, sometimes the artwork on discogs.com isn&#8217;t the best. Enter Albumart Replacer. If I&#8217;m listening to music and I notice the [...]]]></description>
			<content:encoded><![CDATA[<p>The Albumart Replacer is a little script I wrote to automatically find higher-resolution copies of album covers. For listening to music, I use <a href="http://www.foobar2000.org" target="_blank">foobar2000</a> and although the wonderful <a href="http://www.foobar2000.org/components/view/foo_discogs" target="_blank">foo_discogs</a> automatically adds album art to my music, sometimes the artwork on discogs.com isn&#8217;t the best.</p>
<p>Enter Albumart Replacer. If I&#8217;m listening to music and I notice the album art isn&#8217;t up to scratch, e.g.:</p>
<p style="text-align: center;"><a href="http://ventolin.org/wp-content/uploads/2012/02/before.png"><img class="aligncenter  wp-image-831" title="before" src="http://ventolin.org/wp-content/uploads/2012/02/before.png" alt="" /></a></p>
<p>I simply run the script, it sends the image&#8217;s data to tineye.com, and if any higher-resolution copies of the same image are found, it&#8217;ll grab the best quality one:</p>
<p><a href="http://ventolin.org/wp-content/uploads/2012/02/after.png"><img class="aligncenter size-full wp-image-832" title="after" src="http://ventolin.org/wp-content/uploads/2012/02/after.png" alt="" width="515" height="394" /></a></p>
<p>This is all done without any user interaction. Using <a href="http://www.foobar2000.org/components/view/foo_run" target="_blank">foo_run</a>, it&#8217;s easy to set up a keybinding in foobar2000 so that it just takes one key press (simply pass the script a song&#8217;s %PATH% variable from foobar and it&#8217;ll do the rest.)</p>
<p><strong>Source code, downloads and further details are <a href="https://bitbucket.org/ventolin/albumart_replacer" target="_blank">available at the bitbucket repository</a>.</strong></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2012/02/albumart-replacer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>@grammer_man who the fuck is this nigga and why u comin at me like that #Hoeassnigga</title>
		<link>http://ventolin.org/2012/01/grammer_man-who-the-fuck-is-this-nigga-and-why-u-comin-at-me-like-that-hoeassnigga/</link>
		<comments>http://ventolin.org/2012/01/grammer_man-who-the-fuck-is-this-nigga-and-why-u-comin-at-me-like-that-hoeassnigga/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 19:06:27 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[Idiots]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Oddities]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=761</guid>
		<description><![CDATA[Had a spare hour last Thursday and decided to write a little twitter bot. There he is above. His name is Grammer_Man and he corrects other twitter users&#8217; misspellings, using data scraped from these Wikipedia pages. Responses have been pouring in already, some agitated, some confused, but most positive &#8212; which was a pleasant surprise. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="grammer_man" src="http://ventolin.org/wp-content/uploads/2012/01/grammer_man.png" alt="" width="267" height="265" /></p>
<p>Had a spare hour last Thursday and decided to write a little twitter bot. There he is above. His name is <a href="http://twitter.com/Grammer_Man" target="_blank">Grammer_Man</a> and he corrects other twitter users&#8217; misspellings, using data scraped from <a href="http://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings" target="_blank">these Wikipedia pages</a>.</p>
<p>Responses have been pouring in already, <a href="https://twitter.com/#!/ExtendedClips/status/156084096068620289" target="_blank">some</a> <a href="https://twitter.com/#!/tje/status/156161642231627776" target="_blank">agitated</a>, <a href="https://twitter.com/#!/utsprod/status/156058379406680065" target="_blank">some</a> <a href="https://twitter.com/#!/1D_4_infinity/status/156000680514035712" target="_blank">confused</a>, <a href="https://twitter.com/#!/nepaliScouser/status/156002421116633089" target="_blank">but</a> <a href="https://twitter.com/#!/JStadt7/status/156041154385805312" target="_blank">most</a> <a href="https://twitter.com/#!/indiglodoe/status/155828901820628992" target="_blank">positive</a> &#8212; which was a pleasant surprise. In any event, the minimal amount of effort in coding has paid off many times over in entertainment. </p>
<p><b>You can see who&#8217;s responding at the moment by <a href="https://twitter.com/#!/search/realtime/%40grammer_man" target="_blank">searching for @grammer_man</a>, and also by checking <a href="https://twitter.com/#!/grammer_man/favorites" target="_blank">his list of favourites</a>.</b></p>
<p>Here is the (somewhat slapdash) code that powers our fearless spelling Nazi:</p>
<h3>grabber.py</h3>
<p>This module grabs the spelling data from Wikipedia.</p>
<p></p><pre class="crayon-plain-tag">#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import pickle

import requests
from BeautifulSoup import BeautifulSoup

def grab(letter):
    '''
    Grabs spellings from wikipedia
    '''
    url = 'http://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/%s' % letter
    html = requests.get(url).content
    soup = BeautifulSoup(html)
    bullets = soup.findAll('li')
    retval = {}
    for bullet in bullets:
        if 'plainlinks' in repr(bullet):
            values = bullet.text.split('(')
            if len(values) == 2:
                retval[values[0]] = values[1][:-1] # shave off the ) at end
    return retval

def get_spellings():
    '''
    Returns a dictionary of {false: correct} spellings
    '''
    if not os.path.exists('words.pkl'):
        retval = {}
        for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
            print 'Getting typos - %s' % c
            retval.update(grab(c))
        print 'Dumping...'
        f = open('words.pkl', 'w')
        pickle.dump(retval, f)
        f.close()
        return retval
    else:
        f = open('words.pkl', 'r')
        retval = pickle.load(f)
        f.close()
        return retval
    
if __name__ == '__main__':
    get_spellings()</pre><p></p>
<h3>bot.py</h3>
<p>The bot. Selects misspellings at random, searches for them, responds to them, while also taking breaks between tweets and longer breaks every few hours.</p>
<p></p><pre class="crayon-plain-tag">#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import random
import time
import pickle

import twitter

from grabber import get_spellings

API = twitter.Api(consumer_key='XXX',
                  consumer_secret='XXX',
                  access_token_key='XXX',
                  access_token_secret='XXX')

MESSAGES = u'''
$USERNAME sooo you might wanna spell $CORRECT the right way next time!! Not your fault bro.
#
# All messages stored in here, one per line. 
# Edited out in order to save space in this blog post.
#
'''.split('\n')

def compose_message(twitter_post, mistake, correct):
    '''
    Choose a message from MESSAGES at random, substitute fields to personalise it and 
    check if it exceeds the twitter message limit. Try this 100 times before failing.
    '''
    retries = 0
    while retries &lt; 100:
        retries += 1
        message = MESSAGES[random.randint(0, len(MESSAGES) - 1)]
        message = message.replace('$USERNAME', '@%s' % twitter_post.user.screen_name)
        message = message.replace('$MISTAKE', '&quot;%s&quot;' % mistake).replace('$CORRECT', '&quot;%s&quot;' % correct)
        if message and len(message) &lt; 141:
            return message
    return None

def correct_spelling(twitter_post, mistake, correct):
    '''
    Correct someone's spelling in a twitter_post
    '''
    print u'Correcting @%s for using %s...' %(twitter_post.user.screen_name,
                                            mistake)
    message = compose_message(twitter_post, mistake, correct)
    if not message:
        print u'All messages were too long... Aborting...'
        return None
    else:
        API.PostUpdate(message, in_reply_to_status_id=twitter_post.id)
        return True

def search(word):
    '''
    Search twitter for uses of a word, return one if it's been used recently.
    Otherwise return None.
    
    TODO: Add time awareness.
    '''
    print 'Searching for uses of %s...' % word
    results = API.GetSearch(word)
    if results:
        for result in results:
            if not check_if_done(result.id) and not result.user.screen_name == 'grammer_man' and word in result.text:
                return result
    return None

def check_if_done(id):
    '''
    Checks if a tweet has already been responded to
    '''
    if os.path.exists('done.pkl'):
        f = open('done.pkl', 'r')
        done = pickle.load(f)
        f.close()
        if id in done:
            return True
    return False

def update_done(id):
    '''
    Updates a list of tweets that've been replied to
    '''
    if os.path.exists('done.pkl'):
        f = open('done.pkl', 'r')
        done = pickle.load(f)
        f.close()
    else:
        done = []

    done.append(id)

    f = open('done.pkl', 'w')
    pickle.dump(done, f)
    f.close()

def main():
    '''
    Main program flow
    '''
    words = get_spellings()
    counter = 0
    while True:
        word = random.choice(words.keys())
        post = search(word)
        if counter &gt; 100:
            rand_time = random.randint(120*60, 240*60)
            print 'Done %s tweets, sleeping for %s minutes' % (counter, rand_time/60)
            time.sleep(rand_time)
            counter = 0
        # TODO: PROPERLY PRUNE THE MISTAKES/CORRECTIONS FROM WIKIPEDIA AND REMOVE THIS:
        if not u',' in word + words[word] and not u';' in word + words[word]:
            if post:
                result = correct_spelling(post, word, words[word])
                if result:
                    counter += 1
                    print '#%s Done' % counter
                    update_done(post.id)
                    time.sleep(random.randint(300,500))


if __name__ == '__main__':
    main()</pre><p></p>
<p>Grammer_Man uses the following libraries:</p>
<ul>
<li><a href="http://code.google.com/p/python-twitter/" target="_blank">python-twitter</a> (<B>Be warned: no proxy support</b>)</li>
<li><a href="http://docs.python-requests.org/en/latest/index.html" target="_blank">requests</a></li>
<li><a href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2012/01/grammer_man-who-the-fuck-is-this-nigga-and-why-u-comin-at-me-like-that-hoeassnigga/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>bigpicture Cataloguer 0.5 Released</title>
		<link>http://ventolin.org/2011/01/bigpicture-cataloguer-0-5-released/</link>
		<comments>http://ventolin.org/2011/01/bigpicture-cataloguer-0-5-released/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 19:49:52 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Computers]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=678</guid>
		<description><![CDATA[Mainly a bug-fix release, with problems relating to HTML in captions fixed. If you already downloaded the &#8220;Haiti: One Year Later&#8221; photo album, you might want to delete it and run this version of the cataloguer. Download available here.]]></description>
			<content:encoded><![CDATA[<p>Mainly a bug-fix release, with problems relating to HTML in captions fixed.</p>
<p>If you already downloaded the &#8220;<a href="http://www.boston.com/bigpicture/2011/01/haiti_one_year_later.html" target="_blank">Haiti: One Year Later</a>&#8221; photo album, you might want to delete it and run this version of the cataloguer.</p>
<p>Download available <a href="http://ventolin.org/code/bigpicture-cataloguer" target="_self">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2011/01/bigpicture-cataloguer-0-5-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bigpicture Cataloguer 0.4 Released</title>
		<link>http://ventolin.org/2010/10/bigpicture-cataloguer-0-4-released/</link>
		<comments>http://ventolin.org/2010/10/bigpicture-cataloguer-0-4-released/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 10:19:06 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=638</guid>
		<description><![CDATA[New version of The Big Picture Cataloguer available from here. Thanks for your patience; sorry it took so long.]]></description>
			<content:encoded><![CDATA[<p>New version of The Big Picture Cataloguer available from <a href="http://ventolin.org/code/bigpicture-cataloguer" target="_self">here</a>. Thanks for your patience; sorry it took so long.</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/10/bigpicture-cataloguer-0-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Critical Bug in bigpicture Cataloguer</title>
		<link>http://ventolin.org/2010/09/critical-bug-in-bigpicture-cataloguer/</link>
		<comments>http://ventolin.org/2010/09/critical-bug-in-bigpicture-cataloguer/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 18:24:23 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=629</guid>
		<description><![CDATA[Update: Version 0.4 now released. Please upgrade immediately. I&#8217;m aware of and have fixed a critical bug in the Big Picture cataloguer. The cataloguer stops downloading when it reaches a recent photo album, since its title ends with a full stop. I moved recently and unfortunately my main computer was destroyed in the process. With [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong><a href="http://ventolin.org/code/bigpicture-cataloguer" target="_self"><span style="color: #ff0000;">Update: Version 0.4 now released. Please upgrade immediately.</span></a></strong></span></p>
<p>I&#8217;m aware of and have fixed a critical bug in the <a href="http://ventolin.org/code/bigpicture-cataloguer">Big Picture cataloguer</a>. The cataloguer stops downloading when it reaches a recent photo album, since its title ends with a full stop.</p>
<p>I moved recently and unfortunately my main computer was destroyed in the process. With it went my proper development environment.</p>
<p>This means I&#8217;ll not be able to update the executable versions of the cataloguer for perhaps a week, but in the meantime, a new version of the script is up.</p>
<p>If you are encountering this bug, please check back next week for an updated version of the executables. The program will resume where it left off; you will not have lost the chance to get any galleries.</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/09/critical-bug-in-bigpicture-cataloguer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Videogame Music Preservation Foundation</title>
		<link>http://ventolin.org/2010/08/the-videogame-music-preservation-foundation/</link>
		<comments>http://ventolin.org/2010/08/the-videogame-music-preservation-foundation/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 17:24:52 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Computer Games]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Electronic]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=626</guid>
		<description><![CDATA[A friend came across this website a few weeks ago, and I was very excited about it &#8211; an archive of plenty of video game music (mainly for DOS, which is what I grew up with), all recorded properly in order to maximise the nostalgia, and made available in ogg format. I contacted the guy [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://boxofjunk.ws/" target="_blank">A friend</a> came across this website a few weeks ago, and I was very excited about it &#8211; an archive of plenty of video game music (mainly for DOS, which is what I grew up with), all recorded properly in order to maximise the nostalgia, and made available in ogg format.</p>
<p>I contacted the guy who runs it about setting up a torrent of the entire archive, and he very kindly obliged. You can <a href="http://vgmpf.com/Blog.php?Id=279" target="_blank">get the entire collection here</a> (~4.4GB in total). Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/08/the-videogame-music-preservation-foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why the future doesn&#8217;t need us.</title>
		<link>http://ventolin.org/2010/07/why-the-future-doesnt-need-us/</link>
		<comments>http://ventolin.org/2010/07/why-the-future-doesnt-need-us/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 00:21:52 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[Science]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=614</guid>
		<description><![CDATA[I finally managed to get around to reading Bill Joy&#8217;s article Why the future doesn&#8217;t need us the other day while waiting to board a plane. Bill Joy is a renowned computer scientist who co-founded Sun Microsystems and authored the popular UNIX text editor vi. The article is concerned with the ever increasing speed of [...]]]></description>
			<content:encoded><![CDATA[<p>I finally managed to get around to reading Bill Joy&#8217;s article <a href="http://www.wired.com/wired/archive/8.04/joy_pr.html" target="_blank"><em>Why the future doesn&#8217;t need us</em></a> the other day while waiting to board a plane. Bill Joy is a renowned computer scientist who co-founded Sun Microsystems and authored the popular UNIX text editor vi. The article is concerned with the ever increasing speed of &#8220;progress&#8221; in fields of new technology (primarily robotics, nanotechnology and genetic engineering) which Joy views with apprehension, arguing that the products of these fields will eventually render mankind obsolete and lead to our self-destruction.</p>
<p>There&#8217;s no point trying to quote it, so instead you can read the article <a href="http://www.wired.com/wired/archive/8.04/joy_pr.html" target="_blank">here</a>, read more about Bill Joy <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Bill_Joy" target="_blank">here</a>, or read responses and criticism of the article <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Why_the_future_doesn%27t_need_us" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/07/why-the-future-doesnt-need-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rise of the Robots</title>
		<link>http://ventolin.org/2010/06/rise-of-the-robots/</link>
		<comments>http://ventolin.org/2010/06/rise-of-the-robots/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 01:58:06 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[America]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[War]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=525</guid>
		<description><![CDATA[A good, short blog post from the wonderful ginandtacos blog on the increasing prevalence of unmanned vehicles in war, ending with a very sobering thought: Won&#8217;t it be great when the military can send in the tanks without having to put crews in harm&#8217;s way? Yes and no. The fewer casualties, the better. But what [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ginandtacos.com/2010/06/02/checks-and-balances/" target="_blank">A good, short blog post</a> from the wonderful ginandtacos blog on the increasing prevalence of unmanned vehicles in war, ending with a very sobering thought:</p>
<blockquote><p>Won&#8217;t it be great when the military can send in the tanks without  having to put crews in harm&#8217;s way?</p>
<p>Yes and no. The fewer casualties, the better. But what becomes of our  reluctance to send the military galavanting around the sordid parts of  the world once American casualties are taken out of the equation? We  have almost no restraint as it is. I shudder to think of how easily  Presidents and legislators will make the decision to go to war when the  attitude of &#8220;We can just send robots to do it!&#8221; becomes entrenched. We  saw what the advancements in design of cruise missiles in the 1980s did  to the Executive Branch; if someone&#8217;s acting up, just lob a dozen  Tomahawks at them from a few hundred miles away. It became the easy way  to intervene without actually making a commitment or putting Americans  at risk. Collateral damage isn&#8217;t much of a deterrent to our political  class. UAVs are another step in that direction, a step toward a future  with more remotely operated and even autonomous means of doing the dirty  work.</p>
<p>It&#8217;s great that technology allows more American soldiers to come home  alive and in one piece, but if we remove the U.S. body count from the  decision-making process the only restraints on waging war will be common  sense, morality, and logic. Yeah, let&#8217;s start taking bets on how well  that works.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/06/rise-of-the-robots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tricks with python and music</title>
		<link>http://ventolin.org/2010/05/tricks-with-python-and-music/</link>
		<comments>http://ventolin.org/2010/05/tricks-with-python-and-music/#comments</comments>
		<pubDate>Sat, 22 May 2010 16:30:09 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Generative Music]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Music theory]]></category>
		<category><![CDATA[Oddities]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=447</guid>
		<description><![CDATA[From Music Machinery: One of my favorite hacks at last weekend’s Music Hack Day is Tristan’s Swinger.  The Swinger is a bit of python code that takes any song and makes it swing.  It does this be taking each beat and time-stretching the first half of each beat while time-shrinking the second half.  It has [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://musicmachinery.com/2010/05/21/the-swinger/" target="_blank">Music Machinery</a>:</p>
<blockquote><p>One of my favorite hacks at last weekend’s <a href="http://sf.musichackday.org/">Music Hack Day</a> is <a href="http://web.media.mit.edu/%7Etristan/">Tristan’s</a> Swinger.  The  Swinger is a bit of python code that takes any song and makes it swing.   It does this be taking each beat and time-stretching the first half of  each beat while time-shrinking the second half.  It has quite a magical  effect.  Some examples:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="81" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowscriptaccess" value="always" /><param name="src" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fteejay%2Fevery-breath-you-take-swing-version&amp;&amp;color=ff7700" /><embed type="application/x-shockwave-flash" width="100%" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fteejay%2Fevery-breath-you-take-swing-version&amp;&amp;color=ff7700" allowscriptaccess="always"></embed></object><span><a href="http://soundcloud.com/teejay/every-breath-you-take-swing-version">Every Breath You Take (swing version)</a> by <a href="http://soundcloud.com/teejay">TeeJay</a></span></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="81" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowscriptaccess" value="always" /><param name="src" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fplamere%2Fsweet-child-o-mine-swing-version&amp;&amp;color=ff7700" /><embed type="application/x-shockwave-flash" width="100%" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fplamere%2Fsweet-child-o-mine-swing-version&amp;&amp;color=ff7700" allowscriptaccess="always"></embed></object><span><a href="http://soundcloud.com/plamere/sweet-child-o-mine-swing-version">Sweet Child O&#8217; Mine (Swing Version)</a> by <a href="http://soundcloud.com/plamere">plamere</a></span></p></blockquote>
<p><span>You can find more examples in <a href="http://musicmachinery.com/2010/05/21/the-swinger/" target="_blank">the original blog post</a>. The results really are truly impressive. I&#8217;m looking forward to playing with <a href="http://web.media.mit.edu/~tristan/" target="_blank">Tristan Jehan</a>&#8216;s <a href="http://code.google.com/p/echo-nest-remix/source/browse/trunk/examples/swinger/swinger.py">code</a>, and also having a look at his <a href="http://web.media.mit.edu/~tristan/phd/" target="_blank">PhD thesis</a>:</span></p>
<blockquote><p>Machines have the power and potential to make expressive music on their  own. This thesis aims to computationally model the process of creating music using experience from listening to examples. Our unbiased signal-based  solution models the life cycle of listening, composing, and performing, turning the  machine into an active musician, instead of simply an instrument. We accomplish this through an analysis-synthesis technique by combined perceptual and structural modeling of the musical surface, which leads to a minimal  data representation.</p></blockquote>
<p>Fascinating stuff!</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/05/tricks-with-python-and-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Picture Cataloguer: An update</title>
		<link>http://ventolin.org/2010/05/big-picture-cataloguer-an-update/</link>
		<comments>http://ventolin.org/2010/05/big-picture-cataloguer-an-update/#comments</comments>
		<pubDate>Thu, 20 May 2010 19:11:54 +0000</pubDate>
		<dc:creator>aengus</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://ventolin.org/?p=438</guid>
		<description><![CDATA[In just over a week since I released the Big Picture Cataloguer, there&#8217;s been a surprising amount of interest and enthusiasm about it. Since I still haven&#8217;t gotten binary versions of the program for OS X and Linux up (I&#8217;ve no access to an OS X computer, and getting the required libraries installed on Linux [...]]]></description>
			<content:encoded><![CDATA[<p>In just over a week since I released the Big Picture Cataloguer, there&#8217;s been a surprising amount of interest and enthusiasm about it. Since I still haven&#8217;t gotten binary versions of the program for OS X and Linux up (I&#8217;ve no access to an OS X computer, and getting the required libraries installed on Linux has proved to be quite difficult), I&#8217;ve decided to relent and share the source code of the cataloguer under <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/uk/" target="_blank">a Creative Commons license</a>.</p>
<p>The script makes use of <a href="http://tilloy.net/dev/pyexiv2/" target="_blank">pyexiv2</a> &#8211; the 0.2 branch &#8211; for metadata editing, <a href="http://wwwsearch.sourceforge.net/mechanize/" target="_blank">mechanize</a> for grabbing pages and submitting error reports, the very handy <a href="http://effbot.org/zone/unicode-convert.htm" target="_blank">unaccented_map() class</a> (included) for unicode trickery and of course the wonderful XML parser, <a href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a>.</p>
<p>Naturally, it&#8217;s available from the <a href="http://ventolin.org/code/bigpicture-cataloguer" target="_blank">Big Picture Cataloguer&#8217;s page</a> in the Code section of this site.</p>
<p>Given how much The Big Picture galleries&#8217; HTML format has subtly changed over time, and the fact I wrote this in a rush, it&#8217;s quite messy, but it does the job.</p>
<p>Today&#8217;s update is of version 0.3, which has an optional &#8220;quiet mode&#8221; to enable users to schedule the program to run frequently. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://ventolin.org/2010/05/big-picture-cataloguer-an-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

