mutablearry probleme

  • Ich sage, glaubt es einfgach, weil ihr allein schon die Voraussetzungen nicht glaubt. C ist nun mal das zentrale Element und das akzeptiert ihr nicht. Und wenn dann so einwürfe wie "machs doch mit ner TableView" kommen, dann merke ich dass dass es sinnlos ist, es erklären zu wollen. Nichts gegen die Tips, sie sind ja auch löblich, aber doch bitte nicht immer wieder. Ich habe mich damit echt lange befasst, vielleicht mag ich ja strohdumm sein und sonstwas, aber alleine nach dieser Zeit und allen versuchen sollte ich es ein klein wenig besser wissen. Ich akzeptiere andere Meinungen und ich akzeptiere auch, dass ich hier keinen überzeugt habe. Aber ich akzeptiere nicht, dass meine, so glaube ich, recht sachliche argumentation durch irgendwelche formalen Dinge komplett zerschlagen wird. Ja, mag sein, dass ich da ungenau war, aber es fällt mir nicht leicht, hier und jetzt an mich zu halten, deine Aussage hatte auch den Anschein eines Totschlagarguments und dass passt mit einem muss gut zusammen.

    Außerdem hab ich nicht in meinen Beiträgen gesagt, dass ihr mir glauben müsst, sondern bitte sollt! Wollen wir uns jetzt verbal fertig machen? Zitieren ist wohl auch nicht deine Stärke? is gut jetzt.

    Um mal wieder halb-sachlich zu werden. Ich habe ein Beispiel eingebracht. Ich habe von einem text mit 500.000 Wörten gesprochen. Du hast das beispiel dadurch erweitert, dass es im Schnitt > 100 (in worten: über 100) Wörter / Absatz sind - in einem stinknormalen Buch (meine Software ist für stinknormale Bücherschreiber) - kommst du auf 500 Absätze, das sind lt. deiner Schlussfolgerung 500 Absätze. Soweit einverstanden? Dann habe ich gesagt, wenn ein Absatz mehr als 100 Wörter hat (haben muss - blah), dann passt er nicht auf eine Zeile und wird umgebrochen. Wen du jetzt mal Textedit nimmst, dann passen 15 Wörter auf eine Zeile, von mir aus lass es 20 sein. Daraus ergibt sich, dass ein Absatz auf der Basis der 100 Wörter / Absatz ungefähr 5 Zeilen braucht und man somit 5* so viele Array-Einträge pro Absatz braucht. Das mach nach Adam Ries 2500 Einträge im gesamten Array. Das ist nicht unbedeutend mehr und ist (mal nich mathematisch korrekt gesehen) auch mit rund 500 Einträgen abgetan. Und auch das ist noch im Bereich das verträglichen. Was aber nicht im Bereich das verträglichen liegt ist die Zeit, die der NSLayoutManager braucht, um den Text auszulegen. Es ist die summe aller Zeiten und das ist einfach nicht mehr angenehm.

    Was ich in der Zeit auch ausgemacht habe - ein weiterer grund, von NSTableView und NSMutableArray zu weichen - ist, dass es anscheinend eine gewisse Höchstzahl an Verarbeitbaren Zeilen gibt. Ich weiß nicht, wie hoch sie liegt aber ich schätzte sie bei 10000 oder so. Ich habe hier einen text mit 390.000 Wörtern (durchschnittliche Länge 6,5 Zeichen) auf 34.000 Absätze verteilt. Das ist zwar nicht unser beispiel aber das soll erstmal egal sein. Das sind 11,5 Wörter / Absatz. Nehmen wir an, wir formatieren diesen Text als roman, da passen auch nicht mehr auf eine Zeile, also kann man dieses Beispiel verwenden, wenn man Absatz=Zeile nimmt. Der NSLayoutManager braucht auf meinem Rechner (Dual 1,42 GHz G4) 30 Sekunden, um den kompletten Text auszulegen. Stell dir das auf einem G3 233 vor (z.B. ein altes Powerbook). Der arme wird dort (ich rechne mit, da layoutmanager keine MP unterstützen, einer CPU) mindestens 4 geschlagen Minuten auf das Öffnen seiner Datei warten - das kannst du keinem zumuten.

    -> es schreit nach anderen Methoden. Wenn hier irgend einer noch interesse hat, *könnte* ich mich zu meinem Werdegang zu meiner jetzigen Fassung äußern. Aber es muss ernst gemeint sein und nicht, um mich irgendwie zu ärgern ;)

    Hey Tom, lassen wir's gut sein? Ich habe unsauber zitiert und du glaubst weiter an die Speed von cocoa und dass man kaum C-Kenntnisse haben sollte / braucht und beide leben glücklich bis wir uns wieder mal in die wolle kriegen (*g*, ich sehen die diskussion mit michael)

    Max
  • Ich verstehe dich immer noch nicht. Du willst Absätze zählen und hast ein Array über Zeilen? Klar, dass das nicht funktioniert!

    Ich habe den Eindruck, dass es dir genauso ergangen ist wie mir. Es hat nicht gleich mit Cocoa funktioniert. Das lag aber bei mir daran, dass ich es noch nicht gut genug kannte. Du scheinst dann wieder dir bekannte Methoden verwendet zu haben. Gut. Kan man so machen. Bloß soll man dann nicht sagen, dass die andere Möglichkeit nichts taugt, weil man sie nicht kennt.

    Ich habe mich dann halt verbissen und gemerkt, dass man mit ein bisschen Nachdenken und viel Probieren sein Ziel findet. Ich hatte tatsächlich noch nie ein Performance-Problem, das ich nicht beseitgen konnte. Und ich sitze hier an einem G3/600-384.

    Und zur Diskussion: Ja, wenn jemand eine andere Meinung hat, will ich genau wissen warum. Und da hake ich auch nach. Denn ich unterstelle mal, dass jeder Argumente für seine Meinung hat. Und glauben, vertrauen usw. sind keine Argumente, ebensowenig wie dien Stil/mein Stil. Damit kann ich nichts anfangen. Da erübrigt sich wirklich jede Diskussion. Dann soll man doch bitte gleich sagen, dass man es sich eben so angewöhnt hat und es nicht anders darstellen. Immerhin lesen hier Dritte mit, die ein Anrecht darauf haben, dass die dargestellten Äußerungen fundiert sind.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Dass es bei mir nicht mit Cocoa gibt lag nicht daran, dass ich Cocoa nicht kannte (ich habe davor schon Jahre mit Cocoa gearbeitet), ich kannte es nicht sonderlich gut, aber für das, was ich machen wollte, war es ausreichend. Und es war nicht schnell genug. Das war es einfach nicht und wird es auch nicht in 100 Jahren werden - wenn man mal von der Entwicklung der Computer absieht ;) Dass ich jetzt die schnellere Methode ohne Cocoa umzusetzen vermag, liegt daran, dass ich Cocoa jetzt _besser_ kenne und genau weiß, wo ich ansetzen muss, um es am _wenigsten_ und doch am _besten_ zu nutzen.

    Nochmal zur Erklärung: Ich habe mal einen screenshot angehängt, damit es etwas anschaulicher wird. Wie du siehst, es werden Absätze gezählt, aber man muss die Zeilen beachten. Absatz != Zeile, aber man kann Absätze nicht ohne Zeilen zählen. Der Große Absatz hat 105 Wörter bei einem Durchschnitt von 5,7 Zeichen / Wort. Er ist 8 Zeilen lang, bei einer sehr kleinen Schriftgröße. Dafür bräuchte man dann in dem Array, dass auf der linken Seite die Zahlen darstellt also 8 Einträge mehr, als du brauchst, um nur die Absätze zu zählen.

    Kannst du mal nen Link zu nem Programm, das du geschrieben hast, posten? Würde mich ernsthaft mal interessieren...

    Max

    Edit: PS: Vielleicht hab ich mich ja auch mit dem Wort "zählen" verrannt. Auf jeden Fall meinte ich diese Methode.
  • Ich verstehe nicht, dass du Zeilen zählen musst. Offenbar hast du doch ein Absatztrennzeichen. Ich habe das schon so verstanden.

    Nur ist immer immer noch nicht klar, warum du nicht ein Array von Absätzen hast. Ich verstehe das einfach nicht, sorry. Jedesmal wenn das Absatzzeichen eingegeben wird, fügst du einen Verweis in das Array ein. Das Array hat dann 500, meinetwegen auch 1000 Einträge. Wenn du lieber eine Liste hast, dann nimm halt eine Liste. Ich mutmaße ohnehin, dass NSMutableArray intern zumindest als Kachelliste implementiert ist:

    - es gibt die Möglichkeit an einer Stelle einzufügen.
    - Man kann eine erwartete Größe angeben

    Ich schreihbe gerade an etwas schönem,. Du bekommst auch als erster eine shareware version Kanst dich drauf verlassen. :)

    Aber ich glaube nicht, dass ich meine Kenntnisse von Cocoa unter Beweis stellen muss. Du kennst meine Artikel.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Mich würde einfach der Typ von Programm interessieren, den du so schreibst.

    Und wie im Henkers namen willst du auf der linken Seite die Nummern realisieren, wenn du eine TableView verwenden willst? da brauchst du für jede Zeile nen Eintrag. Zeilenhöhe kannst du nicht anpassen, weil wir ja die Auslassungszeichen “…“ haben wollen, wo sich ein Absatz befindet. NSMutableArray ist garantiert ne Liste, aber das ist erstmal net so wichtig...

    Und wegen den Artikeln *g*: In theory there's no difference between theory an praxis, but in praxis there is.

    Max
  • Ah, hatte ich hier noch gar nicht erwähnt?

    Es geht um eine Software zur Eingabe, Simulation und Routing digitaler Schaltungen - vordergründig.
    Hintergründig geht es darum, möglichst viele Cocoa-Konzepte kennenzulernen. Ich mache das ja zur Unterhaltung. (Ja, das unterhält mich.)

    Ich kann nicht in den TableView eine eigene Cell implementieren, die das anders darstellt? Also, ich habe mich mit Cells noch nicht näher beschäftigt, aber ich glaube schon, dass das geht.

    BTW: Leute, die die Theorie nicht zur Kenntnis nehmen, weil in der Paxis ohnehin alles anders sind, sind schlechte _Praktiker_. Eine Theorie kann ich nur über den haufen schmeißen, wenn ich sie kenne. Ich mache auch nicht alles sauber. Aber ich weiß, warum
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • hey, hey, hey, ich habe nicht gesagt, dass man keine theorie kennen muss. Aber die Praxis ist auch ein wichtiger Teil, nur Theorie nix gut.

    Naja, man könnte es so machen, wie du sagst. Aber denn käme schon wieder das nächste: du willst die Hintergrundfarbe der TableView ändern oder du willst über die erste zeile 3 pixel einfügen usw. Am ende kommst du zu dem Schluss, dass es mit einer TableView immernoch nicht so prickelnd ist. Außerdem hast du - wenn du das alles hinbekommst, was wirklich nicht einfach ist - dann immernoch das Problem, dass du am Anfang den ganzen Text layouten musst - wie würdest du das umgehen? Nur so rein interessenshalber...

    Max