Becks Blog

Blog About Technology & Trends

27. Januar 2012
von andre
1 Kommentar

Command & Conquer im Browser spielen

Command & Conquer: Der Tiberiumkonflikt wurde mit HTML5 und JavaScript für den Browser umgesetzt und kann gratis gespielt werden. Tja wer jetzt dachte da kommt jetzt so ein “liddriches” (hochdeutsch: billiges) Browsergame alá Travian oder Sea Wars und wie sie alle heißen daher, der hat sich wohl getäuscht.

C&C: Tiberiumkonfikt auf Basis von HTML5

Ich finde es gut, dass immer mehr Projekte dieser Art auftauchen (schon länger existiert ja Quake2 auf HTML5, Cut The Rope ging erst vor kurzem durch die Bloggergemeinschaft) und damit wird u.a. gezeigt, was für ein Potential in HTML5 und JS steckt. Interessanterweise hatte kein ähnliches Projekt unter Flash so etwas in der Art hinbekommen bzw. größere Aufmerksamkeit erreicht!

Zum Speilen wird Chrome oder Firefox empfohlen.

Hier gehts lang zum Spiel: http://apps.nahklick.de/cnc/

via[aptgetupdate.de]

23. Januar 2012
von andre
2 Kommentare

[iTunes] Single der Woche


Warning: file_put_contents(/www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/cache/487688202de.appstore) [function.file-put-contents]: failed to open stream: Permission denied in /www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/AppFunctions.php on line 49

Warning: file_put_contents(/www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/cache/487688202de.png) [function.file-put-contents]: failed to open stream: Permission denied in /www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/AppFunctions.php on line 107

Error in function _realLoadImage: The supplied filename '/www/htdocs/w00b2f32/mybecks/blog/wp-content/plugins/appstore/cache/487688202de.png' does not point to a readable file.

So nun ist es endlich in Deutschland soweit, Apple bietet den in den USA sehr beliebten Service, Single der Woche nun auch hierzulande an.

Jede Woche Montags gibt es ein Lied aus iTunes zum kostenlosen Download.
Diese Woche ist es Felix Mayer – Aus blauem Himmel.

Naja Apple, da hätte ich mir jetzt zum Start eher einen Knaller oder Chart-Song gewünscht, als sowas…

 (AppStore Link)
Hersteller:
Freigabe:
Preis: Download

18. Januar 2012
von andre
1 Kommentar

[OSX] Tool Tipp: Pick

Lange war ich unter OSX auf der Suche nach einem passenden Colorpicker Tool. Sehr enttäuschend waren die bisherigen Tools die ich verwendet habe. Aber heute ändert sich alles, ich habe das Tool Pick im Mac AppStore entdeckt.

Pick Lupe zum bestimmen von Farben einzelner Pixel

Gedownloaded, installiert, ausprobiert und bis über beide Ohren gestrahlt. Das Tool lässt sich über den Shortcut Apfel + Shift + L starten. Danach erscheint eine Lupe welche den Ausschnitt des Bildschirms verpixelt darstellt und den Farbcode jedes Pixels innerhalb dieses Ausschnittes anzeigt. Über einen Links-Klick wird der aktuelle Farbcode in die Zwischenablage kopiert.

Artikel wurde nicht gefunden

8. Dezember 2011
von andre
1 Kommentar

Große Weihnachtsverlosung bei Linux Und Ich

Es ist mal wieder soweit, Weihnachten steht vor der Tür und es finden wieder fleißig Verlosungen statt. Christoph von Linux und Ich hat super Preise organisiert. Unter anderem ist der Hauptpreis ein Cirrus7One, welcher schon bei Christioph im Blog getestet wurde. Weitere Preise sind Bücher von O’Reilly, ein Notebook Sleeve von Freitag und vieles mehr.

Schaut einfach mal vorbei, lohnt sich definitiv. Dort findet ihr auch die Teilnahmebedingungen.

Hier lang

5. Dezember 2011
von andre
Keine Kommentare

Bachelorthesis

