Has been nearly a year since the last release. But then again, it's just a for-fun project for me at the moment where I put in some spare hour to relax by indulging into creative technological thinking and some systems engineering. Anyway, here we go:

The new version 0.13 of the EarthOS document has been published. Access it with that given link, or via “Downloads -> Main” in the site menu.

What's it all about? A constantly evolving open content project where I collect and orchestrate existing open hardware and open source projects and own ideas into a system with which you could manage all material and technological requirements of living, from food to water supply, mobility to clothing, health care to Internet connection.

What is it good for? Personally I use it as a framework of thought: I do not implement it all since it's too much of an effort for one person alone, but where applicable I align the designs of stuff I build according to the EarthOS proposals. For example, things I integrate into my mobile home. So I guess it would be great as a combined roadmap that could help all the open projects to coordinate efforts for arriving at a fully open world efficiently and fast. Preferably in our lifetime!

What's new? Too much to count. Really, it's 850 pages now and I do not remember all I changed. Main aspects are however the energy supply design: levels L2 and L3 rely on biomass gasification now. This includes innovative ideas that have never been tried to my knowledge, like a bike with wood gas powered assisted power engine, or a truck where 100% of all energy is used because the 60-70% thermal energy, normally lost via the exhaust and radiator, is used for meaningful work like drying collected biomass and recycling water by multi-stage distillation.

Why are there no images? :S Umh, I admit the document is very much in draft state, also still containing untranslated German sections etc.. It's like a brain dump … and probably shows the nature of my thoughts: many details but not aesthetically pleasing 😀 I am wide open to your proposals how we could make this a great, usable piece of content. In order to make faster progress, we'd either need more people, or some compensation so I can put in more hours. Any ideas? Any feedback on how applicable this is for a small crowdfunding campaign?

Recording a video from Linux desktop content, like for creating a screencast presentation, is quite simple with recordmydesktop or its GUI version gtk-recordmydesktop.

However if you want to capture the system sound as well (not what you might speak live into a microphone), it gets a bit more difficult. Here is one possible solution with the pulseaudio sound server (available by default in Ubuntu Linux):

  1. Install pavucontrol by executing sudo apt-get install pavucontrol.
  2. In gtk-recordmydesktop, go to "Advanced -> Sound -> Device" and change the value from "DEFAULT" to "default".
  3. Start pavucontrol.
  4. Do a test recording with gtk-recordmydesktop and, while it's recording, in pavucontrol go to tab "Recording", there in entry "ALSA plug-in[recordmydesktop]:ALSA capture from" change the value from "Built-in Audio Analog Stereo" to "Monitor of Built-in Audio Analog Stereo".
  5. In tab "Input devices" use the dropdown on the bottom to display also monitor devices, look for the ""Monitor of Built-in Audio Analog Stereo" device and make sure it's not silenced and the volume gauge is at 100%. When something is playing through your speakers, you have to get a signal showing up there, independently of if you're recording at the moment.
  6. Record with gtk-recordmydesktop as you're used to do.

This solution was taken from ubuntuforums.org thread 1509398.

There is also another solution involving only ALSA and the snd-aloop kernel module for recording from a loopback soundcard. However I could not get it to work.

Acquia Drupal Commons 3 is a great Drupal 7 distribution to create a social network type site. Casetracker is a nice, extensible support ticket management system for Drupal 7 that can also be used as a task manager for distributed collaboration on tasks. Here's how to integrate both cleanly as I did for the Edgeryders site:

  1. Create a new Drupal Commons integrated content type as a module. This is really simple by the existing, quite generic Drupal Commons content type modules (commons_post), copying it to another module (here, commons_tasks) and replacing all occurences of post / posts with task / tasks respectively. In my case, the result is a module commons_tasks. Not yet readily packaged as a Drupal module, but you cand download the files from that link already. That's better than creating it yourself, since there are a few other tweaks included (like adapting the link for creating a new task to inclde a reference to the Casetracker project ID as parameter for which to create the task.)
  2. Install the new module. Here: Save the directory commons_tasks under ./sites/all/modules and call: drush pm-enable commons_tasks.
  3. Adapt Casetracker settings. In the "Casetracker settings" screen (at /admin/config/casetracker/settings), set "Group" to be the only project node type and "Task" to be the only case node type.
  4. Add og_group_ref to the new content type. Go to "Administration -> Structure -> Content types -> Task -> Manage fields" (/admin/structure/types/manage/task/fields) and add add the existing field og_group_ref.
  5. Configure field og_group_ref. That is, configure the field and fied display settings to be the same as in the Drupal Commons content types, e.g. Post. Especially take care to enable the "field prepopulate" setting to select proper group membership as default when creating new content from within a group.
  6. Configure permissions for Casetracker. To be done at /admin/people/permissions. Note that you don't need to give any permissions in the "CT Basic" section because these only relate to the Casetracker's default project and case content types, which we don't use.
  7. Disable the casetracker_basic module. It's not needed because we use other content types for Casetracker projects and cases here. Execute: drush pm-disable casetracker_basic.
  8. Adapt comments settings. In the content type settings for "Task" (/admin/structure/types/manage/task), adapt comments accordingly. You probably neither want a title nor threading for the comments.

