<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Owncloud on Dragotins Blog</title>
    <link>https://dragotin.codeberg.page/tags/owncloud/</link>
    <description>Recent content in Owncloud on Dragotins Blog</description>
    <image>
      <title>Dragotins Blog</title>
      <url>https://dragotin.codeberg.page/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://dragotin.codeberg.page/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.152.1</generator>
    <language>en</language>
    <copyright>2022-2026 Klaas Freitag - Content is licensed under the Creative Commons Attribution 4.0 International License</copyright>
    <lastBuildDate>Wed, 27 Dec 2023 21:06:12 +0100</lastBuildDate>
    <atom:link href="https://dragotin.codeberg.page/tags/owncloud/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Setup ownCloud Infinite Scale Real Quick</title>
      <link>https://dragotin.codeberg.page/posts/quickocis/</link>
      <pubDate>Wed, 27 Dec 2023 21:06:12 +0100</pubDate>
      <guid>https://dragotin.codeberg.page/posts/quickocis/</guid>
      <description>Test Infinite Scale on x86-Linux, Raspberry and Mac in no time.</description>
      <content:encoded><![CDATA[<p>The <a href="https://owncloud.com">ownCloud</a> product <a href="https://owncloud.com/infinite-scale-4-0">Infinite Scale</a> is going to be released in version five soon. The latest stable version is <a href="https://github.com/owncloud/ocis/releases/tag/v4.0.5">4.0.5</a> and I am sure everybody checked it out already and is blown away by it&rsquo;s performance, elegance and ease of use.</p>
<p>No, not yet?</p>
<p>Ok, well, in that case, here comes rescue: With the little script described here, it becomes really easy to start Infinite Scale to check it out on your computer. It makes it really easy and quick for you, without Linux super admin powers whatsoever.</p>
<p>To use it, you just need to open a terminal on your machine and cd into a directory somewhere in your home where you can afford to host some bytes.</p>
<p>Without further preparation, you type the following command line (NOT as user root please):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -L https://owncloud.com/runocis.sh <span class="p">|</span> /bin/bash
</span></span></code></pre></div><p>What it does is that it automatically pulls the latest stable version of Infinite Scale from the <a href="https://download.owncloud.com/">official download server</a> of ownCloud onto your computer. For that, it creates a configuration and a start script, and starts the server. The script detects the platform on which your&rsquo;re running to download the right binary version. It also looks up the hostname and configures the installation for that name.</p>
<p>Once the server was started Infinite Scale&rsquo;s web client can be accessed by pointing a browser to the URL <code>https://your-hostname:9200/</code>. Since this is an installation for testing purposes, it does not have a proper certificate configured. That is why your browser is complaining about the cert, and you have to calm it. And indeed, that is one of the reasons why you&rsquo;re not supposed to use this sneak peak in production or even exposed to the internet.</p>
<p>For the nerds, the script does not really do magic, but just curls the golang single binary of Infinite Scale down to the machine into a sandbox directory, chmod it to be executable and create a working config and a data dir. All happens with the priviledges of the logged in user, no sudo or root involved. You&rsquo;re encouraged to double check the install script using for example the command <code>curl -L https://owncloud.com/runocis.sh | less</code> - of course you never should trust anybody running scripts from the internet on your machine.</p>
<p>If the server is stopped by pressing Ctrl-C, it later can be started again by the script <code>runocis.sh</code> that was kindly left behind in the sandbox as well.</p>
<p>The installer was tested on these three platforms: 64 bit AMD/Intel CPU based Linux machines, 64 bit Raspberry Pi with Raspbian OS and MacOSX. The flavour of Linux should not make a difference.</p>
<p>If you encounter a problem with the script or if you have suggestions to improve, please find it in my <a href="https://github.com/dragotin/thisnthat/tree/master/scripts">this&rsquo;n that</a> section on Github. I am happy to receive issue reports or pull requests.</p>
<p>For further information and setups suitable for production please refer to <a href="https://doc.owncloud.com/ocis/next/">the Infinite Scale documentation</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Open VFS Framework for the free Desktop</title>
      <link>https://dragotin.codeberg.page/posts/openvfs/</link>
      <pubDate>Fri, 29 Sep 2023 12:46:57 +0200</pubDate>
      <guid>https://dragotin.codeberg.page/posts/openvfs/</guid>
      <description>&lt;p&gt;A few days ago Volker Krause posted &lt;a href=&#34;https://www.volkerkrause.eu/2023/09/23/nextcloud-conference-2023.html&#34;&gt;this blog&lt;/a&gt; about the &lt;a href=&#34;https://nextcloud.com/&#34;&gt;Nextcloud&lt;/a&gt; conference - a very interesting read.&lt;/p&gt;
&lt;p&gt;One of the topics is the VFS (Virtual Filesystem-) API for the Linux desktop. Indeed that is a topic for us at &lt;a href=&#34;https://www.owncloud.com&#34;&gt;ownCloud&lt;/a&gt; as well, and I like to share our perspective on it, discussing it in the scope of the free desktop.&lt;/p&gt;
&lt;p&gt;The topic is very important, as “syncing” of data from and to cloud storages has changed over time. From having all files mirrored from client to server and vice versa, it has now shifted to keep all files in the cloud, and have them as so called placeholders on the desktop. That means that most files on the client appear with size zero to save space, but the complete filesystem structure is available.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A few days ago Volker Krause posted <a href="https://www.volkerkrause.eu/2023/09/23/nextcloud-conference-2023.html">this blog</a> about the <a href="https://nextcloud.com/">Nextcloud</a> conference - a very interesting read.</p>
<p>One of the topics is the VFS (Virtual Filesystem-) API for the Linux desktop. Indeed that is a topic for us at <a href="https://www.owncloud.com">ownCloud</a> as well, and I like to share our perspective on it, discussing it in the scope of the free desktop.</p>
<p>The topic is very important, as “syncing” of data from and to cloud storages has changed over time. From having all files mirrored from client to server and vice versa, it has now shifted to keep all files in the cloud, and have them as so called placeholders on the desktop. That means that most files on the client appear with size zero to save space, but the complete filesystem structure is available.</p>
<p>If a user starts to interact with such a dehydrated file, the content is of the file is downloaded transparently utilizing the cloud system client, for example ownClouds desktop client. The same happens when an application accesses such a file. As a result, the placeholders look and behave like the normal filesystem we are used to.</p>
<p>On Windows and on MacOSX, the problem is kind of solved. Both have added APIs to their OS that can be used to implement the access of data on the cloud.</p>
<p>On Linux, we do not have this kind of API yet. That means that it is close to impossible to implement this user experience. Volker already said that desktop environment specific solutions probably do not scale, which I agree with.</p>
<p>At ownCloud we have looked into the implementation of a specific <a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">FUSE file system</a>. That should certainly be possible, and is probably a part of the solution, but is considerable effort because of the asynchronous nature of the topic. Given that the market share of Linux desktop systems is pretty small it is not attractive for companies to invest a lot into a Linux only system. Here the power of community could make a difference again.</p>
<p>It would be best if we as open source community would come up with a shared solution as a free desktop standard, that might be oriented on one of the existing APIs, maybe the MacOSX File Provider API: A library and little framework that the linux desktop environments can work with abstracting the VFS.</p>
<p>While collaborating on that, all data clouds could implement the bindings to their storage. With that, the extra implementation efforts for the Linux solution hopefully wouldnt be dramatic any more.</p>
<p>Let’s call this system openVFS as a work title. How can we evolve it? I’d like to invite all interested parties to discuss in <a href="https://github.com/dragotin/openvfs">this temporary Github repo</a> to collect ideas and opinions. There is also a little <strong>experimental</strong> code.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownClouds Virtual Files on the Linux Desktop</title>
      <link>https://dragotin.codeberg.page/posts/ownclouds-virtual-files-on-the-linux-desktop/</link>
      <pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/ownclouds-virtual-files-on-the-linux-desktop/</guid>
      <description>&lt;p&gt;it could already be read somewhere that 2021 will be the year of Linux on the desktop :-D&lt;/p&gt;
&lt;p&gt;Fine with me. Just to support that, I did a little hackery over XMas to improve the support for ownClouds virtual file system on the Linux Desktop.&lt;/p&gt;
&lt;h3 id=&#34;what-are-virtual-files&#34;&gt;What are Virtual Files?&lt;/h3&gt;
&lt;p&gt;In professional usecases, users often have a huge amount of data stored in &lt;a href=&#34;https://owncloud.com&#34;&gt;ownCloud&lt;/a&gt;. Syncing these completely to the desktop computer or laptop would be too much and costly in bandwidth and harddisk space. That is why most mature file sync solutions came up with the concept of virtual files. That means that users have the full structure with directories and files mirrored to their local machines, but have placeholder of the real files in the local file manager.&lt;br&gt;
The files, however, are not on the disk. They get downloaded on demand.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>it could already be read somewhere that 2021 will be the year of Linux on the desktop :-D</p>
<p>Fine with me. Just to support that, I did a little hackery over XMas to improve the support for ownClouds virtual file system on the Linux Desktop.</p>
<h3 id="what-are-virtual-files">What are Virtual Files?</h3>
<p>In professional usecases, users often have a huge amount of data stored in <a href="https://owncloud.com">ownCloud</a>. Syncing these completely to the desktop computer or laptop would be too much and costly in bandwidth and harddisk space. That is why most mature file sync solutions came up with the concept of virtual files. That means that users have the full structure with directories and files mirrored to their local machines, but have placeholder of the real files in the local file manager.<br>
The files, however, are not on the disk. They get downloaded on demand.</p>
<p>That way, users see the full set of data virtually, but save time and space of files they never will need on the local system.</p>
<h3 id="the-owncloud-experience">The ownCloud Experience</h3>
<p><a href="https://owncloud.com/virtual-file-system/?gclid=EAIaIQobChMIh4vEoqfw7QIVnAUGAB0zHwkTEAAYASAAEgKJYvD_BwE">ownCloud has innovated</a> on that topic a while ago, and meanwhile support virtual files mainly on Windows, because there is an elaborated system API to work with placeholder files. As we do not have this kind of API on Linux desktops yet, ownCloud desktop developers implemented the following solution for Linux: The virtual files are 1 byte sized files with the name of the original file, plus a suffix &ldquo;.owncloud&rdquo; to indicate that they are virtual.</p>
<p>That works, yet has one downside: Most file managers do not display these placeholder files nicely, because they loose the MIME type information. Also, downloading and also freeing up the space of downloaded files is not integrated. To summarize, there is a building block missing to make that useful on Linux.</p>
<h3 id="elokab-files-manager-with-owncloud">Elokab-files-manager with ownCloud</h3>
<p>I was wondering if it wasn&rsquo;t possible to change an existing file manager to support the idea of virtual files. To start trying I found the <a href="https://github.com/zakariakov/elokab-files-manager">Elokab-files-manager</a> which is a very compact, yet feature rich file manager built on Qt. It is built with very few other dependencies. Perfect to start playing around with.</p>
<p>In <a href="https://github.com/zakariakov/elokab-files-manager/compare/master%E2%80%A6dragotin:master">my Github fork</a> you can see the patches I came up with to make Elokab-fm understand ownCloud virtual files.</p>
<h3 id="new-functionality">New Functionality</h3>
<p>The screenshot shows the changes in the icon view of Elokab-fm.</p>
<p><a href="https://dragotin.files.wordpress.com/2020/12/ksnip_20201228-090721.png"><img alt="Screenshot Elokab-fm" loading="lazy" src="https://dragotin.files.wordpress.com/2020/12/ksnip_20201228-090721.png?w=872"></a></p>
<p>Screenshot of patched Elokab-files-manager to support ownCloud Virtual Files.</p>
<p>To make that possible, Elokab-fm now pulls some information from the ownCloud Sync Client config file and connects to the sync client via local socket to share some information. That means, that the sync client needs to run to make that work.</p>
<p>Directories that are synced with ownCloud now show an cloud overlay in the center (1).</p>
<p>The placeholder files (2) which are not present on the local hard drive indicate that by showing a little cloud icon bottom right. However, other than before, they are displayed with their correct name and mime-type, which makes this already much more useful.</p>
<p>Files, which are on the local disk as the image (3) show their thumbnail as usual.</p>
<p>In the side panel (4) there are a few details added: The blue box on the bottom indicates that the file manager is connected to the sync client. For the selected virtual file (2), it shows an button that downloads the file if clicked which would turn it into a non virtual, local file. There is also an entry in the context menu to achieve that.</p>
<h3 id="status">Status</h3>
<p>This is just a proof of concept and a little XMas fun project. There are bugs, and the implementation is not complete. And maybe <a href="https://github.com/jnweiger">Jürgen</a>&rsquo;s idea of a <a href="https://github.com/jnweiger/OCFFS">FUSE layer</a> to improve that is the better approach, but anyway. It just shows what is possible with virtual files also on Linux.</p>
<p>If you like that idea, please let us know or send a little PR if you like. We do not wanna fail providing our share on the year of the Linux Desktop, right? ;-)</p>
<p>Building it from <a href="https://github.com/dragotin/elokab-files-manager">my Github branch</a> should be fairly easy, as it only depends on Qt.</p>
<p>For openSUSE users, I will provide some test packages in <a href="https://build.opensuse.org/package/show/home:kfreitag/elokab-files-manager">my home project</a> on <a href="https://build.opensuse.org/">Open Build Service</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud and CryFS</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-and-cryfs/</link>
      <pubDate>Sat, 17 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-and-cryfs/</guid>
      <description>&lt;p&gt;It is a great idea to encrypt files on client side before uploading them to an ownCloud server if that one is not running in controlled environment, or if one just wants to act defensive and minimize risk.&lt;/p&gt;
&lt;p&gt;Some people think it is a great idea to include the functionality in the sync client.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t agree because it combines two very complex topics into one code base and makes the code difficult to maintain. The risk is high to end up with a kind of code base which nobody is able to maintain properly any more. So let&amp;rsquo;s better avoid that for ownCloud and look for alternatives.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It is a great idea to encrypt files on client side before uploading them to an ownCloud server if that one is not running in controlled environment, or if one just wants to act defensive and minimize risk.</p>
<p>Some people think it is a great idea to include the functionality in the sync client.</p>
<p>I don&rsquo;t agree because it combines two very complex topics into one code base and makes the code difficult to maintain. The risk is high to end up with a kind of code base which nobody is able to maintain properly any more. So let&rsquo;s better avoid that for ownCloud and look for alternatives.</p>
<p>A good way is to use a so called encrypted overlay filesystem and let ownCloud sync the encrypted files. The downside is that you can not use the encrypted files in the web interface because it can not decrypt the files easily. To me, that is not overly important because I want to sync files between different clients, which probably is the most common usecase.</p>
<p>Encrypted overlay filesystems put the encrypted data in one directory called the cipher directory. A decrypted representation of the data is mounted to a different directory, in which the user works.</p>
<p>That is easy to setup and use, and also in principle good to use with file sync software like ownCloud because it does not store the files in one huge container file that needs to be synced if one bit changes as other solutions do.</p>
<p>To use it, the cypher directory must be configured as local sync dir of the client. If a file is changed in the mounted dir, the overlay file system changes the crypto files in the cypher dir. These are synced by the ownCloud client.</p>
<p>One of the solutions I tried is <a href="https://www.cryfs.org/">CryFS</a>. It works nicely in general, but is unfortunately very slow together with ownCloud sync.</p>
<p>The reason for that is that CryFS is chunking all files in the cypher dir into 16 kB blocks, which are spread over a set of directories. It is very beneficial because file names and sizes are not reconstructable in the cypher dir, but it hits on one of the weak sides of the ownCloud sync. ownCloud is traditionally a bit slow with many small files spread over many directories. That shows dramatically in a test with CryFS: Adding eleven new files with a overall size of around 45 MB to a CryFS filesystem directory makes the ownCloud client upload for 6:30 minutes.</p>
<p>Adding another four files with a total size of a bit over 1MB results in an upload of 130 files and directories, with an overall size of 1.1 MB.</p>
<p>A typical change use case like changing an existing office text document locally is not that bad. CryFS splits a 8,2 kB big LibreOffice text doc into three 16 kB files in three directories here. When one word gets inserted, CryFS needs to create three new dirs in the cypher dir and uploads four new 16 kB blocks.</p>
<p>My personal conclusion: CryFS is an interesting project. It has a nice integration in the KDE desktop with <a href="https://www.youtube.com/watch?v=5vxlIXnuVuM">Plasma Vault</a>. Splitting files into equal sized blocks is good because it does not allow to guess data based on names and sizes. However, for syncing with ownCloud, it is not the best partner.</p>
<p>If there is a way how to improve the situation, I would be eager to learn. Maybe the size of the blocks can be expanded, or the number of directories limited? Also the upcoming ownCloud sync client <a href="https://central.owncloud.org/t/desktop-client-2-6-0-alpha1-released/19694">version 2.6.0</a> again has optimizations in the discovery and propagation of changes, I am sure that improves the situation.</p>
<p>Let&rsquo;s see what other alternatives can be found.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Eighty Percent ownCloud</title>
      <link>https://dragotin.codeberg.page/posts/eighty-percent-owncloud/</link>
      <pubDate>Sun, 23 Dec 2018 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/eighty-percent-owncloud/</guid>
      <description>&lt;p&gt;Recently the German computer magazin &lt;a href=&#34;https://www.heise.de/ct/&#34;&gt;C&amp;rsquo;t&lt;/a&gt; posted an article about file sync solutions (&lt;a href=&#34;https://www.heise.de/select/ct/2018/23/1541731692932357&#34;&gt;&amp;ldquo;Unter eigener Regie&amp;rdquo;&lt;/a&gt;, C&amp;rsquo;t 23, 2018) with native sync clients. The article was pretty positive about the FOSS solution of&amp;hellip; &lt;a href=&#34;https://nextcloud.com/install/#install-clients&#34;&gt;Nextcloud&lt;/a&gt;! I was wondering why they had not choosen &lt;a href=&#34;https://owncloud.org/&#34;&gt;ownCloud&amp;rsquo;s&lt;/a&gt; &lt;a href=&#34;https://owncloud.org/download/#owncloud-desktop-client&#34;&gt;client&lt;/a&gt; as my feeling is that ownCloud is way more busy and innovative developing the desktop client for file synchronization together with community.&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_943&amp;rdquo; align=&amp;ldquo;alignright&amp;rdquo; width=&amp;ldquo;338&amp;rdquo;]&lt;img alt=&#34;lines_changed&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/eighty-percent-owncloud/images/lines_changed-e1545567922486.png&#34;&gt; Code lines changed as of Nov. 10, 2018[/caption]&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Recently the German computer magazin <a href="https://www.heise.de/ct/">C&rsquo;t</a> posted an article about file sync solutions (<a href="https://www.heise.de/select/ct/2018/23/1541731692932357">&ldquo;Unter eigener Regie&rdquo;</a>, C&rsquo;t 23, 2018) with native sync clients. The article was pretty positive about the FOSS solution of&hellip; <a href="https://nextcloud.com/install/#install-clients">Nextcloud</a>! I was wondering why they had not choosen <a href="https://owncloud.org/">ownCloud&rsquo;s</a> <a href="https://owncloud.org/download/#owncloud-desktop-client">client</a> as my feeling is that ownCloud is way more busy and innovative developing the desktop client for file synchronization together with community.</p>
<p>[caption id=&ldquo;attachment_943&rdquo; align=&ldquo;alignright&rdquo; width=&ldquo;338&rdquo;]<img alt="lines_changed" loading="lazy" src="/posts/eighty-percent-owncloud/images/lines_changed-e1545567922486.png"> Code lines changed as of Nov. 10, 2018[/caption]</p>
<p>That motivated me to do some investigation what the Nextcloud client actually consists of (at due date Nov. 10, 2018). I was looking into the NC desktop client <a href="https://github.com/nextcloud/desktop">git repoository</a> grouped the numbers of commits of people that can be associated clearly to either the ownCloud- or Nextcloud project, or to &ldquo;other communities&rdquo; or machine commits. Since the number of commits could be misleading (maybe some commits are huge?) I did the same exercise with numbers of changed lines of code.</p>
<p>When looking on the changed lines, the first top six contributors to the Nextcloud desktop client are only active in the ownCloud project. Number seven is an &ldquo;other community&rdquo; contributor whos project the client was based on in the beginning. Number eight to eleven go to Nextcloud, with a low percentage figure.</p>
<p>[caption id=&ldquo;attachment_944&rdquo; align=&ldquo;alignnone&rdquo; width=&ldquo;666&rdquo;]<img alt="commits" loading="lazy" src="/posts/eighty-percent-owncloud/images/commits.png"> # of commits to the Nextcloud Desktop repository as of Nov. 10, 2018[/caption]</p>
<p>As a result, far more than 80% of the changed lines of the Nextcloud client is actually work that ownClouders did (not considering the machine commits). In the past, and also today. The number would be even higher if it considered all the commits that go into the NC repo with an NC author, but are actually ownCloud patches where the original author got lost on the way by merging them through a NC branch. It looks like the Nextcloud developers were actually adding less commits to their client than all &ldquo;other community&rdquo; developers so far.</p>
<p>No wonder, it is a fork, you might think, and that is of course true. However, to my taste these numbers are not reflecting a &ldquo;constructive&rdquo; fork driving things forward when we talk about sync technology.</p>
<p>That is all fine, and I am proud that the work we do in ownCloud is actually stimulating two projects, with different focus areas nowadays. On the other hand, I would appreciate if the users of the technology would take a closer look to understand who really innovates, drives things forward and also fixes the <em>nasty</em> bugs in the stack. As a matter of fairness, that should be acknowledged. That is the motivation that keeps free software contributors busy and communities proud.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Raspberry based Private Cloud?</title>
      <link>https://dragotin.codeberg.page/posts/raspberry-based-private-cloud/</link>
      <pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/raspberry-based-private-cloud/</guid>
      <description>&lt;p&gt;Here is something that might be a little outdated already, but I hope it still adds some interesting thoughts. The rainy Sunday afternoon today finally gives the opportunity to write this little blog.&lt;/p&gt;
&lt;p&gt;Recently an &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt; fork was coming up with a little shiny box with one harddisk, that can be complemented with a Rapsberry Pi and their software, promoting that as &lt;em&gt;your private cloud&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;While I like the idea of building a private cloud for everybody (I started to work on ownCloud because of that idea back in the days), I do not think that this example of gear is a good solution for private cloud.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Here is something that might be a little outdated already, but I hope it still adds some interesting thoughts. The rainy Sunday afternoon today finally gives the opportunity to write this little blog.</p>
<p>Recently an <a href="http://www.owncloud.org">ownCloud</a> fork was coming up with a little shiny box with one harddisk, that can be complemented with a Rapsberry Pi and their software, promoting that as <em>your private cloud</em>.</p>
<p>While I like the idea of building a private cloud for everybody (I started to work on ownCloud because of that idea back in the days), I do not think that this example of gear is a good solution for private cloud.</p>
<p>In fact I believe that throwing this kind of implementations on the table is especially unfortunate because if we come up with too many not optimal proposals, we waste the  willingness of users to try it. This idea should not target geeks who might be willing to try ideas on and on. The idea of the private cloud needs to target at every computer user who wants to store data safely, but does not want to care about longer than ever necessary. And with them I fear we only have very little chances, if one at all, to introduce them to a private cloud solution before they go back to something <em>that simply works</em>.</p>
<p>Here are some points why I think solutions like the proposed one are not good enough:</p>
<h4 id="hardware">Hardware</h4>
<p>That is nothing new: The hardware of the Raspberry Pi was not designed for this kind of usecases. It is simply too weak to drive ownCloud, which is an PHP app plus database server that has some requirements on the servers power. Even with PHP7, which is faster, and the latest revisions of the mini computer, it might look ok in the beginning, but after all the neccessary bells and whistles were added to the installation and data run in, it will turn out that the CPU power is simply not enough. Similar weaknesses are also true for the networking capabilities for example.</p>
<p>A user that finds that out after a couple of weeks after she worked with the system will remain angry and probably go (back) to solutions that we do not fancy.</p>
<h4 id="one-disk-setup">One Disk Setup</h4>
<p>The solution comes as one disk setup: How secure can data be that is on one single hardisk? A seriously engineered solution should at least recommend a way to store the data more securely and/or backup, like on an at homes NAS for example. That can be done, but requires manual work and might require more network capabilities and CPU power.</p>
<h4 id="advanced-networking">Advanced Networking</h4>
<p>Last, but for me the most important point: Having such a box in the private network requires to drill a whole in the firewall, to allow port forwarding. I know, that is nothing unusual for experienced people, and in theory little problem.</p>
<p>But for people who are not so interested, that means they need to click in the interface of their router on a button that they do not understand what it does, and maybe even insert data by following an documentation that they have to believe. (That is not very much different from downloading a script from somewhere letting it do the changes which I would not recommend as well). Doing mistakes here could potentially have a huge impact for the network behind the router, without that the person who did it even has an understanding for.</p>
<p>Also DynDNS is needed: That is also not a big problem in theory and for geeks, but in practice it is nothing easily done.</p>
<p>With a good solution for private cloud, it should not be necessary to ask for that kind of setups.</p>
<h4 id="where-to-go-from-here">Where to go from here?</h4>
<p>There should be better ways to solve this problems with ownCloud, and I am sure ownCloud is the right tool to solve that problem. I will share some thought experiments that we were doing some time back to foster discussion on how we can use the Raspberry Pi with ownCloud (because it is a very attractive piece of hardware) and solve the problems.</p>
<p>This will be subject of an upcoming blog here, please stay tuned.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Recent ownCloud Releases</title>
      <link>https://dragotin.codeberg.page/posts/recent-owncloud-releases/</link>
      <pubDate>Tue, 04 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/recent-owncloud-releases/</guid>
      <description>&lt;p&gt;Even though we just had the nice and successful &lt;a href=&#34;https://owncloud.org/blog/you-rocked-the-owncloud-conference-2016/&#34;&gt;ownCloud Contributor Conference&lt;/a&gt; there have quite some &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt; releases happened recently. I like to draw your attention to this for a moment, because some people seem to fail to see how active the ownCloud community actually is at the moment.&lt;/p&gt;
&lt;p&gt;There has been the big &lt;a href=&#34;https://owncloud.com/owncloud-9-1-enterprise-edition-now-available/&#34;&gt;enterprise release 9.1&lt;/a&gt; on September 20th, but that of course came along with community releases which are in the focus here.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Even though we just had the nice and successful <a href="https://owncloud.org/blog/you-rocked-the-owncloud-conference-2016/">ownCloud Contributor Conference</a> there have quite some <a href="http://www.owncloud.org">ownCloud</a> releases happened recently. I like to draw your attention to this for a moment, because some people seem to fail to see how active the ownCloud community actually is at the moment.</p>
<p>There has been the big <a href="https://owncloud.com/owncloud-9-1-enterprise-edition-now-available/">enterprise release 9.1</a> on September 20th, but that of course came along with community releases which are in the focus here.</p>
<p>We had <a href="http://download.owncloud.org/community/owncloud-8.0.15.tar.bz2">server release 8.0.15</a>, <a href="http://download.owncloud.org/community/owncloud-8.1.10.tar.bz2">server release 8.1.10</a>, <a href="http://download.owncloud.org/community/owncloud-8.2.8.tar.bz2">server release 8.2.8</a> and <a href="http://download.owncloud.org/community/owncloud-9.0.5.tar.bz2">release 9.0.5</a>. There are maintenance releases for the older major versions, needed to fix bugs on installations that still run on these older versions. We deliver them following <a href="https://github.com/owncloud/core/wiki/Maintenance-and-Release-Schedule">this plan</a>.</p>
<p>The latest and greatest server release is <a href="http://download.owncloud.org/community/owncloud-9.1.1.tar.bz2">release 9.1.1</a> that has all the hardening that also went into the enterprise releases.</p>
<p>Aside a ton of bugfixes that you find listed in the <a href="https://owncloud.org/changelog/#latest9.1">changelog</a> there have also been interesting changes which drive innovation. To pick just one example: <a href="https://github.com/owncloud/core/issues/25482">The data fingerprint property</a>. It enables the clients to detect if the server got a backup restored, and saves changes on the clients to conflict files if needed. This is a nice example of solutions which are based on feedback from enterprise customers community running ownCloud, who help with reporting problems and proposing solutions.</p>
<p>Talking about professional usage of ownCloud: Of course also all the server release are available as <a href="https://owncloud.org/install/#tab-packages">linux packages</a> for various distributions, for example the ownCloud server 9.1.1 packages. We think that our users should not be forced to deploy from tarballs, which is error prone and not native to Linux, but have the choice to use linux packages through the distributions package management.</p>
<p>There also have been client releases recently: The Android client versions <a href="https://github.com/owncloud/android/blob/master/CHANGELOG.md">2.1.1 and 2.1.2</a> were released with important changes for Android 7 and much more fixes, as well as iOS client versions <a href="https://github.com/owncloud/ios/blob/master/Changelog.md">3.5.0 and 3.5.1</a>. The <a href="https://owncloud.org/changelog/desktop/">desktop client 2.2.4</a> also got a regular bug fix update (<a href="https://owncloud.org/changelog/desktop">Changelog</a>).</p>
<p>I guess you agree that is a lot of activity shown in the ownCloud project, making sure to get the best ownCloud experience out there for the users, driven by passion for the project and professional usage in focus.</p>
<p>If you are interested and want to join in and make ownCloud better, jump in on <a href="https://central.owncloud.org/">ownCloud Central</a> or <a href="https://github.com/owncloud">Github</a>. It&rsquo;s fun!</p>
]]></content:encoded>
    </item>
    <item>
      <title>More Hiring: Qt Hacker!</title>
      <link>https://dragotin.codeberg.page/posts/more-hiring-qt-hacker/</link>
      <pubDate>Fri, 16 Sep 2016 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/more-hiring-qt-hacker/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://owncloud.com&#34;&gt;ownCloud&lt;/a&gt; is even more hiring. In my &lt;a href=&#34;https://dragotin.wordpress.com/2016/08/03/owncloud-is-hiring/&#34;&gt;last post&lt;/a&gt; I wrote that we need PHP developers, a security engineer and a system administrator. For all positions we got interesting inquiries already. That&amp;rsquo;s great, but should not hinder you from sending your CV in case you are still interested. We have &lt;em&gt;multiple&lt;/em&gt; positions!&lt;/p&gt;
&lt;p&gt;But there is even more opportunity: Additionally we are looking for an ownCloud Desktop Client developer. That would be somebody fluid in C++ and Qt who likes to pick up responsibility for our desktop client together with the other guys on the team. Shifted responsibilities have created this space, and it is your chance to jump into the desktop sync topic which makes ownCloud really unique.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="http://owncloud.com">ownCloud</a> is even more hiring. In my <a href="https://dragotin.wordpress.com/2016/08/03/owncloud-is-hiring/">last post</a> I wrote that we need PHP developers, a security engineer and a system administrator. For all positions we got interesting inquiries already. That&rsquo;s great, but should not hinder you from sending your CV in case you are still interested. We have <em>multiple</em> positions!</p>
<p>But there is even more opportunity: Additionally we are looking for an ownCloud Desktop Client developer. That would be somebody fluid in C++ and Qt who likes to pick up responsibility for our desktop client together with the other guys on the team. Shifted responsibilities have created this space, and it is your chance to jump into the desktop sync topic which makes ownCloud really unique.</p>
<p>The role includes working with the team to plan and roll out releases, coordinate with the server- and mobile client colleagues, nail out future developments, engage with community hackers and help with difficult support cases. And last but not least there is hacking fun on remarkable nice <a href="http://www.qt-project.org">Qt</a> based C++ code of our desktop client, together with high profile C++ hackers to learn from.</p>
<p>It is an ideal opportunity for a carer type of personality, to whom it is not enough to sit in the basement and only hack, but also to talk to people, organize, and become visible. Having a Qt- and/or <a href="http://www.kde.org">KDE</a> background is a great benefit. You would work from where you feel comfortable with as ownCloud is a distributed company.</p>
<p>The <a href="https://owncloud.org/install/#install-clients">ownCloud Client</a> is a very successful part of the ownCloud platform, it has millions of installations out there, and is released under GPL.</p>
<p>If you want to do something that matters, here you are! Send your CV today and do not forget to mention your github account :-)</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud is hiring!</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-is-hiring/</link>
      <pubDate>Wed, 03 Aug 2016 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-is-hiring/</guid>
      <description>&lt;p&gt;[caption id=&amp;ldquo;attachment_10199&amp;rdquo; align=&amp;ldquo;alignright&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;a href=&#34;http://owncloud.com/jobs&#34;&gt;&lt;img alt=&#34;Come join us!&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-is-hiring/images/startup-photos-300x199.jpg&#34;&gt;&lt;/a&gt; Come join us![/caption]After the &lt;a href=&#34;https://owncloud.com/owncloud-secures-financing-expands-management-team/&#34;&gt;recent news&lt;/a&gt;, we are now back on stage and with this blog we want to point you to our open positions. Yes, we are hiring people to work on &lt;a href=&#34;http://owncloud.org&#34;&gt;ownCloud&lt;/a&gt;. ownCloud is an open source project, yes, but &lt;a href=&#34;https://www.owncloud.com&#34;&gt;ownCloud GmbH&lt;/a&gt;, the company behind the project, provides significant &lt;a href=&#34;https://owncloud.com/team&#34;&gt;people&amp;rsquo;s power&lt;/a&gt; to expand the project to serve the needs for both the community and ownCloud GmbH&amp;rsquo;s customers. So if you ever dreamed of getting paid for work on open source, read on.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>[caption id=&ldquo;attachment_10199&rdquo; align=&ldquo;alignright&rdquo; width=&ldquo;300&rdquo;]<a href="http://owncloud.com/jobs"><img alt="Come join us!" loading="lazy" src="/posts/owncloud-is-hiring/images/startup-photos-300x199.jpg"></a> Come join us![/caption]After the <a href="https://owncloud.com/owncloud-secures-financing-expands-management-team/">recent news</a>, we are now back on stage and with this blog we want to point you to our open positions. Yes, we are hiring people to work on <a href="http://owncloud.org">ownCloud</a>. ownCloud is an open source project, yes, but <a href="https://www.owncloud.com">ownCloud GmbH</a>, the company behind the project, provides significant <a href="https://owncloud.com/team">people&rsquo;s power</a> to expand the project to serve the needs for both the community and ownCloud GmbH&rsquo;s customers. So if you ever dreamed of getting paid for work on open source, read on.</p>
<h2 id="what-we-do---what-you-will-work-on">What we do - what you will work on</h2>
<p>The call is for people who understand the vision of bringing the idea ownCloud to an enterprise ready level: ownCloud is not only running on individual open source enthusiasts hardware, but also on sites with huge amounts of data like CERN or the Sciebo project, and at large companies who want to work with their data in a secure way.</p>
<p>To provide the best solution for all of them we are looking for:</p>
<h3 id="a-system-administrator">A <a href="https://owncloud.com/jobs#systemsadministrator">System Administrator</a></h3>
<p>In this role, you make sure that the infrastructure that we use in ownCloud is up and running. That involves troubleshooting and streamlining existing infrastructure, but also designing new services. If you love virtualization of all kinds and have an eye for security, this position is for you. Of course all this does not only happen behind closed doors, but you will be in contact with the open source community around ownCloud.</p>
<h3 id="the-application-security-engineer">The <a href="https://owncloud.com/jobs#applicationsecurityengineer">Application Security Engineer</a></h3>
<p>For security professionals who would like to take on a high profile open source project. As security is one of the core values of ownCloud, we are looking for somebody who constantly monitors the code flowing in for security problems, is able to find glitches in existing code and handle the bug bounty program. That and more is the task of this high profile position.</p>
<h3 id="a-software-engineer-php">A <a href="https://owncloud.com/jobs#softwareengineerphp">Software Engineer PHP</a></h3>
<p>For engineers with a passion for good software design and a love for writing code without being code monkeys: In this role you iron the server part of our platform, build new features, work on fixing bugs with the support colleagues and bother the architect with new ideas how to make the thing even better. For this you need to urge to get down and dirty with code, feel yourself comfortable in a team of high profile developers who can teach you things and learn from you.</p>
<h3 id="php-or-what">PHP or what?</h3>
<p>Yes, ownCloud is written in PHP, and PHP is the most important, but by far not the only language that we use for the ownCloud platform.</p>
<p>Before you turn your back because of PHP, please think twice. There are a lot of good reasons why we are going with PHP, some of them are named in <a href="https://owncloud.org/blog/owncloud-and-php/">this blog</a>, but there is more: For example PHP7: With PHP 7 (which <a href="https://owncloud.org/blog/php-7-is-here-and-owncloud-is-ready/">can be used</a> with ownCloud) the language has caught up with many criticism it faced before and has done a big leap.</p>
<p>And anyway, the language of a system is not the only thing that is important in a developers life. It is rather how many people use, love and recommend the project and the development processes the team lives. And in all that points, ownCloud is already awesome, and will become even more with your help.</p>
<p>Send your resume in to <a href="mailto:work@owncloud.com">work@owncloud.com</a> so we can get talking!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 2.2.x</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-2-2-x/</link>
      <pubDate>Fri, 24 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-2-2-x/</guid>
      <description>&lt;p&gt;A couple of weeks ago we released another significant milestone of the ownCloud Client, called version 2.2.0, followed by two small maintenance releases. (&lt;a href=&#34;https://owncloud.org/install/#install-clients&#34;&gt;download&lt;/a&gt;). I&amp;rsquo;d like to highlight some of the new features and the &lt;a href=&#34;https://owncloud.org/changelog/desktop&#34;&gt;changes&lt;/a&gt; that we have made to improve the user experience:&lt;/p&gt;
&lt;h2 id=&#34;overlay-icons&#34;&gt;Overlay Icons&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://doc.owncloud.org/desktop/2.2/navigating.html#file-manager-overlay-icons&#34;&gt;Overlay icons&lt;/a&gt; for the various file managers on our three platforms already exist for quite some time, but it has turned out that the performance was not up to the mark for big sync folders. The reason was mainly that too much communication between the file manager plugin and the client was happening. Once asked about the sync state of a single file, the client had to jump through quite some hoops in order to retrieve the required information. That involved not only database access to the sqlite-based sync journal, but also file system interaction to gather file information. Not a big deal if it&amp;rsquo;s only a few, but if the user syncs huge amounts, these efforts do sum up.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A couple of weeks ago we released another significant milestone of the ownCloud Client, called version 2.2.0, followed by two small maintenance releases. (<a href="https://owncloud.org/install/#install-clients">download</a>). I&rsquo;d like to highlight some of the new features and the <a href="https://owncloud.org/changelog/desktop">changes</a> that we have made to improve the user experience:</p>
<h2 id="overlay-icons">Overlay Icons</h2>
<p><a href="https://doc.owncloud.org/desktop/2.2/navigating.html#file-manager-overlay-icons">Overlay icons</a> for the various file managers on our three platforms already exist for quite some time, but it has turned out that the performance was not up to the mark for big sync folders. The reason was mainly that too much communication between the file manager plugin and the client was happening. Once asked about the sync state of a single file, the client had to jump through quite some hoops in order to retrieve the required information. That involved not only database access to the sqlite-based sync journal, but also file system interaction to gather file information. Not a big deal if it&rsquo;s only a few, but if the user syncs huge amounts, these efforts do sum up.</p>
<p>This becomes especially tricky for the propagation of changes upwards the file tree. Imagine there is a sync error happening in the foo/bar/baz/myfile. What should happen is that a warning icon appears on the icon for foo in the file manager, telling that within this directory, a problem exists. The complexity of the existing implementation was already high and adding this extra functionality would have reduced the reliability of the code lower than it already was.</p>
<p>Jocelyn was keen enough to do a refactoring of the underlying code which we call the SocketApi. Starting from the basic assumption that all files are in sync, and the code has just to care for these files that are new or changed, erroneous or ignored or similar, the amount of data to keep is very much reduced, which makes processing way faster.</p>
<h2 id="server-notifications">Server Notifications</h2>
<p>On the ownCloud server, there are situation where notifications are created which make the user aware of things that happened.</p>
<p>An example are <a href="https://doc.owncloud.com/server/9.0/user_manual/files/federated_cloud_sharing.html">federated shares</a>:</p>
<p>If somebody shares a folder with you, you previously had to acknowledge it through the web interface. This explicit step is a safety net to avoid people sharing tons of Gigabytes of content, filling up your disk.</p>
<p><img alt="notifications" loading="lazy" src="/posts/owncloud-client-2-2-x/images/notifications.png"></p>
<p>With 2.2.x, you can acknowledge the share right from the client, saving you the round trip to the web interface to check for new shares.</p>
<h2 id="keeping-an-eye-on-word--friends">Keeping an Eye on Word &amp; Friends</h2>
<p>Microsoft Word and other office tools are rather hard to deal with in syncing, because they do very strict file locking of the files that are worked on. So strict that the subsequent sync app is not even allowed to open the file, not even for reading. That would be required to be able to sync the file.</p>
<p>As a result the sync client needs to wait until word unlocks the file, and then continue syncing.</p>
<p>For previous version of the client, this was hard to detect and worked only if other changes happened in the same directory where the file in question resides.</p>
<p>With 2.2.0 we added a special watcher that keeps an eye on the office docs Word and friends are blocking. And once the files are unlocked, the watcher starts a sync run to get the files to the server, or down from the server.</p>
<h2 id="advances-on-desktop-sharing">Advances on Desktop Sharing</h2>
<p>The sharing has been further integrated and received several UX- and bugfixes. There is more feedback when performing actions so you know when your client is waiting for a response from the server. The client now also respect more data returned from the server if you have apps enabled on the server that for example limit the expiration date.</p>
<p>Further more we better respect the share permissions granted. This means that if somebody shared a folder without create permissions with you and you want to reshare this folder in the client you won&rsquo;t get the option to share with delete permissions. This avoids errors when sharing and is more in line with how the whole ownCloud platform handles re-sharing. We also adjusted the behavior for federated reshares with the server.</p>
<p>Please note to take full advantage of all improvements you will need to run at least server version 9.0.</p>
<p>Have fun!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Chunking NG Part 2: Announcing an Upload</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-chunking-ng-part-2-announcing-an-upload/</link>
      <pubDate>Fri, 10 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-chunking-ng-part-2-announcing-an-upload/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://dragotin.wordpress.com/2015/06/22/owncloud-chunking-ng/&#34;&gt;first part&lt;/a&gt; of this little blog series explained the basic operations of chunk file upload as we set it up for discussion. This part goes a bit beyond and talks about an addition to that, called &lt;strong&gt;announcing the upload&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;With the processing described in the first part of the blog, the upload is done savely and with a clean approach, but it also has some drawbacks.&lt;/p&gt;
&lt;p&gt;Most notably the server does not know the target filename of the uploaded file upfront. Also it does not know the final size or mimetype of the target file. That is not a problem in general, but imagine the following situation: A big file should be uploaded, which would exceed the users quota. That would only become an error for the user once all uploads happened, and the final upload directory is going to be moved on the final file name.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The <a href="https://dragotin.wordpress.com/2015/06/22/owncloud-chunking-ng/">first part</a> of this little blog series explained the basic operations of chunk file upload as we set it up for discussion. This part goes a bit beyond and talks about an addition to that, called <strong>announcing the upload</strong>.</p>
<p>With the processing described in the first part of the blog, the upload is done savely and with a clean approach, but it also has some drawbacks.</p>
<p>Most notably the server does not know the target filename of the uploaded file upfront. Also it does not know the final size or mimetype of the target file. That is not a problem in general, but imagine the following situation: A big file should be uploaded, which would exceed the users quota. That would only become an error for the user once all uploads happened, and the final upload directory is going to be moved on the final file name.</p>
<p>To avoid useless file transfers like that or to implement features like a file firewall, it would be good if the server would know these data at start of the upload and stop the upload in case it can not be accepted.</p>
<p>To achieve that, the client creates a file called _meta in /uploads/ before the upload of the chunks starts. The file contains information such as overall size, target file name and other meta information.</p>
<p>The server&rsquo;s reply to the PUT of the _meta file can be a fail result code and error description to indicate that the upload will not be accepted due to certain server conditions. The client should check the result codes in order to avoid not necessary upload of data volume of which the final MOVE would fail anyway.</p>
<p>This is just a collection of ideas for an improved big file chunking protocol, nothing is decided yet. But now is the time to discuss. We&rsquo;re looking forward to hearing your input.</p>
<p>The third and last part will describe how this plays into delta sync, which is especially interesting for big files, which are usually chunked.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Chunking NG</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-chunking-ng/</link>
      <pubDate>Mon, 22 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-chunking-ng/</guid>
      <description>&lt;p&gt;Recently Thomas and me met in person and thought about an alternative approach to bring our big file chunking to the next level. &amp;ldquo;Big file chunking&amp;rdquo; is ownClouds algorithm to upload huge files to ownCloud with clients.&lt;/p&gt;
&lt;p&gt;This is the first of three little blog posts in which we want to present the idea and get your feedback. This is for open discussion, nothing is set in stone so far.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Recently Thomas and me met in person and thought about an alternative approach to bring our big file chunking to the next level. &ldquo;Big file chunking&rdquo; is ownClouds algorithm to upload huge files to ownCloud with clients.</p>
<p>This is the first of three little blog posts in which we want to present the idea and get your feedback. This is for open discussion, nothing is set in stone so far.</p>
<p>What is the downside of the current approach? Well, the current algorithm needs a lot of distributed knowledge between server and client to work: The naming scheme of the part files, semi secret headers, implicit knowledge. In addition to that, due to the character of the algorithm the server code is too much spread over the whole code base which makes maintaining difficult.</p>
<p>This situation could be improved with the following approach.</p>
<p>To handle chunked uploads, there will be a new WebDAV route, called remote.php/uploads. All uploads of files larger than the chunk size will go through this route.</p>
<p>In a nutshell, an upload of a big file will happen as parts to a directory under that new route. The client creates it through the new route. This initiates a new upload. If the directory could be created successfully, the client starts to upload chunks of the original file into that directory. The sequence of the chunks is set by the names of the chunk files created in the directory. Once all chunks are uploaded, the client submits a MOVE request the renames the chunk upload directory to the target file.</p>
<p>Here is a pseudo code description of the sequence:</p>
<p>1. Client creates an upload directory with a self choosen name (ideally a numeric upload id):</p>
<p>MKCOL remote.php/uploads/upload-id</p>
<p>2. Client sends a chunk:</p>
<p>PUT remote.php/uploads/upload-id/chunk-id</p>
<p>3. Client repeats 2. until all chunks have successfully been uploaded 4. Client finalizes the upload:</p>
<p>MOVE remote.php/uploads/upload-id /path/to/target-file</p>
<p>5. The MOVE sends the ETag that is supposed to be overwritten in the request header to server. Server returns new ETag and FileID as reply headers of the MOVE.</p>
<p>During the upload, client can retrieve the current state of the upload by a PROPFIND request on the upload directory. The result will be a listing of all chunks that are already available on the server with metadata such as mtime, checksum and size.</p>
<p>If the server decides to remove an upload, ie. because it hasn&rsquo;t been active for a time, it is free to remove the entire upload directory and return status 404 if a client tries to upload to. Also, a client is allowed to remove the entire upload directory to cancel an upload.</p>
<p>An upload is finalized by the MOVE request. Note that it&rsquo;s a MOVE of a directory on a single file. This operation is not supported in normal file systems, but we think in this case, it has a nice well descriptive meaning. A MOVE is known as an atomic and fast operation, and that way it should be implemented by the server.</p>
<p>Also note that only with the final MOVE the upload operation is associated with the final destination file. We think that this approach already is a great improvement, because there is always a clear state of the upload with no secret knowledge hidden in the process.</p>
<p>In the next blog I will discuss an extension to this that adds more features to the process.</p>
<p>What do you think so far? Your feedback is appreciated, best on the <a href="https://mailman.owncloud.org/mailman/listinfo/devel">ownCloud devel mailinglist</a>!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 1.8.0 Released</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-1-8-0-released/</link>
      <pubDate>Tue, 17 Mar 2015 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-1-8-0-released/</guid>
      <description>&lt;p&gt;Today, we&amp;rsquo;re happy to release the best ownCloud Desktop Client ever to our community and users! It is &lt;a href=&#34;https://owncloud.org/changelog/desktop/&#34;&gt;ownCloud Client 1.8.0&lt;/a&gt; and it will push syncing with ownCloud to a new level of performance, stability and convenience.&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_586&amp;rdquo; align=&amp;ldquo;alignleft&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;a href=&#34;https://dragotin.files.wordpress.com/2015/03/sharedialog1.png&#34;&gt;&lt;img alt=&#34;The Share Dialog&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.files.wordpress.com/2015/03/sharedialog1.png?w=300&#34;&gt;&lt;/a&gt; The Share Dialog[/caption]This release brings a new integration into the operating system file manager. With 1.8.0, there is a new context menu that opens a dialog to allow the user to create a public link on a synced file. This link can be forwarded to other users who get access to the file via ownCloud.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today, we&rsquo;re happy to release the best ownCloud Desktop Client ever to our community and users! It is <a href="https://owncloud.org/changelog/desktop/">ownCloud Client 1.8.0</a> and it will push syncing with ownCloud to a new level of performance, stability and convenience.</p>
<p>[caption id=&ldquo;attachment_586&rdquo; align=&ldquo;alignleft&rdquo; width=&ldquo;300&rdquo;]<a href="https://dragotin.files.wordpress.com/2015/03/sharedialog1.png"><img alt="The Share Dialog" loading="lazy" src="https://dragotin.files.wordpress.com/2015/03/sharedialog1.png?w=300"></a> The Share Dialog[/caption]This release brings a new integration into the operating system file manager. With 1.8.0, there is a new context menu that opens a dialog to allow the user to create a public link on a synced file. This link can be forwarded to other users who get access to the file via ownCloud.</p>
<p>Also the clients behavior when syncing files that are opened by other applications on Windows has greatly been improved. The problems with file locking some users saw for example with MS office apps were fixed.</p>
<p>Another area of improvements is again performance. With latest ownCloud servers, the client uses even more parallized requests, now for all kind of operations. Depending on the synced data structure, this can make a huge difference.</p>
<p>All the other changes, improvements and bug-fixes are too hard to count. Finally, this release received around 700 git <a href="https://github.com/owncloud/client/commits/1.8">commits</a> compared to the previous release.</p>
<p>All this is only possible with the powerful and awesome community of ownClouders. We received a lot of very good contributions through the GitHub tracker, which helped us to nail down a lot of issues and improved the client tremendously.</p>
<p>But this time we&rsquo;d like to specifically point out the code contributions of Alfie &ldquo;Azelphur&rdquo; Day and Roeland Jago Douma who contributed significant code bits to the sharing dialog on the client and also some server code.</p>
<p>A great thanks goes out to all of you who helped with this release. It was a great experience again and it is big fun working with you!</p>
<p>We hope you enjoy 1.8.0! Get it from <a href="https://owncloud.org/install/#desktop">https://owncloud.org/install/#desktop</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud ETags and FileIDs</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-etags-and-fileids/</link>
      <pubDate>Fri, 13 Mar 2015 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-etags-and-fileids/</guid>
      <description>&lt;p&gt;Often questions come up about the meaning of FileIDs and ETags. Both values are metadata that the ownCloud Server stores for each of the files and directories in the server database. These values are fundamentally important for the integrity of data in the overall system. Here are some thoughts about what they are why these are so important.This is mainly from a clients point of view, but there are other use cases as well.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Often questions come up about the meaning of FileIDs and ETags. Both values are metadata that the ownCloud Server stores for each of the files and directories in the server database. These values are fundamentally important for the integrity of data in the overall system. Here are some thoughts about what they are why these are so important.This is mainly from a clients point of view, but there are other use cases as well.</p>
<h2 id="etags">ETags</h2>
<p>ETags are strings that describe exactly one specific version of a file (example: 71a89a94b0846d53c17905a940b1581e).</p>
<p><img alt="data2" loading="lazy" src="/posts/owncloud-etags-and-fileids/images/data2.jpg">Whenever the file changes, the ownCloud server will make sure that the ETag of the specific file changes as well. It is not important in which way the ETag changes, it also does not have to be strictly unique, it&rsquo;s just important that it changes reliably if the file changes for whatever reason. However, ETags should not change if the file was not changed, otherwise the client will download that file again.</p>
<p>In addition to that, The ETags of the parent directories of the file have to change as well, up to the root directory. That way client systems can detect changes that happen somewhere in the file tree. This is in contrast to normal computer file systems where only the modification time of the direct parent of a file is changing.</p>
<h2 id="file-ids">File IDs</h2>
<p>FileIDs are also strings that are created once at the creation time of the file (example: 00003867ocobzus5kn6s).</p>
<p><img alt="data3" loading="lazy" src="/posts/owncloud-etags-and-fileids/images/data3.jpg">But contrary to the ETags, the file IDs should never ever change over the files lifetime. Not on an edit of the file, and also not if the file is renamed or moved. One of the important usages of the FileID is to detect renames and moves of a file on the server.</p>
<p>The FileID is used as an unique key to identify a file. FileIDs need to be unique within one ownCloud, and in inter-owncloud connections, they must be compared together with the ownCloud server instance id.</p>
<p>Also, the FileIDs must never be recycled or reused.</p>
<h2 id="checksums">Checksums?</h2>
<p>Often ETags and FileIDs are confused with checksums such as MD5 or SHA1 sums over the file content.</p>
<p>Neither ETags nor FileIDs are, even if there are similarities: Especially the ETag can be seen as a checksum over the file content. However, file checksums are way more costly to compute than just a value that only needs to change somehow.</p>
<h2 id="what-happens-if">What happens if&hellip;?</h2>
<p>Let&rsquo;s make a thought experiment and consider what it would mean especially for sync clients if either fileID or ETag gets lost from the servers database.</p>
<p>If ETags are lost, clients loose the ability to decide if files have changed since the last time that was checked by the clients. So what happens is that the client will download the files again, byte-wise compare them to the local file and use the server file if the files differ. A conflict file will be created. Because the ETag was lost, the server will create new ETags on download. This could be improved by the server creating more predictable ETags based on the storage backends capabilities.</p>
<p>If the ETags are changed without reason, for example because a backup was played back on the server, the clients will consider the ones with changed ETags as changed and redownload them. Conflict handling will happen as described if there was a local change as well.</p>
<p>For the user, this means a lot of unnecessary downloads as well as potential conflicts. However, there will not be data loss.</p>
<p>If FileIDs got lost or changed, the problem is that renames or moves on server side can no longer be detected. That would result in a new download of files in the good case. If a fileID however changes to something that was used before, that can result in a rename that overwrites an unrelated file. That is because clients might still have the FileID associated with another file.</p>
<p>Hopefully this little post explains the importance of the additional metadata that we maintain in ownCloud.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Incremental Sync in ownCloud</title>
      <link>https://dragotin.codeberg.page/posts/incremental-sync-in-owncloud/</link>
      <pubDate>Mon, 09 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/incremental-sync-in-owncloud/</guid>
      <description>&lt;p&gt;[caption id=&amp;ldquo;attachment_548&amp;rdquo; align=&amp;ldquo;alignright&amp;rdquo; width=&amp;ldquo;240&amp;rdquo;]&lt;a href=&#34;https://dragotin.files.wordpress.com/2015/02/incremental.jpg&#34;&gt;&lt;img alt=&#34;KLAAS&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/incremental-sync-in-owncloud/images/incremental.jpg&#34;&gt;&lt;/a&gt;Nautilus Shell, &lt;a href=&#34;https://www.flickr.com/photos/davidbygott/5241519842/&#34;&gt;David Bygott&lt;/a&gt;[/caption] Incremental Sync is probably the feature that most people ask, or even sometimes cry for. Recently there was another wave of discussion about ownCloud is doing incremental sync or not. I will try again (as &lt;a href=&#34;https://github.com/owncloud/client/issues/179#issuecomment-60766282&#34;&gt;in this issue&lt;/a&gt;) to explain why we decided to slowing that feature. Slowing means that it will be done later, not never, as it was stated. It is just that we think that other things benefit the whole idea of ownCloud more. That has plain technical reasons. Let&amp;rsquo;s dive a bit into.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>[caption id=&ldquo;attachment_548&rdquo; align=&ldquo;alignright&rdquo; width=&ldquo;240&rdquo;]<a href="https://dragotin.files.wordpress.com/2015/02/incremental.jpg"><img alt="KLAAS" loading="lazy" src="/posts/incremental-sync-in-owncloud/images/incremental.jpg"></a>Nautilus Shell, <a href="https://www.flickr.com/photos/davidbygott/5241519842/">David Bygott</a>[/caption] Incremental Sync is probably the feature that most people ask, or even sometimes cry for. Recently there was another wave of discussion about ownCloud is doing incremental sync or not. I will try again (as <a href="https://github.com/owncloud/client/issues/179#issuecomment-60766282">in this issue</a>) to explain why we decided to slowing that feature. Slowing means that it will be done later, not never, as it was stated. It is just that we think that other things benefit the whole idea of ownCloud more. That has plain technical reasons. Let&rsquo;s dive a bit into.</p>
<h2 id="rsync-is-great">RSync is great</h2>
<p>Nobody will object here. In a nutshell, this is how <a href="https://rsync.samba.org/">rsync</a> works: There is a file on the client and on the server. The idea is to not transfer the entire file from one side to the other if either side changes, but only the parts that have changed.</p>
<p>The original rsync does that by chopping the file to blocks of a given size and calculating a checksum of each of the blocks. The list of checksums is sent to the server and - here&rsquo;s the trick - the server looks at its version of the file and for each of the checksum in the list, it seeks if it finds the same block in the file. That will often not be at the same position in the file, but maybe somewhere else. That is done for each block, and finally the server will work out the information of which parts of the file are existing and which are not and have to be sent by the client.</p>
<p>By way of this clever algorithm, we will just have to transmit a very small fraction of the changed file, because most content did not change. And that is what we want! Yeah!</p>
<p>Mission accomplished? No, not really. While there is basically nothing wrong with the idea in general, there is a severe architectural downside. The rsync algorithm depends on a strong server component which, for each file, searches around and calculates checksums. In an environment where we potentially have a lot of clients connecting to one server that would create a huge load on it which we need to avoid. So what if instead of putting the burden on the server&rsquo;s shoulder, we could make the clients take the responsibility?</p>
<p>And guess what, there has been somebody thinking about that before and he says:</p>
<h2 id="use-zsync-for-this">Use ZSync for this!</h2>
<p><a href="http://zsync.moria.org.uk">ZSync</a> basically turns the idea of rsync upside down and shifts the calculation of checksums away from the server and onto the clients. That means that with zsync, the server can keep a static list of checksums for every block specific to a version of a file. The list can for example be computed along the upload of the file to the server. From that point it does not change, as long as the file does not change. That means less computation work for the server, and maybe this job can also put into the client.</p>
<p>So far that sounds cool (even though some questions remain) and sounds like something that can help us.</p>
<p>Unfortunately, the approach does not work very well for compressed files. The reason is that if a file gets compressed, even if only a couple of bytes in the original file change, the compression algorithm usually changes a lot all over the entire file. As a result, the zsync algorithm can only compute a comparably large diff. Given the cost of computation that can turn inefficient quickly.</p>
<p><em>&ldquo;But who uses compressed files?&rdquo;</em> you might argue. The problem is that almost each and every of the files in everyday life are stored compressed. This is for example true for Microsoft Office files and the Open Document files produced by LibreOffice and Apache OpenOffice. They are really renamed ZIP containers, that hold the documents with all its embedded files, etc.</p>
<p>Now of course you will reply that zsync has an improved algorithm for compressed files. Yes, true, that is a great thing. However, it involves that the compressed file gets uncompressed to be worked on by zsync. Afterwards it is compressed again. And that is the problem: As common compressors do not leave a hint behind _how_ the file was compressed, it is not possible to reliably recreate a file that is equivalent to the original one. How will apps react on a file that has changed its compression scheme?</p>
<h2 id="results">Results</h2>
<p>As said above, yes, we will at one point of time implement something along the zsync algorithm. The explanations above should show however, that at the current state of ownCloud, other features will improve ownClouds performance, stability and convenience more. And that is the important thing for us, more than pleasing the loudest barking dogs. Here is a rough outline of how I would move on on this, open for your suggestions and critique: The zsync algorithm is designed to improve downloads. We need it for both up- and downloads, and it needs to be thought through if that is also possible. For the server side functionality, there are a couple of open questions which carefully have to be investigated. Preferably an app can be written that provides the handling of the zsync checksum lists. That has to be clarified and discussed, and that will take a while. But as outlined above, this idea is only clever for a limited amount of file types. So what I would suggest first is that we get an idea of the file types users usually store in their ownCloud, so that we can do a validated estimate on how this feature helps. I will follow up on this first step.</p>
<p>Thanks for reading this long blog post. Thanks <a href="https://daniel.molkentin.net/">Danimo</a> for lectorate.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Dolphin Overlay Icons for  ownCloud Sync Client</title>
      <link>https://dragotin.codeberg.page/posts/overlay-icons-for-dolphin-in-owncloud-client/</link>
      <pubDate>Mon, 08 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/overlay-icons-for-dolphin-in-owncloud-client/</guid>
      <description>&lt;p&gt;Our recent &lt;a href=&#34;https://dragotin.wordpress.com/2014/11/08/owncloud-client-1-7-0-released/&#34;&gt;ownCloud Client 1.7.0 release&lt;/a&gt; contains the new feature of overlay icons in GNOME nautilus, MacOSX and Windows. That is nice, but that makes us as old &lt;a href=&#34;http://www.kde.org&#34;&gt;KDE&lt;/a&gt; guys sad as &lt;a href=&#34;https://userbase.kde.org/Dolphin&#34;&gt;Dolphin&lt;/a&gt; was missing on the list. [caption id=&amp;ldquo;attachment_536&amp;rdquo; align=&amp;ldquo;alignnone&amp;rdquo; width=&amp;ldquo;554&amp;rdquo;]&lt;img alt=&#34;KDE&amp;rsquo;s Dolphin with overlay icons for ownCloud&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/overlay-icons-for-dolphin-in-owncloud-client/images/dolphin1.png&#34;&gt; KDE&amp;rsquo;s Dolphin with overlay icons for ownCloud&amp;rsquo;s file sync[/caption] That needs to change, and here we go: &lt;a href=&#34;http://woboq.com&#34;&gt;Olivier Goffart&lt;/a&gt; wrote a patch to do overlay icons also in Dolphin, which was not straightforward, because in addition to an dolphin plugin, also a patch for libkonq was required.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Our recent <a href="https://dragotin.wordpress.com/2014/11/08/owncloud-client-1-7-0-released/">ownCloud Client 1.7.0 release</a> contains the new feature of overlay icons in GNOME nautilus, MacOSX and Windows. That is nice, but that makes us as old <a href="http://www.kde.org">KDE</a> guys sad as <a href="https://userbase.kde.org/Dolphin">Dolphin</a> was missing on the list. [caption id=&ldquo;attachment_536&rdquo; align=&ldquo;alignnone&rdquo; width=&ldquo;554&rdquo;]<img alt="KDE&rsquo;s Dolphin with overlay icons for ownCloud" loading="lazy" src="/posts/overlay-icons-for-dolphin-in-owncloud-client/images/dolphin1.png"> KDE&rsquo;s Dolphin with overlay icons for ownCloud&rsquo;s file sync[/caption] That needs to change, and here we go: <a href="http://woboq.com">Olivier Goffart</a> wrote a patch to do overlay icons also in Dolphin, which was not straightforward, because in addition to an dolphin plugin, also a patch for libkonq was required.</p>
<p>We prepared some test packages in our development repository <a href="https://build.opensuse.org/project/show/isv:ownCloud:devel">isv:ownCloud:devel</a> for those who wanna try and know their way around. Current it only builds for a couple of <a href="http://www.opensuse.org">openSUSE Distros</a>. You need to install <em>kdebase4</em> and <em>dolphin-plugins</em> and after installation, it&rsquo;s easiest to restart KDE to make it registered. But be <strong>warned</strong>: The two packages replace packages from the previous installation, only do it if you really know what you&rsquo;re doing!</p>
<p>It would be great if at least the libkonq patch could make it to upstream, and I would appreciate if somebody who is a bit more fluent with recent KDE libs development could give me a hand on that. Otherwise, if distros wanna pick up the patches to make the overlays work, of course the patches are here: <a href="https://build.opensuse.org/package/view_file/isv:ownCloud:devel/kdebase4/0001-KOverlayIconPlugin.patch?expand=1">patch for libkonq</a> and the <a href="https://build.opensuse.org/source/isv:ownCloud:devel/dolphin-plugins/owncloud.tar.gz?rev=0b052eb57f17ed05110338ddd57bd3b5">ownCloud Dolphin plugin</a>. The plugin will work with the released version 1.7.0 of ownCloud Client.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Workshop at CERN</title>
      <link>https://dragotin.codeberg.page/posts/workshop-at-cern/</link>
      <pubDate>Thu, 27 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/workshop-at-cern/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://home.web.cern.ch/about&#34;&gt;&lt;img alt=&#34;cern_logo&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/workshop-at-cern/images/cern_logo1.png&#34;&gt;&lt;/a&gt;Last week, Thomas, Christian and myself were attending a workshop in &lt;a href=&#34;http://home.web.cern.ch/&#34;&gt;CERN&lt;/a&gt;, the European Organization for Nuclear Research in Geneve, Switzerland.&lt;/p&gt;
&lt;p&gt;CERN is a very inspiring place, attracting intelligent people from all over the world to get behind the secrets of our being. I felt honored to be at the place where for example the world wide web was invented.&lt;/p&gt;
&lt;p&gt;The event was called &lt;a href=&#34;https://indico.cern.ch/event/336753/&#34;&gt;Workshop on Cloud Services for File Synchronisation and Sharing&lt;/a&gt; and was hosted by CERN IT department. There have been around 100 attendees.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="http://home.web.cern.ch/about"><img alt="cern_logo" loading="lazy" src="/posts/workshop-at-cern/images/cern_logo1.png"></a>Last week, Thomas, Christian and myself were attending a workshop in <a href="http://home.web.cern.ch/">CERN</a>, the European Organization for Nuclear Research in Geneve, Switzerland.</p>
<p>CERN is a very inspiring place, attracting intelligent people from all over the world to get behind the secrets of our being. I felt honored to be at the place where for example the world wide web was invented.</p>
<p>The event was called <a href="https://indico.cern.ch/event/336753/">Workshop on Cloud Services for File Synchronisation and Sharing</a> and was hosted by CERN IT department. There have been around 100 attendees.</p>
<p>I was giving a talk called <a href="https://indico.cern.ch/event/336753/session/5/contribution/14">The File Sync Algorithm of the ownCloud Desktop Clients</a>, which was very well received. If you happen to be interested in the sync algorithm we&rsquo;re using, the <a href="https://indico.cern.ch/event/336753/session/5/contribution/14/material/slides/0.pdf">slides</a> are a nice starting point.</p>
<p>What amazed me most was the great atmosphere and the very positive attitude towards ownCloud. Many representatives of edu organizations that use ownCloud to which I talked were very happy with the product (even though there are problems here and there) from the technical POV. A lot of interesting setups and environments were explained and also showcased ownCloud&rsquo;s flexibility to integrate into existing structures.</p>
<p>What also was pointed out by the attendees of the workshop was the importance of the fact that ownCloud is open source. Non free software does not have a chance at all in that market. That was the very clear statement in the final discussion session of the workshop.</p>
<p>The <a href="https://indico.cern.ch/event/336753/session/1/contribution/28">keynote</a> was given by <a href="http://www.cis.upenn.edu/~bcpierce/">Prof. Benjamin Pierce</a> from Pennsylvania with the title <em>Principles of Synchronization</em>. He is the lead author of the project Unison which is another opensource sync project. It&rsquo;s sync engine marks very high quality, but is not &ldquo;up-to-date software&rdquo; any more as he said. I had the pleasure to spend quite some time with him to discuss syncing in general and our sync algorithms in particular, amongst other interesting things.</p>
<p>[caption id=&ldquo;attachment_525&rdquo; align=&ldquo;alignleft&rdquo; width=&ldquo;254&rdquo;]<img alt="Atlas Detectors" loading="lazy" src="/posts/workshop-at-cern/images/detector1.jpg"> Atlas Detectors[/caption]As part of his work, he works with a tool called <a href="http://www.quviq.com/products/erlang-quickcheck/">QuickCheck</a> to do very enhanced testing. One night we were sitting in the cantina there hacking to adopt the testing to ownCloud client and server. The first results were very promising, for example we revealed a &ldquo;problem&rdquo; in our sync core that I knew of, which formally is a sync error, yet very very unlikely to happen and thus accepted for the sake of an easier algorithm. It was impressive how fast the testing method was identifying that problem. I like to follow up with the testing method.</p>
<p>Furthermore we met with a whole variety of other interesting people, backend developers, operators of the huge datasets (100 Peta-Byte), the director of CERN IT, a maintainer of the <a href="https://www.scientificlinux.org">Scientific Linux</a> and others.</p>
<p>Also we had the chance to visit the Atlas experiment, it is 100 meter underneath the surface and huge. That is where the particles are accelerated, and it was great to have the chance to visit that.</p>
<p>The trip was a great experience and very motivating for me, and I think it should be for all of us all doing <a href="http://www.owncloud.org">ownCloud</a>. Frank was really hitting a nerv when he was seeding the idea, and we all were doing a nice product of it so far.</p>
<p>Lets do more of this cool stuff!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 1.7.0 Released</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-1-7-0-released/</link>
      <pubDate>Sat, 08 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-1-7-0-released/</guid>
      <description>&lt;p&gt;Yesterday we released ownCloud Client 1.7.0. It is available via &lt;a href=&#34;http://owncloud.org/install/#desktop&#34;&gt;ownCloud&amp;rsquo;s website&lt;/a&gt;. This client release marks the next big step in open source file synchronization technology and I am very happy that it is out now.&lt;/p&gt;
&lt;p&gt;The new release brings two lighthouse features which I&amp;rsquo;ll briefly describe here.&lt;/p&gt;
&lt;h2 id=&#34;overlay-icons&#34;&gt;Overlay icons&lt;/h2&gt;
&lt;p&gt;For the first time, this release has a feature that lives kind of outside the ownCloud desktop client program. That nicely shows that syncing is not only a functionality living in one single app, but a deeply integrated system add-on that affects various levels of desktop computing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Yesterday we released ownCloud Client 1.7.0. It is available via <a href="http://owncloud.org/install/#desktop">ownCloud&rsquo;s website</a>. This client release marks the next big step in open source file synchronization technology and I am very happy that it is out now.</p>
<p>The new release brings two lighthouse features which I&rsquo;ll briefly describe here.</p>
<h2 id="overlay-icons">Overlay icons</h2>
<p>For the first time, this release has a feature that lives kind of outside the ownCloud desktop client program. That nicely shows that syncing is not only a functionality living in one single app, but a deeply integrated system add-on that affects various levels of desktop computing.</p>
<p><img alt="Overlay Icons on Mac" loading="lazy" src="/posts/owncloud-client-1-7-0-released/images/overlays1.png">Here we&rsquo;re talking about overlay icons which are displayed in the popular file managers on the supported desktop platforms. The overlay icons are little additional icons that stick on top of the normal file icons in the file manager, like the little green circles with the checkmark on the screenshot.</p>
<p>The overlays visualize the sync state of each file or directory: The most usual case that a file is in sync between server and client is shown as a green checkmark, all good, that is what you expect. Files in the process of syncing are marked with a blue spinning icon. Files which are excluded from syncing show a yellow exclamation mark icon. And errors are marked by a red sign.</p>
<p>What comes along simple and informative for the user requires quite some magic behind the curtain. I promise to write more about that in another blog post soon.</p>
<h2 id="selective-sync">Selective Sync</h2>
<p>Another new thing in 1.7.0 is the selective sync.</p>
<p>In ownCloud client it was always possible to have more than one sync connection. Using that, users do not have to sync their entire server data to one local directory as with many other sync solutions. A more fine granular approach is possible here with ownCloud.</p>
<p><a href="https://dragotin.files.wordpress.com/2014/11/selectivesync1.jpg"><img alt="Selective Sync" loading="lazy" src="/posts/owncloud-client-1-7-0-released/images/selectivesync1.jpg"></a>For example, mp3&rsquo;s from the Music dir on the ownCloud go to the media directory locally. Digital images which are downloaded from the camera to the &ldquo;photos&rdquo; dir on the laptop are synced through a second sync connection to the server photo directory. All the other stuff that appears to be on the server is not automatically synced to the laptop which keeps it organized and the laptop harddisk relaxed.</p>
<p>While this is of course still possible we added another level of organization to the syncing. Within existing sync connections now certain directories can be excluded and their data is not synced to the client device. This way big amounts of data can be easier organized depending on the demands of the target device.</p>
<p>To set this up, check out for the button <em>Choose what to Sync</em> on the Account page. It opens the little dialog to deselect directories from the server tree. Note that if you deselect a directory, it is removed locally, but not on the server.</p>
<h2 id="what-else">What else?</h2>
<p>There is way more we put into this release: A huge amount of bug fixes and detail improvements went in. Fixes for all parts of the application: Performance (such as database access improvements), GUI (such as detail improvements for the progress display), around the overall processing (like how network timeouts are handled) and the distribution of the applications (MacOSX installer and icons), just to name a few examples. Also a lot of effort went into the sync core where many nifty edge cases were analyzed and better handled.</p>
<p>Between version 1.6.2 and the 1.7.0 release more than 850 commits from 15 different authors were pushed into the git repository (1.6.3 and 1.6.4 were continued in the 1.6 branch which commits are also in the 1.7 branch). A big part of these are bug fixes.</p>
<h2 id="who-is-it">Who is it?</h2>
<p>Who does all this? Well, there are a couple of brave coders funded by the <a href="http://www.owncloud.com">ownCloud company</a> working on the client. And we do our share, but not everything. Also coding is only one thing. If you for example take some time and read around in <a href="https://github.com/owncloud/mirall/">the client github repo</a> it becomes clear that there are so many people around who contribute: Reporting bugs, testing again and again, answering silly looking questions, proposing and discussing improvements and all that (yes, and finally coding too). That is really a huge block, honestly.</p>
<p>Even if it sometimes becomes a bit heated, because we can not do everything fast enough, that still is motivating. Because what does that mean? People care! For the idea, for the project, for the stuff we do. How cool is that? Thank you!</p>
<p>Have fun with 1.7.0!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Monitor the QObject Tree of a Qt App</title>
      <link>https://dragotin.codeberg.page/posts/monitor-the-qobject-tree-of-a-qt-app/</link>
      <pubDate>Thu, 14 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/monitor-the-qobject-tree-of-a-qt-app/</guid>
      <description>&lt;p&gt;Because it is still reported that the &lt;a href=&#34;http://owncloud.org/sync-clients&#34;&gt;ownCloud Client&lt;/a&gt; has an increasing memory footprint when running for long time I am trying to monitor the QObject tree of the client. Valgrind does not report any memory problems with it so my suspicion was that somewhere QObjects are created with valid parent pointers referencing a long living object. These objects might accumulate unexpectedly over time and waste memory.&lt;/p&gt;
&lt;p&gt;So I tried to investigate the app with &lt;a href=&#34;http://kdemonkey.blogspot.de/2011/07/qt-inspector.html&#34;&gt;Qt Inspector&lt;/a&gt; of &lt;em&gt;Robert Knight&lt;/em&gt;. That&amp;rsquo;s a great tool, but it does not yet completely do what I need because it only shows QWidget based objects. But Robert was kind enough to put me on the right track, thanks a lot for that!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Because it is still reported that the <a href="http://owncloud.org/sync-clients">ownCloud Client</a> has an increasing memory footprint when running for long time I am trying to monitor the QObject tree of the client. Valgrind does not report any memory problems with it so my suspicion was that somewhere QObjects are created with valid parent pointers referencing a long living object. These objects might accumulate unexpectedly over time and waste memory.</p>
<p>So I tried to investigate the app with <a href="http://kdemonkey.blogspot.de/2011/07/qt-inspector.html">Qt Inspector</a> of <em>Robert Knight</em>. That&rsquo;s a great tool, but it does not yet completely do what I need because it only shows QWidget based objects. But Robert was kind enough to put me on the right track, thanks a lot for that!</p>
<p>I tried this naive approach:</p>
<p>In the clients <a href="https://github.com/owncloud/mirall/blob/qobject_monitor/src/main.cpp">main.cpp</a>, I implemented these both callback functions:</p>
<p>[code language=&ldquo;cpp&rdquo;] QSet&lt;QObject*&gt; mObjects;</p>
<p>extern &ldquo;C&rdquo; Q_DECL_EXPORT void qt_addObject(QObject *obj) { mObjects.insert(obj); }</p>
<p>extern &ldquo;C&rdquo; Q_DECL_EXPORT void qt_removeObject(QObject *obj) { mObjects.remove(obj); } [/code]</p>
<p>Qt calls these callbacks whenever a QObject is created or deleted respectively. When the object is created I add it&rsquo;s pointer to the QSet mObjects, and if it is deleted, it is removed from the QSet. My idea was that after the QApp::exec() call returns, I would have to see which QObjects are still in the mObjects QSet. After a longer run of the client, I hoped to see an artificial amount of objects being left over.</p>
<p>Well, what should I say&hellip; No success so far: After first tests, it seems that the amount of left-over objects is pretty constant. Also, I don&rsquo;t see any objects that I would not kind of expect.</p>
<p>So this little experiment left more questions than answer: Is the suspicion correct that QObjects with a valid parent pointer can cause the memory growth? Is my test code as I did it so far able to detect that at all? Is it correct to do the analysis after the app.exec() call returned?</p>
<p>If you have any hints for me, please let me know! How would you tackle the problem?</p>
<p>Thanks!</p>
<p>This is the link to my modified main.cpp: <a href="https://github.com/owncloud/mirall/blob/qobject">https://github.com/owncloud/mirall/blob/qobject</a>_monitor/src/main.cpp</p>
]]></content:encoded>
    </item>
    <item>
      <title>Let&#39;s party!</title>
      <link>https://dragotin.codeberg.page/posts/lets-party/</link>
      <pubDate>Thu, 24 Jul 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/lets-party/</guid>
      <description>&lt;p&gt;Yesterday, we &lt;a href=&#34;http://karlitschek.de/2014/07/owncloud-7-is-out/&#34;&gt;released ownCloud 7&lt;/a&gt;. You might have read that somewhere on the internet - it was widely announced and broadly picked up. If you do not have ownCloud yet, you really should try it now, and if you are one of the people happily using ownCloud for a while, update soon!&lt;/p&gt;
