Numenera

Numenera ist ein Pen-&-Paper-Rollenspiel mit einer Welt im Bereich zwischen Science-Fiction und Fantasy, in einer sehr weit entfernten Zukunft. Durch Zufall habe ich das Spiel entdeckt und warte nun voller Vorfreude auf die Lieferung der deutschen Version in meinen Briefkasten.

Das Spiel hat mich durch ein Let’s Play sehr fasziniert. Es ist augenscheinlich etwas anders als die anderen Pen-&-Paper-Rollenspiel-Systeme und sehr auf die Spieler fokussiert. Die Spieler haben viele Freiheiten und der SL/GM/DM sehr spezielle Möglichkeiten in das Spiel einzugreifen. Außerdem würfeln bei Numenera nur die Spieler. Es gibt auch keine Lebenspunkte im eigentlichen Sinne. Das Spiel legt viel Wert auf das Erkunden der Welt und Wesen.

Das Szenario von Numenera entspricht der Erde, jedoch etwa eine Milliarde Jahre in der Zukunft. Die Spielwelt wird als „The Ninth World“ bezeichnet, da vor dem Zeithorizont des Szenarios insgesamt acht Zivilisationen entstanden und wieder zerfallen sind. Überreste dieser vorherigen Zivilisationen, etwa alte technische Hinterlassenschaften, finden sich spurenweise in der gesamten Spielwelt und werden allgemein als Numenera bezeichnet. Die aktuelle Zivilisation befindet sich technologisch und z. T. auch gesellschaftlich auf einem mittelalterlichen Stand, bedient sich aber auch der vielen antiken, weitaus fortschrittlicheren Hinterlassenschaften der vorherigen Zivilisationen, ohne sie dabei exakt zu verstehen oder zu beherrschen. In Anlehnung an das dritte Clarkesche Gesetz, wonach „jede hinreichend fortschrittliche Technologie von Magie nicht zu unterscheiden ist“, wird auch das Numenera ähnlich wie die Magie in einem Fantasyszenario behandelt.

Quelle: Wikipedia

Die Mischung aus SciFi und Mittelalter erinnert mich stark an The Shannara Chronicles. Numenera ist von einem der größten und bekanntesten Rollenspieler Schöpfer entwickelt.

Besonderheiten

Was ich ohne die Regeln bisher kenne.

  • Es gibt keine Lebenspunkte in dem Sinne aber Pools Abilities/Edge/…
  • Der Fokus gibt die groben Fähigkeiten, Talente usw vor
  • Spielleiter würfelt nicht sondern gibt nur die Schwierigkeit vor
  • Schwierigkeit * 3 = Mindestwurf
  • Talente haben bis zu 2 Stufen: Trained, Skilled
  • Talente verringern die Schwierigkeit
  • Pool Punkte verringern die Schwierigkeit
  • Pool Punkte sind gleichzeitig die Lebenspunkte
  • Effort definiert wie viele Pool Punkte eingesetzt werden dürfen in Summe
  • Edge reduziert die Pool Punkte vor dem Ausgeben um seinen Wert
  • Leben geht erst auf Might dann auf Speed und Itellect
  • XP ist ebenso ein Pool wie die anderen Punkte
  • Cypher sind Einmalartefakte

Sonstiges

Videos

Numenera: Deutsche Version – Startnext-Video

Welt und Setting

Numenéra – Pen and Paper Let’s Play Teil 1

Numenera: Boxing-Video von der Pack-Aktion

Rezensionen

Teilzeithelden

aendymion blog

Update 16.08.2016: Ulisses Spiele verkündet – Ab heute im Versand: Numenera Grundbox

Update 18.08.2016: Uhrwerk-Verlag schreibt – Neuerscheinung: Numenéra-Box und PDF

Pokémon GO verfügbar

Pokémon GO wird heute nach und nach Released. In wenigen Stunden können somit Pokémon in der echten Welt gefangen werden. Derzeit ist es verfügbar in Neuseeland und Japan. Die Pokémon GO App ist free-to-play aber Dinge wie Pokebälle und Süßigkeiten können per In-Game Käufe erworben werden.

