php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.08.2009, 21:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard Exceptions, strukturelle Systematik

Obwohl meine letzte Sessiondesignfrage nicht wirklich zielführend war, möchte ich trotzdem noch einmal eine Allgemeinfrage stellen. Ich weiß, jede Applikation ist anders, aber:

Wie baut Ihr Eure Exception-Systematik auf? Kennt Ihr Konzepte und Quellen, die diese näher beschreiben?


Ein wesentlicher Vorteil von Exceptions ist ja, dass sie im Extremfall vom Auslösepunkt bis zur Applikationswurzel hindurchfallen. Wenn man sich jetzt eine Applikation aus einer Menge von Seiten, diese wiederum aus einer Menge von Modulen*) und selbige aus einer Menge von Funktionen/Methoden vorstellt, tut sich mir die Überlegung auf, wann und wo ich welche Ausnahmen behandle.
Man könnte jetzt in traditioneller or die()-Mentalität den User mit einer Plaintext-Meldung beglücken. Es gäbe jedoch auch andere Möglichkeiten:

- das auslösende Modul zeigt statt seines Inhalts eine Fehlermeldung an
- das auslösende Modul wird nicht angezeigt
- das auslösende Modul triggert das Haupt-Content-Modul an, eine Fehlermeldung anzuzeigen
- das auslösende Modul triggert die Seite an, das Haupt-Content-Modul auf einen neuen Inhalt zu setzen
- das auslösende Modul triggert die Seite an, die Modulstruktur komplett zu verwerfen und ein statisches Fehlerdokument anzuzeigen
- das auslösende Modul triggert die Applikation an, selbiges zu tun
- das auslösende Modul triggert die Applikation an, einen 404 Header oder eine Umleitung auf das Errordokument abzusetzen


Diese Möglichkeiten kann man jetzt im Kontext des auftretenden Fehlers

- temporärer DB Fehler, Timeout
- permanenter Fehler (Ressource fehlt, falsche Ordnerrechte, fehlende PHP Library...)
- Modul fehlt, Programmfehler, "logische Exception"
- Datenbankverbindungsfehler (betrifft dann auch andere Teile der Anwendung)
- Fehler in Verbindung mit Parameterdaten, fehlgeschlagene Validierung
...

und der Auswirkungen auf die Applikation

- Modul ist nicht relevant für die Funktionalität der Anwendung (Feedreaderbox o.ä.)
- Fehler-Aktion ist nicht relevant für die Funktionalität (Caching eines Inhalts o.ä.)
- Modul ist tw. relevant für die Funktionalität der Anwendung (Warenkorbanzeige)
- Modul besitzt hohe Priorität (Authentifizierung)
...

sehen.

Manche Anwendungsfälle mögen auch eher durch Fehler als durch Exceptions abgedeckt sein.

Welche Fehlerstadien (aus Usersicht) richtet Ihr ein, wo lasst Ihr welche Exceptions verarbeiten? Bin gespannt auf Eure Gedanken


*) Als Module bezeichne ich hier eigenständige Programmkomponenten (meist mit Viewkomponente), die untereinander verschachtelt die Funktionalität und Ausgabe der Applikation ausmachen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.08.2009, 21:52  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Kennt Ihr Konzepte und Quellen, die diese näher beschreiben?
Noch nicht gehört, aber bestimmt interessant: The ZendCon Sessions Episode 24: Elegant Ways of Handling PHP Errors and Exceptions

Ansonsten bin ich mal gespannt was die anderen so schreiben!

EDIT: Die MP3-Version hat eine gute Qualität, wesentlich besser als in diesem JW-Player.
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things

Geändert von phpdummi (06.08.2009 um 21:59 Uhr).
phpdummi ist offline   Mit Zitat antworten
Alt 06.08.2009, 22:11  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Von der Theorie her würde ich grundsätzlich Exceptions an folgende koppeln:

PHP: Exceptions - Manual
Zitat:
LogicException:
BadFunctionCallException
BadMethodCallException
DomainException
InvalidArgumentException
LengthException
OutOfRangeException

