Du bist nicht angemeldet. [Anmelden]
Seite 1 von 2 1 2 > alle
Optionen
Thema bewerten
UserApps API: AppInstance.equals() Methode - #2879015 - 08.12.2017, 16:23:21
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Code:
KnuddelsServer.getAppAccess().getOwnInstance().equals(KnuddelsServer.getAppAccess().getOwnInstance().getRootInstance())

Ergebnis ist false, trotz dass dieser Aufruf im RootChannel ausgeführt wurde.

Dies muss aber true sein, denn man greift laut Dokumentation, auf das selbe Objekt innerhalb der API zu.

Wofür braucht man denn sowas?
Zur Überprüfung ob eine AppInstance welche ein Event gesendet hat, rootInstance der eigenen App war oder eben nicht.

Die Prüfung kann man auch auf andere Weise durchführen, aber wozu wenn, die Funktionen dazu bereits vorhanden sind und das Rückfrageergbnis nicht das ist, was man erwartet hat?
Zudem wäre es wieder ein Workaround für eine Funktion die eigentlich bereitgestellt wird.

Offtopic:
Wenn K3 auf derartigen Dingen basiert die permanente falsche Ergebnisse produzieren braucht man sich nicht über die Errors in der HTML Deklaration im Content wundern die, die Frontpage aktuell beim w3 validator zurück gibt.

Wären ein oder zwei Fehler da wie vergessenes </p> element oder ähnliches, wäre das durchaus in Ordnung.

Ich erinnere mich dabei immer gerne an ein altes Zitat: "Ach sie haben studiert? Na dann müssen wir es ihnen erklären.".

Wie dem auch sei. Bringt die API und andere Schnittstellen bitte endlich auf Vordermann bevor ihr neue Dinge einbindet die nur weitere Fehler produzieren basierend auf anderen fehlerhaften Werten. :|

MfG
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879018 - 08.12.2017, 16:36:10
Vampiric Desire
Chann​elMas​ter​

Registriert: 15.09.2013
Beiträge: 1.673
Ergebnis darf nicht true sein!

RootInstance ist ne andere Klasse und hat andere Funktionen

was du suchst ist http://developer.knuddels.de/docs/classes/AppInstance.html#method_isRootInstance
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879038 - 08.12.2017, 18:26:07
TobyB
​Knuddelsteam

Registriert: 21.11.2003
Beiträge: 6.287
Antwort auf: Sephiroth ME
Code:
KnuddelsServer.getAppAccess().getOwnInstance().equals(KnuddelsServer.getAppAccess().getOwnInstance().getRootInstance())

Und du verwendest .equals(), was es laut Doku gar nicht gibt. Also auch hier liegt eine Fehlerquelle.
Ansonsten hat Dennis aber bereits auf die richtige API verwiesen.
_________________________
There is no good without evil, but evil must not be allowed to flourish.
There is passion, yet peace; serenity, yet emotion; chaos, yet order.

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Vampiric Desire] - #2879069 - 08.12.2017, 20:24:13
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Es ist dennoch eine Instance von AppInstance und somit sollte die Prüfung dabei greifen. Vor allem weil es in dem Moment sogesehen die selbe ist. Die Werte innerhalb aller Felder sind identisch.

Der BotUser ist ebenfalls eine Instanz von User und eine Prüfung auf diesem Level greift in dem Moment auch mittels der equals Methode. Und das obwohl die Werte nichtmal identisch sind.
AppAccess.BotUserAbfrageNachNickOderId().toJSON() wird zu "User" und KnuddelsServer.defaultBotUser.toJSON() wird zu "BotUser", ein Vergleich mittels equals gibt dennoch true zurück. Also dürfte hier das Ergebnis ebenfalls nicht true sein, ist es aber. Damit ist deine Argumentation ebenfalls für mich kein Grund diese zu berücksichtigen.

Code:
Trying to evaluate: 'BotNick'.toUser().equals(KnuddelsServer.defaultBotUser);
Result: true

Code:
['BotNick'.toUser().toJSON(),' versus ', KnuddelsServer.defaultBotUser.toJSON()];
Result: [User,  versus , BotUser]


Und Toby es ist so vieles dort nicht dokumentiert was bereits im UserVoice, aber schon mit "eingebunden und fertig" vermerkt wurde. Demnach ist dies auch kein Argument für mich.
getUserFromChannel
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879073 - 08.12.2017, 20:40:48
Vampiric Desire
Chann​elMas​ter​

Registriert: 15.09.2013
Beiträge: 1.673
Der User hat auch eine comperator funktion die für equals greift. Da wird nach UserID überprüft. Dies haben AppInstancen nicht. Es wird die Java(script) Native equals Funktion somit aufgerufen. Die fragt die Pointer ab, also die Position im Arbeitsspeicher. Und da ist RootAppInstance eben nicht die gleiche Instanz wie AppInstance da es schon andere Klassen sind, auch wenn RootAppInstance von AppInstance erbt.

Das ist normal und in jeder Programmiersprache so. Hier liegt kein Fehler vor. Lediglich könnte man bemängeln, dass keine entsprechende Comperator Methode für AppInstance vorliegt. Aber steht ja auch bewusst nicht in der Doku. In deinem Beispiel aber auch nicht nötig, da du eben isRootInstance nutzen solltest.
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879080 - 08.12.2017, 21:14:42
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Da die Bearbeitungszeit leider um ist, ich dennoch ein erweitertes Beispiel für diesen Fall habe wo es erheblich viel schreibarbeit einspart.
Code:
App = {
  onAppEventReceived: function(appInstance, key, data) {
     if (appInstance.equals(KnuddelsServer...)) { /* was soll ich tun, wenn es wirklich von meiner rootInstance kommt */ }
   }
}

