Verfasste Forenbeiträge
-
AutorBeiträge
-
Mir geht es sowieso gar nicht darum, jemandem Vorwürfe zu machen und ich selbst zahle ja auch nichts. Und wenn die Software nicht leistet, was man benötigt, ist das ohnehin eine ganz andere Sache. Ich fand es nur gerade im englischen Forum schon hart, wie Leute, die das wirklich auf professioneller Ebene nutzen sagen, sie wäre von der Software abhängig und sie würden die Software lieben und die wäre total super, aber dafür bezahlen zu müssen, sei eine Unverschämtheit. Solche Software verschwindet irgendwann, weil die dahinter stehenden Leute eben doch Miete zahlen müssen und eben nicht alle Software-Unternehmen Milliarden scheffeln. Im englischen Forum steht dann auch, dass Livecode wohl größere finanzielle Schwierigkeiten hätte und demnach insgesamt auf der Kippe steht.
Ich denke, man sollte hier noch etwas Geduld haben. Die Wahrscheinlichkeit, dass da gar nichts mehr angepasst wird, halte ich für eher gering.
Gleichzeitig bin ich etwas überrascht über die extrem niedrige Zahlungsbereitschaft für eine angeblich so gute Software:
Im englischen Forum schreibt jemand, er würde seit Jahren die Serverstruktur des Unternehmens über Livecode betreiben und es wäre „Diebstahl“, „Betrug“ und „Spucken ins Gesicht“ (mehrere Posts zusammengefasst), dass das nicht mehr für lau möglich sein soll. Schließlich habe er einmal für 1 Jahr aus reiner Nächstenliebe eine Indylizenz bezahlt. Das Unternehmen kann tatsächlich nicht (€279 * Anzahl Komponenten) bezahlen für Software, auf der die IT-Infrastruktur basiert? Auf die Idee, mit solchen Preisvorstellungen bei Adobe anzutanzen würde keiner kommen…
Am Ende versuchen sie, nicht ganz zu Unrecht, etwas Geld einzunehmen von denen, die das Programm vollumfänglich nutzen, und nichts dafür bezahlen. Es kann kaum überraschen, dass man ein Unternehmen nicht zuverlässig finanzieren kann, aus freiwilligen Spenden und einmaligen Kickstarter-Beteiligungen. Produkte von Google sind auch nur deshalb kostenlos, weil Google alles beliebig quer finanzieren kann. Eine Gratisgarantie gibt es bei denen aber auch nicht.
Hallo Klaus, hallo Torsten,
ein bekanntes deutsches Sprichwort sagt: Sollte, Sollte, Fahrradkette …
Es sollte generell nicht so schwierig sein, etwas so simples zu machen, es sollten keine Schreibrechte nötig sein, um das ZIP im Lesemodus zu öffnen, es sollte eine Funktion geben, das ganze ZIP auf einmal zu entpacken, die Liste der Elemente sollte immer gleich sein, Dateien, die beim Entpacken im Documents-Ordner angelegt werden, sollten gespeichert werden, etc.
Mit einer separat, unabhängig vom Entpacken, angelegten Ordnerstruktur (die übrigens gespeichert wird) funktioniert es nun.
Vielen Dank für die Hilfe und die Geduld.
TimDanke Klaus, mit binfile lässt sich die Datei kopieren.
Bevor ich darüber nachdenke, wie ich Details optimiere, müsste ich klären, ob Livecode überhaupt ein geeignetes Werkzeug ist.
Das grenzt hier schon an Paranoia: Seit heute morgen enthält revZipEnumerateItems nur noch die Zeilen für Dateien, nicht mehr die für Ordner, obwohl die Ordner ja im Zip noch drin sind und mein Code die Liste nur ausliest, nicht verändert. Am Zip habe ich nichts geändert, am Code auch nicht. Alles, was nicht in Ordnern ist, wird auch entpackt.
Und ja, natürlich ist das lösbar, ich kann die Ordner auch aus den Dateizeilen ableiten oder auch ganz ohne die Liste erzeugen, die sind immer gleich. Aber ich muss halt wieder zunächst einen Schritt zurück und erst mal da was lösen. Das wäre auch alles ok, wenn halbwegs sicher wäre, dass es am Ende funktioniert, nur es spricht eigentlich wenig dafür und mit dem, was ich eigentlich machen möchte, habe ich nicht mal ansatzweise angefangen.
Wirklich speziell ist, wie ich mich mit jedem Schritt vorwärts, weiter vom Ziel entferne, insb. wenn das Ziel zu Beginn in meiner Wahrnehmung nur einen Schritt entfernt war.
Ich mache also:
put URL ("file:" & specialFolderPath("engine") & "/inhalt7.zip") into URL ("file:" & specialfolderpath("documents") & "/inhalt7.zip")
Die Datei kommt dann auch im entsprechenden Ordner an, ist aber zerstört.
Beim Versuch die Datei zu öffnen,
Windows: „Der Zip-komprimierte Ordner ist ungültig“
Android: „ziperr,Not a zip archive“Speziell ist auch, dass ich es fast schon als Fortschritt empfinde, dass der Fehler in beiden Umgebungen auftritt und nicht nur unter Android…
Hallo Torsten,
vielen Dank für den Tipp.
Mein Problem dabei ist: Ich produziere die HTML-Seiten mit einem Autorentool, so dass selbst eine simple Seite aus sehr vielen Dateien besteht und natürlich soll das ganze am Ende nicht nur aus einer einzelnen Seite bestehen.
Daher hatte ich die Idee, die Dateien in einem Zip zusammenzufassen, dies über „Copy files“ hinzuzufügen und dann in den „documents“ Ordner zu entpacken…
Schon mal wieder vorab: Unter Windows funktioniert es einwandfrei, unter Android scheitert es gleich am Anfang.
on mouseUp put (specialFolderPath("resources") & "/inhalt7.zip") into tArchive put (specialFolderPath("documents") & "/inhalt/") into dasergebnis create folder dasergebnis revZipOpenArchive tArchive, "read" put the result into fld "zeilen" put revZipEnumerateItems(tArchive) into tItems repeat for each line zipzeile in tItems if the last char of zipzeile ="/" then create folder dasergebnis & zipzeile end if end repeat put return & "1. Schleife" after fld "zeilen" repeat for each line zipzeile in tItems if the last char of zipzeile <> "/" then revZipExtractItemToFile tArchive, zipzeile, dasergebnis & zipzeile end if end repeat put return & "2. Schleife" after fld "zeilen" revZipCloseArchive tArchive set the URL of widget "Browser" to ("file://" & dasergebnis & "index.html") set the visible of widget "Browser" to true end mouseUp
Was bedeutet der Fehler: „ziperr,Can’t open file: Not a directory“?
Der weitere Code funktioniert natürlich nicht, wenn die Datei nicht geöffnet werden kann, nur „Not a directory“ bzw. „Kein Verzeichnis“ verstehe ich nicht.
Wird das ZIP nicht gefunden? Die Fehlermeldung müsste anders aussehen.
Livecode meint, das sei kein Zip? – Wie kommt es darauf? Ich habe das ZIP einmal mit Windows erstellt, einmal mit 7zip, nur falls die Zip-technik unterschiedlich ist.… und reine Frustration:
Es kann doch nicht so schwierig sein, eine HTML-Datei in einem Browser zu öffnen. Ich habe die App inzwischen ca. 250 Mal veröffentlicht und habe es bislang nicht geschafft, überhaupt etwas anzuzeigen. Ob die Seiten dann wie geplant funktionieren, ob man das irgendwie „schön“ machen kann, ob die Kommunikation zwischen Browser und App möglich ist, habe ich inzwischen aus der Projektbeschreibung gelöscht, nur „Irgendwas Anzeigen, was keine Fehlermeldung ist“ ist momentan das Ziel. Jetzt mögen manchen sagen: „Ja ok, aber die Idee eine HTML Seite im Browser anzuzeigen, ist wie bemannte Raumfahrt zum Pluto: In der Theorie leicht vorstellbar, in der Praxis dennoch absurd“, aber bislang dachte ich, das sei nichts besonderes.
Ich habe in Livecode insgesamt nur zwei Projekte bearbeitet, dies ist das zweite.
Für „One Code to rule them all.“ taucht mir „Unter Windows geht’s – unter Android nicht“ erheblich zu oft auf. Wenn der eine Ring so funktioniert hätte, wäre Sauron schnell vergessen gewesen:
„Ah ok, einen Moment noch, ich muss den Ring erst auf „Rohan“ umprogrammieren… Mist, „Mensch“ not supported – „Pferd“ not found. Can’t open „Nazgul“ critical error.“Hallo Torsten,
vielen Dank für die Antwort. Ich habe das ausprobiert, leider funktioniert das auch nicht, weil „ERR_FILE_NOT_FOUND“. Es wird ja auch gesagt, dass Dateien, die über „Copy Files“ hinzugefügt werden, unter specialFolderPath(„resources“) landen (klappt auch nicht) und dass unter Android …(„resources“) und … („engine“) gleich sind.
Hinzu kommt ja, dass der Pfad prinzipiell stimmen müsste, weil die Seiten mit dem selbst erzeugten Browser und specialFolderPath(„engine“) angezeigt werden. Nur eben, dass ich da die javascriptHandler nicht angefügt kriege.
Schönen Gruß
Tim… die Eigenschaft müsste „visible“ heißen, entweder true = sichtbar oder false.
Um etwas zu tun, wenn das Eingabefeld ausgewählt wird, gibt es
on openField
Danke Klaus, dann bleibe ich wohl besser bei copy. Es ist nur die absolute Ausnahme, dass ich bei Livecode von mehreren vergleichbaren Möglichkeiten zufällig die richtige erwische…
Hallo Klaus,
vielen Dank für den Tipp, unter Bluestacks funktioniert es. Man kann auch verschiedene Geräteprofile verwenden. Ob das jetzt bedeutet, dass die App überall funktioniert, ist hier auch nicht ableitbar, falls das denn überhaupt (annähernd) herausfindbar wäre.
Schönes Wochenende
TimEin Computergegner für Memory dürfte noch vergleichsweise einfach sein, da sich ja alles in einem sehr begrenzten Regelwerk abspielt.
Anfangen würde ich damit, den Prozess „Memory spielen“ in möglichst kleine Einzelschritte zu zerlegen, die man dann später per Code nachbauen würde:
1. Karte umdrehen
2. Prüfen, ob ich weiß, wo die dazu passende liegt
2.1 Falls ja, die passende umdrehen
2.2 Falls nein, andere Karte umdrehen
3. Prüfen, ob die beiden Karten gleich sind
3.1 Falls ja, Karten einsammeln, 1 Punkt addieren
3.2 Falls nein, Merken, wo die beiden Karten liegen
usw.Wenn der Gegner dran ist, dann eben nur „Merken, wo die beiden Karten liegen“ und anschließend – vor dem Aufdecken der ersten Karte – prüfen, ob ich weiß, wo ein Paar liegt.
Um dem menschlichen Spieler ein Chance zu geben, könnte man dem Computer noch ein Paar Schwächen einbauen, also z. B. ihn mit einer bestimmten Wahrscheinlichkeit vergessen zu lassen, wo eine bestimmte Karte liegt.
Dann bräuchtest Du noch eine Funktion, um die Karten am Anfang zufällig zu verteilen und eine Logik, die erkennt, ob alle Paare gefunden wurden.
Viel Spaß
TimHi Torsten,
vielen Dank, das funktioniert ja sogar noch besser als ich gehofft habe, spitze.
Nochmals Danke und viele Grüße
TimDie Frage war ja eigentlich: „Geht das überhaupt?“ Wenn nicht, könnte ich viele Varianten fehlerfreien Code schreiben und es „würde nicht klappen“ 😉
Ein gewisses Problem ist nämlich die Anzahl an Versuchen, die ich ausprobiert habe und die ich nicht mehr alle zeichengenau in Erinnerung habe. Neben einer ganzen Reihe an Versuchen mit dem normalen Livecode Field, habe ich mit dem Android Native Field:
1.
copy the text of widget „monat_daten“2.
select the text of widget „monat_daten“
copy3.
set the selectedRange of widget „monat_daten“ to „1,20“
copy4.
set the selectedRange of widget „monat_daten“ to „1,10000“
copy5.
set the selectedRange of widget „monat_daten“ to „1,“ & the number of chars in widget „monat_daten“
copyIn allen Fällen wird kein Text ausgewählt oder kopiert, sondern der Code abgebrochen. Insgesamt soll natürlich der gesamte Text der Variable übermittelt werden, wobei ich dann nicht weiß, wie lang der ist.
Im Grunde wäre mir egal, wie der Text die App verlässt. Das ganze in eine E-Mail zu packen, macht es den Nutzern eben sehr leicht auch von anderen Geräten darauf zuzugreifen. Die Zwischenablage wäre etwas universeller nutzbar. Mit mobileComposeMail habe ich es auch schon versucht, das hat bei mir aber kein Mailprogramm und daher auch keine E-Mail geöffnet, ansonsten wäre das natürlich eine gute Lösung. Da weiß ich aber den Code, den ich ausprobiert habe, nicht mehr. Wenn der Text in der Zwischenablage wäre, könnte ich selbst die E-Mail anlegen und dort einfügen.
Der PHP-Ansatz hingegen funktioniert einwandfrei, aber ich möchte eigentlich nicht, dass später alle 25 Mio Nutzer der App ihre Daten über meinen Server leiten. Das Prinzip bliebe das gleiche, auch wenn es nur 25 wären, was wohl realistischer wäre 😉
Danke und schönen Sonntag
TimIch habe zwar keine solche E-Mail Adresse, bin aber im Forum sehr wenig aktiv … von daher:
Danke an alle, die „nur Lesen“ hier nützlich machen.Schönen Gruß
Tim -
AutorBeiträge