<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;A0cHQH45eyp7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-5962267631056793619</id><updated>2012-02-16T14:30:31.023+01:00</updated><category term="Python" /><category term="MP3" /><category term="jQuery" /><category term="iPhone" /><category term="iTunes" /><category term="Java" /><category term="Chrome" /><category term="Android" /><category term="Eclipse" /><title>Mike's Blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.michael-forster.de/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.michael-forster.de/" /><author><name>Michael Forster</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-oXinbUECVGU/AAAAAAAAAAI/AAAAAAAAADI/XKoY9btEQDs/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/michael-forster" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="michael-forster" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ak8CSXo9fyp7ImA9WxNTE0k.&quot;"><id>tag:blogger.com,1999:blog-5962267631056793619.post-4395457807856745678</id><published>2009-08-15T17:00:00.002+02:00</published><updated>2009-08-15T17:07:48.467+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-15T17:07:48.467+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Using jQuery to build Google Chrome extensions</title><content type="html">&lt;p&gt;Today I wanted to learn how to write an
  &lt;a href="http://dev.chromium.org/developers/design-documents/extensions/"&gt;extension
  for Google Chrome&lt;/a&gt;. The Chrome extension system is not yet released, but
  there is alpha support for developing extensions. A
  &lt;a href="http://dev.chromium.org/developers/design-documents/extensions/howto"&gt;HOWTO&lt;/a&gt;
  describes what you need to do. This is actually quite easy: Chrome extensions
  are very much like regular web pages. They consist of HTML, CSS, JavaScript
  and images. Some JSON metadata describes the extension that is then
  &lt;a href="http://dev.chromium.org/developers/design-documents/extensions/packaging"&gt;packaged&lt;/a&gt;
  into a *.crx file.&lt;/p&gt;

&lt;p&gt;As I don't like raw JavaScript very much, I wondered whether it is
  possible to use my favorite JavaScript library
  &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; in Chrome extensions. It turned out that
  this is actually very straight-forward. It basically works out-of-the box as you
  would expect it.&lt;/p&gt;

&lt;p&gt;I tried to use jQuery in a
  &lt;a href="http://dev.chromium.org/developers/design-documents/extensions/background-pages"&gt;background
  page&lt;/a&gt; as well as in a
  &lt;a href="http://dev.chromium.org/developers/design-documents/extensions/content-scripts"&gt;content
  script&lt;/a&gt;. Here is the manifest.json file that describes my demo
  extension:&lt;/p&gt;

&lt;pre class="prettyprint"&gt;{
  "name": "A jQuery Chrome extension",
  "version": "0.1",
  "description": "Use jQuery to build Chrome extensions",
  "content_scripts": [
    {
      "matches": ["http://jquery.com/*"],
      "js": ["jquery-1.3.2.js", "content.js"]
    }
  ],
  "background_page": "background.html"
}&lt;/pre&gt;

&lt;p&gt;To use jQuery in my content script 'content.js', it was enough to list the
  stock jQuery JavaScript file as the first content script. 'content.js' then
  has jQuery available:&lt;/p&gt;

&lt;pre class="prettyprint"&gt;$('a').css({'background-color': 'yellow'});&lt;/pre&gt;

&lt;p&gt;Using jQuery in the background page is even more straight-forward. Simply
  embed it into 'background.html' the same way as you would for every other HTML
  page:&lt;/p&gt;

&lt;pre class="prettyprint"&gt;&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;script src='jquery-1.3.2.js'&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src='background.js'&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;

&lt;p&gt;This was extremely easy. I think the Chrome team made the right decision to
  build their extension model on the web page model. Now any web developer can
  start writing Chrome extensions without having to leave their comfort
  zone.&lt;/p&gt;

