changeset 0:4cd9b65e10e4

initial import of the pelican based blog
author Dirk Olmes <dirk@xanthippe.ping.de>
date Fri, 28 Jun 2013 08:48:58 +0200
parents
children 3efa31d1bc6e
files .hgignore Makefile content/Eclipse/kepler-rulez.md content/Eclipse/link-files.md content/Eclipse/validating-xml-documents.md content/GNUstep/new-zipper-release.md content/Java/autoboxing.md content/Java/localized-resource-bundle-subclasses.md content/Java/log4j-based-logging-in-tomcat-part1.md content/Java/log4j-based-logging-in-tomcat-part2.md content/Java/log4j-logger-additivity.md content/Linux/s9y-kaputte-umlaute.md content/Maven/assembly-vs-system-scope.md content/Maven/cross-jdk-project-files-continued.md content/Maven/cross-jdk-project-files.md content/Maven/default-jdk-for-cross-jdk-profiles.md content/Maven/skipping-tests.md content/Mule/mule-1.4.1-released.md content/Mule/mule-1.4.2-released.md content/Python/timedelta.md content/SCM/http-auth-hgwebdir.md content/SCM/subversion-1.7.md content/SCM/sventon-changeset-links.md content/Smartphone/kies-woes-again.md content/Smartphone/kies-woes.md content/Smartphone/odin-on-virtualbox.md content/Smartphone/pptp-vpn.md content/Smartphone/the-future-is-here.md content/images/EclipseCatalogEntry.gif content/images/EclipseXmlCatalog.gif content/images/VirtualBoxUSB.png content/lost-in-translation.md content/neo-tastaturlayout.md develop_server.sh pelicanconf.py publishconf.py
diffstat 36 files changed, 786 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,4 @@
+.pyc
+pelican.pid
+srv.pid
+output
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,88 @@
+PY=python
+PELICAN=pelican
+PELICANOPTS=
+
+BASEDIR=$(CURDIR)
+INPUTDIR=$(BASEDIR)/content
+OUTPUTDIR=$(BASEDIR)/output
+CONFFILE=$(BASEDIR)/pelicanconf.py
+PUBLISHCONF=$(BASEDIR)/publishconf.py
+
+FTP_HOST=localhost
+FTP_USER=anonymous
+FTP_TARGET_DIR=/
+
+SSH_HOST=localhost
+SSH_PORT=22
+SSH_USER=dirk
+SSH_TARGET_DIR=/var/www/htdocs
+
+S3_BUCKET=my_s3_bucket
+
+DROPBOX_DIR=~/Dropbox/Public/
+
+help:
+	@echo 'Makefile for a pelican Web site                                        '
+	@echo '                                                                       '
+	@echo 'Usage:                                                                 '
+	@echo '   make html                        (re)generate the web site          '
+	@echo '   make clean                       remove the generated files         '
+	@echo '   make regenerate                  regenerate files upon modification '
+	@echo '   make publish                     generate using production settings '
+	@echo '   make serve                       serve site at http://localhost:8000'
+	@echo '   make devserver                   start/restart develop_server.sh    '
+	@echo '   make stopserver                  stop local server                  '
+	@echo '   ssh_upload                       upload the web site via SSH        '
+	@echo '   rsync_upload                     upload the web site via rsync+ssh  '
+	@echo '   dropbox_upload                   upload the web site via Dropbox    '
+	@echo '   ftp_upload                       upload the web site via FTP        '
+	@echo '   s3_upload                        upload the web site via S3         '
+	@echo '   github                           upload the web site via gh-pages   '
+	@echo '                                                                       '
+
+
+html: clean $(OUTPUTDIR)/index.html
+
+$(OUTPUTDIR)/%.html:
+	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+
+clean:
+	[ ! -d $(OUTPUTDIR) ] || find $(OUTPUTDIR) -mindepth 1 -delete
+
+regenerate: clean
+	$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+
+serve:
+	cd $(OUTPUTDIR) && $(PY) -m pelican.server
+
+devserver:
+	$(BASEDIR)/develop_server.sh restart
+
+stopserver:
+	kill -9 `cat pelican.pid`
+	kill -9 `cat srv.pid`
+	@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
+
+publish:
+	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
+
+ssh_upload: publish
+	scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
+
+rsync_upload: publish
+	rsync -e "ssh -p $(SSH_PORT)" -P -rvz --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
+
+dropbox_upload: publish
+	cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)
+
+ftp_upload: publish
+	lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"
+
+s3_upload: publish
+	s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed
+
+github: publish
+	ghp-import $(OUTPUTDIR)
+	git push origin gh-pages
+
+.PHONY: html help clean regenerate serve devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload github
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Eclipse/kepler-rulez.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,10 @@
+Title: Eclipse Kepler rulez
+Date: 2013-06-28
+Lang: en
+
+I've been trying Eclipse Juno for a short time only - way too slow for daily usage with more than 70 projects and some thousand classes.
+
+I was anxiously waiting for the release of Kepler. As soon as it came out I downloaded the Java developer edition and tested it with the usual set of projects.
+
+After two days of testing and doing development I can say that I'm very pleased. The new release is not only up to par performance-wise but also seems to have less bugs than the old Indigo release I've been using for a couple of years now.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Eclipse/link-files.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,9 @@
+Title: Eclipse link files
+Date: 2009-03-03
+Lang: en
+
+Starting with Eclipse Ganymede you have a *dropins* folder into which you can drop custom plugins that don't come via an update site.
+
+Some plugins come with a feature, however so you're forced to mainain a directory structure below the dropins folder. Add working across different Eclipse installations (probably on different hosts) to the mix and you'll have a bit of boring, repetitive work mainaining the the dropins folder.
+
+Enter link files (mentioned [briefly here](http://wiki.eclipse.org/Equinox_p2_Getting_Started#Dropins)). I have put all of the additional plugins in a custom mercurial repository that I sync on all machines that I use. The only modifications I still have to make to the local Eclipse installation is setting up the .link file - very handy.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Eclipse/validating-xml-documents.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,22 @@
+Title: Validating XML documents against your own schemas with Eclipse
+Date: 2007-06-07
+Tags: XML
+Lang: en
+
+This week I started to work on Mule 2.0 which will be based on Spring. We're dropping our own custom config format in favor of Spring's xml format. This requires me to design the schema for the transports I'm working on as well as convert the configuration of the unit tests to spring config files. I noticed that Eclipse kept complaining
+
+<div class="highlight"><pre>
+The matching wildcard is strict, but no declaration can be found for element 'mule:model-seda'.
+</pre></div>
+
+and that autocomplete in the XML editor didn't work either.
+
+With a bit of googling I found out that the key to success is the proper definition of namespaces and their URLs. In the normal case (as with the spring schema) the schema file is published on the net and can be downloaded by the XML parser. Publishing the schema you're just developing each time you make a change is cumbersome so I figured there must be a better way. The solution is to declare your schema in Eclipse's **XML catalog**. Go to `Preferences` -> `Web and XML` -> `XML Catalog` (assuming that you have WTP installed) and declare a user entry for the schema you're currently developing. Your Eclipse XML Catalog should look similar to this (just with more entries):
+
+![Eclipse XML preferences](|filename|/images/EclipseXmlCatalog.gif)
+
+Unfortunately, the validation and autocompletion still does not work if you don't use a little trick to make things work. XML files can be associated to their schema in two ways: either you point the schemaLocation to the full URL where the schema file can be downloaded or you specify a XML catalog key. When not being processed by Eclipse's XML editor the document should still work. We don't publish an XML catalog for mule but if you use a little trick you can still make the editor validate correctly. As XML catalog key specify the full URL to the schema like this:
+
+![XML Schema entry](|filename|/images/EclipseCatalogEntry.gif)
+
+The XML catalog validation seems to have preference over the download of schemas from the web. So Eclipse sees the "URL" as catalog key and validates against your schema on disk. When running as part of mule, the schema will be validated by spring's xml parser which uses other means of getting the schema file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/GNUstep/new-zipper-release.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,13 @@
+Title: New Zipper release
+Date: 2007-05-22
+Lang: en
+
+I had to debug Mule's build for the upcoming 1.4.1 release a bit, especially the packaging of the JCA distribution. I usually use Zipper to open archives, that's why I wrote it in the first place. It turns out that some file extensions are ambiguous, e.g. a file ending in .rar could either be a rar archive or a Java Resource ARchive which is effectively a zip file. Since the rar packager cannot handle zip files I picked up an idea I had in mind for a long time now: file types should not be determined by their extensions but the way the unix file command does it: by looking for certain patterns inside of a file. I implemented the most simple cases in Zipper now: Zip files begin with
+
+    { 'P', 'K', 0x003, 0x004 }
+
+and rar files begin with
+
+    { 'R', 'a', 'r', '!'}
+
+straight from the beginning of the file. When opening a file Zipper asks all registered Archive subclasses for their magic bytes and compares them to the first four bytes of the file. I think I will extend this mechanism a bit in the future so in the end all supported archives will be determined by a file's content and not by its file extension any more.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Java/autoboxing.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,39 @@
+Title: Autoboxing? not for me!
+Date: 2011-09-16
+Tags: JDK
+Lang: en
+
+Autoboxing appeared first with JDK5 and lots of people go crazy about it. At first look it's a nice feature but the more you play with it the more I'm coming to the conclusion that the autoboxing implementation just sucks.
+
+I will not rant about autoboxing pitfalls [that others have described already](http://www.certpal.com/blogs/2009/08/autoboxing-unboxing-gotchas/) but instead I'd like to point out my favourite autoboxing fail that alone is the reason not to use it: the `IntegerCache`.
+
+Consider this code snippet:
+
+    :::java
+    Integer value = 1;
+    Integer anotherValue = 1;
+    System.out.println(value == anotherValue);
+
+This is true, right? So let's change it just a bit:
+
+    :::java
+    Integer value = 128;
+    Integer anotherValue = 128;
+    System.out.println(value == anotherValue);
+
+This time it's false. What? 128 != 128? Can't be.
+
+Well this is autoboxing in action. You are not comparing plain int values as one would expect at first glance. Instead you are comparing `Integer` instances and we all know that comparing object instances via the == operator only if both sides of the term refer to the same object.
+
+The compiler basically rewrites the code snippet above to:
+
+    :::java
+    Integer value = Integer.valueOf(128);
+    Integer anotherValue = Integer.valueOf(128);
+    System.out.println(value == anotherValue);
+
+Now go and have a look at Integer's implementation of `Integer.valueOf(int)`. You'll see that it uses an `IntegerCache` internally that is used to cache instances of `Integer` - but only for a certain range of numbers.
+
+In the first code snippet where value was 1 the `IntegerCache` was used and the same (cached) instance was returned. In the second code snippet I chose a value that's just outside of the cache range. This time we compare two different instances and hence the comparison fails.
+
+Now imagine you have to sift through some legacy code where the variable declaration is not right above the comparison but some 100 lines above. Would you be able to tell why the comparison fails at first glance? I wouldn't and that's why I avoid Java's autoboxing at all cost.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Java/localized-resource-bundle-subclasses.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,6 @@
+Title: Localized ResourceBundle subclasses
+Date: 2007-05-14
+Tags: JDK
+lang: en
+
+When working on Mule's i18n support I stubled over a hidden gem in java. The ResourceBundle's `getResourceBundle` method will build a candidate name and look for a class **with this name** in the runtime before resorting to loading properties files. I'd like to play around with this feature a bit, currently I'm thinking of using plain java classes as storage for error messages. With proper class hierarchies the need to duplicate each and every message should be gone then, as the wonder of overridden methods kicks in.  See [ResourceBundle's getBundle method description](http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader)) for detailed documentation.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Java/log4j-based-logging-in-tomcat-part1.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,14 @@
+Title: Log4j based logging in Tomcat 6
+Date: 2008-06-14
+Tags: logging, log4j, Tomcat
+Lang: en
+
+My favourite annoyance in Tomcat is its logging to the ever-growing, never-rotated `catalina.out`.
+
+The [Tomcat logging setup instructions](http://tomcat.apache.org/tomcat-6.0-doc/logging.html) already contain a description what to do to make Tomcat log through log4. This is definitely a step in the right direction. Tomcat's logging is properly separated from each webapp's logging and only output written to `System.out` will end up in catalina.out.
+
+For hosting third party jars I originally also wanted a mechanism that caputres `System.out` and `System.err` and pipes it through commons-logging also. This is to avoid that some misbehaving webapp fills up catalina.out again.
+
+After a lot of poking around with commons-logging, the package rewritten commons-logging called *Juli* in Tomcat and a simple sample webapp that writes to `System.out` I came to the conclusion that the best you can get is what's described in Tomcat's logging setup.
+
+Since Tomcat has code in place to redirect `System.out` and `System.err` to `catalina.out`, there is no easy way to do custom commons-logging initialization after Tomcat redirected System.out and System.err.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Java/log4j-based-logging-in-tomcat-part2.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,21 @@
+Title: Log4j based logging in Tomcat 6 - Part 2
+Date: 2008-06-15
+Tags: logging, log4j, Tomcat
+Lang: en
+
+In my [previous experiment](|filename|./log4j-based-logging-in-tomcat-part1.md) I got Tomcat to log through commons-logging by following the Tomcat instructions.
+
+While this works well for webapps that use commons-logging or log4j directly, webapps using JDK logging (e.g. [Hudson](http://hudson.dev.java.net/)) still clutter catalina.out. I remembered an approach that Holger was researching earlier: replace the standard JDK logging that comes preconfigured with Tomcat with a logger that pipes everything through [slf4j](http://www.slf4j.org/).
+
+Holger's comment on the earlier blog post got me curious and I sat down and re-did his solution, this time using slf4j's JCL bridge. The net effect is that all logging in Tomcat is done through slf4j (and thus through log4j). The only log messages that show up in catalina.out are those printed to System.out by the webapps but I think that's negligible.
+
+Just do the following easy steps to apply the logging Judo to Tomcat:
+
+1. In your Tomcat install dir, create a new folder named ext to hold additional jars.
+1. copy `jul-to-slf4j.jar`, `slf4j-api.jar`, `slf4j-log4j12.jar` and `log4j.jar` to the new ext folder
+1. also put a `log4j.properties` into the ext folder
+1. replace Tomcat's `logging.properties` with a file that contains the following:<br>
+    handlers= org.slf4j.bridge.SLF4JBridgeHandler<br>
+    .level= INFO
+1. patch `catalina.sh` to have the `ext` folder and all its jars on the CLASSPATH.
+1. restart tomcat et voilà ... no more logging to catalina.out
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Java/log4j-logger-additivity.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,18 @@
+Title: Log4j and logger additivity
+Date: 2008-02-18
+Tags: log4j, logging
+Lang: en
+
+Sometimes you want to write more than one logfile using logj4. This is possible by defining multiple appenders and specifying an appender for a certain logger like this:
+
+    log4j.appender.A1=org.apache.log4j.ConsoleAppender
+    ....
+    log4j.appender.A2=org.apache.log4j.FileAppender
+    ....
+
+    log4j.rootLogger=DEBUG, A1
+    log4j.logger.foo=DEBUG, A2
+
+Unfortunately, all output that goes through the logger foo comes out in both appenders, which may not be what you want. The log4j docs talk about *logger additivity* but don't show concrete examples how to configure it. The trick is to configure the additivity **on the logger** and **not on the appender**. (I always fall into that trap). Simply add the following to the example above to stop messages to logger foo come out on A1:
+
+    log4j.additivity.foo = false
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Linux/s9y-kaputte-umlaute.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,8 @@
+Title: s9y und die kaputten Umlaute in den Monatsnamen
+Date: 2008-06-16
+
+Mir ist schon seit längerem aufgefallen, daß die Umlaute meiner s9y Installation kaputt waren. In den Blog Einträgen kam das nie so raus, weil dies der erste Eintrag auf deutsch mit Umlauten ist :-)
+
+Die Umlaute in den Monatsnamen waren allerdings kaputt. Ein Eintrag bei den [Farmbloggern](http://www.farmblogger.de/archives/1054-Nochmal-Serendipity-und-Umlaute.html) hat mich dann aber auf die richtige Fährte gebracht: ich hab zwar UTF-8 als Encoding im s9y eingestellt, allerdings habe ich im Sparwahn meine installierten locales ein bißchen sehr ausgedünnt, d.h. es fehlte die Locale `de_DE.UTF-8`.
+
+Dank Gentoo ist das alles kein Problem, `/etc/locale.gen` angepaßt, `locale-gen` laufen lassen, schon wird alles gut ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Maven/assembly-vs-system-scope.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,16 @@
+Title: maven-assembly-plugin vs system scope dependencies
+Date: 2008-04-18
+Lang: en
+
+I was playing around with [Gigaspaces](http://www.gigaspaces.com/) the other day. Since GS jars are not available on any Maven repo and GS comes with everything you need prepackaged I used Maven dependencies with system scope to pull the required jars into my build.
+
+Then I tried to assemble a simple zip to move some code over to another machine and created an assembly descriptor to build a deployment package. One requirement was to keep the Gigaspaces jars in their original form i.e. no renaming, unpacking etc.
+
+To package system scoped dependencies with unchanged filenames use the following snippets in your assembly descriptor:
+
+    :::xml
+    <dependencySet>
+        <outputDirectory>lib</outputDirectory>
+        <scope>system</scope>
+        <outputFileNameMapping>${artifact.file.name}</outputFileNameMapping>
+    </dependencySet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Maven/cross-jdk-project-files-continued.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,50 @@
+Title: Cross JDK project files with Maven (continued)
+Date: 2008-03-21
+Lang: en
+
+In [my last blog entry](|filename|./cross-jdk-project-files.md) I described the steps for cross-JDK Eclipse project files.
+
+Unfortunately there's more Eclipse internals involved when dealing with cross platform issues. It turns out that the correct JRE_CONTAINER for Linux and Windows is
+
+    org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk
+
+but that doesn't work for Mac where it needs to be like this:
+
+    org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/jdk
+
+So for real cross platform project files you need to put the launcher type into a property and override that in a mac specific profile. The final pom will look similar to this
+
+    :::xml
+    <project ...>
+        <properties>
+            <vmtype>org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType</vmtype>
+            <jdkName>jdk1.4</jdkName>
+        </properties>
+
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-eclipse-plugin</artifactId>
+            <version>2.5</version>
+            <configuration>
+                <classpathContainers>
+                    <classpathContainer>
+                        org.eclipse.jdt.launching.JRE_CONTAINER/${vmtype}/${jdkName}
+                    </classpathContainer>
+                </classpathContainers>
+            </configuration>
+        </plugin>
+
+        <profiles>
+            <profile>
+                <id>mac</id>
+                <activation>
+                    <os>
+                        <family>mac</family>
+                    </os>
+                </activation>
+                <properties>
+                    <vmtype>org.eclipse.jdt.internal.launching.macosx.MacOSXType</vmtype>
+                </properties>
+            </profile>
+        </profiles>
+    </project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Maven/cross-jdk-project-files.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,39 @@
+Title: Cross JDK project files with Maven
+Date: 2008-03-19
+Lang: en
+
+Recently we switched the Mule build to be [based on JDK5](http://www.mulesource.org/display/MULECDEV/Building+from+Source) for some modules. This requires the Maven build to be JDK aware. While the JDK auto-activation of profiles get you to build the project from the commandline, IDE integration was a bit of pain.
+
+Now that the [maven-eclipse-plugin](http://maven.apache.org/plugins/maven-eclipse-plugin/) has released v2.5 there's finally support for JDK aware project files. You can add the following to your POMs in order to select a specific JDK for your project
+
+    :::xml
+    <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-eclipse-plugin</artifactId>
+        <configuration>
+            <classpathContainers>
+                <classpathContainer>
+                    org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/thisismyjdk
+                </classpathContainer>
+            </classpathContainers>
+        </configuration>
+    </plugin>
+
+While this solution is better than nothing already I really don't like how you're forced to hard-code the JDK names into the POM. Fortunately, Maven allows you to specify properties and property resolution works in this case, too. So all you have to do is to define a property placeholder instead of your JDK name in config above, like this:
+
+    :::xml
+    <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-eclipse-plugin</artifactId>
+        <configuration>
+            <classpathContainers>
+                <classpathContainer>
+                    org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/${jdk}
+                </classpathContainer>
+            </classpathContainers>
+        </configuration>
+    </plugin>
+
+Then go and define a property in the pom (for the default value). Anyone who uses a different JDK can specify the name to use on the commandline now using
+
+    mvn -Djdk=sun-jdk-1.4.2.14 eclipse:eclipse
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Maven/default-jdk-for-cross-jdk-profiles.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,31 @@
+Title: Default JDK for cross JDK project profiles with Maven
+Date: 2009-04-25
+Lang: en
+
+In my [previous blog post about Cross JDK project files with Maven](|filename|./cross-jdk-project-files-continued.md) I described a way to generate a custom JDK name into the Eclipse project files using the `maven-eclipse-plugin`.
+
+That approach still had one shortcoming: you would either have to rename your JDK to match the default configured in the POM or you would have to give the JDK name on the commandline. Now I stumbled over a [good tip on the maven user's list](http://n2.nabble.com/org.apache.maven.plugins%3Amaven-eclipse-plugin%3A2.7-SNAPSHOT-ignores--maven-compiler-plugin-tp2689287p2689425.html) that allows you to configure a sensible, cross platform default for the JDK.
+
+In short, the trick is not to use a concrete name of a JDK but to specify the name of a Java runtime environment. Eclipse automatically tries to match any configured JDK to an internal list of runtime environments.
+
+So if you put the following into your pom:
+
+    :::xml
+    <properties>
+        <vmtype>org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType</vmtype>
+        <jdk5Name>J2SE-1.5</jdk5Name>
+    </properties>
+    ...
+    <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-eclipse-plugin</artifactId>
+        <version>2.5.1</version>
+        <configuration>
+            <downloadSources>true</downloadSources>
+            <classpathContainers>
+                <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER/${vmtype}/${jdk5Name}</classpathContainer>
+            </classpathContainers>
+        </configuration>
+    </plugin>
+
+Eclipse will assign a JDK5 runtime environment to the project (if it has a matching one configured, of course).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Maven/skipping-tests.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,21 @@
+Title: Skipping test execution but not test compilation
+Date: 2007-05-17
+lang: en
+
+In more complicated Maven builds you might package your tests along with your normal code to use in other modules (see plugin doc to the [maven-jar-plugin](http://maven.apache.org/plugins/maven-jar-plugin/index.html) how to do it). For normal development you might not want to execute the unit tests every time you build. Compiling the source with
+
+    mvn compile
+
+won't build the tests which might fail the whole build as other modules depend on the compiled test classes. So you might be tempted to use
+
+    mvn compile test-compile
+
+which won't do the job either because the tests won't be compiled. At first glance using
+
+    mvn -Dmaven.test.skip=true test
+
+seems to be what you want to do but alas, the tests won't be compiled in this case either. The solution to this problem is to use
+
+    mvn -Dmaven.test.skip.exec=true test
+
+which actually enters the test phase (which in turn compiles the tests) but skips only the execution of the unit tests.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Mule/mule-1.4.1-released.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,5 @@
+Title: Mule 1.4.1 released
+Date: 2007-05-31
+lang: en
+
+Yesterday I worked the whole day on preparing Mule 1.4.1. On top of over 70 Bugfixes since the last release, we offer a graphical installer now. It can be [downloaded from codehaus](http://dist.codehaus.org/mule/distributions/mule-1.4.1-installer.jar).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Mule/mule-1.4.2-released.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,5 @@
+Title: Mule 1.4.2 released
+Date: 2007-08-31
+Lang: en
+
+I see a pattern here ... every three months at the end of the month we release a new Mule version. This time it's Mule 1.4.2 which has a great wealth of bugfixes over the previous version. As usual, [download from Codehaus](http://www.mulesource.com/ccount/click.php?id=39).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Python/timedelta.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,9 @@
+Title: timedelta
+Date: 2009-01-10
+Lang: en
+
+Python comes with a rich libray of classes for dealing with date and time. I was working with datetime.time objects the other day and needed to calculate the difference between to time instances. To my great surprise this isn't easily doable as Python's standard lib only has `timedelta` objects which cannot deal with pure time objects.
+
+So I had to write my own [timedelta](http://xanthippe.dyndns.org/cgi-bin/hgwebdir.cgi/timedelta/shortlog/tip) function which takes two time instances and calculates the difference. The diff will be returned as a time instance.
+
+The source is [publicly available from its mercurial repository](http://xanthippe.dyndns.org/hg/timedelta/shortlog/tip).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/SCM/http-auth-hgwebdir.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,27 @@
+Title: HTTP auth for hgwebdir.cgi
+Tags: Mercurial
+Date: 2009-01-16
+Lang: en
+
+The easiest way to publish your [Mercurial](http://www.selenic.com/mercurial/wiki/) repository via HTTP is probably the use of `hgwebdir.cgi`.
+
+There are quite a number of HOWTOs out there on how to configure hgwebdir.cgi on the web, e.g. [this one](http://www.selenic.com/mercurial/wiki/index.cgi/PublishingRepositories): it talks about configuring hgwebdir.cgi and how to set up "nicer" URLs and authentication for the repository.
+
+While following that instruction I stumbled upon a possible leak in all of the HOWTOs I found out there: they protect the rewritten, "nice" URL to the repository but still allow unauthenticated acces to `/cgi-bin/hgwebdir.cgi`.
+
+The following configuration circumvents this bug:
+
+Step 1: configure nice repository URLs:
+<div class="highlight"><pre>
+ScriptAliasMatch ^/hg(.*) /where/ever/cgi-bin/hgwebdir.cgi$1
+</pre></div>
+
+Step2: use the *LocationMatch* directive to protect all possible accesses to the repository:
+<div class="highlight"><pre>
+&lt;LocationMatch /(cgi-bin/hgwebdir.cgi|hg)/myhgrepository&gt;
+    AuthType Basic
+    ....
+&lt;/LocationMatch&gt;
+</pre></div>
+
+Now you can use either `http://myhost/hg/myhgrepository` or `http://myhost/cgi-bin/hgwebdir.cgi/myhgrepository` to access the repo and you'll get the auth prompt on either URL.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/SCM/subversion-1.7.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,39 @@
+Title: Subversion 1.7
+Date: 2013-01-07
+Tags: Subversion
+Lang: en
+
+Recently I received a portage update to Subversion 1.7. Since this version uses a new working copy layout I was a bit sceptic about how much work upgrading to 1.7 would really be.
+
+So far the update went really smooth. I upgraded the svn client and had to migrate (svn upgrade) the working copy. The working copy is significantly smaller after the migration:
+
+<table border="1" cellpadding="5">
+    <tr>
+        <th>&nbsp;</th>
+        <th>Subversion 1.6</th>
+        <th>Subversion 1.7</th>
+        <th>Size diff</th>
+    </tr>
+    <tr>
+        <td>customer project 1</td>
+        <td>957M</td>
+        <td>676M</td>
+        <td>70.64%</td>
+    </tr>
+    <tr>
+        <td>customer project 2</td>
+        <td>14M</td>
+        <td>7.5M</td>
+        <td>53.57%</td>
+    </tr>
+    <tr>
+        <td>Mule community 3.x</td>
+        <td>342M</td>
+        <td>200M</td>
+        <td>58.48%</td>
+    </tr>
+</table>
+
+SVN operations like running an update or reverting a lot of changes seem to be a bit faster. I can't say if subversion in Eclipse behaves faster or not - haven't my mind made up just yet.
+
+I'll leave the server part and all the related tools (Jenkins, Sventon etc.) for another post later.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/SCM/sventon-changeset-links.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,21 @@
+Title: Mainaining backwards compatability with Sventon 1.4.x changeset links
+Date: 2010-01-11
+Tags: Subversion, Sventon
+Lang: en
+
+I recently updated [Sventon](http://www.sventon.org/) on a production system. While the update itself went quite smooth, I found a minor glitch with the URLs do display a certain changeset.
+
+Sventon 1.4.x used URLs like this
+
+    http://sventon.local/sventon/revinfo.svn?name=REPOSITORY&revision=42
+
+where Sventon 2.x uses the this format
+
+    http://sventon.local/sventon/repos/REPOSITORY/info?revision=42
+
+We send out confirmation mails con commit including the sventon URL to the changeset. So we need the old URLs to work on the new sventon. Luckily, we host everything on an apache web server, mod_rewrite to the rescue!
+
+The following rewrite config rewrites the old format to the new one and forwards it to sventon:
+
+    RewriteCond %{QUERY_STRING} name=(.*)&revision=([0-9]+)
+    RewriteRule /sventon/revinfo.svn http://sventon.local/sventon/repos/%1/info?revision=%2 [L]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Smartphone/kies-woes-again.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,11 @@
+Title: Kies woes again
+Date: 2011-08-10
+Lang: en
+
+In my [last blog post](|filename|./kies-woes.md) I talked about my unsuccessful experience with Kies. Since then I bought a cheap hard drive and put it into my work machine and installed Windows on it. Kies installed fine on that windows installation but much to my disappointment I did not get an Android update to 2.3.x last time I checked.
+
+Today I booted that windows install again. I launched Kies and was surprised to be offered an update to Gingerbread. That warm, fuzzy feeling only lasted for about an hour - the time it took to realize that the software update via Kies just won't work. 
+
+The download process starts and Kies says it's preparing for update now. But then nothing happens - the progress bar animation runs but even waiting for an hour does not show any progress.
+
+Oh well - I guess it's time to start looking into custom flashing tools like Odin and friends.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Smartphone/kies-woes.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,11 @@
+Title: Kies woes
+Date: 2011-03-17
+Lang: en
+
+Ok so now I have this new Android device. After downloading some apps and playing around with it for a few days I am ready for "the real stuff", namely rooting, flashing custom images and all the other hacking fun that's possible with this kind of devices.
+
+The official software that Samsung provides is [Kies](http://www.samsungapps.com/about/onPc.as) which unfortunately only runs on windows. In anticipation of the phone I set up an old Pentium 3 machine with Windows XP to run that software. Kies rather crawls on that machine but hey, it works. 
+
+So I connected the phone, Kies recognized it and offers to update the installed image. This is where the trouble begins: Kies does a backup of all the data on the phone (not that it's much) and starts to flash the new image. It puts the phone in download mode but then fails with a rather generic error message. I let it sit for 30 minutes to make sure I'm not too impatient but that did not help either. I re-tried a couple of times. No success.
+
+I did some googling for the error message and found a support note from Samsung somewhere that a USB 2.0 port is required. My old PC only has USB 1.1 ports. So my next attempt will be to install Windows on a spare drive on my laptop and try again. Stay tuned!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Smartphone/odin-on-virtualbox.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,13 @@
+Title: Odin on VirtualBox
+Date: 2011-08-11
+Lang: en
+
+I flashed an Adroid update earlier today. This was done from Windows using Odin and it worked like a charm.
+
+This approach requires me to boot into Windows, though which is quite an interrupt in the daily procedure. So I thought I'd give Odin on Windows running in a VirtualBox  a try. After some fuzzing around I was able to flash the same update again. Here's the steps I used to prepare my VirtualBox:
+
+* download the Windows drivers for Samsung Galaxy S (e.g. from Softpedia) and install
+* shut down Windows
+* connect the Samsung Galaxy via USB
+* in the VirtualBox Manager define an USB filter<br>![VBox USB settings](|filename|/images/VirtualBoxUSB.png)
+* power up VirtualBox and use Odin to flash
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Smartphone/pptp-vpn.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,9 @@
+Title: PPTP VPN
+Date: 2011-08-13
+Lang: en
+
+I'm a big fan of [OpenVPN](http://www.openvpn.net/) - I use it to tunnel traffic between my home net and the office. I also have an OpenVPN set with a customer site. Since I recently flushed an Android update and rooted the device at the same time I thought about installing OpenVPN on the Android. Searching for "openvpn" in the market comes up with a few search results but investigating a bit more into the use of OpenVPN on an Android is not very encouraging.
+
+So I had a look at a different approach: Android by default allows to create a VPN via PPTP. On the Gentoo forums someone already did an excellent [HOWTO on setting up a PPTP server](http://forums.gentoo.org/viewtopic-t-470858-start-0-postdays-0-postorder-asc-highlight-.html?sid=a5146c2e062b36474e6f1e1083e4acfa) on Gentoo. I tried it and it worked like a charm. The only little annoyance on the Android side is that the name server is lost as soon as I turn on the VPN. I need to dig deeper into the config to see if this is something that can be turned off in the pppd.
+
+As an added bonus, the PPTP setup also works with my wife's iPhone :-)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/Smartphone/the-future-is-here.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,16 @@
+Title: The future is here
+Date: 2011-03-12
+Lang: en
+
+I was resisting the temptations of modern Smartphones for quite some time now. My first impression was that all these devices are toys and/or giant data leaks.
+
+Then my wife got herself an iPhone and by playing around with it I learned two things:
+
+1. a smartphone for me will not be an iPhone. Some features like the auto-capitalization in the web brower's form editor is just annoying when filling out e.g. login fields.
+1. this thing is actually useful! We went on a couple of trips and used [Skobbler](http://itunes.apple.com/us/app/id370144231?mt=8) to navigate. My wife even uses Skype on the iPhone now and we can finally chat even when she's at work.
+
+Then I was out on the road for a couple of trips and I ran into quite a few situations where a smartphone would have been quite handy. So I got interested and browsed around for a model for me. It became clear very quickly that Android is the platform for me: tinker friendly and open. Hey, I might even start to do hack together my first Android app ...
+
+Shopping around on eBay I found a Samsung Galaxy i9000 S for a reasonable price. It took very long until it arrived - I suppose that was mostly because once I made the decision to go for a device I just could not wait to get my hands on it.
+
+So it arrived yesterday. And I'm playing around with it now. Stay tuned I'll be blogging more about my experiences with the device as I go.
Binary file content/images/EclipseCatalogEntry.gif has changed
Binary file content/images/EclipseXmlCatalog.gif has changed
Binary file content/images/VirtualBoxUSB.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/lost-in-translation.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,41 @@
+Title: Lost in translation
+Date: 2013-01-04
+
+Beim Aufräumen habe ich eine Bedienungsanleitung für einen Switch gefunden. Ich habe sie mal 1:1 hier abgetippt ...
+
+<div class="highlight"><pre>
+Vorteilen
+
+Einfach zu installisieren und benutzena
+
+Falsches einfach kontrollieren und korrigieren
+
+Günstig auf dem Tisch benutzen
+
+Ideal für kleines Büro, Büro zu Hause
+
+Eigenschaften
+
+5.8.16.24port N Weg(auto-Zirkulation) 10/100Mbps hohe 
+Geschwindigkeitsschalter
+
+Speicher- und Folgend Schalter steigt die Eigenschaft der Netarbeit
+
+Mit Kontrolle gegen Stau und Wegbreite
+
+Mit Funktion von Aufladen und mehr Beteiliger Aufladen bei hohen 
+Eigenschaften Servers und inter-Schaltung
+
+Günstige Verbindung für Mengelschaltung
+
+Autmatisch teilen und Daten schützen
+
+Auto-polare Kontrolle
+
+Vollständige Schaltungseigenschaften: automatisch Geschwindigkeitskontrolle,
+auto-Zirkulation zwischen zwei Modull, hohe Eigenschaften
+
+Null-Verlieren Laufen kontrollieren
+
+Einfach zunehmen, verbessern und benutzen für Netarbeiter
+</pre></div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/neo-tastaturlayout.md	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,9 @@
+Title: Neo Tastaturlayout
+Date: 2013-01-03
+Lang: en
+
+Blindes tippen mit 10 Fingern halte ich für eine Grundvoraussetzung für jemanden, der täglich seine Stunden vor dem Computer verbringt. Zugegeben, ein bißchen Lernaufwand ist es schon - aber nicht viel! Ich habe das Experiment während des Studiums gemacht und konsequent ab Tag X nur noch mit 10 Fingern getippt. Nach einer Woche ging's schon ganz flüssig, nach einem Monat hat die Tastatur keinerlei Nachdenken mehr erfordert.
+
+Seit längerer Zeit liebäugele ich schon mit alternativen Tastaturlayouts, wie z.B. [Dvorak](http://de.wikipedia.org/wiki/Dvorak-Tastaturbelegung) in der Hoffnung, ein Layout zu finden, mit dem ich durchgängig arbeiten kann. Momentan wechsele ich zwischen deutschem und englischem Layout hin und her. Beim Programmieren sind mir die die eckigen und geschweiften Klammern auf der deutschen Tastatur zu umständlich zu erreichen, für deutsche Texte fehlen mir auf der englischen Tastatur die Umlaute.
+
+Über Weihnachten bin ich dann über das [Neo Tastaturlayout](http://www.neo-layout.org/) gestolpert. Das ist für die deutsche Sprache optimiert und die Klammern scheinen auch nicht sonderlich umständlich zu erreichen zu sein. Bleibt nur noch die Lernkurve, um auf das neue Layout umzustellen ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/develop_server.sh	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,99 @@
+#!/usr/bin/env bash
+##
+# This section should match your Makefile
+##
+PY=python
+PELICAN=pelican
+PELICANOPTS=
+
+BASEDIR=$(pwd)
+INPUTDIR=$BASEDIR/content
+OUTPUTDIR=$BASEDIR/output
+CONFFILE=$BASEDIR/pelicanconf.py
+
+###
+# Don't change stuff below here unless you are sure
+###
+
+SRV_PID=$BASEDIR/srv.pid
+PELICAN_PID=$BASEDIR/pelican.pid
+
+function usage(){
+  echo "usage: $0 (stop) (start) (restart)"
+  echo "This starts pelican in debug and reload mode and then launches"
+  echo "A pelican.server to help site development. It doesn't read"
+  echo "your pelican options so you edit any paths in your Makefile"
+  echo "you will need to edit it as well"
+  exit 3
+}
+
+function alive() {
+  kill -0 $1 >/dev/null 2>&1
+}
+
+function shut_down(){
+  PID=$(cat $SRV_PID)
+  if [[ $? -eq 0 ]]; then
+    if alive $PID; then
+      echo "Killing pelican.server"
+      kill $PID
+    else
+      echo "Stale PID, deleting"
+    fi
+    rm $SRV_PID
+  else
+    echo "pelican.server PIDFile not found"
+  fi
+
+  PID=$(cat $PELICAN_PID)
+  if [[ $? -eq 0 ]]; then
+    if alive $PID; then
+      echo "Killing Pelican"
+      kill $PID
+    else
+      echo "Stale PID, deleting"
+    fi
+    rm $PELICAN_PID
+  else
+    echo "Pelican PIDFile not found"
+  fi
+}
+
+function start_up(){
+  echo "Starting up Pelican and pelican.server"
+  shift
+  $PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS &
+  pelican_pid=$!
+  echo $pelican_pid > $PELICAN_PID
+  cd $OUTPUTDIR
+  $PY -m pelican.server &
+  srv_pid=$!
+  echo $srv_pid > $SRV_PID
+  cd $BASEDIR
+  sleep 1
+  if ! alive $pelican_pid ; then
+    echo "Pelican didn't start. Is the pelican package installed?"
+    return 1
+  elif ! alive $srv_pid ; then
+    echo "pelican.server didn't start. Is the pelican package installed?"
+    return 1
+  fi
+  echo 'Pelican and pelican.server processes now running in background.'
+}
+
+###
+#  MAIN
+###
+[[ $# -ne 1 ]] && usage
+if [[ $1 == "stop" ]]; then
+  shut_down
+elif [[ $1 == "restart" ]]; then
+  shut_down
+  start_up
+elif [[ $1 == "start" ]]; then
+  if ! start_up; then
+    shut_down
+  fi
+else
+  usage
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pelicanconf.py	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*- #
+from __future__ import unicode_literals
+
+AUTHOR = u'Dirk Olmes'
+SITENAME = u'Infoschnipsel und Wissenswertes'
+SITEURL = 'http://xanthippe.dyndns.org/blog'
+
+LOCALE = 'de_DE'
+TIMEZONE = 'Europe/Berlin'
+TYPOGRIFY = True
+
+#THEME = 'notmyidea'
+THEME = '../pelican-themes/built-texts'
+DISPLAY_CATEGORIES_ON_MENU = False
+
+DEFAULT_LANG = u'de_DE'
+DEFAULT_DATE_FORMAT = u'%d.%m.%Y'
+
+# Feed generation is usually not desired when developing
+FEED_ALL_ATOM = None
+CATEGORY_FEED_ATOM = None
+TRANSLATION_FEED_ATOM = None
+
+# Blogroll
+LINKS =  () #('Pelican', 'http://getpelican.com/'),
+#          ('Python.org', 'http://python.org/'),
+#          ('Jinja2', 'http://jinja.pocoo.org/'),
+#          ('You can modify those links in your config file', '#'),)
+
+# Social widget
+SOCIAL = () #('You can add links in your config file', '#'),
+#          ('Another social link', '#'),)
+
+DEFAULT_PAGINATION = 10
+
+# Uncomment following line if you want document-relative URLs when developing
+RELATIVE_URLS = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/publishconf.py	Fri Jun 28 08:48:58 2013 +0200
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*- #
+from __future__ import unicode_literals
+
+# This file is only used if you use `make publish` or
+# explicitly specify it as your config file.
+
+import os
+import sys
+sys.path.append(os.curdir)
+from pelicanconf import *
+
+SITEURL = ''
+RELATIVE_URLS = True
+
+FEED_ALL_ATOM = 'feeds/all.atom.xml'
+CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
+
+DELETE_OUTPUT_DIRECTORY = True
+
+# Following items are often useful when publishing
+
+#DISQUS_SITENAME = ""
+#GOOGLE_ANALYTICS = ""