Spielprinzip

Das Spielprinzip lässt sich kurz zusammenfassen mit sammeln und kämpfen. In der echten Welt verstecken sich die Pokémon welche mit Pokebällen zu fangen sind. Zusätzlich gibt es Candys (Süßigkeiten) mit denen sich die Pokémon dann aufwerten und entwickeln lassen.

Der Spieler selber hat ebenfalls einen Level. Durch die Zuordnung zu einem Team können auch Kämpfe im Gym gegen die anderen Teams erfolgen. Ähnlich wie bei Ingress können die Arenen verteidigt und eingenommen werden.

An besonderen Orten in der Welt gibt es darüber hinaus spezielle Items und Eier, die ausgebrütet ein neues Pokémon ergeben.

FAQ

F: Warum sehe ich die App nicht im Store?

A: Bisher ist das Spiel nicht in Deutschland erhältlich.

F: Alle meine Freunde in Deutschland spielen aber schon. Wie?

A: Die App ist auf vielen APK Seiten verfügbar und kann dort runtergeladen und installiert werden. Ein Login erfolgt mittels Google Konto oder Pokémon Trainer Club Konto. Ersteres ist aktuell stabiler.

F: Ich bekomme einen Server Fehler. Warum?

A: Aufgrund des Ansturms sind die Server öfter unter Last. Insbesondere zu den Zeiten in denen der Rest der Welt aufsteht (17 Uhr – Morgens).

Auf MMO Server Status ist der Status der Regionen einsehbar.

F: Was passiert wenn ich ein Pokémon zum Professor schicke?

A: Man erhält eine Süßigkeit und das Pokémon ist „freigelassen“.

F: Wie fange ich Pokémon?

A: Den Pokeball werfen wenn der Kreis am Kleinsten ist. Die Farben geben den Schwierigkeitsgrad an zusammen mit dem Level. Schütteln lässt den Ball leuchten und besser treffen.

F: Wie finde ich die Pokémon in meiner Umgebung?

Laut einem Post auf reddit blinken die Pokémon welche in dem Menü unten rechts ausgewählt wurden wenn man sich diesen nähert.

F: Was sind Eier und wie brüte ich diese aus?

Aus Eiern können Pokémon schlüpfen. Dazu müssen diese in einen Inkubator gelegt werden. Je nach Typ muss dann eine bestimmte Wegstrecke zurückgelegt werden. Dabei sind nur Bewegungen zu Fuß erfasst! Autofahren und Fahrrradfahren hilft also nicht. Zusätzlich muss der Bildschirm aktiv sein!

F: Wofür ist der Level des Trainers?

Jede Stufe: Pokébälle

Stufe 5 schaltet Arenakämpfe frei

Stufe 8 Lockmodul, 10 Himmihbeeren

Stufe 10 bessere Pokébälle

Außerdem finden bessere Trainer höher stufige Pokémon.

F: Was bringen PokéStops?

Hier können alle 10 Minuten zufällige Items durch den Trainer gesammelt werden. Oft sind dies neue Pokébälle, Eier und Tränke.

F: Wie erhalte ich Candy?

Jedes gefangene Pokémon gibt 3 Candy. Jedes zum Professor geschickte ein zusätzliches.

Bericht

Hier meine Beobachtungen aus dem Spiel:

  • Pro Levelauftieg gibt es neue Pokébälle.
  • Pokébälle finden sich auch in einem PokéStop.
  • Die Pokémon in der Nähe wechseln regelmäßig.

Arenakampf

Bevor Arenen eingenommen werden können steht noch eine schwierige Wahl an. Der Spieler muss sich entscheiden für ein Team.

  • Team Blau
  • Team Rot
  • Team Gelb

Das Team bestimmt gegen welche anderen Teams später gekämpft werden muss. Freunde sollten daher gemeinsam ein Team wählen.

Linksammlung

PlayStore

Einsteigertipps ( Giga.de)

Deutsche Facebook Fanpage

 