&lt;p&gt;Let me end this post with two disclaimers: While I do work for Google as a
  software engineer, my work is not related to Chrome at all. My interest for
  writing Chrome extensions is purely private. Also, I have not written any
  large Chrome extensions. So, it's easily possible that you will encounter
  problems when using jQuery in a complex use case. YMMV.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5962267631056793619-4395457807856745678?l=blog.michael-forster.de' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.michael-forster.de/feeds/4395457807856745678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.michael-forster.de/2009/08/using-jquery-to-build-google-chrome.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/4395457807856745678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/4395457807856745678?v=2" /><link rel="alternate" type="text/html" href="http://blog.michael-forster.de/2009/08/using-jquery-to-build-google-chrome.html" title="Using jQuery to build Google Chrome extensions" /><author><name>Dr. Michael Forster</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_uNxIqmDs43U/SU0dAKW4AFI/AAAAAAAAB6I/0WUF3q88EAA/S220/93102.2.png" /></author><thr:total>7</thr:total></entry><entry gd:etag="W/&quot;DkYMQ3Y-fip7ImA9WxVSE0o.&quot;"><id>tag:blogger.com,1999:blog-5962267631056793619.post-7782802765325346159</id><published>2009-01-08T00:13:00.014+01:00</published><updated>2009-01-08T01:23:02.856+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-08T01:23:02.856+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iTunes" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="MP3" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Embedding cover images in MP3 files for Android, iTunes, iPhone, Windows Media Player, and Windows Explorer</title><content type="html">&lt;p&gt;This is the continuation of a short
  &lt;a href="/2008/12/how-to-tag-mp3-files-for-android-itunes.html"&gt;series of blog
    postings&lt;/a&gt; about how I tag my MP3 files. Today I'll share my experience in
  displaying cover art in various media players.&lt;/p&gt;

&lt;p&gt;I am using two portable players: An &lt;a href="http://www.android.com/"&gt;Android
  phone&lt;/a&gt; and an &lt;a href="http://www.apple.com/iphone"&gt;iPhone&lt;/a&gt;. On my
  laptop I usually use &lt;a href="http://www.apple.com/itunes"&gt;iTunes&lt;/a&gt;, but
  sometimes I fall back to
  &lt;a href="http://www.microsoft.com/windows/windowsmedia/player/11"&gt;Windows
  Media Player&lt;/a&gt; because of its fast startup time. I keep MP3 files in
  individual folders per album, so I also want the thumbnail view of Windows
  explorer to show the cover art.&lt;/p&gt;

&lt;p&gt;Let's start with a short summary of what works for me: Embed cover images
  into the first track of every album, and additionally save them as Folder.jpg
  files in the album directories. See below for the long story.&lt;/p&gt;

&lt;h4&gt;Analysis of different players&lt;/h4&gt;

&lt;p&gt;There are various ways of attaching cover art to MP3 files, and every player
  that I use seems to do it slightly differently. Here is what I found out:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;iTunes&lt;/strong&gt; stores cover images in its own proprietary storage
    in some ITC2 format that I do't know anything about (My Documents\My
    Music\iTunes\Album
    Artwork\Download\6118F104927B998E\10\10\05\6118F104927B998E-6DBB7171FCCCC5AA.itc2).
    Fortunately, it also shows images that are included in the MP3 files.&lt;/li&gt;
  &lt;li&gt;The &lt;strong&gt;iPhone&lt;/strong&gt; seems to display whatever iTunes displays.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Android&lt;/strong&gt; also works fine with cover images embedded into
    the MP3 files.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Windows Explorer&lt;/strong&gt; expects cover art in Folder.jpg
    files. It does not show embedded images.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Windows Media Player&lt;/strong&gt; seems to keep cover art in a whole
    bunch of different hidden files like Folder.jpg, AlbumArtSmall.jpg,
    AlbumArt_{SOME_GUID}_Large.jpg, etc. It does read covers from the MP3 files
    however. If you import a MP3 file into the Windows Media Player library it
    automatically generates all files. This includes Folder.jpg, which is needed
    for Windows Explorer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, all of my players show images that are embedded in MP3 files. It
  seems to be enough to embed a cover image into the first track of an album.
  Windows Explorer needs Folder.jpg, which is easiest to create by importing files
  into Windows Media Player.&lt;/p&gt;

&lt;p&gt;Caveat: Windows Media Player resizes Folder.jpg files to 200x200 pixels
  without asking, so don't use this file as your primary storage. I want my
  covers to be 600x600 pixels, which seems to be a good compromise between file
  size and high quality (e. g. for iTunes cover flow). Because of that I have an
  additional Cover.jpg file in all of my album directories. This is not needed
  for any player, but I like to have it there for scripts that I use, e. g. to
  generate listings of my files.&lt;/p&gt;

