Was ist eigentlich das Framework Prototype?

Jeder von denjenigen die mit der Programmierung zu tun haben, stoßen früher oder später auf sogenannte Frameworks. Bereits vor einiger Zeit haben wir schon über jQuery und AngularJS berichtet. Heute widmen wir uns einem weiteren großen Framework, welches oftmals ein etwas unbeachtet Dasein fristet. Ob dies berechtigt ist oder nicht, könnt ihr heute nachlesen.

Weiterlesen

Kommunikation zukünftig auf Discord

Bereits seit der Einführung des Projektes „User Apps“ war die Kommunikation von Entwicklern und dem Knuddelsteam via Skype möglich. In zwei Skypegruppen wurde über die Entwicklung und über andere Dinge die User Apps betreffen gequatscht. Wer in diese Gruppe kam, war allerdings nicht immer offensichtlich. Gerade „Neue Entwickler“ wussten von dieser Gruppe nichts und hatten es oftmals sehr schwer und Umständlich an benötigte Informationen zu kommen. Dies soll sich nun durch den Wechsel zu Discord ändern. In mehreren Kanälen kann nun über das Thema User Apps gesprochen werden. Wie das ganze genau ablaufen soll, könnt ihr im heutigen Blogbeitrag nachlesen.

Weiterlesen

[4] Die App erkennt jetzt richtige Antworten

Hey there.
Schon cool was die KopfTrainer App bisher alles kann oder? Sie kann User begrüßen und verabschieden. Außerdem kann sie schon alle 15 Sekunden eine Matheaufgabe ausgeben und damit die neue Runde einläuten.

laptop

Jetzt gehts ans Eingemachte.
Ich will mich jetzt der Überprüfung von Antworten widmen.
Den ersten Schritt dazu habe ich ja schon im zweiten Tutorial [Link zum zweiten Tutorial] gemacht.
Dort hat die App jedem User eine private Nachricht geschrieben, wenn er etwas in den Channel gepostet hat.
Und genau an dem Punkt setze ich jetzt an.
Los gehts:

Weißt du, zu aller erst hab ich mich gefragt wie man überhaupt den Text einer Nachricht aus dem Message Objekt bekommen kann.
Aber auch dafür hat die API eine Lösung.

var App = {};
App.onPublicMessage = function(message)
{
// Unser alter Code.
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel    geschrieben stimmts?');
// Hier holen wir aus dem Message Objekt den Text.
var messageText = message.getText();
};

Jetzt da ich den Nachrichtentext habe, kann ich überprüfen ob er mit der Lösung zur aktuellen Aufgabe übereinstimmt.
Die Lösung zur aktuellen Aufgabe ist ja zum Glück immer in der globalen Variable solution gespeichert.

var App = {};
App.onPublicMessage = function(message)
{
// Unser alter Code.
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel   geschrieben stimmts?');
// Hier holen wir aus dem Message Objekt den Text.
var messageText = message.getText();
// Und jetzt überprüfen wir den Text auf die richtige Antwort.
if(messageText.indexOf(solution)>-1)
{
// Der User hat richtig geantwortet.
}
else
{
// Der User hat falsch geantwortet.
}
};

Ok was hier passiert habe ich am Anfang auch nicht verstanden. Mach dir keine Sorgen, es ist eigentlich ganz einfach.
Die JavaScript Funktion indexOf() gibt immer den Ort eines Strings in einem anderen String zurück.
Aber was ist blos ein String? Ein String ist im Grunde nichts anderes als Text. Und da sowohl die Nachricht im Channel, als auch die Lösung aus Text besteht kann man so nach der richtigen Lösung suchen.

Hier ein Beispiel mit dem ich es verstanden habe:

var erdbeerenSindRot = "Erdbeeren sind rot";
var sind = "sind";
var banane = "Banane";
var kommtImTextVor = erdbeerenSindRot.indexOf(sind);
var kommtNichtImTextVor = erdbeerenSindRot.indexOf(banane);

Was bedeutet das jetzt?
Da die Funktion indexOf() immer die Stelle in der ein String in einem anderen vorkommt zurückgibt, hat die Variable kommtImTextVor jetzt den Wert 10. Das Wort „sind“ beginnt an 10ter Stelle des Textes erdbeerenSindRot.
Welchen Wert hat dann die Variable kommtNichtImTextVor? Da „Banane“ nicht in erdbeerenSindRot vorkommt hat kommtNichtImTextVor den Wert -1.

Ihr könnt euch also merken: Kommt ein String nicht in einem anderen vor, gibt indexOf() den Wert -1 zurück.

Puh! Das war gar nicht so leicht.
Aber jetzt da ich weiß ob ein User die richtige Antwort in den Channel geschrieben hat kann ich ihm gratulieren. Wie man private und öffentliche Nachrichten verschickt haben wir ja auch schon gesehen.