Wie manche feststellen konnten ist es etwas ruhiger hier auf dem Blog geworden. Dies liegt daran, dass ich momentan gerade dabei bin meine Bachelorthesis zu schreiben (2 Months left). Während der Thesis wird es hier ruhig bleiben, ich werde ab und an ein paar iOS und Latex Snippets raushauen, evtl. kurze Meldungen. Längere Artikel und der FRF werde ich aber bis Ende der Thesis aussetzen.

Danke fürs Verständnis.

23. November 2011
von andre
Keine Kommentare

Kindle Fire Gets Root

Lange hat es ja nicht gedauert bis es soweit war. Das Amazon Kindle Fire, seines Zeichen des neue eBook hyper duper awesome Überdevice, wurde erfolgreich mit der Super OnClick Methode gerooted. Es war lediglich ein wenig .ini & .inf Magie nötig. Dank an XDA User death2all110.

So I was messing around with different one clicks since I got ADB going on my kindle fire and I was able to Successfully use SuperOneClick 2.2 to root my kindle fire!

Bisher kann damit nichts angefangen werden, aber der Root-Zugriff ist immer nur der Anfang. Der Weg für Ports und CustomRoms wurde damit geebnet. Es wird spanned werden sag ich euch. Bin echt gespannt was alles für das Kindle Fire kommt.

[via]

14. November 2011
von andre
Keine Kommentare

[App Review] Eieruhr

Der User Daniel hat eine App names Eieruhr entwickelt und bat mich darum die App zu testen und einen Beitrag dazu zu verfassen. Gerne mach ich das. Was springt für mich dabei raus? Mein erstes App-Review ;)

Installation

Größe: 504KB
Apps2SD: Ja , die App hat dann lediglich noch 124KB
Unterstütze Android Versionen: 1.6+
Berechtigungen:

  • Internet - Ermöglicht einer App, Netzwerk-Sockets einzurichten
  • Wake Lock - Ermöglicht einer App, den Standby-Modus des Geräts zu deaktiviere
  • Vibrate - Ermöglicht der App, den Vibrationsalarm zu steuern

Design

Schichtes Design – eine Herdplatte mit 6 Kochfelder in welche die Timer plaziert werden können. Leider ragen die letzten beiden Felder etwas über den Herd hinaus. Schönes Icon, aggressiver Sound – so mag ich das – damit man es auch hört.

Eieruhr

Funktionsumfang

Man kann bis zu 6 Timer parallel laufen lassen und öfters benötigte zu seinen Favoriten hinzufügen. Ein weiteres nettes Feature ist die Anzeige des Timers als Widget auf dem Homescreen. Aber so richtig hab ich nicht rausgefunden was es damit auf sich hat, es erscheint nichts auf dem Homescreen oder in der Statusleiste. Ansonsten gibt es noch das Menü “Alle Time löschen”, welches bei mir aber nicht funktioniert hat. Die App läuft hervorragend im Hintergrund, sobald der Timer fertig ist, erscheint ein Popup durch welches man wieder in die App kommt.

Eieruhr

Fazit & Ausblick

Mir persönlich hat die App gefallen, habe Sie letzt beim Kochen laufen haben, da ich mehrere Timer parallel benötigte. Die Grafik sollte man noch einmal Anpassen. Was ich mir noch wünschen werde, wäre Icons in der Statusleiste, die evtl. die Restzeit noch anzeigt. Aber sonst braucht sich die App, trotz der 2-3 kleiner Mägnel nicht zu verstecken!

>>>Link zum Markt<<<

Mein Testgerät: LG Optimus One P500 mit Stock Firmware 2.3.3

14. November 2011
von andre
Keine Kommentare

Umfrage: Content Management Trends – CMS 2.0

Ein Studikolleg schreibt gerade an seiner Bachelorthesis und führt in diesem Rahmen eine Umfrage zum Thema Content Management Trends durch. Er bat mich darum seinen Link zu verteilen, sodass sich viele Teilnehmer an seiner Markstudie beteiligen können. Dauert ca. 10min. Wäre toll wenn Ihr euch die Zeit dazu nehmen könnt.

Kurzes Abstract um was sich seine Thesis dreht:

