Spartacus verursacht Speicherüberlauf (nach Update auf 1.0)

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
silvia
Regular
Posts: 59
Joined: Tue Jun 27, 2006 9:24 pm

Spartacus verursacht Speicherüberlauf (nach Update auf 1.0)

Post by silvia »

Hi Garvin!

Ich kriege bei den Plugins "Einträge automatisch sichern" und "Kategorien zuweisen" die folgende Fehlermeldung:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 44 bytes) in /srv/www/htdocs/web2/html/shamanca/anamcara/plugins/serendipity_event_spartacus/serendipity_event_spartacus.php on line 162
Ich weiß nicht mehr, welche Plugins noch betroffen waren, aber es waren einige.

Erstaunlicherweise sind nicht alle Plugins betroffen: Karma z.B. funktioniert einwandfrei.

Wie gehe ich weiter vor?

viele Grüße
silvia[/i]
SyN0
Regular
Posts: 75
Joined: Wed Aug 31, 2005 4:50 am

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by SyN0 »

ich hatte auch das auch, aber bei zuviel plugins. das liegt wohl daran dass auf dem server zu wenig speicher zur vefügung gestellt wird. is meisstens bei so vservern so. meiner einer musste dann ein paar weniger wichtige plugins löschen. dann gehts wieder. ich vermute mal, das ist bei dir das selbe problem.
silvia
Regular
Posts: 59
Joined: Tue Jun 27, 2006 9:24 pm

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by silvia »

SyN0 wrote:ich hatte auch das auch, aber bei zuviel plugins. das liegt wohl daran dass auf dem server zu wenig speicher zur vefügung gestellt wird. is meisstens bei so vservern so. meiner einer musste dann ein paar weniger wichtige plugins löschen. dann gehts wieder. ich vermute mal, das ist bei dir das selbe problem.
Weil's jetzt zu technisch wird, hat Silvia jetzt mal ihren Admin vorgeschickt.
Sie hat Spartacus deinstalliert, neu installiert und in der Hierarchie ganz nach oben gerückt. Dann kam der Fehler direkt beim Versuch mit dem Link "Ereignisplugins installieren"

Aaalso:

Das RAM-Limit kommt nicht von der Serverausstattung, sondern von der PHP-Konfiguration. Der Unterschied zwischen virtueller und realer Hardware fällt da nicht ins Gewicht, PHP ist standardmäßig ohnehin auf 8MB beschränkt, und das dürfte auch der kleinste, popeligste vServer beim übelsten Massenhoster haben. wir betreiben keine VServer sondern dedizierte Server.

Steht ja auch so in der Fehlermeldung: "Allowed memory size of 8388608 bytes exhausted". D.h. die "erlaubte" Speichermenge von 8388608 bytes ist erschöpft" (und 8388608 Bytes sind genau 8MB, das ist auch die Standardlimitierung für PHP).

Mich verblüffen hier zwei Dinge:

1. PHP verbraucht mal mehr und mal weniger Speicher. (Das schließe ich daraus, dass es den Absturz bei unterschiedlichen Zeilennummern meldet, d.h. es kommt eben früher oder später zum Absturz, je nachdem, wieviel Speicher vorher belegt wurde.)
Ich verstehe überhaupt nicht, warum Serendipity so nichtdeterministisch agiert. Eigentlich sollte doch mehrfaches Klicken auf den gleichen Link immer die gleichen Abläufe auslösen, die dann auch den gleichen Speicherbedarf nach sich ziehen?

2. Ich verstehe außerdem nicht, warum Serendipity volle 8MB belegt. Umso weniger, als Serendipity bei der Plugin-Verwaltung ja keine großen Datenbestände anfasst.
Irgendwo muss da ein gigantisches Speicherleck sein.
Was mich umso mehr erstaunt, weil Speicherlecks in PHP ein eigentlich eher unübliches Fehlerbild sind.

Hat irgendwer Erklärungen? Oder, noch besser, Workarounds?

Grüße
Jo
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by garvinhicking »

Hallo!