Das würde diese Prüfung erleichtern und man müsste nicht mit zig Dingen alles durchprüfen. (z. B. ist denn der Key der AppInfo genauso wie mein Key... und hat die Instanz die Flag rootInstance?). Das man diese Abfrage anders lösen kann, habe ich zudem in meinem ersten Beitrag erwähnt.

Und warum die Prüfung überhaupt? Nun das solltest ihr eigentlich sehr gut wissen, wie bescheiden das MultiChannelhandling mit der aktuellen API bei externen Abfragen sein kannn und das man in dem Falle nur einen Worker für gewisse Dinge nutzen sollte. Alleine durch die teils extrem harten Limits. Das schweift aber wieder zu weit ab. Zudem möchte ich nicht das andere Apps versehentlich Auslöser treffen nur weil sie im selben Channel laufen. Dieses equals an der Stelle würde dies mit einer kurzen Abfrage abfang. => Weniger Rechenlast => Schneller.
Aber okay, wer im Source von nem Client so viele Stringvergleichen hat braucht sich auch nicht mehr wundern, wenn irgendwann alles unter der Last dieser Vergleiche zusammenbricht und es zu enormen Performanceeinbrüchen kommt.

So long ~
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Vampiric Desire] - #2879082 - 08.12.2017, 21:21:22
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Antwort auf: Vampiric Desire
Es wird die Java(script) Native equals Funktion somit aufgerufen. Die fragt die Pointer ab, also die Position im Arbeitsspeicher. Und da ist RootAppInstance eben nicht die gleiche Instanz wie AppInstance da es schon andere Klassen sind, auch wenn RootAppInstance von AppInstance erbt.

Entschuldige... aber... was für ein... ?
Code:
Trying to evaluate: Object.prototype.equals
Result: undefined

Natives equals. Soso. =)

Wenn ich ein Objekt in JavaScript mit === vergleiche, ist dies eine Native Abfrage.

Das was dort genutzt wird, kommt von Rhino:
Jedes sogenannte Scripted Object, welches in dieser Umgebung erzeugt wird hat diese. Deshalb ist es bei jedem Objekt, welches in der API bereitgestellt wird vorhanden. (User, KnuddelsServer...)

Code:
Trying to evaluate: KnuddelsServer.equals

Result: function equals() {/*
boolean equals(java.lang.Object)
*/}
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Vampiric Desire] - #2879104 - 09.12.2017, 02:17:06
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Und da ihr ja keinerlei Sicherheitsbedenken oder ähnliches habt, vergleiche für die Katz sind und isRootAppInstance() vollends genügt:

App1:
Code:
App = {};
App.RootId: KnuddelsServer.appAccess.ownInstance.appInfo.getRootAppUid();
App.onAppEventReceived = function(appInstance, key, data) {
    if (appInstance.appInfo.getRootAppUid() === App.RootId) {
      KnuddelsServer.defaultLogger.debug('It should be my root App!');
    } else {
      KnuddelsServer.defaultLogger.debug(appInstance.appInfo.getRootAppUid()+' is not '+App.RootId);
      if (appInstance.isRootInstance()) {
        KnuddelsServer.defaultLogger.debug('Another root App! OMG!: '+appInstance.isRootInstance());
      }
    }
}
App.onAppStart = function() {
  KnuddelsServer.getAppAccess().getAllRunningAppsInChannel(true).forEach(function(apps) { apps.sendAppEvent('foo',{ }); });
}


App2:
Code:
App = {};
App.onAppStart = function() {
  KnuddelsServer.getAppAccess().getAllRunningAppsInChannel(true).forEach(function(apps) { apps.sendAppEvent('foo',{ }); });
}


Oh und was deine App angeht Vampiric Desire dann stört es dich auch sicherlich nicht, wenn ich etwas Sicherheitsrelevantes veröffentliche:
Code:
KnuddelsServer.getAppAccess().getAllRunningAppsInChannel().forEach(function(apps) { apps.sendAppEvent('TeamP',{ user: 54779485, message: 'Ha!' }); });

Und dies kann von jeder App aktuell ausgeführt werden um in deinem Namen über ChannelMaster zu schreiben. Aber in deinem Namen zu schreiben ist dann natürlich auch kein Sicherheitsrisiko.


Ich wünsche eine angenehme Nacht. Und zitiere auch noch einmal gerne etwas: "RTFM!"
Denn isRootAppInstance gibt laut Dokumentation nur true zurück, wenn die AppInstance eine rootInstance ist und voila! Das sind alle Apps die im RootChannel laufen.

MfG
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879112 - 09.12.2017, 09:16:16
Vampiric Desire
Chann​elMas​ter​

Registriert: 15.09.2013
Beiträge: 1.673
'RTFM' >>> Richtig. In der Manual steht nichts von .equals() - Du sollst ganz dringend an deiner Diskussionsart arbeiten. Die ist Respektlos und abgesehen davon ohne Hand und Fuß.


Warnung! Spoiler!

Code:
AppInstance.prototype._equals = function(other) {
    var selfID       = this.getAppInfo().getAppUid();
    var otherID      = other.getAppInfo().getAppUid();

    return selfID === otherID;
};

OwnAppInstance.prototype._equals = function(other) {
    var selfID       = this.getAppInfo().getAppUid();
    var otherID      = other.getAppInfo().getAppUid();

    return selfID === otherID;
};

RootAppInstance.prototype._equals = function(other) {
    var selfID       = this.getAppInfo().getAppUid();
    var otherID      = other.getAppInfo().getAppUid();

    return selfID === otherID;
};



