L I V E Stammtisch ab 20:30 Uhr im Chat
  • Ich würde gern LUA etwas mehr mit dem Pi in Verbindung bringen und pushen, da ich glaube dass es sehr Anfänger-Freundlich ist

    Bash
    sudo apt-get update
    #sudo apt-get install lua5.3 liblua5.3-dev  # lua5.1 wird von raspi-config verwendet und muesste vorher deinstalliert werden.
    sudo apt-get install luarocks

    luarocks ist ähnlich wie pip eine Paketverwaltung.

    Manche Module sind auch über apt-get verfügbar: apt-cache search '^lua-.*'

    Durch ausführen vom Konsolen Befehl lua beziehungsweise lua5.3 gelangt man ebenso wie in Python, in eine interaktive lua Konsole.


    Um GPIO's anzusprechen gibt es mehrere LUA-Module...

    rpi-gpio ist leider veraltet und wurde seit 3 Jahren nicht mehr weiterentwickelt und basiert auf dem Python Module RPi.GPIO.

    rpio verwendet leider nur das sysfs und ermöglicht somit leider nicht volle Funktionalität.

    lua-periphery scheint die beste Wahl zu sein und unterstützt auch andere embedded Linux Systeme sowie I2C, SPI und Serial.

    Bash
    sudo luarocks install lua-periphery

    Anwendungsbeispiele finden sich hier => https://github.com/vsergeev/lua-periphery#examples

    Genauere Details finden sich hier => https://github.com/vsergeev/lua-periphery/tree/master/docs

    Das Module verwendet übrigens BCM also GPIO#.

    Ähnlich wie in Python, definiert man Funktionen wenn sich Code mehrmals wiederholen würde...

    In LUA gibt es leider eine Besonderheit die ich direkt vorweg erwähnen möchte: ANSI C unterstützt kein sleep und somit sollte man sich direkt eine Funktion dafür definieren... Ich persönlich bevorzuge:

    Code
    function sleep(s)
      local ntime = os.clock() + s
      repeat until os.clock() > ntime
    end

    Weitere gibt es hier => http://lua-users.org/wiki/SleepFunction

    Das lua-periphery Module liefert hierfür aber auch einige Funktionen sog. Helper Functions

    Code
    local periphery = require('periphery')
    periphery.sleep(2) -- seconds
    periphery.sleep_ms(2000) -- milliseconds
    periphery.sleep_us(2000000) -- microseconds

    Ein Beispiel um eine LED blinken zu lassen:

  • Hi,

    gut dass du LUA erwähnst. Ich hatte es damals erstmals mit dem Computercraft-Mod für Minecraft durch dich entdeckt. Hatte mir aber überhaupt nicht so recht getaugt da die Syntax an einigen Ecken nicht so logisch erscheint.

    Ich musste mich dann etwas mehr damit auseinandersetzen, da ich an meinem Desktop-PC Gentoo und AwesomeWM verwende. Letzteres ist in Lua geschrieben und einen Tiling Window Manger den man bis zur Decke anpassen kann? Da war es um mich geschehen.

    Mfg

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Hallo,

    Findest du? IMHO ist der Syntax von Lua deutlich einfacher bzw. auch der "overhead" beim Programmieren ist geringer als bei Java. Heißt: weniger Boilerplate-Code. Außerdem kennt Lua ja auch nur eine Datenstruktur, was die Sache auch einfach(er) macht.

    Abgesehen davon: da Lua sich selber ja eher als "extension language" sieht - und als solche auch vielerorts erfolgreich genutzt wird - halte ich Lua für "komplette" Projekte für nicht sooo gut geeignet wie z.B. Python.

    Gruß, noisefloor

  • Hallo,

    Findest du? IMHO ist der Syntax von Lua deutlich einfacher bzw. auch der "overhead" beim Programmieren ist geringer als bei Java. Heißt: weniger Boilerplate-Code. Außerdem kennt Lua ja auch nur eine Datenstruktur, was die Sache auch einfach(er) macht.

    Abgesehen davon: da Lua sich selber ja eher als "extension language" sieht - und als solche auch vielerorts erfolgreich genutzt wird - halte ich Lua für "komplette" Projekte für nicht sooo gut geeignet wie z.B. Python.

    Gruß, noisefloor

    Das sehe ich sehr ähnlich.

    Ich finde die Syntax ziemlich "eindeutig" und verständlich.

    Andererseits sehe ich Lua nicht unbedingt schlechter oder besser für viele Pi-Projekte, als andere Sprachen. Letztendlich machen vielerseits die Skripte a.) nichts zeitkritisches und b.) sind die Operationen doch meist auch ziemlich einfach (Sachen von links nach rechts kopieren, ein weiteres Programm starten, ...).

    Aus Erfahrung muss ich für mich persönlich allerdings sagen, dass ich bei großen Projekten nicht mehr auf eine stark getypte Sprache verzichten wollen würde, auch wenn dies bspw. manch' Interface komplizierter macht. Häufig verschiebt sich die Komplexität in dynamisch getypten Sprachen leider in die Funktionen, in denen Type-Validations stehen und man im Grunde das Problem nicht löst, sondern nur eine Ebene weiter reicht.

    Ich hoffe meigrafd macht mit diesem Lua-Exkurs weiter, denn ich finde es selbst immer sehr spannend neue Sprachen und vor allem deren "Kniffe" kennen zu lernen. Gerade von Lua habe ich auf der Arbeit eigentlich nur gutes bislang gehört ...

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Für Anfänger sindobjektorientierte Sprachen erfahrungsgemäß etwas schwierig. Vielleicht ist es besser, mit einer Prozeduralen Sprache anzufangen. Das kommt dem normalen Denken etwas näher.

    Nope. Wenn man sich mal die prozedurale Programmierdenke angewöhnt hat ist es schwer sich die objektorientierte Denke anzueignen. Also lieber gleich mit OO anfangen :shy:

  • Nope. Wenn man sich mal die prozedurale Programmierdenke angewöhnt hat ist es schwer sich die objektorientierte Denke anzueignen. Also lieber gleich mit OO anfangen :shy:

    Am verständlichsten sind sicherlich funktionale Sprachen :P

    Ich denke das kommt immer ganz stark darauf an, was man machen will und genau da beißt sich die Katze in den Schwanz - denn woher soll eine Anfänger soetwas einschätzen können?! :)

    Am Ende ist alles "nur ein bisschen Programmieren", von daher einfach mal mit irgendeiner Sprache anfangen und erst einmal die Prinzipien dahinter verstehen. Dauert eh schon lang genug ;)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.


  • Am Ende ist alles "nur ein bisschen Programmieren", von daher einfach mal mit irgendeiner Sprache anfangen und erst einmal die Prinzipien dahinter verstehen. Dauert eh schon lang genug ;)

    Sehe ich nicht so. Es ist die Methode wie man ein größeres Problem systematisch in kleiner Teile zerlegt. Die Vorgehensweise ist sehr unterschiedlich. Es ist nicht nur mal so wie mal einen Rechtslenker zu fahren wenn man einen Linkslenker gewohnt ist. Ist eher ein Kreuzfahrschiff was völlig anders gesteuert werden muss.
    Die Basics wie Loops, Bedingungen, arithmetische Ausdrücke usw sind allerdings ähnlich.

  • Dann haben wir vielleicht ein anderes Verständnis von Beginner.

    Ich denke gerade an die Leute, die vorher nie wirklich was mit Programmabläufen etc. zu tun hatten. Meiner Meinung nach sollte man die Anfänger nicht direkt mit Fragen konfrontieren, die sie eh nicht beantworten können (Sprachparadigma) oder die Auswahl einer Programmiersprache an so eine große Glocke hängen.

    Dem Rechner ist am Ende egal, welche Systematik der Mensch sich für seine Hilfssprache genutzt hat, im Grunde sind es nur alles Hilfen für uns Entwickler. Zudem gibt es ja hier schon ganz schnell verschiedene Meinungen, was "am einfachsten zu verstehen ist" - das hängt von jedem Lernenden selbst ab und vor allem von dem (Langzeit-) Problem was dieser damit ggf. lösen möchte. Beispielsweise ist Python in meinen Augen in vielen Fällen keine Ideallösung und gerade für Anfänger kann es frustrierend sein, jedes Mal einen Code-Schnipsel aus dem Netz erst einmal formatieren zu müssen, weil man selbst noch nicht den Wert eines guten Code-Editors kennen gelernt hat.

    Aber ich glaube das führt hier zu weit und ist ziemlich krass in der Meta-Ebene ;-).


    Zum eigentlichen Thema Lua:

    Ich bin zuletzt bei Recherchen zum Thema 2D-Engines (mit HTML/WebGL Export) auf 1-2 Frameworks gestoßen, die auf Lua basieren. Das Spannende dabei war, dass teilweise gar kein großer Transpile/Compile Aufwand betrieben wurde, sondern Lua direkt im Browser via JavaScript Lua-VM gestartet wurde - und im Vergleich mit so einer 8+ MB-Unity3D-Runtime "wiegen" diese VMs teilweise keine 100 kB.

    Das interessiert vielleicht niemanden, aber ich war davon sehr beeindruckt :).

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Hallo meigrafd,

    ich finde es prima, dass Du hier Deine LUA-Kenntnisse ausrollen willst, denn es gibt ja kaum deutschsprachige Literatur. Ich habe einen Link mit einer deutschen Beschreibung gefunden, die ich euch nicht vorenthalten will. Hier ist der Link

    http://lua.coders-online.net/

    Mit freundlichen Grüßen

    pofoklempner

    Ein Blitz, ein Knall, ein Schrei, mit dem Raspi ist es vorbei !!!

    Einmal editiert, zuletzt von pofoklempner (19. Oktober 2017 um 22:15)

  • Im Grunde drückt ihr es ja beide selbst aus noisefloor und Linus - eigentlich sollte es egal sein, welche Programmiersprache ich auf welchem System entwickle, aber leider ist dies allzu häufig nicht der Fall.

    Linus bzgl. der VM bin ich auf Moonshine als Lua-Framework gestoßen. Ich hatte zuletzt mit einem Arbeitskollegen noch über eine andere 2D (?) Engine gesprochen, aber mir will der Name einfach nicht mehr einfallen und die Internetsuche spuckt auch nichts brauchbares aus. Wenn ich morgen daran denke, frage ich ihn aber noch einmal und trage das hier nach :).

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Hallo Meigrafd,

    der Raspberry Pi verwendet mehrfach Lua. Ist deren Funktion beim Wechsel auf Lua 5.3 immer gewährleistet? Das sind sonic: mode/lua; Demos/lua und lxers/lua; bei Wolfram mode/lua sowie /usr/bin/lua und /usr/share/bash-completion/completions/lua. Genutzt werden folgende Versionen lua 5.1.5-8.1 und luajit 2.04+dfsg-1 (Compiler für 5.1) . Ich denke, vorerst kommt man auch mit der Version 5.1 aus. Der Funktionsumfang sind immerhin 4 A4 Seiten lang oder was meinst Du. Gibt es bei Dir schon neue Erkenntnisse mit Docker Swarm?

    Mit freundlichen Grüßen

    Pofoklempner

    Ein Blitz, ein Knall, ein Schrei, mit dem Raspi ist es vorbei !!!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!