RuntimeException:
OutOfBoundsException
OverflowException
RangeException
UnderflowException
UnexpectedValueException
LogicExceptions also für harte Anwender-unabhängige Fehler (DB down, Konfig nicht gefunden, ..) und auch glatt abspringen, sprich erst in der index.php fangen.

RuntimeExceptions würde ich noch einmal jeweils mit Code markieren (2. Konstruktor-Parameter), USER, GENERAL, .. So kannst du auch RuntimeExceptions entschärfen in der Ausgabe (manchmal sind Details gut, manchmal nicht). Übrigens kannst du seit PHP 5.3 einen Exception-Stack aufbauen:
PHP: Exception::__construct - Manual
Zitat:
public Exception::__construct ([ string $message= "" [, int $code= 0 [, Exception $previous= NULL ]]] )
Wie man Exceptions letztlich auflöst finde ich sehr Problem abhängig, da kann man so pauschal ja wirklich nur sagen: der, der noch so Kontext nah ist, um das Problem zu verstehen, zu lösen oder entsprechend an den eigenen "Boss" (try-Block) die Meldung zu machen und auch nur der entscheidet, wie schwerwiegend das Problem ist. Kann ja sonst sein, dass ein News-Skript die news.txt nicht findet, in Panik verfällt und gleich den Supergau ausruft, das Ding aber letztlich nur als kleiner Ticker in der Seitenleiste auftauchen soll (wie dus auch schon oben gesagt hast). Der gleiche Code könnte ja aber auch beim Aufruf der "Vollbild"-Newsseite passieren, da könnte man die Seite dann ja durchaus abbrechen. Sprich selber Fehler, andere Behandlung. Also von oben herab bestimmen was passiert, nicht umgekehrt.

try-catch soll ja recht langsam sein, aber wenn man Ausnahmebehandlung ernst nimmt, sollte eigentlich jeder Fremdaufruf bzw. Hierarchie (einzeln oder Blockweise) in einen try-catch-Block (sofern die Fremdklasse überhaupt Exceptions wirft).
__________________
"Nuschel ich?" - "Was?"

Geändert von Chriz (06.08.2009 um 22:14 Uhr).
Chriz ist gerade online   Mit Zitat antworten
Alt 08.08.2009, 23:20  
Benutzer
 
Registriert seit: 10.07.2009
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Peterle befindet sich auf einem aufstrebenden Ast
Standard

Ich schicke jeden Fehler der auf meiner Seite ensteht mir per E-Mail zu und logge diesen zusätzlich in einer Datei.
Der User bekommt eine höfliche "Ups"-Meldung (*g*) und von Variablen, Funktionen etc. bekommt der User nichts zu sehen.
Die E-Mail beinhaltet nicht nur Fehler-Typ, Fehler-Meldung, Zeile, Datei, User-IP, Request-Methode, Query String und Referrer, sondern auch jeweils +/- 5 Zeilen Code um den Fehler.
Peterle ist offline   Mit Zitat antworten
Alt 08.08.2009, 23:22  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ja schon klar, darum gehts aber hier nicht wirklich. Und Ups-Meldungen sind nicht das was ich anstrebe. Etwas flexibler darf das Konzept schon sein.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 08.08.2009, 23:39  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo nikosch,

Zitat:
Wie baut Ihr Eure Exception-Systematik auf? Kennt Ihr Konzepte und Quellen, die diese näher beschreiben?
Wie du schon erkannt hast, ist diese Frage nicht so einfach mit einem Satz zu beantworten. Grundsätzlich gilt jedoch das einfache Prinzip, dass jede Exception auch gefangen werden muss. Die Art und Weise des Fangens kann dabei unterschiedlich sein: "lokale" Exceptions einer Anwendung sollten auch dort gefangen und behandelt werden, "lokal" nicht verarbeitbare Exceptions sollten in den globalen Fokus gelangen und dort mit einer zentralen Behandlungs-Routine belegt werden.

Was die Auswirkung von Exceptions angeht, gibt es auch unterschiedliche Konzepte. "Kleine, spezialisierte" Exceptions dürfen dabei nie zu einem groben Fehlverhalten der Gesamt-Applikation führen, "große" Exceptions jedoch schon. Zu letzterem zählen vor allem Probleme, die ein Ausführen der Applikation nicht mehr möglich machen.