Da, eine eigene equals Funktion. Kannst du einbinden und nutzen.


Zitat:

Oh und was deine App angeht Vampiric Desire dann stört es dich auch sicherlich nicht, wenn ich etwas Sicherheitsrelevantes veröffentliche:

[...]

Und dies kann von jeder App aktuell ausgeführt werden um in deinem Namen über ChannelMaster zu schreiben. Aber in deinem Namen zu schreiben ist dann natürlich auch kein Sicherheitsrisiko.


Was nichts mit diesem Thema zu tun hat. Denn teamp ist ganz bewusst offen. Andere Apps sollen Zugriff darauf haben, das einzige was versäumt wurde ist, wenn es von einer Fremden App kommt, dass der Username nicht angegeben werden kann. Fixe ich gleich sofort.



Zitat:

Natives equals. Soso. =)

Wenn ich ein Objekt in JavaScript mit === vergleiche, ist dies eine Native Abfrage.

Sagte ich, dass die default von Javascript kommt? Nein. Aber sehr wohl nativ von der Engine. Und die macht eine POINTER Abfrage. Und glaub mir im Sinne von AppInstancen und externen Zugriff sind mir einige problematischen Lücken bekannt, wo kein AppProgrammierer was gegen machen kann. Da ist das, wo man einfach nur selbst eine richtige Implemntierung machen muss, lächerlich einfach. Du regst dich für etwas auf, was nicht in der Doku beschrieben ist. Und wenn es nicht in der Doku steht, hat es in der Regel einen sehr guten Grund.
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Vampiric Desire] - #2879147 - 09.12.2017, 14:37:40
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Die Instanzen sind alle nur Instanzen eines einzigen Klasse "AppInstance". Der Hauptaspekt war, dass die Funktion nicht das erwartete Eregbnis liefert.
Es ist aber nicht nur diese Stelle innerhalb der API, es sind ettliche die sich so reagieren wie erwarten. TouchURL wäre das nächste Beispiel an dieser Stelle. Ich bin einfach enttäuscht davon wie lasch hier manche Dinge angegangen werden, zu 75% fertig gestellt werden und dann behauptet wird "It's perfect as it is!".

Mir geht die Arroganz mit der man hier permanent angefeindet wird, vor allem wenn man auf etwas dieser Art hinweist, gehörig auf die nerven. Genauso wie dein Kleinkrieg mit Bizarrus in nahezu jedem öffentlichen Beitrag.

Ich mag nicht perfekt sein und mache ebenso Fehler, aber so ist das einfach nicht in Ordnung. Jeden direkt Mundtot machen zu wollen, nur weil etwas kritisiert wird.

Zu dem Beispiel:
Bei deinem Codeschnippsel sollte eigentlich nur die erste Prototypemethode benötigt werden. Denn OwnAppInstance und auch RootAppInstance sind erweiterungen von AppInstance und diese müssten beide demnach diese Funktion erben. (Falls nicht, gehört dies genauso angeprangert, denn es würd keinem vernünftigen strukturiertem Ablauf entsprechen)
Ansonsten ja, das war die "alternative" von der ich im ersten Beitrag gesprochen habe. Ich habe all solche Dinge ja bereits da bedacht und versucht sowas (wie in dem Screenshot zu sehen) von Haus aus einfach zu vermeiden.
Das Beispiel von dir und auch mir wird sicherlich anderen helfen dies besser zu verstehen, warum/wieso man nicht immer nur auf einen bestimmten Wert vertrauen sollte.
Es tut mir leid, wenn dies falsch aufgefasst wurde und zu so einem Streitthema führte, das war nicht meine Absicht.

Was diesen TeamChat angeht:
Es hat nämlich sehr wohl etwas mit diesem Thema zu tun. Wenn ihr sagt "isRootAppinstance()" ist ausreichend als Prüfung ob es auch wirklich die App war ist dies genauso falsch und führt dann zu solchen, wenn auch kleinen Lücken.
Das es offen bleiben soll ist auch in Ordnung, zumal diese Funktion ja eventuell auch von anderen Apps angesteuert werden könnte, aber diese sollten wenn dann einen weiteren Filter durchlaufen mit bereits bekannten Anwendungen oder z. B. eine Prüfung auf die ID des hinterlegten Entwicklers.
All diese Dinge sollten bedacht werden und auch in Beispielen mit benannt werden. Denn das Forum wird ja auch von Neulingen genutzt genauso wie von erfahrenen Personen und wenn jeder dann solche Beiträge sieht mit "Hach das reicht völlig!" ist das ungenügend.
Eine bessere Hilfestellung wäre gewesen:
- Du könntest A probieren.
- B und C vergleichen.
- Die Katze des Nachbarn füttern!

Das Problem ist da wieder nur, fast alle Werte die man aus der API zurück bekommt sind pure Strings, Strings permanent zu vergleichen bedeuted Leistungseinbußen ohne Ende. Wenn sie in einem Befehl verglichen werden ist dies natürlich selbstredend, da gibt es nichts anderes als Parameter vom Typ String, aber das was im Hintergrund abläuft sollte nicht so lasch sein das es so einfach missbraucht werden kann.

Auch wenn die Apps im Endeffekt nur kleine Dinge sind, die den Chat erleichtern und auffrischen sollen, so sollte auch die Arbeitszeit die in manchen dieser Steckt nicht unterschätzt werden.

Und zum letzten Absatz:
Ja, ich rege mich darüber auf, undokumentierte Dinge, egal aus welchem Grund, führen zu so etwas. Das dieses Thema so ausartet war nicht mein Ziel und dafür möchte ich mich nochmals entschuldigen.
Diese Lücken sind mir genauso vertraut und es ist einfach nur ärgerlich. Deshalb auch die Bitte aus dem Ausgangspost dies alles auf Vordermann zu bringen bevor man sich wieder in neue Abenteuer stürzt.

