Licht, Light, Lumo

How to make companies act ethically

→ comment on Slashdot concerning Unexpected methods to promote freedom?

Was it really Apple who ended DRM? Would they have done so without the protests and evangelizing against DRM? Without protesters in front of Apple Stores? And without the many people telling their friends to just not accept DRM?

That “preaching” created a situation where Apple could reap monetary gain from doing the right thing.

Taz verdreht 25.000 Protestunterschriften zu einem Misserfolg Googles

Die Taz nennt es einen Misserfolg Googles, dass an einem Tag 25.000 Leute gegen das Leistungsschutzrecht unterschrieben haben, weil kaum jemand zum Telefon gegriffen hat.

Ich habe ihnen daher das folgende geschrieben:

Wieso hätte ich anrufen sollen? Ich habe mich in die Petition eingetragen und darüber gebloggt.

Ich vermute, so haben es viele andere auch gemacht.

Und Googles Seite war auch so strukturiert, dass das Verhalten gefördert wird: Petition, dann optional noch die Möglichkeit anzurufen. Von „auf den Bundestag hetzen“ kann also keine Rede sein.

Google+ vs. Leistungsschutzrecht

→ Google hat eine Petition gegen das Leistungsschutzrecht gestartet - auf der Startseite und einer eigenen Kampagnenseite (die Taz berichtete - auch von 30min Besprechungszeit im Bundestag…). Ich habe unterschrieben - mit dem folgenden Kommentar:

Zukunft der Zeitung

Die Taz hat einen Artikel geschrieben, der bis auf das moralisieren am Ende echt schön war: Dieses Internet, das ist keine ungebändigte Bestie und keine Naturgewalt. Trotzdem soll es Schuld haben – an allem. — Untertitel: Nazi-Horror-Porno :)

An dem moralisierenden Ende des Artikels geht dessen Autorin Meike Laaff aber wieder den üblichen Irrweg:

„Haben Sie noch nie bei Amazon gekauft?“

Das ist die falsche Frage!

Genital-Verstümmelung ist der Fortpflanzung nicht dienlich, sondern hemmt sie

→ Kommentar zu einem Kommentar zu Religion vs. Kinderrechte in der Taz.

Nana behauptete, säkular aufgewachsene würden sich nicht vermehren und Verstümmelung würde der Fortpflanzung nutzen.

@Nana: Ich habe zwei Kinder und meine Frau will unserer Tochter Ohrlöcher stechen - in Spanischer Tradition.

Wir haben abgemacht, dass wir das machen, sobald sich die Kleine selbst dafür entscheiden kann (und das tut).

Was die Tageszeitung bietet - und was noch fehlt

Kommentar zum Hohelied auf die Tageszeitung von Ulrike Winkelmann im Taz-Blog.

Ihr Text klingt zwar gut, aber was hier das Format der Tageszeitung bewirkt ist schlicht eine Begrenzung der möglichen Nachrichten – die zu einer Auswahl führen.

Insert a scaled screenshot in emacs org-mode

@marjoleink asked on identi.ca1, if it is possible to use emacs org-mode for showing scaled screenshots inline while writing. Since I thought I’d enjoy some hacking, I decided to take the challenge.

It does not do auto-scaling of embedded images, as far as I know, but the use case of screenshots can be done with a simple function (add this to your ~/.emacs or ~/.emacs.d/init.el):


  1. Matthew Gregg: @marjoleink "way of life" thing again, but if you can invest some time, org-mode is a really powerful note keeping environment. → Marjolein Katsma: @mcg I'm sure it is - but seriously: can you embed a diagram2 or screenshot, scale it, and link it to itself? 

  2. For diagrams, you can just insert a link to the image file without description, then org-mode can show it inline. To get an even nicer user-experience (plain text diagrams or ascii-art), you can use inline code via org-babel using graphviz (dot) or ditaa - the latter is used for the diagrams in my complete Mercurial branching strategy

Wofür ich die Taz brauche

→ Zu Nur die Marke bleibt in der Taz.

Was ich von der Taz brauche sind 3 Dinge:

  • Wichtige Nachrichten, statt alle. Ich brauche euch als Filter. Dafür müsstet ihr nichtmal zu jeder Information einen eigenen Artikel schreiben. Tägliche Zusammenfassungs-Artikel mit Links würden oft auch reichen.

  • Gute Recherche. Ich will nicht nur lesen, was ich mir selbst mit etwas Phantasie zusammenreimen kann. Ich will, dass ihr mein Geld nutzt, um Informationen nicht nur zu sammeln, sondern zu erschaffen.