Lokale Exceptions, die auf jeden Fall gefangen und behandelt werden können:
Zitat:
- Modul fehlt, Programmfehler, "logische Exception"
- Modul besitzt hohe Priorität (Authentifizierung)
- Modul ist nicht relevant für die Funktionalität der Anwendung (Feedreaderbox o.ä.)
- Fehler-Aktion ist nicht relevant für die Funktionalität (Caching eines Inhalts o.ä.)
- Modul ist tw. relevant für die Funktionalität der Anwendung (Warenkorbanzeige)
- Fehler in Verbindung mit Parameterdaten, fehlgeschlagene Validierung
Globale Exceptions, die global gefangen und behandelt werden müssen:
Zitat:
- temporärer DB Fehler, Timeout
- permanenter Fehler (Ressource fehlt, falsche Ordnerrechte, fehlende PHP Library...)
- Datenbankverbindungsfehler (betrifft dann auch andere Teile der Anwendung)
Für letztere kannst du z.B. eine allgemeine Fehlerseite anzeigen, oder den Fehler fangen und (sofern möglich) auf die Startseite oder eine Seite ohne DB-Anteil weiterleiten.

Was das globale Handling von Exceptions angeht, so könntest du personalisierte Fehlerseiten bauen, in dem du konfigurierst, bei welcher Exception welche "schöne" Fehlermeldung angezeigt werden soll. Treffen alle konfigurierten Fälle nicht zu, gibt es eine allgemein Meldung.

Ich hoffe, das hilft dir etwas weiter.

Viele Grüße,
Dr.E.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 10.08.2009, 09:08  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.245
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Grundsätzlich gilt jedoch das einfache Prinzip, dass jede Exception auch gefangen werden muss.
Pauschal gilt das natürlich schon, wobei man aber ergänzen sollte, dass es durchaus praktikabel sein kann, schwere Anwendungsfehler durch ein allgemeines "catch (Exception)" an deinem äußersten Application-Rahmen zu fangen. Und da hilft dann auch die grobe Einteilung, die PHP selbst vorgibt (siehe Post von Chriz).
In jedem einzelnen Anwendungsmodul beispielsweise sinnvoll auf eine Exception zu reagieren, nur weil sie die aufgerufene Methode wirft, ist manchmal einfach unsinnig, denn der Aufrufer hat eine Selbstverantwortung, zu entscheiden ob eine Exception nun bedeutet, dass der Aufrufer mit anderen Programmteilen weitermachen kann oder ob sie bedeutet, dass sie zu einem irreparablen Zustand führen soll. Sprich: Entwickelt man völlig modular, ergibt sich die Schwere des Problems ergibt sich nicht immer zwangsläufig aus der Exception selbst.
Und wenn man sich an diese Vorgabe hält, für ganz besondere Umstände im äußern Rahmen eine Art "Fallback" einzubauen, werden alle bis dato nicht gefangenen Exceptions als schwere Anwendungsfehler angesehen, was so zumindest erst einmal nichts völlig verkehrtes ist.

generell gilt es aber, wie hier angeklungen ist, selbst zu verstehen, was man mit einer Exception erreichen will. Generell ist eine Exception wertneutral eine Exception (=Ausnahme zu deutsch). Also eine Ausnahme im Programmablauf.
Exceptions können logisch gesehen folgendes sein:
- Irreparable Programmzustände (DB-Connect fehlerhaft usw.)
- Logische Fehler, die der Aufrufer fängt und zur Kenntnis nimmt um seinerseits eine alternative Verarbeitung zu machen (zum Beispiel Exceptions zum Anzeigen einer fehlgeschlagenen Validierung, was jedoch den weiteren Programmablauf nicht massiv stört)
- Logische Fehler, die vom Aufrufer provoziert werden.
Exceptions werden sogar manches mal als eine Art Informationsträger genutzt, sind also nicht zwangsläufig gleichbedeutend mit einem Fehler.