&lt;p&gt;In my opinion, ownCloud 7 is a real step ahead. So much work went into it from the brave server guys, and the result is simply impressive: It is fast, beautiful and fully focused on what it is supposed to be and do: File sync and share, even though you still have of course all the other useful stuff like calendaring and such.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Yesterday, we <a href="http://karlitschek.de/2014/07/owncloud-7-is-out/">released ownCloud 7</a>. You might have read that somewhere on the internet - it was widely announced and broadly picked up. If you do not have ownCloud yet, you really should try it now, and if you are one of the people happily using ownCloud for a while, update soon!</p>
<p>In my opinion, ownCloud 7 is a real step ahead. So much work went into it from the brave server guys, and the result is simply impressive: It is fast, beautiful and fully focused on what it is supposed to be and do: File sync and share, even though you still have of course all the other useful stuff like calendaring and such.</p>
<p>Apart from the <a href="http://owncloud.org/features">wellknown features</a> ownCloud 7 also brings some things that you do not see on the first look. Some of these things relate to syncing and as a guy working mainly on the sync client I am especially happy about that: Already with the current released clients you will see a performance win in syncing, because ownCloud 7 handles parallel HTTP requests way better. Moreover, ownCloud 7 sends some interesting information about it&rsquo;s files, and the next generation of sync clients will for example <em>know</em> which files are shared and their permissions. We are currently working on some exciting stuff on the client side, stay tuned.</p>
<p><img alt="Release Party ownCloud 7" loading="lazy" src="/posts/lets-party/images/relparty7.jpg"></p>
<p>That all should be reason enough to <strong>celebrate</strong> together, because ownCloud is done by all of us in the community.</p>
<p>On <strong>Tuesday, august 5th</strong>, we will do a Release Party in <strong>Nuremberg, Germany</strong>. As last time, the <a href="http://www.coworking-nuernberg.de/">Coworkingspace Nürnberg</a> is hosting us. We will start at 18:00.</p>
<p>Everybody who is interested in ownCloud for whatever reason is very welcome to show up. We will probably have a short informal demonstration or two, but of course plenty room for questions, discussions, meet and greet with all kind of FOSS people, some core ownCloud people, nice beer and big fun.</p>
<p><strong>You</strong> really should come! And don&rsquo;t forget to tell your friends, thanks!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 1.6.1</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-1-6-1/</link>
      <pubDate>Mon, 30 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-1-6-1/</guid>
      <description>&lt;p&gt;End of last week, we have released &lt;a href=&#34;http://owncloud.org/changelog/desktop/&#34;&gt;version 1.6.1&lt;/a&gt; of the ownCloud Client, the desktop tool that does file syncing with your &lt;a href=&#34;http://owncloud.org&#34;&gt;ownCloud&lt;/a&gt;. Read on the &lt;a href=&#34;http://owncloud.org/install/#desktop&#34;&gt;Desktop Client page&lt;/a&gt; how to get and install it.&lt;/p&gt;