&lt;h4&gt;Getting and embedding cover images with iTunes&lt;/h4&gt;

&lt;p&gt;Before you can embed cover art into an MP3 file you need to have it. Of
  course you can scan them yourself, but I find it much easier to use iTunes,
  which has many album covers in a very high quality.&lt;/p&gt;

&lt;p&gt;Here is what you need to do: Import the album MP3s into the iTunes library
  and choose "Get Album Artwork" in the album context menu:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_uNxIqmDs43U/SWU9gUQZqYI/AAAAAAAAB8A/0woJ5oWb1BA/s1600-h/get-album-artwork.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 289px; height: 339px;" src="http://2.bp.blogspot.com/_uNxIqmDs43U/SWU9gUQZqYI/AAAAAAAAB8A/0woJ5oWb1BA/s400/get-album-artwork.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5288700962819123586" /&gt;&lt;/a&gt;

&lt;p&gt;Sometimes iTunes does not have a matching cover - then you are back to
  scanning yourself. But more often than not you get a cover image. As mentioned
  above, iTunes stores it in its own proprietary format, but fortunately it is
  quite easy to extract. Open the album and right-click the first track,
  and then "Get Info":&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uNxIqmDs43U/SWU-UIocHLI/AAAAAAAAB8I/rBzgUkIUevM/s1600-h/get-info.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://4.bp.blogspot.com/_uNxIqmDs43U/SWU-UIocHLI/AAAAAAAAB8I/rBzgUkIUevM/s400/get-info.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5288701853051919538" /&gt;&lt;/a&gt;

&lt;p&gt;In the dialog that opens go to the "Artwork" tab, select the image and copy
  it with Ctrl-C or using the context menu. Then immediately paste it back using
  the context menu or Ctrl-V. Click OK and iTunes saves the image directly into
  the MP3 file.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uNxIqmDs43U/SWU-jzb4-3I/AAAAAAAAB8Q/6CpcQaQ_F8U/s1600-h/copy.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 343px;" src="http://3.bp.blogspot.com/_uNxIqmDs43U/SWU-jzb4-3I/AAAAAAAAB8Q/6CpcQaQ_F8U/s400/copy.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5288702122240047986" /&gt;&lt;/a&gt;

&lt;p&gt;It is worth mentioning, that you can of course also paste the copied image
  into your favorite graphics editor, or straight into an Explorer window. The
  latter creates a file "image 1.bmp", which you can then convert into a JPEG,
  e. g. to use it as Folder.jpg&lt;/p&gt;

&lt;p&gt;If you don't want to create Folder.jpg yourself, simply import the folder
  with your MP3 files (and with the embedded cover) into the Windows Media Player
  library. It will then generate Folder.jpg for you.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5962267631056793619-7782802765325346159?l=blog.michael-forster.de' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.michael-forster.de/feeds/7782802765325346159/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.michael-forster.de/2009/01/embedding-cover-images-in-mp3-files-for.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/7782802765325346159?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/7782802765325346159?v=2" /><link rel="alternate" type="text/html" href="http://blog.michael-forster.de/2009/01/embedding-cover-images-in-mp3-files-for.html" title="Embedding cover images in MP3 files for Android, iTunes, iPhone, Windows Media Player, and Windows Explorer" /><author><name>Dr. Michael Forster</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_uNxIqmDs43U/SU0dAKW4AFI/AAAAAAAAB6I/0WUF3q88EAA/S220/93102.2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_uNxIqmDs43U/SWU9gUQZqYI/AAAAAAAAB8A/0woJ5oWb1BA/s72-c/get-album-artwork.png" height="72" width="72" /><thr:total>11</thr:total></entry><entry gd:etag="W/&quot;DkECRH47eyp7ImA9WxVSE0o.&quot;"><id>tag:blogger.com,1999:blog-5962267631056793619.post-7940589018059491559</id><published>2008-12-31T04:40:00.011+01:00</published><updated>2009-01-08T01:31:05.003+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-08T01:31:05.003+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iTunes" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="MP3" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>How to tag MP3 files for Android, iTunes, iPhone, and Windows Explorer</title><content type="html">&lt;p&gt;
  Being a proud owner of a brand-new
  &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt; phone and having a couple of
  weeks of vacation over the holidays, I decided that this is the perfect time
  to reorganize my digital music collection and to rip the last few CDs for
  which I had not had the time before.
&lt;/p&gt;

&lt;p&gt;
  I had to go through some trial-and-error experiments to find a tagging scheme
  that works for me, so I figured that my results might be interesting for
  others as well. I'm going to try to make a mini-series of blog postings that
  explain how I tag my MP3 files. I do not claim that this is the one and only
  tagging scheme, but it works well for me. If you use a different tagging
  scheme that works better for you, please let me know.
&lt;/p&gt;

&lt;h4&gt;Tagging across devices, players, and media types&lt;/h4&gt;

&lt;p&gt;
  Being me, I want my music to be tagged perfectly for the handful of devices
  and programs that I use. This includes my
  &lt;a href="http://www.apple.com/iphone/"&gt;iPhone&lt;/a&gt; that I recently used mostly
  as a media player and now also my Android phone. On Windows my main audio
  player is &lt;a href="http://www.apple.com/itunes/"&gt;iTunes&lt;/a&gt;, but sporadically
  I also use
  &lt;a href="http://www.microsoft.com/windows/windowsmedia/de/player/11/default.aspx"&gt;Windows
  Media Player&lt;/a&gt;, mainly because it starts up much faster. Finally, I want to
  use the capability of the Windows Explorer to show the track titles when
  viewing tracks in the file system.
&lt;/p&gt;

&lt;p&gt;
  Tagging MP3s perfectly across these players was more challenging than I
  anticipated. It is very important to use the
  right &lt;a href="http://www.id3.org/"&gt;ID3 tags&lt;/a&gt;, and until recently, I wasn't
  even aware of some of them. Here is my list of features of a "perfect" tagging
  scheme:
&lt;p&gt;

&lt;ol&gt;
  &lt;li&gt;
    Files from the same disc (set) should be be recognized as such. If not
    tagged correctly, iTunes (and other players) show tracks from the same CD as
    belonging to multiple CDs. This happens mostly for compilations. See below
    for the solution.
  &lt;/li&gt;
  &lt;li&gt;
    Files and folders should show cover art in high quality. I want to see my
    cover art when playing a song, when using iPhone/iTunes cover flow, and as
    thumbnails in Windows Explorer.
  &lt;/li&gt;
  &lt;li&gt;
    The files should play in the correct order. This seems trivial, but
    unfortunately it isn't.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Getting the tagging right is not made easier by the quite diverse collection
  of media types in my collection. I have albums of one artist, compilations
  from multiple artists, audio books, ballroom dance music, comedy discs, movie
  sound tracks, musicals, and so on. I also have a number of single MP3 files of
  an old collection of chart samplers that I didn't want to keep in their
  entirety.
&lt;/p&gt;

&lt;h4&gt;Getting compilations recognized as single discs&lt;/h4&gt;

&lt;p&gt;
  For today, I thought, I'd get started with how to get single discs recognized
  as single discs. Here is a ballroom dancing album that contains tracks from
  various artists:
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uNxIqmDs43U/SVrhm5s8wuI/AAAAAAAAB7g/f1PrJbtxK_8/s1600-h/1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 237px;" src="http://4.bp.blogspot.com/_uNxIqmDs43U/SVrhm5s8wuI/AAAAAAAAB7g/f1PrJbtxK_8/s400/1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5285785171113329378" /&gt;&lt;/a&gt;

&lt;p&gt;
  Clearly, every track is labeled with the same album name, so one might expect
  that iTunes recognizes the tracks as belonging to the same album.
  Unfortunately, this is not the case. Here is the result:
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uNxIqmDs43U/SVrhv3rvfkI/AAAAAAAAB7o/Qxa8e1nN2mo/s1600-h/2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://3.bp.blogspot.com/_uNxIqmDs43U/SVrhv3rvfkI/AAAAAAAAB7o/Qxa8e1nN2mo/s400/2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5285785325190217282" /&gt;&lt;/a&gt;

