App to Manage Terms and Conditions

28. December, 2014

There is this old joke on User Friendly about license agreements: “Have any of you ever actually read a license agreement?” “I have! A few words, anyway …” “And what did the part you read say?” “umm… ‘I accept.'” (whole story starts here; afterwards, someone actually wrote a version of Clippy for Vim called Vigor).

I remembered all this when I saw this video on YouTube:

And that led me to an idea: How about an app which tracks T&C for you? In general, it should take a license and show you the important bits. Then, you could say “okay, I like that and that and I can live with those.” The app would then remember your preferences. For the rest of the terms, you could chose “I grudgingly accept these” or “no business with me because of this term.”

Even better, the app could notify you of terms which don’t apply to you because of local law or because courts ruled them out.

That way, the app could just show you the parts of a new license which you want to know about, that is the parts which you didn’t already agree to and without the parts that you’d accept anyway.

c’t Inhaltsverzeichnis sortieren

23. December, 2014

Eine kleine Hilfe für alle Leser der c’t, welche einfach(er) einige Artikel archivieren wollen: Das verlinkte Script unten sortiert das Inhaltsverzeichnis im Archiv nach Seitenzahl wenn man auf “aktuell” klickt.

// ==UserScript==
// @name c't Inhaltsverzeichnis sortieren
// @namespace
// @version 1.0
// @description Sortiert das Inhaltsverzeichnis der c't nach Seitenzahl, wenn man auf "aktuell" klickt
// @match*
// @copyright 2014+, Aaron Digulla
// @grant unsafeWindow
// ==/UserScript==
var $ = unsafeWindow.jQuery;
var jQuery = unsafeWindow.jQuery;
var console = unsafeWindow.console;
function sortBySeitenzahl() {
var rows = $('td.seitenzahl').parent();
var bySeitenzahl = function(a,b) {
var keyA = $('td.seitenzahl', a).text();
var keyB = $('td.seitenzahl', b).text();
return parseInt(keyA) parseInt(keyB);
var table = $($(rows[0]).parents('table')[0]);
$.each(rows, function (index, row) { table.append(row); });
function setup() {
var rows = $('td.seitenzahl').parent();
var table = $($(rows[0]).parents('table')[0]);
var th = $($('th', table)[0]);
// Ein Mal sortieren, wenn auf den Kopf der Tabelle geklickt wird'click', sortBySeitenzahl);
// Aktuelle Zeile in der Tabelle besser hervorheben
$('<style>').attr('style', 'text/css').text('.toc tr:hover { background-color: #ffff99 }').appendTo($('head'));
// Deutlich machen, wie man das Script aktiviert
th.css({'color': 'blue', 'text-decoration': 'underline', 'cursor': 's-resize'});
console.log('Auf "aktuell" klicken, um das Inhaltsverzeichnis zu sortieren');

What Police Work Can Be Like

13. December, 2014

Police violence gets a lot of attention lately but that’s not a solution (neither the violence nor the media heating it up). Here is one solution:

Remember: Helping people before they commit crime is much better (and cheaper and more rewarding and more successful) than arresting them.

groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.1.8 and you are trying to load version 2.1.9

8. December, 2014

If you see this error while running the code from Eclipse, check the .classpath file for this line:

<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/> 

In this case, Eclipse adds version 2.1.8 to the classpath and Maven adds 2.1.9. At runtime, Groovy detects both versions and aborts since this will cause subtle bugs.

Solution: Delete the line above in the .classpath file.

If you see a line which contains GROOVY_DSL_SUPPORT, then you can leave that in – the Groovy plugin will use the JARs which Maven adds to the classpath.

%d bloggers like this: