Sonntag, 19. Juli 2009

Twitter - alle Macht dem Volk

Twitter ist mittlerweile ein sehr wichtiger Teil meines Lebens geworden. Täglich poste ich mittlerweile, retweete mir wichtige Tweets und nutze Webseiten, die sich auf Twitter stützen.

Minimalismus

Die Technologie von Twitter ist eigentlich nur eine Ansammlung von 140-Zeichen langen Nachrichten mit Metainformationen wie Absender, Zeitpunkt und Location. Dazu kommen noch die Benutzer für die auch Metainformationen wie Followlist, Name etc. gespeichert werden. Das reicht völlig aus, um ein komplexes, flexibles und schnelles Nachrichtensystem zu bauen.

Da Twitter auf die einfachen Regeln aufbaut, ist die Webseite sehr einfach aufgebaut. Während man bei anderen Web 2.0 Technologien auf überladene Seiten zugreift.

Alle Macht dem User

Ich hab mit der Überschrift vielleicht etwas übertrieben :). Trotzdem ist die Benutzung dank der Einfachheit flexibler als bei anderen Technologien.

Man hat neben dem Webbrowser noch die Möglichkeit über die sogenannte Twitter-API darauf zuzugreifen. Das bedeutet, dass man von aussen Tweets mit bestimmten Suchmustern suchen, Tweets schreiben kann etc. Twitter lässt sich also komplett über diese API kontrollieren. Dadurch sind erstens Twitter-Clients entstanden, mit denen man auf seinen Account zugreifen kann, ohne Twitter im Browser aufrufen zu müssen.

Was jedoch noch viel interessanter ist sind Dienste wie Wahlgetwitter und Tweetstats, die die Twitternachrichten statistisch auswerten. Dies können sie druch die API, obwohl sie eine ganz unabhängige Seite betreiben.

Ausserdem lebt Twitter nur durch den Inhalt und dieser wird ganz allein von den Benutzern erstellt. Dinge wie Retweets (einen Tweet den man gut findet einfach kopieren und den Autor dazuschreiben) und Hashtags haben sich durch die Ideen der Benutzer entwickelt und sind kein extra Feature. Trotzdem verbreiten sich Nachrichten gerade durch diese Ideen so effizient und rasend schnell.

Ich such mir die Leute aus

Leute, denen ich folge, muessen mich nicht extra bestätigen. Dadurch muss ich nicht extra warten, bis ich die Nachrichten von jemanden lesen kann (ausser er hat seine Updates protected, was aber selten ist). Ausserdem müssen sie nicht das lesen, was ich schreibe, wenn es sie nicht interessiert. Jeder bestimmt für sich, wer interessant ist.

Der grosse Vorteil dabei ist auch, dass Leute die es gar nicht raffen, sich nur auf Social Networks rumtreiben. Diese melden sich vielleicht mal an, schreiben vier bis sechs Tweets und beschäftigen sich dann wieder mit ihren Gruppen. Möge das immer so bleiben.

Freitag, 10. Juli 2009

Phänomen Piratenpartei

Ich find das Video so super, dass ichs sogar auf meinem Blog poste:

Donnerstag, 2. Juli 2009

China sperrt Twitter

Habe gerade auf Gelem gelesen, dass China Twitter und Flickr gesperrt hat. Mich wundert sowieso, dass die bis jetzt offen erreichbar waren, denn Twitter ist ja die Technologie für Meinungsfreiheit.

http://www.golem.de/0906/67519.html

Mittwoch, 1. Juli 2009

Sozial Network Accounts gekuendigt

Gerade eben habe ich beschlossen meine Accounts bei StudiVZ, Facebook und Lokalisten zu kuendigen. Seit Wochen waege ich die Pro und Contras ab:

Pro Sozial Networks

  • Ich sehe mit wem ich befreundet bin.
  • Ich kann sehen ueber wen ich jemanden kenn.
  • Ich kann Fotos und Videos von Freunden anschauen.
  • Ich kann selber Fotos und Videos hochladen.
  • Ich kann sehen ob jemand single oder vergeben ist.
  • Ich kann mich ueber Interessen anderer Leute informieren.
  • Alle kommunizieren mit sozial networks.

Contra Sozial Networks

  • Ich weiß, mit wem ich befreundet bin!
  • Micht interessiert nicht ueber wen ich jemanden kenn!
  • Ich will gar keine Fotos und Videos anschauen und wenn doch dann in Picasa oder Youtube!
  • Ich will gar keine Fotos oder Videos hochladen und wenn dann auf Picasa und Youtube denn die sind dazu da!
  • Mich interessiert nicht wer vergeben oder single ist!
  • Wenn ich die Interessen von jemanden erfahren will, dann frag ich!
  • Die Seiten sind ueberladen!
  • Keine Mails!
  • Wenn mich jemand treffen will dann kann man immer noch googeln.
  • Kommunizieren kann man mit E-Mails, IM und Twitter genauso. Wenn das jemand nicht macht dann ist mir das wurst!

Fazit

Somit habe ich beschlossen auf Sozial Networks zu verzichten.

Freitag, 12. Juni 2009

DNS-Sperre hat gegenteiligen Effekt

Die geplante DNS-Sperre ist nicht nur leicht zu umgehen, sondern ermöglicht sogar Straftätern, eine Liste kinderpornographischer Seiten herauszufinden.

Die Pressemitteilung der Piratenpartei hier: http://piratenpartei.de/node/768

Donnerstag, 11. Juni 2009

Der Staat und die digitalen Medien

Gesetzesentwürfe wie Datenvorratspeicherung, Bundestrojaner, Internetzensur und das Verbot von "Killerspielen" zeigen, dass in der deutschen Politik mittlerweile die digitalen Medien durchaus wahrgenommen und dafür auch Gesetze erlassen werden - auch wenn es so aussieht, als würden Politiker Sündenböcke suchen bzw. versuchen, billige Stimmen zu erhaschen. Im folgenden Text will ich erklären, was diese Gesetze für die deutschen Bundesbürger bedeuten würden und wieso ich glaube, dass diese Gesetze wirklich erlassen werden.

Datenvorratspeicherung aka Stasi 2.0

Um das Verhalten potentieller Terroristen festhalten zu können ist es sinnvoll deren Kommunikation in jeder technischen Form mitzuspeichern. Jedoch sieht der Staat anscheinend in jeden Menschen einen Terroristen, denn von jeden Bürger werden diese Daten mitgespeichert. Ein nettes Video zur Verdeutlichung gibt es auf http://www.dubistterrorist.de.


Der Name Stasi 2.0 leitet sich von der alten Stasi der ehemaligen DDR ab. Diese überwachte auch die Telefone ihrer Bürger. Aus Erzählungen habe ich erfahren, dass man jedoch durch ein klicken in der Leitung bemerken konnte, ob man abgehört wird - die Stasi hatte also Schwachstellen. Durch den Zusatz 2.0, der aus der Informatik stammt, meint man eine neue verbesserte Version der Stasi.  Diese funktioniert effizienter und unauffälliger als die Erste, da durch die Digitalisierung Daten automatisch schneller ausgewertet werden und ein Abhören einer digitalen Verbindung das original nicht verändert - es ist also kein Klicken oder Rauschen mehr in der Leitung. Erstaunlich dabei ist, dass der Westdeutsche früher froh war, keine Stasi zu haben, nun aber eine vielfache Verbesserung freiwillig zulässt, weil ein Politiker behauptet, dass es gegen Terrorismus hilft. Noch eine Bemerkung: Den Ostdeutschen wurde die Stasi aufgezwungen.


Um Übrigen kann die Datenvorratspeicherung durch Anonymisierungsdienste und Verschluesselung problemlos von Terroristen umgangen werden, wodurch nur Daten des Durchschnittsbürgers ausgewertet werden können.

Internetzensur

