
Das Tool FindBugs untersucht den Javacode auf Bytecode-Ebene nach signifikaten Fehlermustern und zeigt auf die Codezeile in der der Fehler gefunden wurde.
Folgende zwei Codezeilen bewirken z.B. die Ausgabe der Fehlermeldung: Dead store to local variable.
List<Artikel> artikelListe = new List<Artikel>(); artikelListe = dao.getWarenkorbArtikel();
Können Sie die Fehlerursache entdecken?
Analyse des Codes:
Zeile 1: In der zweiten Zeile wird die lokale Variable artikelList angelegt und der Referenzzeiger der Variable in den Stack gelegt. Im Heap wird ein Objekt Liste<Artikel> erzeugt. Der Referenzzeiger zeigt auf dieses Listenobjekt.

Zeile 2: Die Methode dao.getWarenkorbArtikel liefert als Ergebnis ein Objekt vom Typ List<Artikel> zurück. Durch die Zuordnung in dieser Zeile wird die gerade erst erzeugte Referenzzuordnung von artikelListe gestrichen und der Zeiger artikelListe zeigt nun auf das von dao.getWarenkorbArtikel zurückgegebene Objekt.
Das heisst, sofort nach der Erzeugung des ListObjekts ist dieses Objekt nach der Folgezeile auch schon wieder Müll, bereit für die Garbadge Collection und belegt nur Speicherplatz.
Richtig: Aus den Diagrammen wird klar, dass für das obige Beispiel das Statement sinnvollerweise folgendermaßen lauten müsste:
List<Artikel> artikelListe = dao.getWarenkorbArtikel();
Siehe auch:
Wikipedia: Funktionsweise von FindBugs
Sourceforge: FindBugs Projektseite
Tags: Fehlersuche, FindBugs, Java
Leider funktionieren zahlreiche SyntaxHighlighter zur Darstellung von Codezeilen unter der derzeit aktuellen WordPress Version 3.2.1 nicht mehr. Ich musste erst einmal ein paar Highlighter-Plugins testweise installieren und wieder löschen, um eine Codedarstellung zu erhalten.
Als dann zeigte sich, dass der CKEditor im visuellen Modus eine Art “Auto Closing Tag” Mechanismus hat, der nicht zu deaktivieren ist. Das macht es unmöglich, Java Codebeispiele mit Generics wie z.B.
List<Artikel> artikelListe = dao.getWarenkorbArtikel();
for(Artikel artikel : artikelListe){
foo.setPrice(artikel.getPrice());
}
zu schreiben. Entweder wird das <Artikel> in ein kleines <artikel> verändert und am Ende ein </artikel> angehängt oder es wird ganz aus dem Editorfeld herausgelöscht. Besonders schlimm ist, dass in der HTML-Sicht so mancher WYSIWYG Editoren wie z.B. CKEditor noch alles richtig abgespeichert wird, sobald man aber in den visuellen Modus wechselt, … alles wieder zunichte gemacht wird.
Funktionierende Lösung für WordPress3.2.1:
Folgende Plugins harmonieren miteinander bezüglich der Darstellung von Code in Highlighter-Manier
- Editor-Plugin: TinyMCE Advanced
- Highlighter-Plugin: SyntaxHighlighterPro
Im Editor müssen die “<>” Klammern in < bzw. > umgeschrieben werden. Das ist zwar etwas lästig, aber wenigsten entwickelt der Editor keine Eigeninitive und verändert eigenwillig die eingegebenen Sonderzeichen wieder.
Tags: CKeditor, Codedarstellung, Syntaxhighlighter, TinyMCE, WordPress
Nach dem Kauf eines neuen Desktop-PC’s oder Notebooks mit vorinstalliertem Windows 7, stellt man öfters einmal fest, dass man sich gegenüber dem gewohnten Windows XP nun etwas umstellen und wieder neu zurechtfinden muss. Nicht immer ist man dann mit den Einstellungen des Auslieferungszustands glücklich.
Im folgenden Beispiel wollte der Hersteller wohl die Schnelligkeit des Computers erhöhen und hat kurzerhand die Darstellung von Bildern in Form von Vorschaubildern deaktiviert.
Problem: Öffnet man im Explorer ein Verzeichnis mit Bildern, so werden diese nur als Symbol dargestellt.
Lösung: Ordner-Eigenschaften verändern
- Dazu müssen Sie den Menüpunkt Organisieren ausklicken und im dann sich öffnenden Aufklappmenü die Zeile Ordneroptionen anklicken.
- Nach Anwahl des Tabellenreiters Ansicht müssen Sie das Häckchen bei “Immer Symbole anstatt Miniaturansichten anzeigen” entfernen.
Ergebnis:
Durch diese kleine Änderung werden Ihnen nunmehr wieder die Vorschaubilder angezeigt.
Rechts oben befinden sich übrigens noch eine Reihe von Icons mit denen Sie die Größe der Miniaturansichten verändern und z.B. eine vergrößerte Detaildarstellung im rechten Bildschirmbereich sich einblenden lassen können. Spielen Sie ruhig einmal etwas mit den Darstellungsmöglichkeiten.
Aufgabe:
In der Datei hosts unter c:/windows/system32/drivers/etc soll die Eintragszeile
127.0.0.1 www.perfect-knowhow.de perfect-knowhow.de
ergänzt werden.
(s.a. Artikel Lokale Entwicklung mit einem Windows hosts Eintrag)
Problem:
Das Öffnen und Editieren der Datei hosts ist ohne Problem möglich, aber beim Versuch die Datei abzuspeichern, erhält man die Fehlermeldung “Zugriff auf Datei verweigert“.
Gegeben:
Die folgenden Punkte sprechen eigentlich dafür, dass es ohne Probleme möglich sein sollte, die Datei mit einem Editor zu verändern und wieder abzuspeichern:
- Die Datei ist nicht schreibgeschützt (ermittelbar durch einen Rechtsklick auf die Datei und dann den Menüpunkt Eigenschaften)
- Der angemeldete Windowsbenutzer gehört zur Gruppe “Administrator“, der ja so gut wie alles darf.
- Die Datei hosts hat als Eigentümer den Benutzer “System” und weist dem Adminstrator eine Lese- und Schreibberechtigung für diese Datei zu.
Lösung:
Der Zugriff auf die Datei wird nicht mehr verweigert, d.h. der Abspeicherungsversuch gelingt, wenn Notepad (als Editor) im Administratormodus gestartet wird.
Schritte zur Aktivierung des Administratormodus beim Editor :
- Start-Button ganz unten links im Windowsfenster anklicken
- Im Sucheingabefeld notepad eingeben und dann Rechtsklick und den Menüpunkt “Als Administrator ausführen” auswählen.
- Im Editor dann ganz normal die Datei öffnen, bearbeiten und abspeichern.
Weiterer Artikel, der Sie interessieren könnte:
Lokale Entwicklung mit einem Windows hosts Eintrag
Tags: Editor, Windows 7, Windows Server
Erstelle eine Zeile mit Links direkt am oberen Bildschirmrand.
Problem:
Der Browser setzt die Linkzeile nicht bündig an den oberen Seitenrand.
Es wird immer ein zwar kleiner, aber eben doch merklicher Abstand zum oberen Bildschirmrand eingehalten.
Lösung 1 (Dirty-Fix): Kapitulieren und das Banner tiefer setzen.
Lösung 2 (Dirty-Fix): Kapitulieren und das CustomNavigationsModul im Headerbereich mit einem negativen Wert nach oben verschieben
}
Lösung 3: Ursache verstehen und beheben.
Die Lösung des Problems ist einfach, aber es ist schwierig, die Ursache dafür zu erkennen. Man kann lange nach “margin” oder “padding” Einstellungen von ID’s und Selektorklassen suchen und wird nicht fündig werden.
Um es kurz zu machen:
Es liegt nicht an falschen CSS-Deklarationen, sondern an den nicht vorhandenen CSS-Einstellungen für bestimmte Blockelemente. Viele haben es sich ja schon angewöhnt, im body-Tag die Außen- und Innenabstände auf Null zu setzen.
body {
margin: 0;
padding: 0
}
Zusätzlich hierzu sollte man in seiner CSS-Datei auch die Außen- und Innenabstände der anderen Blockelemente mit “0″ initialisieren, um die Kontrolle über die Darstellung der Seite zu behalten. Tut man dies nicht, so setzen die Browser (Firefox, Internetexplorer, Opera, Chrome, …) eigenmächtig Defaultwerte für Margin und Padding ein und so kommt es, dass z.B. auch das Blockelement “ul” für die Darstellung einer Liste einen vom Webdesigner/Seitenersteller ungewollten Margin-Abstand hat.
Notwendiges CSS-Statement zur Grundbelegung der Außen- und Innenabstände aller Blockelemente:
Peter Müller empfiehlt in seinem CSS-Buch sogar, ganz am Anfang des Stylesheets (noch vor der body Definition) die Abstände aller Elemente durch den Stern Selektor auf Null zu setzen.
Nachteil: Es soll nicht verschwiegen werden, daß diese drastische Maßnahme einem zwar die volle Kontrolle über die Seitendarstellung(Browserübergreifend) gibt, auf der anderen Seite aber, das Layout zunächst einmal ziemlich zerstört.
Alle liebgewonnenen, automatischen Vorbelegungen des Browsers gehen verloren und diese sind erst wieder Selektor für Selektor zu setzen.
Fazit: Insgesamt lohnt sich die Zeit, die man für die individuellen Selektordefinitionen investieren muss, aber es ist eine Veränderung, die seine Auswirkungen hat und Arbeit bedeutet.
Wer jedoch nur eine schnelle Lösung braucht, sollte auf die Lösung 1 oder 2 zurückgreifen.
Siehe auch:
Selfhtml: Allgemeines zu Außenrand und Abstand
Selfhtml: Blockelemente
Litte Boxes, Peter Müller: Kalibrierung: Abstände auf null setzen
Problem:
Erhält man als Systemadministrator von Plesk eine E-Mail der Art:
The validity period of client account 'NameOfClient' (Contact Name 'ClientContactName') is about to expire.
The client account and all of related domains will be deactivated by Juli 1, 2011 unless the validity period is prolonged.
dann sollte man diese Meldung nicht ignorieren.
Lösung:
Sowohl bei den Client- als auch bei den Domaineinstellungen kann man ein Ablaufdatum (Expiration date) einstellen.
1.) Veränderung der Gültigkeit des Clientaccounts:
Plesk Panel > Clients > Resource usage (s.a. obiges Bild)
Ganz unten findet sich dann ein Datumsfeld, in dem man explizit ein Ablaufdatum eingeben kann bzw. eine Checkbox für endlos, wenn die Domain "open end" gebucht wurde..
2.) Veränderung der Gültigkeit des Domainaccounts:
Plesk Panel > Domains > Resource usage
Tags: Plesk
Die Möglichkeit, bei einem Blog einen Kommentar zu hinterlassen, ist meines Erachtens eine der wichtigsten Funktionen eines Blogs.
Durch Kommentare kann man
- den Textbeitrag des Autors ergänzen
- Nachfragen stellen
- mit dem Autor oder anderen Kommentatoren in einen Dialog treten
- auf weitere interessate Artikel zu diesem Thema verweisen
- u.s.w., die Liste läßt sich noch beliebig fortsetzen
Da der Google Suchalgorithmus jedoch gerade die Internetseiten in den Suchergebnislisten vorne anzeigt, auf die oft verlinkt wird, wird die Kommentarfunktion leider von unseriösen Gestalten dazu benutzt,
- Werbungtexte für dubiose Produkte (Rolex-Uhren, Casino, Potenzmittel, …) einzustellen oder
- total belanglose Allgemeinkommentare wie
"Das musste einmal gesagt werden. Danke für den Beitrag".
Teilweise geht das soweit, dass im Textfeld auch nur eine Buchstabenwüste "woiaökdmnfkweuorianf" steht, da es scheinbar nur darauf ankommt, seine Absenderadresse "www.viagra…..de" zu platzieren.
Captcha-Plugins (Zeichen in Bildern)
Eine Abhilfe schuf hier der Einsatz von Captcha-Plugins, welche den Kommentator vor dem Absenden seiner Nachricht aufforderten, eine bestimmte Buchstaben/Zahlen/Zeichenfolge auszugeben.
Die Idee dahinter war simple:
Automatisierte Suchroboter können keine Bildinhalte aus Bildern erkennen, wie dies ein Mensch tun kann. Für Suchroboter sind es nur Bilder, mit der Folge, dass der Kontroll-Zeichencode nicht richtig eingegeben wird und das Absenden des Spam-Kommentars somit nicht möglich ist.
Spammer legen nach
Im Zeitalter der Texterkennung (character recognition) in Bildern scheint dies allerdings nur ein vorübergehender Sieg gegen Spammer gewesen zu sein.
Wie man auf der Seite von "Caca Labs" sehen kann, ist es heutzutage kein Problem mehr, die Bilder der meisten Captcha-Programme automatisch auszuwerten.
So ist es eigentlich nicht verwunderlich, dass ich in der letzten Zeit verstärkt beobachten muss, dass trotz des Einsatzes des Plugins "SI Captcha Anti-Spam" für WordPress, die Anzahl der Spam-Kommentare stetig steigt.
Um die Leser eines Blogs nicht mit Spam-Kommentaren zu belästigen, können alle Kommentare dem Blogbetreiber zur Freigabe vorgelegt werden, bevor diese öffentlich sichtbar sind. Aber zum einen erfordert dies einen zusätzlichen Arbeitsaufwand für den Blogbetreiber und zum anderen ist es auch nicht gerade sehr benutzerfreundlich. Wenn ich als Blogleser einen Kommentar hinterlasse, dann find ich es nicht so toll, wenn dieser erst zwei, drei Tage danach veröffentlicht wird und ich solange auf Reaktionen auf meinen Beitrag warten muss.
Akismet – Kostenpflichtiges Zusatzprodukt
Abhilfe verspricht hier das WordPress-Produkt "Akismet" mit kostenlosen, aber auch kostenpflichtigen Optionen. Neben dem kommerziellen Ansatz habe ich hier große datenrechtliche Bedenken. So kann man andernorts lesen, dass alle Daten zum Kommentar (Inhalt, E-Mail Adresse, Name, Webseite, …) an Server in den USA gesendet werden.
So ein Umgang mit Daten geht für mich gar nicht. Ein klares "NO GO".
Meine Lösung (für den Augenblick)
Eine finale Lösung des Problems gibt es sicherlich nicht, aber der Wechsel auf ein anderes Captcha Programm scheint mir angebracht. Nach einer Recherche im Internet hat das kostenlose WordPress-Plugin "Antispam Bee" von Sergej Müller recht gute Kritiken und eine große Fangemeinde.
Werde diesem Plugin einmal die Chance geben, sich in der Praxis zu bewähren. Die Antwort auf die eingangs gestellte Frage: "Ist AntiSpamBee die Lösung?", bleibt somit zunächst noch offen
Erfahrungsberichte zu anderen Kommentar-AntiSpam Lösungen und Erfahrungsberichte sind willkommen.
Links zum Thema:
Playground: Antispam Bee: Das WordPress-Plugin für den Schutz gegen Spam
Caca Labs: Defeated Captchas
Infoblog: WordPress Best Practise: Schutz gegen Kommentarspam
Im Internet muss man sensibel mit Daten umgehen. Das gilt nicht nur für Kundendaten, sondern auch die eigenen Daten, die des Internetseitenbetreibers.
Natürlich will und muss man den gesetzlichen Bestimmungen bezüglich der Pflichtangaben im Impressum Folge leisten, aber leider werden diese Daten sehr oft von zwielichtigen Gestalten durch Suchprogramme ausgelesen. Als Folge davon erhält man dann bald Spam-Emails und Spam-Faxe oder die Daten werden in sonstiger Weise missbraucht.
Beim Erstellen einer Internetauftritts stellt sich daher die Frage, ob man das Impressum als Bild darstellen darf, um somit das Auslesen der Firmendaten durch automatische Suchroboter zu verhindernden.
Meinungsäußerungen gibt es hierzu in Internet-Foren und -Blogs viele, aber sich auf so eine Meinung zu verlassen wäre sehr riskant. Ich bin deshalb froh, auf einen sehr interessanten Beitrag einer Rechtsanwaltskanzlei speziell zu diesem Thema gestossen zu sein.
Links zum Thema:
Law Podcasting, Kanzlei Dr. Bahr:
Pflichtangaben auf Homepages mittels Grafik oder Flash. (Teil 1)
Pflichtangaben auf Homepages mittels Grafik oder Flash. (Teil 2)
Tags: Recht
Ausgangssituation:
Suche nach einem Server, auf dem ich Moodle, das ist eine eLearning Anwendung, installieren kann.
Die Version 2.0 von Moodle benötigt hierbei als Systemvoraussetzung eine PHP-Version größer als 5.2.8, welche nicht so leicht zu finden ist, aber bei der Server-Administrationssoftware Plesk in der Version 9.5.4 dabei wäre.
Lösung:
Host-Europe hat zur Zeit (bis 6. Februar 2011) den Preis für seine Windows-Server gesenkt, mit dem sehr interessanten Zusatz, dass der erniedrigte Preis nicht nur für eine beschränkte Einführungszeit, wie bei anderen Anbietern gang und gebe, sondern für die gesamte Laufzeit des Vertrags gilt.
Eigentlich setze ich Server auf Basis von Linux auf, aber da der Windows Server genauso wie bei Linux mit Plesk als leicht zu bedienendes Server Administrationsprogramm arbeitet, sah ich darin kein Problem. Was dann auch so war.
Schnelle Einrichtung des Servers
Fünf Stunden nach der Bestellung des Windows Servers XL 4.0 war dieser schon eingerichtet und ich hatte alle Zugangsdaten per E-Mail erhalten.
Welche PHP Version steht zur Verfügung?
Ich hatte mich schon zuvor über die Host-Europe FAQ Seite darüber informiert, welche Plesk Version für Windows Server 2003 bei zur Verfügung stehen und hatte gehofft, dass die Grundinstallation gleich mit der stabilen Plesk 9.5.4 Version erfolgt, die PHP 5.2.13 mit sich bringt.
Dem war aber leider nicht so. Die Grundinstallation erfolgte mit Plesk 9.2.1, was doch zunächst etwas enttäuschend war.
Plesk 9.5.4 Update ist problemlos und total einfach
Was mich dann allerdings sofort wieder versöhnte, war die absolut leichte Anleitung, die Host-Europe zur Verfügung stellt, um auf die neueste Version 9.5.2 zu updaten. Von Version 9.2 auf 9.5 ist es ja wirklich ein Sprung, aber die Anleitung mit Bildern ist so easy vorzunehmen, dass absolut jeder Laie das Pleskupdate ohne Probleme selbst durchführen kann.
Siehe auch:
Host-Europe: Plesk Updates unter Windows
Preissuchmaschinen sind oft so konzipiert, dass sie in bestimmten Intervallen, z. B. einmal täglich die Shopinternetseite besuchen und dort eine bestimmte CSV- oder Excel Datei mit Artikelinformationen abrufen.
Nun kann es nicht die Aufgabe eines Shopbetreibers sein, diese Datei mit Artikelinformationen, Preisen, Lagerbeständen, etc. manuell zu pflegen und aktuell zu halten. Auch das alleinige Anstoßen eines Exports nach jeder Änderung der Artikelbeschreibung, des Artikelpreises, etc. wäre zu umständlich.
Der Vorgang mußte also automatisiert werden, um die Aktualität und damit die Qualität der Daten für die Preissuchmaschine auf einen hohen Niveau zu halten.
Aufgabenstellung
- Ein PHP-Skript ist zu erstellen, welches aus einer Magento-Datenbank (e-Commerce Shopsystem) die CSV-Datei für eine bestimmte Preissuchmaschine erzeugt.
- Dieses PHP-Skript als Cronjob in regelmäßigen Zeitabständen anzustoßen, so dass der Shopbetreiber sich keine Gedanken mehr um die Aktualität der Preissuchmaschinendatei mehr machen muss.
Auf einem Windows-System geschrieben und getestet, lief das Skript auch wunderbar. Beim Produktionssystem unter Linux (Suse 11.1) und Plesk (Version 8.6) erhielt ich jedoch die folgende Fehlermeldung:
PHP Warning: include_once(): Failed opening 'Varien/Profiler.php' for inclusion (include_path='/srv/www/vhosts/DeineShopDomain.de/httpdocs/app/code/… u.s.w.')
in /srv/www/vhosts/DeineShopDomain.de/httpdocs/app/Mage.php on line 51
Wie sich leicht durch eine Internetrecherche herausstellte, hatten schon viele vor mir ähnliche Fehlermeldungen. Leider gab es hierbei jedoch keine Lösung, die bei meiner Installation zum Erfolg führte.
Der Vollständigkeit halber möchte ich die gefundenen Lösungsvorschläge dennoch kurz aufführen, vielleicht führen diese ja bei einer anderen Systemkonfiguration zum Erfolg:
- Schreibweise und Existenz der Pfade prüfen
- Vorhandensein der Dateien, die nicht includiert werden konnten, prüfen (Grund: korrupte, gepackte Verzeichnisse oder Downloads)
- Richtige Schreib-/Leserechte bei den Dateien/Verzeichnisse
- PHP-Version fehlerhaft: Viele machen die PHP Version 5.2.5 für den obigen Fehler verantwortlich. Bei manchen ging nach einem Upgrade auf 5.2.6 plötzlich alles, bei anderen jedoch zeigte sich keine Veränderung.
- Plesk spezifisch: Die vhost.conf Datei um eine Eintragung erweitern
<Directory /srv/www/vhosts/deineshopdomain.de/httpdocs> (Verzeichnis kann bei anderem Linux abweichen)
php_admin_value include_path
“.:/usr/share/pear:/srv/www/vhosts/DeineShopDomain.de/httpdocs/lib:/… u.s.w. ”
</Directory>
danach ein
/usr/local/psa/admin/sbin/websrvmng -a -v
rcapache2 reload
Insbesondere dem letzten Lösungsvorschlag hatte ich große Erfolgschancen eingeräumt, zeigte doch ein phpinfo.php Aufruf, dass nunmehr der PHP include_path eindeutig die beanstandeten Laufwerke beinhaltete.
Ein erneuter Start des Skrips
/usr/bin/php5 -f skript.php
auf Command-Line Ebene ergab aber wieder die oben genannten Fehlermeldungen.
Lösung
Ich habe mir daraufhin die Command Line Parameter für das PHP5 Programm angeschaut und bin fündig geworden.
Usage: php [options] [-f] <file> [--] [args...] -a Run interactively -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse and execute <file>
Die include-path Einweisung im Skriptprogramm wird ignoriert, die include-path Anweisung in der Plesk-Vhost.conf Datei wird ignoriert, aber durch den Parameter "-c [/pfad/php.ini]" kann man PHP5 anweisen die php.ini Datei zu verwenden und plötzlich ging die Sonne auf, die Welt war wieder in Ordnung und das Skript lief sofort wieder fehlerfrei durch.
Man beachte die Stellung des Parameters -c vor dem -f, wenn man optional keine php.ini Datei angibt, weil sich diese im gleichen Verzeichnis wie die Skriptdatei befindet:
/usr/bin/php5 -c -f skript.php










Letzte Kommentare