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