Wunschlliste Themen

Begonnen von Wzut, 28 März 2020, 19:53:24

Vorheriges Thema - Nächstes Thema

mahowi

Ich habe mir gerade mal die Versionshistorie angesehen. Das letzte Mal, daß ich mehr mit Perl programmiert habe, war wohl so zwischen 5.003 und 5.6.0. Irgendwo müsste ich auch noch ein Buch aus der Zeit zur Perlprogrammierung haben.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

RichardCZ

Zitat von: mahowi am 01 April 2020, 09:06:43
Ich habe mir gerade mal die Versionshistorie angesehen. Das letzte Mal, daß ich mehr mit Perl programmiert habe, war wohl so zwischen 5.003 und 5.6.0. Irgendwo müsste ich auch noch ein Buch aus der Zeit zur Perlprogrammierung haben.

Damit kannst Du ja perfekt Feuer machen, wenn die Gaslieferungen aus Russland eingestellt werden.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Wzut

Zitat von: RichardCZ am 01 April 2020, 08:14:02
Wobei sich hier die kategorische Frage stellt, warum man bewusst eine kaputte Perl Version verwendet.
Die Antwort ist simpel, wenn auch OT :
Weil das mein Desktop PC ist und ich auf dem eigentlich nichts mehr mit Perl mache. Ich habe einmal den Fehler gemacht das 96_SIP Modul drauf zu schreiben und bin bald wahnsinnig geworden warum fast nur bei mir die DTMF Erkennung lief und nicht bei der Masse der Usern. Die Lösung war damals eine Eigenart des Raspi. Seit dieser Zeit schreibe und teste ich alle meine Module nur noch auf dem 3er Raspi. D.h. ich habe eine Testumgebung aus Hard & Software die dem entspricht was die Mehrheit der FHEM User auch im Einsatz hat.  Auf meinem Testraspi halte ich auch FHEM recht aktuell, auf meinen Produktiv Systemen sieht das aber ganz ganz andres aus (Bsp der eine läuft noch unter wheezy mit FHEM 5.5 ) I.d.R. checke ich auch erst ein Modul bzw eine neue Version ein wenn sie bei mir sowohl unter uralt als auch aktuell läuft. Mir ist schon klar das das nicht deiner Sicht der Dinge entspricht, aber ich kämpfe lieber ein paar Stunden für mich alleine als nachher hier im Forum mit den Usern :) Es wurde an andere Stelle schon öfters geschrieben : Was die FHEM User teilweise da für Hardware /Software Zoos am laufen haben ist der Wahnsinn und ich wage zu behaupten das jeder Modulautor das nur zu einem Bruchteil bei sich nachstellen kann.   
   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

CoolTux

Zitat von: RichardCZ am 01 April 2020, 08:14:02
Wobei sich hier die kategorische Frage stellt, warum man bewusst eine kaputte Perl Version verwendet.
https://perldoc.perl.org/index-history.html

5.24.4 wenn es schon 5.24 sein muss.

Ganz einfach. Die meisten User kennen sich mit IT und Co nicht sonderlich aus. Sie nehmen den einfachsten Weg.

apt-get install perl

Und behalten die Version so lange bis ein dist-upgrade eine neuere Version liefert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

RichardCZ

Zitat von: Wzut am 01 April 2020, 09:49:31
Es wurde an andere Stelle schon öfters geschrieben : Was die FHEM User teilweise da für Hardware /Software Zoos am laufen haben ist der Wahnsinn und ich wage zu behaupten das jeder Modulautor das nur zu einem Bruchteil bei sich nachstellen kann.   

Ja - derzeit. Ich bin halt jemand, der nicht kampflos aufgibt. Man kann sich gegen diese Kombinatorik stemmen. Bin ja dabei und auch wenn ich jetzt in so manchen Augen "Druck mache" - das wird trotzdem nicht von Heute auf Morgen gehen, denn der Stapel an Legacy durch den ich mich durchbeissen muss - zusätzlich zum FHEM KnowHow der Interna aneignen - ist nicht unbeträchtlich.

Also ich habe einen RasPi auf einer VM unter Proxmox laufen. Und einen BBB.
Den Zoo wird man früher oder später auch virtuell nachstellen können.
https://metacpan.org/pod/Test::MockObject und andere.

