Erfahrungen mit Racket

Die API-Dokumentation von Racket beginnt mir ernsthaft auf die Nüsse zu gehen. Ich habe durch Ausprobieren herausgefunden, dass ein text-field im Prinzip mit dem gleichen callback funktioniert wie ein button. Aber wie ich da jetzt die Keycodes auslese: Magie!
 
@ralli Koenntest Du bitte mal den o.g. code unter OpenBSD mit Mate ausprobieren, ob unter dem Text ein grosser leerer Abstand bis zum Fensterrand besteht? Siehe auch https://www.bsdforen.de/threads/erfahrungen-mit-racket.34483/post-305263
Sehr gerne, guckst Du hier:

Ergebnis.png


Also ich kann keinen großen leeren Abstand unter dem Text erkennen.
 
Die API-Dokumentation von Racket beginnt mir ernsthaft auf die Nüsse zu gehen. Ich habe durch Ausprobieren herausgefunden, dass ein text-field im Prinzip mit dem gleichen callback funktioniert wie ein button. Aber wie ich da jetzt die Keycodes auslese: Magie!
Da geht es Dir nicht anders als wie mir. Bisher habe ich (fast) alles herausgefunden und gelöst, aber vieles nur durch Versuch und Irrtum. Die API ist zwar technisch sehr gut, aber es fehlt an praktikablen Beispielen. Es gibt ja verschiedene Lerntypen, ich lerne sehr schnell, aber auch nur, wenn ich visuell ein praktisches Beispiel vor Augen habe, was ich problemlos schnell mal ausprobieren kann. Aber nobody ist perfekt. Tag für Tag komme ich weiter, desdo tiefer ich eintauche. Es ist viel, sehr viel Arbeit, aber es lohnt sich! Manchmal frage ich mich, wie lange jemand dafür braucht sich einzuarbeiten, der berufstätig ist und nur einen begrenzten Zeitraum zur Verfügung hat. Ich bin ja im Ruhestand und kann mich diesen Dingen durchaus mal 8 Stunden oder länger am Tag widmen. Da kommt man natürlich schneller voran.
 
Habe hier ein seltsames Verhalten:

Code:
; Callback-Verfahren für einen Klick auf die Schaltfläche button (Musik an)

             [callback (lambda (button event)
                         (process "mpg123 http://50.7.129.122:8433/"))])

Funktioniert, aber nach wenigen Minuten trennt er automatisch ohne mein Zutun die Netzwerkverbindung. Das ist nicht nur nervend, sondern ärgerlich und nicht akzeptabel. Im übrigen ist das gleiche Verhalten mit racket zu beobachten unter OpenBSD sowie FreeBSD.

Wenn ich hingegen dieses C Miniprogramm flower.c mit clang compiliere:

Code:
clang flower.c -o flower

funktioniert es einwandfrei.

Hier der C Quellcode:

Code:
#include <stdio.h>

int main()
{
    printf ("Flower Power Radio\n");

system("mpg123 http://50.7.129.122:8433/");

    return 0;
}

Was zum Teufel ist das wieder?

PS: clang habe ich natürlich unter FreeBSd benutzt und unter OpenBSD gcc.
 
Habe hier ein seltsames Verhalten:

Code:
; Callback-Verfahren für einen Klick auf die Schaltfläche button (Musik an)

             [callback (lambda (button event)
                         (process "mpg123 http://50.7.129.122:8433/"))])

Funktioniert, aber nach wenigen Minuten trennt er automatisch ohne mein Zutun die Netzwerkverbindung. Das ist nicht nur nervend, sondern ärgerlich und nicht akzeptabel. Im übrigen ist das gleiche Verhalten mit racket zu beobachten unter OpenBSD sowie FreeBSD.

Wenn ich hingegen dieses C Miniprogramm flower.c mit clang compiliere:

Code:
clang flower.c -o flower

funktioniert es einwandfrei.

Hier der C Quellcode:

Code:
#include <stdio.h>

int main()
{
    printf ("Flower Power Radio\n");

system("mpg123 http://50.7.129.122:8433/");

    return 0;
}

Was zum Teufel ist das wieder?

PS: clang habe ich natürlich unter FreeBSd benutzt und unter OpenBSD gcc.

Hast Du mal system anstelle process probiert?
 
Wenn ich system statt process benutze, verhält sich das racket Script wie ein VW Käfer, es läuft und läuft und läuft.....:)
 
Verhält sich Racket unter Windows jetzt als einziges Racket richtig oder falsch?
Das kann ich Dir nicht wirklich beantworten, vermute aber, das es unter Windows falsch dargestellt wird. Ob das auch mit den unterschiedlichen Zeilenenden zwischen Windows und Linux/BSD zusammenhängt, kann ich ebenfalls nur vermuten.
 
Funktioniert nicht. Ist dir dirpath kein String?
Nein. Es ist vom Typ path
Pfade und Strings sind in Racket unterschiedliche Dateitypen., wasauch sinnvoll ist möchte man Pfade plattformunabhängig darstellen.
Allerdings stehen Dir mit path->string und string->path zwei Funktionen zur Verfügung, um die beiden Formate hin und her zu konvertieren. Mit der Funktion ~a lassen sich auch beliebige Datentypen nach String wandeln.

@CrimsonKing:
Um Text in einem Dialog dazustellen gibts nicht nur die Möglichkeit mit message%
message% hat m.W. nach den Nachteil, dass es keinen Zeilenumbruch macht, wenn die Dialogbox verkleinert wird usw.

