<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xml" href="http://maplesteve.com/feed.xslt.xml"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="http://jekyllrb.com" version="3.3.1">Jekyll</generator><link href="http://maplesteve.com/feed.xml" rel="self" type="application/atom+xml" /><link href="http://maplesteve.com/" rel="alternate" type="text/html" /><updated>2016-12-29T15:28:57+00:00</updated><id>http://maplesteve.com//</id><title type="html">maplesteve.com</title><entry><title type="html">Insert timestamps into Jekyll pages</title><link href="http://maplesteve.com/2014/01/25/Insert-timestamps-into-Jekyll-pages.html" rel="alternate" type="text/html" title="Insert timestamps into Jekyll pages" /><published>2014-01-25T00:00:00+00:00</published><updated>2014-01-25T00:00:00+00:00</updated><id>http://maplesteve.com/2014/01/25/Insert-timestamps-into-Jekyll-pages</id><content type="html" xml:base="http://maplesteve.com/2014/01/25/Insert-timestamps-into-Jekyll-pages.html">&lt;p&gt;Though my &lt;a href=&quot;/2014/01/19/maplesteve-now-powered-by-jekyll.html&quot;&gt;Jekyll setup&lt;/a&gt; runs perfectly smooth, I wanted to have some kind of control, if (all) pages are re-generated when I make changes to the CSS or other minor things that aren’t immediately visible.&lt;/p&gt;

&lt;p&gt;So I wanted to have a timestamp of the page generation.
To have re-usable code, I was looking for a custom Liquid tag for that purpose and found a gist by blakesmith: &lt;a href=&quot;https://gist.github.com/blakesmith/449509&quot;&gt;render_time.rb&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since I wanted the timestamp only as a comment in the HTML pages, I made a small change. Besides that, it’s the same - so thanks a lot &lt;a href=&quot;https://github.com/blakesmith&quot;&gt;blakesmith&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Here’s render_time.rb:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;module Jekyll
  class RenderTimeTag &amp;lt; Liquid::Tag

    def initialize(tag_name, text, tokens)
      super
      @text = text
    end

    def render(context)
      &quot;&amp;lt;!-- #{@text} #{Time.now} --&amp;gt;&quot;
    end
  end
end

Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Just drop it in your &lt;code class=&quot;highlighter-rouge&quot;&gt;_plugins&lt;/code&gt; folder and add the line (enclosed in Liquid open and close tags; which I can’t do here, because the Liquid tag would then be executed… :-/)&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;render_time Page generated at:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to e.g. your &lt;code class=&quot;highlighter-rouge&quot;&gt;default.html&lt;/code&gt;.&lt;/p&gt;</content><category term="digital" /><category term="tech" /><category term="jekyll" /><summary type="html">Though my Jekyll setup runs perfectly smooth, I wanted to have some kind of control, if (all) pages are re-generated when I make changes to the CSS or other minor things that aren’t immediately visible.</summary></entry><entry><title type="html">maplesteve.com now powered by Jekyll</title><link href="http://maplesteve.com/2014/01/19/maplesteve-now-powered-by-jekyll.html" rel="alternate" type="text/html" title="maplesteve.com now powered by Jekyll" /><published>2014-01-19T00:00:00+00:00</published><updated>2014-01-19T00:00:00+00:00</updated><id>http://maplesteve.com/2014/01/19/maplesteve-now-powered-by-jekyll</id><content type="html" xml:base="http://maplesteve.com/2014/01/19/maplesteve-now-powered-by-jekyll.html">&lt;p&gt;I write blog post now for more than five years. One thing that I observe - like any other person on the net who blogs - is that I blog less often than I want to.&lt;/p&gt;

&lt;p&gt;Why is that? I assume it’s when the ‘process’ is cumbersome, you’ll blog less. Especially when it comes to write short posts about this and that. (Amateur) blogging should be easy and not a multi-step login-create-publish-admin job.&lt;/p&gt;

&lt;p&gt;I tried different engines in the past; from hand-made HTML, via Wordpress to &lt;a href=&quot;https://github.com/maplesteve/secondcrack&quot;&gt;secondcrack&lt;/a&gt; lately. Now I reached the next stage: &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Jekyll brings everything I want:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;understands Markdown files:&lt;/em&gt;
&lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; makes WYSYWIG editors obsolete. All you need is a simple text editor and you can write blog posts. In my setup it’s the really great &lt;a href=&quot;http://www.markdownpro.com&quot;&gt;MarkdownPro&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;generates static pages:&lt;/em&gt;
In the not too distant past, &lt;em&gt;dynamic&lt;/em&gt; web sites where state of the art. Today we know, that (at least) for blogs you don’t need all the stuff that PHP gives you. And for the rest, there is still JavaScript. Static web sites do their job without putting any pressure on the system. You don’t have to fear memory limits, CPU load or the like.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;processes text files:&lt;/em&gt;
I don’t want to use a browser to write a blog post. I want to write a text file and save it to a synced directory. Since I run an &lt;a href=&quot;http://owncloud.org&quot;&gt;owncloud&lt;/a&gt; instance for various other stuff, it was really easy to create a new directory, let owncloud do the syncing and tell Jekyll to take this as its source directory. BTW: images etc. are handled exactly the same way. Can’t be more simple.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;automatically updates the site on changes:&lt;/em&gt;
When I’m finished with writing a post, I want it to be live within seconds. I don’t want to &lt;code class=&quot;highlighter-rouge&quot;&gt;push&lt;/code&gt; a repository. I don’t want to login somewhere just to hit the publish button. Too many steps. Jekyll has a &lt;code class=&quot;highlighter-rouge&quot;&gt;--watch&lt;/code&gt; command which is all you need, to have it constantly watch for changes of anything in the source directory and it’ll start to (re-)generate your site.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;provides a simple template system:&lt;/em&gt;
If you want a unique layout for your Wordpress blog, you’ll face a steep learning curve. It’s no surprise, that there’s a whole industry selling &lt;em&gt;professional&lt;/em&gt; templates for WP. Even with secondcrack - which is definitely more simple than the most other systems - I found myself investing way too much into developing scripts. Jekyll bases it’s output on &lt;a href=&quot;http://docs.shopify.com/themes/liquid-basics&quot;&gt;Liquid&lt;/a&gt; tags and though I didn’t know anything about this only some days ago, I quickly felt comfortable and produced results in little time.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jekyll is so simple and quick. Setup is done literally in minutes. Just type &lt;code class=&quot;highlighter-rouge&quot;&gt;gem install jekyll&lt;/code&gt; into your terminal and you’re basically done. No database setup, no user management. Now make one or two changes in the &lt;code class=&quot;highlighter-rouge&quot;&gt;_config.yml&lt;/code&gt; file, point your web-servers document root to the output directory (or vice versa), save a markdown file in the &lt;code class=&quot;highlighter-rouge&quot;&gt;_posts&lt;/code&gt; directory and you’re live.&lt;/p&gt;

&lt;p&gt;If my theory works, you’ll see some more posts on this site than in the past. So stay tuned.&lt;/p&gt;</content><category term="digital" /><category term="tech" /><category term="jekyll" /><summary type="html">I write blog post now for more than five years. One thing that I observe - like any other person on the net who blogs - is that I blog less often than I want to.</summary></entry><entry><title type="html">Google creeps into (your) Nest</title><link href="http://maplesteve.com/2014/01/14/Google-creeps-into-your-Nest.html" rel="alternate" type="text/html" title="Google creeps into (your) Nest" /><published>2014-01-14T00:00:00+00:00</published><updated>2014-01-14T00:00:00+00:00</updated><id>http://maplesteve.com/2014/01/14/Google-creeps-into-your-Nest</id><content type="html" xml:base="http://maplesteve.com/2014/01/14/Google-creeps-into-your-Nest.html">&lt;p&gt;Google buys thermostat maker Nest for &lt;a href=&quot;http://investor.google.com/releases/2014/0113.html&quot;&gt;$3.2 billion&lt;/a&gt; in cash.&lt;/p&gt;

&lt;p&gt;In a Q&amp;amp;A section of the &lt;a href=&quot;https://nest.com/blog/2014/01/13/nest-google-and-you/&quot;&gt;announcement post&lt;/a&gt; on Nest’s company blog, the new member of the Google family tries to play down the privacy concerns of it’s users that fear, that Google will know a lot of additional things about them in the near future (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Will Nest customer data be shared with Google?&amp;lt;/br&amp;gt;
Our privacy policy clearly limits the use of customer information to providing and improving Nest’s products and &lt;strong&gt;services&lt;/strong&gt;. We’ve always taken privacy seriously and this will not change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So far, so good. But what would be, if the &lt;strong&gt;services&lt;/strong&gt; integrate a Google product? Nest has an answer to that also:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Will Nest and Google products work with each other?&amp;lt;/br&amp;gt;
Nest’s product line obviously caught the attention of Google and I’m betting that there’s a lot of cool stuff we could do together, but nothing to share today.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In plain text: Yes, we will integrate with Google services and yes, then your data will be a part of the galactic Google database.&lt;/p&gt;

