{the magic lies between the brackets}

Autor: Janes Abou Chleih (Seite 2 von 6)

Bachelor of Engineering (B.Eng.) im Bereich Wirtschaftsinformatik an der Hochschule Esslingen
Aktuell als Student: Master of Science (M.Sc.) im Bereicht IT-Management an der FOM Stuttgart

Mehr auf XING: https://www.xing.com/profile/Janes_AbouChleih/cv

Erste Schritte: Installation und Erstkonfiguration von Nagios3/Check_MK auf Debian 7.0

Um meine Windows Server 2008 R2 Server, sowie meine Virtualisierungsinfrastruktur (auf VMWare ESXI) zu monitoren, suchte ich nach einer einfachen, aber auch umfangreichen Lösung.
So stieß ich auf das sehr verbreitete Nagios Softwarepaket, welches allerdings erst mit vielen Plugins ausgestattet werden muss, um vernünftig zu funktionieren.
Daraufhin habe ich meine Suche fortgeführt und bin auf die Open Monitoring Distribution (kurz: OMD oder OMDistro) gestoßen, welche die wichtigsten Plugins und Softwarepakete in einem Paket zusammenfasst, die da wären:

  • Check_MK (umfangreiche Erweiterung auf Nagios)
  • Nagios3
  • NagVis (Visualisierungsplugin)
  • Thruk (WebInterface)
  • Icinga (WebInterface)

Ich habe mich jetzt hier aber für Check_MK und Nagios3 (logischerweise) entschieden.
Die Installation auf einem Grundsystem (hier: Debian 7.0) ist sehr einfach.

Eine statische IP Adresse muss in der network configuration gesetzt sein!

Zu aller erst lädt man sich die Distribution als .deb-Paket auf der offiziellen Website herunter und verbindet sich per SSH auf den Server.
Ich nutze im folgenden für den Datenverkehr auf den Server winSCP, welches auf SSH basiert.
Via winSCP kann man die Datei in das Verzeichnis „/usr/local/“ kopieren – natürlich sind auch andere Pfade möglich – und führt den Befehl zur Installation via gdebi aus:
gdebi /usr/local/omd-0.43_0.43lucid1_amd64.deb
Anschließend folgt man den Anweisungen, setzt die Kennwörter und konfiguriert das System.
Nach der Installation muss man noch überprüfen, ob das Modul „HTTP Redirects/Proxy“ aktiviert ist.
a2enmod proxy_http
Danach aber noch schauen, ob die Einstellungen in /etc/apache2/mods-enabled/proxy.conf richtig und sicher sind (Zugriff von außen blockieren).
Nun können wir die OMD starten, indem wir zuerst den Pfad noch festlegen, hier http://<IP>/Monitoring/:
omd create Monitoring
omd start

Nun navigiert man zu folgender Seite http://<IP>/Monitoring und sieht alle o.g. Funktionen.
Man navigiert nun zu Check_MK und geben die Admin Daten (Standarduser: omdadmin, PW: omd) ein.
Hier kann nun über die Schaltfläche Hosts, neue Hosts anlegen:

wato_hostscheckmk_newhost

 

Anschließend gibt man die Daten des Servers ein und wählt den Agent Type SNMP, wenn man SNMP nutzen möchte. Anschließend definiert man noch die Community und klickt dann auf „Safe & Go To Services“.
Hier bekommt man dann eine Fehlermeldung, dass keine Rückmeldung via SNMP stattfand

snmp_error

 

Man muss nun also noch SNMP auf dem Windows Server aktivieren.
Dazu verbindet man sich via RDP auf den Server, öffnet den Server Manager und navigiert zu Features und Feature hinzufügen.
Anschließend wählt man den SNMP-Dienst aus und lässt diesen installieren.
Nach der Installation öffnen wir die services.msc und navigieren zum Dienst „SNMP-Dienst“. Hier klicken öffnet man nun die Eigenschaften und definiert den Agent, sowie die die Community und akzeptierte Hosts:
snmp_1 snmp_2
Community ist hier: Check_MK (Rechte: NUR LESEN), die IP-Adresse des Nagios3-Servers ist 192.168.178.128, Kontakt und Standort kann man frei wählen.
Anschließend quittieren wir alles mit Übernehmen und OK.

In Check_MK können wir nun nochmals den Service-Scan ausführen und bekommen einige Infos über SNMP zugeschickt
checkmk_services

Jetzt speicher man alles und lässt die Änderungen aktiv werden:

activate_changes

Fertig! Der Server wird nun monitored und über das Dashboard lassen sich nun die Hosts überwachen.

Installieren und Konfigurieren von OpenWRT auf dem TP-Link WR710N