Im Moment ist geplant, das Internet wegen Kinderpornographie zu zensieren, was sich auf Anhieb eigentlich als gute Lösung anhört. Jedoch weiß jeder, der Ahnung von Netzwerken hat, wie man diese Sperre umgehen kann und die anderen können sich im Internet ein Tutorial suchen. Der Zeitaufwand ist für einen Informatiker ca. 1-2 Minuten und für den Rest 5-15 Minuten. Die Tatsache, dass die Politiker das mittlerweile wissen, jedoch trotzdem dieses Gesetz einführen wollen zeigt, dass sie Kinderpornographie nutzen, um Wählerstimmen zu bekommen und das eigentliche Interesse zur Bekämpfung nicht wirklich besteht. Eine gute Lösung zu finden würde länger dauern und weniger Wähler locken.

Das Verbot von "Killerspielen"

Der Satz "ich spiele selbst viele Egoshooter und bin noch nicht amok gelaufen" findet sich ziemlich oft in Gamerforen. Das beruht darauf, dass die letzten jugendlichen Amokläufer das Spiel Counter Strike besessen haben. Counter Strike wird vor allem in den TV-Medien - deren Zielgruppe eher die ältere Generation ist, jedoch trotzdem von allen Geld haben wollen - als das Killerspiel überhaupt dargestellt. Tatsache ist, dass fast jeder Jugendliche Counter Strike installiert hat - und somit auch die Amokläufer. Diese Tatsache wird jedoch in den Medien umgedreht, denn wohin soll das führen, wenn fast alle Jugendliche dieses "Killerspiel" besitzen.

Dass psychische Probleme die eigentliche Ursache der Amokläufe sind ist den Politikern klar geworden. Als Konsequenz hat nun jede Hauptschule einen Sozialpädagogen, der mit der Anzahl der Schüler jedoch überfordert ist. Diese Fachkräfte jedoch zu verstärken, ist vor der Wahl jedoch nicht Spektakulär genug, um Wählerstimmen zu bekommen. Viel effektiver ist ein Sündenbock, auf dem man die Probleme schiebt (funktionierte in Deutschland früher auch schon). An der Tatsache, dass Schüler trotzdem frustriert sind und keine Fachkräfte ihnen helfen können, ändert das jedoch nichts, was wirkt, als ob Politiker die Amokläufe für Wählerstimmen nutzen, jedoch nur geringes Interesse an der Beseitigung des Problems haben.

Dienstag, 2. Juni 2009

Internet Prognose 2015

Das Internet hat sich die letzten 5 Jahre intensiv in den deutschen Haushalten ausgebreitet und wird mittlerweile schon von vielen Handybenutzern verwendet. Dabei ist das sog. Web2.0 entstanden, was die grauen, haesslichen alten Homepages abgeloest hat und statt statischen Webseiten hat man heute Webanwendungen. Jetzt versuche ich, eine Prognose fuer 2015 zu erstellen, wie dann das Web aussieht. Ab jetzt tu ich so, als waehr ich im Jahre 2015

Flash ist ausgestorben

HTML 5 hat durch seine Erweiterungen des alten HTML 4.01 Standards das proprietaere Flash verdraengt. Die audio und video Tags gaben Youtube die Moeglichkeit, komplett auf HTML zu setzen. Browserspiele werden in canvas Elementen gezeichnet und direkt vom Browser ueber Javascript, berechnet. Javascript wird dann schon lange
JIT kompilieren
und somit eine der schnellsten Sprachen sein.

Neue Kommunikation

E-Mails und IM sind am aussterben, denn Google hat vor fuenf Jahren Google Waves auf den Markt gebracht. Eine Wave kann dabei von einer bestimmten Anzahl von Menschen im Browser bearbeitet werden, wobei jeder sofort die eigenen Aenderungen und die Aenderungen der anderen sieht, was Instant Messaging ermoeglicht. Zusaetzliche Gadgets ermoeglichen eine Just-in-Time Uebersetzung in die eigene Sprache, Umfragen in Echtzeit, Schach Partien, Google Maps Einbindung etc. Dinge wie E-Mail und IM sind mittlerweile zu statisch und kompliziert, jedoch noch toleriert (wie das Fax im Jahre 2009). Zusaetzlich waren diese meisst unverschluesselt, was eine 20-30 jaehrige Altlast des Internets war.