As a result, all Tasks are now handled by the casetracker module and can also be managed in its task manager at /casetracker. But additionally, tasks are content of organic groups like posts, wikis, polls and questions in Drupal Commons, and are nicely integrated with the Drupal Commons group browsing widget, content creation widget and notifications system, including the "Follow" and e-mail notifications features.

For example, you might be able to read and understand a foreign language website sufficiently using machine translation (like Google Translate), but machine translation is mostly not sufficient for contributing own content to it. So what? The optimum case would be to have a webservice that offers instant translation for small texts. Or translation with a short turnaround time like one hour, after which you can insert your statement into the website or forum. Ideally, such a webservice would be P2P organized: you would earn credits by doing this instant translation for others, and would spend them for getting own translation.

Funny enough, this exact thing does not exist. Here's what I found instead, by adequacy, starting with the best solutions:

  • Fiverr. So far the best solution I could find for cases where you don't need super professional (just understandable) translation quality. You will easily find people offering 500 – 1000 words of translation for 5 USD. Turnaround time can be as fast as 24 hours. Or try to make a special deal with somebody offering translation, language lessons or similar, so that you agree on a time to chat where you can get the translation right away, or agree that you can send multiple e-mails with short texts which the translator will translate immediately or within a day, up to a total word amount.
  • SpeakLike Chat Translation. Indeed they do realtime translation in chats, and by chatting with yourself on two accounts you can of course intercept the translation for putting it into a webpage lateron. Price is about 0.05 EUR/word [source].
  • SOS Translator Chat. They offer live translation by instant messaging with a translator. They charge a start rate plus a rate per minute, not per word [source]. So this is rather difficult to fit in for contributing content to a website.
  • VerbalizeIt Skype-embedded translation. It seems they offer text-to-text realtime translation for Skype chats. However it's a professional service, so it's not cheap, seemingly starting at 0.17 USD/word [source].
  • ackuna. Nice idea: a crowdsourcing site for translating. You translate something for others, and you can get something translated by others. However there is no system where you have to earn points by translating before you can get something translated, so from a first glance it seems that you can't count on your text being translated in reasonable time. It can take months. Also, the site is mostly for short phrases as found in software applications – while it's possible to enter paragraphs of text, this will probably quickly overchallenge the goodwill of the uncompensated volunteers. The site also accepts special file formats for software i18n, but is not limited to that: there's also a textbox to paste the text you want translated [source, at "How do I create a project?"] I have to admit that I don't like the translators' interface of Ackuna too well: it's a good start, but for great usability a lot of tweaks have to be made. Like translating in lists (with tabbing), AJAX voting in lists (saving more page load times), a transactional one-point-per-word system where people have to earn points by translating before posting own projects, showing only entries without any submission while translating, etc..
  • Transfix.it. A software where humans proofread and fix machine-translated texts.
  • WikiTranslation. A site for gratis, community-generated translations which can be voted.
  • OneHourTranslation. Fast turnaround time of at most one hour to start and one hour per 200 words. But mostly too expensive for private use in forums etc. (0.06 EUR/word).

Some other interesting finds about translation include:

  • Linguanaut Free Translation. Translation is done by volunteers. Which means they are of course not compelled to do the job, there is no deadline, and one can't be sure when the job gets done. But for occasional, not time-critical translations it seems great. Not a good idea to exploit volunteer with high volume work, of course.
  • Free human translation at Translatorsbase.com. Only for single words and short phrases, but for these really useful. The translators get higher ranking by providing such free translations.
  • Gengo. Offering people-powered translation services.
  • Babylon Human Translation. By well-known translation software provider "Babylon".
  • TYWI Mobile Interpreter. Offers simultaneus human translation of speech, via a professional translator, connected by Internet.
  • Wikipedia on Telephone intepretation.