Der TP-Link WR710N war für kleine WLAN-Netze gut zu gebrauchen, ansonsten aber sehr langsam und instabil.
Da ich gute Erfahrungen mit meinem WR841N auf OpenWRT gemacht hatte, habe ich mich kurzerhand entschlossen auch den WR710N auf OpenWRT „umzurüsten“.
Dies ging leider nicht so einfach via Plug&Play.
Nun aber von Anfang an:

Achtung: Die Hardwareversion des TP-Link WR710N ist sehr wichtig, hier ist nur von der Version (EU) v1.1 die Rede!
Funktionalität von anderen HW-Versionen kann man hier erfahren.

Über das Repository kann man den aktuellsten Softwarestand herunterladen, in unserem Fall ist das  die openwrt-ar71xx-generic-tl-wr710n-v1-squashfs-factory.bin.

Über die Upgradefunktion der Weboberfläche unseres Routers wird die Binary-Datei, als das Update, nun aufgespielt.
Dies kann nun etwas dauern. Im Nachhinein ist der Router nur über TELNET (vorher als Putty herunterladen) über die IP 192.168.1.1 verfügbar.
Grundsätzlich ist kein root-Kennwort gesetzt und man gelangt direkt ins Terminal. Hier gleich ein sicheres (!) Passwort für den Root vergeben:
passwd

Nun muss man erstmal (sollte man ein eigenes Netz schon in Betrieb haben) die IP-Konfiguration vornehmen.
Dazu im Terminal die Datei /etc/config/network mit dem Editor vi bearbeiten.
vi /etc/config/network

Hier nun das Interface „lan“ wie gewünscht einstellen, also:
(Per ‚a‘ kommt man in das Bearbeitungsmenü, per ESC wieder ins Kommandomenü, zum Löschen einer Zeile ‚d‘ im Kom-Menü drücken)

option ipaddr 'x.x.x.x'
option gateway 'x.x.x.x'
option dns 'x.x.x.x'

Nun speichern wir per ESC + wq + Enter.

Anschließend startet man den Router per „Strom-Weg“ neu. (Der Init-Befehl  läuft bei mir leider immer in eine Boot-Schleife).
Nun kann man den Router per definierter IP-Adresse erreichen.
Will man jetzt die Weboberfläche Luci installieren, muss man opkg update ausführen.
Bei mir waren die Links in der opkg.conf veraltet, wodurch das Update bei allen Repos mit einem 404-Error abbrach.
Also muss man die /etc/opkg.conf wieder mit vi bearbeiten:
vi /etc/opkg.conf
und die Links mit diesen hier ersetzen, bsp:

src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/base

Wichtig ist der aktuelle Link: http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages

Danach nochmals opkg update ausführen.

Jetzt sollten alle Repos aktualisiert sein und man kann mit der Installation von Softwarepaketen beginnen.
So installiert man nun die Weboberfläche mit:
opkg install luci
Alle Dependencies werden hierbei direkt mitinstalliert.
Also noch den http-Server via /etc/init.d/uhttpd start starten und anschließend kann man das Webinterface besuchen, indem man die IP-Adresse per Webbrowser aufruft.
Optional, damit der HTTP-Server immer beim Booten startet:
/etc/init.d/uhttpd enable

Das war’s! Nun hat man einen vollständigen und stabilen Router mit VLAN-Fähigkeit, Firewall, VPN etc.

Grundlagen der Programmierung: Static Deklaration

Wann sollte man eine Klasse statisch deklarieren und was ist dieses Static eigentlich?
Behandeln wird einmal den zweiten Punkt und nehmen die Klasse Console.
Die Klasse Console besitzt die statische Methode Write().

 

Diese können wir also im Code aufrufen, ohne explizit eine Instanz der Klasse zu erstellen:

 Console.Write("Hello World");

Diese Deklaration nennt man static, da wir hier nicht explizit auf die Daten einer bestimmten Objektinstanz zugreifen, sondern die Daten immer gleich zurück gegeben werden. Unabhängig vom Zustand des Objektes, also von den Werten, welche einer Variable in dem Objekt gegeben werden.

 Console.Write("Hello World");

wird also immer „Hello World“ zurück geben!

Um eine Ausgabe in der Konsole zu tätigen, brauchen wir kein spezielles Console-Objekt, also nicht sowas:

 
Console c = new Console(); 
c.Write("Hello World"); // FALSCH

Wann benötige ich dann „normale“ Methoden und Variablen?

Das kommt in einem anderen Post ;)

Aussagenlogik in der Mathematik

In der Mathematik und der Informatik müssen Aussagen auf ihre Wahrheit hin untersucht werden.
Also muss man „schlicht“ herausfinden, ob die Aussage

  • wahr
  • falsch

ist.

Beispiel:
Aussage: 1 = 2 -> Diese Aussage ist falsch
Aussage: 4 = 4 -> Die Aussage ist richtig, also wahr

