Skip to main content

the avatar of Klaas Freitag

ownCloud Chunking NG

Recently Thomas and me met in person and thought about an alternative approach to bring our big file chunking to the next level. “Big file chunking” is ownClouds algorithm to upload huge files to ownCloud with clients.

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.

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.

This situation could be improved with the following approach.

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.

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.

Here is a pseudo code description of the sequence:

1. Client creates an upload directory with a self choosen name (ideally a numeric upload id):

MKCOL remote.php/uploads/upload-id

2. Client sends a chunk:

PUT remote.php/uploads/upload-id/chunk-id

3. Client repeats 2. until all chunks have successfully been uploaded 4. Client finalizes the upload:

MOVE remote.php/uploads/upload-id /path/to/target-file

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.

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.

If the server decides to remove an upload, ie. because it hasn’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.

An upload is finalized by the MOVE request. Note that it’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.

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.

In the next blog I will discuss an extension to this that adds more features to the process.

What do you think so far? Your feedback is appreciated, best on the ownCloud devel mailinglist!

a silhouette of a person's head and shoulders, used as a default avatar

Adding more to the thermostat

Adding more to the Raspberry Pi Having already basically created a thermostat using a Raspberry Pi and a temperature monitor in conjunction with the WiFi power socket I was wondering what functionality I could add. Having looked around for a bit I found that there is a camera module available which can pick up infra-red […]

the avatar of Chun-Hung sakana Huang

GNOME.Asia Summit 2015


GNOME.Asia Summit 2015
It's always happy and pleasure to join and organize GNOME.Asia Summit. :-)

You could see many photos in Flickr group with GNOME.Asia Summit 2015 all of the pictures come from our great Participant and Organizer.

If you ask me "Why you work hard for GNOME, freeware and open source?"
---- The answer is "Friendship and Smile"

-Smiles is the greatest power to promote GNOME and FOSS to me-

I meet many new friends and contribute  to GNOME and FOSS in many different events.


It also a good time to see old friends get together. ^^


It's very good to work in GNOME and GNOME.Asia team, I learn very much from GNOME and GNOME.Asia team.

This year, we have very strong local committee.

- Thanks Utian give us close speech and BinLi -

- Thanks Haris make everything smooth and smile-

- Thanks Estu always give everything right away, you should go to GUADEC ^^-

- Thanks Siska and our host [ We have 2 great host this year ^^ ] keep everyone powerful -

- Thanks our local committee and organizer always smile and keep contribute-

I want to list all the pictures with all our local committee and organizer, I really suggest you to see the pictures in flickr group.

Great picture to see in GNOME.Asia Summit 2015.


I also want to let you know

- Great photo comes from Contributors ( In diff method ) get together-

I really love the topic this year "GNOME   Desktop for Everyone"


Everyone could use GNOME for Desktop ^^ -- I love it

I am very enjoy GNOME.Asia Summit this year.

- I love my new job "Human timer for lighting talks" this year -

It's great moment to see GNOME.Asia Summit in Universitas Indonesia.



We have great time in Day 0 workshop.

-Thanks our speakers give us workshop ^^-

Also love to see openSUSE community guys in Indonesia, and it's my pleasure to join openSUSE Indonesia facebook Group.


It's great to have friends join GNOME.Asia Summit from Taiwan together.


- Thanks Shing Yuan introduce how to promote open source with their team  in Aletheia University-

Thanks everyone join GNOME.Asia Summit




We have lots fun in GNOME.Asia.


Thanks speakers come to GNOME.Asia Summit and blog for summit.





I want to Thanks all our sponsor and GNOME Foundation.
Without their their support, we could not have this amazing GNOME.Asia Summit.







a silhouette of a person's head and shoulders, used as a default avatar

My Browsing Environment

I did a huge cleanup of my firefox profile today, which resulted in me removing tons of stuff (from dead bookmarks to useless addons to many other subtle or not that subtle stuff).
The whole process helped to return firefox in a rather working/healthy state, but also served as a good reminder of something i had in mind for quite a while now.
I wanted to document my firefox setup once i decided that it is stable or has reached a state that pleases me usability wise (hard if you consider all the changes that happened to it throughout the years).

This post serves as a good linkable source too for all those that ask me how i configure my firefox and a list of addons i practically recommend (through my own usage of them). So without further ado:
For simplicity and to give their usage in a glance i have separated them in 4 distinct categories. The list is of the form “Addon - reasoning”, i didn’t include links since all of them are readily available on addons.mozilla.org

Safe Browsing

NoScript - Blocks many stuff (js, flash, java etc) can allow whitelisting of sites that you deem safe enough to allow their code to run.
RequestPolicy - Similar in spirit to NoScript but for any cross site requests.
Certificate Patrol - Monitors and shows changes in certificates (suspicious or not)
HTTPS-Everywhere - Defaults to HTTPS by default for those sites that provide it but not offer it as the default redirect
Privacy Badger - Pretty much covered by the others but there to catch anything the others might actually miss
RefControl - To see and track what the Ref header sends to the site i visit.
Priv3 - Blocks tracking by social buttons (like, +1, etc)
Self-Destructing Cookies - Self-Explanatory addon. once i leave the site, the cookies go BOOM!

Quality of Life

GreaseMonkey - Allows me to overwrite or extend site behaviour through js
Stylish - overwrite the site CSS (really a must for more sites than i can count)
Session Manager - I always had issues with tabs management with the default manager, this solves it
uBlock Origin - Ads! many of them are so distracting and intrusive i just don’t like them.
Reddit Enchancement Suite - I browse Reddit A LOT, this makes it a tad more bearable.
Cleanest Addon Manager - with that many addons…
Google Search by Image - To make finding the source of an image quicker …

User Interface/User Experience

Pentadactyl - I am a vim and a very keyboard/keybinding heavy user, this adds better kb based control.
Socialite - Shows the current vote rating on reddit for the link i browse or allows me to quick submit it there.
The AddonBar (restored) - Firefox removed the addonbar recently, this brings it back.
Config Descriptions - I fiddle a lot with about:config sometimes, this adds explanations.
Tree Style Tab - a must, a way better visualization of the tabs i open and their relationship.

Misc

Rikaichan - This allows me to get an explanation of an unknown japanese word by just hovering it with my mouse.

Just to see how things evolve (or hopefully progress) i’ll also be keeping track of this and updating/making a listing yearly, seeing how my browsing environment will have changed by next June!

a silhouette of a person's head and shoulders, used as a default avatar

Some more geeking around at home …

Continuing the techno-geekery at home As written in a previous post I’d bought some wireless controlled electrical plug adapters primarily for use to remotely control the air conditioning unit in The Son’s room, especially in the evenings after he had been put down for the night. The adapters are controlled via a smartphone application, and […]

a silhouette of a person's head and shoulders, used as a default avatar
a silhouette of a person's head and shoulders, used as a default avatar
darix posted at

It is all about the ... plus

This is just a quick post but imho still pretty neat. If you are a postgresql user you probably know about the commands with \ to inspect your database server e.g. .

mirrorbrain=> \l mirro*
                                  List of databases
    Name     |    Owner    | Encoding |   Collate   |    Ctype    | Access privileges 
-------------+-------------+----------+-------------+-------------+-------------------
 mirrorbrain | mirrorbrain | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(1 row)

mirrorbrain=> \dt
           List of relations
 Schema |  Name   | Type  |    Owner    
--------+---------+-------+-------------
 public | country | table | mirrorbrain
 public | file    | table | mirrorbrain
 public | hash    | table | mirrorbrain
 public | marker  | table | mirrorbrain
 public | mirror  | table | mirrorbrain
 public | pfx2asn | table | mirrorbrain
 public | region  | table | mirrorbrain
 public | server  | table | mirrorbrain
 public | version | table | mirrorbrain
(9 rows)

mirrorbrain=> 

So far … nothing new … right?

the avatar of Kohei Yoshida

mdds 0.12.1

I’m happy to announce that mdds 0.12.1 is now out. You can download it from the project’s README page.

There are primarily two major changes from the previous release of 0.12.0 as explained below.

multi_type_vector

One is that multi_type_vector now has a new static method advance_position to increment or decrement the logical position of a position_type object by an arbitrary distance.

static position_type advance_position(const position_type& pos, int steps);

The implementation of this method has been contributed by Markus Mohrhard.

flat_segment_tree

Another major change in this release is with flat_segment_tree. Previously, flat_segment_tree had an unintentional constraint that the value_type must be of numeric type. In this release, that constraint has been officially lifted so that the user of this data structure can now store values of arbitrary types with this data structure. The credit goes to David Tardon for adding this nice improvement.