&lt;p&gt;The recommendation is to update your installation to this version. The previous &lt;a href=&#34;https://daniel.molkentin.net/2014/04/09/owncloud-client-1-6-the-tour/&#34;&gt;version 1.6.0&lt;/a&gt; had great new features, first and foremost the parallel up- and download of files and a way more performant handling of the local sync journal. That required a lot of code changes. Unfortunately that also brought in some bugs which are now fixed with the 1.6.1 release.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>End of last week, we have released <a href="http://owncloud.org/changelog/desktop/">version 1.6.1</a> of the ownCloud Client, the desktop tool that does file syncing with your <a href="http://owncloud.org">ownCloud</a>. Read on the <a href="http://owncloud.org/install/#desktop">Desktop Client page</a> how to get and install it.</p>
<p>The recommendation is to update your installation to this version. The previous <a href="https://daniel.molkentin.net/2014/04/09/owncloud-client-1-6-the-tour/">version 1.6.0</a> had great new features, first and foremost the parallel up- and download of files and a way more performant handling of the local sync journal. That required a lot of code changes. Unfortunately that also brought in some bugs which are now fixed with the 1.6.1 release.</p>
<p>On the windows platforms, we experienced a memory leak that over time let the memory consumption of the client grow. Also, a problem in the Qt5 library that we ship for windows caused the problem that under some circumstances the wrong encryption lib was loaded, so that some people saw SSL problems on Windows.</p>
<p>And there were crashes. Users kept on reporting that the client was crashing after some time on windows, without a special reason. None of the developers was able to reproduce that or ever saw that. We asked for backtraces, which also can be produced on windows. Even though the backtraces looked similar, we did not find an obvious reason for the crashes. Finally, by reading through all involved code levels again and again, Olivier was able to spot some code in libneon that, again under special circumstances, could cause crashes on win.</p>
<p>It was a one line fix, we quickly built test packages, people tested, and finally the crashes were gone (the patch to libneon is on its way to upstream of course).</p>
<p>All that is now fixed in 1.6.1.</p>
<p>What does that show? There not very much little &ldquo;easy&rdquo; bug findings any more. That is similar to the soccer world championship, where the coaches keep telling that there are no &ldquo;easy opponents&rdquo; any more nowadays, which is also true. These tricky problems we face in the client are hard to find, require time, often special setups if they are reproduceable at all, and advanced debugging skills. Very challenging, very much fun. But that also requires very much patience from the people who suffer from that bugs. We keep on asking questions, ask to test new daily builds and need time to investigate stuff, and more time to release once we have the fix.</p>
<p>Thank you all for helping in this situation, not giving up, for again testing another daily build, reporting back, trying again. That is really <strong>big</strong>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud @ Chemnitzer Linuxtage 2014</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-chemnitzer-linuxtage-2014/</link>
      <pubDate>Wed, 19 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-chemnitzer-linuxtage-2014/</guid>
      <description>&lt;p&gt;Last weekend Daniel, Arthur, Morris and me were in Chemnitz where the &lt;a href=&#34;http://chemnitzer.linux-tage.de/2014/de/info/&#34;&gt;Chemnitzer Linuxtage 2014&lt;/a&gt; took place. We drove a booth during the two days, the CLT host around 60 boothes of companies and FOSS projects. I like to go to the CLT because it is perfectly organized with great enthusiasm of everybody involved from the organisation team. Food, schedules, the venue, everything is perfect.&lt;/p&gt;