Schließt man Vermutungen aus, kann man dies mit beliebigen Aussagen fortführen. Es kann also jede Aussage entweder wahr oder falsch sein.

Wie in der Umgangssprache, so kann auch in der Mathematik eine Aussage verneint (negiert) werden. Kennzeichnen tut man dies mit ¬Aussage oder /Aussage sowie einem Negierungsstrich über dem A.

Beispiel: ¬(„Heute ist ein schöner Tag“) -> („Heute ist kein schöner Tag“)
Beispiel2: Aussage: „Die Lampe leuchtet“ => ¬(„Die Lampe leuchtet“) -> („Die Lampe leuchtet nicht“)

Also wird aus einer wahren Aussage eine falsche Aussage und vice versa.

Im folgenden werde ich für wahr eine 1 setzen und für falsch eine 0. Dies ist bei mir reine Gewohnheitssache, da ich aus der IT komme und dort mit boolschen Binärwerten (0/1) gearbeitet wird.

Wahrheitstabelle für Negation (NOT oder Nicht):

NOT

Ist eine Aussage wahr (1), so wird er falsch (0). Ist eine Aussage falsch(0), so wird sie wahr(1).

Sprechweise: ¬A ist die Negation von A.

Zur Wahrheitstabelle gibt es noch kurz etwas zu sagen, bevor wir richtig anfangen:
Wahrheitstabellen haben immer 2^n Möglichkeiten, wobei n für die Anzahl der Parameter steht. Im oberen Beispiel haben wir einen Parameter 2^1 = 2, also zwei Möglichkeiten. Bei zwei Parametern (Beispiel folgt nachher) haben wir 2^2 = 4 Möglichkeiten usw.
Dann müssen wir alle Möglichkeiten abdecken, indem wir jede mögliche Konstellation der Werte in diese Tabelle schreiben (A:01010101, B:00110011, C:00001111).
Auf die Werte in der Klammer gehe ich jetzt nicht weiter ein, aber mit etwas Nachdenken kommt man auf das System.

 Machen wir nun also weiter.

Wie in der Umgangssprache, gibt es auch in der Technik und Mathematik Aussagen die sich bedingen, die getrennt voneinander das gleiche Aussagen etc.

Für solche Bedingungen, gibt es die logischen Operatoren oder richtiger Junktoren, die da wären:

1.Konjunktion (AND / UND):

Diesen logischen Operator kann man sich wie eine elektronische Reihenschaltung mit zwei Schaltern vorstellen.

Reihenschaltung

Für die Nichttechniker: A und B sind Schalter, der Kreis mit dem Kreuz ist eine Glühlampe und die zwei parallelen Striche eine Energiequelle, bspw. eine Batterie

Der Stromkreislauf ist geschlossen, wenn beide Schalter geschlossen sind. Erst wenn dies der Fall ist leuchtet die Lampe.

Symbol: ∧, Beispiel: A∧B=C, gesprochen „Wenn A und B, dann C“.

Bauen wir uns dafür nun wieder eine Wahrheitstabelle mit zwei Eingängen („Schaltern“) A und B und einem Ausgang („Lampe“) A∧B

0 = Schalter nicht gedrückt bzw. Lampe leuchtet nicht, 1 = Schalter gedrückt bzw. Lampe leuchtet

AND

2. Disjunktion (OR / ODER)

Diesen logischen Operator kann man sich wie eine elektronische Parallelschaltung mit zwei Schaltern vorstellen.

Parallelschaltung

Der Stromkreislauf ist geschlossen, wenn einer der beiden Schalter geschlossen ist, also Schalter A oder Schalter B. Erst wenn dies der Fall ist leuchtet die Lampe.

Symbol: ∨, Beispiel: A∨B=C, gesprochen „Wenn A oder B, dann C“.

Bauen wir uns dafür nun wieder die entsprechende Wahrheitstabelle mit zwei Eingängen („Schaltern“) A und B und einem Ausgang („Lampe“) A∨B

OR

3. Implikation (Folgt-aus)

Die Implikation A=>B ist essentiell für mathematische Beweisführungen.

Allerdings wird es hier auch etwas komplizierter, denn zuerst einmal muss man sich etwas klar machen.

Nehmen wir an, man habe eine falsche Aussage, bspw. 2 = 5 (A) und nehme diese *2 -> 2*3 = 5*3 <=> 6 = 15 (B) ist immer noch falsch.
Also können wir sagen, dass eine falsche Aussage auch eine falsche Aussage implizieren kann.

Nehmen wir nun allerdings wieder (A) * 0 -> 2*0 = 5*0 => (keine Äquivalenz!) 0 = 0. Dies ist eine wahre Aussage!
Also können wir sagen, dass eine falsche Aussage auch eine wahre Aussage implizieren kann.