&lt;p&gt;Remember: Google is an advertising company and makes a living from knowing as much as possible about you. So, dear Nest user, be prepared to get some advices from AdSense regarding your room temperature, or some hints about a better timing for &lt;a href=&quot;http://support.nest.com/article/What-is-Auto-Away&quot;&gt;your drive to work&lt;/a&gt;.&lt;/p&gt;</content><category term="digital" /><category term="google" /><category term="privacy" /><summary type="html">Google buys thermostat maker Nest for $3.2 billion in cash.</summary></entry><entry><title type="html">Apple WWDC 2013 - New AppleTV World?</title><link href="http://maplesteve.com/2013/06/07/wwdc-2013.html" rel="alternate" type="text/html" title="Apple WWDC 2013 - New AppleTV World?" /><published>2013-06-07T00:00:00+00:00</published><updated>2013-06-07T00:00:00+00:00</updated><id>http://maplesteve.com/2013/06/07/wwdc-2013</id><content type="html" xml:base="http://maplesteve.com/2013/06/07/wwdc-2013.html">&lt;p&gt;This years developer conference to be held by Apple beginning June, 10th is teased with a headline:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Where a whole new world is developing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Apple wouldn’t be Apple, if there wasn’t a deeper meaning in this headline. So I started to think about, what this years headline could hint us to.&lt;/p&gt;

&lt;p&gt;Everybody talks about the known things, previews of iOS 7 and MacOS 10.9 the successor of Mountain Lion, some (minor) hardware refreshes etc. And everyone seems to be sure, that we shouldn’t hold our breath hoping for a new iPhone or iPad.
What do these things have to do with the 2013 claim? Nothing.&lt;/p&gt;

&lt;p&gt;Does the ‘new world’ mean to focus on the invasion of the iPhone into China or India, which are countries being obviously late to the iPhone party? No - we saw a China-focus in last years iOS 6. Dedicate the most import event of the Apple calendar to welcome the huge market of India? Surely not.&lt;/p&gt;

&lt;p&gt;What actually wonders me, is that noone talks about the iWatch or Apple TV (aka iTV) in context with WWDC - o.k. iWatch seems too far away, but what about the “new world” that’s “developing” simply a &lt;em&gt;new world&lt;/em&gt; of iOS devices, that weren’t opened for the developers until now: the Apple TV?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Therefore my money would be on the introduction of the APIs for bringing all the great content and apps to the big screen via an App Store for the Apple TV.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ll see.&lt;/p&gt;</content><category term="digital" /><category term="tech" /><category term="apple" /><summary type="html">This years developer conference to be held by Apple beginning June, 10th is teased with a headline:</summary></entry><entry><title type="html">Jenkins Plugin: Create Jira issues for failed unit tests with JiraTestResultReporter</title><link href="http://maplesteve.com/2013/03/24/create-jira-issues-from-jenkins.html" rel="alternate" type="text/html" title="Jenkins Plugin&amp;#58; Create Jira issues for failed unit tests with JiraTestResultReporter" /><published>2013-03-24T00:00:00+00:00</published><updated>2013-03-24T00:00:00+00:00</updated><id>http://maplesteve.com/2013/03/24/create-jira-issues-from-jenkins</id><content type="html" xml:base="http://maplesteve.com/2013/03/24/create-jira-issues-from-jenkins.html">&lt;p&gt;&lt;strong&gt;Update: The pluginis now available in the official Jenkins plugin repository!&lt;/strong&gt;
&lt;strong&gt;Details here: &lt;a href=&quot;https://wiki.jenkins-ci.org/display/JENKINS/JiraTestResultReporter-plugin&quot;&gt;https://wiki.jenkins-ci.org/display/JENKINS/JiraTestResultReporter-plugin&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Testing your code with unit tests is a fine thing and using a &lt;a href=&quot;https://jenkins-ci.org&quot; title=&quot;Jenkins CI&quot;&gt;Jenkins CI server&lt;/a&gt; for those tests is even better. Automatically creating issues in Jira for failed tests makes the workflow complete. This is what the JiraTestResultReporter plugin for Jenkins does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This plugin examines the build job for failed unit tests. It work by using the Jenkins internal test result management for detecting failed tests. Just let Jenkins run and report your unit tests e.g. by adding the “Publish xUnit test results report” to your build job.&lt;/p&gt;

&lt;p&gt;If JiraTestResultReporter detects &lt;em&gt;new&lt;/em&gt; failed tests, it will create an issue for every test case in Jira:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/media/jirascreen_500.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;