&lt;p&gt;Even on saturday morning, short after opening of the event, somebody from the orga team was showing up on the booth with chocolate for the volunteers, saying hello and asking if everything is in place for a successful weekend. A small detail, which shows how much effort is put into organization of the event.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Last weekend Daniel, Arthur, Morris and me were in Chemnitz where the <a href="http://chemnitzer.linux-tage.de/2014/de/info/">Chemnitzer Linuxtage 2014</a> took place. We drove a booth during the two days, the CLT host around 60 boothes of companies and FOSS projects. I like to go to the CLT because it is perfectly organized with great enthusiasm of everybody involved from the organisation team. Food, schedules, the venue, everything is perfect.</p>
<p>Even on saturday morning, short after opening of the event, somebody from the orga team was showing up on the booth with chocolate for the volunteers, saying hello and asking if everything is in place for a successful weekend. A small detail, which shows how much effort is put into organization of the event.</p>
<p>As a result, visitors come to visit the event. It&rsquo;s mostly a community centric event: Exhibitors are mostly representing FOSS projects such as <a href="openstreetmap.org">openstreetmap.org</a>, distributions like <a href="http://fedoraproject.org">Fedora</a> or <a href="http://opensuse.org">openSUSE</a> or companies from the free software market. [caption id=&ldquo;attachment_428&rdquo; align=&ldquo;alignright&rdquo; width=&ldquo;595&rdquo;]<a href="http://dragotin.files.wordpress.com/2014/03/clt14_morris.jpg"><img alt="Morris in action on the booth" loading="lazy" src="/posts/owncloud-chemnitzer-linuxtage-2014/images/clt14_morris.jpg"></a> Morris in action on the booth[/caption]The majority of visitors are mostly interested in private use of the software. But, no rule without exception, we also had a remarkable number of people from companies, either executives or people working in the IT departments, who were interested in ownCloud.</p>
<p>Speaking about <a href="http://owncloud.org">ownCloud</a>, I want to say that it&rsquo;s amazing to represent our project. People know it, people like it, people use it. In private, but also in professional space people work with ownCloud already or are planing to start with ownCloud. ownCloud already is <em>the</em> accepted solution for the problems that became so practical with the NSA scandal last year.</p>
<p>My talk with title <em><a href="http://chemnitzer.linux-tage.de/2014/de/vortraege/detail/279">A private Cloud with ownCloud</a></em> on Saturday morning was very well received and went smooth. The room was too small, lots of people had to stand or sit on the stairs. It was a very positive atmosphere.</p>
<p>Something that changed compared to last year and the year before: Most discussions were around how ownCloud can be installed, integrated and used and not any more about which features are still missing or maybe also bugs.</p>
<p>So it were two very exhausting days, but big fun! Thanks to Daniel, Arthur and Morris for the work and fun we had on the booth, and thanks to the CLT team for CLT.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud 6 Releaseparty in Nuremberg</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-6-releaseparty-in-nuremberg/</link>
      <pubDate>Fri, 13 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-6-releaseparty-in-nuremberg/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://dragotin.files.wordpress.com/2013/12/oc6_releaseparty.png&#34;&gt;&lt;img alt=&#34;oc6_releaseparty&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-6-releaseparty-in-nuremberg/images/oc6_releaseparty.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The ownCloud community released &lt;a href=&#34;http://owncloud.org/six/&#34;&gt;ownCloud 6&lt;/a&gt; a couple of days ago. That was another big release and we want to &lt;em&gt;celebrate&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;Please, everybody who is interested in ownCloud, like to learn more, give feedback or just want to meet other people from the community, you are invited to show up at &lt;a href=&#34;http://www.coworking-nuernberg.de/&#34;&gt;Coworking Space&lt;/a&gt; in &lt;strong&gt;Nuremberg&lt;/strong&gt;, Josephsplatz 8, on &lt;strong&gt;december 18th, 6pm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We will have a relaxed evening with a little discussion, maybe short demos, cakes and stuff, and fun. No heavy talks and serious faces!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="http://dragotin.files.wordpress.com/2013/12/oc6_releaseparty.png"><img alt="oc6_releaseparty" loading="lazy" src="/posts/owncloud-6-releaseparty-in-nuremberg/images/oc6_releaseparty.png"></a></p>
<p>The ownCloud community released <a href="http://owncloud.org/six/">ownCloud 6</a> a couple of days ago. That was another big release and we want to <em>celebrate</em>!</p>
<p>Please, everybody who is interested in ownCloud, like to learn more, give feedback or just want to meet other people from the community, you are invited to show up at <a href="http://www.coworking-nuernberg.de/">Coworking Space</a> in <strong>Nuremberg</strong>, Josephsplatz 8, on <strong>december 18th, 6pm</strong>.</p>
<p>We will have a relaxed evening with a little discussion, maybe short demos, cakes and stuff, and fun. No heavy talks and serious faces!</p>
<p>We are looking forward to meeting <strong>you</strong>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>DAV Torture</title>
      <link>https://dragotin.codeberg.page/posts/dav-torture/</link>
      <pubDate>Fri, 27 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/dav-torture/</guid>
      <description>&lt;p&gt;Currently we speak a lot about performance of the ownCloud WebDAV server. Speaking with a computer programmer about performance is like speaking with a doctor about pain. It needs to be qualified, the pain, and also the performance concerns.&lt;/p&gt;
&lt;p&gt;To do a step into that direction, here is a little script collection for you to play with if you like: the DAV torture collection. We started it quite some time ago but never really introduced it. It is still very rough.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Currently we speak a lot about performance of the ownCloud WebDAV server. Speaking with a computer programmer about performance is like speaking with a doctor about pain. It needs to be qualified, the pain, and also the performance concerns.</p>
<p>To do a step into that direction, here is a little script collection for you to play with if you like: the DAV torture collection. We started it quite some time ago but never really introduced it. It is still very rough.</p>
<h2 id="what-it-does">What it does</h2>
<p>The first idea is that we need a reproducable set of files to test the server with. We don&rsquo;t want to send around huge tarballs with files, so Danimo invented two perl scripts called <code>torture_gen_layout.pl</code> and <code>torture_create_files.pl</code>. With <code>torture_gen_layout.pl</code> one can create a file that contains the layout of the test file tree, a so called layout( or .lay)-file. The .lay-file describes the test file tree completely, with names, structure and size.</p>
<p><code>torture_gen_layout.pl</code> takes the .lay-file and really creates the file tree on a machine. The cool thing about is that we can commit on a .lay-file as our standard test tree and just pass a file around with a couple of kbytes size that describes the tree.</p>
<p>Now that there is a standard file tree to test with, I wrote a little script called <code>dav_torture.pl</code>. It copies the whole tree described by a .lay file and created on the local file system to an ownCloud WebDAV server using PUT requests. Along with that, it produces performance relevant output.</p>
<h2 id="try-it">Try it</h2>
<p>Download the <a href="http://download.owncloud.org/download/testing/davtorture.tgz">tarball</a> and unpack it, or clone it from <a href="https://github.com/owncloud/administration">github</a>.</p>
<p>After having installed a couple of perl deps (probably only modules Data::Random::WordList, HTTP::DAV, HTTP::Request::Common are not in perl&rsquo;s core) you should be able to run the scripts from within the directory.</p>
<p>First, you need to create a config file. For that, copy t1.cfg.in to t1.cfg (don&rsquo;t ask about the name) and edit it. For this example, we only need user, passwd and url to access ownCloud. Be careful with the syntax, it gets sourced into a perl script.</p>
<p>Now, create the local reference tree with a .lay-file which I put into the tarball: <code>./torture_create_files.pl small.lay tree</code> This command will build the file tree described by small.lay into the directory called <em>tree</em>.</p>
<p>Now, you can already treat your server: Call <code>./dav_torture.pl small.lay tree</code> This will perform PUT commands to the WebDAV server and output some useful information. It also appends to two files <em>results.dat</em> and <em>puts.tsv</em>. results.dat just logs the results of subseqent call. The tsv file is the data file for the html file <code>index.html</code> in the same directory. That opened in a browser gives a curve over the average transmission rate of all subsequent runs of <code>dav_torture.pl</code> (You have run <code>dav_torture.pl</code> a couple of times to make that visible). The <code>dav_torture.pl</code> script can now be hooked into our Jenkins CI and performed after every server checkin. The resulting curve must never raise :-)</p>
<p>To create your own .lay-file, open <code>torture_gen_layout.pl</code> and play with the variables on top of the script. Simply call the script and redirect into a file to create a .lay-file.</p>
<p>All this is pretty experimental, but I thought it will help us to get to a more objective discussion about performance. I wanted to open this up in a pretty early stage because I am hoping that this might be interesting for somebody of you: Treat your own server, create interesting .lay files or improve the script set (testing plain PUTs is rather boring) or the result html presentation.</p>
<p>What do you think?</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client Release 1.4.1</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-release-1-4-1/</link>
      <pubDate>Thu, 26 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-release-1-4-1/</guid>
      <description>&lt;p&gt;I am happy to announce that we today were able to release version 1.4.1 of the &lt;a href=&#34;http://owncloud.org&#34;&gt;ownCloud&lt;/a&gt; Desktop Client on the three platforms Linux, MacOS and Windows.&lt;/p&gt;
&lt;p&gt;You find suitable download links as usual at: &lt;a href=&#34;http://owncloud.org/sync-clients/&#34;&gt;http://owncloud.org/sync-clients/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Version 1.4.1 is a bugfix release for the 1.4.0 version released a few of weeks ago which brought a lot of &lt;a href=&#34;https://daniel.molkentin.net/2013/08/08/owncloud-client-1-4-a-visual-guide/&#34;&gt;new features&lt;/a&gt;. This one solves a couple of problems that were coming up during the last few weeks. For example, the &lt;a href=&#34;https://github.com/owncloud/mirall/issues/945&#34;&gt;problem&lt;/a&gt; that the client lost its configuration (at least) on the Win32 platform when the machine was shut down is fixed. Also a lot of redundant uploads wont happen any more. And there are even more fixes, as the detailed &lt;a href=&#34;http://owncloud.org/sync-clients/releases&#34;&gt;Changelog&lt;/a&gt; rules out.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I am happy to announce that we today were able to release version 1.4.1 of the <a href="http://owncloud.org">ownCloud</a> Desktop Client on the three platforms Linux, MacOS and Windows.</p>
<p>You find suitable download links as usual at: <a href="http://owncloud.org/sync-clients/">http://owncloud.org/sync-clients/</a></p>
<p>Version 1.4.1 is a bugfix release for the 1.4.0 version released a few of weeks ago which brought a lot of <a href="https://daniel.molkentin.net/2013/08/08/owncloud-client-1-4-a-visual-guide/">new features</a>. This one solves a couple of problems that were coming up during the last few weeks. For example, the <a href="https://github.com/owncloud/mirall/issues/945">problem</a> that the client lost its configuration (at least) on the Win32 platform when the machine was shut down is fixed. Also a lot of redundant uploads wont happen any more. And there are even more fixes, as the detailed <a href="http://owncloud.org/sync-clients/releases">Changelog</a> rules out.</p>
<p>We thank you for your ongoing support and the good work on bugs that came up. As usual we are looking forward to your feedback. Please work with us in the <a href="https://github.com/owncloud/mirall/issues">Github bugtracker</a> if you experience issues.</p>
]]></content:encoded>
    </item>
    <item>
      <title>After the 1.4.0 ownCloud Client Release</title>
      <link>https://dragotin.codeberg.page/posts/after-the-1-4-0-owncloud-client-release/</link>
      <pubDate>Wed, 11 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/after-the-1-4-0-owncloud-client-release/</guid>
      <description>&lt;p&gt;You might have heard, ownCloud Client 1.4.0 was released last week. It is available from &lt;a href=&#34;http://www.owncloud.org/sync-clients&#34;&gt;our sync clients page&lt;/a&gt; for all major desktop platforms, investigate the &lt;a href=&#34;http://owncloud.org/sync-clients/releases/&#34;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://daniel.molkentin.net/&#34;&gt;Danimos&lt;/a&gt; &lt;a href=&#34;https://daniel.molkentin.net/2013/08/08/owncloud-client-1-4-a-visual-guide/&#34;&gt;Visual Guide&lt;/a&gt; has outlined the new stuff in the release already, so no need to repeat it here. You should install and try it, that seems to be the opinion of many people who tried it.&lt;/p&gt;
&lt;p&gt;Also people who shared their critical view on the client very publically in the past are much more pleased now with 1.4.0. One example is a recent &lt;a href=&#34;http://www.bitblokes.de/2013/09/tolle-verbesserungen-owncloud-synchronisations-client-1-4-seit-einigen-wochen-im-einsatz/&#34;&gt;blog post&lt;/a&gt; on &lt;a href=&#34;http://www.bitblokes.de/&#34;&gt;BITBlokes&lt;/a&gt;. It is a blog about all kind of topics around FOSS. I regularly read it and often share its opinions. He concludes very positively about the 1.4.0 client.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>You might have heard, ownCloud Client 1.4.0 was released last week. It is available from <a href="http://www.owncloud.org/sync-clients">our sync clients page</a> for all major desktop platforms, investigate the <a href="http://owncloud.org/sync-clients/releases/">Changelog</a>.</p>
<p><a href="https://daniel.molkentin.net/">Danimos</a> <a href="https://daniel.molkentin.net/2013/08/08/owncloud-client-1-4-a-visual-guide/">Visual Guide</a> has outlined the new stuff in the release already, so no need to repeat it here. You should install and try it, that seems to be the opinion of many people who tried it.</p>
<p>Also people who shared their critical view on the client very publically in the past are much more pleased now with 1.4.0. One example is a recent <a href="http://www.bitblokes.de/2013/09/tolle-verbesserungen-owncloud-synchronisations-client-1-4-seit-einigen-wochen-im-einsatz/">blog post</a> on <a href="http://www.bitblokes.de/">BITBlokes</a>. It is a blog about all kind of topics around FOSS. I regularly read it and often share its opinions. He concludes very positively about the 1.4.0 client.</p>
<p>It is good to see the positive feedback overall. That shows a couple of things from my engineering point of view: The concentrated work we continously do on all parts of ownCloud pays off. That is obvious of course, but still nice to see. And our (also obvious) actions to improve code quality such as the consequent use of continous integration, code reviews and such helps to improve quality.</p>
<p><em>&ldquo;People are always excited if releases come with GUI changes!&rdquo;</em> I heard people saying. Well, maybe, but that&rsquo;s not the whole truth. It also proves for me again is how important UI design and UX is. Me as a knee-deep-developer have an interesting relationship to all UX topics: I always have an opinion. Often a strong opinion. But the results coming out of that have not always been the, well, the most optimal. Very fortunate on the client we work together with our UX guy Jan and the positive feedback also shows how good that is for the software.</p>
<p>But enough of release pride. There is more work to do: The bug tracker is still not empty, the list of feature ideas is long. We will continue to focus on correctness, stability and robustness of syncing, performance and useful features and work on a version 1.5 for you.</p>
<p>These are a couple of concrete points we&rsquo;re focussing on for 1.5:</p>
<ol>
<li>we already merged the client code on the new upstream sync version in git.</li>
<li>performace improvements through further reduction of the number of requests and more efficiency in database operations on the client.</li>
<li>we are working on a new propagator component that allows us to do the changes mentioned in 2 more easily.</li>
<li>File manager integration, which means havingn icons in Explorer, Dolphin and friends.</li>
</ol>
<p>A more detailed list can be found at <a href="https://github.com/owncloud/mirall/issues?milestone=7&amp;page=1&amp;state=open">github</a>.</p>
<p>Thank you for all your help and support. It&rsquo;s big fun!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Sync Progress Display</title>
      <link>https://dragotin.codeberg.page/posts/sync-progress-display/</link>
      <pubDate>Tue, 23 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/sync-progress-display/</guid>
      <description>&lt;p&gt;here is something new and eye candy in the &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt; &lt;a href=&#34;http://owncloud.org/sync-clients/&#34;&gt;Client&lt;/a&gt;, so let me show a bit of what we have worked on recently.&lt;/p&gt;
&lt;p&gt;Many users of the ownCloud Client were asking for sync progress information, in fact there was none at all until today which is a bit boring. The reason why we hadn&amp;rsquo;t it was simply that &lt;a href=&#34;http://csync.org&#34;&gt;csync&lt;/a&gt;, which is the &lt;a href=&#34;http://csync.org&#34;&gt;file synchronizer&lt;/a&gt; engine we use, did not have an API to hand over progress information of an actual up- or download to higher levels of the application.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>here is something new and eye candy in the <a href="http://www.owncloud.org">ownCloud</a> <a href="http://owncloud.org/sync-clients/">Client</a>, so let me show a bit of what we have worked on recently.</p>
<p>Many users of the ownCloud Client were asking for sync progress information, in fact there was none at all until today which is a bit boring. The reason why we hadn&rsquo;t it was simply that <a href="http://csync.org">csync</a>, which is the <a href="http://csync.org">file synchronizer</a> engine we use, did not have an API to hand over progress information of an actual up- or download to higher levels of the application.</p>
<p>We implemented two callbacks in csync: One that informs about start, end and progress of an up- or download of an individual file. Another one processes the overall progress of the currently running sync run, indicating for example that eight files have to be processed, current is file number four, and <em>x</em> of the overall sum <em>y</em> bytes have been processed already.</p>
<p>That information is passed into a singleton class called ProgressDispatcher in the client code, where other classes can connect to a signal providing that information. That comes handy as we need the information at different places in the client GUI. [caption id=&ldquo;attachment_299&rdquo; align=&ldquo;alignright&rdquo; width=&ldquo;399&rdquo;]<a href="http://dragotin.files.wordpress.com/2013/07/sync_progress5.png"><img alt="Sync Progress Display" loading="lazy" src="/posts/sync-progress-display/images/sync_progress5.png"></a> Sync Progress Display[/caption] The screenshot shows the first and probably most detailed implementation of the progress display in the sync accounts details which are part of a new settings- and status dialog.</p>
<p>The visual appearance was worked out by our interaction designer Jan. We always have to argue a bit because obviously <strong>I</strong> am the greatest interaction designer around ;-) but well, finally we do like Jan says and the result is great IMO. It&rsquo;s great that we have him for ownCloud as that guarantees that our project is not drifting too much onto the geeky techy side which (I heard) is scaring off some users&hellip;</p>
<p>Hope you like it! You can get a preview in the current nightly builds (<a href="http://download.owncloud.com/download/nightly/">win, mac</a>, <a href="http://download.opensuse.org/repositories/isv:/ownCloud:/community:/nightly/">Linux</a>) of the client! Please <a href="https://github.com/owncloud/mirall/blob/master/CONTRIBUTING.md">report bugs</a> as you find them, thanks.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client May Hackfest</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-may-hackfest/</link>
      <pubDate>Fri, 03 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-may-hackfest/</guid>
      <description>&lt;p&gt;Again we&amp;rsquo;re meeting in Berlin at &lt;a href=&#34;http://www.woboq.com&#34;&gt;Woboq&lt;/a&gt; Intl. Headquarters to work on the ownCloud Sync Client again. One of our topics is the still not completely fixed problem with conflict files. There has been lots of troubles about false conflict files the client is generating in that situations were the ETag database is wasted.&lt;/p&gt;
&lt;p&gt;We revisited this problem and will come up with a better solution.&lt;/p&gt;
&lt;p&gt;The key changes will probably be&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Again we&rsquo;re meeting in Berlin at <a href="http://www.woboq.com">Woboq</a> Intl. Headquarters to work on the ownCloud Sync Client again. One of our topics is the still not completely fixed problem with conflict files. There has been lots of troubles about false conflict files the client is generating in that situations were the ETag database is wasted.</p>
<p>We revisited this problem and will come up with a better solution.</p>
<p>The key changes will probably be</p>
<ul>
<li>Conflict files will never again be generated on the server. Even if we are in a conflict situation, we will download the file and keep the conflicting version only on the client. This enables us to detect false conflicts.</li>
<li>The current way we handle a system time difference has to be changed. We wont adjust the file mtimes of files in the file system any more with the time difference between the client and server. That way we do not suffer from floating time differences any more. For the decision of which version is more recent, we will still consider the time difference.</li>
<li>We will use a very quick request like OPTION to get the servers time setting to the client. That will allow to calculate the time difference between server and client more accurately. It&rsquo;s needed to decide which file is more recent.</li>
</ul>
<p><a href="http://dragotin.files.wordpress.com/2013/05/aktoc.png"><img alt="aktoc" loading="lazy" src="/posts/owncloud-client-may-hackfest/images/aktoc.png"></a> Read this as a note to self, yet we feel very well fitting into Berlin round may 1st ;-)</p>
<p>Photo credit: <a href="http://www.flickr.com/photos/96dpi/521855009/">96dpi</a> / <a href="http://creativecommons.org/licenses/by-nc/2.0/">CC BY-NC</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>What&#39;s on in Nightly?</title>
      <link>https://dragotin.codeberg.page/posts/whats-on-in-nightly/</link>
      <pubDate>Mon, 29 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/whats-on-in-nightly/</guid>
      <description>&lt;p&gt;We ownCloud Client devs were quite busy doing bug investigations and two releases the last couple of weeks. But that does not mean that nothing went into feature branches. It did, and now we can start to think of a release 1.3.0 with a couple of new features for the client.&lt;/p&gt;