Standardtoolkit wird HTML - Das Betriebsystem der Browser

Immer weniger Programme muessen auf dem Rechner installiert werden - sie werden im Browser aufgerufen. Es ist nicht mehr noetig, Daten umstaendlich zu verschicken, da sie sich ohnehin schon im Web befinden - man muss nur noch URLs verschicken. Wechselmedien wie USB-Sticks, CDs oder DVDs gelten als veraltet, denn wer traegt Daten, die nur virtuell existieren physikalisch mit sich rum? Filme, Videos, Musik, Fotos, Office Dateien - alles befindet sich im Internet. Man hat Zugriff von jedem PC der Welt und von allen Handys, die noch im Umlauf sind.

Musik und Filme

Musik und Video ist mittlerweile frei. Die Plattenfirmen haben eingesehen, dass durch den Verkauf von CDs mittlerweile kein Geld mehr zu holen ist und es aufgegeben, gegen Raubkopierer vorzugehen. Kuenstler stellen ihre Kunst freiwillig ins Netz und leben von Spenden oder oeffentlichen Auftritten. Nun bestimmen die Benutzer im Netz, welcher Kuenstler mehr Erfolg und welcher weniger Erfolg hat und weniger das Geld, das dem Kuenster zur verfuegung steht. Ansonsten gibt es Webseiten, die Musik und Videos zum Streamen anbieten. Diese Finanzieren sich entweder durch kleine Beitraege im Monat und/oder Werbung. Auf diesen Seiten koennen Kuenstler ihre Werke veroeffentlichen. Das Geld der Einnahmen abzueglich der allgemeinen Kosten der Webseiten wird auf die Kuenster mit einer Gewichtung aufgeteilt. Die Gewichtung ist dabei die Anzahl der Zugriffe auf deren Werke dividiert durch alle Zugriffe.

Canvas (HTML5) Cheat Sheet

Auf blog.nihilogic.dk hab ich ein nettes Cheat Sheet zum Thema Canvas gefunden. Canvas ist ein Rechteck, auf das man via Javascript zeichnen kann. Dieses platziert man im HTML-Code. Somit kann man interaktive Bilder oder andere Effekte in die Webseite integrieren, ohne auf Flash setzen zu muessen. Erfunden wurde es von Apple, Firefox hat diesen Tag schon seit laengeren uebernommen und jetzt kommt is in die HTML5 Spezifikation.

Samstag, 25. April 2009

Demo gegen Vorratsdatenspeicherung

Wird mal wieder Zeit für Veränderung an meinem Blog und dass dieser mal politisch wird. Dieser Blog demonstriert ab jetzt offiziell gegen Vorratsdatenspeicherung.

Freitag, 10. April 2009

Erstes Arch Paket ins AUR gestellt

Endlich habe ich mein erstes Paket ins AUR von Arch Linux gestellt. Arch Linux ist eine Linux Distribution, die sehr minimalistisch und einfach gehalten ist. Es wurde komplett neu via LFS aufgebaut, die Pakete werden nicht gepatchet sondern wie im Original ausgeliefert. Zum einen gibt es wie unter Ubuntu und Debian vorkompilierte, binäre Pakete, die mit dem Programm pacman installiert werden, zum anderen kann man auch mit yaourt Pakete aus dem AUR installieren, wobei wie unter Gentoo der Quellcode im Internet heruntergeladen, kompiliert und installiert wird. Im AUR wird jedem Benutzer die Möglichkeit geboten eigene Pakete reinzustellen, die dann von jedem Arch Linux aus installiert werden können. Schließlich beschloss ich, dass ich mein Testprojekt Lalala ins AUR stelle. Alles, was man dafür machen muss ist eine kleine Datei zu erstellen, in der ein paar Variablen gesetzt werden und eine Build-Funktion erstellt wird:
# Contributor: Simon Goller 