Das Ziel meiner Arbeit ist es,  die Auswirkungen  veränderter Web-Formen und neuer Social Komponenten – siehe Web 2.0 – auf das heutige Web Content Management zu untersuchen.
Ich möchte herausfinden, welche Anforderungen von Unternehmen  hinsichtlich der heutigen Bedeutung von Social Media an Content Management Systeme gestellt werden und ob die sich aktuell am Markt befindlichen Systeme diesen Anforderungen gerecht werden.
Was also kann man heute beispielsweise als Best Practise im Umgang mit Facebook, Twitter und co. bezeichnen? Müssen CMS Wiki, Microblogging und Community-Funktionalitäten mitbringen? Wohin geht die Entwicklung und wo steht heute ein durchschnittliches Unternehmen in der Verwendung der genannten Komponenten.

Hier der Link zur Umfrage: http://www.iwi.hs-karlsruhe.de/cms20/

Die Umfrage ist bis zum 11.12.2011 offen, es werde keine Email Adresse oder persönliche Daten verlangt oder  benötigt, es läuft vollkommen anonym ab.

11. November 2011
von andre
Keine Kommentare

Google Reader Design Update

Mir gefällt das neue Google Reader Design nicht so wirklich. Für meinen persönlichen Geschmack ist mit das ganze einfach zu trist. Nun logge ich mich heute morgen ein und was sehen meine müden Augen da? Farbe? Das kann nicht möglich sein, noch einmal genauer hingeschaut und nun erkenn ich es, jeder Blog hat, soweit vorhanden, sein Favicon neben dem Namen platziert bekommen.

Google Reader Favicon

Find ich richtig gut, gefällt mir. Endlich nicht mehr diese Unmengen an Grautönen und hässlichen Pastelltönen kombiniert. Wie findet Ihr das neue Google Reader Design? Helft ihr euch mit Tools aus oder nehmt Ihr es einfach so hin?

Ich brauch jetzt unbedingt ein Favicon :D

7. November 2011
von andre
3 Kommentare

FRF #02 – Morphia und MongoDB

Mit etwas Verspätung kommt nun der 2. Teil des FRF indem ich mich mit Morphia und MongoDB auseinander gesetzt habe. Die Einarbeitung in beide Themen hat doch mehr Zeit in Anspruch genommen als vermutet. Zudem hatte ich zu Beginn ein Paar Probleme, bis mein Maven und die MongoDB liefen (OSX spezifischer Natur).

Ziel

Das Ergebnis dieses Parts wird es sein, dass CRUD Prinzip mit Hilfe von Morphia in der MongoDB abzubilden. Dazu verwenden wir DAOs und POJOs, welche mit Morphia Annotationen versehen werden.

Das Wichtigste vorweg, MongoDB sollte gestartet sein. Dazu einfach den MongoDB Daemon starten (mongod).

Vorraussetzungen

Maven2 oder Maven3 installiert und konfiguriert. Des Weiteren sollte das m2eclipse Plugin installiert sein. Man sollte wissen wie man Maven einsetzt. Ich werde auf bestimmte Aspekte im Zusammenhang mit diesem Tutorial eingehen, aber es wird keine Einführung in Maven sein.

Ready, Steady, Go

Create & Configuring our Maven Project (Ready)

Zu Beginn sollte ein neues Maven Projekt erstellt werden. Als Archtype sollte maven-archtype-sample gewählt werden. Danach nur noch bei Artifact Id den Namen des Projektes eintragen und Projekt erstellen. Unter Umständen kann es sein, dass es als Java 1.5 Projekt angelegt wird, falls dies so sein sollte, einfach folgenden Absatz in die POM kopieren

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>

und dann Rechtsklick auf das Projekt -> Maven -> Update Project Configuration… Nun sollten etwaige Fehlermeldungen verschwinden. Wenn wir uns schon in der POM aufhalten, dann passen wir gleich die JUnit Version an und zwar nehmen wir die Aktuellste – 4.10. Ansonsten benötigen wir nur noch die Dependencies für Morphia und den MongoDB Java Driver.

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.morphia</groupId>
<artifactId>morphia</artifactId>
<version>0.99</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>com.google.code.morphia</groupId>
<artifactId>morphia-validation</artifactId>
<version>0.99</version>
</dependency>
</dependencies>

Damit Maven die Morphia Dependencies findet muss noch das Morphia Repository hinzugefügt werden.

<repositories>
<repository>
<id>morphia</id>
<url>http://morphia.googlecode.com/svn/mavenrepo/</url>
</repository>
</repositories>

POJOs & DAOs (Steady)

Da das grundlegende Maven-Setup nun steht kann es endlich losgehen. Wir benötigen 2 POJOs, POJO A referenziert POJO B, eine Singelton für den DB Zugriff, entsprechende DAOs.

The Singelton

Das Singelton-Pattern sollte jedem geläufig sein. Es bietet sich gerade dazu an für den Zugriff auf die MongoDB. Hierfür erstellen wir eine neue Klasse mit einem privaten Konstruktor in dem der Verbindungsaufbau zur DB abläuft. Ich nenne die Klasse MongoConnectionManager.java.

public class MongoConnectionManager {

private static final MongoConnectionManager INSTANCE = new MongoConnectionManager();
private final Datastore db;
public static final String DB_NAME = "personDB";
private MongoConnectionManager() {
try {
Mongo m = new Mongo("localhost", 27017);
db = new Morphia().map(Person.class).map(Company.class).createDatastore(m, DB_NAME);
db.ensureIndexes();
} catch (Exception e) {
throw new RuntimeException("Error initializing mongo db", e);
}
}

public static MongoConnectionManager getInstance() {
return INSTANCE;
}

public Datastore getDb() {
return db;
}
}

Was passiert hier? Wir stellen eine Verbindung auf die MongoDB mit Hilfe des MongoDB Java Drivers her. Als Parameter wird der Host und der entsprechende Port mitgeben.

Mongo m = new Mongo("localhost", 27017);

Die folgende Zeilen sind Morphia Spezifisch. Es werden unsere Entities (POJOs) registriert und die Tabelle (hier Datastore) in unserer Datenbank erstellt. Die Methode ensureIndexes(); erstellt synchron die Indexes und die gekapselten Collections für unsere Entities.

db = new Morphia().map(Person.class).map(Company.class).createDatastore(m, DB_NAME);
db.ensureIndexes();

The POJOs

In diesem Beispiel verwende ich 2 POJO Klassen, Person und Company. Jeder Person ist eine Company zugeordnet.

@Entity(value="persons", noClassnameStored=true)
public class Person {
@Id
private ObjectId id;
private String name;
private String surename;
private String Email;

@Reference
private Company company;

//Gettter/Setter
...
  • @Entity wird benötigt um mitzuteilen, dass diese Klasse als Entität verwendet werden soll. Morphia persistiert diese Klasse dann dementsprechend.
  • @Id wird im Zusammenhang mit der Klasse ObjectId verwendet. @Id sagt aus, dass dieses Attribut vom Typ ObjectId, bei fehlerfreien persistieren die entsprechende Id von der MongoDB zugewiesen bekommt.
  • @Reference stellt die Verbindung/Verknüpfung mit der Klasse Company dar.

Die wichtigsten Annotationen sind @Entity und @Id, die vorhanden sein müssen.


@Entity(value="companies", noClassnameStored=true)
public class Company {

@Id
private ObjectId id;
private String name;
private Long noEmployees;

//Getter/Setter
...

Die Klasse Company benötigt keine weiteren Morphia Annotationen außer @Enity und @Id.

The DAOs

Data Access Objekt was ist das? Hier lesen!

Use a Data Access Object (DAO) to abstract and encapsulate all access to the data source. The DAO manages the connection with the data source to obtain and store data.

Ich baue meine DAOs immer wie folgt auf, einmal das Interface EntityDAO und die Implementierung dazu EntityDAOImpl. In das Interface kommen die gewünschten Methoden zum Suchen, Erstellen, Löschen, … von Datensätzen.

public interface PersonDAO {
public Key<Person> save(Person person);
public Person findPerson(ObjectId personId);
public List<Person> findAllPersons();
public List<Person> findPersonsByCompany(Company company);
}

Nun erben wir u.a. von unseren oben erstellten Interface und programmieren unsere Methoden aus.

public class PersonDAOImpl extends BasicDAO<Person, ObjectId> implements PersonDAO {
public PersonDAOImpl(){
super(Person.class, MongoConnectionManager.getInstance().getDb());
}

@Override
public Person findPerson(ObjectId personId) {
return get(personId);
}

@Override
public List<Person> findAllPersons() {
return find().asList();
}

@Override
public List<Person> findPersonsByCompany(Company company) {
return createQuery().field("company").equal(company).asList();
}
}

Das war schon die ganze Zauberei. Nun sind wir soweit um unsere Anwendung zu testen.

Creating & Running JUnit Tests (Go)

Wir verwenden JUnit Tests um unsere Anwendung auf Funktionalität zu testen. Ist besser, sauberer und vor allem professioneller als eine Main Klasse zuschreiben und mit System.out.println(); zu arbeiten.

Dafür legen wir im Ordner src/test/java unterhalb des Packages eine neue JUnit Klasse an. Ich hab meine PersonDAOTest.java genannt.

Ich habe 2 Tests geschrieben, einen der prüft ob ein Datensatz persistiert wurde, der Andere versucht einen Datensatz zu finden.

Wichtig ist, dass die Companies bereits existieren (persistiert sind) wenn sie den Personen zugeordnet werden. Falls dies nicht der Fall ist, bricht der Test mit einer MappingException ab! Siehe Kommentar im Quellcode.


public class PersonDAOTest {

private PersonDAO personDAO;
private BasicDAO<Company, ObjectId> companyDAO;

private final Company ibm = new Company().withName("IBM").withNumberOfEmployees(Long.valueOf(426751));
private final Company samsung = new Company().withName("Samsung").withNumberOfEmployees(Long.valueOf(290000));

@Before
public void before() {
Util.drop();

personDAO = new PersonDAOImpl();
companyDAO = new BasicDAO<Company, ObjectId>(Company.class, MongoConnectionManager.getInstance().getDb());

/**
* "Pre" store the company, so that they will haven an objectId, otherwise it will throw new Mapping Exception
* see here for more information: http://code.google.com/p/morphia/issues/detail?id=315
*/

ArrayList<Company> arrList = new ArrayList<Company>();
arrList.add(ibm);
arrList.add(samsung);

for (Company c : arrList) {
companyDAO.save(c);
}
}

private Person createPerson(){
Person person = new Person();
person.setSurename("Sue");
person.setName("Walker");
person.setEmail("sue.walker@ibm.com");
person.withCompany(ibm);
personDAO.save(person);
return person;
}

@Test
public void testPersistance() {
Person person = createPerson();

assertNotNull("Saved Person Id", person.getId());
person = personDAO.findPerson(person.getId());
assertNotNull("Person retrieved", person);
}

@Test
public void query() {
createPerson();
List<Person> persons = personDAO.findPersonsByCompany(ibm);
assertTrue("Returned one Person" , persons.size() == 1);
persons = personDAO.findPersonsByCompany(samsung);
assertTrue("Nothing should returned" , persons.size() == 0);
}
}

Sobald die JUnit Klasse fertig gestellt wurde kann man mit

mvn test

die Tests ausführen.

Ich denke die Klasse ist recht selbsterklärend, falls doch Erklärungsbedarf  bestehen sollte, schreibts in die Kommentare ich werde es mit in den Artikel einfließen lassen.

Mit einem Administrationstool wie z.B. MongoHub (OSX) kann mit Hilfe einer grafischen Oberfläche nachgeschaut werden ob etwas persistiert wurde.

Comming Next …

Im nächsten Part versuche ich dem ganzen eine Oberfläche zu verpassen. Das Framework wird Vaadin sein. Es soll dann möglich sein neue Einträge hinzuzufügen, zu modifizieren und zu löschen mit Hilfe einer UI. Dort kommt dann der Tomcat noch mit ins Spiel.

Last But Not Least …

… habe ich noch ein paar Interessante Ressourcen zum Thema MongoDB und Morphia gefunden. Diese Links dienten als Quellen und Anhaltspunkte für diesen Artikel:
http://www.mongodb.org/display/DOCS/Quickstart
http://www.mongodb.org/display/DOCS/Admin+UIs
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
http://code.google.com/p/morphia/wiki/QuickStart
http://sleeplessinslc.blogspot.com/2010/10/mongodb-with-morphia-example.html
http://mongohub.todayclose.com/download

Das Projekt kann gezippt heruntergeladen werden, und zusätzlich auf GitHub zu finden.

Projekt Download

Version 0.2