Sagen wir jetzt 2 = 2 (A) ist eine wahre Aussage. Und multiplizieren/addieren/dividieren/subtrahieren diese mit einer beliebigen Zahl, so kommt immer eine wahre Aussage heraus. (Bspw.: 2+2 = 2+2 <=> 4 = 4 -> wahr)
Also können wir sagen, dass eine wahre Aussage auch eine immer eine wahre Aussage impliziert.

Nehmen wir nun wieder diese wahre Aussage 2 = 2. Wir werden feststellen,  dass wir keine falsche Aussage aus dieser implizieren können.

Die Wahrheitstabelle sieht dann wie folgt aus:

Implikation

Symbol: =>, Beispiel: A=>B, gesprochen „A impliziert B“ oder „Aus A folgt B“.

4. Äquivalenz (Genau-wenn)

Symbol: <=>, Beispiel: A<=>B, gesprochen „A genau dann, wenn B“ oder „A ist äquivalent zu B“.

Herleiten können wir diese Wahrheitstabelle einfach, in dem wir eine falsche Aussage mathematisch versuchen mit Äquivalenzumforumgen (Subtraktion, Addition, Multiplikation (außer *0) oder Division) umzuformen, sodass dies eine wahre Aussage ergibt.
Es wird uns nicht gelingen.
Auch anders herum wird es uns nicht gelingen. Denken wir nochmals an die Implikation: Dort habe man nur eine falsche Aussage in eine wahre umformen können, indem ich mit 0 multiplizierte, was nicht äquivalent ist. Denn man kann diese Operation nicht mehr rückgängig machen.

Daraus folgt:

Aequivalenz

Wichtige Begriffe in der Aussagenlogik:

  1. Tautologie = eine Aussage, die immer wahr ist.
  2. Junktoren = logische Operatoren
    1. zweistellige Junktoren:  ⇔, ⇒, ∨, ∧
    2. einstellige Junktoren: ¬

Neben den bisher eingeführten Verknüpfungen gibt es noch weitere, welche vorwiegend in der  Informations- und Digitaltechnik eingesetzt werden.

Sätze der Aussagenlogik:

Sätze von De Morgan:

  • ¬(A∧B) ⇔¬A∨¬B
  • ¬(A∨B) ⇔¬A∧¬B

Kontrapositionssatz:

  • (A⇒B) ⇔ (¬A⇒¬B)

Distributivsatz:

  • A∧(B∨C) ⇔(A∧B)∨(A∧C )
  • A∨(B∧C) ⇔(A∨B)∧(A∨C )

SQL Datenbanken in Windows Phone 8 nutzen

Man kann Daten in Projekten auf vielfältige Arten speichern, eine davon ist die Hinterlegung der Daten in einer Datenbank.
Dazu gibt es in Windows Phone mehrere Optionen. Das bekannteste und weit verbreitetste Datenbank-Datenbanksystem  ist SQLite.
Sie ist open-source und kann kostenfrei in Projekten eingesetzt werden. Zudem hat SQLite den Ruf sehr stabil und schnell zu laufen.

Wieso soll ich denn überhaupt eine Datenbank nutzen?

Das muss man nicht, aber ab einer bestimmten Komplexität der Daten/Informationen, ist eine Datenbank sinniger, als ein „plumpes“ Hinterlegen der Informationen in Dateien, bspw. über XML oder JSON.

Beginnen wir…
Grundsätzlich gibt es eine Vielzahl von Anbietern, welche SQLite Zugriffe bereitstellen, bspw. SQLite-Net, SQLitePCL, uvm…

Ich habe mich für SQLitePCL entschieden, da ich hier den „simplen“ SQL Syntax nutzen kann und nicht – wie bei SQLite-NET – über LINQ gehen muss.

Installieren wir uns nun also SQLitePCL. Hierbei handelt es sich um ein NuGet-Paket, welches wir in VisualStudio mit über den NuGet Paket Manager installieren können.
Hier gibt es zwei Wege:

  • GUI:
    Rechtsklick auf das Projekt -> NuGet-Pakete verwalten.
    Jetzt aktivieren wir auf der linken Seite die Option „Online“ und suchen nach SQLite-PCL. Hier installieren wir die „Portable Class Library for SQLite“.
    Sobald gefunden, installieren wir sie.
  • Kommandozeile (Nuget-Console):
    Wir öffnen die Kommandozeile und geben folgendes ein: Install-Package SQLitePCL

SQLitePCL_Nuget_Install

 

Danach installieren wir noch die benötigte Windows Library „SQLite for Windows Phone“, hierbei handelt es sich NICHT um ein NuGet-Paket sondern eine Windows SDK Extension:

SQLitePCL_SDK_Install.png

 