Bevor ich also soweit gehe, um mir um die Fehlerbehandlung als solches Gedanken zu machen, versuche ich immer erst, mir Gedanken zu machen, was meine Exception eigentlich bewirken soll und in welche Kategorie sie passt.
Manches mal ergibt sich die Behandlung auch erst aus dem Kontext. Wo man bei der normalen Anwendung im Normalfall die Datenbankfehler bis oben hin durchreichen lässt um dann eine allgemeine Fehlerseite o.ä. einzublenden, so nimmt man beispielsweise während der Installation einen fehlgeschlagenen DB-Connect auf andere Art und weise zur Kenntnis.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Alt 10.08.2009, 13:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von mepeisen Beitrag anzeigen
pauschal gilt das natürlich schon, wobei man aber ergänzen sollte, dass es durchaus praktikabel sein kann, schwere anwendungsfehler durch ein allgemeines "catch (exception)" an deinem äußersten application-rahmen zu fangen.
->

Zitat:
Zitat von dr.e.
"lokal" nicht verarbeitbare exceptions sollten in den globalen fokus gelangen und dort mit einer zentralen behandlungs-routine belegt werden.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 10.08.2009, 18:23  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.245
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Ich hab mich ebbes blöd ausgedrückt. Wie dem auch sei, ich wollte mit meiner langen Rede eigentlich vor allem darauf hinaus, dass der Aufrufer selbst meist erst über die Schwere des Fehlers entscheidet. Manches mal sind die gleichen Fehler so schwerwiegend, dass sie vom Aufrufer nicht mehr sinnvoll verarbeitet werden können, manches mal sind sie eine Information für den Aufrufer.
Der DB-Connect ist in Zusammenhang mit dem Unterschied zwischen dem Aufrufer während dem Betrieb und dem Aufrufer während der Installation ein von mir gerne genommenes Beispiel. Obwohl vom gleichen Modul eine ConnectionFailedException generiert werden kann, mag der eine Aufrufer diese als fatale Exception sehen und kann keine sinnvolle Webseite anzeigen. Im Zweifel wird auch nicht geschaut, was genau falsch ist, denn diese Detailinfo hat den Besucher der Seite nicht zu interessieren. Die Installationsroutine jedoch gibt dem Benutzer das reguläre Formular aus und weist ihn darauf hin, dass seine Informationen wohl nicht korrekt waren. Zudem ist für die Installationsroutine durchaus interessant, ob der Connect nicht klappte oder das Passwort falsch war oder die DB nicht existierte...

Bei dir hatte ich das etwa so verstanden, dass du der Meinung bist, man sollte gewisse Exceptions eigentlich immer sinnvoll weiterverarbeiten können. Das mag auch in 95% der Fälle stimmen aber ebend in 5% der Fälle nicht.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Alt 10.08.2009, 23:10  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Wir verstehen uns also prächtig! Freut mich.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Exceptions dateiübergreifend abfangen? dauerbaustelle PHP-Fortgeschrittene 1 04.06.2009 15:00
Frage zu try, throw und exceptions litterauspirna PHP Tipps 2009 6 17.05.2009 14:21
PHP: Exceptions - Teil 2 Zergling-new Tutorials 5 15.03.2009 11:00
Wann verwendet ihr Exceptions? T0bbes Software-Design 23 11.02.2009 00:43
PHP: Exceptions - Teil 1 Zergling-new Tutorials 4 05.12.2007 23:31
PHP-Errors zu exceptions brian johnson PHP-Fortgeschrittene 6 06.11.2007 12:45
Welche Art von Exceptions sollte man werfen? Zergling-new PHP-Fortgeschrittene 1 24.09.2007 13:29
erbende Exceptions mit PHP 5.1.1 nicht mehr möglich? HStev PHP-Fortgeschrittene 4 27.01.2006 14:32

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php exception durchreichen, php nach exception fehlerseite, php exception weitergeben, php exception validierung, php exceptions schön ausgeben, php error exception abfangen, php exception abfangen und weitermachen, systematik von php, php exception wird nicht gefangen, php try catch exceptions werden nicht gefangen, php exception global abfangen, php nach exception weiter ausführen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum