Felix Riesterer: Mono - geeignet für command line application zu Browser?

Liebe Mitlesende,

neulich suchte ich eine geeignete Programmiersprache bzw. -umgebung, um plattformübergreifend ein Programm für den Desktopbetrieb (mit GUI) zu erstellen. Mittlerweile bin ich sehr davon überzeugt, dass mir mit Mono in dieser Hinsicht geholfen werden könnte. Die Syntax der HelloWorld-Beispiele erinnert mich stark an objektorientiertes Schreiben unter PHP... ;-)

Zunächst hätte ich gerne versucht, ein Programm zu schreiben (unter Linux, "Mono" benutzend), welches unter Windows eine Datei auf einem Netzlaufwerk einliest, danach eine Website abfragt (mit einem speziellen User-Agent), dabei einen verschlüsselten String als POST-Wert mitsendet (z.B. data=U2FsdGVkX18zkYAKTQs... - Inhalte aus der eingelesenen Netzlaufwerk-Datei), das Ganze natürlich durch einen HTTP-Proxy hindurch (bitte nicht gleich wieder den Kopf schütteln!), um letzten Endes die Antwort direkt in den Browser "einzupflanzen", damit dieser das erhaltene Dokument anzeigen (man kann mit JavaScript vor dem Ausdrucken noch diverse Checkboxen verändern) und dann ausdrucken kann.

Von mir aus spuckt das Programm die Daten auch im Klartext in eine unsichtbare <textarea> des Browsers, damit dann JavaScript das Ganze verschlüsselt, um dann mit einem AJAX-Aufruf (natürlich mit dem speziellen User-Agent!) das Antwortdokument gleich direkt im Browser zu empfangen. Das Abschicken muss aber das Programm selbst vornehmen - ich will, dass der Benutzer lediglich das Programm startet und dann nur noch im automatisch geöffneten Browser Checkboxen bei Bedarf deaktiviert, bevor er das erhaltene Dokument im Browser ausdruckt. Das Programm hat sich natürlich längst nach Erhalt der Webserverantwort verabschiedet, oder wartet höchstens noch, bis das Browser-Fenster geschlossen wird.

Wer hat genügend Erfahrung, um sicher sagen zu können, ob das mit Mono überhaupt machbar ist (die Zielplattform ist noch immer Windows XP, das Ganze soll aber auch unter einem neueren Windoof ebenso lauffähig sein), ob ich das unter Linux auch so entwickeln kann, dass es unter Windows tut (am liebsten nativ, ohne Mono unter Windows installieren zu müssen), und - besonders wichtig - in was ich mich alles einlesen muss?

Wenn mein Vorhaben auch mit VB-Script möglich ist, dann verzichte ich auch gerne auf Mono...

