Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6375[/thread]

PlugIns mit realisieren...: ins Verzeichnis packen und lööpt...



<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
Magic
 2004-07-03 01:11
#83833 #83833
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Nabbend,
hat schon mal jemand von Euch versucht, für ein Programm eine PlugIn-Schnittstelle zu programmieren, oder hat jemand ne Ahnung, wie man das am besten umsetzt, halt mir Perl.
Hab zwar schon so meine Idden, aber vielleicht gibt&acute;s ja da auch Musterlösungen.
Die PlugIns sollten nachher im Prinzip ohne zutun am Hauptprogramm neue Funtkionen bringen und (zum Beispiel im Webbrowser) neue Links zu Funktionen anzeigen.

Gruss
Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
Strat
 2004-07-03 01:19
#83834 #83834
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht die plugins ueber perl-module realisieren, und die dann mit require einbinden (vielleicht alle Module eines kompletten verzeichnisses? aufpassen auf sicherheitsluecken...)

perlmonks.org verwendet die everything-engine (bzw. eine abgewandelte), die bis auf ein recht kurzes rumpfscript den kompletten code aus einer datenbank holt und per eval einbaut. dies hat den vorteil, dass bei eventuellen problemen nur ein teil nicht funktioniert, und nicht das ganze script abbricht... diese vorgehensweise kann man uebrigens auch mit require gut verwenden...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Magic
 2004-07-03 01:44
#83835 #83835
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
so in etwa hab ich mir das auch schon überlegt. nur stösst mir dabei das eval ein klein wenig auf. ich habs mir etwa so überlegt:

eine website mit 2 links auf script-funktionen, von mir aus funktion "print_hallo" und und "print_wiedersehen".
der aufruf würde dann etwa so realisiert:

Code: (dl )
1
2
3
4
5
6
7
aufruf: 
script.pl?funktion=print_hallo

spript:
$funktion = param('funktion');
eval{ &$funktion() }
sub print_hallo{print "hallo"};


sprich, der wert der mit "funktion" übergeben wird, wird einfach ge-evalt und als gleiichnamige sub aufgrufen.

Nur kann im prinzip auf diesem weg jede routine im script aufgerufen werden, auch die, die vielleicht was sicherheits-kritischer sind.
wenn die plugins aber erst noch alle enthaltenen routinen oder ähnliches übergeben müssen um sicherheit und funktionstüchtigkeit zu gewährleisten, ist der aufwand für das implementieren der schnittstelle schon fast wieder zu hoch um nützlich zu sein.

gruss
stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
pq
 2004-07-04 13:32
#83836 #83836
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
http://perlmonks.org/index.pl?node_id=366279 (allerdings auf englisch)\n\n

<!--EDIT|pq|1088933605-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Dubu
 2004-07-05 00:09
#83837 #83837
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Magic,02.07.2004, 23:44]Nur kann im prinzip auf diesem weg jede routine im script aufgerufen werden, auch die, die vielleicht was sicherheits-kritischer sind.[/quote]
Das wäre ja noch richtig harmlos. Aber mit dieser Methode könnte man auch folgendes eingeben:
Code: (dl )
script.pl?funktion=system(%22rm%20-rf%20%2F%22)

Das würde per eval ein system("rm -rf /") ausführen. Gar nicht nett.
Magic
 2004-07-05 00:33
#83838 #83838
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke!
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
Magic
 2004-07-05 00:56
#83839 #83839
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
So weit, so gut.
Der Link von pq war schon mal recht hilfreich, abe leider auch nur als Einstimmung.
Der Haken ist scheinbar, dass bei mir jedes PlugIn eine unbestimmte Anzahl von Funktionen bereitstellen soll.
So soll mir das PlugIn z.B. eine Funktion Quadratzahl() zur Verfügung stellen, die jeder Zeit vom Programm aufgerufen werden kann, wie eine Funktion des Hauptprogrammes.

Guter Einwand von Dubu übrigens, könnte ärgerlich sein ;-)

Werde mal weitergrübeln und mir was zusammenstricken...

Gruss
Stefan\n\n

<!--EDIT|Magic|1088974794-->
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
lichtkind
 2004-07-05 13:48
#83840 #83840
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ich kenne plugin als sub routinen die von dem user des hauptprogramms installiert und aufgelufen werden. so dass dem plugin etwas kontrolle über die daten des programs oder dessen steuerung geggeben werden sollte aber die
aufruffuktion eingendlich immer gleich heisst oder auch importiert werden kann.
es reicht doch das das plugin einen menüpunkt erstellt und bei aufruf diese funktion aufgerufen wird, oder brauchst dus komplizierter?
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Crian
 2004-07-05 14:52
#83841 #83841
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht könnte man etwas über AUTOLOAD basteln. So dass dort beim Aufruf einer unbekannten Funktion nachgeschaut wird, ob sich gerade irgendwelche Plugins eingeklinkt haben und wenn ja welche Funktionen sie bieten und dann auf die entsprechende Funktion umgebogen wird.

Gemacht habe ich sowas aber noch nicht, war nur gerade so ein Gedanke.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Magic
 2004-07-05 23:15
#83842 #83842
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=lichtkind,05.07.2004, 11:48]es reicht doch das das plugin  einen menüpunkt erstellt und bei aufruf diese funktion aufgerufen wird, oder brauchst dus komplizierter?[/quote]
Ich brauch's in der Tat härter... äh komplizierter. ;-)

Ich gebe am besten mal ein paar Hintergrundinfos. Also es handelt sich hierbei um eine Patientenverwaltung und ein Kassensystem für ein Sanitätshaus. Das Ganze ist bereits so im Einsatz, wird aber momentan noch regelmäßig um Funktionen erweitert und ausgebaut, da es halt trotz WIP schon benutzt werden muss.
Die Funktionen die noch dazu kommen und kommen sollen, sind z.B. Statistiken, bestimmte Rechnungsformen, Druckfunktionen etc. Da ich diese Dinge nicht unbedingt immer im Hauptprogramm einbinden möchte (vor allem auch, da das ganze noch für ein zweites Sanitätshaus ansteht und nicht alles gebraucht wird), wollte ich das halt alles auf PlugIn-Ebene realisieren um das Programm wartbar zu halten.

Vielleicht könnte man das auch als ganz einfache Perl-Module einbinden, in dem ein Verzeichnis mit use lib vorgehalten und über einen BEGIN{} Block die einzelnen Module gelesen und mit Use eingebunden werden.

Hatte ich mir irgendwie einfacher vorgestellt :-)

Gruss und schon mal fetten Dank,
Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2004-07-03 01:11.