var App = {};
App.onPublicMessage = function(message)
{
// Unser alter Code.
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel   geschrieben stimmts?');
// Hier holen wir aus dem Message Objekt den Text.
var messageText = message.getText();
// Und jetzt überprüfen wir den Text auf die richtige Antwort.
if(messageText.indexOf(solution)>-1)
{
// Der User hat richtig geantwortet.
message.getAuthor().sendPrivateMessage('Super gemacht. Du hast die Aufgabe geloest!');
appBot.sendPublicMessage('_______ ' + message.getAuthor() + ' hat die Aufgabe geloest _______');
}
else
{
// Der User hat falsch geantwortet.
}
};

Cool oder?
Also ich finde die App bisher super. Und was meint ihr dazu?
Irgendwie fehlt mir aber noch etwas.
Wie wäre es wenn neue User mit der aktuellen Frage begrüßt werden?

Darum geht es dann im nächten Blog Eintrag.
Bis dann 🙂

Liebe Grüße, MarvinDerPraktikant.

[2] Was muss unbedingt in die KopfTrainer App?

Hey there.
Danke erst mal für euer super Feedback.
Wie immer gilt: Wenn ihr zu dieser Blogserie beitragen wollt, Tipps oder Vorschläge habt. Schreibt mir einfach 🙂

Also lasst uns loslegen.
Ich denke es wird Zeit dass die App Form annimmt. Dazu hab ich mir mal ein Paar Gedanken gemacht.

keyboard2

Ich hab euch ja im letzten Blogeintrag über die verschiedenen Funktionen einer App berichtet stimmts?
Jetzt gehts darum zu entscheiden welche davon für die KopfTrainer App sinnvoll sind.

Also was muss unbedingt in die App?
Neue User im Channel zu begrüßen klappt ja zum Glück schon. Ein Punkt weniger auf der Liste 😀
Jetzt fehlen noch die Matheaufgaben, deren Überprüfung und die Verabschiedung der User.
Hmm. Was könnte man sinnvollerweiße zuerst machen?

Die Verabschiedung der User:

App.onUserLeft = function(user)
{
user.sendPrivateMessage('Du gehst schon? Schade... Hoffentlich bis bald.');
};

Cool! Sobald jetzt ein User meinen Channel verlässt wird er vom Appbot verabschiedet.

Wie könnte man Antworten zu den Matheaufgaben überprüfen?
Einige von euch meinten ja, dass man Antworten einfach so in den Channel schreiben sollte. Dann sieht sie auch jeder. Außerdem würde das den Spannungsfaktor steigern.
Ich fand die Idee super und hab mich gleich an die Umsetzung gemacht.

Um öffentliche Nachrichten im Channel zu empfangen, das weiß ich jetzt, braucht man die Funktion onPublicMessage(message), die die neue Nachricht übergibt. Ich glaube es reicht mir erst mal nur dem User der gerade in den Channel geschrieben hat eine Nachricht zu schicken. Aber darauf kann man ja später aufbauen 🙂

Das ganze könnte zum Beispiel so aussehen:

App.onPublicMessage = function(message)
{
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel geschrieben stimmts?');
};

Was fehlt jetzt noch?
Natürlich die Matheaufgabe selbst. 😀 Ohne die kann auch nichts beantwortet werden.
Ich glaube ich hab schon eine Idee.
Wie wäre es wenn die App alle 15 Sekunden eine Matheaufgabe ausgibt und damit eine neue Runde startet?
Hmm… Das klingt schwer.
Ich überlege mir jetzt Mal wie man das umsetzen könnte.
Wenn du wissen willst ob ich das Problem lösen kann schau doch im nächsten Blog vorbei.

Wir sehen uns dort oder?
Bis gleich.

Liebe Grüße, MarvinDerPraktikant.

[1] Wie ist eine App eigentlich aufgebaut?

Hey there.
Cool dass du da bist. Weisst du schon, was ich vor habe? Nein? Dann lies doch mal hier.
Ich hab jetzt begonnen mir etwas über die User Apps durchzulesen.

So hab mich mir das am Anfang vorgestellt:

appScaled

Das ganze User Apps System ist schon ganz schön umfangreich, aber ich glaube, ich habe den Kniff jetzt raus. Um die Apps besser zu verstehen habe ich mir folgendes klar gemacht:

var App = {};
App.onUserJoined = function(user)
{
};

Eine App besteht aus mehreren Funktionen die man implementieren kann:
Implementieren? Das bedeutet nichts anderes als einbauen.
Außer den drei Funktionen hier gibt es noch einige andere, die ich in der API Dokumentation gesehen habe.

Doch: Was bringen mir die Funktionen jetzt?
Ich hab das so verstanden: Anscheinend hat jede App die oben erwähnten Funktionen und immer wenn etwas in einem Channel passiert, dann werden sie aufgerufen. Wenn zum Beispiel ein User den Channel betritt oder verlässt, wenn eine Nachricht geschrieben wird oder die Würfel gerollt werden. Immer dann wird eine der Funktionen von oben aufgerufen und ich kann darauf reagieren.

Zum Beispiel merke ich mit der Funktion onUserJoined(user) immer, wenn gerade ein User den Channel betritt.

Cool, dann kann ich ja alle Leute begrüßen, die bei mir in den Channel kommen!
Nach ein paar Versuchen hatte ichs dann raus. So geht das:

var App = {};
App.onUserJoined = function(user)
{
user.sendPrivateMessage('Hey, cool dass du da bist!');
};


Wie geht’s jetzt weiter?

Macht schon irgendwie Spaß das Ganze! Genau deshalb mache ich jetzt auch direkt weiter und lese mir ein bisschen mehr zu den Apps durch. Komm doch mit?

Also bis gleich 🙂
Liebe Grüße, MarvinDerPraktikant.

[0] Was ist eine Knuddels App?

Apps.
Was ist das eigentlich? Was versteht ihr unter einer App? 99% von euch stellen sich jetzt ein Handy vor.
Was wenn ich euch erzähle, dass es auch Apps gibt die nicht auf dem Handy laufen?
„Und wo sonst?“
Eine durchaus berechtigte Frage.

knuddels

Was haben wir früher alle gern getan?
Center Shocks gegessen und Pokémon gespielt. Klar. Vielleicht frage ich noch mal. Jetzt etwas direkter. Was haben wir am Computer gern getan?
Gechattet. Ja richtig! Gechattet. Kennt ihr noch ICQ, MSN und was es sonst noch alles gab?
Heute gibt es Knuddels. Viele von uns Chatten immer noch. Und das machen sie genau dort.

Zu so einem Chat gehören natürlich auch Chaträume.
Ihr wisst schon. Diese viereckigen Boxen. Alle mit verschiedenen Hintergründen. Ach ja fast hätte ich es vergessen. Man chattet darin mit vielen anderen Menschen, hat seinen Spaß und lernt jede Menge interessanter Charaktere kennen. In so einem Chatraum oder Channel kann auch eine App „laufen“. Natürlich läuft sie nicht wirklich. Ehrlichgesagt bewegt sie sich gar nicht mehr wenn sie erst mal auf einem Channel läuft. Eigentlich bedeutet das, dass sie dort installiert ist.

So eine App ist in der Lage ganz verschiedene Dinge zu tun.
Wenn ich dir jetzt erzähle, dass sie sich Dinge merken kann… Glaubst du mir dann? Und was wenn ich dir sage, dass sie im Channel ein Spiel leiten könnte.

Ein Spiel bei dem du mal so richtig zeigen kannst wie fit du noch bist. Die App könnte sich zum Beispiel eine kleine Matheaufgabe ausdenken, die sie dann allen die sich gerade im Channel befinden stellt.
Ab diesem Moment passt die App ganz genau auf was im Channel geschrieben wird. Wenn einer der Chatter schnell genug auf die richtige Antwort kommt und diese in den Channel schreibt belohnt sie ihn mit ein wenig Aufmerksamkeit.
Wollen wir nicht alle ein wenig Aufmerksamkeit für besonders gute Leistungen? Schon oder? Naja und deswegen schreibt die App in den Channel dass Chatter XYZ die Aufgabe gelöst hat.
Jetzt kann er sich noch selbst auf die Schulter klopfen und danach direkt die nächste Aufgabe beantworten.

Was ich gerade beschrieben habe ist nur eines von vielen Beispielen für eine solche App.
Wenn ihr euch mal auf Knuddels umseht werdet ihr noch eine Menge anderer Arten von Apps finden. Da gibt es zum Beispiel das SnakeGame (Channel: SnakeGame). Wobei wir wieder zurück in unserer Kindheit wären :D. Aber auch ganze Rollenspiele. Untergebracht in einem Chatraum. Ja du hast richtig gehört. Ein Rollenspiel (Channel: Knuddelonia). Glaubst du nicht? Na dann schau selbst nach auf http://www.knuddels.de

Wir wollen uns jetzt erst einmal damit begnügen die oben beschriebene App zu bauen.
Nicht weil ich keine Lust hätte Snake oder ein Rollenspiel zu programmieren. Nein. Im Moment würde ich das einfach nicht schaffen. Ich geh lieber erst Mal langsam an die ganze Sache ran. Zusammen mit euch!
Ich bin mir sicher, dass wir später noch auf ein Paar coole Ideen kommen werden.
Los geht’s dann in meinem nächsten Blog Eintrag.
Seid gespannt und bleibt dabei.
Liebe Grüße, MarvinDerPraktikant.