Skip to content

Archiv fuer den Monat November, 2013

20
Nov

UPS-Abholdienst

Ich habe ja die Tage mein Nexus 5 wieder an Google zurückgeschickt. War schon leicht genervt, dass das Gerät per UPS wieder zurückgeschickt werden sollte. Denn die nächste UPS-Annahmestelle befindet sich von uns ca. 30 Minuten entfernt. Öffnungszeiten bis 18 Uhr. Natürlich blöd, denn wenn ich da nach der Arbeit hinfahre schaffe ich das so gut wie nicht.

Hab dabei hin- und herüberlegt wie ich das wohl am besten unter einen Hut bekomme. Bis ich dann doch den entscheidenden Tipp bekommen habe: Abholauftrag erstellen. Darüber war ich erstmal auch etwas verwundert. Funktioniert das nicht nur bei Firmen? Aber nein. Auf die UPS-Seite gegangen. Abholauftrag erstellt – dazu muss man noch nichtmal registriert sein. Super!

Ja, ich habe einen Rücksendeschein. Adresse eingeben, früheste/späteste Abholzeit angegeben, klick, klick fertig. Meiner Oma noch das Päckchen in die Hand gedrückt und gesagt, dass das am nächsten Tag vom Paketdienst abgeholt wird. Hat alles super funktioniert! Da wird mir UPS doch gleich etwas sympatischer 🙂

14
Nov

C++11 – Ein paar neue Features vorgestellt

Heute möchte ich ein paar Features vorstellen die mit dem neuen Standard gekommen sind.

Initialisieren

Sehr praktisch ist z. B. das Initialisieren in der Headerdatei. Somit kann man direkt beim deklarieren einen Initialwert zuweisen:

class MyTest
{
   private:
      std::string strName    = "Mustermann";
      std::string strVorname = "Max";
}

auto

Als nächstes das auto-Keyword. Damit muss man den Typ nicht mehr selbst definieren:

auto i = 5;
auto str = "Test";
auto db = 10.5;

So ergibt die erste Zeile z. B. als Typ einen Integer, die zweite einen String und die dritte Zeile einen Double. Richtig Interessant wird das auto-Keyword aber erst in Kombination von Lambda-Funktionen bzw. Vectoren. Fangen wir mit den Lambda-Funktionen an.

Lambda

Was ist eine Lambda-Funktion? Eine Lambda-Funktion ist eine anonyme Funktion, die Innerhalb einer anderen Funktion deklariert werden kann. So kann man leicht Hilfsfunktionen basteln, die man nur in einer bestimmten Funktion braucht. Um diese aber einfach zu verwenden müsste man sich einen Funktionszeiger deklarieren. Das würde dann in etwa so aussehen:

typedef void(FunctionPointer)(std::string);
FunctionPointer *p;
// Hier wird eine Lambdafunktion erzeugt und dem Funktionszeiger "p" zugewiesen
p = [](std::string strName) -> void { std::cout < < "Hello " << strName.c_str(); };
p("Christian");

Ich habe mir also einen Funktionszeiger deklariert. Diesem weise ich eine Lambda-Funktion zu, welche nichts anderes macht als ein „Hello Name“ auszugeben. Wie muss man die Lambda-Funktion verstehen? Von außen können Variablen übernommen werden:

[=] Die äußeren Werte werden kopiert, heißt: Bei einer Variable int x, die in meiner Klasse steht, kann ich mit einer Kopie des Wertes in der Funktion arbeiten
[&] Auf die äußeren Werte kann per Referenz zugegriffen werden

Außerdem sind Kombinationen möglich:

[&, =db] Auf alle Werte wird per Referenz zugegriffen, außer auf „db“, hier wird mit einer Kopie gearbeitet.

Nach den eckigen Klammern wird angegeben, welche Parameter die Funktion nimmt (hier einen String in dem ein Name übergeben werden soll). Mit „-> void“ legt man fest welchen Rückgabewert die Lambda-Funktion hat. Im Fall von „void“ kann der Rückgabewert auch weggelassen werden. Danach kommt in geschweiften Klammern der Programmcode, der ausgeführt werden soll.

Wie gesagt, wird der Funktionspointer aber mit dem auto-Schlüsselwort nicht mehr benötigt, was es für uns um einiges einfacher macht:

auto p = [](std::string strName) { std::cout < < "Hello " << strName.c_str(); };
p("Christian");

Vector mit auto

Ziemlich cool wird es auch mit den Vectoren. Wer mit diesen arbeitet wird mit Sicherheit solche Konstrukte kennen:

std::vector<std::string> myVec;
myVec.push_back("Test1");
myVec.push_back("Test2");
myVec.push_back("Test3");
myVec.push_back("Test4");
myVec.push_back("Test5");

for(std::vector</std::string><std::string>::const_iterator cit = myVec.begin(); cit != myVec.end(); ++cit)
   std::cout < < (*cit).c_str() << std::endl;

Die for-Schleife kann man jetzt ganz einfach und abkürzen:

   for(std::string str : myVec)
      std::cout < < str.c_str() << std::endl;

Und nochmal vereinfachen kann man es mit dem auto-Schlüsselwort:

   for(auto str :myVec)
      std::cout < < str.c_str() << std::endl;

Dies war zwar nur ein kleiner Ausschnitt der neuen Features, allerdings die, die ich persönlich mitunter am besten Finde.

11
Nov

Ein paar Tage mit dem Nexus 5

Vorletzte Woche wurde das Nexus 5 zum Verkauf freigegeben. Viel TamTam wurde darum nicht gemacht. Seitens Google gab es.nicht wirklich eine Vorstellung. Die Internetgemeinde war schon ziemlich gespannt.
Als das Nexus 5 dann „endlich“ vorgestellt wurde stellte sich zumindest schon mal heraus, dass die Server nicht wie beim Vorgängermodell zeitweise kaum mehr erreichbar waren, sondern dem Ansturm mehr oder weniger Stand hielten.

Wie so viele andere auch habe ich mir das Gerät am Erscheinungstag bestellt und am Dienstag darauf direkt geliefert bekommen. Allerdings werde ich mein Nexus wieder zurückschicken. Warum? Nicht weil es schlecht ist, sondern weil mein HTC One anscheinend keiner haben will. Eigentlich wollte ich mein HTC für 400€ weiterverkaufen – es befindet sich nach wie vor in einem Neuzustand. Da ich auf meine Geräte immer sehr gut Aufpasse und keines meiner Geräte ohne Schutztasche verwendet befinden diese sich immer in einem entsprechendem Zustand.
Nun denn. Auch für 350€ will das One anscheinend keiner haben und für weniger gebe ich es nicht her. Bzw. werde ich mir das Nexus nicht kaufen wenn ich noch Geld draufzahlen muss. Also schicke ich das Gerät wieder zurück. Allerdings möchte ich euch trotzdem einen kleinen Eindruck über dieses Gerät verschaffen, den ich in diesen paar Tagen gewonnen habe.

Die Verarbeitung ist sehr gut. Man findet keine Spaltmaße und auch ansonsten ist alles TipTop. Am Nexus findet man keine Tasten oder Touch-Sensoren. Bis auf die Laut-/Leiserwippe und den Ein-/Ausschalter sind keine Tasten vorhanden. Wie gewohnt werden die Home-/Zurück-/Multitasking-Buttons beim Stock-Android über das Display realisiert. Überhalb des Displays befindet sich die Hörermuschel, sowie die kaum sichtbaren Sensoren und die Frontkamera. Unterhalb des Displays ist die nicht sichtbare Benachrichtigungs-LED. Diese ist nur sichtbar wenn diese wirklich leuchtet. Keine Nachricht, keine sichtbare LED.
Cool: Empfängt man Nachrichten usw. leuchtet die LED weiß. Anscheinend passt diese aber die Farbe auch entsprechend den Apps an (oder die Apps sind so programmiert). Jedenfalls leuchtet die LED z. B. bei Facebook-Benachrichtigungen Blau.

Weiter mit dem Gehäuse. An der Unterkante befindet sich Lautsprecher, Mikrofon und dazwischen der MicroUSB-Anschluss. An der Oberkante befindet sich ein weiteres Mikrofon, sowie der 3,5mm Klinkenanschluss. Übrigens befindet sich im Lieferumfang kein Headset.