Sollte im Firefox der AJAX-Call auf die Netzlaufwerksdatei ebenso erfolgreich möglich sein, dann *jubel* umso besser. Ich habe leider keine Möglichkeit, diese Voraussetzungen ausführlich zu prüfen, da ich keinen Zugang zu unserem Verwaltungsnetzwerk in der Schule habe. Zuhause jedenfalls habe ich eine Fehlermeldung erhalten (NS_ERROR_DOM_BAD_URI: Access to restricted URI [smb://mein-pc/verz/datei.txt] denied), bei der ich auf die same-origin-policy als Ursache des Scheiterns schließe.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
  1. Tach!

    Zunächst hätte ich gerne versucht, ein Programm zu schreiben (unter Linux, "Mono" benutzend), welches unter Windows eine Datei auf einem Netzlaufwerk einliest,

    Ein Netzwerklaufwerk ist nichts besonderes aus .NET-Programmsicht. Es verhält sich diesbezüglich wie andere Laufwerke auch. Unter Linux sind die Gegebenheiten (sprich: Pfadnamen) anders, und da müsste es irgendwie mit Samba gemountet werden.

    danach eine Website abfragt (mit einem speziellen User-Agent), dabei einen verschlüsselten String als POST-Wert mitsendet (z.B. data=U2FsdGVkX18zkYAKTQs... - Inhalte aus der eingelesenen Netzlaufwerk-Datei), das Ganze natürlich durch einen HTTP-Proxy hindurch (bitte nicht gleich wieder den Kopf schütteln!),

    Das ist alles problemlos mit .NET möglich. Dafür gibt es entsprechende Klassen.

    Ich nehme mal nicht an, dass diese beiden Punkte nicht auch mit Mono realisierbar sind. Das ist jedenfalls schon lang genug in .NET enthalten, so dass Mono genügend Zeit zum Nachbauen hatte. Mit Mono hab ich allerdings keine Erfahrung.

    um letzten Endes die Antwort direkt in den Browser "einzupflanzen", damit dieser das erhaltene Dokument anzeigen (man kann mit JavaScript vor dem Ausdrucken noch diverse Checkboxen verändern) und dann ausdrucken kann.

    Es sollte auch mit Mono kein Problem sein, eine Desktop- oder CLI-Anwendung zu schreiben, die einen simplen Webserver mitbringt, zu dem sich dann dein Browser verbindet.

    Das Programm hat sich natürlich längst nach Erhalt der Webserverantwort verabschiedet, oder wartet höchstens noch, bis das Browser-Fenster geschlossen wird.

    Allerdings hat auch ein selbst geschriebener Webserver keine Ahnung, was im Browser passiert. Die sieht nur Requests und kann Responses senden. Wenn sich deine Anwendung beenden soll, kann sie das nur nach Abarbeitung des Requests, oder sie reagiert auf einen speziellen Request. Starten musst du sie aber immer per Hand oder einen anderen Mechanismus, wenn sie nicht ständig laufen soll.

    Ständig laufen ist vermutlich nicht systemübergreifend möglich (oder jemand hat eine vereinheitlichende API geschrieben). Unter Windows wäre ein Dienst und unter Linux ein Dämon nötig, und die sind doch recht unterschiedlich ins jeweilige System eingebunden.

    Wer hat genügend Erfahrung, um sicher sagen zu können, ob das mit Mono überhaupt machbar ist (die Zielplattform ist noch immer Windows XP, das Ganze soll aber auch unter einem neueren Windoof ebenso lauffähig sein), ob ich das unter Linux auch so entwickeln kann, dass es unter Windows tut (am liebsten nativ, ohne Mono unter Windows installieren zu müssen),

    Hmm, ich kann dir noch nicht mal sagen, inwieweit die neueren .NET-Framework-Versionen rückwärtskompatibel zu hornalten Windows-Versionen sind. Andererseits brauchst du für dein Vorhaben keine Fähigkeiten, die über 2.x hinausgehen, und das sollte in XP laufen.

    und - besonders wichtig - in was ich mich alles einlesen muss?

    Zumindest weiß ich, dass es ein Openbook von Galileo zuu C# gibt. Und die MSDN-Library ist DIE Anlaufstelle für (u.a.) .NET-Programmierung. Mono hat sicherlich auch eine Dokumentation, wo zumindest Implementierungsstand und Abweichungen beschrieben sein sollten.

    Sollte im Firefox der AJAX-Call auf die Netzlaufwerksdatei ebenso erfolgreich möglich sein,

    Ajax-Calls sind Web-Requests, keine Dateizugriffe.

    dedlfix.

    1. Lieber dedlfix,

      ganz herzlichen Dank für Deine Hinweise!

      Ein Netzwerklaufwerk ist nichts besonderes aus .NET-Programmsicht. Es verhält sich diesbezüglich wie andere Laufwerke auch. Unter Linux sind die Gegebenheiten (sprich: Pfadnamen) anders, und da müsste es irgendwie mit Samba gemountet werden.

      Die Sache mit dem Netzlaufwerk sehe ich auch weniger problematisch. Schwieriger wird wahrscheinlich der Web-Request durch den HTTP-Proxy hindurch.

      danach eine Website abfragt (mit einem speziellen User-Agent), dabei einen verschlüsselten String als POST-Wert mitsendet (z.B. data=U2FsdGVkX18zkYAKTQs... - Inhalte aus der eingelesenen Netzlaufwerk-Datei), das Ganze natürlich durch einen HTTP-Proxy hindurch (bitte nicht gleich wieder den Kopf schütteln!),

      Das ist alles problemlos mit .NET möglich. Dafür gibt es entsprechende Klassen.

      Sollte ich den Inhalt der auf dem Netzlaufwerk gehosteten Textdatei per AJAX-Call (z.B. xhr.open("Z://verzeichnis/datei.txt") erhalten, könnte ich mit der Verschlüsselung aus meinem letzten Thread weitermachen.

      Ansonsten muss ich wohl eine temporäre Datei anlegen, die ich dann den Browser zum Ausdrucken öffnen lasse.

      Es sollte auch mit Mono kein Problem sein, eine Desktop- oder CLI-Anwendung zu schreiben, die einen simplen Webserver mitbringt, zu dem sich dann dein Browser verbindet.

      Diese Lösung erscheint mir komplizierter, als das Öffnen einer temporären Datei. Sicher kann ich von einem CLI-Programm den FF unter Windoof so starten, dass er einen Pfad als Parameter annimmt und so die temporäre (HTML-)Datei anzeigt.

      Zumindest weiß ich, dass es ein Openbook von Galileo zuu C# gibt. Und die MSDN-Library ist DIE Anlaufstelle für (u.a.) .NET-Programmierung. Mono hat sicherlich auch eine Dokumentation, wo zumindest Implementierungsstand und Abweichungen beschrieben sein sollten.

      Da werde ich mal vorbeischauen. Herzlichen Dank!

      Sollte im Firefox der AJAX-Call auf die Netzlaufwerksdatei ebenso erfolgreich möglich sein,

      Ajax-Calls sind Web-Requests, keine Dateizugriffe.

      Rein technisch betrachtet müsste ich den auch an das lokale Dateisystem stellen können. Es ist natürlich die Frage, inwiefern die Sicherheitseinstellungen des Browsers in Bezug auf die Same-Origin-Policy kooperieren. Aber das kann ich leider zur Zeit nicht prüfen - das würde mir im Idealfall sicher eine Menge Arbeit ersparen!

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Om nah hoo pez nyeetz, Felix Riesterer!

        Mal was ganz anderes: Können deine Stundenplanbauer überhaupt ermessen, was du hier in deiner Freizeit(?) leistest? Wieviel Zeit du ans Bein bindest, nur damit es für "die" etwas komfortabler wird?

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Opi und Opium.

        1. Lieber Matthias Apsel,

          Mal was ganz anderes:

          ja, das war unvermeidlich. ;-)

          Können deine Stundenplanbauer überhaupt ermessen, was du hier in deiner Freizeit(?) leistest? Wieviel Zeit du ans Bein bindest, nur damit es für "die" etwas komfortabler wird?

          Nein. Die verstehen nicht wirklich, in welcher Welt ich lebe. Umgekehrt habe ich aber von meinen Programmierexperimenten ein wesentlich transparenteres und nahezu fehlerfreies Informationssystem, welches sowohl mir, als auch dem Rest des Kollegiums zugute kommt.

          Du weißt vielleicht aus eigener Erfahrung, dass es immer die Planungsfehler sind, die im Schulalltag die meiste Gesundheit (wegen zusätzlichem Stress und Ärger) kosten. Und wenn ich Bedienungsfehler eliminieren kann, dann ist mir persönlich damit bereits geholfen.

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
      2. Lieber Felix,

        Diese Lösung erscheint mir komplizierter, als das Öffnen einer temporären Datei. Sicher kann ich von einem CLI-Programm den FF unter Windoof so starten, dass er einen Pfad als Parameter annimmt und so die temporäre (HTML-)Datei anzeigt.

        dürfte ich fragen, was Du konrekt an Windows denn eigentlich so doof findest?

        Liebe Grüße
        tech, Solarianer

        1. Lieber tech,

          eigentlich wollte ich Dir zuerst überhaupt nicht antworten, da diese Frage üblicherweise in ein gegenseitiges Bashing der üblichen Betriebssysteme enden muss - siehe das Heise-Forum. Da wir hier aber bei SELFHTML sind, versuche ich Dir meine eigenen privaten Gründe gegen Windows zu nennen, denn formal hast Du ja nach nur diesen gefragt.

          Was Linux nach meiner Ansicht besser kann, als Windows:

          • Lizenzfragen (damit auch Raspberry & Co etwas abbekommen)
          • Konfigurierbarkeit
          • Sicherheit auf Dateiebene (Dateiberechtigungen usw.)
          • Transparenz bis ins kleinste Detail
          • Bezug von Updates nicht nur für Kernkomponenten des Basissystems sondern auch für alle installierten Applikationen (Office, Mediaplayer, Brennprogramme, Bildbearbeitungen etc.)
          • Kein Nach-Hause-Telefonieren der jeweiligen Programme, um Updates anpreisen zu können
          • völlige Freiheit bei der Auswahl und Benutzung (ich entscheide, was ich mit meiner Hard- oder Software wie tun möchte!)
          • wesentlich bessere "Reparierbarkeit", wenn Teile des Systems aufgrund von Hardwareversagen zerstört werden (probiere einmal einen anderen WindowManager unter Windows zu installieren, wenn sich Windows nicht mehr booten lässt!)
          • leicht von USB-Speichern bootbar und sofort (leicht eingeschränkt) produktiv nutzbar.

          Was Windows in meinen Augen besser kann:

          • völlige Hörigkeit bei einfachen Anwendern pflegen: Unterdrückung der Interoperabilität (*1*)
          • die Spieleplattform für Computerspieler
          • den Rechner mit x Updates spürbar träger machen

          *1*
          Um "Zwangsklassenarbeiten" korrigieren zu können, erhalten Lehrkräfte eine mit Makros zugerotzte Excel-Datei, die bereits lesbar den Inhalt präsentiert, man möge "die Arbeitsmappe nicht beschädigen" und deswegen auch nur ein echtes Excel benutzen. Ein Bearbeiten mit LibreOffice hat nämlich diese schönen Makros (insbesondere große Schaltflächen in Form von Klick-Buttons) unwirksam gemacht. Wie war das doch gleich mit der EU-Richtlinie zum Urheberrecht und dem Reverse-Engeneering? - Zugegeben, dieser Punkt ist zusammen mit dem letzten Punkt in meinen Augen kein "was Windows besser kann", sondern eher "was Windows schlecht macht", aber egal.

          Nach vielen Jahren Windows-Erfahrung (angefangen bei Windows 95) bin ich nun bei Ubuntu/Linux und will nicht mehr zurück. Wenn mir in der Schule das XP wieder viel zu träge reagiert, nehme ich meinen USB-Stick und drücke den Reset-Button. Mein Live-Ubuntu bootet mindestens ebenso schnell, wie XP von der Anmeldung bis zur Benutzbarkeit braucht...

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
          1. Hi Felix Riesterer!

            • Transparenz bis ins kleinste Detail

            Gerade im Detail steckt auch bei Linux der Teufel! Über die Jahre ist da doch einiges – das Deblob-Script der FSFLA braucht bei mir immerhin ≈20 Minuten zum Aufräumen – an Binärkram drin gelandet.
            Bei dem lächerlichen Marktanteil von Linux auf dem Desktop gibt es da natürlich auch keinen spürbaren Widerstand gegen die Hersteller…

            Komplett freie (und gute) Soft- und Hardware wird wohl für immer nur ein feuchter Traum von Stallman und einigen wenigen bleiben.

            \0

            --
            sudo make me a sandwich
            1. Lieber Martin Rettberg,

              Deblob-Script der FSFLA

              davon habe ich noch nie etwas gehört. Als Ubuntu-User, der erst seit 2,5 Jahren "dabei" ist, verstehe ich noch nicht sooo viel von den Interna in Linux, als dass mir das Deblob-Script schon begegnet wäre.

              Bei dem lächerlichen Marktanteil von Linux auf dem Desktop gibt es da natürlich auch keinen spürbaren Widerstand gegen die Hersteller…

              Naja, Shuttleworth will das ja ändern, hat auch gute Ideen, muss Canonical als Firma irgendwann schwarze Zahlen schreiben lassen und tut dann Dinge, für die er mächtig Schelte bekommt.

              Komplett freie (und gute) Soft- und Hardware wird wohl für immer nur ein feuchter Traum von Stallman und einigen wenigen bleiben.

              Vielleicht. Aber "Wahrheit" ist ja auch nur ein Konzept...

              Liebe Grüße,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
              1. Hi Felix Riesterer!

                Bei dem lächerlichen Marktanteil von Linux auf dem Desktop gibt es da natürlich auch keinen spürbaren Widerstand gegen die Hersteller…

                Naja, Shuttleworth will das ja ändern, hat auch gute Ideen, muss Canonical als Firma irgendwann schwarze Zahlen schreiben lassen und tut dann Dinge, für die er mächtig Schelte bekommt.

                Ubuntu hat GNU/Linux auf dem Desktop sehr stark vorangetrieben, keine Frage. Als ich es 2005 zum ersten Mal angetestet habe, gab es bereits diesen Hype, der sich bis heute gehalten und sogar noch verstärkt hat.

                Das alles rechtfertigt aber noch lange nicht den Verkauf seiner Nutzer! Hier muss sich Canonical völlig zu Recht herbe Kritik gefallen lassen.

                Komplett freie (und gute) Soft- und Hardware wird wohl für immer nur ein feuchter Traum von Stallman und einigen wenigen bleiben.

                Vielleicht. Aber "Wahrheit" ist ja auch nur ein Konzept...

                Ganz so pessimistisch würde ich das nicht sehen, gibt es doch innerhalb der Grenzen unserer Erkenntnisfähigkeit überprüfbare Teilmengen der Wahrheit.

                \0

                --
                sudo make me a sandwich
    2. Hallo,

      Zunächst hätte ich gerne versucht, ein Programm zu schreiben (unter Linux, "Mono" benutzend), welches unter Windows eine Datei auf einem Netzlaufwerk einliest,
      Ein Netzwerklaufwerk ist nichts besonderes aus .NET-Programmsicht. Es verhält sich diesbezüglich wie andere Laufwerke auch. Unter Linux sind die Gegebenheiten (sprich: Pfadnamen) anders, und da müsste es irgendwie mit Samba gemountet werden.

      ja, aber danach ist es für Linux ebenfalls ein Verzeichnis wie jedes andere auch. Letztendlich also doch kein Unterschied zwischen Windows und Linux in diesem Punkt.

      Ciao,
       Martin

      --
      Arzt:    Gegen Ihr Übergewicht hilft wohl nur noch Gymnastik.
      Patient: Sie meinen, Kniebeugen und so?
      Arzt:    Nein, Kopfschütteln. Immer dann, wenn Ihnen jemand was zu essen anbietet.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Liebe Mitlesende,

    mein Vorhaben kann ich anscheinend durch einen simplen AJAX-Get-Request an das lokale Dateisystem lösen. Damit erhalte ich in responseText den exakten Textinhalt, welchen ich wie schon diskutiert verschlüsselt an meine Schulwebsite POSTen kann.

    Damit erübrigt sich (vorerst anscheinend) die Frage nach einer nativen Windows-Applikation.

    Vielen Dank "dedlfix" und "Der Martin" für hilfreiche Hinweise.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)