Das Speicherlimit wird zwar von PHP beschränkt, kann aber konfiguriert werden.

Die Sache ist schlichtweg die: Jedes Serendipity Plugin belegt Speicher im RAM, weil es ein Objekt ist was instanziet werden muss. Pro Event-Plugin werden ungefähr 200-500kb Arbeitsspeicher belegt.

Wenn Du also 10 Plugins installiert hast, gehen gut 5MB Speicher drauf. Dann bleiben noch 3MB die Serendipity für sich belegt, und dann ist der Speicher voll.

Spartacus braucht aber Speicher, um die Liste der Plugins zu erzeugen (ungefähr 1MB). Daher kann diese Liste nur erzeugt werden, wenn Du nicht mehr Plugins installiet hast, als Dein PHP-Provider Dir zugesichert hat.
1. PHP verbraucht mal mehr und mal weniger Speicher. (Das schließe ich daraus, dass es den Absturz bei unterschiedlichen Zeilennummern meldet, d.h. es kommt eben früher oder später zum Absturz, je nachdem, wieviel Speicher vorher belegt wurde.)
Ich verstehe überhaupt nicht, warum Serendipity so nichtdeterministisch agiert. Eigentlich sollte doch mehrfaches Klicken auf den gleichen Link immer die gleichen Abläufe auslösen, die dann auch den gleichen Speicherbedarf nach sich ziehen?
PHP benutzt dynamische Speicherallozierung, die abhängig vom Apache-Thread untershciedliche Sessiondaten und andere Variablenwerte eines vorigen Requests gepseichert haben kann. Die garbage collection geht solche Speicherfelder nicht bei jedem Request durch, und daher kann der Speicherbedarf variieren.

Das ist ein PHP-Grundsatz und unabhängig von Serendipity. :-/
2. Ich verstehe außerdem nicht, warum Serendipity volle 8MB belegt. Umso weniger, als Serendipity bei der Plugin-Verwaltung ja keine großen Datenbestände anfasst.
Das ist leider nicht zutreffend, gerade bei der Pluginverwaltung muss JEDES geladene Plugin inspiziert werden sowie eine Liste der zu installierenden Plugins geparsed werden.
Irgendwo muss da ein gigantisches Speicherleck sein.
PHP-Scripte können per definition eigentlich keine Speicherlecks aufweisen. PHP grundsätzlich hatte schonmal einige Speicherlecks, die aber in der aktuellen Version alle gefixt sein müssten. Welche Version kommt da zum Einsatz?

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
silvia
Regular
Posts: 59
Joined: Tue Jun 27, 2006 9:24 pm

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by silvia »

garvinhicking wrote: Das Speicherlimit wird zwar von PHP beschränkt, kann aber konfiguriert werden.
Richtig. Wir könnten es sogar selbst machen, weil wir unsere eigenen Webhoster sind ;-)