&lt;p&gt;
  iTunes only recognized files as belonging to the same album if they also are
  from the same artist. Fortunately, there is a simple way to make iTunes
  understand that this is indeed only one album. Just select all tracks, right
  click, and select "Get Info" in the context menu. Then edit the "Album Artist"
  tag to have the same value for all tracks. I usually choose "Various",
  sometimes "Soundtrack" or similar. The album artist field is also useful for 
  albums of a single artist "Somebody" where individual tracks are from
  "Somebody feat. Somebody Else".
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uNxIqmDs43U/SVriCuvsaiI/AAAAAAAAB7w/ckzk1Ul7G_E/s1600-h/3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://3.bp.blogspot.com/_uNxIqmDs43U/SVriCuvsaiI/AAAAAAAAB7w/ckzk1Ul7G_E/s400/3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5285785649208388130" /&gt;&lt;/a&gt;

&lt;p&gt;
  I usually do not edit ID3 tags in iTunes. There are quite some decent ID3
  editors out there. My favorite one
  is &lt;a href="http://www.id3-tagit.de/"&gt;ID3-TagIT&lt;/a&gt;. Unfortunately it is not
  developed any more, but it is still available for download from several download
  archives. Here is how I enter the same information in the "Detailed
  Information" editor:
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uNxIqmDs43U/SVriTyURR-I/AAAAAAAAB74/kalg3pORXh8/s1600-h/4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 191px;" src="http://1.bp.blogspot.com/_uNxIqmDs43U/SVriTyURR-I/AAAAAAAAB74/kalg3pORXh8/s400/4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5285785942224881634" /&gt;&lt;/a&gt;

&lt;p&gt;
  Technically, the "Album Artist" information is stored in the 'TPE2' ID3 frame
  that is &lt;a href="http://www.id3.org/id3v2.4.0-frames"&gt;defined&lt;/a&gt; as follows:
  &lt;cite&gt;
    &amp;ldquo;The 'Band/Orchestra/Accompaniment' frame is used for additional information
    about the performers in the recording.&amp;rdquo;
  &lt;/cite&gt;
  Arguably, this definition does not quite match what we use it for, but all
  players seem to use it as the "album artist" as intended. 
&lt;/p&gt;

&lt;p&gt;
  Let me know if this explanation was helpful for you. Check back later for
  other topics I'd like to write about in future postings: Which ID3 version(s)
  to use, how to
  &lt;a href="/2009/01/embedding-cover-images-in-mp3-files-for.html"&gt;include cover art&lt;/a&gt;,
  how to handle sets of two or more discs, audio books, and what else comes to
  my mind until then. Let's hope that I find the time.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5962267631056793619-7940589018059491559?l=blog.michael-forster.de' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.michael-forster.de/feeds/7940589018059491559/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.michael-forster.de/2008/12/how-to-tag-mp3-files-for-android-itunes.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/7940589018059491559?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/7940589018059491559?v=2" /><link rel="alternate" type="text/html" href="http://blog.michael-forster.de/2008/12/how-to-tag-mp3-files-for-android-itunes.html" title="How to tag MP3 files for Android, iTunes, iPhone, and Windows Explorer" /><author><name>Dr. Michael Forster</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_uNxIqmDs43U/SU0dAKW4AFI/AAAAAAAAB6I/0WUF3q88EAA/S220/93102.2.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_uNxIqmDs43U/SVrhm5s8wuI/AAAAAAAAB7g/f1PrJbtxK_8/s72-c/1.png" height="72" width="72" /><thr:total>14</thr:total></entry><entry gd:etag="W/&quot;CUIBR34_fip7ImA9WxVQEU4.&quot;"><id>tag:blogger.com,1999:blog-5962267631056793619.post-1988469139901684063</id><published>2008-12-20T16:50:00.005+01:00</published><updated>2009-01-28T10:05:56.046+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-28T10:05:56.046+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>View Android Source Code in Eclipse</title><content type="html">&lt;p&gt;
  Recently, I have been hacking around with
  &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt; a lot, and I think it's
  awesome.