Bildquelle: Pokémon GO logo own by The Pokémon Company.

Pokemon Go Hornliu
Pokemon Go Hornliu
XServer, Xfce4 und RDP Zugriff auf dem Raspberry Pi

Diverse Windowmanager, XServer und Remote Desktop Programme (RDP) stehen für den Raspberry Pi bereit. Eine schnelle Installation der am Meisten genutzten Komponenten gibt es hier.

X.Org-Server installieren

Der X.Org-Server hat sich als das Standard X-Window-System unter Linux etabliert. Die Installation ist schnell erledigt.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install xserver-xorg
$ sudo apt-get install xinit

Xfce4

Ohne einen Windowmanager macht das grafische Arbeiten wenig Spaß. Hier steht auch eine Reihe von Windowmanagern zur Verfügung. Auf dem Raspberry Pi hat sich der Xfce als einer von vielen etabliert. Alternativ gibt es mit fluxbox, kde, gnome, usw. weitere Varianten.

$ sudo apt-get install Xfce4
$ sudo apt-get install xfce4-goodies

RDP

Wer von seinem Windows PC auf einen Linux XServer zugreifen möchte (warum eigentlich?), kann das mittels xrdp realisieren. Der xrdp Dienst stellt den benötigten RDP Server auf dem Linux System zur Verfügung und ermöglicht den Login.

$ sudo apt-get install xrdp

In Windows muss unter dem Punkt „Programme > Zubehör > Remote Desktop Verbindung“ der RDP Client installiert werden. Mittels Start „Remotedesktopverbindung“ oder durch das Ausführen von „mstsc.exe“ ist der Client zu öffnen. Nach der Eingabe der IP bzw. des Namens des Raspberry Pi führt das Modul „sesman-XVNC“ in die gewünschte Umgebung.

Raspberry Pi 3 und VNC

Die aktuelleren Modelle unterstützen VNC direkt. In der Konfiguration kann der Dienst aktiviert werden. Der Zugriff erfolgt beispielsweise über RealVNC Viewer.

$ sudo raspi-config
5 Interfacing Options
P3 VNC         Enable/Disable graphical remote access to your Pi using RealVNC
Mobile App mit der FRITZ!Box analysieren

„Die FRITZ!Box kann zur Diagnose alle Datenpakete im Wireshark-Format mitschneiden.“ beschreibt die Hilfeseite zum Paketmitschnitt. Die Funktionen sind etwas versteckt. Die Mitschnitte sind hervorragend geeignet um zu ermitteln wie gesprächsfreudig Android Apps sind.

Daten aufzeichnen

Der Link http://fritz.box/html/capture.html öffnet den Bereich für den Paketmitschnitt. Alle vorhandenen Interfaces sind hier hinterlegt. Entweder können spezifische Zugangskanäle ermittelt werden oder sämtlicher Traffic welcher ins Internet geleitet wird. Die „Start“ Schaltfläche startet den Download einer gestreamten Datei. Nachdem genug Daten gesammelt sind ist die Aufzeichnung unbedingt über „Stopp“ zu beenden. Das Abbrechen des Downloads führt andernfalls zu einer korrupten Datei.

Analyse mit Wireshark

Wireshark ist ein sehr mächtiges Tool zur Analyse von Netzwerkaufzeichnungen (Networkdumps, tcpdumps, …). Die soeben erstellte Datei lässt sich ebenfalls öffnen. In dem Hauptfenster sind alle durchgeführten Verbindungen dargestellt. Mit Hilfe von Filtern kann der Datenstrom aufbereitet werden. Sämtliche Daten welche nicht verschlüsselt mittels TLS/SSL übertragen wurden (https) können direkt durch den HTTP Protocol Filter zur Ansicht kommen. Bei meiner Analyse nutze ich MyFitnessPal. Dieses lädt Werbung (ads) aus dem Internet nach. Ein Paket ist hier beispielsweise:

