Projects

Falls man noch nach anderen Ideen für mögliche Projekte sucht wollen wir im folgenden einige auflisten, die man ohne große Problem mit dem Gelernten realisieren kann.

Temperature

Ein Programm das Fahrenheit in Celsius umrechnet.  Der Nutzer gibt die Temperatur in Fahrenheit ein und mittels der Formel

    int c = (int) ( (5.0 / 9.0) * (f - 32) );

können wir die Temperatur in Celsius umrechnen.

LeapYear

Mit der Formel aus dem ersten Semester können wir feststellen ob ein Jahr ein Schaltjahr ist.  Der Nutzer gibt ein Jahr ein, vielleicht sein Geburtsjahr, und wir geben dann aus, ab es sich bei dem Jahr um ein Schaltjahr handelt.

YearlyRate

Es geht darum zu berechnen wie hoch die jährliche Rate ist, wenn man einen Kredit nach einer gewissen Laufzeit zu einem gewissen Zinssatz abbezahlt haben will.   Karel will sich ein Auto kaufen, deswegen hat er angefangen zu sparen.  Er will sich einen Mini kaufen (Mercedes ist zu teuer), und er hat einen gebrauchten für 5000 Euro gesehen.  Er hat einen günstigen Kredit bei einer Bank von 5% pro Jahr gesehen.  Wie hoch ist seine jährliche Rate, wenn er den Kredit in 5 Jahren abbezahlt haben will?  Karel braucht also ein Programm bei dem er die Kreditsumme (k) eingeben kann, den Zinssatz (z) und die Laufzeit in Jahren (n).  Das Programm soll ihm dann sagen wie hoch seine jährliche Rate (y) ist:

    double q = 1.0 + z;
    double qn = Math.pow(q, n);    // q^n
    double y = k * qn * (q-1) / (qn-1);

Die Formel dafür kann man in der Wikipedia unter Sparkassenformel nachsehen.

Roulette

In einer vereinfachten Version von Roulette spielt ein Spieler gegen den Computer.  Der Spieler kann auf odd oder even (oder high oder low) setzen.  Der Computer wählt dann eine Zufallszahl zwischen 0 und 36.  In einem zweiten Schritt, könnte man noch mit Credits spielen.  Der Spieler erhält am Anfang 100 Credits, und falls er gewinnt erhält er 10 zusätzliche Credits, falls er verliert werden 10 Credits abgezogen.  Schliesslich könnte man auch noch ein MultiPlayer Spiel daraus machen.

BlackJack

Auch Black Jack können wir in einer etwas vereinfachten Version implementieren.  Anstelle von Karten verwenden wir einfach Zahlen, und zwar Zahlen zwischen 1 und 11.  Der Computer spielt den Croupier und beginnt indem er eine Zufallszahl zwischen 17 und 25 erzeugt. Dann ist der Spieler an der Reihe.  Dieser fängt mit einer Karte an, also eine Zufallszahl zwischen 1 und 11.  Er kann dann entscheiden ob er noch eine Karte möchte.  Falls ja, wird wieder eine Zufallszahl zwischen 1 und 11 erzeugt und zur momentanen "Hand" hinzuaddiert.  Wenn der Spieler keine neue Karte mehr haben möchte, wird die "Hand" des Spielers mit der des Computers verglichen.  Gewonnen hat derjenige der 21 Punkte oder weniger hat und mehr als der andere.  Ansonsten ist es ein Unentschieden.

BattleShip

Im ersten Semester haben wir den Spieleklassiker Schiffeversenken umgesetzt.  Ähnlich wie TicTacToe oder Mines können wir das auch als Webanwendung realisieren.

TicTacToe - Two Players

In Kapitel vier haben wir die Single-Player Variante implementiert.  Wie wäre es mit eine Zwei-Spieler Variante?  Wahrscheinlich macht es vorher Sinn sich den TwoPlayer Chat noch einmal anzusehen.  Ähnlich könnte man auch andere Spiele wie Dame, Schach und Go implementieren.

ESP Game

Das ESP Spiel wurde von Luis van Ahn, Professor an der Carnegie Mellon University, erfunden.  Es handelt sich um eine TwoPlayer Game um Bilder zu klassifizieren.  Um zu sehen worum es geht, sollte man seine Präsentation im Rahmen der Google TechTalks ansehen: https://www.youtube.com/watch?v=tx082gDwGcM

Translate

Google Translate hat auch einfach angefangen.  In einer einfachen Version könnte man basierend auf dem Dictionary Beispiel, einen Internet-Übersetzungsservice anbieten.  Einmal mit einem Webinterface, dass eingegebenen Text einfach Wort für Wort übersetzt.  Daraus könnte man aber auch einen Web Service machen.  Später könnte man auch eine Version schreiben, in der Nutzer neue Wörter hinzufügen könnten.

SpellChecker

Ein Service der die Rechtschreibung überprüft.  Man würde das auf dem Dictionary Beispiel aufbauen, eine einfache Version würde einfach auf einem HashSet basieren.  Wahrscheinlich wäre eine englische Version einfacher.  Evtl. sind die folgenden beiden Resourcen hilfreich: Aspell, http://freedict.org/de/, http://sourceforge.net/projects/freedict/files/ und stackoverflow.com/questions/2294915/what-algorithm-gives-suggestions-in-a-spell-checker.

Eliza

Im ersten Semester haben wir den Psychiater Eliza kennengelernt.  Natürlich könnte man daraus auch eine Webanwendung machen.

ToDo List

Eine einfach ToDo Liste in der jeder Nutzer seine eigenen ToDos listen kann.  Evtl. wäre auch eine Priorisierung wünschenswert. 

Calendar

Die Anwendung soll es einem Nutzer erlauben seinen Kalendar zu managen.  Dazu gehört neue Einträge anlegen, löschen und auch die Ausgabe des Kalendars, evtl. mit Druckfunktion.  Eine spätere Version könnte auch Email Reminders beinhalten.  Auf jeden Fall sollte auch ein Web Service existieren, um eine spätere Anbindung an ein mobiles Endgerät zu ermöglichen.

PhoneBook

Es geht darum seine Adressen und Telefonnummern zu managen.  Auch hier sollte wieder ein Web Service existieren, um eine spätere Anbindung an ein mobiles Endgerät zu ermöglichen.  Es sollte auch möglich sein beliebige Key-Value Pairs zu speichern.  Und eine Suche wäre auch praktisch.

TimeSheet

Wenn man als Freelancer arbeitet oder auch in manchen Firmen, muss man aufschreiben wieviel Zeit man für welches Projekt verwendet hat.  Dies soll eine kleine Webanwendung werden, in der Nutzer ganz einfach ihre Zeiten managen können.  Ein Web Service Interface wäre bestimmt auch nicht schlecht.

StoreSecrets

Heutzutage hat jeder zig Passwörter und PINs die man sich merken muss.  Und kann man den Anwendungen die man da so im Internet oder auf dem Handy hat wirklich trauen?  Deswegn nach dem Motto "Max Selber" wollen wir eine Webanwendung zum speichern von Passwörtern und anderen Geheimnissen schreiben.

Votes

Die Idee hinter Votes ist eine Art Umfrage, die es erlaubt mehrere Nutzer bzgl. eines bestimmte Themas abzustimmen.  Sollte per Einladung über einen Weblink oder QR Code funktionieren.

Who Has My Stuff

Wenn man wie ich vielen Leuten viele Sachen ausleiht verliert man leicht den Überblick wem man was geliehen hat.  Hier könnte eine einfache Webapp abhilfe schaffen.

Library

Wir haben im ersten Semester die Anforderungen für eine einfache Bibliothek erarbeitet.  Jetzt könnten wir selbige als Webanwendung umsetzen.

University

Auch aus dem ersten Semester stammt die Idee eines universitären Studenten-Management Systems.  Es geht einfach darum den Fortschritt von Studierenden während des Studiums zu managen.

Doodle

Bei der Webanwendung Doodle (doodle.com) geht es darum gemeinsame Termine für Meetings und Ähnliches zu finden.  Es dürfte kein Problem sein eine ähnliche Anwendung mit dem hier gelernten umzusetzen.

Flickr

Flickr (flickr.com) ist eine Webanwendung zum Hochladen und Verwalten von Bildern.  Jeder Nutzer sollte seinen eigenen Bereich haben, es sollte aber auch einen gemeinsamen Bereich geben.  Bilder können privat, aber auch öffentlich sein.  Und es könnte ein Ranking/Voting System geben mit dem man Bilder bewerten kann.  Natürlich sollte es auch als Webservice zur Verfügung stehen um mobile Geräte direkt einbinden zu können.

Facebook

Inzwischen kennt Facebook (facebook.com) fast niemand mehr, aber die Idee war eigentlich ganz cool: seinem zukünftigen Arbeitgeber seine schlimmsten Seiten zu zeigen.  Im Prinzip ist es ein ähnliches Konzept wie unsere Chirpr Anwendung.  Es gibt Nutzer, Freunde und Gruppen, und jeder kann News posten.  Das Ganze kann man dann zeitlich sortieren und nennt es Timeline.

Stack Overflow

Stack Overflow (stackoverflow.com) ist ein Beispiel für eine spezialisierte Form der klassischen NewsGroup.  Ein Nutzer stellt eine Frage, idealerweise mit einigen Keywords assoziiert, und andere Nutzer können die Frage beantworten.  Man kann dann noch ein Votingsystem einführen, etc., etc.

Shop

Ein einfacher Shop, z.B. für Bücher, CDs oder Lebensmittel.  In einer einfachen Version ist das Inventar fest vorgegeben.  Der Nutzer kann aber Sachen in einen Warenkorb legen und kaufen.  In einer späteren Version könnte es auch ein Interface für den Händler geben, damit er neues Inventar anlegen kann, etc.

Bugs

Ein Tool zum Melden von Bugs, also Fehlern in einem Programm.  Die Bugs bekommen eine Nummer, werden dann einem Mitarbeiter zugeordnet, und nachdem sie bearbeitet wurden, bekommt der Melder eine Nachricht.  Man sollte u.a. alle offenen Bugs auflisten können.  Das Ganze sollte natürlich für mehrere Projekte möglich sein. 

Bank

Die Idee hier ist eine Spiel-Bank Anwendung zu schreiben.  Kunden haben Konten und können einander Geld überweisen.  Das ist eine sehr interessante Anwendung, denn beim Überweisen von Geld kann verdammt viel schief gehen.  Da muss man viel nachdenken, damit auch wirklich nichts schief geht.  Der nächste Schritt wäre dann sich ein bischen in Bitcoins einzulesen (z.B. Bitcoin and Cryptocurrency Technologies).

Hospital

In einem Krankenhaus gibt es Patienten und Doktoren.  Jeder Patient hat eine Krankenakte, und die Doktoren dürfen da drin rumschreiben. 

Recipies

Es geht um das Sammeln von Rezepten.  Dabei könnte jeder Nutzer seine eigenen Rezepte haben, es könnte aber auch die Möglichkeit geben, das Rezepte global sind, also für jeden einsehbar.  Natürlich sollten Rezepte auch Bilder haben, sonst schmecken sie nicht so gut.  Man könnte sich auch Erweiterungen ausdenken, wir ein Voting System. 

Classifieds

Bei Kleinanzeigen geht es darum irgendetwas zu verkaufen, anzubieten oder zu finden.  Hier gibt es Nutzer und Anzeigen.  Anzeigen sollten einen Titel, eine Kategorie, einen Text und ein Verfallsdatum haben.  Das Ganze sollte natürlich durchsuchbar sein.  Was Kleinanzeigen auch ausmacht ist, dass sie meist lokal sind, deswegen könnte man in einer Erweiterung auch noch den Ort/Lokation mit aufnehmen. 

Document / Image Management System

Ein einfaches Dokumenten-Managementsystem erlaubt es einem auf seine Dokumente über ein Webinterface zuzugreifen.  Dokumente sollten nach Namen, Schlüsselwörtern und evtl. Inhalt klassifiziert werden, damit man sie auch durchsuchen kann.  Ein WebService zur Anbindung mobiler Endgeräte könnte sinnvoll sein.

Crossword Puzzle

Im zweiten Semester haben wir gesehen wie wir Kreuzworträtsel mit Hilfe der Trie Datenstruktur erzeugen können.  Was uns aber fehlt sind die Inhalte.  In diesem Projekt, sollen Nutzer Fragen und Antworten für Kreuzworträtsel eingeben können, und daraus dann Kreuzworträtsel generieren lassen können.  Die Fragen sollten öffentlich sein, damit jeder sie nutzen kann.  Evtl. macht es bei jeder Frage einen Schwierigkeitsgrad mit anzugeben.  Auch ein Voting System vielleicht inspiriert von Stack Overflow könnte hilfreich sein.

Newspaper

Bei Newspaper geht es um eine Zeitung, z.B. eine Mitarbeiter- oder Vereinszeitung.  Es gibt Autoren und Artikel, sowie Ausgaben.  Evtl. macht es auch Sinn einen Administrator zu haben.  Auf jeden Fall sollte es die Möglichkeit geben eine gedruckte Version der Zeitung zu erstellen.  Hierfür gibt es in CSS die @media Regel "@media print".

.