Auch Vergesslichkeit oder der Austritt/Wechsel eines verantwortlichen Mitarbeiters können ein Grund sein, warum Dinge es nicht mehr in die Dokumentation bis dato geschafft haben. Und wie bereits erwähnt, ist dies bei einigen Sachen hier der Fall. Deshalb heißt es nicht, dass man nicht mit den Funktionen die Bereits vorhanden und implementiert sind, herumprobieren kann und oder sich über das Verhalten dieser Funktion oder Methode zu ärgern wenn das Ergebnis nicht das ist, was man erwartet.
Für mich ist das Verhalten beim Vergleich von 2 Instanzen nunmal nachvollziehbarer, das diese als identisch angesehen werden sollten. Zumal ich in dem Moment mit KnuddelsServer.appAccess.ownInstance ja theoretisch die "RootInstance" abgefragt habe, wenn ich "ownInstance" im RootChannel abfrage.

Im Abschluss möchte ich einfach nur noch sagen:
Ich Programmiere nunmehr seit über 20 Jahren, derartiges so übertrieben Fehlerhaft auftretendes Verhalten ist mir bisher noch nirgends untergekommen.

So long ~
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879150 - 09.12.2017, 15:10:18
Senzious
I'm n​ot a ​Hero​

Registriert: 10.11.2015
Beiträge: 78
Ort: Germany
Ich seh das wie der OT, er wollte in seinem Beitrag nur darauf hinweisen, das manche Methoden nicht das liefern, was man im eigentlichen erwartet.

Zudem war die Problemstellung im Ausgangspost genau benannt, das dafür isRootInstance() nicht ausreicht ist klar.

Es wird ständig nur widersprochen anstatt Hilfe geleistet und das obwohl dies hier der Bereich für die Entwickler ist um sich auszutauschen. Hilfestellungen sollten Lösungsansätze geben und nicht auf etwas vollkommen falsches verweisen was überhaupt nichts mit der eigentlichen Problematik zu tun hat.

Ich weiß ja nicht, was euch eure Eltern beigebracht haben. Aber Bitte und Danke, auch wenn man auf etwas hingewiesen wurde, wie eine Lücke, sollten selbstverständlich sein und nicht dann noch kommentiert werden wie es hier im Moment der fall ist.

Wo sind wir hier, im Kindergarten?


Bearbeitet von Senzious (09.12.2017, 15:15:51)
_________________________
Mit freundlichen Grüßen,
Senzious

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Senzious] - #2879174 - 09.12.2017, 17:46:15
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Antwort auf: Senzious
Ich seh das wie der OT, er wollte in seinem Beitrag nur darauf hinweisen, das manche Methoden nicht das liefern, was man im eigentlichen erwartet.

Zudem war die Problemstellung im Ausgangspost genau benannt, das dafür isRootInstance() nicht ausreicht ist klar.
Danke für die Unterstütztung.

AppInstance hat laut Dokumentation nicht die Methode "getOnlineUsers()", demnach sollte kein Objekt einer AppInstance diese haben außer es ist wirklich "OwnAppInstance".
Wenn wir danach gehen müssen, was in der Dokumentation steht und was nicht:
http://developer.knuddels.de/docs/classes/AppInstance.html
http://developer.knuddels.de/docs/classes/OwnAppInstance.html
http://developer.knuddels.de/docs/classes/RootAppInstance.html
Keine Ableitung von AppInstance außer "OwnAppInstance" hat eine Referenz zu "getOnlineUsers()" - alle können es aber. Dies spricht sehr stark dafür, dass dies eine Methode vom Parent "AppInstance" ist. Und es funktioniert auch Problemlos bei den Instanzierungen in Tochterchannels.

Das einzige was rootAppInstance nun nur noch unterscheidet sind stopApp() und updateApp() und dies sind beides funktionale Aufrufe die keine Änderung an den Werten im Objekt selbst hervorrufen. Also auch kein wirklicher unterschied zu einer AppInstance selbst. Diese Funktion könnte man Problemlos auch bei appInstance hinterlegen und einfach nur innerhalb des Aufrufs dann prüfen ob "isRoot" => No? => Error.

Warnung! Spoiler!

Und laut Dokumentation wäre dies demnach auch nicht möglich:
Code:
User.prototype.isOnlineInSubChannel = function(includeSelf) { // change the default behavior and act like "false" if undefined or anything else except true
  if (!(this instanceof User.prototype)) throw new TypeError('No user object');
  return !!KnuddelsServer.getAppAccess().getOwnInstance().getAllInstances(includeSelf === true).filter(function(appInstance) {
    return !!appInstance.getOnlineUsers().filter(function(user) {
      return this.equals(user);
    }.bind(this)).length;
  }.bind(this)).length;
};

Geht aber Problemlos und das Ergebnis ist genau das, was erwartet wird. Eine einfache Prüfung ob Nutzer im Tochter Channel ist.

Nun hab ich noch weitere Fragen zu dem Thema die inzwischen aufgekommen sind: Bekommt die App im Tochterchannel den Status "RootAppInstance" wenn der eigentliche RootChannel geschlossen wird aufgrund mangelender Nutzerzahlen?
Dies wäre zwar ein sehr selten auftretender Fall, aber ich möchte gerne wissen, wie und ob dieser berücksichtigt wurde und auch ob dieser überhaupt auftreten kann.