&lt;/p&gt;

&lt;p&gt;
  Unfortunately, the &lt;a href="http://code.google.com/android/"&gt;Android SDK&lt;/a&gt;
  does not come with source code, and sometimes
  the &lt;a href="http://code.google.com/android/documentation.html"&gt;docs&lt;/a&gt; are
  not so great, yet. Being an open source project,
  the &lt;a href="http://source.android.com/"&gt;Android sources&lt;/a&gt; are available
  online, but they are not very easy to access from Eclipse. For one, the source
  files are sometimes difficult to find as they are distributed over many
  individual Git &lt;a href="http://android.git.kernel.org/"&gt;repositories&lt;/a&gt;, and
  then I am not always online.
&lt;/p&gt;

&lt;p&gt;
  Integrating source files into Eclipse is usually quite easy, but the Android
  Eclipse plugin
  (&lt;a href="http://code.google.com/android/intro/installing.html#installingplugin"&gt;ADT&lt;/a&gt;)
  does not allow to modify the Java Source Attachment of android.jar in the
  Android Library. Fortunately, you only have to find out what the default
  location for source code is. Eric Burke nicely
  describes &lt;a href="http://stuffthathappens.com/blog/2008/11/01/browsing-android-source-in-eclipse/"&gt;how
  to find that out.
&lt;/a&gt;

&lt;p&gt;
  Long story short: Android source code needs to be placed in a "sources"
  subdirectory of the Android SDK. Here is what you need to do:
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;a href="http://source.android.com/download/"&gt;Get the Android source
      code&lt;/a&gt;
    (&lt;a href="http://source.android.com/download/using-repo#TOC-Task-reference"&gt;install
      repo&lt;/a&gt;, repo init, repo sync)
  &lt;/li&gt;
  &lt;li&gt;
    Move all Java sources into a "sources" subdirectory of the Android SDK
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Step 2 sounds easier than it is. There are a lot of Java files in the Android
  sources, and they are sprinkled all over the place. Eclipse, however, needs
  the source files in a standard Java source directory structure: The path of a
  source file needs to match its package name. To simplify this task, I have
  written a short Python script that recursively searches for Java files and
  packs them into a ZIP file. Unpack that source file into a "sources"
  subdirectory of the Android SDK. Enjoy:
&lt;p&gt;

&lt;pre class="prettyprint"&gt;from __future__ import with_statement  # for Python &lt; 2.6

import os
import re
import zipfile

# open a zip file
DST_FILE = 'sources.zip'
if os.path.exists(DST_FILE):
  print DST_FILE, "already exists"
  exit(1)
zip = zipfile.ZipFile(DST_FILE, 'w', zipfile.ZIP_DEFLATED)

# some files are duplicated, copy them only once
written = {}

# iterate over all Java files
for dir, subdirs, files in os.walk('.'):
  for file in files:
    if file.endswith('.java'):
      # search package name
      path = os.path.join(dir, file)
      with open(path) as f:
        for line in f:
          match = re.match(r'\s*package\s+([a-zA-Z0-9\._]+);', line)
          if match:
            # copy source into the zip file using the package as path
            zippath = match.group(1).replace('.', '/') + '/' + file
            if zippath not in written:
              written[zippath] = 1
              zip.write(path, zippath)
            break;
         
zip.close()&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5962267631056793619-1988469139901684063?l=blog.michael-forster.de' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.michael-forster.de/feeds/1988469139901684063/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.michael-forster.de/2008/12/view-android-source-code-in-eclipse.html#comment-form" title="35 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/1988469139901684063?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5962267631056793619/posts/default/1988469139901684063?v=2" /><link rel="alternate" type="text/html" href="http://blog.michael-forster.de/2008/12/view-android-source-code-in-eclipse.html" title="View Android Source Code in Eclipse" /><author><name>Dr. Michael Forster</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/_uNxIqmDs43U/SU0dAKW4AFI/AAAAAAAAB6I/0WUF3q88EAA/S220/93102.2.png" /></author><thr:total>35</thr:total></entry></feed>