Hartz4 Kürzungen sind Grundgesetzwidrig

„Der Erste Senat des Bundesverfassungsgerichts hat entschieden, dass die Regelungen zu den Grundleistungen in Form der Geldleistungen nach dem Asylbewerberleistungsgesetz mit dem Grundrecht auf Gewährleistung eines menschenwürdigen Existenzminimums aus Art. 1 Abs. 1 GG in Verbindung mit Art. 20 Abs. 1 GG unvereinbar sind.“
— (BVerfG), 18.07.2012

„Künftig sollen sie in etwa auf dem Niveau von Sozialhilfe und Hartz IV liegen.“
— (Sueddeutsche), 18.07.2012

„Die Bundesagentur für Arbeit hat innerhalb eines Jahres mehr als einer Millionen Hartz-IV-Empfängern die Leistungen gekürzt.“
— (Taz), 20.11.2012

Dem ist nichts hinzuzufügen, außer:

» Artikel 20, GG - Ist es wieder soweit? «

Und bevor jetzt das moralisierende Faulheitsargument rausgeholt wird:

„Langzeitarbeitslose sind weder faul noch unzuverlässig. Eine neue Studie zeigt, dass Arbeitgeber mit ehemaligen Hartz-IV-Empfängern sehr zufrieden sind.“
— (Taz), 12.11.2012

Copyleft zu missachten beschädigt dessen politisches Ziel

→ Kommentar zu Frei, nicht wurscht in der Taz.

Ich würde mir zu dem Artikel auch mehr Recherche wünschen. Wer hat abgemahnt? Was hat der Abgemahnte getan? Gab es vorher andere Versuche einer Einigung? …

Hintergrund ist, dass copyleft Lizenzen wie CC by-sa das Ziel haben, das aktuelle Urheberrecht auf den Kopf zu stellen: Es geht darum, dass jeder alles ändern kann, solange er sagt, von wem es kommt.

Im aktuellen Urheberrecht darf niemand etwas ändern, es sei denn es wird ihm explizit erlaubt.

Tauschbörsennutzer geben fast 50% mehr Geld für Musik aus

Nachdem die Medienindustrie jahrelang die Nutzer von Tauschbörsen verleumdet, als Piraten beschimpft und verklagt hat, stellte gerade eine Studie der Industrienahen NPDGroup fest (Marktforscher - nicht die Partei…), dass US-Amerikanische Tauschbörsennutzer zwischen 18 und 35 fast 50% mehr Geld für Musik, Konzerttickets und Merchandise ausgeben als nicht-Nutzer (heise berichtete1)2

Update: In Deutschland ist der Effekt sogar noch stärker: Deutsche Tauschbörsennutzer kaufen fast 3x so viel wie Nicht-Nutzer. La Quadrature du Net verlinkt und bespricht eine Vielzahl weiterer Studien zum Thema.

Nachdem sie uns also jahrelang gejagt haben, wie wäre es mit einer Entschuldigung? Durch unsere meist unbezahlte Fan-Arbeit haben Musiker und Musikfirmen deutlich mehr verdient, als sie es ohne uns getan hätten.

Update: Nachdem Megaupload offline ging, haben die Filmfirmen weniger Umsatz gemacht als zuvor, und das kann auf verlorene Werbeeffekte zurückgeführt werden: “we find that the [Megaupload] shutdown had a negative, yet in some cases insignificant effect on box office revenues” — Piracy and Movie Revenues: Evidence from Megaupload, Christian Peukert und Jörg Claussen, SSRN, October 22, 2012 / doi 10.2139/ssrn.2176246. Interessanter Nebenaspekt: Im Abstract wurde das “in some cases” weggelassen: aus einem “negative, yet in some cases insignificant effect” wurde ein “negative, yet insignificant effect”. Ein Schelm, wer böses dabei denkt.


  1. Die Studie selbst verlinke ich nicht, die ist vermutlich eh bald wieder offline, kennen wir ja schon

  2. Um meinem statistischen Gewissen gerecht zu werden, muss ich hier darauf hinweisen, dass das nur eine Korrelation ist, und dass die Mehrausgaben aus dem digitalen Bereich kommen (für CDs geben P2P-Nutzer und Nicht-Nutzer etwa gleich viel aus). Vielleicht sind P2P-Nutzer auch einfach nur diejenigen, die mehr Zeit haben. Oder Fans nutzen Tauschbörsen, weil sie nicht genug Geld haben, um sich alles zu kaufen, das ihre Idole produzieren. Und ein großer Teil der Mehrausgaben geht in Konzertkarten und Merchandise, die meist direkt an die Musiker gehen, nicht an die Musikfirmen (ohne das geben P2P-Nutzer 14% mehr Geld für Musik aus). Aber Scheiß drauf: Die bösen Piraten sind gleichzeitig diejenigen, die euch am meisten Geld geben. Und jetzt haben wir das selbst von einem Industrienahen Institut belegt. 

Denken Grüne taktisch, wenn es um die Wahl geht?

→ Kommentar zu Roth kandidiert erneut [für den Fraktionsvorsitz] in der taz

Jetzt mal halblang. Ein viertel der Grünen hat für sie gestimmt - in einer Entscheidung, wer als Spitzenkandidat antreten soll.

Könnte es sein, dass viele einfach taktisch gedacht haben? Dass sie sich vielleicht überlegt haben, dass Claudia Roth bei nicht-Grünen nicht so gut ankommt und daher im Parteivorsitz mehr bewegen kann als als Spizenkandidatin?

Falls ja: Was wäre daran falsch?

Sending email to many people with Emacs Wanderlust

I recently needed to send an email to many people1.

Putting all of them into the BCC field did not work (mail rejected by provider) and when I split it into 2 emails, many did not see my mail because it was flagged as potential spam (they were not in the To-Field)2.

I did not want to put them all into the To-Field, because that would have spread their email-addresses around, which many would not want3.

So I needed a different solution. Which I found in the extensibility of emacs and wanderlust4. It now carries the name wl-draft-send-to-multiple-receivers-from-buffer.

You simply write the email as usual via wl-draft, then put all email addresses you want write to into a buffer and call M-x wl-draft-send-to-multiple-receivers-from-buffer. It asks you about the buffer with email addresses, then shows you all addresses and asks for confirmation.

Then it sends one email after the other, with a randomized wait of 0-10 seconds between messages to avoid flagging as spam.

If you want to use it, just add the following to your .emacs:

(defun wl-draft-clean-mail-address (address)
  (replace-regexp-in-string "," "" address))
