Build Your Own Cloud: Extra Comments

Alternatives to OwnCloud:

(1) Bittorrent Sync: Its P2P idea is very attractive, but currently it is not reliable even with its basic purpose: sync and update with the right version of a file.  Sometimes, it accidentally delete files;  Sometimes, it overwrites new files with way old files.  This happened to me just twos before I was going to submit my critical project deadline.  Many other users also reported similar data lose.  I will never use it before they have reliably implemented conflict management.

Secondly, Bittorrent Sync is closed source.  Its company is so money hungry that advertizes and charges for such beta software without conflict management, not caring about the damage it could bring to its users.  As closed source, it is not sure how secure their btsync is.  In their forum, they lock discussion on btsync’s alternatives and questions on its security.  Such attitude drives me away.

Third, btsync runs in background without telling the user with a task bar icon.  It is very sneaky.  If some one install on your computer, then it becomes a backdoor.  Your data is sent somewhere without telling you.  Damn!  Keep far away from this software and this irresponsible company until they prove they are trustful.

Do not use Bittorrent Sync until they have implemented conflict management, if you really care about your data safety.

(2) AeroFS: AeroFS runs on virtual machines.  This is both good and bad.  I eventually gave it up because on a Linux host machine with wireless connection, its guest machine cannot have a unique MAC, but must use the same as the host machine.  It may introduce many trouble in your LAN.  If you use a Windows as a host, it shall be fine.  By the way, their virtual machine appliance is really resource hungry.  In comparison, OwnCloud takes much less resource.

Build Your Own Cloud: Part II, Set Up OwnCloud Server

It is easy to setup an OwnCloud server on Ubuntu.

(1) Install OwnCloud following instructions here:

The installation is automatic.  In the process you will be asked for MySQL’s administrative credentials.

After installation, type localhost/owncloud in a browser, you will see the configuration page of OwnCloud.  If you satisfy with SQLite, then you can following the instructions to finish the configuration.  If you want to use MySQL which is recommended by OwnCloud, you shall take the following effects.

(2) Create a MySQL user for OwnCloud and a database for OwnCloud with the following commands

mysql -u root -q # Login MySQL.  Following parts are in mysql.

CREATE USER ‘owncloud’@’localhost';

SET PASSWORD FOR ‘owncloud’@’localhost’ = password( ‘YourPassWordForMySQL’ );


GRANT ALL ON owncloud.* TO ‘owncloud’@’localhost';


(3) In a browser, type localhost/owncloud, and follow configuration instructions on the webpage.

If you choose MySQL, then on the second page, select MySQL and set these parameters:

database user: owncloud

database: owncloud

database password: YourPassWordForMySQL

host: localhost

After successful configuration, if you would like to tighten security, you can take the following effort.

(1) Enforce https.

(1a): Install ssl certificate for your apache server.  Below are useful informaiton:

(1b) Enforce https in OwnCloud’s administrative panel.

(2) In your router, remove port 80 from your “Virtual Server” for port forwarding.

(3) In your router, enable MAC filtering, only allowing those devices that you permit to use the cloud.

Build Your Own Cloud: Part I, Set Up Your Domain Name

In this article, we outline how to build your own cloud with open source software OwnCloud (  Two components are needed to run a OwnCloud server with your home computer:

(1) A static IP or a domain name which dynamically maps to the IP your ISP assigns to you.

(2) A computer running the OwnCloud server.

The static IP or the dynamically mapped domain name is the “postal address” to find your server on the internet.  Holding a static IP is not cheap, so it is more interesting to use a dynamic IP with a domain name.  You need these:

(a)  Buy a domain name, for example, from domain registrars, such as GoDaddy, NameCheap or Google.  This usually cost about $12 a year.  With a domain name, you can add  subdomains as you like, for example, or

Here is a primary domain, and is a secondary domain.  Some registrars directly sell secondary domains attached to their specified primary domains at a lower price, such as  I do not quite like this, because TheirPrimaryDomain might be uneasy to remmember.  I prefer to have my own primary domain, with which I can extend many subdomains for many different services.

Let us assume that you decide to use, and you are going to run OwnCloud server on a computer YourServer.

(b)  Use a free or buy a Dynamic DNS host to dynamically map to the IP your ISP assigns to you.  A domain name is like the name of a company and an IP address is its “postal address”.  Because IPs are relatively scarce, most ISPs circulate IPs around its customers.  Each time an active user may receive a different IP.  When you type a domain name in your brower, your computer first asks some domain name servers to translate it to its IP.  As your IP dynamically changes, you need a domain name sever to track its change.

A Dynamic DNS tracks the change of your IP by receiving reports from your home computer or router.  If you directly connect YourServer to the internet, then you can install the client software provided by your Dynamic DNS provider on YourServer. It will automatically report changes of your IP.  If you run YourServer behind a rourter, then you shall check whether its dynamic IP reporting function is compatible with the Dynamic DNS server.  For example, I could not figure out how to make my dlink router report to namecheap.

By the way, if you use a dlink router, you can use to map one secondary domain in the format of for free.  I will discuss how to utilize this.

(c) If YourServer is behind a router, then forward ports 80 and/or 443 from the router to YourServer.  OwnCloud use port 80 to run its http interface and 443 its https interface.  As is mapped to your router, connection to will be directed to your router.  Thus, you need to tell your router to relay requests to ports 80/443 to YourServer.  If you use a dlink router, you can do it with the “Virtual Server” function.

My Example:

(1) I bought from 1and1.  By the way, they suck, I will definitely transfer to another registrar after finishing my one year term.

(2) I added subdomain for my cloud service.

(3) I tried to use namecheap’s freeDNS, so I changed the name server associated with to namecheaper.

(4) Unfortunately, my dlink router is not compatible with namecheap’s freeDNS, so I utilized’s free dynamic DNS service for dlink customers.

(4a) I got a free secondary domain name, and setup my dlink to report its IP to  dlinkddns only supports secondary domains in the format

(4b)  So fare I had two domain names: which I preferred and which I used for its free dynamic DNS. How to combine them?  I set the  cname of to

(5) I forwarded ports 80/433 from my router to MyServer inside my LAN.

The mapping chain of is: (via namecheap’s cname map) -> (via’s dynamic DNS) ->

MyRouter (via its Virtual Server function) ->


Please note that it is unnecessary to use namecheap’s freeDNS here.  I can just use 1and’s cname service, but I dislike 1and1 so much that I avoid their services as much as possible.

Some suggestions:

Choosing a good registrar will save you a lot of trouble.  Google looks to be a good provider.  They charge $12 for a year, with private registration and more importantly it includes dynamic DNS!

namecheap is good, but unfortunately they are incompatible with my dlink router. has stopped its free service, so you have to go to alternatives.

GoDaddy is popular, but they do not include dynamic DNS.

Insert Latex to Inkscape in Windows

First, install the following software:

  1. Miktex
  2. Ghost script
  3. GSView
  4. Pstoedit

Second, add miktext, gs and pstoedit to the environmental variable PATH:

For example, in order to add pstoedit to the path:

Computer > Properties > Advanced > Environment Variables > PATH > Edit 

Add the following:

;C:\Program Files (x86)\pstoedit;

Don’t forget semi colons.


Multiple Streams Write to the Same File with GNU C Library

Types of Channels

(1) You can have multiple file descriptors and streams (let’s call both streams and descriptors “channels” for short) connected to the same file. [1]

(2) There are two cases to consider: linked channels that share a single file position value, and independent channels that have their own file positions. [1]

(3) It’s impossible for two channels to have separate file pointers for a file that doesn’t support random access. Thus, channels for reading or writing such files are always linked, never independent. [2]

(4) Append-type channels are also always linked. For these channels, follow the rules for linked channels. [2]

Independent Channels

(1) You should clean an output stream after use, before doing anything else that might read or write from the same part of the file. [2]

This statement implies that it is OK for multiple independent channels each write to different parts of the same file at the same time as long as they clean themselves after use.

(2) You should clean an input stream before reading data that may have been modified using an independent channel. Otherwise, you might read obsolete data that had been in the stream’s buffer. [2]