Security

Samsung Smart TVs über UPnP steuern

Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

Samsung Smart TVs besitzen ein Interface zur Steuerung des Fernseher über UPnP. Zahlreiche Befehle wie Steuerung der Aufnahme, Änderung der Lautstärke und Abrufen der Programmliste lässt sich darüber bewerkstelligen.

Beim erstmaligen Abrufen einer Information muss der Zugriff am Fernseher mit einem Tastendruck auf “Zulassen” bestätigt werden.

Funktionen testen

Am einfachsten lassen sich die verschiedenen Information mit dem Linux-Paket upnp-tools und dem darin enthaltenen UPnP Universal Control Point durchsuchen und testen.

UPnP Console

Sicherheit

Womöglich ist es machbar die IP-Adresse im lokalen Netzwerk zu fälschen und die Geräte anstatt des urprünglichen Clients darüber zu steuern. Eine weitere Sicherheitsstufe außer der Bestätigung mit der Fernbedienung existiert nicht. In manchen Fällen wird nur eine URL zu einer XML-Datei am Fernseher zurückgegeben, die dann für einige Zeit ungesichert im Netzwerk zu erreichen ist. Dieser gesamte Datenverkehr passiert unverschlüsselt.

Sollte sich jemand Zugang zum Dienst verschaffen, so kann dieser viele, zum Teil eher persönliche, Informationen abrufen, wie zum Beispiel eine Liste der Aufnahmen, der aktuelle Fernsehkanal und auch die Lautstärke.

Software

XFS-Dateisysteme reparieren

Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

Auch das XFS-Dateisystem kann kaputt gehen. Doch Linux wäre nicht Linux, wenn es nicht für jeden möglichen Fall mindestens ein Paket gäbe, mit dem sich alles wieder in den Normalzustand versetzen ließe. In diesem Fall hilft xfs_replair aus dem Paket xfsprogs.

Um es zu installieren öffnet man das Terminal und schreibt:

sudo apt-get install xfsprogs

Anschließend lässt sich die Festplatte mittels folgendem Befehl reparieren:

xfs_repair -n /dev/sdb1

Natürlich sollte dazu der Pfad zum Datenträger angepasst werden. Innerhalb weniger Sekunden hatte ich damit wieder eine funktionierende Festplatte in den Händen.

Entwicklung

Web-Apps strukturieren mit Backbone.js

Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

Mit Backbone.js ist es möglich JavaScript-Web-Apps nach dem MVC-Prinzip aufzubauen. Dadurch kann die komplette Verwaltung der Daten von diesem Framework erledigt werden und es kümmert sich zudem auch darum #-URLs (Fragmentbezeichner heißt das Ding) auszuliefern.

Model

Über das Model wird die Struktur der Daten definiert. Außerdem wird die Adresse festgelegt, an die die Ajax-Anfragen gerichtet werden. Im Objekt defaults werden die Standardwerte, oder, wenn diese leer bleiben, die Existenz der Felder definiert.

var UserModel = Backbone.Model.extend({
    urlRoot: 'data/users',
    defaults: {
        username: '',
        name: ''
    }
});

Collection

Mit Sammlungen (Collections) werden mehrere Einheiten eines Models gespeichert. Hierbei wird das Model der Daten angegeben und wiederum die URL, unter der mit Ajax die Liste der Daten abgerufen werden können.

var UsersCollection = Backbone.Collection.extend({
    model: UserModel,
    url: 'data/users'
});

var users = new UsersCollection();

Über die fetch - Funktion können die Daten abgerufen werden.Die Daten können dann in der success - Funktion verarbeitet werden.Über .get("<feld>") lässt sich der Wert eines Feldes abrufen.

users.fetch({
    success: function(items) {
        items.each(function(item) {
            alert(item.get("username"));
        });
    }
});

Router

Über so genannte Router lassen sich die verschiedenen URLs definieren und mit dem gewünschten JavaScript-Code verbinden. Mit Backbone.history.start() stellt man sicher, dass die URLs auch im Verlauf des Browsers auftauchen.