(defun wl-draft-send-to-multiple-receivers (addresses) (loop for address in addresses do (progn (wl-user-agent-insert-header "To" (wl-draft-clean-mail-address address)) (let ((wl-interactive-send nil)) (wl-draft-send)) (sleep-for (random 10)))))
(defun wl-draft-send-to-multiple-receivers-from-buffer (&optional addresses-buffer-name) "Send a mail to multiple recipients - one recipient at a time" (interactive "BBuffer with one address per line") (let ((addresses nil)) (with-current-buffer addresses-buffer-name (setq addresses (split-string (buffer-string) "\n"))) (if (y-or-n-p (concat "Send this mail to " (mapconcat 'identity addresses ", "))) (wl-draft-send-to-multiple-receivers addresses))))

Happy Hacking!


  1. The email was about the birth of my second child, and I wanted to inform all people I care about (of whom I have the email address), which amounted to 220 recipients. 

  2. Naturally this technique could be used for real spamming, but to be frank: People who send spam won’t need it. They will already have much more sophisticated methods. This little trick just reduces the inconvenience brought upon us by the measures which are necessary due to spam. Otherwise I could just send a mail with 1000 receivers in the BCC field - which is how it should be. 

  3. It only needs one careless friend, and your connections to others get tracked in facebook and the likes. For more information on Facebook, see Stallman about Facebook

  4. Sure, there are also template mails and all such, but learning to use these would consume just as much time as extending emacs - and would be much less flexible: Should I need other ways to transform my mails, I’ll be able to just reuse my code. 

Deep Packet Inspection ist immer falsch

→ Kommentar zu einem Kommentar bei dem Artikel auf Netzpolitik, der beschrieb, dass deep packet inspection in Deutschland bereits genutzt wird: „Der Unterschied zwischen Internet in Diktaturen und Deutschland ist eine Konfigurationsdatei

Iteratoren als Filter

Für meine Plotroutinen brauche ich oft Funktionen, die eine Liste an Messwerten durchgehen und nur diejenigen zurückgeben, die einem bestimmten Kriterium entsprechen. Wenn dabei die Anzahl der Messwerte in die Millionen geht, kann alleine schon die Liste der ungefilterten Messwerte den Arbeitsspeicher des Rechners sprengen.

Ich könnte jetzt einfach eine Funktion schreiben, die alle Werte liest, filtert und nur die Relevanten zurückgibt.

Das könnte dann etwa so aussehen:

Ohrlöcher für Kinder?

Die Taz fragt als Reaktion auf eine Klage von Eltern gegen ein Tattoo-Studio im aktuellen Streit der Woche, ob es OK ist, wenn Kinder Ohrlöcher gestochen bekommen.

Ich habe selbst ein Ohrloch. Meine Eltern haben mir erlaubt, es mir stechen zu lassen, als ich noch im Kindergarten war, und ich war jahrelang glücklich damit.

Beschneidung und Sexualität: „Die sensible Leichtigkeit war verschwunden – und kam nie zurück“

Niels Juel hat sich mit 18 beschneiden lassen. Er berichtet in der Taz von seinen Erfahrungen in den 30 Jahren danach:

Mit meiner Vorhaut war auch das überschäumende, sprudelnde Gefühl beim Orgasmus verschwunden.

am größten war der Unterschied, wenn Miriam auf eine Reise südlich des Äquators ging. Da fehlten plötzlich einige – viele – Empfindungen.

Weil die Eichel nun ungeschützt war und ich weniger reizbar, war der sanfte, langsame Sex von da an Geschichte.

…als ob nicht mehr mein ganzer Körper im Spiel, eine große Freude verschwunden war.

Söder Dödel-Film

Söder Dödelfilm

Laut Wikipedia ist Markus Söder „evangelisch-lutherisch“.1

Ich helfe Schmickler, eine interessante Idee zu testen… wenn ihr mithelfen wollt, schaut einfach mal von Hand, ob ihr „Söder Dödelfilm“ bei Google findet (der Link oben sollte laut WDR2 Wissen diesen Effekt nicht haben, weil die Suche nicht interaktiv ist2).

Wenn ihr testen wollt, ob Schmicklers Idee funktioniert, gebt bei Google „Söder“3 ein und schaut, ob es euch „Dödelfilm“ vorschlägt :)


  1. Diese Information hat keinen Bezug zu diesem Beitrag. Wenn sie dich dazu gebracht hat, auf den Link zu klicken und damit Informationen zum Experiment zu kriegen, hat sie jeglichen Sinn erfüllt, den sie haben kann. Nächste Frage: Wie viele Pressewerke machen sowas, ohne eine Fußnote wie die hier darunter zu setzen? Aufmerksam Zeitung zu lesen kann erschütternd sein… 

  2. Ich stelle am Anfang den Link ein, um sicherzustellen, dass niemand ohne Absicht bei Schmicklers Test mitmacht. Wer nicht weiterliest, sieht nur Infoseiten zu dem Versuch, sollte aber keinen Einfluss auf die Vorschau haben - zumindest wenn WDR recht hat (und das nehme ich als Arbeitshypothese). Sollte so ein Link doch einen Einfluss haben, bitte ich um Referenzen dazu. Falls ich die kriege, nehme ich ihn raus, denn dieser Artikel soll Leuten die Möglichkeit geben, ein interessantes Experiment zu machen, wenn sie das selbst wollen - und nur nachdem sie die Informationen dazu haben (um die Informationen zu liefern ist der Link da). 

  3. Markus Söder ist der Typ, der sagt, Griechenland müsse raus aus dem Euro, obwohl Griechenland unter den Euroländern am stärksten spart und diese von uns aufgezwungene Sparpolitik schon jetzt seine Wirtschaft zerstört. 

Freie Schriften

Kommentar zu Freie Schriften – Anspruch und Wirklichkeit von Gerrit.

Danke für die Zusammenfassung.

Ich würde gerne die Lizenzprobleme, die andere hier kurz erwähnt haben, nochmal hervorheben.

Wir haben zu zweit Stunden gebraucht, um auch nur eine Sammlung von 12 echt freien Schriften zu finden, die für unser Rollenspiel tauglich sind.1 Und das auch nur dank Font-Squirrel.

Frei heißt dabei explizit: Kompatibel zur GNU GPL.


  1. Die Schriften, die wir gefunden haben: Schriften 

Belege für den Einfluss des Menschen auf das Klima

Ich habe gerade in der Taz wieder viele Kommentare gelesen, in denen der Einfluss der Menschen auf das Klima bestritten wurde. Daher möchte ich hier einen der neueren, wenn auch weniger rigoros publizierten Belege nennen: Berkeley Earth.

Landtemperatur

Den Wissenschaftlern von Berkeley Earth waren die traditionellen Modelle zu unklar, und die Methoden zu wenig durchsichtig.

Gehalt von Links: Kategorie und Thema des Textes

Lesende auf anderen Seiten können mit dem Link das Thema meines Artikels einschätzen, ohne auf meine Seite kommen zu müssen. Gute Links sind ein Schutz gegen Betrug durch die Verlinkenden.

Link: Kategorie und Thema (Stichworte) (licht/politik/gedanken/gehalt-von-links)

Ich habe letztens den Artikel von fefe über lange Links gelesen1 und mir Gedanken darüber gemacht, was eigentlich der Nutzen eines Links für meine Seite ist.

Bei mir selbst habe ich beobachtet, dass ich mir die Linkadresse anschaue, bevor ich einen Link anklicke. Der Grund ist, dass die Linkadresse ein technischer Identifikator ist, den die verlinkende Seite nicht fälschen kann2. Die Linkadresse gibt mir also eine grundlegende Sicherheit, dass der Link den ich anklicke mich auf die Seite bringt, die ich dort erwarte.


  1. Eigentlich ging er um SEO-Links, also Links, in denen eine ID steht, um die herum beliebiger Text platziert werden kann - und wird. Er beschwerte sich aber auch über die Länge von Links, und das hat mich auf neue Gedanken gebracht. Danke dafür! 

  2. Zumindest kann die verlinkende Seite den Identifikator nicht fälschen, ohne den Link ungültig zu machen oder auf Javascript zurückzugreifen - das ich einfach deaktivieren kann. Seiten, die eine ID im Link haben, nehmen mir als Leser diese Sicherheit. Als Beispiel: Worauf bezieht sich wohl dieser Artikel in der Taz? taz.de/kinder-morden-oma-fuer-den-feldwebel/!100474/ — QED… 

» Forsa-Umfrage für RTL und "Stern" « - zitiert vom Spiegel… 3 gegen Piraten

→ Zum Artikel Piraten als Verlierer, in dem der Spiegel erzählt, dass CDU und FDP vor SPD und Grünen sind, die Linke ignoriert und einen Absturz der Piraten erfindet…

Kurz die Zahlen:

CDU: 36%, SPD: 27%, Grüne: 13%, Linke: 8%, Piraten: 7%, FDP: 5%

Wer glaubt bei so einer Interpretation noch, dass der Spiegel irgendwie auf der Seite von Piraten steht - oder auch nur unabhängig berichtet? Da wird das immer gleiche Bild gepredigt.

Bootstrapping the Freenet WoT with GnuPG - and GnuPG with Freenet

Intro

When you enter the freenet Web of Trust, you first need to get some trust from people by solving captchas. And even when people trust you somehow, you have no way to prove your identity in an automatic way, so you can’t create identities which freenet can label as trusted without manual intervention from your side.

Proposal

To change this, we can use the Web of Trust used in GnuPG to infer trust relationships between freenet WoT IDs.

Practically that means:

  • Write a message: “I am the WoT ID USK@” (replace with the

Easily converting ris-citations to bibtex with emacs and bibutils

The problem

Nature only gives me ris-formatted citations, but I use bibtex.

Also ris is far from human readable.

The background

ris can be reformatted to bibtext, but doing that manually disturbs my workflow when getting references while taking note about a paper in emacs.

I tend to search online for references, often just using google scholar, so when I find a ris reference, the first data I get for the ris-citation is a link.

The solution

Emacs

Cross platform, Free Software, almost all features you can think of, graphical and in the shell: Learn once, use for everything.

» Get Emacs «

Emacs is a self-documenting, extensible editor, a development environment and a platform for lisp-programs - for example programs to make programming easier, but also for todo-lists on steroids, reading email, posting to identi.ca, and a host of other stuff (learn lisp).

It is one of the origins of GNU and free software (Emacs History).

In Markdown-mode it looks like this:

Emacs mit Markdown mode

A complete Mercurial branching strategy

New version: draketo.de/software/mercurial-branching-strategy

This is a complete collaboration model for Mercurial. It shows you all the actions you may need to take, except for the basics already found in other tutorials like

Adaptions optimize the model for special needs like maintaining multiple releases1, grafting micro-releases and an explicit code review stage.

Summary: 3 simple rules

Any model to be used by people should consist of simple, consistent rules. Programming is complex enough without having to worry about elaborate branching directives. Therefore this model boils down to 3 simple rules:

3 simple rules:

(1) you do all the work on default2 - except for hotfixes.

(2) on stable you only do hotfixes, merges for release3 and tagging for release. Only maintainers4 touch stable.

(3) you can use arbitrary feature-branches5, as long as you don’t call them default or stable. They always start at default (since you do all the work on default).

Diagram

To visualize the structure, here’s a 3-tiered diagram. To the left are the actions of programmers (commits and feature branches) and in the center the tasks for maintainers (release and hotfix). The users to the right just use the stable branch.6

Overview Diagram
An overview of the branching strategy. Click the image to get the emacs org-mode ditaa-source.

Table of Contents

Practial Actions

Now we can look at all the actions you will ever need to do in this model:7

  • Regular development

    • commit changes: (edit); hg ci -m "message"

    • continue development after a release: hg update; (edit); hg ci -m "message"

  • Feature Branches

    • start a larger feature: hg branch feature-x; (edit); hg ci -m "message"

    • continue with the feature: hg update feature-x; (edit); hg ci -m "message"

    • merge the feature: hg update default; hg merge feature-x; hg ci -m "merged feature x into default"

    • close and merge the feature when you are done: hg update feature-x; hg ci --close-branch -m "finished feature x"; hg update default; hg merge feature-x; hg ci -m "merged finished feature x into default"

  • Tasks for Maintainers

    • Initialize (only needed once)

      • create the repo: hg init reponame; cd reponame

      • first commit: (edit); hg ci -m "message"

      • create the stable branch and do the first release: hg branch stable; hg tag tagname; hg up default; hg merge stable; hg ci -m "merge stable into default: ready for more development"

    • apply a hotfix8: hg up stable; (edit); hg ci -m "message"; hg up default; hg merge stable; hg ci -m "merge stable into default: ready for more development"

    • do a release9: hg up stable; hg merge default; hg ci -m "(description of the main changes since the last release)" ; hg tag tagname; hg up default ; hg merge stable ; hg ci -m "merged stable into default: ready for more development"

That’s it. All that follows are a detailed example which goes through all actions one-by-one, adaptions to this workflow and the final summary.


  1. if you need to maintain multiple very different releases simultanously, see or 10 for adaptions 

  2. default is the default branch. That’s the named branch you use when you don’t explicitely set a branch. Its alias is the empty string, so if no branch is shown in the log (hg log), you’re on the default branch. Thanks to John for asking! 

  3. If you want to release the changes from default in smaller chunks, you can also graft specific changes into a release preparation branch and merge that instead of directly merging default into stable. This can be useful to get real-life testing of the distinct parts. For details see the extension Graft changes into micro-releases

  4. Maintainers are those who do releases, while they do a release. At any other time, they follow the same patterns as everyone else. If the release tasks seem a bit long, keep in mind that you only need them when you do the release. Their goal is to make regular development as easy as possible, so you can tell your non-releasing colleagues “just work on default and everything will be fine”. 

  5. This model does not use bookmarks, because they don’t offer benefits which outweight the cost of introducing another concept: If you use bookmarks for differenciating lines of development, you have to define the canonical revision to clone by setting the @ bookmark. For local work and small features, bookmarks can be used quite well, though, and since this model does not define their use, it also does not limit it.
    Additionally bookmarks could be useful for feature branches, if you use many of them (in that case reusing names is a real danger and not just a rare annoyance) or if you use release branches:
    “What are people working on right now?” → hg bookmarks
    “Which lines of development do we have in the project?” → hg branches 

  6. Those users who want external verification can restrict themselves to the tagged releases - potentially GPG signed by trusted 3rd-party reviewers. GPG signatures are treated like hotfixes: reviewers sign on stable (via hg sign without options) and merge into default. Signing directly on stable reduces the possibility of signing the wrong revision. 

  7. hg pull and hg push to transfer changes and hg merge when you have multiple heads on one branch are implied in the actions: you can use any kind of repository structure and synchronization scheme. The practical actions only assume that you synchronize your repositories with the other contributors at some point. 

  8. Here a hotfix is defined as a fix which must be applied quickly out-of-order, for example to fix a security hole. It prompts a bugfix-release which only contains already stable and tested changes plus the hotfix. 

  9. If your project needs a certain release preparation phase (like translations), then you can simply assign a task branch. Instead of merging to stable, you merge to the task branch, and once the task is done, you merge the task branch to stable. An Example: Assume that you need to update translations before you release anything. (next part: init: you only need this once) When you want to do the first release which needs to be translated, you update to the revision from which you want to make the release and create the “translation” branch: hg update default; hg branch translation; hg commit -m "prepared the translation branch". All translators now update to the translation branch and do the translations. Then you merge it into stable: hg update stable; hg merge translation; hg ci -m "merged translated source for release". After the release you merge stable back into default as usual. (regular releases) If you want to start translating the next time, you just merge the revision to release into the translation branch: hg update translation; hg merge default; hg commit -m "prepared translation branch". Afterwards you merge “translation” into stable and proceed as usual. 

  10. If you want to adapt the model to multiple very distinct releases, simply add multiple release-branches (i.e. release-x). Then hg graft the changes you want to use from default or stable into the releases and merge the releases into stable to ensure that the relationship of their changes to current changes is clear, recorded and will be applied automatically by Mercurial in future merges11. If you use multiple tagged releases, you need to merge the releases into each other in order - starting from the oldest and finishing by merging the most recent one into stable - to record the same information as with release branches. Additionally it is considered impolite to other developers to keep multiple heads in one branch, because with multiple heads other developers do not know the canonical tip of the branch which they should use to make their changes - or in case of stable, which head they should merge to for preparing the next release. That’s why you are likely better off creating a branch per release, if you want to maintain many very different releases for a long time. If you only use tags on stable for releases, you need one merge per maintained release to create a bugfix version of one old release. By adding release branches, you reduce that overhead to one single merge to stable per affected release by stating clearly, that changes to old versions should never affect new versions, except if those changes are explicitely merged into the new versions. If the bugfix affects all releases, release branches require two times as many actions as tagged releases, though: You need to graft the bugfix into every release and merge the release into stable.12 

  11. If for example you want to ignore that change to an old release for new releases, you simply merge the old release into stable and use hg revert --all -r stable before committing the merge. 

  12. A rule of thumb for deciding between tagged releases and release branches is: If you only have a few releases you maintain at the same time, use tagged releases. If you expect that most bugfixes will apply to all releases, starting with some old release, just use tagged releases. If bugfixes will only apply to one release and the current development, use tagged releases and merge hotfixes only to stable. If most bugfixes will only apply to one release and not to the current development, use release branches. 

Creating nice logs with revsets in Mercurial

In the mercurial list Stanimir Stamenkov asked how to get rid of intermediate merges in the log to simplify reading the history (and to not care about missing some of the details).

Update: Since Mercurial 2.4 you can simply use
hg log -Gr "branchpoint()"

I did some tests for that and I think the nicest representation I found is this:

hg log -Gr "(all() - merge()) or head()"

This article shows examples for this.

What can Freenet do well already?

From the #freenet IRC channel at freenode.net:

toad_1: what can freenet do well already?

  • sharing and retrieving files asynchronously, freemail, IRC2, publishing sites without need of a central server, sharing code repositories

  1. toad alias Matthew Toseland is the main developer of freenet. He tends to see more of the remaining challenges and fewer of the achievements than me - which is a pretty good trait for someone who builds a system to which we might have to entrust our basic right of free speech if the world goes on like this. From a PR perspective it is a pretty horrible trait, though, because he tends to forget to tell people what freenet can already do well :) 

  2. To setup the social networking features of Freenet, have a look at the social networking guide 

Bradley Manning hat das richtige versucht

Bradley Manning hat illegale Vorgänge in der Armee gemeldet, wie es die Pflicht jedes Staatsbürgers ist (und wenn nicht die rechtliche, dann die moralische - wenn wir unseren Rechtstaat bewahren wollen).

Inhalt abgleichen
Willkommen im Weltenwald!
((λ()'Dr.ArneBab))



Beliebte Inhalte

Benutzeranmeldung

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions. This is pretty hard (also for me), but any easier and I drown in spam.
Image CAPTCHA
Enter the characters shown in the image.

Draketo neu: Beiträge

Ein Würfel System

sn.1w6.org news