Nun installieren wir die Library und fügen eine/n Referenz/Verweis unserem Projekt hinzu.

Anschließend können wir endlich anfangen.

Ganz allgemein sieht ein SQLite-Befehl so aus – wie man die Verbindung (conn) aufbaut, erfahrt ihr gleich:

 
                using (var command = conn.Prepare("INSERT INTO MyTable(VALUE1) VALUES (?);"))
                {
                    command.Bind(1, MeinWert); //1-indexed parameter
                    command.Step(); //Absetzen des Befehls an die Datenbank
                }

Grundsätzlich muss man erst einmal eine Datenbank anlegen.

[spoiler title=“Datenverbindung erstellen“ style=“fancy“ anchor=“Datenbank“]

        public DatabaseConn()
        {
            SQLiteConnection conn = new SQLiteConnection("mydatabase.db");
        }

[/spoiler]
Dies legt die Datenbank in einer Datei namens „mydatabase.db“ ab oder öffnet diese.
Jetzt müssen wir – falls noch nicht geschehen – die Datenbank mit Tabellen füllen:
[spoiler title=“Tabellen-Erstellung“ style=“fancy“ anchor=“Tabelle“]

        public void LoadOrCreateDatabase()
        {
            string sql = @"CREATE TABLE IF NOT EXISTS 
                        MyTable
                        (Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                         Header VARCHAR(255),
                         Text VARCHAR(4096),
                         Position INTEGER);";

            using (var statement = conn.Prepare(sql))
            {
                statement.Step();
            }
        }

[/spoiler]

Um Daten aus der Datenbank abzurufen, muss man erstmal differenzieren.

  • Bekommt man einen Datensatz zurück?
  • Bekommt man mehrere Datensätze zurück?

Für den ersten Fall können wir einfach eine Abfrage absetzen und die Spalten des ersten Datensatzes durchlaufen:

[spoiler title=“Select-Einzeldatensatz“ style=“fancy“ anchor=“Einzeldatensatz“]

using (var command = conn.Prepare("SELECT Id, Header, Text, Position FROM MyTable WHERE Id = ?"))
                {
                    command.Bind(1, ID); //Fill the first (one-indexed!) parameter
                    if (command.Step() == SQLiteResult.ROW || command.Step() == SQLiteResult.DONE) // Überprüfe, ob Reihe existiert oder Step ausgeführt
                    {
                        MyTableObject obj= new MyTableObject ()
                        {
                            id = (long)command["Id"],
                            header = (string)command["Header"],
                            text = (string)command["Text"],
                            position = (long)command["Position"]
                        };
                        return obj;
                    }
                }

[/spoiler]

Für den zweiten Fall müssen wir durch alle Zeilen laufen und diese Daten in unsere Objekte laden:

[spoiler title=“Select mehrerer Datensätzen“ style=“fancy“ anchor=“Mehrfachdatensätze“]

                using (var command = conn.Prepare("SELECT Id, Header, Text, Position FROM MyTable "))
                {
                    while (SQLiteResult.ROW == command.Step()) //Solange noch eine Reihe verfügbar ist, mache weiter
                    {
                        MyTableObject obj= new MyTableObject ()
                        {
                            id = (long)command["Id"],
                            header = (string)command["Header"],
                            text = (string)command["Text"],
                            position = (long)command["Position"]
                        };
                        this.list.Add(obj);
                    }
                }

[/spoiler]

Und zu guter Letzt Befehle ohne Rückgabe. Diese sind sehr einfach und lassen sich

[spoiler title=“Befehle ohne Rückgabe“ style=“fancy“ anchor=“Ohne-Rückgabe“]

                using (var command = conn.Prepare("DELETE FROM MyTable WHERE Id = ?;"))
                {
                    command.Bind(1, "MEINWERT");
                    command.Step(); //Absetzen des Befehls
                }

[/spoiler]

Das war’s. Jetzt könnt ihr eure Datenbank füllen und mit ihr arbeiten.

Release des Valve Server Tools für Windows Phone 8

Gestern war es soweit, das Valve Server Tool ging im Windows Phone Store online und kann nun auf Windows Phone 8.1 Geräten installiert werden.

„Das Valve Server Tool ist eine App zur Abfrage von Server-Daten der HLDS (Half-Life-Dedicated Servers) und SRCDS (Source Dedicated Servers), bspw. Counter-Strike:Source Servern für Game-Server Admins.
Welche Map läuft gerade auf dem Server und wie viele Spieler befinden sich auf diesem? Welche Regeln sind für diesen gerade aktiv?

Features:
* Klassische Server Information über das Valve Query Protokoll (A2S_INFO)
* Informationen über die aktuellen Spieler auf dem Server (A2S_PLAYER)
* Informationen über die, auf dem Server gültigen Regeln (A2S_RULES)

App-Sprache: Englisch“

Zur Projektseite geht’s hier entlang.

Update:
– Fixed connection issues to servers

Screenshots:
Serverdata_wvga PlayerStats_wvga Mainmenu_wvga Rules_wvga

Allgemein gültige Lösung für Zahlenketten vom Typ (x+iy) bei i <= 4

Man kam auf mich zu mit einer Knobelaufgabe der siebten Klasse und wollte von mir die Lösung für diese Frage bzw. Aufgabe wissen.
Aufgabe:
Gegeben sei eine Zahlenkette mit der „Startzahl“ x. Diese wird viermal mit der „Additionszahl“ y multipliziert.
Die Summe der Einzelergebnisse ist der Wert S.

Bsp.

math_990_2570d0efd9719cda8b93b62afdb66550

Frage:
Was ist eine Lösung für S = 100 und S = 66?

Lösungsansatz:

Zerbröseln wir einmal das ganze. Wenn man die obere Zahlenkette anschaut, so kann man sehen, dass

3(=x)   5(=x+y)    7(=x+2y)   9(=x+3y)   11(=x+4y) = S für x = 3, y = 2

x + (x+y) + (x+2y) + (x+3y) + (x+4y) = S

Nun kann man diese Funktion auch so schreiben: math_975.5_d9ea1843b3d8b23abc6979ff78d90fdf

 Durch Ausaddieren aller Werte, ergibt sich: 5x + 10y = S

Durch Umstellung ergeben sich folgende Werte: math_983_c4a9c5d5aca00bfc06d62c8d2641ac4a (1) und math_983_8ca5deb2bad2fb104d082274710eae66 (2)

Aus (2) in (1) folgt: y= math_983_6bd8c2a034b85ef49d5fed12d5ecb4e8

Aus (1) in (2) folgt: x= math_983_fd15c3a41dec083cf95a625f18aadaf9

Setzt man (1) und (2) nun wieder in die Funktion ein, so erhält man:

math_962_7b3b7172a00785dcbbbd15db86448ee2

Will man bspw. einen Wert für x wissen für die Summe 100, so nimmt man folgende Formel:
math_983_3bdbf171fee2a606058c9a1f8daaa7c4
x in (1):
math_983_ac92172b5553ddb7f0b67c5d2c789618 oder allg. math_983_6e416c20a08e1127fbb98cefed01f3ec

Die Lösungsmesse für für x und y bei S = 100 ist also:

L = {x = 10; y = 5}

Für 66 erhält man die Lösung:

L = {x = 6,6; y = 3,3}

Dies kann man jetzt noch weiterspinnen und den Parameter i ohne Zahlenwerte belassen, sodass wir eine allgemingültige Lösung für alle Zahlenketten bekommen.

Dies tun wir jetzt auch:

math_976_6943eda49eb15da2814e06b72938246c

Dies können wir nun nach y auflösen:

math_971_2ff9a81f9f4d6ac1b055cad7ad636c88(1)

math_971_a77e678ba05def2c4febe9079f424c84(2)

Nun (1) in (2) einsetzen und vice versa und man hat die Formeln für x und y unabhängig von den gegebenen Parametern y und x.

Fertig, abschließend einfach die Aufgabenwerte einsetzen.

Lumia Cyan Update (Windows Phone 8.1) auf dem Lumia 520 installieren

Vor einigen Tagen wurde der Status des Cyan Updates für das Lumia 520 auf der Nokia Seite auf „Avaliable“ geändert und sollte somit den Nutzern zur Verfügung stehen.
Die bisherigen Updates, auch die der Developer Preview wurden über das Windows Phone eigene Updatemenü installiert.
Allerdings fand das Lumia dieses Cyan Update einfach nicht – zumindest nicht als OTA.
Im Netz ist dieses Problem kaum beschrieben. Da aber die Versionen in Mitteleuropa alle die gleichen sind und das Update in anderen Ländern wohl ohne Probleme ausgerollt wurde, muss es entweder etwas mit dem deutschen Server zu tun haben, oder mit meinem Smartphone.
Wie bekomme ich also das Update auf mein Lumia?
Microsoft hat das sogenannte Nokia Software Recovery Tool still und heimlich veröffentlicht.
Mit diesem Tool kann man das Update dann aufspielen, aber ACHTUNG! Es werden alle Daten auf dem Gerät gelöscht. Deshalb vorher ein Backup über die Windows Phone eigene Backup-Funktion ausführen. Dieses kann man dann nach der Installation einspielen.
1. Nokia Software Recovery Tool (NSRT) herunterladen und installieren.
2. Lumia 520 mit dem Rechner über ein microUSB Kabel verbinden
3. Das NSRT starten, es erkennt dann automatisch das angeschlossene Gerät und sucht das aktuellste Update für dieses.