This is my commentary on the analysis of monetary inflation and income development by Dr. Harald Wozniewski, as presented on kiwifo.de, especially on page "60 Jahre Währungsreform –
60 Jahre Geldmengenwachstum
".

Our task is first to determine the real inflation rate (not by means of a shopping basket, which is hedonically corrected etc.). This is simple: If the inflation rate grows only as much as the GDP, its speed of circulation stays the same, so also the "difficulty of aquiring money", so also the prices. Because, circulation speed is the ratio of GDP to money: Circulation speed of money = GDP / (M1 + cash). If this speed decreases, there is more money, and this means price inflation. This price inflation can however be hidden by the fact 

However, all this money is created by monetization: banks have securities in their books, and emit their own securities based on that, some of which (plus public bnonds) are accepted by the central bank. So other banks can borrow them, place them at the central bank, and get cash money delivered in return. So higher monetization is only an indicator of credit expansion (potentially made possible by wealth accumulation as goods, like real estate that banks can use as securities). But still, by allowing this increase of monetization, teh central bank allows the same amount of inflation. Which, minus the GDP growth, means the same devaluation of wages, which are paid in this money.

We see: Economic exclusion because of money scarcity does not happen because there's too little money in the system (teh opposite is the case). Instead, because this money is not paid as wages.

Measuring the GDP increase year by year, after deducting shopping-basket based inflation, measures efficiency gains, and in one sense this is indeed the growth of the economy: more wealth because of more efficient tech. These efficiency gains normally have to be forwarded to the workers by wage increases that are the same as GDP growth (to keep mass purchasing power). But what GDP change does not account for is, what proportion of this total wealth is available for purchase from a worker's income. This proportion steadily decreases because the monetary amount is more inflated than the GDP. In total, the "right of one EUR to a proportion of total GDP" has decreased by 74.3% from 1970 to 2012 [source, "Tabelle 2".U53]. Of course, the "right of 1% of total money amount to a proportion of total GDP" has not decreased, but to keep their income at the same proportion of the money amount, the income of workers would have to increase by the same amount as monetary inflation. Which it did not.

This does not mean that workers are now, in absolute terms, worse off than in the 70's: theres (1) profiting wealth accumulation because a house etc. can be used for decades, and (2) profiting from the increase of total wealth through advancement of technology. That's why German workers don't complain as much as they should. But in relative terms, they are much worse off: the entitlement from their monetary income to a proportion of the yearly produced total wealth ("GDP") in 2012 was only 25.7% of what it was in 1970.

This does however not necessarily mean that prices are four times higher than they should be if worker's would fare as well as in 1970 (or that workers would have to earn 4 times as much). It just means that, as they have less right to total wealth with their income, someone else has more right. But, as can be seen from the decrease of monetary circulation speed by 74.3% as well, they do not use that right, they just have it stored as money. Prices do not increase by monetary inflation automatically, but only if the circulation speed of the money decreases less than it is inflated. If those who have the addictional money would (could) use it as often as in the 1970's, that would of course lead to a fourfold price increase. But this is not even possible except as a one-time effect: their right to this money does not replenish as continually earned wages do (it only replenishes by interest), so the two cannot be compared easily.

So it is not justified from these findings of monetary inflation to say that workers don't earn their fair share (that may be found nonetheless from other arguments!). Instead, if anything, then the monetary inflation amount that is beyond real wage increase rate (which means 10%, as since the mid 90's there were no real wage increases) is a sum of money that is year by year distributed to "others" (banks, companies, privateers) while it should be distributed to the workers. This is for example 200 billion EUR from 20011 to 2012 [source, "Tabelle 2".M52-M53]. Distributed to 68.4 million adults in Germany (data form 2011-01), this would mean an added income of 2923 EUR yearly. Instead, it accumulates "somewhere else".

So what we have here is a phenomenon of wealth accumulation in money that was not there in earlier years. But since money is only a small part of a nation's accumulated wealth, it is by no means sufficient to look at monetary wealth accumulation alone to determine a problem with wealth accumulation in Germany. Instead, one has to look at total assets.