&lt;p&gt;As long as my hosting request to get the plugin included in the official plugin repository of Jenkins CI is pending, you’ll have to either build the plugin yourself or you can download the recent snapshot:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Build yourself
    &lt;ul&gt;
      &lt;li&gt;Download or clone the source code from &lt;a href=&quot;https://github.com/maplesteve/JiraTestResultReporter&quot; title=&quot;JiraTestResultReporter on GitHub&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;cd&lt;/code&gt; into the downloaded directory&lt;/li&gt;
      &lt;li&gt;execute the maven command &lt;code class=&quot;highlighter-rouge&quot;&gt;mvn package&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Download the plugin package from &lt;a href=&quot;http://maplesteve.com/media/2013/03/JiraTestResultReporter.hpi&quot; title=&quot;JiraTestResultReporter.hpi&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Upload the built or downloaded file &lt;code class=&quot;highlighter-rouge&quot;&gt;JiraTestResultReporter.hpi&lt;/code&gt; to the plugins directory of your Jenkins installation or use the plugin uploader from &lt;em&gt;Manage Jenkins&lt;/em&gt; -&amp;gt; &lt;em&gt;Manage Plugins&lt;/em&gt; -&amp;gt; “Advanced” tab&lt;/li&gt;
  &lt;li&gt;restart Jenkins&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;In the build job add JiraTestResultReporter as a post-build action.&lt;/li&gt;
  &lt;li&gt;Configure the plugin for this job. See the help boxes for details. I have the dedicated Jira user ‘jenkins_reporter’ for these kinds of automatic reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/media/configscreen_500.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Build your job. If there are failed tests, the plugin will create issues for them. This will (should!) happen only once for every new failed tests; new in this case means tests that have an age of exactly 1.&lt;/li&gt;
&lt;/ul&gt;</content><category term="digital" /><category term="howto" /><category term="dev" /><category term="jenkins" /><summary type="html">Update: The pluginis now available in the official Jenkins plugin repository!
Details here: https://wiki.jenkins-ci.org/display/JENKINS/JiraTestResultReporter-plugin</summary></entry><entry><title type="html">Jenkins PMD analysis for Objective-C with oclint</title><link href="http://maplesteve.com/2013/03/10/jenkins-pmd-analysis-for-objective-c-with-oclint.html" rel="alternate" type="text/html" title="Jenkins PMD analysis for Objective-C with oclint" /><published>2013-03-10T00:00:00+00:00</published><updated>2013-03-10T00:00:00+00:00</updated><id>http://maplesteve.com/2013/03/10/jenkins-pmd-analysis-for-objective-c-with-oclint</id><content type="html" xml:base="http://maplesteve.com/2013/03/10/jenkins-pmd-analysis-for-objective-c-with-oclint.html">&lt;p&gt;&lt;a href=&quot;http://oclint.org&quot;&gt;OCLint&lt;/a&gt; is a static code analyzer for C, C++ and Objective-C. You’ll find it &lt;a href=&quot;https://github.com/oclint/oclint&quot;&gt;here&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;Today the maintainer merged my pull request in which I made an additional reporter module which writes a PMD-style file.&lt;/p&gt;

&lt;p&gt;Having that, you can let the PMD Analysis run by Jenkins reports about your coding sins.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/media/oclint-pmd-report_500.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s how to set the whole thing up:&lt;/p&gt;

&lt;h5 id=&quot;setup-oclint&quot;&gt;1. Setup OCLint&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;Get the latest source code from GitHub&lt;/li&gt;
  &lt;li&gt;Follow the &lt;a href=&quot;http://docs.oclint.org/en/dev/intro/build.html&quot;&gt;instructions&lt;/a&gt; to build OCLint&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://docs.oclint.org/en/dev/intro/installation.html&quot;&gt;Install&lt;/a&gt; it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;build-file-for-jenkins&quot;&gt;2. Build file for Jenkins&lt;/h5&gt;
&lt;p&gt;The invocation of OCLint is configured in a build.xml. I’ll walk you through this one.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;project&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;fooProject&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;default=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;build-fooProject&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;environment=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;target&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;build-fooProject&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;depends=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;prepare,oclint&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;target&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;clean&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;description=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Cleanup build artifacts&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;delete&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;dir=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;${basedir}/build/oclint&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt; 
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/target&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;target&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;prepare&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;depends=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;clean&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;description=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Prepare for build&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;mkdir&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;dir=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;${basedir}/build/oclint&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt; 
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/target&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Standard stuff so far. Setup the project and prepare the directories.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;target name=&quot;oclint&quot;&amp;gt;
	&amp;lt;antcall target=&quot;xcodebuild-clean&quot; /&amp;gt;
	&amp;lt;antcall target=&quot;xcodebuild&quot; /&amp;gt;
	&amp;lt;antcall target=&quot;oclint-xcodebuild&quot; /&amp;gt;
	&amp;lt;antcall target=&quot;oclint-parse&quot; /&amp;gt;
&amp;lt;/target&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Our &lt;code class=&quot;highlighter-rouge&quot;&gt;oclint&lt;/code&gt; invocation has four steps.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;target name=&quot;xcodebuild-clean&quot;&amp;gt;
	&amp;lt;exec executable=&quot;xcodebuild&quot;&amp;gt;
		&amp;lt;arg value=&quot;-configuration&quot; /&amp;gt;
		&amp;lt;arg value=&quot;Release&quot; /&amp;gt;
		&amp;lt;arg value=&quot;clean&quot; /&amp;gt;
	&amp;lt;/exec&amp;gt;
&amp;lt;/target&amp;gt;  This ensures, that we have a clean build.
 
&amp;lt;target name=&quot;xcodebuild&quot;&amp;gt;
	&amp;lt;exec executable=&quot;xcodebuild&quot; output=&quot;xcodebuild.log&quot;&amp;gt;
		&amp;lt;arg value=&quot;-configuration&quot; /&amp;gt;
		&amp;lt;arg value=&quot;Release&quot; /&amp;gt;
		&amp;lt;arg value=&quot;-arch&quot; /&amp;gt;
		&amp;lt;arg value=&quot;armv7&quot; /&amp;gt;
		&amp;lt;arg value=&quot;CODE_SIGN_IDENTITY=&quot; /&amp;gt;
		&amp;lt;arg value=&quot;CODE_SIGNING_REQUIRED=NO&quot; /&amp;gt;
	&amp;lt;/exec&amp;gt;
&amp;lt;/target&amp;gt; Now we build our project. The important part is `output=&quot;xcodebuild.log&quot;`; this will write the output to a file which will be fed to a helper script in the next step.

&amp;lt;target name=&quot;oclint-xcodebuild&quot;&amp;gt;
	&amp;lt;exec executable=&quot;PATH_TO_oclint-release/bin/oclint-xcodebuild&quot; /&amp;gt;
&amp;lt;/target&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;oclint-xcodebuild&lt;/code&gt; reads the &lt;code class=&quot;highlighter-rouge&quot;&gt;xcodebuild.log&lt;/code&gt; and produces the file &lt;code class=&quot;highlighter-rouge&quot;&gt;compile_commands.json&lt;/code&gt;. This file holds all the compiler stuff and is the input format for &lt;code class=&quot;highlighter-rouge&quot;&gt;oclint&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;target name=&quot;oclint-parse&quot;&amp;gt;
	&amp;lt;exec executable=&quot;PATH_TO_oclint-release/bin/oclint-json-compilation-database&quot;&amp;gt;
		&amp;lt;env key=&quot;PATH&quot; value=&quot;${env.PATH}:PATH_TO_oclint-release/bin/&quot;/&amp;gt;
	 	&amp;lt;arg value=&quot;--&quot; /&amp;gt;
	 	&amp;lt;arg value=&quot;-o=${basedir}/build/oclint/lint.xml&quot; /&amp;gt;
	 	&amp;lt;arg value=&quot;-report-type=pmd&quot; /&amp;gt;
	 	&amp;lt;arg value=&quot;-stats&quot; /&amp;gt;
	&amp;lt;/exec&amp;gt;
&amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt; Finally, this is where the magic happens. `oclint-json-compilation-database` feeds the `compile_commands.json` file to `oclint`. The `-report-type=pmd` flag tells it to use the PMDReporter, which will write its findings to a file called `lint.xml`.
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Be sure to consult the documentation for OCLint and its helpers for the various arguments you can provide.&lt;/p&gt;

&lt;p&gt;I created a gist with the whole file &lt;a href=&quot;https://gist.github.com/maplesteve/5129782&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h5 id=&quot;configure-the-job-in-jenkins&quot;&gt;3. Configure the job in Jenkins&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;Go to the configuration page of your job in Jenkins.&lt;/li&gt;
  &lt;li&gt;Add a build-step with the build.xml&lt;/li&gt;
  &lt;li&gt;Add a post-build action “Publish PMD analysis results” and enter the path to the xml file we produced. In this example it would be &lt;code class=&quot;highlighter-rouge&quot;&gt;build/oclint/lint.xml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;build-the-job&quot;&gt;4. Build the job&lt;/h5&gt;
&lt;p&gt;If everything worked, you should have a new section “PMD Warnings” in your build information and after a few builds the trend chart will be produced.&lt;/p&gt;</content><category term="digital" /><category term="jenkins" /><category term="howto" /><category term="dev" /><category term="oclint" /><summary type="html">OCLint is a static code analyzer for C, C++ and Objective-C. You’ll find it here on GitHub.</summary></entry><entry><title type="html">Xcode &amp;amp; LLDB: Need to know what’s calling your method?</title><link href="http://maplesteve.com/2013/03/08/xcode_and_lldb__need_to_know_whats_calling_your_method.html" rel="alternate" type="text/html" title="Xcode &amp; LLDB&amp;#58; Need to know what's calling your method?" /><published>2013-03-08T00:00:00+00:00</published><updated>2013-03-08T00:00:00+00:00</updated><id>http://maplesteve.com/2013/03/08/xcode_and_lldb__need_to_know_whats_calling_your_method</id><content type="html" xml:base="http://maplesteve.com/2013/03/08/xcode_and_lldb__need_to_know_whats_calling_your_method.html">&lt;p&gt;&lt;strong&gt;Recently I wondered why a specific method gets called way more often than I would expect. I wanted to find out, which other methods call this.&lt;/strong&gt;&lt;/p&gt;

&lt;h5 id=&quot;the-usual-approach&quot;&gt;The usual approach…&lt;/h5&gt;
&lt;p&gt;… would be to set a breakpoint at the beginning of the method and look at the stack trace of Xcode’s ‘&lt;em&gt;Debug Session&lt;/em&gt;’ pane for the calling methods. Surely a tedious way. You’ll have to write down the caller and the context that led to the caller.&lt;/p&gt;

&lt;h5 id=&quot;a-better-way&quot;&gt;A better way…&lt;/h5&gt;

&lt;p&gt;… is to utilize the breakpoint capabilities of Xcode or - more specifically - of &lt;em&gt;LLDB&lt;/em&gt;, the new debugger which comes with the new compiler &lt;em&gt;CLANG&lt;/em&gt;.
In this approach, you’ll also set a breakpoint at the beginning of the called method. Then select the breakpoint label and ctrl-click to get a small pop-up which let’s you define the &lt;em&gt;behavior&lt;/em&gt; of the breakpoint:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/media/Xcode_500.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Three simple things to do:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Select ‘Debugger Command’ from the ‘Action’ pop-up&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Enter ‘&lt;code class=&quot;highlighter-rouge&quot;&gt;bt 10&lt;/code&gt;’ into the text field&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Check ‘Automatically continue after evaluating’&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;’&lt;code class=&quot;highlighter-rouge&quot;&gt;bt&lt;/code&gt;’ is a command that LLDB understands. It’s the short for ‘backtrace’. The following number defines the number of steps the trace will have. In this case ‘&lt;code class=&quot;highlighter-rouge&quot;&gt;bt 10&lt;/code&gt;’  instructs the debugger to print the last 10 method calls before it hit the breakpoint. Exactly what we need.
The check we set in the third step has the simple effect, that the program keeps running, which is nice if you’re testing e.g. the GUI part of an application.&lt;/p&gt;

&lt;p&gt;After you ran the program (don’t forget to enable breakpoints) you’ll find the logged traces in the debugger console:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;* thread #1: fooApp -[WMSCollectionViewController collectionView:didSelectItemAtIndexPath:] at WMSCollectionViewController+CollectionViewDelegate.m:41, stop reason = breakpoint 2.1

frame #0: fooApp -[WMSCollectionViewController collectionView:didSelectItemAtIndexPath:] at WMSCollectionViewController+CollectionViewDelegate.m:41

#1: fooApp -[WMSCollectionViewController updateCollectionView] at WMSCollectionViewController.m:158

#2: fooApp -[WMSCollectionViewController reloadDocuments:] at WMSCollectionViewController.m:136

#3: Foundation __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0

#4: CoreFoundation ___CFXNotificationPost_block_invoke_0

#5: CoreFoundation _CFXNotificationPost

#6: Foundation -[NSNotificationCenter postNotificationName:object:userInfo:]

#7: fooApp -[WMSAppDelegate checkDocumentsOpenState] at WMSAppDelegate+DocumentSetup.m:247

#8: fooApp -[WMSAppDelegate observeValueForKeyPath:ofObject:change:context:] at WMSAppDelegate+DocumentSetup.m:232

#9: Foundation NSKeyValueNotifyObserver
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;(I deleted some information for this purpose; so try it yourself - you’ll find a lot of useful things in there!)&lt;/p&gt;

&lt;p&gt;So what can we learn from the output?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The first line marks the method that triggered the trace (the one, we set our breakpoint) and describes the thread which is useful if you have to wade through multi-threaded logic of your application.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;As this is a trace from the viewpoint of the called method where we set the breakpoint, the frames are in reverse order. They are prefixed with &lt;code class=&quot;highlighter-rouge&quot;&gt;frame&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Next is the framework or library the called method belongs to. In the example, there are method call from &lt;code class=&quot;highlighter-rouge&quot;&gt;fooApp&lt;/code&gt; which is the example app itself or the frameworks (&lt;code class=&quot;highlighter-rouge&quot;&gt;UIKit&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Fondation&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;CoreFoundation&lt;/code&gt; etc.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;So, now we know, that initially a KVO (Key-Value-Observing) led to the call of our examined method. KVO triggered a Notification which called &lt;code class=&quot;highlighter-rouge&quot;&gt;reloadDocuments:&lt;/code&gt;. In &lt;code class=&quot;highlighter-rouge&quot;&gt;reloadDocuments:&lt;/code&gt; the method &lt;code class=&quot;highlighter-rouge&quot;&gt;updateCollectionView&lt;/code&gt; got called and finally from that one we landed at our investigation method.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;As a further convenience the file and line number from which a method are called is also printed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cool, eh?&lt;/p&gt;</content><category term="digital" /><category term="howto" /><category term="dev" /><summary type="html">Recently I wondered why a specific method gets called way more often than I would expect. I wanted to find out, which other methods call this.</summary></entry><entry><title type="html">Passbook: NFC ohne NFC?</title><link href="http://maplesteve.com/2012/09/05/passbook.html" rel="alternate" type="text/html" title="Passbook&amp;#58; NFC ohne NFC?" /><published>2012-09-05T00:00:00+00:00</published><updated>2012-09-05T00:00:00+00:00</updated><id>http://maplesteve.com/2012/09/05/passbook</id><content type="html" xml:base="http://maplesteve.com/2012/09/05/passbook.html">&lt;p&gt;AppleInsider about an &lt;a href=&quot;http://bit.ly/NMS5U1&quot;&gt;interesting approach&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Apple’s new Passbook feature in iOS 6 isn’t just a coupon app; it’s a framework that enables retailers to develop smart apps for transactions, without relying on new Near Field Communications (NFC) hardware to do so.&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="digital" /><category term="apple" /><summary type="html">AppleInsider about an interesting approach:</summary></entry><entry><title type="html">Install HeaderDoc on Ubuntu</title><link href="http://maplesteve.com/2012/02/26/install-headerdoc-on-ubuntu.html" rel="alternate" type="text/html" title="Install HeaderDoc on Ubuntu" /><published>2012-02-26T00:00:00+00:00</published><updated>2012-02-26T00:00:00+00:00</updated><id>http://maplesteve.com/2012/02/26/install-headerdoc-on-ubuntu</id><content type="html" xml:base="http://maplesteve.com/2012/02/26/install-headerdoc-on-ubuntu.html">&lt;p&gt;HeaderDoc is a very versatile document generation system by Apple, which can handle a wide variety of languages. The latter was the reason for me to give it a chance, since other generator either work only with a specific language or produce (for me) unusable results.
HeaderDoc works fine with PHP, JavaScript etc. which makes it a perfect tool for web projects - otherwise you’ll have to deal with different tools, which can’t produce combined docs.&lt;/p&gt;

&lt;p&gt;HeaderDocs comes with Mac OS X (at least when you have Xcode installed). But I wanted to use it on my Ubuntu server where Jenkins does all the integration stuff.&lt;/p&gt;

&lt;p&gt;Apple has open-sourced HeaderDoc and you can find it on Apple’s open source website at &lt;a href=&quot;http://www.opensource.apple.com/&quot;&gt;http://www.opensource.apple.com/&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;downlaod--unpack&quot;&gt;Downlaod &amp;amp; unpack&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;The most recent version is in the Mac OS X 10.7.3 tree; copy this link and download the archive into a directory on your Linux machine: &lt;a href=&quot;http://www.opensource.apple.com/tarballs/headerdoc/headerdoc-8.8.38.tar.gz&quot;&gt;http://www.opensource.apple.com/tarballs/headerdoc/headerdoc-8.8.38.tar.gz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;wget http://www.opensource.apple.com/tarballs/headerdoc/headerdoc-8.8.38.tar.gz&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;unpack with &lt;code class=&quot;highlighter-rouge&quot;&gt;tar -xvzf headerdoc-8.8.38.tar.gz&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;cd&lt;/code&gt; into the created directory&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;requirements&quot;&gt;Requirements&lt;/h4&gt;
&lt;p&gt;HeaderDocs is basically a PERL script, so you’ll need a recent PERL installation. This should be the case on every ‘normal’ system, so I won’t dive into installing PERL here. Besides that, HeaderDoc needs some other libraries. If they’re not installed, run the following commands:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;FreezeThaw&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo apt-get install libfreezethaw-perl&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;libxml2-dev&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo apt-get install libxml2-dev&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;xmllint (from the libxml2-utils)&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo apt-get install libxml2-utils&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wiki.debian.org/CheckInstall&quot;&gt;checkinstall&lt;/a&gt; (not necessary for this installation, but you should alway use checkinstall, when manually installing software, which circumvents the Ubuntu/Debian package system!)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo apt-get install checkinstall&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;build--install&quot;&gt;Build &amp;amp; install&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;make clean&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;make&lt;/code&gt; - This will actually compile the software &amp;amp; libraries and performs a lot of tests. Three of them (‘class 3’, ‘header 5’, ‘template 1’) failed during my install, but I didn’t notice any false behaviour using HeaderDoc.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo checkinstall make realinstall&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ready. You should have now two files in &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/bin/&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;headerdoc2html - the processor itself&lt;/li&gt;
  &lt;li&gt;gatherheaderdoc - a utility to combine the docs in an overview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll find the documentaion for HeaderDoc on &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/HeaderDoc/&quot;&gt;Apple’s developer site&lt;/a&gt;&lt;/p&gt;</content><category term="digital" /><category term="howto" /><category term="dev" /><summary type="html">HeaderDoc is a very versatile document generation system by Apple, which can handle a wide variety of languages. The latter was the reason for me to give it a chance, since other generator either work only with a specific language or produce (for me) unusable results.
HeaderDoc works fine with PHP, JavaScript etc. which makes it a perfect tool for web projects - otherwise you’ll have to deal with different tools, which can’t produce combined docs.</summary></entry><entry><title type="html">Mac OS X: WebDAV protocol not supported (solved)</title><link href="http://maplesteve.com/2012/02/12/mac-os-x-webdav-protocol-not-supported-solved.html" rel="alternate" type="text/html" title="Mac OS X&amp;#58; WebDAV protocol not supported (solved)" /><published>2012-02-12T00:00:00+00:00</published><updated>2012-02-12T00:00:00+00:00</updated><id>http://maplesteve.com/2012/02/12/mac-os-x--webdav-protocol-not-supported-solved</id><content type="html" xml:base="http://maplesteve.com/2012/02/12/mac-os-x-webdav-protocol-not-supported-solved.html">&lt;p&gt;When you see in your console log messages like&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;11.02.12 17:36:41,009 webdavfs_agent: network_mount: WebDAV protocol not supported; file: /SourceCache/webdavfs/webdavfs-322/	mount.tproj/webdav_network.c; line: 3131
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;this doesn’t necessarily mean, that Mac OS X suddenly stopped understanding the WebDAV server it could mount minutes ago. In fact it’s more likely, that the problem lies on the server side and the DAV config is incomplete.&lt;/p&gt;

&lt;p&gt;Since the Mac OS web DAV client isn’t really chatty about what’s going (wr)on(g) here, you should use a unix WebDAV client (e.g. &lt;a href=&quot;http://www.webdav.org/cadaver/&quot;&gt;cadaver&lt;/a&gt;) for debugging.&lt;/p&gt;

&lt;p&gt;The client can properly connect to the DAV server which you can see by the result code (“200”) in the apache log file:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;OPTIONS / HTTP/1.1&quot; 200 250 &quot;-&quot; &quot;cadaver/0.23.3 neon/0.29.0&quot;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But the client tells you, that there’s something wrong anyhow, which you can verify again in the apache log:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;PROPFIND / HTTP/1.1&quot; 405 508 &quot;-&quot; &quot;cadaver/0.23.3 neon/0.29.0&quot;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The result code “405” means “Method not allowed”. Does the client try to talk to the DAV server via incorrect command and Mac OS therefore reports the “not supported” message? No, it’s just that the DAV server doesn’t know how to handle the DAV protocol properly.&lt;/p&gt;

&lt;p&gt;So go and check your server config. When I upgraded Plesk from version 10.2 to 10.4, the upgrade process didn’t catch all the relevant vhost.conf files and therefore left me with a half configured DAV server. The problem is, that Plesk 10.4 uses a different directory layout under &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/www/vhosts/&lt;/code&gt; and I had to manually copy and configure the &lt;code class=&quot;highlighter-rouge&quot;&gt;vhost.conf&lt;/code&gt; files to their new places.&lt;/p&gt;</content><category term="digital" /><category term="os_x" /><summary type="html">When you see in your console log messages like</summary></entry></feed>