pkgname=lalala
pkgver=0.00.90
pkgrel=2
pkgdesc="An adventure in curses."
arch=('i686' 'x86_64')
url="http://neosam.github.com/bttext"
license=('GPL')
groups=('games')
depends=('python>=2.5')
makedepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
source=(http://cloud.github.com/downloads/neosam/bttext/$pkgname-$pkgver.tgz)
noextract=()
md5sums=('1fedf72a2f0b80cf66f63ee3386820bf')

build() {
 cd $srcdir/$pkgname-$pkgver
 mkdir -p $pkgdir/usr/share/lalala/ || return 1
 mkdir -p $pkgdir/usr/bin/ || return 1
 cp -r * $pkgdir/usr/share/lalala/ || return 1
 cp lalala.sh $pkgdir/usr/bin/ || return 1
 echo $pkgdir
 ls $pkgdir
}
Dabei muss man bei der build methode darauf achten, dass man nicht ins echte Root-Verzeichnis installiert, sondern in $pkgdir, da ein tar.gz erstellt wird, das das deinstallieren ermöglicht. Jetzt musste ich mich nur noch im AUR registrieren, diese Datei hochladen und schon konnte ich via yaourt -S lalala mein Paket installieren. Arch Rockz :-)

Sonntag, 1. Februar 2009

Quellcode Syntaxhighlighting im Blogger

Mit Syntax Highlighting sieht Quellcode einfach schöner aus hab ich mir gedacht also hab ich gesucht, wie man das im Blogger möglichst einfach realisieren kann. Der japanishe Spiele Programmierer auf seinem Blog hatte die Antwort (hier der Post von ihm: sunday-lab: Source code high-light in Blogger) Man verlinkt einfach auf eine Javascriptengine und eine CSS Datei von Google, die das Highlighting beim laden der Webseite übernehmen. Der Code muss lediglich in einem pre-Tag der Klasse prettyprint stehen - sogar die Programmiersprache wird automatisch erkannt. Ein Javaprogramm:
class Test
{
        public static void main(String[] args)
        {
                System.out.println("Hallo Welt");
        }
}

Samstag, 31. Januar 2009

Schöner Coden mit C, C++, Java, etc

Guter Stil im Quellcode ist sehr wichig, damit Software möglichst bugfrei und wartbar ist. Es gibt einige Regeln, mit denen man den doppelten und/oder unleserlichen Code vermeiden kann und zugleich automatisch den Quellcode kommentiert.

Exceptions in c - wie bauen?

Weil mir in c das Fehlerhandling ein bischen auf die Nerven ging, hab ich beschlossen Exceptions einzubauen. Die Basis für die Exceptions bilden longjmp und setjmp. Was die Exceptions können
  • Sehr schnelles Behandeln einer Exception
  • Verschiedene Typen von Exceptions