Hypertext Transfer Protocol
    User-Agent: Mozilla/5.0 (Linux; Android xxx; ANDROIDGERÄT Build/HANDYVERSION; wv) AppleWebKit/WEBKITVERSION (KHTML, like Gecko) Version/4.0 Chrome/CHROMEVERSION Mobile Safari/SAFARIVERSION\r\n
    [Full request URI [truncated]: http://ads.mopub.com/m/ad?v=6&id=EINDEUTIGEID&nv=4.5.1&dn=ANDROIDGERÄT&bundle=com.myfitnesspal.android&q=QUERYl&ll=LATITUDE2CLONGITUDE&lla=??&llf=???]

In diesem einzigen Aufruf wird der Webseite mopub.com eine ganze Menge an Daten übermittelt. Neben den Versionen und Namen des Mobilfunkgerätes enthält der Aufruf die Versionen der genutzten Browser und Toolkits. Außerdem wird eine eindeutige ID sowie die GPS Standortdaten des Gerätes übermittelt. Das Werbeunternehmen kann somit bei jedem Aufruf mein Profil deutlich besser schärfen und meine Informationen weiter aushorchen. Die nächsten Daten erhält die Webseite openx.com, ebenfalls auf Werbung und Analyse spezialisiert. Auch Google ist mittels doubleclick involviert. Viel mehr Informationen und die Gefahren gibt es unter DEF CON 22 – Anch – The Monkey in the Middle: A pentesters guide to playing in traffic.

SQLite mit der PowerShell nutzen

SQLite hat sich als kleine Bibliothek für Datei-basierte Datenbanken etabliert. Mit Hilfe der PowerShell und einem ebenso kleinen Modul sind Zugriffe auf die Datenbank einfach zu erledigen.

SQLite

_SQLite ist eine Programmbibliothek, die ein relationales Datenbanksystem enthält. SQLite unterstützt einen Großteil der im SQL-92-Standard festgelegten SQL-Sprachbefehle. […] Die SQLite-Bibliothek lässt sich direkt in entsprechende Anwendungen integrieren, sodass keine weitere Server-Software benötigt wird. Dies ist der entscheidende Unterschied zu anderen Datenbanksystemen. Durch das Einbinden der Bibliothek wird die Anwendung um Datenbankfunktionen erweitert, ohne auf externe Softwarepakete angewiesen zu sein. SQLite hat einige Besonderheiten gegenüber anderen Datenbanken: Die Bibliothek ist nur wenige hundert Kilobyte groß. Eine SQLite-Datenbank besteht aus einer einzigen Datei, die alle Tabellen, Indizes, Views, Trigger usw. enthält. Dies vereinfacht den Austausch zwischen verschiedenen Systemen, sogar zwischen Systemen mit unterschiedlichen Byte-Reihenfolgen. Jede Spalte kann Daten beliebiger Typen enthalten, erst zur Laufzeit wird nötigenfalls konvertiert. (Quelle: Wikipedia)_

Module

Für den Zugriff auf SQLite Datenbanken gibt es eine Reihe von Modulen. Einige Kapsel sogar das komplette SQL in PowerShell Funktionsaufrufe. Für diesen Artikel reicht das PSSQLite Modul vom GitHub User RamblingCookieMonster. Das Modul ermöglicht den Zugriff auf die Datenbank mittels ein oder zwei einfachen Funktionsaufrufen.

Um .SQLite, .SQLite3 oder .db Dateien zu öffnen hilft das Programm SQLite Browser.

Das Modul kann aus GitHub runtergeladen werden oder mittels git exportiert werden. Entweder wird der Unterordner „PSSQLite“ in ein eigenes Verzeichnis gelegt oder in einen der Standard Modulverzeichnisse der PowerShell installiert. Liegt die Datei im Standardpfad:

> $Env:PSModulePath
C:\Users\xxxxxx\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\windows\system32\WindowsPowerShell\v1.0\Modules\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\
> Import-Module PSSQLite

Andernfalls muss der gesamte Pfad angegeben werden:

> Import-Module "PFAD_ZUM_ORDNER\PSSQLite"

Die Hilfe des Moduls lässt sich über die bekannten Befehle ausgeben.

Get-Command -Module PSSQLite
Get-Help Invoke-SQLiteQuery -Full

SQL Kommandos ausführen

Ein wichtigstes Merkmal bei der Nutzung der Bibliotek ist das automatische Erstellen der SQLite Datei. Wurde die Datei noch nicht erstellt gibt es eine Warnung und eine leere Datenbank wird erzeugt.

$db = "PFAD_ZUM_ORDNER\db1.db" # oder .SQLite, .SQLite3
$query = "CREATE TABLE user (
  UserId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  Firstname NVARCHAR(250) NOT NULL,
  Lastname NVARCHAR(250) NOT NULL,
  Birthdate DATE
)"