Der Haken: Mehr als 8MB pro PHP-Prozess sind nicht drin. Wären wir großzügiger, könnten die Server nicht mehr so viele parallele Requests pro Sekunde abarbeiten, und wir müssten zusätzliche Server betreiben, und das kostet Geld :-(
garvinhicking wrote: Die Sache ist schlichtweg die: Jedes Serendipity Plugin belegt Speicher im RAM, weil es ein Objekt ist was instanziet werden muss. Pro Event-Plugin werden ungefähr 200-500kb Arbeitsspeicher belegt.
Hossa - mehrere 100KB pro Plugin? Das ist wesentlich mehr, als ich mir hätte träumen lassen.

Wie kommt dieser Speicherverbrauch denn denn zustande?

Noch wichtiger: Besteht Aussicht, dass sich am Speicherverbrauch was ändert? Wär fein...
garvinhicking wrote: Dann bleiben noch 3MB die Serendipity für sich belegt, und dann ist der Speicher voll.

Spartacus braucht aber Speicher, um die Liste der Plugins zu erzeugen (ungefähr 1MB). Daher kann diese Liste nur erzeugt werden, wenn Du nicht mehr Plugins installiet hast, als Dein PHP-Provider Dir zugesichert hat.
Das kann ich gut nachvollziehen.
garvinhicking wrote:
1. PHP verbraucht mal mehr und mal weniger Speicher. (Das schließe ich daraus, dass es den Absturz bei unterschiedlichen Zeilennummern meldet, d.h. es kommt eben früher oder später zum Absturz, je nachdem, wieviel Speicher vorher belegt wurde.)
Ich verstehe überhaupt nicht, warum Serendipity so nichtdeterministisch agiert. Eigentlich sollte doch mehrfaches Klicken auf den gleichen Link immer die gleichen Abläufe auslösen, die dann auch den gleichen Speicherbedarf nach sich ziehen?
PHP benutzt dynamische Speicherallozierung, die abhängig vom Apache-Thread untershciedliche Sessiondaten und andere Variablenwerte eines vorigen Requests gepseichert haben kann. Die garbage collection geht solche Speicherfelder nicht bei jedem Request durch, und daher kann der Speicherbedarf variieren.

Das ist ein PHP-Grundsatz und unabhängig von Serendipity. :-/
Die Sessiondaten werden es wohl weniger gewesen sein (Silvia hat da nur mit Serendipity gearbeitet), aber $_SERVER variiert natürlich bei jedem Request, ja. Das erklärt auch, warum immer relativ dicht beieinanderliegende Codezeilen gemeldet wurden.
garvinhicking wrote:
Irgendwo muss da ein gigantisches Speicherleck sein.
PHP-Scripte können per definition eigentlich keine Speicherlecks aufweisen. PHP grundsätzlich hatte schonmal einige Speicherlecks, die aber in der aktuellen Version alle gefixt sein müssten.
Garbage Collection verhindert nicht alle Speicherlecks, sondern nur die, die auf vergessene Speicherfreigabe zurückzuführen sind.

Es gibt noch eine weitere mögliche Quelle für Speicherlecks: Programmcode, der eine Datenstruktur immer weiter vergrößert, obgleich er die Daten gar nicht mehr braucht.
Also z.B. in PHP, wenn ein Programm immer wieder mit $a[]=... an ein Array anhängt und nie aus $a löscht.
Oder viel Zuweisung mit =& . Das belegt mehr Speicher als die Zuweisung mit =, wenn weder Original noch Kopie verändert werden, aus welchen Gründen auch immer - jedenfalls behauptet php.net, dass dem so sei.
Oder Zuweisung eines großen Arrays (ein paar zehntausend Einträge) mit =, dann Ändern an einem Element - PHP muss dann die Datenstruktur für das Array doch kopieren (die unveränderten Elemente bleiben erhalten).
garvinhicking wrote: Welche Version kommt da zum Einsatz?
4.3.4

Aber ich denke nicht, dass es an einem PHP-Bug liegt. Silvia hat anderthalb Dutzend Plugins installiert, das erklärt die Schwierigkeiten mehr als hinreichend.

Danke für die Infos!

Viele Grüße
Jo
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by garvinhicking »

Hi!
Der Haken: Mehr als 8MB pro PHP-Prozess sind nicht drin. Wären wir großzügiger, könnten die Server nicht mehr so viele parallele Requests pro Sekunde abarbeiten, und wir müssten zusätzliche Server betreiben, und das kostet Geld :-(
Ah, sorry. Ich hab das falsch gelesen, jetzt verstehe ich es. :-)
Hossa - mehrere 100KB pro Plugin? Das ist wesentlich mehr, als ich mir hätte träumen lassen.

Wie kommt dieser Speicherverbrauch denn denn zustande?
Nun, Plugins sind Objekte und deren Serialisierte Struktur im Speicher verbraucht schonmal recht viel platz. Zusätzlich die jeweiligen Usereingaben, Arrays etc. - da wird leider einiges verbraten. Und PHP ist auch nicht gerade zimperlich was den Speicherverbrauch von geparsten Includes betrifft. :-/
Noch wichtiger: Besteht Aussicht, dass sich am Speicherverbrauch was ändert? Wär fein...
Der Speicherverbrauch ist leider schon so gut wie möglich getuned. Das ist letztlich so wie bei normalen PCs: Wenn man die Festplatte mit aller Software vollhaut, ist die Festplatte voll.

Sprich, man muss sich als User etwas in der Auswahl der Plugins beschränken, wenn man nur einen kleinen PHP-Speicherbereich hat.

Für Serendipity 1.1 haben wir allerdings an ein anderen paar Ecken Speicher gespart (Smarty Templates belegen jetzt 1/3 weniger Speicherplatz aufgrund von besserer Variablenzuweisung). Wir sind daher mit den Optimierungen schon recht weit am Ende der Fahnenstange angelangt.

Leider unterstützt PHP es nicht, includete Codeteile nach dem Include wieder aus dem Speicher zu löschen - dann wäre es leichter die Pluginübersicht zu laden.
Die Sessiondaten werden es wohl weniger gewesen sein (Silvia hat da nur mit Serendipity gearbeitet), aber $_SERVER variiert natürlich bei jedem Request, ja. Das erklärt auch, warum immer relativ dicht beieinanderliegende Codezeilen gemeldet wurden.
Falls ihr so etwas nutzt könnte übrigens auch ein APC oder ZendCache solche Schwankungen auslösen.
Es gibt noch eine weitere mögliche Quelle für Speicherlecks: Programmcode, der eine Datenstruktur immer weiter vergrößert, obgleich er die Daten gar nicht mehr braucht.
Also z.B. in PHP, wenn ein Programm immer wieder mit $a[]=... an ein Array anhängt und nie aus $a löscht.
Oder viel Zuweisung mit =& . Das belegt mehr Speicher als die Zuweisung mit =, wenn weder Original noch Kopie verändert werden, aus welchen Gründen auch immer - jedenfalls behauptet php.net, dass dem so sei.
Oder Zuweisung eines großen Arrays (ein paar zehntausend Einträge) mit =, dann Ändern an einem Element - PHP muss dann die Datenstruktur für das Array doch kopieren (die unveränderten Elemente bleiben erhalten).
ah, sowas meintest du. Das fällt bei mir nicht unter "Speicherleck" sondern "Speicherauslastung". Spartacus muss nun leider um die Informationen zusammenzustellen tatsächlich ein großes Arrays herstellen dass es dann später zurückliefert; da die Daten auch durch weitere Plugins modifziert werden müssen kann Spartacus nicht direkt einfach per echo() alles ausgeben. Und wie halt oben erwähnt: Jedes "inspizierte" Plugin lädt seinen Programmcode in die OO-Struktur, und nachdem ein plugin inspiziert wurde kann man diese Struktur imselben Request nicht mehr löschen.

s9y versucht hier schon mittels tricks bei hoher speicheraufllastung die plugins "in kleinen brocken" zu parsen. Aber je nachdem wieviele plugins installiert sind, kann selbst der kleine brocken evtl. nicht geparst werden - das kann man dann wirklich nur beheben indem man einige plugins entfernt.
Aber ich denke nicht, dass es an einem PHP-Bug liegt. Silvia hat anderthalb Dutzend Plugins installiert, das erklärt die Schwierigkeiten mehr als hinreichend.

Danke für die Infos!
Tut mir wirklich leid für die Probleme auf beiden Seiten - ich wünschte, man könnte da mehr tun. Plugins nicht mit OOP-Struktur zu entwickeln würde zwar etwas Speicher sparen, dafür aber technisch sowohl unschön als auch weniger flexibel sein. :-/

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
silvia
Regular
Posts: 59
Joined: Tue Jun 27, 2006 9:24 pm

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by silvia »

Noch wichtiger: Besteht Aussicht, dass sich am Speicherverbrauch was ändert? Wär fein...
Der Speicherverbrauch ist leider schon so gut wie möglich getuned. Das ist letztlich so wie bei normalen PCs: Wenn man die Festplatte mit aller Software vollhaut, ist die Festplatte voll.
Schade... obgleich ich da noch ein paar Ideen habe (siehe weiter unten).
Für Serendipity 1.1 haben wir allerdings an ein anderen paar Ecken Speicher gespart (Smarty Templates belegen jetzt 1/3 weniger Speicherplatz aufgrund von besserer Variablenzuweisung).
Ich hab so einige Hinweise gelesen, dass Smarty für seinen Speicherverbrauch berüchtigt ist.

Ich weiß aber nicht, was an diesen Gerüchten dran ist.
Leider unterstützt PHP es nicht, includete Codeteile nach dem Include wieder aus dem Speicher zu löschen - dann wäre es leichter die Pluginübersicht zu laden.
Ja, richtig. Fiel mir vorhin auch auf.

Die einzige Gegenmaßnahme wäre, die Plugins auf mehrere Quelldateien aufzuteilen.
Die Sessiondaten werden es wohl weniger gewesen sein (Silvia hat da nur mit Serendipity gearbeitet), aber $_SERVER variiert natürlich bei jedem Request, ja. Das erklärt auch, warum immer relativ dicht beieinanderliegende Codezeilen gemeldet wurden.
Falls ihr so etwas nutzt könnte übrigens auch ein APC oder ZendCache solche Schwankungen auslösen.
Nö, hier ist nur FastCgi am Werk.
Es gibt noch eine weitere mögliche Quelle für Speicherlecks: Programmcode, der eine Datenstruktur immer weiter vergrößert, obgleich er die Daten gar nicht mehr braucht.
Also z.B. in PHP, wenn ein Programm immer wieder mit $a[]=... an ein Array anhängt und nie aus $a löscht.
Oder viel Zuweisung mit =& . Das belegt mehr Speicher als die Zuweisung mit =, wenn weder Original noch Kopie verändert werden, aus welchen Gründen auch immer - jedenfalls behauptet php.net, dass dem so sei.
Oder Zuweisung eines großen Arrays (ein paar zehntausend Einträge) mit =, dann Ändern an einem Element - PHP muss dann die Datenstruktur für das Array doch kopieren (die unveränderten Elemente bleiben erhalten).
ah, sowas meintest du. Das fällt bei mir nicht unter "Speicherleck" sondern "Speicherauslastung".
Jein.
Wenn die Daten tatsächlich noch benötigt werden, ist es Speicherauslastung.
Werden sie nicht mehr benötigt, ist es ein Speicherleck.

Die Abgrenzung ist natürlich teilweise Geschmackssache - manche Dinge will man noch im Speicher haben, auch wenn sie (im Moment) von keinem Plugin benötigt werden.
Ich stelle allerdings bei meinem Code immer wieder fest, dass ich Daten rumliegen lasse. Deshalb packe ich meinen Code grundsätzlich in Funktionen (das räumt automatisch das Meiste weg), aber wenn Daten in eine globale Variable übertragen werden, oder wenn eine Funktion praktisch während der ganzen Laufzeit aktiv ist, hilft das natürlich auch nicht - und da passe ich dann ein wenig mehr auf :-)
Tut mir wirklich leid für die Probleme auf beiden Seiten - ich wünschte, man könnte da mehr tun. Plugins nicht mit OOP-Struktur zu entwickeln würde zwar etwas Speicher sparen, dafür aber technisch sowohl unschön als auch weniger flexibel sein. :-/
Na ja... die OO-Mechanik von PHP taugt eigentlich nicht viel. Ich verwende Klassen eigentlich nur, um Namensräume abzugrenzen.
Ganz zu schweigen davon, dass das Konzept "OO" ein ziemlicher Irrweg ist. In PHP5 ist der Mechanismus ja deutlich verbessert, aber damit werden ein paar neue Probleme sichtbar - wenn die PHP-Macher auf diesem Weg weitergehen, ist PHP15 sowas wie Eiffel, bei dem fast alle OO-Probleme überzeugend gelöst sind, und es bleiben die fundamental unlösbaren OO-Probleme übrig und sie stellen fest, dass Funktionen höherer Ordnung erstens diese Probleme nicht haben und zweitens alles Wesentliche können, was OO auch kann... nun ja, Warten auf PHP16 ist für Serendipity sicherlich keine echte Lösung ;-)