Nokia Software Recovery Tool Update found
4. Das Gerät muss  über mindestens 1,7GB freien Speicher verfügen (lokal, nicht auf der SD Karte)

Anschließend einfach den Anweisungen folgen. Das Update ist 1,56GB groß, d.h. der Download kann je nach Downloadgeschwindigkeit dauern.

Danach kann man das Handy neu einrichten, solltet ihr das Backup getätigt haben, so wird euch dieses bei der Ersteinrichtung angezeigt und ihr könnt es zurückspielen.

Das war’s, nun habt ihr das Lumia Cyan Update auf eurem Lumia 520.

Lumia_Cyan_520

Wieso in der Mathematik 0,(9) also 0,999999…. exakt 1 ist

Im Zuge meines Studiums bin ich mit der weniger bekannten Tatsache konfrontiert worden, dass math_992.5_3293f03d5fcefabfff40f26cba81fa27, also math_994_5a60d4a104cfbb73fb653d27f231a4b8 exakt gleich 1 ist.
Wieso?

Stellen wir uns einmal diese Zahl vor:
math_994_5a60d4a104cfbb73fb653d27f231a4b8 ist eigentlich die Summe folgender Summanden:
math_992.5_16248d0326f7c946d02d1e0365999079

Mathematisch kann man dies wie folgt darstellen:

math_986.5_ff8698b18595ded77a7f12c7a32c3d22
oder
math_971_e51f70a143516b47f49a91deb38a5f42
Definition:
math_994_aab1f016985f49f4f38239b6ca425f66

math_983_881ba45f62a37cee7193169b3be411f1
Daraus folgt (geometrische Reihe): math_980_c595caa0af46846044fd1eb9fa4e3d41

Falls es jemand nicht direkt versteht: Was sind   1/3 dezimal geschrieben?
Richtig, 0,(3) bzw. 0,3333333333333…
Jetzt multiplizieren wir diesen Wert mit (1/3) * 3 = 3/3 = 1
Aber  0,333333… * 3 = 0,999999… = 0,(9)
Dies ist zwar jetzt nicht der Beweis, aber zeigt der Person anschaulich die Problematik.

Überrascht? Das war ich auch.
Aber dies erklärte meine Frage zur Integralrechnung, wieso der Flächeninhalt – math_975.5_0d4b644471f5b3248872fc21e3e6fc59  – von t∈[1,2) <Grenzwerte: einschl. 1 bis ausschließlich 2> gleich dem Flächeninhalt von t∈[1,2] <Grenzwerte: einschl. 1 bis einschließlich 2> ist.

[Erfahrungsbericht] Metawatch Frame im Test mit dem Google Nexus 5

Da der Trend mit den Wearables ja gerade richtig anfängt, habe ich mir gedacht, ich schaue mich einmal nach einer sogenannten SmartWatch um.
Viele Namen fielen dort auf: G Watch, Moto 360, Pebble. Alle im Preisrahmen von 200€. Zuviel für einen Einstieg in die Materie und für Geräte, die ich vielleicht gar nicht richtig nutzen kann oder will.
Nach ein bisschen Recherche fand ich dann die MetaWatch, welche es in zwei Auführungen gibt: Strata und Frame.
Ich entschied mich für die edlere Frame aus Aluminium mit schwarzem Lederarband für ca. 85€.
In den letzten Tagen testete ich die Uhr.

Unboxing:

Also bestellt und ausgepackt. Die Uhr ist schlicht in der Hülle gehalten. Als Zusatz gibt es einen Ladeclip (darauf komme ich später zurück) und ein microUSB-Kabel.
20140913_113949_Android20140913_114255_Android

Daraufhin also das Kabel in den Ladeclip und an ein USB-Ladegerät hängen (nicht im Lieferumfang) und die Uhr voll laden lassen (brauch ca. 2-3 Stunden).
Da fällt schon der erste Makel auf. Der Clip bzw. der Anschluss an der Uhr sind etwas fummelig und es braucht einen Augenblick, bis die Uhr dann lädt.

Inbetriebnahme:

Währenddessen erstmal die App im PlayStore heruntergeladen.
Es gibt auch eine Community-Version der Software. Allerdings lief diese bei mir alles andere als zufriedenstellend, die Wetter Funktion ist nicht funktional, einige Screens laden sehr langsam, die Notifications erscheinen teilweise nicht und es erscheint ein Störbild.
Die Uhr blieb einige Male sogar hängen und musste hart zurückgesetzt werden. So habe ich die Community Version deinstalliert und die Uhr zurückgesetzt. (Mitte links und Mitte rechts gedrückt halten und dann an das Ladegerät hängen). Sollte man die Uhr nicht zurücksetzen, so ist das Layout komplett gestört und die Uhr funktioniert nicht.

Danach habe ich die Uhr mit der originalen Software genutzt und diese mit dem Handy verbunden.
Anschließend kann man die vier Bildschirme frei mit den zur Verfügung gestellten Widgets bestücken:

  • Uhr
  • Wetter
  • Kalender
  • Facebook
  • Aktien
  • Unread GMail
  • Batteriestatus
  • Gelaufen Schritte
  • Twitter

Screenshot_2014-09-13-11-43-51Screenshot_2014-09-15-18-09-38Screenshot_2014-09-13-11-44-51   Screenshot_2014-09-13-11-44-30Screenshot_2014-09-13-11-44-07Screenshot_2014-09-13-11-44-18

Die Widgets können in verschiedenen Größen (siehe Bild 1 und 2) hinzugefügt werden, allerdings stehen nicht alle in allen Größen zur Verfügung.
Nach der Konfiguration der Widgets kann man diese noch genauer einstellen, bspw. der Ort des WetterWidgets und die Updatehäufigkeit (siehe Bild 3)
In der Einstellungen kann man noch einstellen, über welche Dinge man informiert werden möchte und seinen Facebook bzw. Twitter Account verbinden (wird für das Widget benötigt), etc. (siehe Bilder 4 und 5).
Im MetaFilter-Menü kann man noch einstellen, von welchen Apps man Notifications erhalten möchte.

Nutzung:

Die Uhr macht am Arm eine ganz gute Figur im Vergleich zu anderen SmartWatches auf dem Markt. Dies hat sie vor allem ihrem Alu-Look und den gebürsteten Knöpfen zu verdanken.
Aber der Look ist eben Geschmackssache.
Grundsätzlich habe ich den ersten Bildschirm die Uhr als Vollscreen-Widget gebunden. So erfüllt die Uhr auch ihren wirklichen Zweck. (1)
Da Display ist glänzend und spiegelnd, was wohl an dem pixel reflective mirror LCD liegt.
Anfänglich dachte ich, dass das Display eine der Schwachenstellen des Gerätes ist. Das Display spiegelt nämlich stark, wenn man es im Licht hin- und herschwenkt.
Am Arm ist dies aber kein wirkliches Problem. Im Dunkeln kann man die Uhr lesen, indem man die LED aktiviert (Button Rechts oben).

20140913_113949_Android20140913_113821_Android20140913_113721_Android20140913_114004_Android20140915_184151_AndroidIMG_20140915_190205

Nun zu den smarten Gimmicks des Gerätes. Über den Knopf (Mitte links) lässt sich das Musik-Menü aufrufen. Hier wird das gerade gespielte Lied angezeigt. Man kann die Lautstärke ändern und zum nächsten Lied springen, aber auch das Lied pausieren und weiter spielen lassen. (2)

Über den Knopf unten links lässt sich das Infomenü auswählen, hier lässt sich der Status der Uhr abrufen, also Akkustand, Bluetooth, Verbindung zum Handy und Hardware, sowie Firmwareversion ablesen. (3)

Sollte eine Notification eingehen, so vibriert die Uhr und zeigt diese auf dem Display an (4). Nach diesem Muster werden alle Notifications für Apps angezeigt, welche man im MetaFilter gesetzt hat.
Die Facebook-Option, welche man noch setzen kann (siehe Punkt „Inbetriebnahme“) zeigt dann zusätzlich noch Benachrichtigungen an (5).

Im letzten Bild sieht man das Kalender-Widget im Vollscreen-Modus.

Die Akkulaufzeit beträgt geschätzt vier bis fünf Tage, danach muss die Uhr wieder an die Ladestation.

Fazit

Für diesen Preis erfüllt die Uhr genau das, was sie soll. Allerdings ist die App in den Widgets beschränkt und es gibt keine explizite Funktion, um bspw. WhatsApp-Nachrichten anzeigen zu lassen. Auch ist das Display, obwohl es mich nicht wirklich stört, nicht die beste Wahl für eine Uhr, welche in allen Bedingungen gut ablesbar sein soll.
Auch ist die Uhr nicht sonderlich verbreitet. Die Community-Edition wurde zuletzt 2012 aktualisiert. Auch das Forum von MetaWatch ist nicht gerade stark frequentiert.
Die App für Android wurde zuletzt im Juni 2014 aktualisiert, allerdings nur für „minor bug fixes“. Erhofft man sich also in der Zukunft mehr Funktionen, so rate ich zu einer anderen Uhr.
Ansonsten ist die Uhr für diesen Preis gut. Über das Display und den fummeligen Ladeanschluss kann man hinwegsehen.
Und wer sich mit diesen Funktionen zufrieden gibt, wird sich mit dieser Uhr anfreunden können.