Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

  • Hallo Forumsbewohner, Linux-Freaks und Himbeer-Fans,


    zu meinem 100. Forumsbeitrag habe ich mir was Besonderes reserviert. Ein Tutorial der Programmiersprache Icon. Ich habe von Icon zum ersten Mal um 1990 herum gehört (und nicht sonderlich viel damit programmiert). 2003 wollte ich wieder programmieren und habe dieser Sprache eine Chance gegeben.


    Da Icon ursprünglich für relativ speicherarme Umgebungen entwickelt wurde, habe ich als erstes Projekt auf meinem Raspberry im Januar 2013 den Compiler auf den Raspberry übertragen - und er läuft genauso zuverlässig und flott, wie er es unter Windows, Ubuntu und etlichen anderen Betriebssystemen auch tut.


    Das Tutorial richtet sich zunächst an Anfänger. Aber spätestens bei Kapiteln zur Parallelprogrammierung von Prozessen hole ich dann auch die Profis ab.


    Mittlerweile sind 29 Teile fertig, die ich - sollten die ersten beiden Teile "ankommen" und Gefallen finden, so nach und nach hier einstreue. Diese Tutorialreihe ist so konzipiert, dass sie "offen", das heißt, dass nach Vermittlung der Grundlagen eigentlich alles möglich ist.


    Viel Spaß und Gutes Gelingen!


    Andreas


    RPI_Forum_Icon_Teil1.pdf



    [hr]
    P.S.: Haltet Euch bitte an den in #7 beschriebenen Ablauf
    [hr]


    Inhaltsangabe:

    1 Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

    Teil 1 #7: Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

    2 Programmiersprache Icon, Teil 2: Installation und Konfiguration von Geany

    3 Icon-Tutorial - Teil 3: Eingabe und Ausgabe

    4 Icon-Tutorial, Teil 4: Programmierer-definierte Konstrukte: Schleifen & Falluntersche

    5 Icon-Tutorial Teil 5: Numerische Datentypen, Operatoren und Funktionen

    6 Icon-Tutorial, Teil 6: Zeichenbasierte Datentypen, ihre Funtionen und Operatoren

    7 Icon-Tutorial, Teil 7: Strukturierte Datentypen einschl. Funktionen und Operatoren

    8 Icon-Tutorial Teil 8: Datentypen procedure und co-expression

    9 Icon-Tutorial, Teil 9: Konzept des Zeichenketten-Scannens

    10 Icon-Tutorial, Teil 10: Ausdrucks-Auswertung, Typ-Umwandlung, Sortier-Techniken

    11 Icon-Tutorial, Teil 11: Sammelsurium

    12 Icon-Tutorial, Teil 12: Bibliotheken

    13 Icon-Tutorial, Teil 13: Der Präprozessor

    14 Icon-Tutorial, Teil 14: Fehler & Fehlerbeseitigung

    15 Icon-Tutorial, Teil 15: Graphik I: Windows-Datentyp

    16 Icon-Tutorial, Teil 16: Graphik II: Zeichnen und Füllen

    17 Icon-Tutorial, Teil 17: Graphik III: Turtle-Graphik

    18 Icon-Tutorial, Teil 18: Graphik IV Text

    19 Icon-Tutorial, Teil 19: Graphik V: Farben & Bilder

    20 Icon-Tutorial, Teil 20: Graphik VI: Fenster

    21 Icon-Tutorial, Teil 21: Interaktion

    22 Icon-Tutorial, Teil 22: Standard-Dialoge

    23 ICON: Tutorial Teil 23: Vidgets und GUI-Entwicklungen mit VIB

    24 Icon: Tutorial 24: Hardware-Basteleien, Vervollständigen der GPIO-Kommandozentrale

    25 Icon: Tuorial 25: Ereignisbehandlungen bei Anwendungen mit mehr als einem Fenster

    26 Icon-Tutorial Teil 26: Individuelle Dialoge mit VIB

    27 Icon-Tutorial Teil 27: Entwicklung eines Spiels: Mastermind - Entwurf und GUI-Layout

    28 Icon-Tutorial Teil 28: Entwicklung eines Spiels: MM-Ereignisbehandlung/Auswertelogik

    29 Icon-Tutorial Teil 29: Entwicklung eines Spiels: MasterMind - der Code

    30 Icon-Tutorial Teil 30: Von Icon auf C-Bibliotheken zugreifen

    31 Icon Tutorial Teil 31: Von Iconauf C++-Bibliotheken zugreifen
    32. Von Icon auf Prolog-Bibliotheken zugreifen


    Ideen, Block II (Software läuft!)
    33: Text-to-Speech - Speech-to-Text: Sprachsynthese und Sprachanalyse auf dem Raspberry Pi in Icon


    Ideen, Block III (Software für #35 läuft!)
    34: GUI mit dem Event-Multiplexor (EVMUX) gestalten inkl. Programmierung der Ereignisbehandlung
    35: Symbolizer für Bi-Level-Graphiken
    36: Symbolizer für Grafiken mit Icon-Farbpaletten


    Ideen, Block IV (Software läuft!)
    37: Pseudo-Code-Compiler


    Ideen, Block V (Software läuft)
    38: Dia-Shower


    Ideen, Block VI (Ideensammlung)
    39: Hardware-Basteleien: A/D-Wandler und dessen Programmierung in Icon

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas ()

  • Da steckt auf jedenfall ein Haufen arbeit drin. Icon sagt mir erstmal gar nichts ;) aber es schadet ja nichts einen Blick über den Tellerrand zu werden. Ich freu mich auf Teil 2.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo Arteck,


    die letzte Revision stammt vom Juni 2013 - so alter Schinken ist's auch wieder nicht ;).


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Bei der Vielzahl an Programmiersprachen nochmal eine - die müsste im Vergleich schon Bahnbrechendes bieten und trotzdem halbwegs effizienten Code erzeugen.
    Sorry, aber sehr skeptisch guck. :bussi2:


    Gruß, mmi

  • Hallo Mmi & andere Interessierte,


    Du erwartest Bahnbrechendes.


    - Die Programmiersprache ist relativ leicht und schnell zu lernen.


    - Man erhält bereits nach kurzer Entwicklungszeit Ergebnisse (RAD - Rapid Application Development)


    - Der Code, um eine Anwendung in Icon zu programmieren, ist etwa um 1/3 kürzer, als wenn Du die gleiche Anwendung in einer anderen Sprache schreiben würdest.


    - Nervige Semikolons am Zeilenende werden nicht erwartet.


    - Variablen brauchen nicht deklariert zu werden - sie werden nach Bedarf eingesetzt.


    - Es gibt keine Pointer - keine Abstürze weil ein Pointer auf NIL zeigt.


    - Programme können als Skript-Datei ausgeführt werden oder als compilierte Anwendung


    - Speichermanagement läuft im Hintergrund ab - Du brauchst für irgendwelche Strukturen, Arrays etc. keinen Speicher explizit anzufordern.


    - Icon verfügt über LIA (LArge Integer Arithmetik, wodurch Du mit beliebig großen Zahlen rechnen kannst Berechne mal !5000 mit einer anderen Programmiersprache. Die Icon-Anwendung berechnet Dir die Zahl und gibt alle Stellen aus. Auf die gleiche Weise kannst Du Wurzelziehen und eine beliebige Stellenanzahl ausgeben lassen.Die Kreiszahl Pi habe ich auch mal auf 5000 Stellen berechnet. Auf diese Weise erhält man einen ganz anderen Zugang zur Mathematik.


    - Funktionen und Prozeduren verfügen über eine variable Anzahl an Parametern; am Datentyp erkennt die Prozedur, welcher der Parameter gesetzt ist, die nicht gesetzten Parameter werden (ohne Zutun des Programmierers) auf voreingestellte Werte gesetzt. Um z.B. ein Fenster zu öffnen genügt ein


    Code
    1. W := WOpen()


    oder


    Code
    1. W := WOpen("size=800,600")


    oder


    Code
    1. W := WOpen("size=800,600", "label=Anwendung")


    um nur zwei von etlichen Fensterparametern zu definieren.


    Die Zuweisung


    Code
    1. W :=


    kann man auch gleich ganz weglassen, wenn es in der ganzen Anwendung nur ein einiziges Fenster gibt.


    - Ein Gedanke zu GPIOs: Zur Ansteuerung eines GPIO-Ports reicht ein


    Code
    1. GPIO(17,1)


    um den GPIO-Port 17 einzuschalten oder ein


    Code
    1. status := GPIO(17)


    um den GPIO-Port auszulesen. Hierzu habe ich eine GPIO-Library geschrieben und optimiert: Taktzeit liegt bei ca. 10 ms.


    - Mit Icon ist z.B. die Programmierung von Paralellelprozessen möglich, was wohl mit nur ganz wenigen Programmiersprachen möglich ist. Für den Raspberry Pi ist mir keine andere bekannt.


    - Letztes Jahr habe ich einen Auftrag für eine Industrieentwicklung erhalten. Die Wahl der Mittel blieb mir vollkommen frei überlassen. Nach Entwicklung der Hardware und Zusammenbau der Hardware-Komponenten habe ich diese mit einem Raspberry Pi versehen, ein Icon-Entwicklungssystem aufgesetzt und optimiert und schließlich die Anwendung in Icon programmiert. Mit dem Teil werden Medizintechnikprodukte für den US-amerikanischen Markt hergestellt. Um dort Medizintechnikprodukte anbieten zu können erwartet die US-amerikanische Lebensmittelbehörde FDA umfangreiche Dokumentationen zum Nachweis der Sicherheit, der Zuverlässigkeit und zur Erfüllung der Qualitätsanforderungen. Diese Computersystemvalidierung hat das Gesamttsystem (Hardware, RaspberryPi, Icon-Entwicklungssystem, Icon-Anwendung) beim ersten Anlauf bestanden. In der Firma wurden mit diesem System innovative Technologien eingeführt, das wohl die Grundlagen für ganz andere Entwicklungsprojekte bilden wird.



    - Auch wenn Icon relativ unbekannt ist, mit dem Entwicklungssystem, das ich aufgesetzt habe, ist eine professionelle Software-Entwicklung auch auf dem Raspberry Pi möglich.


    - Da Icon schon immer auf Systemen mit geringen Ressourcen ausgelegt war, läuft es auch auf dem Raspberry angenehm schnell.


    Und zum Schluss ein kleiner Reim:


    Ich weiß, wer Icon ignoriert,
    und keine Chance gibt, verliert.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas ()

  • Hallo zusammen,


    nachdem einige Interessierte Probleme hatten, Icon zum Laufen zu bekommen und immer wieder andere Wege zum Ziel führten (weil irgendwelche essentiellen Schritte ausgelassen wurden - oder von mir nicht vollständig in Erwägung gezogen wurden), habe ich gestern die Gelegenheit genutzt, an einem neuen Raspberry das Icon-Programmiersystem neu aufzusetzen. Dabei ist mir aufgefallen, dass einige Schritte der Anleitung aus Beitrag #1 in einer nicht optimalen Reihenfolge angeordnet sind. Wenn man sich stur daran hält, funktioniert es zwar am Ende - ein paar Tests zwischendrin enden aber mit einem Ergebnis, dass man die Installation am Liebsten in die Tonne treten würde.


    OK. Hier die aktuellen Erkenntnisse:



    Schritt-für-Schritt-Anleitung zum Installieren / Konfigurieren der Programmiersprache Icon (www.cs.arizona.edu/icon)


    EDIT 11.03.2017:
    Die Icon-Homepage wurde umbenannt: Sie ist jetzt zu erreichen unter:
    https://www2.cs.arizona.edu/icon
    Bitte alle nachfolgenden URL-Adressen entsprechend berücksichtigen!
    [/EDIT]



    1. Download-Verzeichnis einrichten
    Dieser Schritt ging bisher vollkommen unter. Dieses Verzeichnis habe ich mir immer als Erstes erzeugt - unabhängig von der tatsächlichen Anwendung - und habe dies allerdings irgendwann "vergessen" zu erwähnen. Leider sind hier einige dran gescheitert. SORRY =( :blush:

    Code
    1. mkdir /home/pi/Downloads


    2. Ins Download-Verzeichnis wechseln
    ... damit die Datei auch dorthin gespeichert wird

    Code
    1. cd /home/pi/Downloads


    3. Herstellen einer Verbindung zum Internet (LAN oder WLAN)


    4. Quellcode-Paket herunterladen
    Vielen Dank an Dreamshader! Der Punkt vor src war in der Tat falsch. :danke_ATDE:

    Code
    1. wget www.cs.arizona.edu/icon/ftp/packages/unix/icon-v951src.tgz


    5. Entpacken

    Code
    1. tar -x -v -f icon-v951src.tgz


    6. Icon-Verzeichnis erstellen

    Code
    1. mkdir /home/pi/icon9_51


    7. Quelldateien verschieben

    Code
    1. cp -v -r icon-v951src/* /home/pi/icon9_51


    8. Entwicklungsdateien nachinstallieren
    Für die Compilierung des Icon-Compiler-Quellcodes unter Linux-Betriebssystemen erforderlichen Entwicklungs-Dateien nachinstallieren

    Code
    1. sudo apt-get install build-essential libx11-dev libxt-dev libxaw7-dev


    9. Ins Icon-Konfigurationsverzeichnis wechseln

    Code
    1. cd /home/pi/icon9_51/config


    10. Konfigurationsverzeichnis für RaspberryPi erstellen
    Nicht mehr "posix" sondern "linux" als Vorlage auswählen - auch das ging unter, ich habe 2012 verschiedenes ausprobiert. Im Kopf blieb "posix" hängen, Im Tutorial Teil 1 stand "posix", die Konfigurationsdateien stammen von der Konfiguration "linux". Totale Verwirrung war angesagt.


    Code
    1. cp -v -r linux RaspberryPi


    11. Ins Konfigurationsverzeichnis für RaspberryPi wechseln

    Code
    1. cd RaspberryPi


    12. Anpassen der Konfigurationsdateien
    Flossen weg von Makedefs: Die Datei wird nicht verändert! Hier ist mir aufgefallen, dass die im Teil 1 des Tutorials zum Erlernen der Programmiersprache Icon enthaltenen Vorlagen bzw. angegebene Änderungen nicht zu den Vorlagen selber passten. Vermutlich ist hier heftiger Wildwuchs entstanden, der zu den verblüffendsten - aber leider wenig brauchbaren - Ergebnissen führte. Siehe auch Schritt 10.


    define.h

    Code
    1. /*
    2. * Icon configuration file for RaspberryPi system with X windows
    3. */
    4. #define UNIX 1
    5. #define RaspberryPi 1
    6. #define LoadFunc


    status


    13. Erstellen des Icon-Systems
    Compilieren des Compiler-Quellcode für den Raspberry Pi


    Die folgenden Zeilen brauchen einiges an Zeit.
    Bitte um Geduld und Nachsicht. :cool: Der kleine Raspberry Pi ist nicht der schnellste.


    Code
    1. cd ../..
    2. make Status name=RaspberryPi
    3. make X-Configure name=RaspberryPi
    4. make X-Configure=RaspberryPi
    5. make status=RaspberryPi
    6. make Icont
    7. make Samples
    8. make Test
    9. make Benchmark


    Gelegentliche Fehlermeldungen ignorieren - mir sind allerdings gestern keine mehr aufgefallen.


    14. Ins Icon-Arbeitsverzeichnis wechseln

    Code
    1. cd /home/pi/icon9_51/bin


    Hier fehlte im Tutorial Teil 1 das cd - ohne macht's keinen Sinn.


    15. Arbeitsverzeichnis anzeigen

    Code
    1. ls -all


    Hier sollte ungefähr Folgendes stehen:


    Entscheidend sind die Dateien icont (der Compiler) und iconx (der Interpreter).
    Ergänzung [17.05.2015]:
    Die Programme colrbook, colrpick, fontpick, palette sind Anwendungen, die die Graphik-Fähigkeiten zeigen.


    Die Datei libcfunc.so ist eine Library, die in der Programmiersprache C geschrieben wurde und im Icon-Tutorial Teil 30 genutzt werden wird.


    vib ist eine Anwendung, mit der man graphische Benutzeroberflächen erstellen kann. vib erzeugt aus den vom Anwender angelegten Bedienelementen dann lauffähigen Quellcode in der Programmiersprache Icon. OK ... jede andere Programmiersprache wäre jetzt ein wenig unvorteilhaft.


    wevents zeigt Ereignisse an. Dies ist dann sinnvoll, wenn man mal schnell testen will, welches Ereignis von irgendwelchen Tasten der Tastatur oder von Mäusen erzeugt werden kann. Auch wenn man die hier angezeigten Ereignisse nutzen kann, ist es immer besser (im Sinne von Übertragbarkeit auf andere Betriebssysteme), wenn die entsprechende Datei keysyms.icn eingebunden wird.



    16. Umgebungsvariablen setzen
    PATH, IPATH, LPATH nach Anleitung in /home/pi/.bashrc setzen

    Code
    1. sudo nano /home/pi/.bashrc


    Da .bashrc bereits existiert, einfach Folgendes anhängen (dies entspricht meinem aktuellen Entwicklungssatz - und scheint recht brauchbar zu sein). Wichtig sind hier die Zeilen xPATH= und export. Die Zeilen echo zeigen nur etwas an.



    Auf Wunsch von Dreamshader eine kurze Erläuterung der einzelnen Umgebungsvariablen:


    - PATH: Ist der Pfad, der nach ausführbaren Kommandos durchsucht wird. In diesem Fall wird an den bestehenden Pfad das Icon-Arbeitsverzeichnis angehängt. Alles, was vorher gefunden wird, wird auch nach der Installation von Icon gefunden.


    - IPATH: Enthält den Pfad, in dessen Elementen nach Libraries gesucht wird. Solche Dateien werden im Icon-Programm mit link ... angegeben. Durch Anwendung dieser oftmals für gängige Betriebssysteme angepassten Prozeduren wird Icon-Quellcode auf die wildesten Betriebssysteme übertragbar und kann eigentlich mit der gleichen Vorgehensweise auf andere Betriebssysteme übertragen werden - solange eine Bedingung erfüllt ist (s. Schritt 13)


    - LPATH: Enthält den Pfad, in dessen Elementen nach einfügbarem Quellcode (in C nennt man diese Header-Dateien oder Include-Dateien) gesucht wird. Solche Dateien werden im Icon-Programm mit $include ... eingebunden. Hierbei handelt es sich in der Regel um Quellcode von Prozedur-Sammlungen, also Quellcode von Libraries. Durch Anwendung dieser oftmals für gängige Betriebssysteme angepassten Prozeduren wird Icon-Quellcode ebenfalls auf die wildesten Betriebssystem übertragbar.


    Hm, LPATH für Include-Dateien., IPATH für Libraries. Bestimmt verschrieben, oder? Ja, bestimmt - aber vor ganz langer Zeit. So isses im Compiler hinterlegt, so wird's seit langem gemacht. Ein Beispiel für etwas Verwirrendes, das seinen Ursprung in der grauen Vorgeschichte hat - aber bis heute beibehalten wurde. Bitte einfach zur Kenntnis nehmen. Wenn die Umgebungsvariablen einmal angelegt sind, ist dieses Wissen nicht mehr von Bedeutung.


    - FPATH: Enthält den Pfad, in dessen Elementen spezieller Code in C/C++/Cobol/D/Prolog enthalten ist. Es ist möglich, von Icon aus auf Routinen zuzugreifen, die in diesen Programmiersprachen geschrieben sind.
    Näheres dazu habe ich für das Icon-Tutorial, Teile 30 ( C ), Teil 31 (C++), Teil 32 (andere Programmiersprachen) vorgesehen (Änderungen vorbehalten).


    [EDIT 31-OKT-2017]:

    Jetzt iost es ja so, dass jedes mal, wenn man ein Terminal-Programm startet, dieses die .bashrc lädt. Jedes Mal sind dann für dieses Terminal die Icon-Pfade, Umgebungsvariablen etc. gesetzt. Selbst für jemanden, der nicht ständig programmiert, kann das mal nervig sein, wenn er nur mal ein paar Linuix-Kommandos loswerden möchte.


    Daher habe ich mir folgendes einfallen lassen:

    • Anzeigen einer Liste (von zur Zeit Programmiersprachen)
    • Auswahl der angebotenen Optionen
    • Setzen nur der Pfade und Umgebungsvariable, die mit der Option korrespondieren

    Wer das auch mal machen möchte, hängt dann stattdessen folgende Zeilen an:


    Schlüssel des Ganzen ist das Linux-Kommando dialog. Wer mehr wissen willen, kann ja mal danach suchen. Im obigen Quellcode ist schon mal eine sinnvolle Anwendung.

    Ergebnis:


    [/EDIT]


    17. Neustart und Fortsetzung
    Im Toutorial Teil 1 habe ich sofort den Compiler aufgerufen. Je nach Vorgeschichte und Wissen der Anwender kamen hier entweder keine Fehlermeldungen (bei mir) oder Hinweise, die der erfahrene Anwender durch Erfahrung und Eingabe von Linux-Kommandos beseitigen konnte. Der Neuling dagegen ... na ja, ... der kam der Verzweiflung nahe.


    Code
    1. sudo reboot


    Bei jedem Hinweis, dass der Compiler nur durch ./icont aufzurufen wäre und das erzeugte Programm wie ein Bash-Skript ./name aufzurufen sein, bääh, nee, ist mir zuwider, so arbeiten zu müssen.
    Also, um es nochmals klar zu stellen: Der Icon-Compiler wird durch icont, der Interpreter durch iconx aufgerufen. Das erzeugte Programm wird einfach durch dessen Namen aufgerufen. chmod oder Ähnliches ist nicht erforderlich, um direkt ausführbare Dateien zu erhalten - weder für den Compiler noch für die erzeugten Programme.


    Ergänzung 08.09.2014:
    Zu diesem Schritt gehört auch, dass wir im gleichen Verzeichnis weiter machen, in dem wir vor dem Reboot gewesen sind.


    Code
    1. cd /home/pi/icon9_51/bin


    18. Testprogramm 1 zum Testen der Installation: hallo.icn
    Nach Aufruf des Editors (in Teil 2 des Tutorial wird die Einrichtung einer IDE beschrieben)

    Code
    1. sudo nano /home/pi/icon9_51/bin/hallo.icn


    diesen Quellcode eingeben:

    Code
    1. procedure main()
    2. write("Hallo, Ihr da draussen!")
    3. end


    und speichern (Strg-X, J, Enter).


    19. hallo.icn Compilieren und starten
    - Compilieren:

    Code
    1. icont hallo


    - Starten:

    Code
    1. hallo


    - Compilieren und Starten:

    Code
    1. icont hallo -x


    - Mit dem Interpreter starten:

    Code
    1. iconx hallo


    Letzteres geht, der Grund dazu liegt wohl auch in der Geschichte. Übrigens kann man Icon-Quellcode auch wie ein bash-Skript laufen lassen - vielleicht findet das dann noch mehr Akzeptanz in der RaspberryPi-Szene.


    Anmerkung (26.12.2014):
    Kommt hier eine Fehlermeldung

    Code
    1. bash: icont: Kommando nicht gefunden.


    dann liegt ein Fehler in der Pfad-Zuweisung zu PATH vor - bitte Schritt 16 SORGFÄLTIG prüfen und korrigieren.


    20. Testprogramm 2 zum Testen Erzeugen eines Fensters: hello_window.icn
    Nach Aufruf des Editors (in Teil 2 des Tutorial wird die Einrichtung einer IDE beschrieben)

    Code
    1. sudo nano /home/pi/icon9_51/bin/hello_window.icn


    diesen Quellcode eingeben:


    Code
    1. link graphics
    2. procedure main()
    3. WOpen("label=Mein 1. Icon-Fenster","font=sans,20")
    4. Notice("Hallo, Ihr da draußen!")
    5. WDelay(5000)
    6. WClose()
    7. end


    21. hello_window.icn Compilieren und starten
    - Compilieren:

    Code
    1. icont hello_window


    - Starten:

    Code
    1. hello_window


    - Compilieren und Starten:

    Code
    1. icont hello_window -x


    - Mit dem Interpreter starten:

    Code
    1. iconx hello_window


    Letzteres geht, der Grund dazu liegt wohl auch in der Geschichte. Übrigens kann man Icon-Quellcode auch wie ein bash-Skript laufen lassen - vielleicht findet das dann noch mehr Akzeptanz in der RaspberryPi-Szene.


    Abschließende Tipps
    Tipp 1: Eigenen Quellcode (*.icn) zunächst in /home/pi/icon9_51/bin speichern


    Tipp 2. Compilieren eigener Programme immer aus dem Arbeitsverzeichnis heraus

    Code
    1. cd /home/pi/icon9_51/bin


    oder ein in Geany definierter Pfad (s. Teil 2 dieses Tutorials)


    Tipp 3: Compilieren eigener Quellcodes

    Code
    1. icont programmname


    erzeugt ausführbares Programm


    Code
    1. icont programmname -x


    und startet es danach


    Code
    1. iconx programmname


    startet das Programm


    Code
    1. programmname


    startet das Programm


    Bei Programmen, die eine graphische Oberfläche erzeugen, muss startx oder startxfce4 gestartet sein. Andere Programme laufen auf der Konsole.



    Tipp 4: starten von in Icon geschriebenen Anwendungen
    Icon-Programme können wie jedes andere Programm auch gestartet werden durch
    - beim Bootvorgang
    - Eingabe des Programmnamens im Terminal
    - aus einem Skript heraus
    - aus einem anderen Icon-Programm heraus
    - Anklicken eines Piktogramms
    - Anklicken eines Eintrages aus dem Anwendungsmenü
    - Anklicken eines Eintrages der Panel-Leiste


    Tipp 5: Literatur zu Icon:


    Wem die Freigabe meines Icon-Tutorials zu langsam geht, kann sich gern in die Original-Literatur vertiefen und dort eingraben.

    Code
    1. cd /home/pi/Downloads
    2. wget http://www.cs.arizona.edu/icon/ftp/doc/lb1up.pdf
    3. wget http://www.cs.arizona.edu/icon/ftp/doc/lb2up.pdf
    4. wget http://www.cs.arizona.edu/icon/ftp/doc/gb1up.pdf
    5. wget http://www.cs.arizona.edu/icon/ftp/doc/gb2up.pdf
    6. wget http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf
    7. wget http://www.cs.arizona.edu/icon/ftp/doc/ib2up.pdf
    8. wget http://www2.cs.uidaho.edu/~jeffery/icon/humanists/humanist.pdf
    9. wget http://www.tools-of-computing.com/tc/CS/iconprog.pdf


    [EDIT: 15.05.2016]
    Und nach langer Recherche sind sie wieder zu haben, Präsentationen / Slides, die mal von Beratungsfirmen (MSE) eingesetzt wurden bzw. der legendäre CSc 451-Kurs der Uni Arizona...


    Code
    1. wget http://www.mitchellsoftwareengineering.com/icon/icon.sli.pdf
    2. wget http://www.cs.arizona.edu/classes/cs451/icon.pdf
    3. wget http://www.cs.arizona.edu/classes/cs451/graphics.pdf


    [/EDIT]



    Wenn Fragen bestehen oder noch immer etwas unklar ist, dann bitte einfach rückfragen. Ich werde dann diese Vorgehensweise anpassen. Es wäre doch gelacht, wenn das nicht irgendwann mal perfekt läuft...



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    5 Mal editiert, zuletzt von Andreas ()

  • Hi Andreas,


    ich finds auch Klasse was Du hier machst, aber leider gehen die ganzen Teile hier im Tut Bereich unter.


    Besser wäre es wenn das alles Richtung Programmiersprachen umverlagert wird mit nem eigenen Abschnitt.


    @Mods, was würdet Ihr davon halten?

    cu C-3po

  • Hallo Dreamshader,


    Zitat

    also ich muss sagen, ich finde Dein Durchhaltevermögen beeindruckend.


    tja, da steckt viel Arbeit drin, das ist wohl wahr - aber irgendwie soll es nicht auf meinen Rechenknechten versauern. Die Programmiersprache Icon hat die gröbsten Stolpersteine anderer Sprachen vermieden - und läuft insbesondere auf kleinen Systemen überraschend flott.


    Einen Gag bereite ich gerade vor... Icon so umstricken, dass die resultierende Sprache wie deutscher Pseudo-Code aussieht - aber sich compilieren lässt. Was noch ein reiner Gag ist, könnte auch was Grösseres werden. [Wo haben die Schweizer das "sz" versteckt?] - ohne allerdings eine besondere Herausforderung zu werden.


    Zitat


    Und irgendwie (blödes Wort) bringst Du das imho auch gut rüber ( obwohl ich mir das auf meine alten Tage nicht mehr antun werde ... dann eher PIC-Assembler )


    Äh ... Altersweisheit? Oder Nachwirkungen meiner Tätigkeit in einem Institut mit wöchentlichen (mehreren) Lehrveranstaltungen? So in Richtung "sich in Geduld üben"... :s



    [hr]
    Hallo C3PO,


    Du begegnest mir hier zum ersten Mal. :cool: Schön, dass Dir Icon gefällt...


    Zitat

    Besser wäre es wenn das alles Richtung Programmiersprachen umverlagert wird mit nem eigenen Abschnitt.


    In dem Bereich hatte ich zuerst auch geschaut - fand aber wenig Ansatzpunkte. Bei der Fahrt, die Icon mittlerweile aufgenommen hat, wäre da eine eigene Rubrik nicht schlecht.


    Gute Idee!


    Beste Grüsse


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,


    hast du dein PDF-Dokument um den Beitrag #6 schon erweitert oder muss ich den Post parallel zum PDF-Dokument lesen?


    Gruß

    Einmal editiert, zuletzt von AliceDeh ()

  • Hallo AliceDeh,


    das PDF-Dokument habe ich leider noch nicht aktualisiert.


    Im Beitrag 7 gibt es allerdings eine mittlerweile idiotensichere Installationsanleitung.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas ()

  • Hi,


    ich bekomme bei den make Befehlen sowas hier:


    Code
    1. collect2: ld returned 1 exit status
    2. Makefile:32: recipe for target 'iconx' failed
    3. make[1]: *** [iconx] Error 1
    4. make[1]: Leaving directory '/home/pi/icon9_51/src/runtime'
    5. Makefile:63: recipe for target 'Icont' failed
    6. make: *** [Icont] Error 2


    und kann dann entsprechend auch keine compilierten Dateien ausführen, weil iconx nicht da ist. Hast du eine Idee?


    Hier mal das bin Verzeichnis:


    Code
    1. pi@BeeHive ~/icon9_51/bin $ dir
    2. hallo hello_window.u1 host-repair.u1 icont
    3. hallo.icn hello_window.u2 host-repair.u2 libIgpx.a
    4. hello_window.icn host-repair.icn icon


    und:

    Code
    1. pi@BeeHive ~/icon9_51 $ ls
    2. bin config doc ipl lib Makedefs Makefile man README src tests

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

  • Hallo Dionysios,


    ich vermute, dass Du Dich im falschen Verzeichnis befunden hast, als Du make aufgerufen hast.


    Mache folgendes:


    Code
    1. cd ~/icon9_51


    und wiederhole Schritt 13. Wenn dann wieder Fehlermeldungen kommen, dann hast Du einen Schritt vorher ausgelassen oder Dich dort verschrieben. In dem Fall wiederhole alles ab Schritt 8.


    Was mich wundert ist die Anwesenheit der .u1 und .u2-Dateien. Diese werden nur erzeugt wenn der Compiler icont aufgerufen wird - aber mit Argumenten, die nicht bis zur ausführbaren Datei gehen. Also hast Du Dich dort (Schritte 19 und 21) auch verschrieben.


    Und das macht mich stutzig: :s Wenn Du im Schritt 13 Fehlermeldungen erhältst - warum machst Du dann bis Schritt 21 weiter?



    Poste bitte auch mal den Inhalt der Datei

    Code
    1. ~/icon9_51/Makefile


    Compilierte Dateien kannst Du unabhängig von der Anwesenheit von iconx ausführen. Der Compiler icont ist bei Dir vorhanden.


    Poste bitte auch mal die Ausgabe von

    Code
    1. echo $PATH
    2. echo $LPATH
    3. echo $IPATH
    4. ls -R ~/icon9_51/src
    5. pwd


    Äh ... irgendwas musst Du anders gemacht haben. Der User AliceDeh hat Icon letzte oder vorletzte Woche problemlos zum Laufen gebracht. Und das inklusive GPIO etc.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas ()

  • Jap, mein Fehler, ... hab ich in dem anderen Thread schon geschrieben :-) Sorry dafür. Deine Anleitung ist echt 1:1 so durchzuführen, dann klappts ;-)) Mitdenken ist nicht erlaubt und wird mit Verachtung bestraft (Berechtigungsprobleme). Shame on me.


    Nun noch eine Frage: Ich habe jetzt erfolgreich dein host-repair Script kompiliert. Ich konnte es unter X auch starten :bravo2: (über ssh gibt es natürlich die Fehlermeldung - cant open window).


    Schließe ich den Terminal unter X, ist auch das Fenster futsch. Läuft das Script weiter?


    Wie erreiche ich es, dass dein Programm bei Pi start jedes Mal automatisch mit der Option "auto repair" gestartet wird? Ich möchte ja den Pi auch eigentlich ohne startx starten und ohne Monitor dran betreiben.


    VG, Dio

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

  • Hallo Dio,


    na, welch ein Erfolgserlebnis am frühen Morgen!


    Das Tool Host-Repair habe ich für mich persönlich geschrieben, weil mir die lästigen Netzwerkausfälle mit damals unbekannter Ursache auf den Nerrv gegangen sind. Ich wollte einfach nur ein Gefühl dafür bekommen, wie oft das Problem auftritt und ob es irgendwelche Möglichkeiten gibt, das Problem bewusst hervorzurufen.


    Die beste Möglichkeit ist, ein Programm in einer graphischen Benutzeroberfläche laufen zu lassen.


    Ob das Programm läuft, kannst Du im Terminal mit

    Code
    1. pidof iconx


    feststellen. Ich würde mal erwarten, dass es ohne X nicht laufen wird.


    Du kannst aber gern die beiden Prozeduren, die für das Erkennen und Beseitigen der Netzwerkthematik zuständig sind, in ein eigenes "fensterloses" Programm stecken... Du müsstest Dir dann nur überlegen, wie das Programm Dich benachrichtigen kann. Ich persönliche halte die Benachrichtigung durch das Programm sinnvoller als die eigentliche Aktion.


    Denn eigentlich dürfte das Programm in einem stabilen Umfeld gar keine Ausfälle registrieren, insbesondere dann, wenn
    - die Stromversorgung stabil läuft
    - über den Raspberry Pi betriebene Verbraucher diesem mehr als ausreichend Strom übrig lassen
    - die Netzwerkkonfiguration sinnvoll im Einsatz ist


    Wenn Du das Programm automatisch beim Start des Raspberry Pi laufen lassen möchtest, dann musst Du dies über eine der zahlreichen Autostart-Optionen erledigen.


    Autostart macht Dir Vorschläge dazu.


    Wenn Du das Programm mit voreingestellten Optionen betreiben möchtest, dann musst Du diese beim Programmstart als Argument übergeben - und im Programm mögliche Argumente abfragen.


    Oder Deine favorisierte Option im Programmcode hinterlegen und neu compilieren.


    Wenn Du Deinen Raspberry Pi ohne Monitor, nur per SSH betreiben möchtest, wie soll Dir ein Programm, das auf dem Raspberry Pi läuft, denn Mitteilungen machen, wenn das Netzwerk nicht mehr vorhanden ist? :s :huh:


    Irgendeine Ausgabe-Möglichkeit sollte schon da sein. Oder möchtest Du eine 7Segment-Anzeige an den GPIOs des Raspberry Pi betreiben, die dann jeweils hochzählt... und über den Dezimalpunkt anzeigt, ob die Verbindung steht oder nicht?


    Möglich ist alles.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas ()

  • Was ist mit deiner anfänglichen Version "ohne GUI" ? Ist das lauffähig und aktuell?


    Es darf ja ruhig loggen, z.B. einen Zähler in einer Datei, oder bei jedem Crash kurz den Zeitstempel in eine Log schreiben. Dann könnte ich selbst über SSH die LOG Datei aufrufen und nachsehen.


    Starten würde ich dein Skript gern bei @reboot über die Crontab.

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

  • Hallo Dio,


    was bringt Dir eine Logdatei auf der SD-Karte, wenn die Verbindung auch trotz intensivster Bemühungen durch das Programm nicht mehr hergestellt werden kann? Ganz viele Einträge in kurzer Zeit. Der erste Eintrag wurde dann wieder gelöscht, um die Log-Datei auf eine bestimmte Anzahl an Einträgen zu halten.


    Mein Tip an Dich: Schließe einen Bildschirm an Deinen Raspberry Pi an, lasse das Programm Host-Repair eine zeitlang unter X auf Deinem Raspberry Pi laufen. Und wenn Du ein Gefühl dafür bekommst, unter welchen Umständen die Netzwerkverbindung besonders häufig (und vor allem wie häufig) ausfällt, dann kümmerst Du Dich Schritt für Schritt um die Beseitigung der Ursachen. Und wenn dann alles zuverlässig läuft, dann kannst Du den Raspberry Pi immer noch "kopflos" betreiben.


    Übrigens: Wenn der der Raspberry Pi die Netzwerkverbindung verloren hat, dann ist auch nichts mehr mit SSH...



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas ()

  • Ja, so werde ich es tun. Ich dachte nur, dein Script sorgt dafür, dass im Ernstfall der Pi wieder erreichbar wird! Somit käme ich ja per SSH auch wieder drauf.


    Ich lasse es nun mal unter X laufen.


    Die meisten hier sagen ja, es läge an der Stromversorgung. Ich kann mir das zwar beim besten Willen nicht vorstellen, aber: Mit was für einer Stromquelle wäre das denn ausgeschlossen? Mein einziger USB Verbraucher "kopflos" ist ja ein kleiner WLAN Stick und mein Netzteil hat 2000mA.

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.