var AppRouter = Backbone.Router.extend({
    routes: {
        ":user": "user", // Ein Benutzer (/muster)
        "": "users" // Alle Benutzer (/)
    },

    user: function() {
        // magic
    },

    users: function() {
        // other magic
    }
});

Backbone.history.start();

Views

Backbone.js ermöglicht es Views mit Templates zu laden. Dazu definiert man einen script-Tag mit dem type-Attribut text/template. Darin kann man Platzhalter für Variablen einfügen, die zwischen <%= und %> stehen.

<script type="text/template" id="template-user">
    <h1><%= username %></h1>
</script>

Den eigentlichen View erzeugt man wie folgt:

var UserView = Backbone.View.extend({

    initialize: function() {
        this.template = _.template($("#template-user").html());
    },

    render: function(eventName) {

        var data = {
            test: "abc"
        }

        $(this.el).html(this.template(data));
        return this;
    }
});

var user = new UserView({
    model: User
});

user.render();

Dabei wird in der initialize-Funktion das Template aus dem Script-Tag geladen und in der Variable this.template gespeichert. In der Funktion render wird das Template befüllt und anschließend zur Seite hinzugefügt. Die Daten werden direkt aus dem Model geholt, das auch bei der Konstruktion des Views angegeben wird.

Es können jedoch auch erst in der Render-Funktion Template-Variablen deklariert werden, die in als Objekt, in diesem Beispiel data, das der this.template()-Funktion übergeben wird.

Fazit

Das Backbone.js Framework stellt eine große Erleichterung dar und macht es möglich sich auf die eigentliche Entwicklung einer App zu konzentrieren, anstatt sich mit wiederkehrenden Aufgaben und Problemen befassen zu müssen. Vor allem der Umgang mit den Daten ist so klar strukturiert und macht keine Programmierung der oft umfangreichen Ajax-Anfragen nötig.

Als Voraussetzung ist die jQuery-Bibliothek vonnöten, die jedoch in vielen Fällen bereits verwendet wird und sich bereits zu einem Quasi-Standard etabliert hat.

Software

Empfehlung: Sublime Text 2

Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

Vor einiger Zeit bin ich auf einen großartigen Code-Editor für Windows, Linux und Mac gestoßen: Sublime Text 2. Der Editor ist einfach zu bedienen, enthält aber einen große Auswahl von nützlichen Funktionen.

Sublime Text 2

Besonders gefällt mir das Design, die große Auswahl an Syntaxhervorhebung und der einfache Umgang mit Tabs anstelle von gedit.

Am besten testet man den Editor selbst, denn die Demo-Version hat augenscheinlich keine Einschränkungen. Nur ein Fenster mit der Aufforderung den Editor zu kaufen wird von Zeit zu Zeit geöffnet.

Entwicklung

Code von früher: Wie konnte ich nur?

Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

Gelegentlich findet man in irgendwelchen Ordnern und auf Datenträgern alten Quellcode, den man in seiner Frühzeit als Entwickler geschrieben hat. Nicht selten, eigentlich immer, schämt man sich im Nachhinein für diese Zeilen voll Ressourcenverschwendung und ineffizienter und unsicherer Programmierung.

Gefunden habe ich jetzt diesen ausgesprochen performanten Codeausschnitt aus einem Projekt aus der Frühzeit meiner PHP-Kenntnisse, als ich gerade etwas MySQL gelernt hatte. Hier wird der Wert eines Eintrages ausgelesen, hochgezählt und wieder abgespeichert.

$res = mysql_query("SELECT count from users WHERE id=" . $id);
$data = mysql_fetch_object($res);
$count = $data->count;
$count++;
mysql_query("UPDATE users SET count=" . $count . " WHERE id=" . $id);

Heute würde ich das natürlich so machen:

mysql_query("UPDATE users SET count = count+1 WHERE id=" . $id);

(SQL-Injection. Ja, ja, aber darum geht es jetzt nicht)