&lt;p&gt;Here is a small overview of what went into ocsync master (actually the &lt;a href=&#34;http://git.csync.org/users/freitag/csync.git/log/?h=dav&#34;&gt;dav branch&lt;/a&gt;) and into &lt;a href=&#34;http://github.com/owncloud/mirall&#34;&gt;mirall master&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note that this is alpha state software, but it&amp;rsquo;s already available for testing from our &lt;a href=&#34;https://dragotin.wordpress.com/2013/04/23/owncloud-nightly-builds/&#34;&gt;nightly builds&lt;/a&gt; at the &lt;a href=&#34;http://download.opensuse.org/repositories/isv:/ownCloud:/community:/nightly/&#34;&gt;ownCloud nightly repository&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>We ownCloud Client devs were quite busy doing bug investigations and two releases the last couple of weeks. But that does not mean that nothing went into feature branches. It did, and now we can start to think of a release 1.3.0 with a couple of new features for the client.</p>
<p>Here is a small overview of what went into ocsync master (actually the <a href="http://git.csync.org/users/freitag/csync.git/log/?h=dav">dav branch</a>) and into <a href="http://github.com/owncloud/mirall">mirall master</a>.</p>
<p>Note that this is alpha state software, but it&rsquo;s already available for testing from our <a href="https://dragotin.wordpress.com/2013/04/23/owncloud-nightly-builds/">nightly builds</a> at the <a href="http://download.opensuse.org/repositories/isv:/ownCloud:/community:/nightly/">ownCloud nightly repository</a>.</p>
<p>If you enable the nightly package repository on your system, please be sure to use the machine for testing purposes only. Windows and Mac nightly builds can be found <a href="http://download.owncloud.com/download/nightly">here to download</a>.</p>
<h3 id="csync-big-file-chunking">csync: Big File Chunking</h3>
<p>Handling big files over HTTP is difficult, if files grew bigger than a gigabyte, we faced multiple problems. To deal with that, <a href="https://github.com/owncloud/core/wiki/spec:-big-file-chunking">we thought</a> of splitting up big files and transmit the parts to let the server finally assemble the file again once all parts are there.</p>
<p>We wrote a little library to implement that, called <a href="http://git.csync.org/users/freitag/csync.git/tree/src/httpbf?h=dav">httpbf</a>. It is now integrated in the current development branch. You will see files big files split up into parts for transmission to the server. With that there should not be a filesize limit to work with any more, except the limits we have from the operating system etc.</p>
<h3 id="up--and-download-resume">Up- and Download Resume</h3>
<p>With big file chunking, we also introduce up- and download resume. If a file transmission was interrupted and is started over again later, only the missing parts are going to be pushed again. However, we&rsquo;re not yet transmitting only changed chunks for existing files yet, just to answer that question here before it comes up. That will be subject of more enhancements.</p>
<h3 id="source-file-verification">Source File Verification</h3>
<p>Another problem with big files is that if one gets copied into the synced dir on the local machine, the copy is not finished before the sync acutally starts. That can result in useless transmissions because inconsistent data is synced.</p>
<p>We added code to the httpbf library that checks for the integrity of the source file. When the first chunk is transmitted, it is checked if the file has still the size and mod time from the beginning. If not, the library waits for two seconds and starts over with a check again. That way, it waits until the source file has stabilized. A final check if the source file hasn&rsquo;t changed during upload is done for every file when the upload is finished.</p>
<h3 id="csync-context-reuse">CSync Context Reuse</h3>
<p>There is the very unpleasant problem on some distros (namely Ubuntu and Fedora) that the ownCloud Client wastes file descriptors. We figured that this is because the system libraries on that platforms fail to unload the csync ownCloud module properly.</p>
<p>Version 1.2.5 contains a quick fix for that, but the real fix is to reuse the csync context within mirall and not build it up and down for every sync run as we did until now. So we developed the function csync_commit which commits the results of the sync run to the database and leaves the csync context intact for the next run. That way we just load and unload the ownCloud module on time and not every 30 seconds. The csync patch already went upstream.</p>
<h3 id="mirall-new-setup-dialog">Mirall: New Setup Dialog</h3>
<p><a href="http://dragotin.files.wordpress.com/2013/04/newsetup_s.png"><img alt="newsetup_s" loading="lazy" src="/posts/whats-on-in-nightly/images/newsetup_s.png"></a>There is also the new setup dialog in the nightly builds: It is much more simplified compared to the old one, user only needs to add the url and user credentials and thats it. Also, it syncs the whole ownCloud to a local folder, just like other boxes do. That is one of the most often heard enhancement requests, and here we go.</p>
<p>That all I think would qualify for a good 1.3.0 release, but we need more time to fine tune,polish, test and bugfix. But we would appreciate if people could help test. Please report bugs in the <a href="http://github.com/owncloud/mirall/issues/">client&rsquo;s bugtracker</a>. We need to find bugs prior the release, and that happens with your help!</p>
<p>Have fun &amp; Thanks a lot for testing!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client Release 1.2.5</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-release-1-2-5/</link>
      <pubDate>Tue, 23 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-release-1-2-5/</guid>
      <description>&lt;p&gt;Today is release day!&lt;/p&gt;
&lt;p&gt;We just release ownCloud Client 1.2.5, hurrah! It&amp;rsquo;s a small bug fix release, but it will make more people happy users! It fixes three ugly crashes we found with the help of encouraged bug hunters. One of them was an race between our thread which runs csync and the Qt SSL stack we&amp;rsquo;re obviously using. That caused a crash which happened after quite some run time, or also never&amp;hellip; Hard to reproduce and debug, but finally Danimo and his mighty friends were able to nail that.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today is release day!</p>
<p>We just release ownCloud Client 1.2.5, hurrah! It&rsquo;s a small bug fix release, but it will make more people happy users! It fixes three ugly crashes we found with the help of encouraged bug hunters. One of them was an race between our thread which runs csync and the Qt SSL stack we&rsquo;re obviously using. That caused a crash which happened after quite some run time, or also never&hellip; Hard to reproduce and debug, but finally Danimo and his mighty friends were able to nail that.</p>
<p>The new client can be found through it&rsquo;s <a href="http://owncloud.org/sync-clients">download page</a>, here is the <a href="http://owncloud.org/sync-clients/releases">Changelog</a>.</p>
<p>If you find issues, please help us to improve ownCloud by commenting or reporting the bugs on our <a href="http://github.com/owncloud/mirall/issues/">bugtracker</a>. Thanks!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Nightly Builds</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-nightly-builds/</link>
      <pubDate>Tue, 23 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-nightly-builds/</guid>
      <description>&lt;p&gt;as you might have heard, we&amp;rsquo;re providing nightly builds of the parts of &lt;a href=&#34;http://owncloud.org&#34;&gt;ownCloud&lt;/a&gt;, which is ownCloud community server as well as the ownCloud client on its supported platforms Linux, Windows and Mac.&lt;/p&gt;
&lt;p&gt;The nightly builds of the client for Windows and Mac and the source balls can be downloaded from &lt;a href=&#34;http://download.owncloud.com/download/nightly/&#34;&gt;the nightly directory&lt;/a&gt; on our download server. They are named after the last release, followed by a date time stamp, which is simply a concatentation of the year, month and day the nightly was built on. For linux we maintain a so called &lt;a href=&#34;http://software.opensuse.org/download/package?project=isv:ownCloud:community:nightly&amp;amp;package=owncloud-client&#34;&gt;nightly repository&lt;/a&gt; in the openSUSE Buildservice which builds for various distributions. That can be added to the linux package management system and that way every morning, an update is there for you. The ownCloud server is built only in the nightly repository from &lt;a href=&#34;http://download.owncloud.com/community/owncloud-daily-stable5.tar.bz2&#34;&gt;this daily source&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>as you might have heard, we&rsquo;re providing nightly builds of the parts of <a href="http://owncloud.org">ownCloud</a>, which is ownCloud community server as well as the ownCloud client on its supported platforms Linux, Windows and Mac.</p>
<p>The nightly builds of the client for Windows and Mac and the source balls can be downloaded from <a href="http://download.owncloud.com/download/nightly/">the nightly directory</a> on our download server. They are named after the last release, followed by a date time stamp, which is simply a concatentation of the year, month and day the nightly was built on. For linux we maintain a so called <a href="http://software.opensuse.org/download/package?project=isv:ownCloud:community:nightly&amp;package=owncloud-client">nightly repository</a> in the openSUSE Buildservice which builds for various distributions. That can be added to the linux package management system and that way every morning, an update is there for you. The ownCloud server is built only in the nightly repository from <a href="http://download.owncloud.com/community/owncloud-daily-stable5.tar.bz2">this daily source</a>.</p>
<h3 id="what-are-nightlies-for">What are nightlies for?</h3>
<p>To test ownCloud is a very difficult task. ownCloud is a complex system consisting of variuos parts (anybody thought ownCloud is just a &ldquo;LAMP web app&rdquo;?) which supports a huge variety of environments. That multiplies to a huge variety that needs to be tested. We had issues with that in the past and as a result, providing easy access to ready-to-run testing versions is one important action we are taking to improve quality as that enables more people to participate on tests.</p>
<p>Of course nightly builds are not released software, nor got they extensive testing. Nightly builds must never be used on production installations, please, really <strong>don&rsquo;t do</strong>.</p>
<p>But maybe you have a test server or virtual machine somewhere in spare. So it would be great if you could install a nightly version on that, combine it with a nightly built client, and see if everything runs as <strong>you</strong> would expect it.</p>
<p>Another great purpose of the nightly builds is to use it for bug verification. In client development we often comment on bugs with sentences like <em>this is fixed now, please verify with the current nightly build</em>. That way bug reporter get a very quick way to verify the fix of their issue and developers can be sure that their fix really is sufficient.</p>
<h3 id="how-are-nightlies-built">How are nightlies built?</h3>
<p>We are doing the nightly builds through an instance of <a href="http://jenkins-ci.org/">Jenkins</a>, a continous integration server. With a little script we wrote Jenkins feeds the OBS every night, so this is completely automatted. But more on that in a subsequent blog.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Meetup in Nürnberg</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-meetup-in-nurnberg/</link>
      <pubDate>Wed, 20 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-meetup-in-nurnberg/</guid>
      <description>&lt;p&gt;Next week a part of the ownCloud team will meet in Nürnberg for a creative time and we thought a little meetup would be cool. Join us for a relaxed evening where we will give short talks about current state of ownCloud, new features and the near future.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s meet &lt;strong&gt;Wednesday, February 27th, 6:00 PM&lt;/strong&gt; at &lt;a href=&#34;http://www.coworking-nuernberg.de&#34;&gt;the Nuremberg Coworking Space&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Talks (short, don&amp;rsquo;t be afraid!):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ownCloud overview&lt;/em&gt; by Holger Dyroff&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The updated ownCloud 5 User Interface&lt;/em&gt; by Jan-Christoph Borchardt&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Next steps for the ownCloud Desktop Clients&lt;/em&gt; by Daniel Molkentin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The evening closes with a get-together, your chance to meet the team and discuss in a relaxed atmosphere.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Next week a part of the ownCloud team will meet in Nürnberg for a creative time and we thought a little meetup would be cool. Join us for a relaxed evening where we will give short talks about current state of ownCloud, new features and the near future.</p>
<p>Let&rsquo;s meet <strong>Wednesday, February 27th, 6:00 PM</strong> at <a href="http://www.coworking-nuernberg.de">the Nuremberg Coworking Space</a>.</p>
<p>Talks (short, don&rsquo;t be afraid!):</p>
<ul>
<li><em>ownCloud overview</em> by Holger Dyroff</li>
<li><em>The updated ownCloud 5 User Interface</em> by Jan-Christoph Borchardt</li>
<li><em>Next steps for the ownCloud Desktop Clients</em> by Daniel Molkentin</li>
</ul>
<p>The evening closes with a get-together, your chance to meet the team and discuss in a relaxed atmosphere.</p>
<p>Everybody is welcome!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Sync Client 1.2.0 final</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-sync-client-1-2-0-final/</link>
      <pubDate>Fri, 25 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-sync-client-1-2-0-final/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;1.2.0_final&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-sync-client-1-2-0-final/images/1-2-0_final.png&#34;&gt; Yesterday, &lt;a href=&#34;http://owncloud.org/sync-clients/releases&#34;&gt;ownCloud Client 1.2.0&lt;/a&gt; was released. You can get it from &lt;a href=&#34;http://owncloud.org/sync-clients&#34;&gt;here&lt;/a&gt;. We worked on this since end of november last year, you might have seen my other blogs about the beta versions we had for this release.&lt;/p&gt;
&lt;p&gt;What is interesting about the release from a more technical point of view? Here are a couple of examples.&lt;/p&gt;
&lt;p&gt;One of the things which often was complained about was the performance of the client. &lt;em&gt;Performance&lt;/em&gt; is a very broad term, so we have to examine the details: Many people felt like its a performance problem that former clients polled the local file system for changes on the MacOSX and Windows platform. That was recommended from other projects which have experience with going through large file collections. &lt;a href=&#34;http://doc.qt.digia.com/qt/qfilesystemwatcher.html&#34; title=&#34;QFileSystemWatcher&#34;&gt;QFileSystemWatcher&lt;/a&gt; seemed not to be designed for this usecase.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img alt="1.2.0_final" loading="lazy" src="/posts/owncloud-sync-client-1-2-0-final/images/1-2-0_final.png"> Yesterday, <a href="http://owncloud.org/sync-clients/releases">ownCloud Client 1.2.0</a> was released. You can get it from <a href="http://owncloud.org/sync-clients">here</a>. We worked on this since end of november last year, you might have seen my other blogs about the beta versions we had for this release.</p>
<p>What is interesting about the release from a more technical point of view? Here are a couple of examples.</p>
<p>One of the things which often was complained about was the performance of the client. <em>Performance</em> is a very broad term, so we have to examine the details: Many people felt like its a performance problem that former clients polled the local file system for changes on the MacOSX and Windows platform. That was recommended from other projects which have experience with going through large file collections. <a href="http://doc.qt.digia.com/qt/qfilesystemwatcher.html" title="QFileSystemWatcher">QFileSystemWatcher</a> seemed not to be designed for this usecase.</p>
<p>Polling was ok for desktop computers with up-to-date hardware, but on devices running from batteries this was a energy drain. Good that we could fix that with 1.2.0 using native implementation of change detectors on Windows and MacOSX. They detect changes within a file system tree. If a change is detected, a sync run is started. But note, this is only for local file systems. Detection of changes on the server is a different story which has to be told as well.</p>
<p>Another performance problem was within the file upload which is done by a HTTP PUT request. Month ago (pretty after my start at ownCloud) I implemented it using a tmp file in between. That means, the source file was copied to a tmp file, and from that it was processed to the request body. Improvement was needed and we changed the code to directly read from the file descriptor of the opened source file.</p>
<p>Another thing that was improved with 1.2.0 is the error reporting to the user. Former versions of the client sometimes provided error messages which were not really accurately describing the problem. The reason for that was that csync uses errnos (yes, the ones from errno.h) to name errors as csync maps everything to a POSIX file interface. That surely works as long as you&rsquo;re on a kind of file system. But it&rsquo;s hard to map HTTP communication problems onto that. So we decided to add our own &ldquo;custom&rdquo; errnos and enhance the whole idea to use these to describe problems. That works more accurate now.</p>
<p>The next things on the list are for example a more convenient setup dialog for the client. Also we will get away from the kind of hard coded target file name on the cloud. A better network recognition will also be next as well as better handling of big files. And more&hellip;</p>
<p>Thanks a lot to all who helped to get 1.2.0 finished! It is big fun to work in such a great community :-)</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 1.2.0 beta2</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-1-2-0-beta2/</link>
      <pubDate>Sat, 19 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-1-2-0-beta2/</guid>
      <description>&lt;p&gt;Yesterday the ownCloud Client team released the ownCloud Client 1.2.0 beta 2. It includes a couple of improvements compared to &lt;a href=&#34;https://dragotin.wordpress.com/2012/12/21/owncloud-client-1-2-0-beta1/&#34;&gt;beta 1&lt;/a&gt; which was released before Christmas.&lt;/p&gt;
&lt;p&gt;The release of version 1.2.0 is planned for the next week if things go smooth.&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_219&amp;rdquo; align=&amp;ldquo;alignright&amp;rdquo; width=&amp;ldquo;595&amp;rdquo;]&lt;img alt=&#34;New Sync Protocol Dialog&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-client-1-2-0-beta2/images/statusdialog_detail.png&#34;&gt; New Sync Protocol Dialog[/caption]&lt;/p&gt;
&lt;p&gt;In particular, the the following improvements were added:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proxy authentication fixed (Basic auth, NTLM will not yet work)&lt;/li&gt;
&lt;li&gt;The status dialog now provides statistics on the last sync run (via the info button). It will tell in detail which files have been synced, added or deleted.&lt;/li&gt;
&lt;li&gt;Client will go offline while the server in in maintenance mode (feature available with ownCoud master only)&lt;/li&gt;
&lt;li&gt;Improved SSL Certificate acceptance&lt;/li&gt;
&lt;li&gt;All sizes of the new icons are available.&lt;/li&gt;
&lt;li&gt;Support files &amp;gt; 2 GB on all platforms for uploading.&lt;/li&gt;
&lt;li&gt;Fixed some minor memory leaks and again saved some server requests through optimizations.&lt;/li&gt;
&lt;li&gt;Improved error reporting to the user.&lt;/li&gt;
&lt;li&gt;Remove legacy theming support.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We would appreciate if you give this release a test ride. Note that because it is beta you should make extra sure to have have backups of your data.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Yesterday the ownCloud Client team released the ownCloud Client 1.2.0 beta 2. It includes a couple of improvements compared to <a href="https://dragotin.wordpress.com/2012/12/21/owncloud-client-1-2-0-beta1/">beta 1</a> which was released before Christmas.</p>
<p>The release of version 1.2.0 is planned for the next week if things go smooth.</p>
<p>[caption id=&ldquo;attachment_219&rdquo; align=&ldquo;alignright&rdquo; width=&ldquo;595&rdquo;]<img alt="New Sync Protocol Dialog" loading="lazy" src="/posts/owncloud-client-1-2-0-beta2/images/statusdialog_detail.png"> New Sync Protocol Dialog[/caption]</p>
<p>In particular, the the following improvements were added:</p>
<ul>
<li>Proxy authentication fixed (Basic auth, NTLM will not yet work)</li>
<li>The status dialog now provides statistics on the last sync run (via the info button). It will tell in detail which files have been synced, added or deleted.</li>
<li>Client will go offline while the server in in maintenance mode (feature available with ownCoud master only)</li>
<li>Improved SSL Certificate acceptance</li>
<li>All sizes of the new icons are available.</li>
<li>Support files &gt; 2 GB on all platforms for uploading.</li>
<li>Fixed some minor memory leaks and again saved some server requests through optimizations.</li>
<li>Improved error reporting to the user.</li>
<li>Remove legacy theming support.</li>
</ul>
<p>We would appreciate if you give this release a test ride. Note that because it is beta you should make extra sure to have have backups of your data.</p>
<p>If you want to give feedback, please use <a href="https://mail.kde.org/mailman/listinfo/owncloud">our mailing list</a> for general discussion and the <a href="https://github.com/owncloud/mirall/issues">issue tracker</a> for bug reports. Please read our <a href="https://github.com/owncloud/mirall/blob/master/CONTRIBUTING.md">new guidelines</a> on bug reporting before!</p>
<p>Download Links:</p>
<ul>
<li>Windows, 32/64 Bit: <a href="http://download.owncloud.com/download/testing/owncloud-1.2.0beta2-setup.exe">http://download.owncloud.com/download/testing/owncloud-1.2.0beta2-setup.exe</a></li>
<li>Mac OS X ( &gt;= 10.6, 64 bit): <a href="http://download.owncloud.com/download/testing/ownCloud-1.2.0beta2.dmg">http://download.owncloud.com/download/testing/ownCloud-1.2.0beta2.dmg</a></li>
<li>Linux: <a href="http://software.opensuse.org/download/package?project=isv:ownCloud:testing&amp;package=owncloud-client">http://software.opensuse.org/download/package?project=isv:ownCloud:testing&amp;package=owncloud-client</a></li>
</ul>
<p>Sources:</p>
<ul>
<li>Mirall: <a href="http://download.owncloud.com/download/testing/mirall-1.2.0beta2.tar.bz2">http://download.owncloud.com/download/testing/mirall-1.2.0beta2.tar.bz2</a></li>
<li>OCSync: <a href="http://download.owncloud.com/download/testing/ocsync-0.70.1.tar.bz2">http://download.owncloud.com/download/testing/ocsync-0.70.1.tar.bz2</a></li>
</ul>
<p>Have fun!</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 1.2.0 beta1</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-1-2-0-beta1/</link>
      <pubDate>Fri, 21 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-1-2-0-beta1/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;xmas_bulb&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-client-1-2-0-beta1/images/xmas_bulb.png&#34;&gt;2012 is slowly coming to an end and we all are looking forward to a few silent days around Christmas. But we did not want to leave to holidays without adding another thing to your vacation experience: I am happy to announce the first beta of the upcoming ownCloud Client release 1.2.0, ready now for you to test and enjoy under the tree.&lt;/p&gt;
&lt;p&gt;This is the first build with the new things we &lt;a href=&#34;http://dragotin.wordpress.com/2012/12/09/a-week-for-csync/&#34;&gt;did in Berlin&lt;/a&gt; a couple of weeks ago, you will&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img alt="xmas_bulb" loading="lazy" src="/posts/owncloud-client-1-2-0-beta1/images/xmas_bulb.png">2012 is slowly coming to an end and we all are looking forward to a few silent days around Christmas. But we did not want to leave to holidays without adding another thing to your vacation experience: I am happy to announce the first beta of the upcoming ownCloud Client release 1.2.0, ready now for you to test and enjoy under the tree.</p>
<p>This is the first build with the new things we <a href="http://dragotin.wordpress.com/2012/12/09/a-week-for-csync/">did in Berlin</a> a couple of weeks ago, you will</p>
<ul>
<li>discover that there is much better error reporting if something goes wrong.</li>
<li>probably feel like it syncs faster, yes <em>faster</em>.</li>
<li>see that there are less HTTP requests to the server for a single sync run.</li>
<li>don&rsquo;t see any issues with MacOSX and funny characters in filenames any more.</li>
<li>recognize a new icon set, which is not finalized yet (actually not all sizes are there, thats why the status dialog looks a bit funny) but we thought its nice to already add it to the beta. It should fit nicely into your operating system environment.</li>
<li>realize that this client comes with a cross platform file system watcher on clientside, so no polling any more.</li>
<li>have your password stored in a secure keychain on all platforms since we added qtkeychain to the client.</li>
</ul>
<p>Maybe there is more, but we thought that&rsquo;s already a nice beta release.</p>
<p>Please find packages for <a href="http://download.owncloud.com/download/testing/ownCloud-1.2.0beta1.dmg">MacOSX</a>, <a href="http://download.owncloud.com/download/testing/owncloud-1.2.0beta1-setup.exe">Windows</a> and <a href="http://software.opensuse.org/download/package?project=isv:ownCloud:testing&amp;package=owncloud-client">Linuxes</a>. Note, not all packages are finished yet. If the one for your distro is missing, please come back later, or even better - speak up at <a href="mailto:packaging@owncloud.org">packaging@owncloud.org</a> and help fixing :)</p>
<p>Of course you also should note that this is an <strong>early beta</strong> and you would not want to use it without a good backup of your data and only on your test account without important data.</p>
<p>We would appreciate if you let us know your experience on the mailinglist. If you find problems, please report it to the client&rsquo;s <a href="http://github.com/owncloud/mirall/issues">bugtracker</a> mentioning client- and server versions and at best with useful logs.</p>
<p>With that we are happily vanishing to spend some time away from the computer, looking back on a very exciting and very busy year, working on an interesting topic with a lot of nice people.</p>
<p>Thanks and best Season&rsquo;s Greetings!</p>
]]></content:encoded>
    </item>
    <item>
      <title>A week for csync</title>
      <link>https://dragotin.codeberg.page/posts/a-week-for-csync/</link>
      <pubDate>Sun, 09 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/a-week-for-csync/</guid>
      <description>&lt;p&gt;On Friday I arrived back from Berlin where I had the pleasure to work with my great colleague Danimo and our friends from &lt;a href=&#34;http://woboq.com/&#34;&gt;Woboq&lt;/a&gt;, Markus and Olivier, in the Woboq Headquarter in Berlin Kreuzberg for a week.&lt;/p&gt;
&lt;p&gt;We thought that it might be fun to work together on &lt;a href=&#34;http://www.csync.org&#34;&gt;csync&lt;/a&gt;, our sync engine under the hood of the ownCloud client. There were some issues that should be fixed and on the way we cleaned and improved quite some code in csync.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>On Friday I arrived back from Berlin where I had the pleasure to work with my great colleague Danimo and our friends from <a href="http://woboq.com/">Woboq</a>, Markus and Olivier, in the Woboq Headquarter in Berlin Kreuzberg for a week.</p>
<p>We thought that it might be fun to work together on <a href="http://www.csync.org">csync</a>, our sync engine under the hood of the ownCloud client. There were some issues that should be fixed and on the way we cleaned and improved quite some code in csync.</p>
<p>Here are some things we worked on:</p>
<ul>
<li>
<p>We added a function that lets the program that uses the csync library pass arbitrary module parameters to the backend module. That way its more easy to steer the behaviour of the ownCloud modules from the calling app.</p>
</li>
<li>
<p>Error handling was improved, ie. if an http error happens, csync works errno based error reporting. We added custom errnos because not all error cases with http can be mapped to system errnos.</p>
</li>
<li>
<p>Formerly the csync ownCloud module was spooling files through an additional temporar file on client side. That step is skipped now which results in performance improvements as well as in more clean code.</p>
</li>
<li>
<p>We were able to reduce the number of HTTP requests that go over the wire even more. For example to check if there are changes on server side, now there is exactly one http propfind required. Also if files have to be synced, we could save some HTTP requests by improving caching of some requests.</p>
</li>
<li>
<p>Andreas recently changed the logging system in csync upstream master branch. We merged that back and now do not longer need the log4c framework. One build dependency less and a nice new logging framework.</p>
</li>
<li>
<p>Other bugs were fixed, such as a potential crash if a folder as deleted during it is synced, SSL handling shortcomings, code streamlining in handling compressed data streams and more.</p>
</li>
<li>
<p>We finalized a patch that uniforms the utf8 representations of characters over all platforms. That will fix problems we saw especially with MacOS and special filenames.</p>
</li>
</ul>
<p>Ah, yes, we also did other things, more related to the ownCloud client. Danimo managed to implement a cross platform filesystem watcher class that is able to fulfill our requirements. That obsoletes polling for changes on the local file system, one of the most popular enhancement requests.</p>
<p>And finally there now is a API in csync thats reports file transmission progress if a callback is installed accordingly. So the client hopefully soon will tell ya what it&rsquo;s doing for you. Also appreciated I guess&hellip;</p>
<p>Last but not least we added code to use <a href="https://github.com/frankosterfeld/qtkeychain">QtKeyChain</a>, a cross platform password storage library that stores password encrypted. For example on Linux QtKeyChain connects to kwallet. QtKeyChain was provided by Frank Osterfeld, thanks a lot for that contribution.</p>
<p>Quite some stuff for a short week, note that stuff that fills a short line in this blog can be quite nifty to investigate, implement and test. Not everything is stable, polished and properly integrated but it was a great and productive week. The next release of ownCloud Client will be a nice one.</p>
<p><a href="http://dragotin.wordpress.com/2012/12/09/a-week-for-csync/woboq_dinner2/"><img alt="woboq_dinner2" loading="lazy" src="http://dragotin.files.wordpress.com/2012/12/woboq_dinner2.png?w=300"></a> And sice you can not <em>always</em> work, we had a nice dinner at a very cool italian restaurant. We met with other ownCloud employees located in Berlin, Arthur and Georg. Fun :) And Berlin, yes, a great place to be, but finally I appreciated to arrive back to my snow covered home.</p>
<p>Many thanks to Olivier and Markus for hosting us and for the nice week.</p>
]]></content:encoded>
    </item>
    <item>
      <title>openSUSE Conference 2012</title>
      <link>https://dragotin.codeberg.page/posts/opensuse-conference-2012/</link>
      <pubDate>Mon, 22 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/opensuse-conference-2012/</guid>
      <description>&lt;p&gt;I spent the last weekend in Prague at the &lt;a href=&#34;http://conference.opensuse.org/&#34;&gt;openSUSE conference 2012&lt;/a&gt;. It was a great opportunity to visit the wonderful city of Prague and meet old friends from the openSUSE community and get a bit more involved into openSUSE again.&lt;/p&gt;
&lt;p&gt;I gave a talk about &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt; on Saturday where I tried to show some technical details. That could have gone even deeper was the feedback some people gave me so I promise to show more of for example app development next time. Apart from that (and apart from the fact that laptops, projectors and Linux still do not play well) the talk went ok and was well received.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I spent the last weekend in Prague at the <a href="http://conference.opensuse.org/">openSUSE conference 2012</a>. It was a great opportunity to visit the wonderful city of Prague and meet old friends from the openSUSE community and get a bit more involved into openSUSE again.</p>
<p>I gave a talk about <a href="http://www.owncloud.org">ownCloud</a> on Saturday where I tried to show some technical details. That could have gone even deeper was the feedback some people gave me so I promise to show more of for example app development next time. Apart from that (and apart from the fact that laptops, projectors and Linux still do not play well) the talk went ok and was well received.</p>
<p>The conference is a joint conference of actually four conferences: The openSUSE Conference, the Czech Linux Days, the Gentoo Summit and the SUSE Labs Conference. Over the weekend it was hosted at the Czech technical university of prague and that was a great venue. Very inspiring that over the whole foyer of the building intersting art sculptures were shown. Unusual for a technical faculty but a great thing. The building is modern and large enough for all the talks and workshops but as a result of that it was sometimes a bit difficult to keep the overview where happens what. Especially because the start- and end times of the talks were not kept in sync over the tracks.</p>
<p>I found it is a different atmosphere on the event compared to the openSUSE conferences of the last years which might have been more focussed around the openSUSE project. This one felt more like an general FOSS event. That is not bad, just different, and since change is obvious and good I look forward to seeing how this influences the openSUSE project in the near future.</p>
<p>I like to thank all involved on the organizing teams for their successful hard work, <em>have a lot of fun</em> for the next two days, I had a lot during the last two days :)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Csync for ownCloud Client 1.1.0 - A New Sync Engine</title>
      <link>https://dragotin.codeberg.page/posts/csync-for-owncloud-client-1-1-0-a-new-sync-engine/</link>
      <pubDate>Thu, 11 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/csync-for-owncloud-client-1-1-0-a-new-sync-engine/</guid>
      <description>&lt;p&gt;Along with todays &lt;a href=&#34;https://owncloud.com/blog/owncloud45-community&#34;&gt;ownCloud 4.5&lt;/a&gt; release we released the new &lt;a href=&#34;http://owncloud.org/sync-clients&#34;&gt;ownCloud Client 1.1.0&lt;/a&gt; with a new syncing concept.&lt;/p&gt;
&lt;p&gt;This blog will shed some light on the details. I apologize, it&amp;rsquo;s a long read.&lt;/p&gt;
&lt;h2 id=&#34;time-issues&#34;&gt;Time Issues&lt;/h2&gt;
&lt;p&gt;ownCloud Client versions 1.0.x worked with &lt;a href=&#34;http://csync.org&#34;&gt;csync&lt;/a&gt;s traditional way of using the &lt;a href=&#34;http://en.wikipedia.org/wiki/MAC_times&#34;&gt;file modification times&lt;/a&gt; to detect updates between the two repositories that should be synced to each other. That works fine and conforms to our idea to ideally not use any other metadata in syncing than what the file system has anyway.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Along with todays <a href="https://owncloud.com/blog/owncloud45-community">ownCloud 4.5</a> release we released the new <a href="http://owncloud.org/sync-clients">ownCloud Client 1.1.0</a> with a new syncing concept.</p>
<p>This blog will shed some light on the details. I apologize, it&rsquo;s a long read.</p>
<h2 id="time-issues">Time Issues</h2>
<p>ownCloud Client versions 1.0.x worked with <a href="http://csync.org">csync</a>s traditional way of using the <a href="http://en.wikipedia.org/wiki/MAC_times">file modification times</a> to detect updates between the two repositories that should be synced to each other. That works fine and conforms to our idea to ideally not use any other metadata in syncing than what the file system has anyway.</p>
<p><a href="http://dragotin.files.wordpress.com/2012/10/timeflies.jpg"><img alt="Time flies" loading="lazy" src="/posts/csync-for-owncloud-client-1-1-0-a-new-sync-engine/images/timeflies.jpg" title="Time flies"></a></p>
<p>However, there is one drawback which we all know from daily life: If at least two parties sync on time its important that all clocks are set exactly the same way. Remember good crime movies where a bank robbery always starts with a clock adjustment of all gangsters? We have exactly the same in ownClouds syncing: All involved have to have the same time setting, otherwise modification times of files can not be compared reliably.</p>
<p>There are solutions for computers to set the exact time (like ntp) so in general that works. However, in real life scenarios these are not reliable because either people do not have them started on the system or because the daemon updates the time once in a while and in that time span the clock skews already too much.</p>
<p>Users all the time reported problems with that and other experts continued to advise that we never get around that problems if we don&rsquo;t change something fundamental and go away from pure time based syncing.</p>
<p>Well, we did that with our <a href="http://owncloud.org/sync-clients/releases/">csync version 0.60.0</a> which is the sync engine for ownCloud Client 1.1.0.</p>
<h2 id="an-unique-id">An Unique Id</h2>
<p>Now, every file and directory inside a sync directory has an unique Id associated. The idea is that the Id changes if the file changes. So in the sync process the need for a file update in either direction can be computed by comparing the two Ids of the file. If the id has changed on one repository the file was changed there and needs to be synced to the other side.</p>
<p>The Ids are generated on the ownCloud server and one challenge for the client is to always download the correct Id of a file. The Ids are just random tags for a file version. It is not associated to the file content as MD5 sums would be. Actually it was a frequent advise to use MD5 sums or a similar approach which digests the files content to detect updates. That would have come very handy because that means comparing file contents directly and, more important, it&rsquo;s reproducable on either side. Also the client would have been able to recalculate the MD5-Sum of the local files and would not have depended on a local database with Ids that were pulled from the server before.</p>
<p>But we decided against hashes. Calculating MD5-Sums is costly in terms of CPU and time, especially for large files. The CPU problem is small on clients, but not on servers where a lot of clients connect to. Even though the sums can be calculated during upload, the problems remain for the case where the server does not see the upload stream, think of the &ldquo;mount my Dropbox&rdquo; case.</p>
<p>For files on the ownCloud server, the Id is always updated when the file gets updated. On the client side the last Id of a file is in the client database. It is invalidated in case the files modification time changed meanwhile to detect local changes.</p>
<h2 id="change-propagation">Change Propagation</h2>
<p>Another remarkable change in the 1.1.0 client is that change events in the file tree propagate up to the top directory on the owncloud server, ie. if a file changes in a directory, the id of the directory changes as well as the one of its parent directory etc.</p>
<p>That means that to detect if a file tree has changed, it&rsquo;s enough to check the top most directories Id. If that has changed, ok, than the client needs to dig deeper, but in the not so rare case that nothing has changed, the one call is enough to detect that. That dramatically lowers the server load with clients because instead of digging through the whole directory structure what we did with the 1.0.x series it is a few requests now.</p>
<h2 id="csync-and-owncloud-for-success">CSync and ownCloud for Success</h2>
<p>These are very intrusive changes to csync. For example, we had to add two additional fields to the database, add code that is able to build a representation of the local file tree from the database and make csync query for the file Ids from the server if needed. Deep under the hood the updater, reconciler and propagator code needed changes to work with the Ids. All these changes did not go back to csync upstream yet.</p>
<p>To not conflict with the upstream version of csync we decided to rename our csync version to ocsync. But: This is a temporar solution for the time we need to catch up with upstream again. That will take a while until everything is sorted again but we will work on that.</p>
<p>I am are very excited about the new version of csync. But obviously there are other changes in the ownCloud Client 1.1.0 which will be subject of another blog post.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Hand in Hand</title>
      <link>https://dragotin.codeberg.page/posts/hand-in-hand/</link>
      <pubDate>Thu, 21 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/hand-in-hand/</guid>
      <description>&lt;p&gt;as you might know, &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt; uses the &lt;a href=&#34;http://www.open-build-service.org/&#34;&gt;Open Build Service&lt;/a&gt; (short OBS) to produce and distribute the binary packages for the various distributions we want to support.&lt;/p&gt;
&lt;p&gt;The OBS is a great system as it does not only build for various Linuxes but also lets the users download the binary packages utilizing a huge mirroring infrastructure. All for you, all for the good of free software.&lt;/p&gt;
&lt;p&gt;And there is even more: OBS offers a &lt;a href=&#34;http://software.opensuse.org/download/doc&#34;&gt;nice download page&lt;/a&gt; which can either be embedded into a projects webpage or be linked from it. Depending on the settings of the OBS project, for example the number of Linuxes it builds for, the page is adopted automatically. So you never again have to deal with lots of download links to the projects repository downloads. See the &lt;a href=&#34;http://software.opensuse.org/download/package?project=isv:ownCloud:community&amp;amp;package=owncloud-client&#34;&gt;ownCloud Client Package download page&lt;/a&gt; as an living example.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>as you might know, <a href="http://www.owncloud.org">ownCloud</a> uses the <a href="http://www.open-build-service.org/">Open Build Service</a> (short OBS) to produce and distribute the binary packages for the various distributions we want to support.</p>
<p>The OBS is a great system as it does not only build for various Linuxes but also lets the users download the binary packages utilizing a huge mirroring infrastructure. All for you, all for the good of free software.</p>
<p>And there is even more: OBS offers a <a href="http://software.opensuse.org/download/doc">nice download page</a> which can either be embedded into a projects webpage or be linked from it. Depending on the settings of the OBS project, for example the number of Linuxes it builds for, the page is adopted automatically. So you never again have to deal with lots of download links to the projects repository downloads. See the <a href="http://software.opensuse.org/download/package?project=isv:ownCloud:community&amp;package=owncloud-client">ownCloud Client Package download page</a> as an living example.</p>
<p>Now the page had a shortcoming for apt based distributions. I became aware of it as the problem as well as the solution to it was nicely pointed out by <a href="http://natetron.net/b/?p=395">this blog</a>: Apt wants to have the key before it trusts the download source. OBS generates the key but its not obvious how to import.</p>
<p>This morning I told one of the brave OBS developers to the blog post and already now the solution is online. From now on, the download page also shows the exact command line to import the key. Isn&rsquo;t that great how quickly things become better if a couple of people do a little bit work together?</p>
<p>Thanks a lot, guys, really cool&hellip;</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud BOF at Akademy 2012</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-bof-at-akademy-2012/</link>
      <pubDate>Sun, 17 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-bof-at-akademy-2012/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://akademy.kde.org/&#34; title=&#34;KDE Akademy&#34;&gt;Akademy 2012&lt;/a&gt; isn&amp;rsquo;t far any more and I just registered for a &lt;strong&gt;&lt;a href=&#34;http://community.kde.org/Akademy/2012#Workshops_and_BoFs&#34; title=&#34;BOFs webpage&#34;&gt;BOF&lt;/a&gt;&lt;/strong&gt; at this years Akademy in Tallin. It will take place in Room 419 on &lt;strong&gt;&lt;a href=&#34;http://community.kde.org/Akademy/2012/Monday&#34; title=&#34;Monday BOFs&#34;&gt;monday, July 2nd, 2012&lt;/a&gt; at 10:30&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-bof-at-akademy-2012/images/Ak2012_imgoing2.png&#34; title=&#34;I am going to Akademy&#34;&gt; Subject of the BOF will be the integration between KDE and &lt;a href=&#34;http://owncloud.org&#34; title=&#34;ownCloud&#34;&gt;ownCloud&lt;/a&gt;. As onwCloud originated from the KDE project we should meet and think together again how we can provide useful integration for the users combining the power of both technologies.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="http://akademy.kde.org/" title="KDE Akademy">Akademy 2012</a> isn&rsquo;t far any more and I just registered for a <strong><a href="http://community.kde.org/Akademy/2012#Workshops_and_BoFs" title="BOFs webpage">BOF</a></strong> at this years Akademy in Tallin. It will take place in Room 419 on <strong><a href="http://community.kde.org/Akademy/2012/Monday" title="Monday BOFs">monday, July 2nd, 2012</a> at 10:30</strong>.</p>
<p><img loading="lazy" src="/posts/owncloud-bof-at-akademy-2012/images/Ak2012_imgoing2.png" title="I am going to Akademy"> Subject of the BOF will be the integration between KDE and <a href="http://owncloud.org" title="ownCloud">ownCloud</a>. As onwCloud originated from the KDE project we should meet and think together again how we can provide useful integration for the users combining the power of both technologies.</p>
<p>After a short overview of where the ownCloud project is going and what the recent achievements are (if participants are interested) I think we should concentrate on the technical level.</p>
<p>There are a couple of rough ideas already how we can integrate on a technical level, such as</p>
<ul>
<li>Integration of the ownCloud data storage in the KDE user experience.</li>
<li>KDE features for the ownCloud Desktop Client like KWallet integration or KDE SSL certificate management.</li>
<li>Synchronisation of PIM data like contacts, addresses, bookmarks or RSS feeds</li>
<li>a syncing API for application data to be synced in KDE applications.</li>
<li>Syncing of KDE application configurations.</li>
<li>Plasma integration of ownCloud/syncing client.</li>
</ul>
<p>I am sure there will be more we can come up with. Let me know upfront if you want me to put it on the list or even better show up at the BOF in person.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud 4 and ownCloud Client 1.0.2 released</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-4-and-owncloud-client-1-0-2-released/</link>
      <pubDate>Tue, 22 May 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-4-and-owncloud-client-1-0-2-released/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s release day today: This morning, &lt;a href=&#34;http://owncloud.org/owncloud-4-release-annoucement/&#34;&gt;ownCloud 4&lt;/a&gt; was released! With a very cool set of &lt;a href=&#34;http://owncloud.org/features/&#34;&gt;features&lt;/a&gt; it&amp;rsquo;s even more useful and again more fun to use.&lt;/p&gt;
&lt;p&gt;Along with that I am happy to let you know that we also released the ownCloud Desktop Client in &lt;a href=&#34;http://owncloud.org/sync-clients/releases/&#34;&gt;version 1.0.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is a maintenance release with a couple of important bugfixes, such as the cross platform &lt;a href=&#34;http://dragotin.wordpress.com/2012/05/10/cross-platform-again/&#34;&gt;filename encoding problem&lt;/a&gt; I was already talking about. Apart from that big blocker a couple of smaller, but annoying problems were fixed. Also the GUI was polished, text changes here and there and a new icon set that looks more cool and more like ownCloud.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It&rsquo;s release day today: This morning, <a href="http://owncloud.org/owncloud-4-release-annoucement/">ownCloud 4</a> was released! With a very cool set of <a href="http://owncloud.org/features/">features</a> it&rsquo;s even more useful and again more fun to use.</p>
<p>Along with that I am happy to let you know that we also released the ownCloud Desktop Client in <a href="http://owncloud.org/sync-clients/releases/">version 1.0.2</a>.</p>
<p>It is a maintenance release with a couple of important bugfixes, such as the cross platform <a href="http://dragotin.wordpress.com/2012/05/10/cross-platform-again/">filename encoding problem</a> I was already talking about. Apart from that big blocker a couple of smaller, but annoying problems were fixed. Also the GUI was polished, text changes here and there and a new icon set that looks more cool and more like ownCloud.</p>
<p>Version 1.0.2 is also the version that is released on all big desktop platforms the first time. Now we also offer a <a href="http://download.owncloud.com/download/ownCloudClientSetup-1.0.2.dmg">dmg for MacOSX</a> as well as a <a href="http://download.owncloud.com/download/owncloud-client-1.0.2-setup.exe">Windows Installer</a> and <a href="http://software.opensuse.org/download/package?project=isv:ownCloud:community&amp;package=owncloud-client">packages</a> for the major Linux distributions. Have fun!</p>
<p>If you want to talk about ownCloud, file synchronization or such, we have a booth on <a href="http://www.linuxtag.org/2012/">Linuxtag in Berlin</a> and I will be there. I am looking forward to meeting you.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cross platform again</title>
      <link>https://dragotin.codeberg.page/posts/cross-platform-again/</link>
      <pubDate>Thu, 10 May 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/cross-platform-again/</guid>
      <description>&lt;p&gt;Writing cross platform code is easy nowadays. You use &lt;a href=&#34;http://qt-project.org/&#34;&gt;Qt&lt;/a&gt;, implement stuff, and it compiles and runs almost everywhere. I also enjoy that in my work on the ownCloud desktop client. But, as you know, there is the other part in the client called &lt;a href=&#34;http://csync.org&#34;&gt;csync&lt;/a&gt;. Its the syncing engine underneath. And that does not build up on Qt, but is plain C. Adventure starts here.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-478&#34; title=&#34;This bug&#34;&gt;This bug&lt;/a&gt; took me on an interesting (well&amp;hellip;) journey into what cross platform really means.It is about a complex thing like filenames containing special characters, my favorite example is the directory &amp;ldquo;Übergröße&amp;rdquo;. Directories and files like this could not successfully be synced with the latest client.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Writing cross platform code is easy nowadays. You use <a href="http://qt-project.org/">Qt</a>, implement stuff, and it compiles and runs almost everywhere. I also enjoy that in my work on the ownCloud desktop client. But, as you know, there is the other part in the client called <a href="http://csync.org">csync</a>. Its the syncing engine underneath. And that does not build up on Qt, but is plain C. Adventure starts here.</p>
<p><a href="http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-478" title="This bug">This bug</a> took me on an interesting (well&hellip;) journey into what cross platform really means.It is about a complex thing like filenames containing special characters, my favorite example is the directory &ldquo;Übergröße&rdquo;. Directories and files like this could not successfully be synced with the latest client.</p>
<p>Windows does not utf8 by default. As far as I understood it, it does a local encoding by default. If you use normal C functions to access the filesystem, something like readdir or so, you get the names in that encoding. But, because that caused problems in some point, there is another set of functions which often start with _w (for example _wreaddir) and that has an interface to deal with <a href="http://en.wikipedia.org/wiki/Wide_character">wide characters</a>. This is the way to internationalization.</p>
<p>So what needs to be done is to use the wide character implementations everywhere where you deal with filenames (in my case). That, in turn, requires to use wchar_t instead of normal char. But that again requires a lot of #ifdef _WIN32, if its done the naive way at every place it needs to be done. I learned that typedef helps here and a meta type is defined called _TCHAR. And also for all the needed functions, meta functions are defined which are replaced by tricky defines depending on the platform. For example _treaddir becomes readdir on linux and _wreaddir on win32, while _TCHAR becomes wchar_t on Win and char on linux. The code is written using the meta types to not poison it too much with platform ifdefs.</p>
<p>But that is only the first step. Wide character is not utf8! And since utf8 should be used within the software all over, a conversion from wide character to utf8 and back is needed whenever the file system is accessed. Thankfully from csyncs nature, these places are quite nicely concentrated.</p>
<p>All that combines into a <a href="http://git.csync.org/users/freitag/csync.git/commit/?h=dav&amp;id=9ec8d7082272c6b36ef6884bb977a4386c745e8d">larger patch</a>. And now the &ldquo;Übergröße&rdquo; folder can be synced correctly from Windows to Linux and back. Great.</p>
<p>What can we learn from that? Well, easy, and once again: If you have no Qt, you&rsquo;re alone. Better don&rsquo;t let that happen. If you have Qt, be happy and aware of what it does for you :-)</p>
]]></content:encoded>
    </item>
    <item>
      <title>ownCloud Client 1.0.1</title>
      <link>https://dragotin.codeberg.page/posts/owncloud-client-1-0-1/</link>
      <pubDate>Thu, 26 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/owncloud-client-1-0-1/</guid>
      <description>&lt;p&gt;This week we prepared another &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt; &lt;a href=&#34;http://owncloud.org/sync-clients&#34;&gt;sync client (oCC)&lt;/a&gt; release for you. oCC is released together with &lt;a href=&#34;//csync.org&#34;&gt;csync&lt;/a&gt; 0.50.5, the underlying library on which shoulders oCC stands. Find packages for &lt;a href=&#34;http://software.opensuse.org/download/package?project=isv:ownCloud:community&amp;amp;package=owncloud-client&#34;&gt;your distribution&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://dragotin.files.wordpress.com/2012/04/icon-128_2.png&#34;&gt;&lt;img alt=&#34;ownCloud Logo&#34; loading=&#34;lazy&#34; src=&#34;https://dragotin.codeberg.page/posts/owncloud-client-1-0-1/images/icon-128_2.png&#34; title=&#34;icon-128_2&#34;&gt;&lt;/a&gt;Only a couple of weeks after the first release we could come up with a quite long &lt;a href=&#34;http://owncloud.org/sync-clients/releases&#34;&gt;changelog&lt;/a&gt;, larger than for a maintainance release.&lt;/p&gt;
&lt;p&gt;First and foremost, oCC now supports SSL connections and does not store passwords any more, well, in clear text in a config file. Still there is no strong encryption for the password in (as that&amp;rsquo;s a non trivial if not impossible thing) but its not clear text any more, so accidents should not longer happen. For those who really care and put security over convenience there now is the option to not store the password at all but provide it at startup. The whole password storage will get more attention soon, I did some work on that already, also using kwallet, more on that in another post.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This week we prepared another <a href="http://www.owncloud.org">ownCloud</a> <a href="http://owncloud.org/sync-clients">sync client (oCC)</a> release for you. oCC is released together with <a href="//csync.org">csync</a> 0.50.5, the underlying library on which shoulders oCC stands. Find packages for <a href="http://software.opensuse.org/download/package?project=isv:ownCloud:community&amp;package=owncloud-client">your distribution</a>.</p>
<p><a href="http://dragotin.files.wordpress.com/2012/04/icon-128_2.png"><img alt="ownCloud Logo" loading="lazy" src="/posts/owncloud-client-1-0-1/images/icon-128_2.png" title="icon-128_2"></a>Only a couple of weeks after the first release we could come up with a quite long <a href="http://owncloud.org/sync-clients/releases">changelog</a>, larger than for a maintainance release.</p>
<p>First and foremost, oCC now supports SSL connections and does not store passwords any more, well, in clear text in a config file. Still there is no strong encryption for the password in (as that&rsquo;s a non trivial if not impossible thing) but its not clear text any more, so accidents should not longer happen. For those who really care and put security over convenience there now is the option to not store the password at all but provide it at startup. The whole password storage will get more attention soon, I did some work on that already, also using kwallet, more on that in another post.</p>
<p>The whole start process of oCC, which is more complex as it might seem as libcsync expects a nice environment with a verified connection to the ownCloud, was cleaned and matured. I had to learn about <a href="http://qt-project.org/doc/qt-4.8/QNetworkAccessManager.html">QNAM</a> but now we seem to be friends.</p>
<p>Efforts also went into the following areas:</p>
<ul>
<li>Error handling: People got confused about error messages from oCC which were not accurate here and than. I added more fine granular error reporting to libcsync so that oCC now can give even more helpful error messages.</li>
<li>MacOSX: On the sprint weekend in Stuttgart, we made good progress on that platform, will also soon get a release. Domme got the most out of cmake to get dmg image building going, thanks, you rock!</li>
<li>Qt 4.6: As usual one has to learn that current distributions ship not so current Qt versions. Thanks to Thomas, he put quite some effort in porting back to Qt 4.6 - so that Debians friends can also use oCC now.</li>
<li>Packages: Check out the <a href="https://build.opensuse.org/project/packages?project=isv:ownCloud:community">community repo</a> on <a href="http://www.open-build-service.org/">OBS</a>: We now can provide packages for way more platforms including Ubuntu and Debian. Still your help would be appreciated in maintaining.</li>
</ul>
<p>Speaking about the recent <a href="http://blog.karlitschek.de/2012/04/what-weekend.html">sprint in Stuttgart</a>: It was great to be there, ownCloud has an open, friendly and welcoming community in which you really feel the spirit of working on something new and interesting with cool potential. I really enjoy being here,. Thanks guys for all your work and feedback :-)</p>
]]></content:encoded>
    </item>
    <item>
      <title>CSync and Mirall Development Setup</title>
      <link>https://dragotin.codeberg.page/posts/csync-and-mirall-development-setup/</link>
      <pubDate>Thu, 22 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/csync-and-mirall-development-setup/</guid>
      <description>&lt;p&gt;[caption id=&amp;ldquo;attachment_48&amp;rdquo; align=&amp;ldquo;alignleft&amp;rdquo; width=&amp;ldquo;92&amp;rdquo; caption=&amp;ldquo;Build it!&amp;rdquo;]&lt;a href=&#34;http://dragotin.files.wordpress.com/2012/03/kbagger_part.png&#34;&gt;&lt;img alt=&#34;A KDE bagger&#34; loading=&#34;lazy&#34; src=&#34;http://dragotin.files.wordpress.com/2012/03/kbagger_part.png?w=92&#34; title=&#34;bagger&#34;&gt;&lt;/a&gt;[/caption] people were asking how to set up a development setup for the syncing client we are working on to sync local files to &lt;a href=&#34;http://owncloud.org&#34;&gt;ownCloud&lt;/a&gt; and vice versa currently, work title mirall. While a website about it is not yet finished, I try to summarize it here. There are some hacks here and there but that&amp;rsquo;s how I do it today. It will improve over time. Note that this is about a real development setup, not for a production build.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>[caption id=&ldquo;attachment_48&rdquo; align=&ldquo;alignleft&rdquo; width=&ldquo;92&rdquo; caption=&ldquo;Build it!&rdquo;]<a href="http://dragotin.files.wordpress.com/2012/03/kbagger_part.png"><img alt="A KDE bagger" loading="lazy" src="http://dragotin.files.wordpress.com/2012/03/kbagger_part.png?w=92" title="bagger"></a>[/caption] people were asking how to set up a development setup for the syncing client we are working on to sync local files to <a href="http://owncloud.org">ownCloud</a> and vice versa currently, work title mirall. While a website about it is not yet finished, I try to summarize it here. There are some hacks here and there but that&rsquo;s how I do it today. It will improve over time. Note that this is about a real development setup, not for a production build.</p>
<p>Linux and Windows development should go in parallel as easy as possible.</p>
<p><strong>Edit: Please also refer to the <a href="https://github.com/owncloud/mirall/blob/master/doc/building.rst">official build documentation</a>.</strong></p>
<p><strong>Building CSync</strong></p>
<p>To build mirall, csync must be built first. CSync is hosted in its <a href="http://git.csync.org/projects/csync.git/">upstream git repo</a> and there is also my <a href="http://git.csync.org/users/freitag/csync.git/log/?h=dav">development branch</a> which holds the latest changes.</p>
<p><a href="http://dragotin.files.wordpress.com/2012/03/buildoc_dirs.png"><img alt="Overview of Build Directory setup." loading="lazy" src="/posts/csync-and-mirall-development-setup/images/buildoc_dirs.png" title="Build directories"></a>Clone the csync branch into a directory. In parallel to the cloned <code>csync</code> dir, create a new directory <code>buildcsync</code> as a cmake build dir. Change into <code>buildcsync</code> and call cmake like this:</p>
<p><code>cmake -DCMAKE_BUILD_TYPE=&quot;Debug&quot; ../csync</code></p>
<p>and watch its output. You probably have to fulfill some dependencies, make sure to install all the needed devel packages. You will need log4c, iniparser, sqlite3 and for the modules libssh, libsmbclient and neon for the ownCloud module. Once cmake succeeds, call make to build it. So far relaxed for Linux.</p>
<p>To build csync for Windows, there are a couple of possibilities. The one I chose was to cross compile with mingw under <a href="http://www.opensuse.org">openSUSE</a>. That way I can build for all on one devel machine under my prefered system.</p>
<p>For that, I installed the cross compile and mingw32 packages from the <a href="http://build.opensuse.org">openSUSE Build Service</a>, which really demonstrates power here. I used the <a href="http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_12.1">mingw repository</a>. Kudos at this point to Dominik Schmidt, a <a href="http://www.tomahawk-player.org/splash">Tomahawk developer</a>, who helped me a lot to set all up and to all people who work in OBS to maintain the mingw repo.</p>
<p>Basically the cross compiler and libs (eg. packages <code>mingw32-cross-gcc</code>, <code>mingw32-gcc-c++</code> and <code>mingw32-cross-cpp</code>) and the dependencies for the software to build have to be installed from the mingw repo. An action item is left to dig which in detail.</p>
<p>After installation you should have some mingw32-tools such as <code>mingw32-cmake</code> which should be used to build for win.</p>
<p>Now create a directory win and within that again buildcsync. In there, start <code>cmake</code> with</p>
<p><code>mingw32-cmake -DCMAKE_BUILD_TYPE=&quot;Debug&quot; -DWITH_LOG4C=OFF ../../csync</code></p>
<p>That should do it. I did not find log4c for Win32, so I disabled it in the cmake call. Now build it with <code>mingw32-make</code> and see if it creates a dll in the src subdir and csync.exe in the client dir.</p>
<p><strong>Building mirall</strong></p>
<p>For <a href="http://gitorious.org/owncloud/mirall" title="mirall">mirall</a>, it works similar. Mirall uses Qt and is C++, so again a lot of packages to install. Make again sure to have the mingw32-qt packages, for example <code>mingw32-libqt4-devel</code> and more.</p>
<p>However, there are two caveats with mirall:</p>
<ul>
<li>
<p>the current development state of mirall needs the latest devel version of csync which we just built. I tweaked the CMakefile that way that if the mirall- and csync and build* folders are in the same directory, the csync is found by mirall cmake in the parallel dir. So I do not have to install the devel version of csync in my system.</p>
</li>
<li>
<p>to build mirall for windows, it must be made sure that cmake finds the mingw32 Qt tools like moc. Since there is also the Linux moc in the system, this can confuse. Domme pointed me to a script that sets some variables correct values to prevent mixing: <code>cat ../docmake.sh # %_mingw32_qt4_platform win32-g++-cross  export QT_BINDIR=/usr/bin export BIN_PRE=i686-w64-mingw32  /usr/bin/mingw32-cmake \ -DCMAKE_BUILD_TYPE=&quot;Debug&quot; \ -DQMAKESPEC=win32-g++-cross \ -DQT_MKSPECS_DIR:PATH=/usr/i686-w64-mingw32/sys-root/mingw/share/qt4/mkspecs \ -DQT_QT_INCLUDE_DIR=/usr/i686-w64-mingw32/sys-root/mingw/include \ -DQT_PLUGINS_DIR=/usr/i686-w64-mingw32/sys-root/mingw/lib/qt4/plugins \ -DQT_QMAKE_EXECUTABLE=${QT_BINDIR}/${BIN_PRE}-qmake \ -DQT_MOC_EXECUTABLE=${QT_BINDIR}/${BIN_PRE}-moc \ -DQT_RCC_EXECUTABLE=${QT_BINDIR}/${BIN_PRE}-rcc \ -DQT_UIC_EXECUTABLE=${QT_BINDIR}/${BIN_PRE}-uic \ -DQT_DBUSXML2CPP_EXECUTABLE=${QT_BINDIR}/qdbusxml2cpp \ -DQT_DBUSCPP2XML_EXECUTABLE=${QT_BINDIR}/qdbuscpp2xml ../../mirall</code></p>
</li>
</ul>
<p>With that setup I can build both the Linux and Windows version quite easily. There is still a lot to be solved, such as automatted packaging and such. CMake as usual is a great help.</p>
]]></content:encoded>
    </item>
    <item>
      <title>On the road...</title>
      <link>https://dragotin.codeberg.page/posts/on-the-road/</link>
      <pubDate>Fri, 16 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/on-the-road/</guid>
      <description>&lt;p&gt;Busy times currently as we&amp;rsquo;re heading to releases of &lt;a href=&#34;http://www.owncloud.org&#34;&gt;ownCloud&lt;/a&gt;. The syncing client I am working on plays a role for that and thus I was doing a lot of work on csync upstream and mirall to get that going. Meanwhile I succeeded to get mirall running under Win32, it was quite an experience for me digging through the mud of various compilers and environments and the different understandings of C standards, especially since csync is plain C and never run on Win32 before.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Busy times currently as we&rsquo;re heading to releases of <a href="http://www.owncloud.org">ownCloud</a>. The syncing client I am working on plays a role for that and thus I was doing a lot of work on csync upstream and mirall to get that going. Meanwhile I succeeded to get mirall running under Win32, it was quite an experience for me digging through the mud of various compilers and environments and the different understandings of C standards, especially since csync is plain C and never run on Win32 before.</p>
<p>Last week I have been on CeBIT for a day, which is a huge and busy event. We had a nice preview running there with syncing between the web client and the desktop clients on Windows and Linux, as well as on an Android device. That already worked quite ok, nevertheless I got quite some bug reports since then. And I still have to work with csync upstream to get patches in there before we&rsquo;re ready for a public beta.</p>
<p>This weekend I will be at the <a href="http://chemnitzer.linux-tage.de/2012/">Chemnitzer Linuxtage</a> together with friends from the <a href="http://www.opensuse.org">openSUSE</a> project. I will show some ownCloud syncing there as well, so if you like show up at the openSUSE booth for a demo and a chat :-)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Status ownCloud Desktop Syncing</title>
      <link>https://dragotin.codeberg.page/posts/status-owncloud-desktop-syncing/</link>
      <pubDate>Fri, 17 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://dragotin.codeberg.page/posts/status-owncloud-desktop-syncing/</guid>
      <description>&lt;p&gt;It has been a busy week where I was working on the ownCloud Desktop sync client. As described in my &lt;a href=&#34;http://kfreitag.tumblr.com/post/17319346374/desktop-syncing-with-owncloud&#34; title=&#34;last post&#34;&gt;last post&lt;/a&gt; this will be based on a &lt;a href=&#34;http://www.csync.org/&#34; title=&#34;csync homepage&#34;&gt;csync&lt;/a&gt; module to handle &lt;a href=&#34;http://www.owncloud.org&#34; title=&#34;ownCloud homepage&#34;&gt;ownCloud&lt;/a&gt; as well as mirall, a Qt based desktop client to sync.&lt;/p&gt;
&lt;p&gt;That involved basically three things: A csync module, a patch in ownCloud and work on mirall.&lt;/p&gt;
&lt;p&gt;For csync, there needs to be a module that handles the connection to ownCloud, for code see [1]. ownCloud has a WebDAV interface, and its used for this. Csync requires the the implementation of a couple of POSIX functions such as opendir, readdir, closedir, stat and these kind of things. I did that using WebDAV equivalents.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It has been a busy week where I was working on the ownCloud Desktop sync client. As described in my <a href="http://kfreitag.tumblr.com/post/17319346374/desktop-syncing-with-owncloud" title="last post">last post</a> this will be based on a <a href="http://www.csync.org/" title="csync homepage">csync</a> module to handle <a href="http://www.owncloud.org" title="ownCloud homepage">ownCloud</a> as well as mirall, a Qt based desktop client to sync.</p>
<p>That involved basically three things: A csync module, a patch in ownCloud and work on mirall.</p>
<p>For csync, there needs to be a module that handles the connection to ownCloud, for code see [1]. ownCloud has a WebDAV interface, and its used for this. Csync requires the the implementation of a couple of POSIX functions such as opendir, readdir, closedir, stat and these kind of things. I did that using WebDAV equivalents.</p>
<p>Unfortunately one method is needed for the sync algorithms which has no equivalent in WebDAV, which is utime. utime sets the modification time of a file. csync needs that to fix the time after a file was copied to the other side.  For that, I made a little patch to ownCloud to allow a PROPPATCH method on the modified time of a resource. That makes csync happy and working, but that also means that the module is not a general csync webdav module but a csync owncloud module. Named it accordingly.</p>
<p>The first action I started on mirall this time is a bit cleanup. First, I introduced a class  to move all the code which loads, edits and monitors the folders out of the main application class, which was long overdue. That separates the sync folder management in mirall from the GUI stuff. Furthermore I added a few helper classes such as a config file class for mirall. Ah yes, a theming class was also added to handle the future two faces character of mirall easily, as said before mirall should either appear as traditional mirall client, or as ownCloud client. Duncan and me agreed to build that from one source, the theming class supports that.</p>
<p>Last but not least I polished the wizard in which a user connects to his ownCloud and added a test call that immediately evaluates the url and credentials. For the curious, the code is in my <a href="https://github.com/dragotin/mirall/commits/master" title="Klaas' work repo mirall">work repository</a> but I promise to move it to the ownCloud repo on gitorious soon.</p>
<p>So far for now, if you have suggestions for me I&rsquo;d love to hear them.  Thanks :-)</p>
<p>[1] <a href="http://git.csync.org/users/freitag/csync.git/log/?h=dav" title="Klaas' WIP branch csync">Klaas&rsquo; WIP branch csync</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