Das Gerät ist unglaublich schnell. Viele von euch werden es kennen. Wenn man schonmal ein iPhone und ein Android in der Hand hatte und dort z. B. die Facebook Timeline durchgescrollt hat ist einem sicher aufgefallen, dass es beim iPhone doch etwas flüssiger läuft. Nicht so beim Nexus 5. Dort läuft alles super ohne Ruckler. Auch Spiele usw. stellen für das Gerät kein Problem dar.
Das Display ist super. Bei der Auflösung kann man mit bloßem Auge keine Pixel mehr erkennen und auch die Farben sind super. Die Kamera konnte ich leider nicht wirklich testen.

Beim Ton schimpfen viele, dass dieser zu Leise sei. Meiner Meinung nach war dieser auch super. Ich höre mit den Lautsprechern zwar sowieso nicht so laut, aber für mich war er laut genug. Auch die Klangqualität war i. O.

Einzig und allein der Akkus ist mit 2300 mAh nicht gerade groß bemessen und hat die gleiche Kapazität wie der meines Ones. Wer kein Google Now benötigt sollte es ausschalten. Danach kam ich z. B. ganz gut über den Tag.

6
Nov

Watchever

Man hört ja ständig in der Werbung, etc. con Watchever. Also hab auch ich mir gedacht „Okay, die ersten 30 Tage sind sowieso kostenlos, also versuchst du das ganze mal“.

Als erstes hab ich mir dann die iPhone-App installiert. Und siehe da, auch von dort aus klappt die Registrierung einwandfrei. Und in meinen Augen gibts auch noch einen Vorteil. Man bekommt für 8,99€ 3 Monate (nur bei Erstanmeldung). Coole Sache, so bekommt man 2 Monate geschenkt.
Außerdem kann man die 8,99€ ganz einfach per In-App-Purchase zahlen. Schon funktioniert alles.

Das Serien- u. Filmangebot ist teilw. ziemlich gut. Anders gesagt, auch wenn es nicht jede Serie gibt, so sollte sich doch für jeden etwas finden. Ich habe mir bis jetzt eine komplette Staffel einer Serie angesehen, sowie einen Film und ein paar einzelne Episoden von Serien.
Das Streamen funktioniert auch ziemlich gut. Mit 6000er DSL kann man die Serien (sofern möglich) super in HD schauen.

Mit den Geräten mit denen man Streamen kann sieht es etwas durchwachsen aus. Auf dem iPhone hat ein kurzer Test ganz gut funktioniert. Auf einem Android-Tablet funktionoert es auch einigermaßen, solange man nicht in den Standby-Modus wechselt solange ein Film angesehen wird. Nachdem das Tablet im Standby war und ich danach weiterschauen wollte, hatte sich die Watchever-App komplett verabschiedet und nicht mehr funktioniert. Auch ein Neustart der App brachte dabei keine Besserung. Nur ein Neustart des Tablets schaffte Abhilfe.
Bei den unterstützten Android-Geräten ist das auch so eine Sache. Dabei werden zwar laut der Watchever-Seite einige unterstützt, aber neuere Geräte (wie z. B. HTC One, Nexus 5) tauchen dort gar nicht auf. Auf meinem HTC One ist z. B. auch nur die Watchever-Lite-App verfügbar, die doch sehr sehr eingeschränkt ist.

Schön dafür ist aber (sofern die normale App für euer Geräte verfügbar ist), dass es einen Offline-Modus gibt. D. h. ihr könnt euch zu Hause übers WLAN Serien herunterladen und diese dann Unterwegs einfach ansehen ohne Traffic zu verbrauchen. Dies setzt natürlich ein gewisses Maß an freiem Speicher voraus. Super Idee.

Was bei mir auch nicht so richtig funktionieren will ist die Playstation 3 App. Bei Serien habe ich z. B. immer das Problem, dass beim weiterschalten auf die nächste Folge spätestens nach der zweiten Schluss ist. Danach wird der Stream einfach nicht mehr geladen, was für mich heißt -> App neu starten. Allerdings bringt das auch nicht immer den gewünschten Erfolg und ich muss das ganze System neu starten…
Am PC hingegen funktioniert eigentlich alles ziemlich gut.