# SQLite erstellt die Datei automatisch
Invoke-SqliteQuery -Query $query -DataSource $db

# Daten einfügen
Invoke-SqliteQuery -Query "INSERT INTO user(Firstname, Lastname, Birthdate) VALUES ('Max', 'Müller', '2000-09-01');  -DataSource $db"

Verbindungen nutzen

Möchte man mehr als nur One-Shoot Befehle ausführen bietet sich das öffnen und schließen von Verbindungen an. Dazu benötigt es nur einen weiteren Befehl. Anstelle der DataSource kann dann bei den Querys die SQLiteConnection zum Einsatz kommen.

$db = "PFAD_ZUM_ORDNER\db1.db"
$conn = New-SQLiteConnection @Verbose -DataSource $db
$conn.ConnectionString
$conn.State

Invoke-SqliteQuery -SQLiteConnection $conn -Query "SELECT * FROM user"

$conn.Close()
$conn.State

SQL-Injection umgehen mittels Parametern

_SQL-Injection bezeichnet das Ausnutzen einer Sicherheitslücke in Zusammenhang mit SQL-Datenbanken, die durch mangelnde Maskierung oder Überprüfung von Metazeichen in Benutzereingaben entsteht. Der Angreifer versucht dabei, über die Anwendung, die den Zugriff auf die Datenbank bereitstellt, eigene Datenbankbefehle einzuschleusen. Sein Ziel ist es, Daten auszuspähen, in seinem Sinne zu verändern, die Kontrolle über den Server zu erhalten oder einfach größtmöglichen Schaden anzurichten (Quelle: Wikipedia)_ Wie sieht das aber in der Praxis aus? Nehmen wir an das ein Programm Daten vom Benutzer einließt.

$vorname = Read-Host "Vorname"
$nachname = Read-Host "Nachname"
$gebdat = Read-Host "Geburtsdatum (YYYY-MM-DD)"

Würden diese Daten nun direkt in das Query eingegeben werden kann der Benutzer jede Zeichenkette zu einem SQL Befehl machen.

# SEHR SCHLECHT!!!!!! SQL-Injection anfällig!!!!!!!!!
$query = "INSERT INTO user(Firstname, Lastname, Birthdate) VALUES ('$vorname', '$nachname', '$gebdat')"

Gibt der Benutzer als Geburtsdatum dann etwas ein wie: 2016-10-10′); DROP TABLE user; — Dann wird aus dem obigen Befehl:

INSERT INTO user(Firstname, Lastname, Birthdate) VALUES ('xxxx', 'xxxx', '2016-10-10'); DROP TABLE user; --')"

Damit erzeugt das Statement einen Datensatz und löscht direkt darauf die Tabelle. Dies ist ein sehr destruktives Beispiel. In einem weniger schädlichen Szenario können damit weitere Datensätze erzeugt werden. Der richtige Weg ist die Nutzung von Parametern. Die SQLite Bibliothek übernimmt dann die Aufgabe der korrekten Maskierung von schädlichen Eingaben.

$query = "INSERT INTO user(Firstname, Lastname, Birthdate) VALUES (@firstname, @lastname, @birthdate)"
Invoke-SqliteQuery -SQLiteConnection $Script:Connection -Query $query -SqlParameters @{
  firstname = $vorname
  lastname = $nachname
  birthdate = $gebdat
}