Other than that, there are no other changes from 0.12.0.

mdds on GitLab

Incidentally, the mdds project now has a new home at gitlab.com. The new URL for the project page is now

https://gitlab.com/mdds/mdds

If you need to include a project URL, be sure to use the new one.

Thank you, ladies and gentlemen!

a silhouette of a person's head and shoulders, used as a default avatar

Even more fitness and tech stuff

I’ve started so I’ll finish Those who know me, know I’m really quite stubborn … Even so, I really had thought I’d finished with writing about my challenges with being a running geek. Honest! Hopefully this won’t be yet another lengthy whinge update. The Watch and GPS I’d already said that my Sony Smartwatch 3 had […]

the avatar of Agustin Benito Bethencourt

openSUSE transformation step 2. The user oriented distro.

openSUSE Tumbleweed is a rolling release that was designed with a clear goal, target and metric. It was developed following a clear picture of where to go. Design it was a painful but unavoidable process that challenged an assumption established in many people mindset back in 2012. Latest/greatest and stability were incompatible. Hence, Factory, the rolling release back then, was for hardcore SUSE/openSUSE OS developers only. As rolling distros, there were more popular and better options out there.

This summary might help you to get some background.

Goals are easier to achieve if you have a good reference to beat. For those who worked in the project, Gentoo and specially Arch Linux were those references. As you can imagine, transform openSUSE required management support. We had it, specially from Roland Haidl, Operations and Communities Director at SUSE back then. He created the environment that allowed those who worked in his department to be creative.... and take risks.

Simplifying, for the new "development version", a.k.a Tumbleweed (former Factory), the goal was to implement a model that allowed us to improve the existing Factory one, based on continuous delivery. The target chosen were our core contributors (packagers fundamentally) and the metric was, in summary, to make sure that, no matter how wrong things could go after an update, you would always have a console and network, so you would be able to revert your change. In terms of the process, the resulting integration deployment processes should be transparent, not just internally but also from our community members perspective. It also needed to be simpler in order to gain contributors, not just users. And it needed to empower them to own it.

Instead of following what SUSE was doing back then, the company dedicated resources to challenge itself. As result, openSUSE Tumbleweed is today, not just the best rolling distro out there, with all what that means in terms of excitement among its contributors, but is generating higher value to SUSE, since the company have an outstanding playground at home that allows them to incorporate true innovation into their production process before their competitors do.

openSUSE is discussing nowadays to take a second step, this time focused on its user oriented version. Today is openSUSE 13.2.

In my opinion, based on the previous experience, and independently of the decision/discussion process chosen, the same steps need to be taken. They are unavoidable in any transformation process. It is necessary to define a clear goal, something short that you can explain and understand easily, a clear target and a key metric that helps to clarify the "acceptance criteria" to be used during the whole process.

Like back then, I would like to see SUSE challenging itself, putting in question well established principles within the OS industry. Again, choosing a reference would make the final picture easier to achieve.

Most openSUSE users are desktop users and sysadmin. If, as I conclude from the latest oSC15 videos and factory mailing list discussions, sysadmins are the chosen target, It would be great to see SUSE/openSUSE challenging the assumption that, through a continuous delivery process, you cannot release a stable and high quality (for the target) distribution. That stability is only achievable through a waterfall like model. I would choose CoreOS as reference. It is a project that, based on different questions, is providing innovative answers to new challenges.

I would like to see that, base on the current process (standing on the shoulders of giants) openSUSE/SUSE creates a process that "pulverize" the current mindset, deprecating many of the existing problems, focusing on solving new ones. Imagine the best of both worlds, a new paradigm of OS with the green values.

It took about a year and a half for a dedicated team to release what today is Tumbleweed. I think that this second challenge is bigger than the first one. An even bigger commitment from SUSE will be needed in order to succeed.

But if the resources are there, the creative environment is set, the right steps are followed and the openSUSE community supports the effort, there is nothing that can stop the project to achieve what today are dreams. SUSE has the talent, and the experience, to make it happen.

I wish them all the best in this new challenge.

a silhouette of a person's head and shoulders, used as a default avatar

The Running Geek … part 2

As I was saying … At the start of this year I’ve tried to go running using bluetooth earphones, and met with mixed poor results. Alongside the bluetooth earphones I had also decided to try and do away with bringing my phone with me whilst running. I previously owned a Sony Xperia Z, and the earphone […]