Was die Exceptions nicht können
  • (Noch) Keine Unterstützung für Threads :(
  • Funktionen die keine Exceptions werfen können auch nicht aufgefangen werden
  • Der Compiler prüft nicht, ob Exceptions abgefangen werden
Vorkenntnisse
  • Grundkenntnisse in c und den Präprozessor sind verdammt wichtig
Springen in Programmen?? Das Springen in Programmen ist allgemein nicht gern gesehen. Die meißten Sprünge können mit Funktionsaufrufen, Schleifen und Abfragen ersetzt werden, welche vom menschlichen Gehirn gut interprotiert werden. Dagegen setzt es bei Spaghetti Code schnell aus, was Sicherheitslücken und Unstabilität zur Folge hat. Zusätzlich wird der Stack bei einem normalen Stack nicht angepasst. Warum verwende ich trotzdem Sprünge? Hier sind Jumps meiner Meinung nach absolut in Ordnung, weil der Benutzer selber mit den Sprüngen überhaupt nicht in Kontakt kommt. Es wird nur bei TRY mit setjmp eine Marke gestzt und bei THROW mit longjmp gesprungen. Das ist auch das Geheimnis. Was ist aber mit dem Stack? Die Makros setjmp und longjmp kümmern sich um das Problem. setjmp setzt nicht nur eine Marke, sondern speichert auch den aktuellen Stack und speichert einen buffer. Wird longjmp mit dem buffer Wert aufgerufen, springt der Programm Counter auf die Markierung und stellt den Stack wieder her. Erste einfache Implementierung Also im Endeffekt werden nur ein paar Macros erstellt:
  • TRY CATCH wird versteckt zu einer switch case Abfrage.
  • THROW springt
Folgender Code soll funktionieren:
#include <stdio.h>
#include "exception.h"

void function(int number)
{
    if (number < 0)
            THROW;
}

int main(int argc, char **argv)
{
    int number;

    TRY;
    scanf("%i", &number);
    function(number);

    CATCH;
    printf("Exception\n");
    return 1;
    TRYEND;

    return 0;
}
Dieses Programm soll bei der Eingabe einer negativen Zahl Exception ausgeben und 1 zurückgeben. Bei einer positiven Zahl erfolgreich beenden. Dazu muss die exception.h implementiert werden:
#ifndef EXCEPTION_H
#define EXCEPTION_H

#include <setjmp.h>
jmp_buf marker;

#define TRY switch(setjmp(marker)) {                    \
case 0:

#define CATCH break;                                    \
default:

#define TRYEND }

#define THROW longjmp(marker, 1);

#endif /* EXCEPTION_H */
Was passiert hier genau? Um das zu erklären muss erst mal gezeigt werden, wie die c Datei mit aufgelösten Exception Macros auschaut:
#include <stdio.h>

void function(int number)
{
    if (number < 0)
            longjmp(marker, 1);
}

int main(int argc, char **argv)
{
    int number;

    switch(setjmp(marker)) {
    case 0:
            scanf("%i", &number));
            function(number);
            break;
    default:
            printf("Exception\n");
            return 1;
    }

    return 0;
}
Das Makro setjmp setzt nicht nur ne Marke sondern gibt auch einen Wert zurück:
  • 0 wenn nicht gesprungen wurde sondern die Stelle durch den normalen Programmfluss aufgerufen wurde
  • ansonsten einen von setjmp mitgelieferten Wert. Im Beispiel oben ist es die 1.
Deshalb geht das Programm zunächst in den case 0, was den Code zwischen TRY und CATCH repräsentiert. Wenn keine Excepton geworfen wird, springt das Programm wie gewohnt aus dem Switch Block, wenn doch springt das Programm zurück zur Auswertung im switch, wo der Wert 1 zurückgegeben wird. Es wird dann der default case ausgeführt, was den Teil zwischen CATCH und TRYEND repräsentiert. Nun sind schon einfache Exceptions möglich, jedoch noch ohne Fallunterscheidung. Schlimmer ist jedoch, dass sie nicht verschachtelt werden können. Das ist jedoch alles ganz billig. Fallunterscheidungen Fallunterscheidungen werden einfach mit anderen cases realisiert. Dazu bekommt erst einmal THROW einen Parameter, der für den Exceptiontyp steht:
#define THROW(exc) longjump(buffer, exc);
Um die Exception abzufangen muss noch das Makro CATCHIF implementiert werden:
#define CATCH_IF(exc) break;                                          \
case exc:
Jetzt sollte auch folgender Code funktionieren:
#include <stdio.h>
#include "exception.h"

#define EXC_TOOSMALL 1
#define EXC_OMGOMGOMG 2

void function(int number)
{
    if (number < -100)
            THROW(EXC_OMGOMGOMG);
    else if (number < 0)
            THROW(EXC_TOOSMALL);
}

int main(int argc, char **argv)
{
    int number;

    TRY;
    scanf("%i", &number);
    function(number);

    CATCH_IF(EXC_TOOSMALL);
    printf("Too small\n");
    return 1;

    CATCH;
    printf("Exception not handled\n");
    return 2;
    TRYEND;
}

EXC_TOOSMALL wird behandelt, EXC_OMGOMGOMG jedoch nicht.
Verschachtelung kommt ein anderes Mal. Hierzu wird dann ein Stack von marker verwendet. Fröhliches Coden!