SWick

A table tennis power machine

Entries from May 2012.

Run free run GNU
12th May 2012

z.B. mit Trisquel. Version 5.5 wurde kürzlich veröffentlicht:

Zum Release ein paar Worte von Ruben:

Interessant ist das Thema zu Gnome 3 bzw. was sie mit dessen Fallback Modus gemacht haben.

Tags: gnu, pictures.
UnQL, the NoSQL Standard Query Language
20th May 2012

Neben CouchDB (und dem Fork Couchbase) hatte ich immer noch ein Auge auf MongoDB, da dessen Query Möglichkeiten doch recht schick sind (und mir die AGPL als Lizenz besser zusagt). Beim Stöbern bin ich heute auf ein Bestreben gestoßen, eine allgemeine Abfragesprache für die ganzen NoSQL Lösungen zu definieren. Initiator ist u.a. der ursprüngliche CouchDB Entwickler Damien Katz. Abwarten, wie sich das entwickelt.

Tags: db, nosql.
Back to The Grid
20th May 2012

Tron Legacy war schon richtig cool als Fortsetzung zum 1. Teil und Disney setzt jetzt nochmal einen drauf, indem sie die Vorgeschichte zu Tron-Legacy in einer Anime-Serie rausbringen.

Bisher gibt es nur Episode 1, die erstmal den Charakter "Beck" vorstellt ("Beck's Beginning"). Bisher äußerst gut gemachte Storyline, bei der man sich frägt, warum wurde das nicht als Story für Tron Legacy genommen. Fazit: sehenswert.

Die Originalstimme von Jeff Bridges fehlt leider, da dieser bereits für The Tron Lebowski unter Vertrag stand :-)

Achja, ob es Zufall ist, dass das Tron Symbol auf Becks Anzug dem Logo der FSF Europe ähnelt? Wer weiß :-) Beide kämpfen für ihre User...

Tags: anime.
MongoDB - UND-Verknüpfung bei Arrays
24th May 2012

Queries in MongoDB machen default eine UND-Operation. Wendet man dies jedoch auf Array Elemente an, kann dies falsche Ergebnisse liefern, wenn man den Query nicht richtig anwendet.

$ mongo
> db.people.insert({_id: "rms", first_name: "richard", last_name: "stallman"})
> db.people.insert({_id: "steve", first_name: "steve", last_name: "ballmer"})
>
> db.people.find()
{ "_id" : "rms", "first_name" : "richard", "last_name" : "stallman" }
{ "_id" : "steve", "first_name" : "steve", "last_name" : "ballmer" }
>
> db.people.find({first_name: "richard", last_name: "ballmer"})
>

Der letzte Query liefert keine Ausgabe, da es keinen Datensatz gibt, der als Vornamen richard und als Nachnamen ballmer hat.

Das Gleiche könnte man erwarten bei folgender Situation:

> db.tags.insert({_id: "foo", tags: ["tag1", "tag2", "tag3"]})
> db.tags.insert({_id: "bar", tags: ["tag4", "tag5", "tag6"]})
>
> db.tags.find()
{ "_id" : "foo", "tags" : [ "tag1", "tag2", "tag3" ] }
{ "_id" : "bar", "tags" : [ "tag4", "tag5", "tag6" ] }
>
> db.tags.find({tags: "tag1", tags: "tag4"}, {_id: true} )
{ "_id" : "bar" }
>
> db.tags.find({tags: "tag4", tags: "tag1"}, {_id: true} )
{ "_id" : "foo" }

Wie man sieht, erhält man ein Resultat, obwohl es keinen Datensatz gibt, in dem das Tag tag1 und tag4 vorkommt.

Es scheint, als überschreibt bei mehrmaliger Angabe des gleichen Keys, der letzte davon alle vorhergehenden:

Ein

db.tags.find({tags: "tag1", tags: "tag4"}, {_id: true} )

endet also als

db.tags.find({tags: "tag4"}, {_id: true} )

bzw.

db.tags.find({tags: "tag4", tags: "tag1"}, {_id: true} )

als

db.tags.find({tags: "tag1"}, {_id: true} )

Eine UND-Verknüpfung bei Array Elementen muss daher anders angeben werden:

> db.tags.find({ $and: [ {tags: "tag1" }, {tags: "tag4"} ] }, {_id: true} )
> 
> db.tags.find({ $and: [ {tags: "tag4" }, {tags: "tag1"} ] }, {_id: true} )
> 
> db.tags.find({ $and: [ {tags: "tag1" }, {tags: "tag3"} ] }, {_id: true} )
{ "_id" : "foo" }

Oder etwas eleganter:

> db.tags.find({ tags: { $all: ["tag1", "tag4"] } } , {_id: true} )
> 
> db.tags.find({ tags: { $all: ["tag1", "tag3"] } } , {_id: true} )
{ "_id" : "foo" }
Tags: db, mongodb, nosql.

RSS Feed

"People said I should accept the world. Bullshit! I don't accept the world." -- Stallman