Falls diese nicht berücksichtigt wurde, könnte dieses Verhalten nämlich Worker beenden die ausschließlich im RootChannel laufen und teile der App funktionsunfähig machen. All dies geht nicht aus der Dokumentation hervor.

MfG
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879249 - 10.12.2017, 14:11:11
W a n n a b e - M o d e l

Registriert: 30.06.2012
Beiträge: 738
Zitat:
Und du verwendest .equals(), was es laut Doku gar nicht gibt. Also auch hier liegt eine Fehlerquelle.


Bei der Qualität der Dokumentation würde mich sowas aber auch nicht stören. Da sind einige Dinge nicht vorhanden, die aber teils auch von euch schon bei den Entwickler-Treffen empfohlen wurden, die im Uservoice/Wiki als fertig deklariert sind usw.
Wenn etwas nicht in der Doku ist, kann der Grund bei euch genau so gut lauten "es hatte niemand Zeit/Lust es einzutragen".

Zitat:
Du sollst ganz dringend an deiner Diskussionsart arbeiten. Die ist Respektlos und abgesehen davon ohne Hand und Fuß.


Das kann man Dir in vielen Fällen genau so empfehlen. Die eigene Nase und so.

Zitat:
Und wenn es nicht in der Doku steht, hat es in der Regel einen sehr guten Grund.


Die Doku ist ziemlicher Schmutz. Und wie schon erwähnt: Das ist nicht die einzige Funktion die nicht vorhanden ist. Das trifft auf einige zu, die aber trotzdem offiziell empfohlen werden. Bedeutet also gar nichts.

Zumal es doch vor allem darum geht, dass Funktionen nicht das als Rückgabewert haben, was man erwartet. Und davon gibt es in der API dutzende Beispiele.

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: W a n n a b e - M o d e l] - #2879265 - 10.12.2017, 17:37:09
IgelchenM
​Laubhaufenbewohner

Registriert: 10.02.2005
Beiträge: 1.413
Ort: Bochum
Zitat:
Und wenn es nicht in der Doku steht, hat es in der Regel einen sehr guten Grund.

Die Doku ist ziemlicher Schmutz. Und wie schon erwähnt: Das ist nicht die einzige Funktion die nicht vorhanden ist. Das trifft auf einige zu, die aber trotzdem offiziell empfohlen werden. Bedeutet also gar nichts.

Zumal es doch vor allem darum geht, dass Funktionen nicht das als Rückgabewert haben, was man erwartet. Und davon gibt es in der API dutzende Beispiele.


Dann wäre es schön, wenn alle Methoden, die nicht in der Doku dokumentiert sind hier mal aufgezählt werden. Kann auch gerne via /m passieren. Denn bis jetzt hatte sich genau 1 User bei mir gemeldet bzgl. nicht dokumentierter Methoden. Ich möchte aber trotzdem der Vollständigkeit halber anmerken, dass es um Methoden geht. Nicht um kCode oder sonstige Spielereien.
_________________________
Wo zum Teufel ist dieser Wayne wenn man ihn braucht?!

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: IgelchenM] - #2879281 - 10.12.2017, 19:32:46
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Das ist aber genauso nicht möglich. Dafür müssten die Klassen und Objekte erstmal richtig abrufbar sein um all diese auch nachzuprüfen.

http://developer.knuddels.de/docs/classes/DiceConfigurationFactory.html z. B. unterstützt nicht mal die Standardmethoden wie toJSON oder toString und hat keinen prototype von Haus aus deklariert. Dies wurde auch schon mehrfach angesprochen. (Bitbucket, UserVoice...)

Wenn man alleine ne einfache Loop über KnuddelsServer laufen lässt sieht man, das da schon schon weitaus mehr Eigenschaften sind als überhaupt in der Dokumentation stehen, einige sind depracted, einige undocumented, andere einfach nur die Werte von den gettern.