Die Alternative wäre ein Read-only text%-Field oder das browser Modul ( http://docs.racket-lang.org/browser/index.html?q=browser#(mod-path._browser) ) welches die Anzeige von HTML-formated Rich-text erlaubt.
Das bietet extra das hyper-frame-mixin welches eine Ableitung von dem normalen frame% ist.
 
Werde ich jetzt machen und dann berichten. Mir wurde von @Andy_m4 geraten, process zu benutzen.
Geraten ist wohl nicht ganz korrekt.
Der Unterschied zwischen den beiden ist:
system ist blockierend und die Ausführung des Racket-Programms wird erst fortgeführt, wenn das aufgerufene Programm beendet ist.
process arbeitet dagegen asynchron.

Funktioniert, aber nach wenigen Minuten trennt er automatisch ohne mein Zutun die Netzwerkverbindung.
Interessantes Phänomen das eine nähere Betrachtung verdient. Mal gucken.
 
Die Alternative wäre ein Read-only text%-Field oder das browser Modul ( http://docs.racket-lang.org/browser/index.html?q=browser#(mod-path._browser) ) welches die Anzeige von HTML-formated Rich-text erlaubt.

Danke. Bleibt die Frage, warum message% unter Windows anders aussieht.

Ich verstehe leider nicht ganz, was Du tun willst bzw. was das konkrete Problem ist.

Ich möchte auf jede Eingabe in einem text-field% reagieren (vielleicht wird da ein kleines Tool draus). Das geht zwar mit einem callback, aber ich weiß nicht, wie ich da zum Beispiel ein "Return" erkennen kann. Bei allen anderen Tasten ist das leicht: Den Text auslesen und das letzte Zeichen ist es dann. Aber "Return" ist kein im Text vorhandenes Zeichen.
 
Geraten ist wohl nicht ganz korrekt.
Ok, ich habe es dann selbstständig daraus geschlußfolgert, weil sich asynchron ja für meine Zwecke anbot. Das erreiche ich bei system aber auch mit dem & Zeichen, wenn es angehängt wird. DIe Klasse process ist trotzdem nicht uninteressant, nämlich dann, wenn mehrere Parameter benutzt werden oder pipes eine Rolle spielen. Wenn ich Unsinn schreibe, bitte intervenieren.... ich bin ja noch lange nicht so tief in der Materie als Du.
 
Ich möchte auf jede Eingabe in einem text-field% reagieren (vielleicht wird da ein kleines Tool draus). Das geht zwar mit einem callback, aber ich weiß nicht, wie ich da zum Beispiel ein "Return" erkennen kann. Bei allen anderen Tasten ist das leicht: Den Text auslesen und das letzte Zeichen ist es dann. Aber "Return" ist kein im Text vorhandenes Zeichen.
Das interessiert mich auch, aber ich kann nicht alles auf ein Mal machen, die Event Verarbeitung und Tastaturabfragen kommen aber zeitnah zu Zuge.
 
Ich möchte auf jede Eingabe in einem text-field% reagieren (vielleicht wird da ein kleines Tool draus). Das geht zwar mit einem callback, aber ich weiß nicht, wie ich da zum Beispiel ein "Return" erkennen kann. Bei allen anderen Tasten ist das leicht: Den Text auslesen und das letzte Zeichen ist es dann. Aber "Return" ist kein im Text vorhandenes Zeichen.
Vielleicht ist das das, wonach Du suchst?

Key Event

Das werde ich auch durcharbeiten müssen.
 
Theoretisch wahrscheinlich schon, praktisch habe ich aber keinen Peil, wie ich das benutzen soll. :confused:
 
Ich denke das ~a steht für die Konvertierung nach alphanumerisch, oder?
Na eher für die Konvertierung eines beliebigen Types nach String.
Ganz konkret ist es eigentlich eine Formatierungsanweisung vergleichbar mit printf in C.
siehe dazu auch:
http://docs.racket-lang.org/reference/strings.html?q=~a#(def._((lib._racket/format..rkt)._~7ea))

Ok, ich habe es dann selbstständig daraus geschlußfolgert, weil sich asynchron ja für meine Zwecke anbot.
Ja. Und eigentlich wäre es auch "the way to go".

DIe Klasse process ist trotzdem nicht uninteressant, nämlich dann, wenn mehrere Parameter benutzt werden oder pipes eine Rolle spielen. Wenn ich Unsinn schreibe, bitte intervenieren.... ich bin ja noch lange nicht so tief in der Materie als Du.
Ich bin ja zum Fragen beantworten da. Sozusagen der Co von midnight :-)

Also process ist keine Klasse, sondern eine Funktion. *korrigier*
Ansonsten gibt process ja auch mehrere Sachen zurück. Unteranderem auch stdin und stdout des gestarteten Prozesses. Man kann also dem Prozess so einfach was schicken (pipen) oder von ihm empfangen.

Ich habe ja so den leisen Verdacht, dass damit verbunden sind auch die von Dir beschriebenen Probleme zusammenhängen. Das wenn diese Werte nicht gehalten werden dann irgendwann der Garbage-Collector zuschlägt und denkt, dass wird nicht mehr gebraucht und sich das auf den Kindprozess niederschlägt.
 
Ich komme voraussichtlich nicht vor Sonnabend dazu, mir das Problem genauer anzusehen. Noch kannst du schneller sein. ;)
 
Zurück
Oben