So, in my conclusions, the arguments by Dr. Harald Wozniewski are internally misguided. Still, lots of interesting figures to find there from which you may draw your own conclusions.

One of my latest projects was setting up the Git source code management system on a customer's server, so that different developers can have different access rights to repositories. How to do that?

For the really simple case of one set of repositories with r/w access to every developer in your organization, you can use a git server, with or without a dedicated user, with or without SSH keys [source]. For the complex case with even intra-repository rights management, there is Gitolite; or Gitosis, but that is no longer maintained [source]. But what is the simplest solution for the middle ground: multiple users, and giving each one access to a potentially different set of repositories?

Here's a solution for that – I haven't seen it documented anywhere, but I guess it's quite obvious. I simply extend the outta-the-box git server scenario by running multiple git servers in parallel, each for one (non-intersecting) set of repositories with one (potentially intersecting) set of developers who get r/w access. So for example, you can have a setup like this:

  • team 1
    • repositories: project 1, project 2
    • developers with access: Alice, Bob, Andrew
  • team 2
    • repositories: project 3
    • developers with access: Alice, Juan
  • team 3
    • repositories: project 4, project 5
    • developers with access: Juan

Setting up a team

For every team, you set up one dedicated user and git server on your host. You can have as many servers as you want, and adding one always follows this procedure. Let's assume we want to set up a team devteam1.

  1. Create a new user and set a password for it. Say you want to name the user devteam1, then execute: adduser devteam1.
  2. In /etc/passwd, change devteam1's shell to be /usr/bin/git-shell (or wherever it is on your host – see which git-shell). This prohibits SSH access with this user, but allows git commands.

Adding a developer to a team

Say you want add developer Alice to your team devteam1, which means giving her r/w access to all repositories of devteam1. The simplest solution is to hand out the password for system user devteam1 to the new developer. This requires however to enter it on every commit. (If you want to avoid this, the usual and widely documented method if to use SSH keys with git.)

Note that using one shared user account for writing to your remote repository does not mean that commits from all the developers will use the same author information. Instead, the password needed for git push just is for transferring your commits. Your commits have been made earlier, in your local git repository, using the author information configured in git.

You can determine git's author information by looking at user.name and user.email in git config --list (potentially overwritten in environment variables GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL [source]). You can configure this author information for your user in ~/.gitconfig on your local computer, and if needed override it in .git/config per repository, by adding a section like this there:

[user]
        name = Alice Example
        email = alice@example.com

Adding a repository to a team

Say you want to add repository project1 to team devteam1. On your server, do this:

  1. cd /home/devteam1
  2. mkdir project1.git
  3. cd project1.git
  4. git init --bare
  5. chmod -R u=rwX,g=rX,o= .
  6. chown -R devteam1:devteam1 .

Explanations:

  • git init --bare creates a "bare" repository, which means one that stores all the code in objects, but without having a working directory (the set of source files a developer will work with on her local computer). On your local computer, the git repository resides in a .git subdirectory, while a "bare" repository is created in the current directory, not within a .git one.
  • The chmod and chown commands make sure the devteam user is the one with write access to the repository; else, git push commands involving this repository (using devteam1@example.com:/home/devteam1/project1.git) would result in this error message: "error: insufficient permission for adding an object to repository database ./objects" [source]. They also make sure no other user has access, not even nread access.
  • Note that read and read/write access to git repositories on the server is controlled by the file permissions of this repository's files. So rights management is effectively just Unix system file rights management: Every Unix system user with read access to these files can be used in a git command to read (clone and pull) the repository. Every Unix system user with write access can be used in a git push command. So if you want to create a world-readable repository, make its files world-readable. If you don't want the simple "team -> repositories" hierarchy we use here, you can instead create a group with r/w access for every repository on the server, a system user per developer, and add that user to all groups of repositories that you want him / her to access r/w.

Working with your repositories

Say you want to access a repository project1 that belongs to devteam1, and your server is example.com:

  • Cloning the git repository to your local computer: git clone devteam1@example.com:/home/devteam1/project1.git. This creates a local directory project1. Go there and do your changes to your code.
  • Getting and merging changes from the repository: git pull.
  • Committing your changes to the repository: git add .; git commit -m "Commit message."; git push; You will be asked for the password of user devteam1 on the server.

Here's my collection of favorite DNS tools and techniques to troubleshoot issues: