<?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.pwnt.be/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
<id>urn:uuid:057e2431-a97d-4f7a-8cdb-de0ea424ad88</id>
<title>pwnt.be – Posts</title>
<subtitle>Colloquially described as “Tim’s blog”</subtitle>
<link href="http://pwnt.be/" type="application/xhtml+xml" />
<link rel="license" href="http://creativecommons.org/licenses/by/3.0/" type="text/html" />

<updated>2012-01-21T12:40:19Z</updated>
<logo>http://pwnt.be/feed/logo</logo>
<author>
<name>Tim De Pauw</name>
<uri>http://pwnt.be/</uri>
</author>
<geo:lat>51.037603</geo:lat>
<geo:long>3.709545</geo:long>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.pwnt.be/pwnt/posts" /><feedburner:info uri="pwnt/posts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.pwnt.be/pwnt/posts" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.pwnt.be%2Fpwnt%2Fposts" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><entry>
<id>tag:pwnt.be,2012-01-21:1801</id>
<title type="text">Access Control for Tomcat’s Manager App</title>
<link href="http://feeds.pwnt.be/~r/pwnt/posts/~3/8udfVnaF8Cs/access-control-for-tomcat-s-manager-app" type="application/xhtml+xml" />
<link rel="replies" href="http://pwnt.be/2012/01/21/access-control-for-tomcat-s-manager-app/feed" type="application/atom+xml" thr:count="0" />
<published>2012-01-21T00:26:12Z</published>
<updated>2012-01-21T12:40:19Z</updated>
<summary type="text">
<![CDATA[On Apache Tomcat 7, deploying and undeploying Java EE webapps on the fly is straightforward thanks to its Manager app. …]]>
</summary>
<content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"&gt;&lt;p&gt;On &lt;a href="http://tomcat.apache.org/"&gt;Apache Tomcat&lt;/a&gt; 7, deploying and undeploying Java EE webapps on the fly is straightforward thanks to its &lt;em&gt;Manager&lt;/em&gt; app. You just head on over to &lt;em&gt;/manager&lt;/em&gt;, log in with a &lt;code&gt;manager-gui&lt;/code&gt; user, and click around. Alternatively, you use the &lt;em&gt;Client Deployer&lt;/em&gt; with a &lt;code&gt;manager-script&lt;/code&gt; user to connect to the Manager’s REST-like API. That’s all well and good, but there’s a huge catch …&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;For, you see, as access to the Manager is defined on a per-host basis, any user who can deploy to application context &lt;em&gt;/foo&lt;/em&gt; on your host can also deploy to context &lt;em&gt;/bar&lt;/em&gt;. Consequently, if you want to share a host between users, there is no waterproof way to keep them from messing with each other’s apps.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;How to Fix It&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;One solution to this is to define a virtual host for each user or group of trusted users. However, in some cases, this is just not practical. For instance, personally, I’m dealing with teams of students, who will each be asked to deploy an app to a context path which has been allocated for them. Without fine-grained access control, there is no way to keep the &lt;code&gt;team12&lt;/code&gt; user from manipulating the app at &lt;em&gt;/team07&lt;/em&gt;, for instance. This principle might still be extended to provide contexts for both an unstable and a stable version of the app, but the fact remains that access control is desirable. Moreover, the solution I am about to provide is easily extended.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;So, yes, I am going to explain how to add access control to Tomcat’s Manager app. This tutorial requires a tiny bit of coding, but it’s not as bad as it sounds.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;What we’re going to be doing is writing a &lt;em&gt;filter&lt;/em&gt;, which is essentially a component that gets called before the actual app. Thus, we’re going to be intercepting certain calls to the Manager app to see if their actions are allowed, and if not, we won’t pass them to the Manager and throw an error instead.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;First off, if you don’t have a Java EE IDE installed yet, get one. I’m going to be describing the required steps for &lt;a href="http://netbeans.org/"&gt;NetBeans IDE&lt;/a&gt; 7.1, but Eclipse and friends should work fine. Just make sure your environment supports Java EE.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Set Up the Project&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Fire up NetBeans and create a new project. You might be tempted to create a Java EE project. That &lt;em&gt;would&lt;/em&gt; probably work, but personally, with version 7.1 of NetBeans, I am unable to select my Tomcat instance as a server.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Luckily, you can just as easily start off with a &lt;em&gt;Java Application&lt;/em&gt;, so let’s do that instead. Under &lt;em&gt;File&lt;/em&gt;, select &lt;em&gt;New Project&lt;/em&gt;, or just use the toolbar button. Give the project a meaningful name—say, &lt;em&gt;TomcatManagerAuthenticator&lt;/em&gt;. Don’t create a main class; it’s no problem if you do, but it’s simply not necessary.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;The only downside to a Java Application project is that it does not include the Java EE libraries. Rectify this by right-clicking on &lt;em&gt;Libraries&lt;/em&gt; under your new project, and selecting &lt;em&gt;Add Library&lt;/em&gt;. Choose &lt;em&gt;Java EE 6 API Library&lt;/em&gt; and add it. You are now ready to start writing the filter code.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Write the Filter&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;A filter is actually just another Java class, which implements Java EE’s servlet &lt;a href="http://docs.oracle.com/javaee/6/api/javax/servlet/Filter.html"&gt;&lt;code&gt;Filter&lt;/code&gt;&lt;/a&gt; interface. Let’s create such a class. Right-click your project and, under &lt;em&gt;New&lt;/em&gt;, select &lt;em&gt;Java Class&lt;/em&gt;. Name the class &lt;code&gt;MyManagerFilter&lt;/code&gt; or whatever you like. Using a package other than the default—i.e., empty—is not necessary.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;You’ll then see the code for the empty &lt;code&gt;MyManagerFilter&lt;/code&gt; class. Make it implement the &lt;code&gt;Filter&lt;/code&gt; interface, as shown below this paragraph. At the end of this section, you’ll find a complete implementation of the class.&lt;/p&gt;&#xD;
&#xD;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;public class MyManagerFilter implements Filter {&#xD;
  public void init(FilterConfig filterConfig)&#xD;
      throws ServletException {&#xD;
  }&#xD;
&#xD;
  public void doFilter(ServletRequest request,&#xD;
      ServletResponse response,&#xD;
      FilterChain chain)&#xD;
      throws IOException, ServletException {&#xD;
  }&#xD;
&#xD;
  public void destroy() {&#xD;
  }&#xD;
}&#xD;
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;Now, let’s see how we can actually intercept those HTTP requests to the Manager app. Upon each of them, the &lt;code&gt;doFilter&lt;/code&gt; method of our filter will get called. Consequently, we can examine the request parameters to find out who is the user who is currently logged in, and which app he is trying to manipulate. The user name is part of HTTP’s &lt;code&gt;Authorization&lt;/code&gt; header and is easily obtained. The path to the application which is being managed is consistently passed via a GET parameter called &lt;code&gt;path&lt;/code&gt;. Thus, placing the following code in &lt;code&gt;doFilter&lt;/code&gt; tells us everything we need to know:&lt;/p&gt;&#xD;
&#xD;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;HttpServletRequest hreq = (HttpServletRequest) request;&#xD;
String user = hreq.getRemoteUser();&#xD;
String path = request.getParameter("path");&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;Note that all of this applies to both the Manager’s HTML-based GUI and its text-based REST interface, for use with the Client Deployer.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;How the variables &lt;code&gt;user&lt;/code&gt; and &lt;code&gt;path&lt;/code&gt; are further used depends on your exact goal. Regardless, either the call is allowed or it isn’t, so let’s represent this using a &lt;code&gt;boolean&lt;/code&gt; variable and work from that:&lt;/p&gt;&#xD;
&#xD;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;boolean allowed = isAllowed(user, path);&#xD;
if (allowed) {&#xD;
  &lt;em&gt;// Forward the request.&lt;/em&gt;&#xD;
  chain.doFilter(request, response);&#xD;
} else {&#xD;
  &lt;em&gt;// Throw a HTTP 403 (Forbidden) error.&lt;/em&gt;&#xD;
  HttpServletResponse hresp = (HttpServletResponse) response;&#xD;
  hresp.sendError(HttpServletResponse.SC_FORBIDDEN);&#xD;
}&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;That’s all there is to &lt;code&gt;doFilter&lt;/code&gt;, but we have yet to implement our own function &lt;code&gt;isAllowed&lt;/code&gt;. I’ve cooked up a &lt;a href="http://pwnt.be/res/2012/01/21/MyManagerFilter.java"&gt;sample implementation of &lt;code&gt;MyManagerFilter&lt;/code&gt;&lt;/a&gt;, which should get you started. You could, for instance, retrieve the access control list—i.e., &lt;code&gt;userToApps&lt;/code&gt; in the code—from an XML file. Remember that any user names you would like to use will also need to be defined in Tomcat’s &lt;code&gt;tomcat-users.xml&lt;/code&gt; file, each with the appropriate role.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Compile the Project&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Save &lt;code&gt;MyManagerFilter.java&lt;/code&gt;. You are now ready to compile this source file to the equivalent &lt;code&gt;MyManagerFilter.class&lt;/code&gt;. To do so, select &lt;em&gt;Build Main Project&lt;/em&gt; from NetBeans’s &lt;em&gt;Run&lt;/em&gt; menu, or just hit &lt;kbd&gt;F11&lt;/kbd&gt;.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;If you navigate to the project folder in Windows Explorer (or something equivalent), you’ll find a folder called &lt;code&gt;build&lt;/code&gt;, containing a &lt;code&gt;classes&lt;/code&gt; folder with the class file you’re looking for. If you’re having trouble finding the project folder, right-click on your NetBeans project and select &lt;em&gt;Properties&lt;/em&gt;.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Keep your Explorer window open, since you’ll need that class file in a second.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Add the Filter to the Manager&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;There are two steps to installing the newly created filter class on your Tomcat instance. First, you need to copy the physical file &lt;code&gt;MyManagerFilter.class&lt;/code&gt; to the Manager app’s directory structure. Second, the app’s configuration needs to be updated to include the filter in the invocation chain.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;So, let’s first place the filter class on the server. Your Tomcat installation directory contains a &lt;code&gt;webapps&lt;/code&gt; folder by default. Inside it, there is a folder called &lt;code&gt;manager&lt;/code&gt;, which contains (part of) the Manager app. Inside that, there should be a folder called &lt;code&gt;WEB-INF&lt;/code&gt;. In there, copy your NetBeans project’s &lt;code&gt;classes&lt;/code&gt; folder, which only contains &lt;code&gt;MyManagerFilter.class&lt;/code&gt;. If, for some reason, &lt;code&gt;WEB-INF&lt;/code&gt; already contains a &lt;code&gt;classes&lt;/code&gt; folder, just add your class file to it.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Also in &lt;code&gt;WEB-INF&lt;/code&gt; is a file called &lt;code&gt;web.xml&lt;/code&gt;. Open it in a text or XML editor. This file tells Tomcat how to run the Manager app. There should already be some &lt;code&gt;&amp;lt;filter&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;filter-mapping&amp;gt;&lt;/code&gt; elements in there. In a very similar way, we’ll add our own filter to the chain. Below them, just add this code snippet:&lt;/p&gt;&#xD;
&#xD;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;filter&amp;gt;&#xD;
  &amp;lt;filter-name&amp;gt;MyManagerFilter&amp;lt;/filter-name&amp;gt;&#xD;
  &amp;lt;filter-class&amp;gt;MyManagerFilter&amp;lt;/filter-class&amp;gt;&#xD;
&amp;lt;/filter&amp;gt;&#xD;
&#xD;
&amp;lt;filter-mapping&amp;gt;&#xD;
  &amp;lt;filter-name&amp;gt;MyManagerFilter&amp;lt;/filter-name&amp;gt;&#xD;
  &amp;lt;url-pattern&amp;gt;/text/*&amp;lt;/url-pattern&amp;gt;&#xD;
&amp;lt;/filter-mapping&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;The first part informs Tomcat of the filter’s existence. The second part tells it to apply the filter to any URL belonging to the Manager app that starts with &lt;code&gt;/text/&lt;/code&gt;. This ties the filter to the REST API. If you’d like to use it on the HTML GUI instead, just change &lt;code&gt;text&lt;/code&gt; to &lt;code&gt;html&lt;/code&gt;.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Test Things Out&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;And that’s pretty much it! In the mean time, Tomcat will have detected the change in configuration and the Manager app will have been reloaded. However, if you’ve turned this feature off for whatever reason, or if you’re simply unsure, just restart Tomcat to be safe. If you entered &lt;code&gt;text&lt;/code&gt; above, try to deploy some apps using the Client Deployer; if you entered &lt;code&gt;html&lt;/code&gt;, point your browser to the Manager, try some different logins, and poke around.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;If you’re stuck at any point, feel free to leave a comment below. I’ll probably be extending this tutorial with some nice screenshots in the future.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Final Notes&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;A lot of this stuff is part of Java EE rather than Apache Tomcat, so it could also be applicable to other application servers, such as GlassFish. If you have any pointers for users of those, be sure to drop a line.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Finally, credit goes to Tim Funk, who coined the basic idea for this approach on the Tomcat user mailing list &lt;a href="http://grokbase.com/t/tomcat.apache.org/users/2003/04/mananger-roles/10m2nulzpoufgawoj6xp2bfyxcr4"&gt;way back in 2003&lt;/a&gt;. Since it took me a while to dig that up and I couldn’t find a complete example, I figured I’d write this tutorial. I hope it’ll be of use to anyone trying to secure their Tomcat instance.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kMQTTSySr6qILlXQGZeXmKM8-K8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kMQTTSySr6qILlXQGZeXmKM8-K8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kMQTTSySr6qILlXQGZeXmKM8-K8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kMQTTSySr6qILlXQGZeXmKM8-K8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=8udfVnaF8Cs:GCF_jNNCHHg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?i=8udfVnaF8Cs:GCF_jNNCHHg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=8udfVnaF8Cs:GCF_jNNCHHg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=8udfVnaF8Cs:GCF_jNNCHHg:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=8udfVnaF8Cs:GCF_jNNCHHg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pwnt/posts/~4/8udfVnaF8Cs" height="1" width="1"/&gt;</content>
<category label="Access-Control-List" term="access-control-list" scheme="http://pwnt.be/tag/" />
<category label="ACL" term="acl" scheme="http://pwnt.be/tag/" />
<category label="Apache-Tomcat" term="apache-tomcat" scheme="http://pwnt.be/tag/" />
<category label="Application" term="application" scheme="http://pwnt.be/tag/" />
<category label="Authentication" term="authentication" scheme="http://pwnt.be/tag/" />
<category label="Code" term="code" scheme="http://pwnt.be/tag/" />
<category label="Geek" term="geek" scheme="http://pwnt.be/tag/" />
<category label="GlassFish" term="glassfish" scheme="http://pwnt.be/tag/" />
<category label="Java" term="java" scheme="http://pwnt.be/tag/" />
<category label="Java-EE" term="java-ee" scheme="http://pwnt.be/tag/" />
<category label="Programming" term="programming" scheme="http://pwnt.be/tag/" />
<category label="Security" term="security" scheme="http://pwnt.be/tag/" />
<category label="Server" term="server" scheme="http://pwnt.be/tag/" />
<category label="Servlet" term="servlet" scheme="http://pwnt.be/tag/" />
<thr:total>0</thr:total>
<feedburner:origLink>http://pwnt.be/2012/01/21/access-control-for-tomcat-s-manager-app</feedburner:origLink></entry>
<entry>
<id>tag:pwnt.be,2011-08-19:1800</id>
<title type="text">De Canvascrack: een epiloog</title>
<link href="http://feeds.pwnt.be/~r/pwnt/posts/~3/zexfjwWkJ-w/de-canvascrack-een-epiloog" type="application/xhtml+xml" />
<link rel="replies" href="http://pwnt.be/2011/08/19/de-canvascrack-een-epiloog/feed" type="application/atom+xml" thr:count="2" />
<published>2011-08-19T19:37:30Z</published>
<updated>2011-08-20T00:27:06Z</updated>
<summary type="text">
<![CDATA[Na vier lange maanden de lippen stijf op elkaar te hebben gehouden, kan ik dan eindelijk in de pen kruipen. …]]>
</summary>
<content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl-BE"&gt;&lt;p&gt;Na vier lange maanden de lippen stijf op elkaar te hebben gehouden, kan ik&#xD;
dan eindelijk in de pen kruipen. Mijn aantreden bij de &lt;em&gt;Canvascrack&lt;/em&gt; is&#xD;
op het scherm geweest en u zag dat het helaas snel in mineur eindigde.&lt;/p&gt;&#xD;
&#xD;
&lt;dl class="images"&gt; &#xD;
&lt;dt&gt;&lt;img src="http://pwnt.be/res/2011/08/19/canvascrack.jpg" alt="Sfeerbeeld"&gt;&lt;/img&gt;&lt;/dt&gt; &#xD;
&lt;dd&gt;Met dank aan &lt;a href="http://twitter.com/johanjacobs21"&gt;Johan Jacobs&lt;/a&gt; voor de foto&lt;/dd&gt; &#xD;
&lt;/dl&gt; &#xD;
&#xD;
&lt;p&gt;Dames, heren, het cliché klopt: het is thuis op de sofa zovele malen&#xD;
eenvoudiger dan in de studio. Met een hart dat in de keel bonkt, liggen&#xD;
inschattingsfouten voortdurend op de loer. Maar kijk, ik wind er geen doekjes&#xD;
om: ik heb gewoon slecht gespeeld.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Net daarom is het natuurlijk knullig om op die manier ook nog eens crack te&#xD;
worden, nota bene ten koste van iemand die het in mijn ogen zeker en vast&#xD;
tot supercrack had kunnen schoppen. En al kregen we een (naar mijn mening)&#xD;
moeilijk setje vragen voorgeschoteld, niemand wil crack worden met zo’n&#xD;
score. Mijn verontschuldigingen aan de morele supercrack waren en zijn dan ook&#xD;
van oprechte aard.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Los daarvan weze het uit mijn toelichting bij de beoordelingen duidelijk&#xD;
dat ik mijn laatste twee tafels binnen had kunnen (en moeten) rijven.&#xD;
&lt;em&gt;Plus était en moi&lt;/em&gt;, maar de twijfel heeft me genadeloos genekt. Weten&#xD;
dat je dat enkel en alleen aan jezelf te danken hebt, valt best zwaar. Ik geef&#xD;
grif toe dat het me zelfs enkele uren slaap heeft gekost – uren waarin&#xD;
ik een eerste versie van dit stukje neerpende.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Maar laten we ook niet dramatiseren, want het is tenslotte maar een spel.&#xD;
Flaters ten spijt, blijf ik mijn deelname aan de Vlaamse quiz bij uitstek als&#xD;
een erg positieve ervaring bekijken. De preselecties en opnames zinderden&#xD;
onvermijdelijk na en ik behoor voortaan hoe dan ook tot het selecte clubje&#xD;
van mensen die effectief Canvascrack zijn geweest. Had ik het liever anders&#xD;
gezien? Vanzelfsprekend. Heb ik er al spijt van gehad? Geen moment.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;En tot slot nog voor de pietlutten onder u:&lt;/p&gt;&#xD;
&#xD;
&lt;ul&gt;&#xD;
&#xD;
&lt;li&gt;&lt;p&gt;Ja, “Panta rhei” was de enige Griekse uitdrukking. Ik wou&#xD;
benadrukken dat ik niet meer wist wat ze betekende, ook al had ik door&#xD;
eliminatie wel afgeleid dat het het correcte antwoord was. Het is geen&#xD;
praatprogramma en ik ben allerminst een begenadigd redenaar.&lt;/p&gt;&lt;/li&gt;&#xD;
&#xD;
&lt;li&gt;&lt;p&gt;Aangezien het tennis één van de weinige sporten is die me kan boeien,&#xD;
kende ik de nationaliteiten van de drie spelers wel degelijk. Wat ik me niet&#xD;
met zekerheid kon herinneren, was of enkel de fotograaf in kwestie een Duitser&#xD;
was of ook de tennisspeler. Soms ontsnapt de vraag je, zeker aan het eind van&#xD;
de aflevering, wanneer de stress in je kleren zit. Meer kan ik daar niet over&#xD;
zeggen.&lt;/p&gt;&lt;/li&gt;&#xD;
&#xD;
&lt;/ul&gt;&#xD;
&#xD;
&lt;p&gt;&lt;ins datetime="2011-08-19T22:11:16Z"&gt;Update:&lt;/ins&gt; Mocht u het allemaal gemist hebben, dan kunt u het ook integraal &lt;a href="http://youtu.be/fK_9sCUnbgI"&gt;online&lt;/a&gt; &lt;a href="http://youtu.be/MqxJUzH__ZY"&gt;bekijken&lt;/a&gt;. Dit alles dankzij &lt;a href="http://twitter.com/LennartMart"&gt;Lennart&lt;/a&gt;, mijn favoriete student van de dag.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3-BIN8l2pBsZZvpPzrPJd52izjk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3-BIN8l2pBsZZvpPzrPJd52izjk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3-BIN8l2pBsZZvpPzrPJd52izjk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3-BIN8l2pBsZZvpPzrPJd52izjk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=zexfjwWkJ-w:CHoFEsLNenQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?i=zexfjwWkJ-w:CHoFEsLNenQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=zexfjwWkJ-w:CHoFEsLNenQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=zexfjwWkJ-w:CHoFEsLNenQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=zexfjwWkJ-w:CHoFEsLNenQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pwnt/posts/~4/zexfjwWkJ-w" height="1" width="1"/&gt;</content>
<category label="Canvas" term="canvas" scheme="http://pwnt.be/tag/" />
<category label="Canvascrack" term="canvascrack" scheme="http://pwnt.be/tag/" />
<category label="Quiz" term="quiz" scheme="http://pwnt.be/tag/" />
<category label="TV" term="tv" scheme="http://pwnt.be/tag/" />
<thr:total>2</thr:total>
<feedburner:origLink>http://pwnt.be/2011/08/19/de-canvascrack-een-epiloog</feedburner:origLink></entry>
<entry>
<id>tag:pwnt.be,2011-08-15:1799</id>
<title type="text">30 Day Song Challenge, Day 30</title>
<link href="http://feeds.pwnt.be/~r/pwnt/posts/~3/hSCokH6K0QI/30-day-song-challenge-day-30" type="application/xhtml+xml" />
<link rel="replies" href="http://pwnt.be/2011/08/15/30-day-song-challenge-day-30/feed" type="application/atom+xml" thr:count="0" />
<published>2011-08-15T19:25:11Z</published>
<updated>2011-08-15T19:35:33Z</updated>
<summary type="text">
<![CDATA[It’s here then: the final installment in the 30 Day Song Challenge. And it only took me four months to …]]>
</summary>
<content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"&gt;&lt;p&gt;It’s here then: the final installment in the &lt;a href="http://www.facebook.com/pages/30-Day-Song-Challenge/120874111270003"&gt;&lt;em&gt;30 Day Song Challenge&lt;/em&gt;&lt;/a&gt;. And it only took me four months to complete the thing. Anyway, let’s go out on a bang.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Day 30: Your Favorite Song at This Time Last Year&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Around this time last year, I went looking for music along the stylings of Swedish bitpop sensation &lt;a href="http://www.smk.just.nu/"&gt;Slagsmålsklubben&lt;/a&gt;, whose work I totally adore, as &lt;a href="http://pwnt.be/tag/slagsmalsklubben"&gt;mentioned&lt;/a&gt;. Most notably, I came across their fellow countrymen Pluxus.&lt;/p&gt;&#xD;
&lt;div class="video"&gt;&#xD;
&lt;iframe class="youtube-player" type="text/html" width="468" height="300" src="http://www.youtube.com/embed/wEdQc3ERHgI"&gt;&lt;/iframe&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;If Pluxus’s song &lt;em&gt;Transient&lt;/em&gt; sounds familiar, that’s probably because it was used in a &lt;a href="http://youtu.be/f_etZE945tk"&gt;Ford Fiesta commercial&lt;/a&gt;. I’m also rather partial to &lt;a href="http://youtu.be/Ts80LRgikNY"&gt;&lt;em&gt;Pluxemburg&lt;/em&gt;&lt;/a&gt;, which is also the name of the band’s label, but &lt;em&gt;Transient&lt;/em&gt; seemed more accessible.&lt;/p&gt;&#xD;
&lt;p&gt;So there you have it: thirty songs in thirty days—sort of. While you’re here, why not &lt;a href="http://pwnt.be/tag/30-day-song-challenge"&gt;revisit them all&lt;/a&gt;? Better yet: take the &lt;a href="http://www.facebook.com/pages/30-Day-Song-Challenge/120874111270003"&gt;challenge&lt;/a&gt; yourself. Do it.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2ZxNmpfOcR06qqbdFcizrQHRT4I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2ZxNmpfOcR06qqbdFcizrQHRT4I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2ZxNmpfOcR06qqbdFcizrQHRT4I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2ZxNmpfOcR06qqbdFcizrQHRT4I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=hSCokH6K0QI:xV2Fq6DvhnY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?i=hSCokH6K0QI:xV2Fq6DvhnY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=hSCokH6K0QI:xV2Fq6DvhnY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=hSCokH6K0QI:xV2Fq6DvhnY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=hSCokH6K0QI:xV2Fq6DvhnY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pwnt/posts/~4/hSCokH6K0QI" height="1" width="1"/&gt;</content>
<category label="30-Day-Song-Challenge" term="30-day-song-challenge" scheme="http://pwnt.be/tag/" />
<category label="Facebook" term="facebook" scheme="http://pwnt.be/tag/" />
<category label="Music" term="music" scheme="http://pwnt.be/tag/" />
<category label="Pluxus" term="pluxus" scheme="http://pwnt.be/tag/" />
<thr:total>0</thr:total>
<feedburner:origLink>http://pwnt.be/2011/08/15/30-day-song-challenge-day-30</feedburner:origLink></entry>
<entry>
<id>tag:pwnt.be,2011-08-14:1798</id>
<title type="text">30 Day Song Challenge, Day 29</title>
<link href="http://feeds.pwnt.be/~r/pwnt/posts/~3/WF9h9MWpNPo/30-day-song-challenge-day-29" type="application/xhtml+xml" />
<link rel="replies" href="http://pwnt.be/2011/08/14/30-day-song-challenge-day-29/feed" type="application/atom+xml" thr:count="0" />
<published>2011-08-14T09:11:32Z</published>
<updated>2011-08-14T09:11:32Z</updated>
<summary type="text">
<![CDATA[It’s only been a few hours since my previous 30 Day Song Challenge post, but technically, it is a new …]]>
</summary>
<content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"&gt;&lt;p&gt;It’s only been a few hours since my previous &lt;a href="http://www.facebook.com/pages/30-Day-Song-Challenge/120874111270003"&gt;&lt;em&gt;30 Day Song Challenge&lt;/em&gt;&lt;/a&gt; post, but technically, it &lt;em&gt;is&lt;/em&gt; a new day. Let’s just get this over with, shall we?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Day 29: A Song from Your Childhood&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;One of the earliest songs I remember hearing is one that has withstood time pretty well. Moreover, to this day, I personally still like it a great deal.&lt;/p&gt;&#xD;
&lt;div class="video"&gt;&#xD;
&lt;iframe class="youtube-player" type="text/html" width="468" height="300" src="http://www.youtube.com/embed/xwtdhWltSIg"&gt;&lt;/iframe&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;Surely, you all know this one. &lt;em&gt;Losing My Religion&lt;/em&gt; is arguably R.E.M.’s greatest work. I must have been eight or nine when I first heard it on TV. I suspect I wasn’t able to appreciate it fully yet, but evidently, it did stick.&lt;/p&gt;&#xD;
&lt;p&gt;To end this series, I’ll be discussing my favorite song at this time last year. Well, not &lt;em&gt;this&lt;/em&gt; time, but the time when I write up the piece. You know what I mean.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1zVxY3H3JxJPIhDpJP-w0UekbZk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1zVxY3H3JxJPIhDpJP-w0UekbZk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1zVxY3H3JxJPIhDpJP-w0UekbZk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1zVxY3H3JxJPIhDpJP-w0UekbZk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=WF9h9MWpNPo:3wurQ0YiA3Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?i=WF9h9MWpNPo:3wurQ0YiA3Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=WF9h9MWpNPo:3wurQ0YiA3Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=WF9h9MWpNPo:3wurQ0YiA3Q:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=WF9h9MWpNPo:3wurQ0YiA3Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pwnt/posts/~4/WF9h9MWpNPo" height="1" width="1"/&gt;</content>
<category label="30-Day-Song-Challenge" term="30-day-song-challenge" scheme="http://pwnt.be/tag/" />
<category label="Facebook" term="facebook" scheme="http://pwnt.be/tag/" />
<category label="Music" term="music" scheme="http://pwnt.be/tag/" />
<category label="R-E-M" term="r-e-m" scheme="http://pwnt.be/tag/" />
<category label="REM" term="rem" scheme="http://pwnt.be/tag/" />
<thr:total>0</thr:total>
<feedburner:origLink>http://pwnt.be/2011/08/14/30-day-song-challenge-day-29</feedburner:origLink></entry>
<entry>
<id>tag:pwnt.be,2011-08-14:1797</id>
<title type="text">30 Day Song Challenge, Day 28</title>
<link href="http://feeds.pwnt.be/~r/pwnt/posts/~3/UVcgsAK1CTY/30-day-song-challenge-day-28" type="application/xhtml+xml" />
<link rel="replies" href="http://pwnt.be/2011/08/14/30-day-song-challenge-day-28/feed" type="application/atom+xml" thr:count="0" />
<published>2011-08-13T23:48:09Z</published>
<updated>2011-08-13T23:48:09Z</updated>
<summary type="text">
<![CDATA[Yep, I’m still doing the 30 Day Song Challenge. Luckily, there are only three more episodes left until I can …]]>
</summary>
<content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"&gt;&lt;p&gt;Yep, I’m &lt;em&gt;still&lt;/em&gt; doing the &lt;a href="http://www.facebook.com/pages/30-Day-Song-Challenge/120874111270003"&gt;&lt;em&gt;30 Day Song Challenge&lt;/em&gt;&lt;/a&gt;. Luckily, there are only three more episodes left until I can return to my normal routine of five posts a year.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Day 28: A Song that Makes You Feel Guilty&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In my teens, I was hugely into trance music. Now, I could get all pompous on your ass and pretend I’ve moved on to more intelligent styles, but honestly, I don’t think there’s anything wrong with trance if it’s well made.&lt;/p&gt;&#xD;
&lt;div class="video"&gt;&#xD;
&lt;iframe class="youtube-player" type="text/html" width="468" height="300" src="http://www.youtube.com/embed/2VB_uz6G6C4"&gt;&lt;/iframe&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;So from time to time, I’ll still throw on a trance tune. And &lt;em&gt;Tuvan&lt;/em&gt; by the world’s number one trance DJ Armin van Buuren is undoubtedly the best trance track I’d heard in years—possibly ever. Sure, the whole thing’s commercial as hell, but you know what? It’s also meticulously made and stunning.&lt;/p&gt;&#xD;
&lt;p&gt;Nevertheless, the fact that it’s the epitome of flat-out commercial trance music does give me a bit of a sense of guilt. But frankly, I’ll quite happily adopt a brilliant piece like &lt;em&gt;Tuvan&lt;/em&gt; as a guilty pleasure. In your face, haters.&lt;/p&gt;&#xD;
&lt;p&gt;For the penultimate episode, I’ll be writing about a song from my childhood. I can already reveal it won’t be one performed by a talking dog.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Si471XSHjwdwPA0ln_AnM6LphYA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Si471XSHjwdwPA0ln_AnM6LphYA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Si471XSHjwdwPA0ln_AnM6LphYA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Si471XSHjwdwPA0ln_AnM6LphYA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=UVcgsAK1CTY:43PsYq8YMzU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?i=UVcgsAK1CTY:43PsYq8YMzU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=UVcgsAK1CTY:43PsYq8YMzU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=UVcgsAK1CTY:43PsYq8YMzU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.pwnt.be/~ff/pwnt/posts?a=UVcgsAK1CTY:43PsYq8YMzU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pwnt/posts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pwnt/posts/~4/UVcgsAK1CTY" height="1" width="1"/&gt;</content>
<category label="30-Day-Song-Challenge" term="30-day-song-challenge" scheme="http://pwnt.be/tag/" />
<category label="Armin-van-Buuren" term="armin-van-buuren" scheme="http://pwnt.be/tag/" />
<category label="Facebook" term="facebook" scheme="http://pwnt.be/tag/" />
<category label="Music" term="music" scheme="http://pwnt.be/tag/" />
<category label="Trance" term="trance" scheme="http://pwnt.be/tag/" />
<thr:total>0</thr:total>
<feedburner:origLink>http://pwnt.be/2011/08/14/30-day-song-challenge-day-28</feedburner:origLink></entry>
</feed>

