<?xml version="1.0" encoding="iso-8859-1"?><rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
>

<channel rdf:about="http://samuelsjoberg.com/entries.xml">
    <title>Samuel Sjöberg's Weblog</title>
    <link>http://samuelsjoberg.com</link>
    <description>Web development, life and related topics</description>
    <items>
        <rdf:Seq>
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2011/07/show-and-hide-scrollbars-on-mouseenter-and-mouseleave" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2010/11/turning-of-comments" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2010/01/autocompletion-follow-up" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2009/10/multiline-labels-in-swing" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2009/10/autocompletion-in-swing" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2009/09/escape-jquery-selectors" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2009/05/swing-1.1.1" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2009/04/migration" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2008/11/heap-dump-analysis" />
            <rdf:li rdf:resource="http://samuelsjoberg.com/archive/2008/09/on-demand-javascript" />
        </rdf:Seq>
    </items>
</channel>
<item rdf:about="http://samuelsjoberg.com/archive/2011/07/show-and-hide-scrollbars-on-mouseenter-and-mouseleave">
    <title>Show and hide scrollbars on mouseenter and mouseleave</title>
    <description><![CDATA[<p>I'm experimenting with scrollbars and how to make them look better with a design I'm working on. I really don't like messing too much with the user's settings but  this time the aesthetics call for it.</p>
<p>After trying out a couple of plugins that really didn't do anything for me I decided to switch approach. What if we simply hide the scrollbar when the user doesn't focus on the content? I'm  not sure how users will react but since it can be done, here it is:</p>
<pre><code>// Trick to only show the scrollbar when focused.
$(document).ready(function() {
    $(".sneaky-scrollbar").mouseleave(function() {
        var $this = $(this);
        var padding = parseInt($this.css("padding-right"));
        $this.data("scrollTop", $this.scrollTop());
        $this.css({
            "overflow": "hidden",
            "padding-right": padding + $.getScrollbarWidth(),
            "width": $this.width() - $.getScrollbarWidth()
        });
    }).mouseenter(function() {
        var $this = $(this);
        var padding = parseInt($this.css("padding-right"));
        $this.css({
            "overflow": "auto",
            "padding-right": padding - $.getScrollbarWidth(),
            "width": $this.width() + $.getScrollbarWidth()
        });

        // Reset scrollbar before setting position again,
        // otherwise it won't update its position correctly.
        $this.scrollTop(0).scrollTop($this.data("scrollTop"));
    }).mouseleave();
});</code></pre>
<p>This script depends on the <a href="https://github.com/brandonaaron/jquery-getscrollbarwidth/blob/master/jquery.getscrollbarwidth.js">$.getScrollbarWidth() plugin</a> by <a href="http://brandonaaron.net/">Brandon Aaron</a>. You'll need to include the linked snippet too.</p>
<p>Just add the <code>sneaky-scrollbar</code> class to the element that should hide its scrollbar. I'm assuming it has a fixed height and <code>overflow:auto</code> to begin with.</p>
<p>The code is pretty straight-forward, the only detail worth mentioning is that the scrollbar will have the wrong position once it shows again if scrolled down a bit when hidden. To fix this, I'm storing the scroll position and restore it when showing the scrollbar again. Before restorting it, I'm setting it to zero to ensure that the UI will render the update.
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2011/07/show-and-hide-scrollbars-on-mouseenter-and-mouseleave</link>
    <dc:subject>jQuery, Javascript and DOM</dc:subject>
    <dc:date>2011-07-16T22:13+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2010/11/turning-of-comments">
    <title>Turning of comments</title>
    <description><![CDATA[<p>Today I decided to remove the comments form that's been part of this blog since the beginning. The reason for this is that I write too infrequently to manage the blog and respond to comments. As comments are so unusual months can pass before I notice them. And no, this homegrown blog does not post email notifiers.</p>
<p>So for now comments are off. If I were to write something worth commenting, email will continue to be the best and fasted way to get in touch.
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2010/11/turning-of-comments</link>
    <dc:subject>Blogging</dc:subject>
    <dc:date>2010-11-03T21:27+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2010/01/autocompletion-follow-up">
    <title>Autocompletion follow up</title>
    <description><![CDATA[<p>As pointed out in the <a href="http://samuelsjoberg.com/archive/2009/10/autocompletion-in-swing#c130" title="Comments regarding defect">comments</a> for the <a href="http://samuelsjoberg.com/archive/2009/10/autocompletion-in-swing" title="Original post on autocompletion">Autocompletion in Swing</a> post, there was a problem when providing default values that had a match returned by the <code>CompletionService</code>.</p>
<p>To reproduce the problem, one had to add the following (in bold) to the provided sample code:</p>
<pre><code>input.setDocument(autoCompleteDocument);

// After setting the document, add a default value
<strong>input.setText("Chloe");</strong></code></pre>
<p>The result was an empty text box. If the value instead was <q>Chlo</q> the value in the text box was set to <q>e</q>.</p>
<p>These problems occurred because <code>JTextComponent.setText(String)</code> delegates to <code>Document.insertString</code> where autocompletion happens. The autocompletion code did not handle scenarios when there wasn't any existing text value. The solve the problem, it was necessary to check that some text already existed before applying the completion. In code (changes in bold):</p>
<pre><code>/** {@inheritDoc} */
@Override
public void insertString(int offs, String str, AttributeSet a)
        throws BadLocationException {
    if (str == null || str.length() == 0) {
        return;
    }

    String text = getText(0, offs); // Current text.
    String completion = complete(text + str);
    int length = offs + str.length();
    if (completion != null <strong>&amp;&amp; text.length() > 0</strong>) {
        str = completion.substring(length - 1);
        super.insertString(offs, str, a);
        documentOwner.select(length, getLength());
    } else {
        super.insertString(offs, str, a);
    }
}</code></pre>
<p>I have updated the <a href="http://samuelsjoberg.com/archive/2009/10/autocompletion-in-swing#bin-source" title="Autocompletion binaries and source">binary and source files linked in the original post</a>.
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2010/01/autocompletion-follow-up</link>
    <dc:subject>Java</dc:subject>
    <dc:date>2010-01-19T20:48+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2009/10/multiline-labels-in-swing">
    <title>Multiline labels in Swing with drop shadow</title>
    <description><![CDATA[<p>Continuing the Swing trail, I'm presenting my solution for multiline text labels in Swing. I wrote this during this spring and had simply forgotten about it.</p>
<p>The problem with <code>JLabel</code> is the way in which it supports multiple lines (with wrapping) and centered text. You need to use HTML to activate this functionality. Enabling HTML is pretty simple:</p>
<pre><code>JLabel label = new JLabel(
        "&lt;html&gt;Text that'll wrap if necessary");</code></pre>
<p>To center the text, you'll add the <code>&lt;center&gt;</code> tag to your string. Not pretty, but it gets the job done.</p>
<p>This approach has two drawbacks. First, it will bloat your code or resource strings since you'll need to add the HTML tags somewhere. Second, you'll loose control of how text is being drawn once HTML mode is set. When you use HTML in a Swing component, it will be rendered as a <code>View</code> (see <a href="http://www.j2ee.me/javase/6/docs/api/javax/swing/plaf/basic/BasicHTML.html" title="BasicHTML API"><code>javax.swing.plaf.basic.BasicHTML</code></a> for implementation details).</p>
<h2>It's all about text effects</h2>
<p>The motivation behind implementing multiline support for labels is:</p>
<ul>
<li>Remove the need for using HTML to support multiple lines and alignment.</li>
<li>Improve support for horizontal and vertical text alignment.</li>
<li>Support for custom text effects (such as drop shadow).</li>
</ul>
<p><img src="http://samuelsjoberg.com/files/multiline/dropshadow.png" class="block right dropshadow" style="border:1px solid black;">To be honest, my main motivation was that I needed drop shadow on the text in labels, like on the desktop in OS X and Windows. I tried two solutions, the obvious one with a offscreen image that you apply a gaussian filter on and one that simply painted the text in various offset positions and alpha blends until it looked kind of like a drop shadow.</p>
<p>I'd read about this second approach in the book <a href="http://filthyrichclients.org">Filthy Rich Clients</a> where an example produces a text glow effect in this way. After playing around with this approach I decided to go for it. The results looked better than with a gausiann blur and it felt like a bad idea to have an offscreen image for each drop shadow label in the GUI.</p>
<p>I first implemented the solution as an UI delegate that painted my custom text effect. Happy to see it work, I quickly realized I wanted this effect in combination with multiline support.</p>
<h2>Introducing the general purpose <code>MultiLineLabelUI</code></h2>
<p>A couple (okay, many) hours later, I'd written a general purpose <code>MultiLineLabelUI</code> that enabled any <code>JLabel</code> to support multiline text with line wrapping and preserving hard line breaks. On top of that, I'd made the <code>MultiLineShadowUI</code>, enabling text drop shadow in any <code>JLabel</code>.</p>
<p>To enable support for mulitple lines, simply do this:</p>
<pre><code>JLabel label = new JLabel("Text that'll wrap if necessary");
<strong>label.setUI(MultiLineLabelUI.labelUI);</strong></code></pre>
<p>To use the drop shadow, instead to this:</p>
<pre><code><strong>label.setUI(MultiLineShadowUI.labelUI);</strong></code></pre>
<h3>Details, details, details...</h3>
<p>The multiline labels will only wrap the text when needed. It can be useful to know that the preferred height reported by the UI delegate will be the height required to render lines without any additional wrapping (i.e., hard wraps, inserted by the user, is accounted for). It is not until the label is painted, and the actual width budget is known, that the line wrapping can be correctly computed. The wrapped lines are stored as a client property on the label to avoid unnecessary calculations.</p>
<p>The label listens to dimension changes and recalculate line breaks as the component is resized. Resizing the window on OS X will for example rearrange the line wraps (note: this will not work on windows since component bounds don't seem to be updated correctly when the window is resized).</p>
<h2>Improving alignment in the <code>JLabel</code></h2>
<p>To enable better support for text alignment in the <code>JLabel</code> I've created the <code>MultiLineLabel</code> class. It's using the <code>MultiLineLabelUI</code> by default and adds the properties <code>verticalTextAlignment</code> and <code>horizontalTextAlignment</code>.</p>
<p>This makes it possible (and really easy) to have a multiline label that's for example centered at the bottom of the component.</p>
<pre><code>MultiLineLabel label = new MultiLineLabel(
        "Text that'll wrap if necessary");
<strong>label.setHorizontalTextAlignment(JLabel.CENTER);
label.setVerticalTextAlignment(JLabel.BOTTOM);</strong></code></pre>
<h2>Demo and source</h2>
<p>Feel free to try out the Java Web Start demo. It requires Java 1.5+.</p>
<p></p>
<p>Here's the binary and source distribution.</p>
<ul id="bin-source">
<li><a href="http://samuelsjoberg.com/files/multiline/multiline.jar">Binary JAR-file</a></li>
<li><a href="http://samuelsjoberg.com/files/multiline/multiline_src.zip">Source</a></li>
</ul>
<p>The code is released under the MIT-license, so you're basically free to use it in any ways you find useful.
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2009/10/multiline-labels-in-swing</link>
    <dc:subject>Java</dc:subject>
    <dc:date>2009-10-19T20:37+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2009/10/autocompletion-in-swing">
    <title>Autocompletion in Swing</title>
    <description><![CDATA[<p>In a small application I developed not long ago I wanted to use autocompletion directly inside a text field. The completion was used in a multiline <code>JTextArea</code> and therefore I didn't want any drop-down list displaying the suggestions (this is the approach taken by most existing solutions). Instead I wanted the suggestion to appear as a selected text range when a unique suggestion was found.</p>
<p><img class="block" src="http://samuelsjoberg.com/samples/autocomplete/autocomplete.png" alt="Selected auto completion"></p>
<p>The picture above illustrates the behavior I was looking for. As the user starts to type, additional (completed) characters should be selected. If the user type another character, the suggested completion will be removed and the completion evaluation cycle executes again with the newly added character.</p>
<p>I also decided that erasing a character should not trigger a new completion lookup. Only inserts should result in completions. This behavior is consistent with for example the URL address field in Safari.</p>
<h2>A generic solution</h2>
<p>My goal was to build something generic that can be reused among all <a href="http://java.sun.com/javase/6/docs/api/javax/swing/text/JTextComponent.html"><code>JTextComponent</code>s</a>. To achieve this, I decided to make an autocompleting <code>Document</code> model. The <code>Document</code> is the model in a <code>JTextComponent</code>, containing the characters.</p>
<p>Let's walk through the provided sample to see how the solution works (<a href="#bin-source">source code is attached below</a>).</p>
<pre><code>// Create the completion service.
NameService nameService = new NameService();</code></pre>
<p>First thing we need to do is to create the <code>CompletionService</code>. This service will be used by our <code>AutoCompleteDocument</code> to lookup completions for the already typed characters.</p>
<p>In the sample, we'll use a simple service that offers autocompletion of popular baby names.</p>
<pre><code>// Create the input field.
JTextField input = new JTextField();

// Create the auto completing document model with a
// reference to the service and the input field.
Document autoCompleteDocument = new AutoCompleteDocument(
        nameService, input);</code></pre>
<p>The next step is to create a text field. After that, we create our <code>AutoCompleteDocument</code> and supply it with a reference to the <code>nameService</code> and the text field itself.</p>
<p>The last step required is to set the <code>AutoCompleteDocument</code> on the text field:</p>
<pre><code>input.setDocument(autoCompleteDocument);</code></pre>
<p>That's it. Your done!</p>
<p>But wait, this is not entirely true. You'll also need to provide an implementation of the <code>CompletionService</code>. This is the interface to implement:</p>
<pre><code>public interface CompletionService&lt;T&gt; {

    /**
     * Autocomplete the passed string. The method will return the matching
     * object when one single object matches the search criteria. As long as
     * multiple objects stored in the service matches, the method will return
     * &lt;code&gt;null&lt;/code&gt;.
     *
     * @param startsWith
     *            prefix string
     * @return the matching object or &lt;code&gt;null&lt;/code&gt; if multiple matches are
     *         found.
     */
    T autoComplete(String startsWith);
}</code></pre>
<p>My idea is that the <code>CompletionService</code> interface is implemented as part of the lookup services that e.g. hit the database to look up things. Other possibilities is to build a wrapper service that is populated with a list of possible completions. </p>
<p>The intention is to have a flexible way of providing autocompletion that is properly decoupled from the Swing implementation details.</p>
<h2>Demo and source</h2>
<p>Feel free to try out the Java Web Start demo. It requires Java 1.5+. Note that the sample is case-sensitive when performing autocompletion.</p>
<p></p>
<p>Here's the binary and source distribution.</p>
<ul id="bin-source">
<li><a href="/samples/autocomplete/autocomplete.jar">Binary JAR-file</a></li>
<li><a href="/samples/autocomplete/autocomplete_src.zip">Source</a></li>
</ul>
<p> I'm releasing this to the public domain, without any warranty or support. If you find this useful, I'd gladly hear about it though!
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2009/10/autocompletion-in-swing</link>
    <dc:subject>Java</dc:subject>
    <dc:date>2009-10-18T22:05+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2009/09/escape-jquery-selectors">
    <title>Escape jQuery selectors</title>
    <description><![CDATA[<p>I've started to play with jQuery and needed an easy way to escape my selectors in situations when they're out of my control. A function like this will get the job done.</p>
<pre><code>function escapeExpression(str) {
    return str.replace(/([#;&,\.\+\*\~':"\!\^$\[\]\(\)=>\|])/g, "\\$1");
}</code></pre>
]]></description>
    <link>http://samuelsjoberg.com/archive/2009/09/escape-jquery-selectors</link>
    <dc:subject>jQuery, Javascript and DOM</dc:subject>
    <dc:date>2009-09-03T14:57+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2009/05/swing-1.1.1">
    <title>Swing 1.1.1</title>
    <description><![CDATA[<p>I'm stuck with <a href="http://java.sun.com/products/jfc/download.html" title="JFC download">Swing 1.1.1</a>, trying to create a <a href="http://filthyrichclients.org" title="Filthy Rich Clients (the book)">filthy rich client</a> at work. The reason for being stuck with an obsolete Swing release is that we're developing on <a href="http://nsicom.com/Default.aspx?tabid=138" title="CrE-ME JVM">CrE-ME</a>, a Java ME CDC implementation for Windows CE.</p>
<p>Swing 1.1.1 is missing a lot of features you take for granted when you've been working with recent Swing releases and want to create visual effects. When I started to create the client UI I intended to use gradients and shadows because they're pretty. But wait, let's list some of the things that's missing in Swing 1.1.1</p>
<dl>
<dt><code>AlphaComposite</code></dt>
<dd>Bye bye drop shadow and transparency.</dd>
<dt><code>GradientPaint</code></dt>
<dd>It's true, no gradients... not even a <code>Paint</code> interface.</dd>
<dt><code>AffineTransform</code></dt>
<dd>No scale operations and no rotation on the graphics canvas. Too bad.</dd>
</dl>
<p>The only thing left to do is faking as much as possible. I'm creating faux shadows, rendering solid shadows with colors carefully matched to the background. Gradients can be achieved with a tiled background image slice.
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2009/05/swing-1.1.1</link>
    <dc:subject>Java</dc:subject>
    <dc:date>2009-05-30T11:18+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2009/04/migration">
    <title>Migration, d'oh!</title>
    <description><![CDATA[<p>I just discovered that I'd only partiallly migrated this website to the new host. I switched host 6 months or so ago, but today I noticed that the site was connecting to the database at the old provider.</p>
<p>What bugs me with this is that the reason for switching host was that their database server had such a lousy uptime. Hopefully the site will be a bit faster from now on...
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2009/04/migration</link>
    <dc:subject>Blogging</dc:subject>
    <dc:date>2009-04-06T20:25+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2008/11/heap-dump-analysis">
    <title>Heap dump analysis</title>
    <description><![CDATA[<p>A couple of weeks ago, at work, I had to tackle an <a href="http://java.sun.com/javase/6/docs/api/java/lang/OutOfMemoryError.html" title="OutOfMemoryError Documentation"><code>OutOfMemoryError</code></a> in production. I find these kind of errors especially though to fix since it's often hard to pinpoint the problem based solely on information found in the logs.</p>
<p>I could however finally solve it with help of <a href="http://www.eclipse.org/mat/">Eclipse Memory Analyser</a> (MAT). MAT is a tool to analyze heap dumps. It presents a graphical overview of the heap and makes it easy to drill down to analyze the data. It can also generate leak reports that can help to pinpoint leaky objects. It is also good to know that MAT had no problems handling really large heap dumps (> 512 mb). The by Sun provided <a href="http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html"><code>jhat</code></a> utility ran out of heap space when I tried it. Ironic, I know...</p>
<p>To use MAT, a heap dump is required. To take a heap dump one can use <a href="http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html"><code>jmap</code></a>, a utility program, bundled with the Java 6 JDK. The tricky part is not to take a heap dump, it is to get a chance to take it while the application is still running (remember, mine was in production).
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2008/11/heap-dump-analysis</link>
    <dc:subject>Java</dc:subject>
    <dc:date>2008-11-24T22:41+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
<item rdf:about="http://samuelsjoberg.com/archive/2008/09/on-demand-javascript">
    <title>On Demand Javascript</title>
    <description><![CDATA[<p>In a project I'm working I need to be able to dynamically load small javascript apps. A dynamically created menu should be able to launch the different apps it displays. The menu can be loaded with data sent as JSON from the server side and. Since the menu is dynamic, it isn't possible (and shouldn't be necessary) to load all scripts in advance.</p>
<p>The solution is to load scripts on demand. <a href="http://ajaxpatterns.org/On-Demand_Javascript" title="On demand javascript explained">On demand javascript</a> is neat, but requires that you somehow wait until the script has loaded before you execute it. Multiple solutions for this exists and many seems to use some sort of callback to solve the problem.</p>
<p>My approach is a bit different, yet simple. All apps are loaded through the same object. That object is also responsible for initiating the just loaded app and unload the previous one. This allows me to control the loading process with a simple timer.</p>
<pre><code>var sas = {}; // namespace
sas.app = new function() {

    var current = null;
    var pollInterval;
    var polled;

    function init(name) {
        current = sas.app[name];
        current.init();
    }

    function demand(name) {
        var script = document.createElement('script');
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', sas.app.path + name + '.js');
        document.getElementsByTagName('head')[0].appendChild(script);

        polled = name;
        pollInterval = window.setInterval(poll, 100);
    }

    function poll() {
        if (typeof sas.app[polled] != 'undefined') {
            window.clearInterval(pollInterval);
            init(polled);
        }
    }

    return {
        path : '',

        load : function(name) {
            if (current != null) {
                current.destroy();
            }

            if (typeof this[name] == 'undefined') {
                demand(name);
            } else {
                init(name);
            }
        }
    }
}</code></pre>
<p>This implementation makes the following assumptions about the loaded code.</p>
<ul>
<li>All apps must reside in the same package (i.e., namespace or object). In my example all apps must be in the <code>sas.app</code> package.</li>
<li>All apps must be singletons (i.e. defined as <code>sas.app.MyApp = new function() { ... }</code>).</li>
<li>The file name must match the class name (i.e., <code>MyApp</code> must be saved to the file <code>MyApp.js</code>).</li>
</ul>
<p>I wan't to emphasis that these conditions apply to the current implementation, but I can't see any reason as to why it shouldn't be possible to write a solution that doesn't require all of these conditions to be met.</p>
<p>I've put up a small <a href="/samples/ondemandjs/">proof of concept</a> from where the snipped above is copied. Note that the menu actually is a pluggable app in the same way that the dynamically loaded scripts are. I think that's pretty neat.
</p>
]]></description>
    <link>http://samuelsjoberg.com/archive/2008/09/on-demand-javascript</link>
    <dc:subject>Javascript and DOM</dc:subject>
    <dc:date>2008-09-14T22:58+01:00</dc:date>
    <dc:creator>Samuel Sjöberg</dc:creator>
</item>
</rdf:RDF>