konto usunięte

Temat: Pluginy

Chciałem napisać pewną aplikację na linuxa w pythonie i planuje stworzyć w niej uniwersalne pluginy (ala firefox). Zastanawiam się jak najlepiej to zrobić, aby użytkownik miał kontrole nad danymi w projekcie. Aby mógł ingerować w moduły.

Będę wdzięczny za informacje na ten temat :)

EDIT

Znalazłem coś takiego:
http://lucumr.pocoo.org/blogarchive/python-plugin-system
http://live.gnome.org/Gedit/PythonPluginHowTo

Ale jeśli ktoś ma jakieś doświadczenia w tym temacie to smiało pisac :)Michał Molenda edytował(a) ten post dnia 21.07.08 o godzinie 15:17
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: Pluginy

Do czego ma być ta aplikacja i na co mają pozwalać w niej "pluginy"? :)

konto usunięte

Temat: Pluginy

Ma to być pewnego rodzaju komunikator internetowy. A pluginy to różne, właśnie chce żeby było jak najmniej ograniczeń.

Przykładem takich komunikatorów (ale dla windowsa) są konnekt, aqq itp. :)

Np. plugin który dodaje możliwość rozmowy w zakładkach itp.
Piotr P.

Piotr P. Software Developer

Temat: Pluginy

Michał Molenda:
Ma to być pewnego rodzaju komunikator internetowy. A pluginy to różne, właśnie chce żeby było jak najmniej ograniczeń.

Gossip jest napisany w pythonie, ale chyba bez idei pluginów.
Chociaż z drugiej strony od konfiguracji do plugin'u może być blisko.
Przykładem takich komunikatorów (ale dla windowsa) są konnekt, aqq itp. :)

Coś Pidgin (Gaim) a'la ?
Np. plugin który dodaje możliwość rozmowy w zakładkach itp.

Coś Kadu na przykład a'la?

http://gnomefiles.org/subcategory.php?sub_cat_id=38
Cała lista komunikatorów. Część z nich napisana w Python'ie.

Może lepiej dołączyć do któregoś projektu zamiast pisać jeszcze jeden komunikator?

konto usunięte

Temat: Pluginy

To już nawet nie chodzi o to jaki program ma być a o to jak napisać obsługę pluginów :)
Piotr P.

Piotr P. Software Developer

Temat: Pluginy

Michał Molenda:
To już nawet nie chodzi o to jaki program ma być a o to jak napisać obsługę pluginów :)

Deluge jest napisany w Python i ma obsługę pluginów.
Ale technik pisania pluginów może być tyle ile programistów...

konto usunięte

Temat: Pluginy

Dzięki, na pewno zapoznam się z nim :) Ale jeśli ktoś ma swoje osobiste doświadczenia na temat pluginów to zapraszam do dyskusji :)

Temat: Pluginy

Jestem w trakcie dodawania systemu pluginów do Gajima w ramach tegorocznego GSoC, wiec praktycznie zajmuje sie dokladnie tym o co pytasz.

Moze Cie cos zainspiruje:
http://trac.gajim.org/wiki/PluginSystem
Nie jest to najaktualniejsza wersja konceptow, ale na dole masz kilka linków, które moga Cie zainteresowac.

Na moja prace bardzo duzy wplyw ma to, ze Gajim posiada juz dosyc pokaznie rozwieniety core (kod nie jest testowalny i architektura calego systemu nigdy nie byla projektowana wlasciwie, wiec jest mnostwo kodu dodanego w imię feature-driven-development).

Plan jest taki, zeby podpiac sie do niego w niektorych miejscach (im mniej tym lepiej) i stopniowo przenosic elementy ze srodka na zewnatrz. Pisze to, zeby rzucic odpowiednie swiatlo na materialy pod powyzszym linkiem.

Realizacji samego systemu pluginow jest mnostwo, a z uzyciem Pythona jeszcze wiecej [patrz wspomniane linki].

Jesli nie wiesz od czego zaczac do proponuje na poczatek liste potencjalnych pluginow do zrealizowania. Zrobi Ci sie wtedy sensowna lista wymagan wobec systemu. Popatrz na nia, wymysl takie elementy, ktorych nie daloby sie zrealizowac przy pomocy systemu spelniajacego takie zalozenia. Zastanow sie czy ich potrzebujesz i ew. dodaj do listy wymagan.

Przeprowadzic kilka takich iteracji. Jak bedziesz mial liste wymagan to juz z gorki ;)

Potencjalne glowne elementy, na ktore powinienes zwrocic uwage:
1) Dane uzytkownika (preferencje/roster/historia)
2) GUI
3) Zdarzenia zwiazane z sama komunikacja

Czy zajmiesz sie wszystkimi na raz czy tylko jednym z nich zalezy od Ciebie - sa zwykle dosyc rozlaczne.

Jesli masz pytania odnosnie czegos konkretnego to pisz, moze akurat bede mogl cos zasugerowac. :)Mateusz B. edytował(a) ten post dnia 22.07.08 o godzinie 15:43

konto usunięte

Temat: Pluginy

Wielki dzięki :) Ale zastanawia mnie, to o czym pisałeś na temat stworzenia listy wymagań pluginów. Wiadomo, jeśli ktoś pisze np. komunikator to pluginy przykładowe to mogą być np. rozmowa w zakładkach, zmiana buziek na graficzki i masa innych, ale mi chodzi bardziej o uniwersalny system, żeby użytkownicy mogli pisać takie pluginy ma jakie im tylko wyobraźnia pozwoli.

Jutro przeczytam to co podałeś w linkach i dopisze na ten temat coś. Jeszcze raz dzięki :)

Temat: Pluginy

Michał Molenda:
Wielki dzięki :) Ale zastanawia mnie, to o czym pisałeś na temat stworzenia listy wymagań pluginów. Wiadomo, jeśli ktoś pisze np. komunikator to pluginy przykładowe to mogą być np. rozmowa w zakładkach, zmiana buziek na graficzki i masa innych, ale mi chodzi bardziej o uniwersalny system, żeby użytkownicy mogli pisać takie pluginy ma jakie im tylko wyobraźnia pozwoli.

Zasadniczo, zeby zrobic system pluginów w Pythonie potrzebujesz jedynie jakiejs zmiennej (wlasciwie to etykiety dla wartosci None), ktora widza wszystkie pluginy i cos co je bedzie dynamicznie ladowac przy startcie. W takiej sytuacji przy uzyciu duckpunchingu jestes stanie zbudowac nawet caly core jako pluginy [1] i udostepnic userom Najbardziej Uniwersalny System Pluginow - dzieki takiemu rozwiazaniu z komunikatora IM zrobia Ci IDE, przegladarke, odtwarzacz wideo oraz edytor grafiki wektorowej - pytanie brzmi: czy o to Ci wlasnie chodzi? [2]

Zauwaz, ze w takim przypadku praktycznie nie masz zadnej kontroli nad tym jak core Twojej aplikacji bedzie dzialal (i: czy bedzie dzialal?) [3]

Teoretycznie system pluginow powinien do poszczegolnych elementow programu udostepniac interfejsy, ktore (i to wazne) ulatwia budowanie rozszerzen programistom. Cala zabawa z gromadzeniem wymagan sprowadza sie wlasnie do zidentyfikowania jakie interefejsy potencjalny tworca pluginu powinien dostac.

Przyjrzalbym sie tutaj regule 80/20 - moze zrobienie interfejsow do 20% procent elementów core, pokryje Ci 80% mozliwych do zrealizowania pluginow. A to pozostale 20% - no coz, czy potrzeba Ci toster i mikrofalówke w rosterze? [4]

Glownym problemem przy takich aplikacjach jak komunikator IM sa 'zdarzenia' (nie tylko te zwiazane z siecia, ale rowniez z akcjami, ktore sie odbywaja wewnatrz programu. Rozbudzajac wyobraznie, zeby przetestowac 'potencjalny system':

Chce zrealizowac plugin, ktory przy kazdej nowej otrzymanej wiadomosci, ktorej tresc zawiera slowo 'goldenline' wysyla do mnie maila z jego trescia. Ale tylko pod warunkiem, ze od ostatniej takiej wiadomosci minelo co najmniej N minut, mam otworzone co najwyzej M zakladek w oknie rozmowy, rozmowa nie jest szyfrowana, kontakt znajduje sie w grupie ULUBIENCY, a system nie zarejestrowal mojej aktywnosci w systemie od K godzin.

To tylko przyklad, ktory wcale nie musi byc odrealniony, a jest bardziej 'zlozony' niz same rozmowy w zakladkach - z czegos takiego powinienes wyciagac potencjalne wymagania i weryfikowac je pod katem przydatnosci.

Oczywiscie nie powinienes sobie zamykac drzwi, ale z Twoich wypowiedzi wynika raczej, ze jestes na tym punkcie wyczulony, wiec tylko o tym wspominam.

Dobra rada: zacznij pisac - na pewno pierwsze podejscie nie bedzie bezbledne, a nauczyc sie znacznie wiecej niz projektujac 'uniwersalny system'. Python jest stworzony do takiego podejscia - po prostu modyfikacje kodu nie bola [5].

Przykladem tego ostatniego podejscia moze byc Banshee, ktorego wersja 1.0 zostala w znacznej czesci przepisana (zajelo im to kilka miesiecy), a pluginy staly sie niekompatybilne. Od strony uzytkownika player nawet zubozal, ale stal sie stabilniejszy. Moze gdyby tworcy wiecej czasu poswiecili na projektowanie unikneli by takiej systuacji - ale jedno jest pewne: sporo sie nauczyli :)

Jesli wciaz jestes przekonany, ze potrzebujesz 'uniwersalnego' rozwiazania to poczatek mojej wypowiedzi powinien Cie nakierowac :) [6]

[1] Nie trudno sie zorientowac, ze bedzie mnostwo konfliktow albo odwolywania sie do czegos co nie istnieje (np. ktorys plugin usunal cos do czego odwolywal sie inny plugin)
[2] Pytanie brzmi: czy to w ogole mozna nazwac systemem pluginow :)
[3] Pomijajac juz kwestie bezpieczenstwa kiedy plugin w tle sumiennie wykonuje 'rm -rf /', bo nie jest uruchamiany w odizolowanym srodowisku.
[4] Choc pewnie implementujac glowne interfejsy pozwolisz rowniez na umieszczanie sprzetu AGH obok avatarów.
[5] Przynajmniej nie tak bardzo jak w jezykach bardziej rozbudowanych syntaktycznie.
[6] Oczywiscie monkeypatching z wystawianiem interfejsow, mozesz jak najbardziej stosowac rownolegle - wybor nalezy do Ciebie.Mateusz B. edytował(a) ten post dnia 23.07.08 o godzinie 12:07
Sebastian Hanula

Sebastian Hanula Python web developer

Temat: Pluginy

polecam zapoznać się z zope.component, na którego bazie możesz wiele zrobić. Eggs entry_points to też jeden ze sposobów na prosty system pluginów.

konto usunięte

Temat: Pluginy

Ewentualni mozna napisac wlasna zabawke, na kanwie na przyklad tego http://gulopine.gamemusic.org/2008/jan/10/simple-plugi...

Następna dyskusja:

pluginy




Wyślij zaproszenie do