<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2565096303085504351</id><updated>2012-02-16T20:31:43.796-08:00</updated><category term='Python'/><category term='Mutagen'/><title type='text'>uctui is a collection tool user interface</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Patrick Stetter</name><uri>http://www.blogger.com/profile/02966541585599087494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-6270542045639958260</id><published>2010-05-05T11:41:00.001-07:00</published><updated>2010-05-05T11:46:30.131-07:00</updated><title type='text'>The Plotter makes posters Hard</title><content type='html'>Pat and I have been trying to get the GIMP to print to the plotter for the last couple of days, and it's been really irritating.  Apparently, the GIMP has problems printing on Windows platforms.  This makes it difficult to use the computers that are in the VCC to print, as printing with Windows causes the poster to be quite tiny, and the Solaris boxes are just terrible.  We tried a number of possible ways to get it to enlarge for printing, with no luck.  The only print that we got to take up the correct amount of space only printed maybe 3 inches before it failed.&lt;br /&gt;&lt;br /&gt;tl;dr - The plotter makes posters Hard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-6270542045639958260?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/6270542045639958260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/05/plotter-makes-posters-hard.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/6270542045639958260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/6270542045639958260'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/05/plotter-makes-posters-hard.html' title='The Plotter makes posters Hard'/><author><name>Corey McClymonds</name><uri>http://www.blogger.com/profile/05297585275388058635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-3803005363750521806</id><published>2010-04-28T11:13:00.000-07:00</published><updated>2010-04-28T11:16:58.602-07:00</updated><title type='text'>Presentation #2</title><content type='html'>Here is our second presentation of uctui for RCOS.  It was uploaded to our google code site and is available at &lt;a href="http://uctui.googlecode.com/files/RCOSs10-2.pdf"&gt;http://uctui.googlecode.com/files/RCOSs10-2.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-3803005363750521806?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/3803005363750521806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/04/presentation-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/3803005363750521806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/3803005363750521806'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/04/presentation-2.html' title='Presentation #2'/><author><name>Corey McClymonds</name><uri>http://www.blogger.com/profile/05297585275388058635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-7008660492704625756</id><published>2010-04-16T20:46:00.000-07:00</published><updated>2010-04-16T20:54:04.396-07:00</updated><title type='text'>No python chart libraries you say!</title><content type='html'>So we've been on the hunt for decent graphing/charting libraries for use with python and pygtk.  We were about to resign ourselves to the overly powerful and 'SCIENCE' looking matplotlib when I realized what I should have done all along. I hopped over to github and browsed through some python applications that use graphs and charts.  I found PyCha which looks like exactly what we want:&lt;br /&gt;&lt;br /&gt;Python Bindings&lt;br /&gt;Simple&lt;br /&gt;Pretty&lt;br /&gt;LGPL&lt;br /&gt;&lt;br /&gt;Thank you open source.  Who said code isn't valuable just for reading :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-7008660492704625756?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/7008660492704625756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/04/no-python-chart-libraries-you-say.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/7008660492704625756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/7008660492704625756'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/04/no-python-chart-libraries-you-say.html' title='No python chart libraries you say!'/><author><name>Patrick Stetter</name><uri>http://www.blogger.com/profile/02966541585599087494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-5861046339802476085</id><published>2010-03-28T10:11:00.000-07:00</published><updated>2010-03-28T10:37:37.450-07:00</updated><title type='text'>Fast path walking: taking a page from MPD</title><content type='html'>Uctui needs to maintain an internal listing of all of the music a user has so that it can upload this information to MusicBrainz and give you feedback on it; however, parsing large nested directories, like music directories, is a taxing operation.  Especially since uctui needs to read the metadata from the beginning of each of these files.&lt;br /&gt;&lt;br /&gt;It had become unacceptable for us to run this walk operation on each invocation of uctui.  Following the lead of MPD (music player daemon), a program with a similar problem, we needed to serialize and output our internal state and load this at the beginning of each run.  Enter pickle, python's serialization class.&lt;br /&gt;&lt;br /&gt;This is was not the only issue.  While we now can recover our state from our last run, what happens if the user added new files or updated others?  Without proper strategy we are back where we started - reading the metadata from all the files in the music directory.  To avoid this we have modified our internal state we keep on the music directory to be a dictionary of form:&lt;br /&gt;&lt;br /&gt;path--&gt;(mtime, mdata)&lt;br /&gt;&lt;br /&gt;We use paths as keys (I know, inodes would probably be preferred, but for now we're not handling symlinks and I can't think of any other reason not to use paths) which allow us to do quick (this is a hash table) lookups to compare if we have seen this file before.  If we have seen it before it would still be too costly to blindly read the metadata, so taking a page from MPD, we compare the mtime with the one we have stored in the tuple in our dictionary and if they differ than we have no choice but to read the metadata as this implies the file has been modified.&lt;br /&gt;&lt;br /&gt;By using this strategy, we have achieved update times that compare favorably to MPD - initial scans have to parse every file in the tree, additional scans quickly scan the tree for changes and parse only changed/new files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-5861046339802476085?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/5861046339802476085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/03/fast-path-walking-taking-page-from-mpd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/5861046339802476085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/5861046339802476085'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/03/fast-path-walking-taking-page-from-mpd.html' title='Fast path walking: taking a page from MPD'/><author><name>Patrick Stetter</name><uri>http://www.blogger.com/profile/02966541585599087494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-2378000680645181068</id><published>2010-02-26T13:41:00.001-08:00</published><updated>2010-03-01T20:49:05.710-08:00</updated><title type='text'>RCOS Presentation</title><content type='html'>Our first RCOS presentation is available on our &lt;a href="http://uctui.googlecode.com/files/RCOS%20Presentation1.odp"&gt;google code page&lt;/a&gt;.  I've also uploaded it in &lt;a href="http://uctui.googlecode.com/files/RCOS%20Presentation1.pdf"&gt;PDF format&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-2378000680645181068?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/2378000680645181068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/rcos-presentation.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/2378000680645181068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/2378000680645181068'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/rcos-presentation.html' title='RCOS Presentation'/><author><name>Patrick Stetter</name><uri>http://www.blogger.com/profile/02966541585599087494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-6054450290248309298</id><published>2010-02-20T16:46:00.001-08:00</published><updated>2010-02-20T17:00:09.880-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mutagen'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Mutagen has a well thought out API</title><content type='html'>So I was working on how uctui was going to be able to read all the different kinds of metadata that a standard music library contained. As far as metadata reading in python, I knew about Mutagen, notably as it's used by &lt;a href="http://musicbrainz.org/doc/PicardTagger"&gt;Picard&lt;/a&gt; to do it's tagging.  So I started learning about Mutagen and found that it was quite capable for doing each of the individual file formats metadata quite nicely.  So my next problem was getting a function together that would be able to determine which file format was currently being used and then call the proper function on the file to retrieve the metadata. As it turns out, Mutagen itself has an API for this, and already does this.  Lastly, I thought I was going to have to get a mapping for each individual metadata format and then unify it into a common format that I could then edit easily.  Mutagen has, in the previous file determining function, provided an option that causes the dictionary it returns to be interchangeable no matter what the file, makes it trivial to write a wrapper for use in uctui.  Long story short, Mutagen makes it very easy to retrieve and edit metadata on music formats.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-6054450290248309298?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/6054450290248309298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/mutagen-has-well-thought-out-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/6054450290248309298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/6054450290248309298'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/mutagen-has-well-thought-out-api.html' title='Mutagen has a well thought out API'/><author><name>Corey McClymonds</name><uri>http://www.blogger.com/profile/05297585275388058635</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-2033121032872415000</id><published>2010-02-20T14:34:00.000-08:00</published><updated>2010-02-20T17:28:36.412-08:00</updated><title type='text'>Inception</title><content type='html'>Introducing uctui.  Uctui is a collection tool user interface.  Uctui will serve to fill a niche in music collection management.  If you've ever used &lt;a href="http://musicbrainz.org/doc/PicardTagger"&gt;Picard&lt;/a&gt; (and if you haven't, I really recommend you do), you'll understand the value in tools to help manage music libraries.  Picard helps to automate the process of tagging and organizing digital music albums by matching your albums with releases on a central database (MusicBrainz).  It also embeds a tag in all the music files that corresponds to the MusicBrainz release it's a part of.&lt;br /&gt;&lt;br /&gt;Uctui will allow users to manage a music collection that has been tagged with these MusicBrainz release numbers.  It will also the user to submit their collection to MusicBrainz where they can get updates when artists they own make new releases or network with others of similar music tastes.  Think last.fm (or libre.fm ;) ), but with a one-to-one correspondence with the music you have, and in the vain of keep your collection organized and up to date.  Uctui will also contain tools to inform you if you are missing tracks from any releases you have, and other information to keep your collection maintained.  It will also be able to run as a daemon from the command line (think nightly cron-jobs).&lt;br /&gt;&lt;br /&gt;After agreeing on a structure for how the program would work, today it was time to get our hands dirty with some code.  This is my first major venture with Python, and it was scary how fast you can throw together a command line argument parser using optParse.  I also put some work into interfacing with our settings file.  Finally, I've got a skeleton GUI with pyGTK that will hopefully inspire more design work on the GUI front.&lt;br /&gt;&lt;br /&gt;Corey has been working on a library to sit on top of mutagen for us to interface with arbitrary music files (flac, mp3, ogg...) in a consistent manner and access the MusicBrainz information from them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-2033121032872415000?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/2033121032872415000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/inception.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/2033121032872415000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/2033121032872415000'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/inception.html' title='Inception'/><author><name>Patrick Stetter</name><uri>http://www.blogger.com/profile/02966541585599087494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2565096303085504351.post-5398897983587034346</id><published>2010-02-16T15:41:00.000-08:00</published><updated>2010-02-16T15:43:08.091-08:00</updated><title type='text'>It begins!</title><content type='html'>A big thanks to Mr. &lt;span class="il"&gt;Sean&lt;/span&gt; O' Sullivan for making this all possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2565096303085504351-5398897983587034346?l=uctui-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uctui-dev.blogspot.com/feeds/5398897983587034346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/it-begins.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/5398897983587034346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2565096303085504351/posts/default/5398897983587034346'/><link rel='alternate' type='text/html' href='http://uctui-dev.blogspot.com/2010/02/it-begins.html' title='It begins!'/><author><name>Patrick Stetter</name><uri>http://www.blogger.com/profile/02966541585599087494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