Der Unterschied ist wohl, dass ich den erreichbaren Bruchteil quantitativ anders einschätze.

Zitat von: CoolTux am 01 April 2020, 09:56:14
Ganz einfach. Die meisten User kennen sich mit IT und Co nicht sonderlich aus. Sie nehmen den einfachsten Weg.
apt-get install perl
Und behalten die Version so lange bis ein dist-upgrade eine neuere Version liefert.

Ich bilde mir ein was von Entwicklern und nicht Usern gesagt zu haben.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Beta-User

Mal was on Topic:

Am WE habe ich nebenbei auch die MySensors-relevanten .pm durch perlcritic gejagt, mit teils unterschiedlichen Ergebnissen. Eines davon war die (recht nachdrückliche) Empfehlung, statt "constant" doch besser jeweils (feste) Variablen zu nutzen, wenn ich das richtig verstanden habe.

Für neuen Code kein allzugroßes Thema, aber nun ist die "multidimensionale lookup-Table" (oder wie auch immer man sowas nennt) nun mal vorhanden: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/Device/MySensors/Constants.pm.

Die ist quasi das Gegenstück zu der entsprechenden Arduino-lib, die auf den Nodes werkelt: https://github.com/mysensors/MySensors/blob/development/core/MyMessage.h.

Klar, hätte man damals auch anders lösen können, aber das Ding ist da und funktioniert auch. Ist so statisch wie der Name vermuten läßt, und ich gehe auch davon aus, dass in überschaubarer Zukunft nicht noch viele weitere Sensor- und Aktortypen erfunden werden...

Frage dazu: Mein Bauchgefühl sagt mir, dass es sich nicht lohnt, der Empfehlung nachzugehen, Aufwand (sehr zentrale Stelle des Gesamtcodes) und Ertrag (?) scheinen mir nicht in einem akzeptablen Verhältnis zu stehen.

Richtig oder falsch?





FALLS falsch (geht eher an die FHEM-Experten):
Wo wären die Daten eigentlich am besten unterzubringen?
Tendenziell stört es mich "schon immer", dass diese ganzen statischen Daten, (die im Lauf der Zeit auch erheblich gewachsen sind), in jedem List eines MYSENSORS_DEVICE auftauchen, und mit einem einfachen Punkt vor dem jeweiligen Elementnamen (readingMappings bzw. typeMappings, an sich sollte also auch ".readingMappings" bzw. ".typeMappings" gehen) scheint es nicht getan zu sein, ich _vermute_ das liegt an der Art der Referenzierung (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/10_MYSENSORS_DEVICE.pm).

624        my $readingMappings = $hash->{readingMappings};
625        my $typeMappings = $hash->{typeMappings};
Da dieser ganze Part eigentlich statisch sein müßte, _könnte_ man die Daten auch entsprechend der DevMod-Intro nach %data schieben (da in eine Array-Struktur, die MySensors heißen könnte), und dann im Device selbst nur vorhalten, was genutzt wird (und/oder benannt).

(Nur für den Fall der Fälle!): Gute Idee oder überholt?

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

RichardCZ

Zitat von: Beta-User am 01 April 2020, 10:10:32
Frage dazu: Mein Bauchgefühl sagt mir, dass es sich nicht lohnt, der Empfehlung nachzugehen, Aufwand (sehr zentrale Stelle des Gesamtcodes) und Ertrag (?) scheinen mir nicht in einem akzeptablen Verhältnis zu stehen.

PBP 55-58

ZitatThe obvious question at this point is: why use Readonly instead of use constant? After all, the constant pragma comes standard with Perl, and the constants it creates don't have those annoying sigils.

Well, it turns out those annoying sigils are actually highly useful, because they allow Readonly-generated constants to be interpolated into other strings.
...
ZitatBut perhaps most importantly, use Readonly allows you to create lexically scoped constants at runtime

Und ganz zum Schluss hat auch Conway die "Wenn es gar nicht anders geht..."

ZitatIf you decide not to use the Readonly module in production code (for performance or political reasons), then using constant is still better than using literal values.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Beta-User

Danke erst mal für die Rückmeldung, scheint so, als käme da ein dickes Pflaster drauf ::) .

Btw.: Du darfst davon ausgehen, dass ich den Text gelesen habe. Das Problem ist: Ich verstehe ihn - v.a. wg. der Fachbegriffe - nicht, und vermutlich muß ich (mit der Geschwindigkeit, in der ich mir diese Dinge eben erschließen kann) etwa 230 Jahre alt werden, um eventuell die Chance zu haben, das bis dahin tatsächlich einigermaßen verstanden zu haben (jedenfalls, unter der Annahme, meine Lerngeschwindigkeit bliebe bis dahin in etwa konstant...).
Ich hoffe zwar sehr, dass ich damit die große Ausnahme bleibe, vermute aber eher, dass ich "nur" einer der Wenigen bin, der sich traut, das zuzugeben.




@FHEM-Experten:
Hat einer eine Idee, wie ich diesen Teil ggf. auf schnellem Wege unsichtbar machen könnte?
(Habe ich bei meinen Tests mit dem Punkt nur ein Vorkommen des Namens im Code übersehen, oder geht das eben prinzipiell nicht?)
(Ich kann weiter testen oder versuchen, das Rätsel irgendwo anders zu lösen, aber das kommt mir ehrlich gesagt auch unter Kosten/Nutzen-Gesichtspunkten unverhältnismäßig vor).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

herrmannj

Ich verstehe dein 'problem' nicht, hast du bitte ein Beispiel für mich bitte?

RichardCZ

Zitat von: Beta-User am 01 April 2020, 10:33:34
Das Problem ist: Ich verstehe ihn - v.a. wg. der Fachbegriffe - nicht

Keine Scheu! Einfach fragen.

Pragma(ta)?
Interpolation?
Sigils?
Lexical scope?
Literal value?
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Wzut

Zitat von: Beta-User am 01 April 2020, 10:33:34
vermute aber eher, dass ich "nur" einer der Wenigen bin, der sich traut, das zuzugeben.
wir beide sind die einzigen NOOPS :) 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

herrmannj

Zitat von: Wzut am 01 April 2020, 11:17:57
wir beide sind die einzigen NOOPS :)
das glaube ich nicht. Wo is denn die messbare Grenze zwischen NOOP und ... 'PRO'? Ihr könnt mehr als 99% vom Rest der Bevölkerung! Nach oben ist immer Lust.


@beta: mglw oben untergegangen. Bitte gib mir ein Beispiel von dem was Du lösen willst. Ich "glaube" zu verstehen will mir aber sicher sein

Beta-User

#27
Zitat von: herrmannj am 01 April 2020, 10:46:35
Ich verstehe dein 'problem' nicht, hast du bitte ein Beispiel für mich bitte?
"Problem" ist es nur dahingehend, dass in jedem list eines MYSENSORS_DEVICE ca. 50+ Zeilen drin sind, die eigentlich nichts speziell mit dem Device zu tun haben und bei allen gleich sind, habe grade keinen einfachen Zugriff auf ein Testsystem, aber ein einfaches "define MyNode1 MYSENSORS_DEVICE 10" sollte ausreichen (bei Bedarf liefere ich nach). So unnötig wie unübersichtlich... (beschwert hat sich noch keiner, mich hat es aber schon in der Zeit als reiner Anwender irritiert  ;D ). Ist aber bestenfalls ein "Schönheitsfehler"...

Achtung: Es gibt neben den genannten noch ein drittes Mapping im Code. Über das kann der Anwender dann den Readingnamen bestimmen, wenn er will (macht praktisch keiner, aber wenn, ist es sinnvoll, das im list zu sehen. Also z.B. aus "temperature23" (Type-mapping.ChildID) "Außentemperatur" machen u.ä.).




Zitat von: RichardCZ am 01 April 2020, 10:56:19
Keine Scheu! Einfach fragen.

Pragma(ta)?
Interpolation?
Sigils?
Lexical scope?
Literal value?

Na ja, du willst vermutlich keinen mehrseitigen Vortrag dazu schreiben, aber "im Prinzip": alles...
Vielleicht einfach nochmal zu Erinnerung: eigentlich bin ich totaler noob, meine "theoretische Ausbildung" im Programmieren beschränkt sich auf 2 Halbjahre "Informatik"-Unterricht vor Jahrzehnten am Gymnasium (BASIC+TurboPascal, damals mußte man noch Disketten verwenden, um dem "Rechner" das OS beizubiegen...). Der Lehrer war uns gefühlt 2 Unterrichtstunden voraus (und hat das gut und strukturiert gemacht, die Unterlagen habe ich Jahre später dann mal zu Rate gezogen, als ich ganz was anderes privat auf Basis von Excel-Makrosprache (....) zusammengeschustert habe).

Aber "Sigils", "Lexical scope"....?!? Bauchgefühl sagt: das wären die Schlüsselbegriffe für diesen Text, und zu "Literal value" habe ich was vor meinem "geistigen Auge", das ich am ehesten mit "irgendein Zahlen- oder Text-Wert" in Worte fassen würde. Die anderen beiden liegen irgendwo dazwischen.

(Ich habe für mich selbst auch kein echtes Problem damit, dass ich das nicht so recht verstehe. Daher: nur wenn du glaubst, es mir (oder eventuellen anderen DAM-nahen Kollegen mit vergleichbarem "Kenntnisstand") verständlich machen zu können oder einen hilfreichen Link zu haben: gerne. Ansonsten ist es für mich auch ok, wenn mir an der Stelle dann jemand schlicht sagt: "ja, der Code ist formal ok und das Risiko bei kleineren Änderungen am Code gering, wenn du dich an dem orientierst, was da ist". Oder: "mach das so oder so" (umsetzbar).)

Zitat von: herrmannj am 01 April 2020, 11:25:37
Ihr könnt mehr als 99% vom Rest der Bevölkerung! Nach oben ist immer Lust.
Das mit den 99% fasse ich als Beleidigung auf, da fehlt was >5 hinter dem Komma  ;D .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

RichardCZ

Zitat von: Beta-User am 01 April 2020, 11:35:54
Na ja, du willst vermutlich keinen mehrseitigen Vortrag dazu schreiben, aber "im Prinzip": alles...

Mehrseitigen Vortrag mache ich nicht, dann wäre ich ein schlechter Ratgeber.

Pragma = "Wie sage ich es meinem Compiler?"

use utf8;
use warnings;
use strict;

All das sind Pragmata (Mehrzahl von Pragma). Werden klein geschrieben. Damit sagt man Perl:  "Ich möchte jetzt von Dir so ein Verhalten haben."

use constant; ist auch ein pragma. PBP sagt nun, der Perl Weg Konstanten zu erzeugen ist doof und man sollte use Readonly; verwenden. (Modul, kein pragma)




Interpolation = "Variablenwert im String anzeigen"

Das was (u.a.) in doppelten Anführungszeichen oder qq{...} stattfindet:

my $x = 'Richard';
my $y = "$x ist pöhse zu mir.";

$x wurde in $y interpoliert. Oder $y wurde interpoliert oder in $y ist eine Interpolation erfolgt. Hey eigentlich keine Ahnung.
"$blah" interpoliert,  '$blah' interpoliert nicht.




Sigils = "diese Dinger da vor den Variablennamen"

$ @ % & sind "Sigils" also diese Dinger da vor den Variablennamen in Perl, die vage darauf hindeuten mit was für einem Datentyp man es zu tun hat.




Lexical scope = "zumeist ein { }-Block"

Bei Perl zumeist das was zwischen zwei geschweiften Klammern geschieht: {<---- lexical scope hier ------>}

Deswegen haben ja my-Variablen darin eine beschränkte Gültigkeit/Lebensdauer

if ($blah) {<--- START
my $foo; # jetzt lebt $foo
...
ENDE---->}
# jetzt ist $foo tot.

$foo lebt ab dem zeitpunkt ab dem die spitze öffnende Klammer die öffnende geschweifte Klammer berührt, bis zu de mZeitpunkt an dem die schliessende spitze Klammer die schliessende Geschweifte berührt.




Literal value - "Festwert"

5
'Hallo'
(1,2,3,4)

Sachen die gegeben sind und sich nicht ändern.




Das ist alles zwar grob vereinfacht, aber hey - Pareto - für 80% Verständnis reicht es.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

herrmannj

Zitat von: Beta-User am 01 April 2020, 11:35:54
Das mit den 99% fasse ich als Beleidigung auf, da fehlt was >5 hinter dem Komma  ;D .
My fault, sorry. Mein Gehirn ist aus den 60ern - da gabs nur integer math in der Preisklasse.  ;D ;D