Flexibilität lässt sich auch durch andere Techniken erreichen. Schau mal auf PmWiki (http://pmwiki.org), das arbeitet mit diversen Arrays, in denen Template-Strings bzw. Funktionen drinstehen. PmWiki erzielt damit eine Flexibilität, die mich immer wieder verblüfft, und ein typisches PmWiki-Plugin liegt so bei 100-500 Codezeilen (500 Zeilen sind schon richtig viel und realisieren neue Funktionalität).

Ich weiß natürlich nicht, wieviel davon für Serendipity beim jetzigen Stand der Dinge nutzbar ist... ich kenne den Quelltext von Serendipity nicht und habe leider auch nicht die Zeit, mich soweit einzuarbeiten, dass ich da echte Hilfe beisteuern könnte.
24 Stunden am Tag sind einfach zuwenig... ich muss wohl mal die Nacht dazunehmen ;-)

Viele Grüße
Jo
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Spartacus verursacht Speicherüberlauf (nach Update auf 1

Post by garvinhicking »

Hi!
Ich hab so einige Hinweise gelesen, dass Smarty für seinen Speicherverbrauch berüchtigt ist.

Ich weiß aber nicht, was an diesen Gerüchten dran ist.
Sagen wir es so: Jede Template-Engine verursacht einen höheren Speicherbedarf. Smarty ist da eigentlich sogar noch einer der sparsameren Engines - aber wie man das "richtig" benutzt haben wir ja dann leider auch erst vor kurzem rausgefunden. Der Speicherbedarf im Frontend ging da bei mir von 5MB auf 3.5MB runter. Aber leider auch nur im Frontend, denn im Backend benutzen wir kein Smarty. *seufz*
Die einzige Gegenmaßnahme wäre, die Plugins auf mehrere Quelldateien aufzuteilen.
Wie meinst Du das?

Ich habe auch schon über eine "Blätterfunktion" nachgedacht, aber im vorliegenden Fall ist das leider auch nicht ausreichend, da die installierten event plugins schon so viel speicher brauchen, dass nicht genügend RAM frei ist um die XML-Datei von Spartacus in den Speicher zu laden und zu parsen...
Wenn die Daten tatsächlich noch benötigt werden, ist es Speicherauslastung.
Werden sie nicht mehr benötigt, ist es ein Speicherleck.
Da aber PHP ja nach jedem Request die Speicherdaten freigibt, wäre ja ein Leck nur dann, wenn dieser Speicher nach einem Request nicht freigegeben würde? Das ist zumindest meine definition von Leak, aber ist ja jetzt auch egal, ich glaube ich reite gerade darauf rum :-D
Ich stelle allerdings bei meinem Code immer wieder fest, dass ich Daten rumliegen lasse. Deshalb packe ich meinen Code grundsätzlich in Funktionen (das räumt automatisch das Meiste weg), aber wenn Daten in eine globale Variable übertragen werden, oder wenn eine Funktion praktisch während der ganzen Laufzeit aktiv ist, hilft das natürlich auch nicht - und da passe ich dann ein wenig mehr auf :-)
Da hast Du recht. Im Falle von Spartacus sind die Daten auch nur zur Laufzeit der Methode verfügbar; die geparsten Plugins werden nach Beendigung des Plugins wieder verworfen.
Na ja... die OO-Mechanik von PHP taugt eigentlich nicht viel. Ich verwende Klassen eigentlich nur, um Namensräume abzugrenzen.
Ganz zu schweigen davon, dass das Konzept "OO" ein ziemlicher Irrweg ist. In PHP5 ist der Mechanismus ja deutlich verbessert, aber damit werden ein paar neue Probleme sichtbar - wenn die PHP-Macher auf diesem Weg weitergehen, ist PHP15 sowas wie Eiffel, bei dem fast alle OO-Probleme überzeugend gelöst sind, und es bleiben die fundamental unlösbaren OO-Probleme übrig und sie stellen fest, dass Funktionen höherer Ordnung erstens diese Probleme nicht haben und zweitens alles Wesentliche können, was OO auch kann... nun ja, Warten auf PHP16 ist für Serendipity sicherlich keine echte Lösung ;-)
Naja, ich denke das ist auch ein großer Teil Geschmackssache. Der große Vortel von OO ist die stringente API. Gerade bei Plugins ist so die Fehleranfälligkeit geringer, wenn es eine vererbare Menge von Methodenaufrufen gibt, und so auch leichter über Plugins iterieren kann. Es hat also wirklich seine Vorteile, mit OO auch wartbaren Code zu schreiben. :)
Flexibilität lässt sich auch durch andere Techniken erreichen. Schau mal auf PmWiki (http://pmwiki.org), das arbeitet mit diversen Arrays, in denen Template-Strings bzw. Funktionen drinstehen. PmWiki erzielt damit eine Flexibilität, die mich immer wieder verblüfft, und ein typisches PmWiki-Plugin liegt so bei 100-500 Codezeilen (500 Zeilen sind schon richtig viel und realisieren neue Funktionalität).
Nunja, deren Konzept ist so stark unterschiedlich von s9y auch nicht. Klassische OO-Plugins von s9y kann man auch in ~20 Zeilen unterbringen, dank der Methodenvererbung und der gemeinsamen API. Ich persönlich bin da auch eher ein Fan von Methodenaufrufen anstelle von auswuchernden Arrays. Aber das ist halt Geschmackssache - zum jetzigen Zeitpunkt sowieso nicht änderbar, weil die API und dutzende Plugins ja schon stehen. ;)

Vielen Dank jedenfalls für Dein Feedback. Solltest Du doch mal über den s9y Code stolpern und Lust haben damit was zu machen, würde ich mich freuen von Dir zu hören. :)

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
silvia
Regular
Posts: 59
Joined: Tue Jun 27, 2006 9:24 pm

Re: nach Update auf 1 Problem mit countercode

Post by silvia »

garvinhicking wrote:Hi!

Vielen Dank jedenfalls für Dein Feedback. Solltest Du doch mal über den s9y Code stolpern und Lust haben damit was zu machen, würde ich mich freuen von Dir zu hören. :)

Viele Grüße,
Garvin
So, jetzt die Silvia wieder und nicht Jo ;-)
... er hat sowieso schon zu wenig Zeit für Privatleben, wenn er gar nichts anderes mehr hier in der Agentur zu tun hat, leihe ich ihn gerne mal aus :P

danke erstmal für den Support. ich habe mich von ein paar Plugins verabschiedet, von denen ich annehme, dass sie nicht besonders fehlen werden. Dafür hab ich jetzt aber Probleme mit dem Countercode, der seit gestern nicht mehr funktioniert. Hab ich irgendwas mit runtergerissen beim beseitigen? Im WP-Blog funktioniert er einwandfrei. Nunja, vielleicht andere Baustelle oder behindert serendipity da was?

Der Code ist folgendermaßen aufgebaut:

Code: Select all

<!-- BlogCounter Code START -->
<p><a href="http://www.blogcounter.de/" id="bclink" title="kostenloser Counter fuer Weblogs"><span id="bccount" style="font-size:8px">kostenloser Counter</span></a></p><script type="text/javascript" src="http://track.blogcounter.de/js.php?user=anamcara&style=1"></script><noscript><p><a href="http://www.blogcounter.de/"><img style="border: 0px;" alt="Weblog counter" src="http://track.blogcounter.de/log.php?id=anamcara"/></a></p></noscript>
<!-- BlogCounter Code END --> 
gruß
silvia
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: nach Update auf 1 Problem mit countercode

Post by garvinhicking »

Hi!

Der counter code sieht in Ordnung aus; was funktioniert denn nicht?

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Post Reply