Warnung! Spoiler!
Code:
[appVersion, string], // nicht dokumentiert, hat getter, deprecated
[getRootAppUid, function], // nicht dokumentiert, möglicherweise deprecated da appInfo hinzu kam und alle anderen Method diesbezüglich auch ausgelagert wurden
[appContentBuilder, object], // nicht dokumentiert
[channel, object], // nicht dokumentiert, hat getter
[getAppAccess, function], // dokumentiert, deprecated
[appDeveloper, object], // nicht dokumentiert, hat getter, deprecated
[appUid, number], // nicht dokumentiert, möglicherweise deprecated da appInfo hinzu kam und alle anderen Method diesbezüglich auch ausgelagert wurden
[fullSystemImagePath, undefined], // nicht dokumentiert, hat getter
[textFilter, object], // nicht dokumentiert, wird von einigen String.prototype genutzt, z. B. "textFilter.isOk"
[appRevision, number], // nicht dokumentiert, hat getter
[clearTimeout, function], // nicht dokumentiert
[appId, string], // nicht dokumentiert, möglicherweise deprecated
[getAppUid, function], // nicht dokumentiert, möglicherweise deprecated
[testSystem, boolean], // nicht dokumentiert, hat getter, möglicherweise deprecated
[knuddelPot, undefined], // nicht dokumentiert, hat getter
[fullImagePath, undefined], // nicht dokumentiert, hat getter
[require, function], // nicht dokumentiert, ist die require Funktion die global bereitgestellt wird als function require();
[externalServerAccess, object], // nicht dokumentiert, hat getter
[getTextFilter, function], // nicht dokumentiert
[toplistAccess, object], // nicht dokumentiert, hat getter
[nickCorrectCase, undefined], // nicht dokumentiert, hat getter
[getAppContentBuilder, function], // nicht dokumentiert, nirgends. Als ob "AppContentBuilder" nicht existiert. Eine suche in der API Doku liefert kein Ergebnis
[userAccess, object], // nicht dokumentiert, hat getter
[getAppRevision, function], // nicht dokumentiert
[interval, undefined], // nicht dokumentiert
[defaultBotUser, object], // nicht dokumentiert, hat getter
[appInfo, object], // nicht dokumentiert, möglicherweise deprecated & verschoben nach AppInstance
[appManagers, object], // nicht dokumentiert, möglicherweise deprecated & verschoben nach AppInstance/AppInfo
[clearInterval, function], // nicht dokumentiert
[timeout, undefined], // nicht dokumentiert
[setInterval, function], // nicht dokumentiert
[hashCode, function], // nicht dokumentiert, Basic Rhino Function
[appAccess, object], // nicht dokumentiert, hat getter
[requireFramework, function], // nicht dokumentiert  function requireFramework() {/* void requireFramework(java.lang.String) */}
[appName, string], // nicht dokumentiert, möglicherweise deprecated & verschoben nach AppInstance/AppInfo
[appProfileEntryAccess, object], // nicht dokumentiert, hat getter
[userId, undefined], // nicht dokumentiert, möglicherweise deprecated durch userAccess
[chatServerInfo, object], // nicht dokumentiert, hat getter
[rootAppUid, number], // nicht dokumentiert, möglicherweise deprecated & verschoben nach AppInstance/AppInfo
[appServerInfo, object], // nicht dokumentiert, hat getter
[setTimeout, function], // nicht dokumentiert
[equals, function], // nicht dokumentiert, Basic Rhino Function
[persistence, object], // nicht dokumentiert, hat getter
[toString, function], // nicht dokumentiert, standard Funktion wird überschrieben, sollte dokumentiert werden.
[allKnuddelPots, object], // nicht dokumentiert, hat getter
[defaultLogger, object], // nicht dokumentiert, hat getter
[user, undefined], // nicht dokumentiert, möglicherweise deprecated und verschoben nach UserAccess
[javaClassName, string], // nicht dokumentiert, Basic Rhino Function
[prototype, object], // nicht dokumentiert, benötigt aber auch nicht unbedingt eine Dokumentation
[toJSON, function] // nicht dokumentiert, nicht auflistbar, standard Rückgabe wird aber überschrieben (trifft auf alle Objekte innerhalb der API zu, gibt 'möglicherweise' den javaClassName zurück.)

Dies alleine betrifft KnuddelsServer, werte die einen Getter haben, müssen nicht unbedingt extra erläutert werden, ich habe sie dennoch mit aufgeführt.

Und das sieht bei allen bereitgestellten Klassen/Objekten ähnlich aus.

Es gibt nur wenige bei denen wirklich alles aufgeführt ist was abrufbar ist.

MfG
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: IgelchenM] - #2879290 - 10.12.2017, 20:43:16
W a n n a b e - M o d e l

Registriert: 30.06.2012
Beiträge: 738
Zitat:
Dann wäre es schön, wenn alle Methoden, die nicht in der Doku dokumentiert sind hier mal aufgezählt werden.


Ich verzichte. Und ich erkläre Dir auch gerne mal ganz klar warum:

1. Es wurden schon öfter - auch auf den Treffen - fehlerhafte Dokumentationen und fehlerhafte Methoden gemeldet - passiert ist da dann aber nie was.
2. Ich erinner mich auch daran, dass man das ganze mal überarbeiten wollte und dafür freiwillige suchte und wir uns dazu auch mal zu 4. in einem Channel unterhielten. Das ist nun Monate her - auch hier passierte nichts mehr.

Die Probleme sind doch alle bekannt, es passiert nur einfach nichts und wenn man sich freiwillig meldete um dabei zu helfen die Fehler auszubessern wird man auf die lange Bank geschoben um später so zu tun als wüsste man von alle dem nichts?

Sorry, die Konsequenz ist nun ganz klar: Findet eure Fehler alleine - oder sucht euch andere dumme, die euch nachrennen und sehnsüchtig darauf warten kostenlos für euch zu arbeiten.

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879295 - 10.12.2017, 21:28:54
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 123
Ort: RLP, DE
Und noch mehr:
User
toString // standard wird überschrieben, gibt selben Stringwert zurück wie getNick()
setLigaTipPoints // undokumentiert, gilt auch für BotUser
ligaTipPoints // undokumentiert, gilt auch für BotUser
authenticityClassification // wirft jedes mal beim abrufen eine Warnung, welche in keinster Weise abgefangen werden kann. WARN: Restricted access to: com.knuddels.apps.user.AuthenticityClassification: [[ServiceNotAvailable]] - Dies trifft auch auf andere Objekte zu siehe z. B. require() das nicht mit try/catch ausgewertet werden kann.)
toJSON // undokumentiert, wird nicht aufgelistet, gibt möglicherweise javaClassName zurück.

All diese Dinge können selbst einfach geprüft werden in dem man z. B. Object.keys(KnuddelsServer.channel) nutzt und ein paar Grundkenntnisse mitbringt. Zudem ist es die Aufgabe, von demjenigen der die API bereitstellt für eine Dokumentation dieser zu sorgen. Deshalb werde ich hier keine weiteren ausführlichen Beispiele diesbezüglich bringen. Jeder der sich ein wenig mit der API auseinandergesetzt hat, hat diese Lücken darin bereits bemerkt. (Ich werde sie dennoch vermerken, wenn ich auf einzelne Punkte stoße, aber ich gehe garantiert nicht alle Klassen einer API durch weil der Anbieter da Dinge versäumt hat.)

Andere Dinge die auch API relevant sind:
Aktuelles Verhalten von require:
- Wirft nen Fehler an AppLogs der nicht ausgewertet werden kann von der App selbst, wenn die Datei im Filesystem nicht existiert
- require() bedeuted für mich, diese Datei ist zwingend erforderlich => wenn nicht gefunden => Fehler zurückwerfen der abgefangen und ausgewertet werden kann.
- Im Vergleich dazu wäre: include() => versuche Datei zu laden => nicht gefunden? => gib ne Warnung aus, das wars.

Es besteht keine Möglichkeit um Dateien aus dem FileSystem auszulesen, dies wäre aber nützlich vor allem bei Dingen mit SEHR viel Textinhalt (zufällige vorformatierte Texte, lange Texte, whatever) , dies im RAM oder in der Persistenz zu speichern ist einfach überflüssig. 'n simples File.exists() & File.getContent() wäre so enorm hilfreich.
So könnte man auch für die hinterlegte Bilder im www Ordner z. B. die Headerdaten im JS auslesen und die richtige Breite/Höhe für diverse Situationen nutzen ohne diese statisch zu speichern.

Sowohl beim UserVoice als auch bei BitBucket hat man das Gefühl: "Es interessiert keine Sau, ob dort was gemeldet wurde.".
Dinge stehen über mehrere Monate hinweg einfach als "New" drin. Im Bugsforum z. B. wird wenigstens einfach vermerkt 'Ist weitergegeben.' und das bedeuted ja in den meisten Fällen, dass es ab dem Moment im BTS steht und sich 'bei Gelegenheit' darum gekümmert wird.
Egal ob ein Fehler kritisch ist, maginal oder es gar nur eine Anregung ist. Sie bleiben unberührt und auch wenn Nutzern dadurch unter umständen die Leistung verwährt wird.
Dann gibt es noch die Blocker wie ?-Channel. Die App selbst erfährt nie, ob die Nachricht nun gesendet wurde, oder nicht. Vorzugsweise tritt dies auf bei Nachrichten an mehrere Nutzer. Also BotUser.send...('foo',[user,user,user]); zu und ist nicht sonderlich nützlich umgesetzt. Es wäre dann in so einem Fall besser z. B. ein "false" zurückzugeben sodass man dann alle Nutzern einzeln anschreibt oder aber den, der im ?-Channel ist einfach direkt ignoriert. Diese Limitierung trifft aber auch auf normale Nutzer zu und ist wohl Serverseitig. Allerdings sollten sich BotUser da anders verhalten als normale Nutzer.

PostMessages können an den HandyClients nicht mal geöffnet werden (werden als leere Nachricht oder gar nicht erst angezeigt), deshalb nutzen einige inzwischen schon KCode mit Channel /go-Verlinkung als Betreff um den Nutzer zu täuschen (Oh btw, dies ist dann sogar eine Verletzung der AGB, aber ich kann es dahingehend sogar nachvollziehen, wenn dies einige machen), denn es gibt relativ viele Nutzer, die nur mit Handy hier aktiv sind.

MfG
_________________________
one step closer to world domination

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879339 - 11.12.2017, 04:55:39
IgelchenM
​Laubhaufenbewohner

Registriert: 10.02.2005
Beiträge: 1.413
Ort: Bochum

1. Es wurden schon öfter - auch auf den Treffen - fehlerhafte Dokumentationen und fehlerhafte Methoden gemeldet - passiert ist da dann aber nie was.
Alle mir gemeldeten und/oder bekannt gewordenen fehlerhaften Dokumentationen wurden an die jeweiligen Stellen weiter gegeben. Wenn allerdings wie auch immer Methoden gefunden werden, die nicht in der offiziellen Dokumentation angegeben werden, kann man davon ausgehen, dass diese speziell für bestimmte Projekte zur Verfügung gestellt wurden und nicht für die breite Masse gedacht sind (Stichwort setLigaTipPoints).


2. Ich erinner mich auch daran, dass man das ganze mal überarbeiten wollte und dafür freiwillige suchte und wir uns dazu auch mal zu 4. in einem Channel unterhielten. Das ist nun Monate her - auch hier passierte nichts mehr.
Es ist richtig, dass diesbezüglich Überlegungen im Raum standen und Möglichkeiten gesucht wurden das Vorgehen zum Thema User Apps zu überarbeiten. Dies ist allerdings auch bereits seit November umgesetzt. Nur auf eine andere Art und weise. Damals ging es um mögliche Ideen, wie man das Thema in Angriff nehmen könnte. Wer bei den Entwicklerrunden aufgepasst hat, dem dürfte auch nicht entgangen sein, dass inzwischen Fehler bzgl. der API nach und nach in das BTS (Bug-Ticket-System) von Knuddels eingepflegt werden, damit eine schnellere Bearbeitung / Behebung der Fehler umgesetzt werden kann.

Antwort auf: Sephiroth ME

Sowohl beim UserVoice als auch bei BitBucket hat man das Gefühl: "Es interessiert keine Sau, ob dort was gemeldet wurde.".
Dinge stehen über mehrere Monate hinweg einfach als "New" drin. Im Bugsforum z. B. wird wenigstens einfach vermerkt 'Ist weitergegeben.' und das bedeuted ja in den meisten Fällen, dass es ab dem Moment im BTS steht und sich 'bei Gelegenheit' darum gekümmert wird.
Richtig, darum wird auch aktuell nach und nach (wie es die Zeit zulässt) alle angesammelten Tickets ins BTS einzutragen. Dies ist allerdings etwas, was gewissenhaft und ordentlich passieren muss, da ansonsten wenn das nicht ordnungsgemäß gemacht wird, das BTS unnötig verstopft und es keiner beteiligten Partei (Knuddels als auch den Entwicklern / Usern) etwas bringt.
_________________________
Wo zum Teufel ist dieser Wayne wenn man ihn braucht?!

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Sephiroth ME] - #2879349 - 11.12.2017, 07:33:52
Vampiric Desire
Chann​elMas​ter​

Registriert: 15.09.2013
Beiträge: 1.673
Antwort auf: Sephiroth ME

setLigaTipPoints // undokumentiert, gilt auch für BotUser
ligaTipPoints // undokumentiert, gilt auch für BotUser

Das kann nicht dein Ernst sein? Die Funktion habe ich damals als LigaTipps Programmierer bekommen, um im Channel Fußball die Ligatipps App umzusetzen und die Punkte ins Profil einzutragen. Diese Funktion ist undokumentiert, weil ihr die 1. nicht benutzen könnt und 2. ihr auch kein Nutzen dafür habt. Es sei denn ihr programmiert zufälligerweise die LigatippsApp für Knuddels.


Ohne jetzt auf deine weiteren Meckerdinger einzugehen, wie z.B. toString auf User, ist immer wieder ersichtlich, dass man hier nur nach fadenscheinigen Gründen sucht....


Niemand sagt die API und Doku ist perfekt. Aber gesunden Menschenverstand darf man an den Tag bringen. Eine Funktion ist nicht dokumentiert? Dann kann man auch nicht über deren falsche Funktionsweise meckern. Du gehst einfach davon aus: SO MUSS ES SEIN

Nein, muss es nicht.


Zitat:

Es besteht keine Möglichkeit um Dateien aus dem FileSystem auszulesen, dies wäre aber nützlich vor allem bei Dingen mit SEHR viel Textinhalt (zufällige vorformatierte Texte, lange Texte, whatever) , dies im RAM oder in der Persistenz zu speichern ist einfach überflüssig. 'n simples File.exists() & File.getContent() wäre so enorm hilfreich.
So könnte man auch für die hinterlegte Bilder im www Ordner z. B. die Headerdaten im JS auslesen und die richtige Breite/Höhe für diverse Situationen nutzen ohne diese statisch zu speich

Und das ist warum falsch? Es ist ein Vorschlag. Den kann man machen - hat aber nichts mit dem Thema zu tun.


Zitat:

Sowohl beim UserVoice als auch bei BitBucket hat man das Gefühl: "Es interessiert keine Sau, ob dort was gemeldet wurde.".
Dinge stehen über mehrere Monate hinweg einfach als "New" drin.

Hey - Hier sind wir einer Meinung. Habe vor 2 Wochen glaube ich IgelchenM eine Liste mit schließbaren Threads schonmal gegeben, die Obsolete sind. Er wollte die Liste intern absprechen und dann entsprechend markieren im UserVoice.


Das Problem was wir aber haben, ist nicht inhaltlich. Ich gebe dir Recht dass equals anders funktionieren sollte. Ohne Frage. Aber die equals Funktion existiert als solches nicht. Daher ist sie auch nicht Dokumentiert und somit funktioniert sie natürlich nicht falsch - Nur nicht so, wie du es gerne hättest. Aber hier einfach selber Prototypen und mit getAppUid abfragen (Was übrigens eine ZAHL ist und kein String) - Diese ID ist einzigartig für jede AppInstanz.




IgelchenM ist sehr engagiert als Apps-TL - Leider aber mehr oder weniger allein gelassen. Am besten kann man ihn derzeit unterstützen, wenn man ihn auf sowas direkt anspricht - statt hier mit zweifelhaften Argumentationen
alles negativ darzustellen. Meiner Erfahrung nach antwortet IgelchenM immer zeitnah.


Bearbeitet von Vampiric Desire (11.12.2017, 07:34:58)
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: UserApps API: AppInstance.equals() Methode [Re: Vampiric Desire] - #2879395 - 11.12.2017, 14:00:32
W a n n a b e - M o d e l

Registriert: 30.06.2012
Beiträge: 738
Zitat:
Alle mir gemeldeten und/oder bekannt gewordenen fehlerhaften Dokumentationen wurden an die jeweiligen Stellen weiter gegeben


Das mag sein und dennoch passiert dort einfach viel zu selten etwas.

Zitat:
Es ist richtig, dass diesbezüglich Überlegungen im Raum standen und Möglichkeiten gesucht wurden das Vorgehen zum Thema User Apps zu überarbeiten. Dies ist allerdings auch bereits seit November umgesetzt. Nur auf eine andere Art und weise.


Da es dazu keine besonderen Informationen gab und gibt (außer, dass Fehler im BTS gemeldet werden), kann man ja davon ausgehen, dass ihr das alleine regeln wolltet. Und genau diese Möglichkeit will ich euch nicht nehmen. Also macht ihr mal.

Zitat:
IgelchenM ist sehr engagiert als Apps-TL - Leider aber mehr oder weniger allein gelassen. Am besten kann man ihn derzeit unterstützen, wenn man ihn auf sowas direkt anspricht - statt hier mit zweifelhaften Argumentationen
alles negativ darzustellen. Meiner Erfahrung nach antwortet IgelchenM immer zeitnah.


Das mag alles sein. Ändert aber leider nichts daran, dass dennoch nichts passiert. Das mag vielleicht nicht direkt sein Fehler sein trotzdem ist das ein ziemliches Problem. Und da muss man sich dann auch nicht mehr wundern, wenn die Leute einfach kein Nerv mehr haben irgendwas zu detailliert zu melden oder Hilfe anzubieten.

[zum Seitenanfang]  
Seite 1 von 2 1 2 > alle


Moderator(en):  unamiable