Archiv für die Kategorie „Software“

chkdsk-Probleme unter Windows 7

Mittwoch, 10. Februar 2010

Die letzten Wochen versuchte ich ein hartnäckiges Probleme beim Booten von Windows 7 in den Griff zu bekommen. Bei jedem Neustart kündigte mir das System an, eine Dateisystemüberprüfung durchführen zu müssen. Ich hatte 10 Sekunden um diese durch drücken einer beliebigen Taste abzubrechen. Leider funktionierte das nicht ganz so wie es sollte, denn der Abbruch gelang nicht immer durch Tastendruck. Aber was noch viel schlimmer war, wenn man die Überprüfung tatsächlich durchführen wollte um endlich Ruhe zu haben fror der Bildschirm bei 1 Sekunde Restzeit ein. Danach war regelmäßig ein harter Neustart notwendig, und das Hoffen, dass ich die Dateisystemüberprüfung beim nächsten Start abgebrochen kriege.

Offensichtlich war ich nicht der Einzige mit dem Problem, in verschiedenen Foren wurde besprochen wie man dem Problem am besten begegnet. Oft wurde geraten die Überprüfung ganz abzuschalten, so dass sie nie mehr lärmt. Solch eine komplette Abschaltung wäre sicher eine Lösung, aber andererseits ist die Dateisystemüberprüfung ein wichtige Hilfe, wenn tatsächlich einmal ein Fehler im Dateisystem vorhanden ist.

Heute habe ich in einem Forum eine weitere Lösung gefunden. In der Microsoft Knowledge Base wird das Problem im Detail beschrieben und ein Hotfix bereitgestellt. Der Fehler wird mit folgenden Eigenschaften charakterisiert:

  • Ein Countdown wird angezeigt, und Sie werden aufgefordert, eine beliebige Taste zu drücken, wenn die Überprüfung des Datenträgers übersprungen werden sollen. Nachdem Sie eine Taste drücken, wird jedoch der Countdown fortgesetzt. Schließlich reagiert das System nicht mehr sobald die Anzahl der Sekunden bei 1 angekommen ist.
  • Der Countdown wird nicht angezeigt, und die Überprüfung des Datenträgers wird sofort gestartet.
  • Der Countdown wird angezeigt. Allerdings startet die Überprüfung des Datenträgers, bevor der Countdown Null erreicht.

Für das Problem steht ein Hotfix bereit. Dieser wechselt wahrscheinlich die autochk.exe im System aus. Man kann seine E-Mailadresse angeben und bekommt dann ein Passwort und einen Link zu gesendet, unter dem man das Hotfix laden kann (Achtung: darauf achten zwischen einem 64bit und einem 32bit (Standard) zu wählen). Es wird angenommen, dass das Problem nur auftritt, wenn bestimmte Infrarot-Geräte im System eingebaut sind.

Der Hotfix soll auch im Service Pack 1 enthalten sein. Da dieses voraussichtlich erst Ende September 2010 erscheint entschied ich mich es mit Hotfix zu versuchen. Nach der Installation und einem Neustart, lief die Dateisystemüberprüfung bei mir korrekt durch. Endlich.



Kleine Anpassungen im WordPress Editor

Donnerstag, 21. Januar 2010

Bei meinen bisherigen Anpassungen von WordPress habe ich meist einen weiten Bogen um den grafischen Editor, den TinyMCE, gemacht. Für die meisten Belange ist dieser WYSIWYG-Editor völlig ausreichend. Und an manchen Stellen bietet er mir (bzw. vor allem meinen Kunden) bereits zu viele Möglichkeiten. Anpassungen an dieser Komponente sind schwierig, aufgrund der Komplexität der Einbindung. Außerdem ist bei mir immer im Hinterkopf, dass sich die Hooks, über die man Anpassungen vornehmen kann, jederzeit ändern können.

Daran hat sich auch nichts geändert. Allerdings setze ich in letzter Zeit deutlich mehr Systeme mit WordPress um. D.h. auch, dass ich mehr Schulungen durchführen muss. Und die Probleme und Verständnisschwierigkeiten die der TinyMCE manchmal hervorruft kosten dann natürlich auch Zeit.

Zwei Änderungen wurden daher notwendig:

  1. Das Ausblenden von “Adresse”, “Monospace”, “Überschrift 1″ und “Überschrift 2″ aus dem Format Auswahlfeld (formatselect).
    Ziel ist es dem Benutzer die Möglichkeit der Formatierung zu erlauben, allerdings nur so, dass es ins Gesamtdesign und den Seitenaufbau passt.
  2. Einige Formatierung der Vorschau des WYSIWYG-Editors.
    Der Benutzer soll eine genauere Rückmeldung bekommen mit welcher Formatierung er gearbeitet hat und wie der Text auf der Seite aussieht.

Hier eine Vorschau auf das Ergebnis:

Bitte anklicken zum Vergrößern

Die Änderungen werden ausschließlich mit CSS abgewickelt. Zum Einbinden des CSS-Codes ist aber natürlich PHP notwendig. Da ich nicht jede kleine Anpassung in ein Plugin packen will, und kein Fan von Sammel-Plugins bin, kommt der PHP-Code in die functions.php des aktuellen WordPress-Themes. Die beiden benötigten CSS-Dateien kommen ebenfalls ins aktuelle Theme-Verzeichnis. Wer es anders machen will kann es gern tun.

So wird’s gemacht:

Folgender Code bindet die CSS-Datei für die Button-Leiste (oder besser für den gesamten Admin-Bereich) ein:

function tm_CustomAdminCSS() {
    echo '<link rel="stylesheet" href="'
         . get_bloginfo('template_directory')
         . '/my_admin.css" type="text/css" media="all" />
';
}
add_action('admin_head', 'tm_CustomAdminCSS');

Über den Hook “admin_head” wird die Datei “my_admin.css” eingebunden in der nun alle CSS-Anpassungen gesammelt werden die für den Administrationsbereich gelten sollen. Da ich lediglich ein paar Einträge aus dem MCE entfernen und die anderen Einträge formatieren will, sieht meine Datei so aus:

.mce_pre,
.mce_address,
.mce_h1,
.mce_h2 {
    display: none;
}
#menu_content_content_formatselect_menu_tbl .mceMenuItemTitle {
    display: none;
}
#menu_content_content_formatselect_menu_tbl .mceText {
    font-size: 1.3em;
    font-weight: normal;
}
#menu_content_content_formatselect_menu_tbl .mce_h4 .mceText,
#menu_content_content_formatselect_menu_tbl .mce_h5 .mceText,
#menu_content_content_formatselect_menu_tbl .mce_h6 .mceText {
    color: #97bf0d;
    font-weight: bold;
}

Der TinyMCE arbeitet intern mit einem iframe, in dem er Benutzer ein grafisches Editorfeld vorgauckelt. Um für dieses iframe CSS-Daten zu übergeben ist folgender PHP-Code nötig:

function tm_custom_tinymce_css($wp) {
    $wp .= ',' . get_bloginfo('template_directory')
               . '/advanced_tinymce.css';
    return trim($wp, ' ,');
}
add_filter( 'mce_css', 'tm_custom_tinymce_css');

Das WYSIWYG-Fenster erhält seine CSS-Daten gepackt. Mit dem Filter “mce_css” kann an das PHP-Script, welches die CSS-Dateien packt, eine weitere Datei angehangen werden.

Die CSS-Datei “advanced_tinymce.css” enthält folgenden Code:

* {
    font-family: Arial,sans-serif;
}
h3 {
    font-size: 1.4em;
    font-weight: normal;
    margin-bottom: 0em;
}
h4,h5,h6 {
    color: #97bf0d;
    font-size: 1.3em;
    margin-bottom: 0em;
}

Die Standartschrift wird auf Arial gesetzt und die Formatierung der Überschriften wird angepasst. Da die CSS-Datei lediglich angehangen wird, bleiben alle sonstigen Formatierungen erhalten. Damit die Änderungen aktiv werden muss der Browsercache geleert werden.

Fazit

Mit wenigen Zeilen PHP- und CSS-Code lässt sich bereits einiges Erreichen. Da die Anpassungen nicht im Kern des Systems vorgenommen werden, sondern per Hooks und Filtern, überleben sie auch das nächste Update. Erst wenn sich die Hooks oder die angesteuerten CSS-Klassen ändern, kommt es zu Problemen. Aber das kommt zum Glück nicht alle Tage vor.

Quellen & Links:



Und es geht doch

Donnerstag, 1. Oktober 2009

Merke: JPG-Bilder lassen sich doch via Photoshop in Adobe Camera Raw (ACR) öffnen. Eigentlich ist das nur über Adobe Bridge möglich. Da mein Adobe Bridge allerdings seit circa 1 1/2 Jahren aus ungeklärter Ursache keinen Piep mehr von sich gibt (shame on your support Adobe :-( ), musste ich auf die genialen Möglichkeiten, die im ACR verfügbar sind bei JPG’s stets verzichten. Just heute bin ich auf die Einstellung gestoßen, die mir diese Freiheit wiedergibt.

Man öffne dazu in Photoshop “Bearbeiten > Voreinstellung > Dateihandhabung” und aktiviere im daraufhin öffnenden Dialog die Option “Bei JPEG-Dateien Präferenz für Adobe Camera Raw” (getestet mit Adobe Photoshop CS3 unter Windows).



Dem Firefox Beine machen

Montag, 21. September 2009

Nicht nur das Betriebssystem Windows wird mit zunehmender Nutzungsdauer langsamer, sondern auch der Browser Firefox.

Grund für das Erlahmen liegt dabei gar nicht direkt beim Browser selber, sondern ergibt sich in Zusammenhang mit der von ihm genutzten Datenbank (SQLite). Dort werden z.B. die Daten des Verlaufes abgelegt. Bei häufigem Gebrauch über einen längeren Zeitraum arbeitet diese Datenbank nicht mehr performant. Da immer wieder Einträge hinzugefügt und entfernt werden, werden Anfragen zunehmend langsamer.

Abhilfe schafft der Befehl “vacuum”, der die Einträge neu indexiert. Der Befehl muss direkt an die SQLite-Datenbank übergeben werden. Für den Otto-Normal-Verbraucher ist das natürlich nicht gerade sehr benutzerfreundlich. Komfortabler ist da schon das Plugin Vacuum Places Improved, welches die gleiche Aufgabe ausführt.

Nach der Bereinigung der Datenbank startet Firefox auf meinem Rechner zumindest gefühlt schneller. Leider habe ich weder Startdauer noch Speicherverbrauch vorher gemessen, so dass ich keinen objektiven Vergleich anstellen kann. Aus einem Blog den ich dazu las geht hervor, dass Firefox durchaus mit etwa 20 MB weniger Arbeitsspeicher starten kann. Das wäre in meinem Fall eine Einsparung von etwa 15%. Nicht schlecht.

Geschadet hat es jedenfalls nicht.

UPDATE (22. September):

Nun hab ich doch noch einmal Hand angelegt, die Resultate können sich sehen lassen. Mit dem Firefox Addon SQLite Manager habe ich die entsprechenden Dateien geöffnet, und danach über “Database > Compact Database” die Datenbank optimiert. Hier das Ergebniss für urlclassifier2.sqlite:

The database was compacted using VACUUM statement.
Before compacting:
	Page Count    = 11249
	Database Size = 11518976 bytes
After compacting:
	Page Count    = 2565
	Database Size = 2626560 bytes

Bei urlclassifier2 beträgt die Größe nach der VACUUM-Optimierung nur noch etwa 1/4 der Ursprungsgröße.

urlclassifier2 ist eine der Datenbanken die im Benutzerprofil des Firefox zu finden ist. Der Standardpfad unter Vista lautet: “C:\User\<user>\AppData\Roaming\Mozilla\Firefox\Profiles\<profile>\urlclassifier2.sqlite“.



Hibernate mit c3p0 nutzen

Donnerstag, 9. April 2009

Hibernate ICONHibernate ist eine Java-Bibliothek die zum object-relational-mapping genutzt wird. Ich benutze diese Bibliothek in einem kleinen Java-Projekt mit einer MySQL-Verbindung zum Server eines Webhosters. Bis vor einigen Wochen bin ich damit ganz gut durch gekommen. Dann wurde das Webhosting zu einem anderen Provider verlegt und ich bekam ständig Fehlermeldungen weil die Verbindung zum Server zusammenbrach.

Wie sich herausstellte ist beim neuen Provider der MySQL-Server anders konfiguriert, der Wert “wait_timeout” ist hier auf 120 Sekunden gestellt. Sobald meine Hibernate-Verbindung also länger als 2 Minuten keine Aktion ausführt, wird die Verbindung abgebrochen und eine Exception geworfen. Wie kann man das nun am elegantesten verhindern?

Es gibt einen sehr einfachen Weg dieses Problem zu umgehen, dazu wird die c3p0-Biblithek genutzt die Hibernate praktischerweise gleich in die eigene JAR integriert hat. c3p0 dient dazu einen sogenannten Connection-Pool zu erstellen. Dieser Connection-Pool soll uns aber gar nicht weiter interessieren, wer mehr zu den Vorzügen eines Connection-Pools erfahren möchte kann dies hier tun.

Um c3p0 einzubinden können folgende beispielhafte Zeilen in der hypernate.cfg.xml ergänzt werden:

<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.max_statements">50</property>

Der Vorteil von c3p0 liegt darin, dass es vor der nächsten Aktion einen Überprüfung der Verbindung durchführen kann. Dazu kann man die Konfigurationsvariable “testConnectionOnCheckout” auf “true” setzen.

<property name="c3p0.testConnectionOnCheckout">
    true
</property>

Diese Konfiguration ist allerdings sehr “teuer” da vor jeder Transaktion die Verbindung getestet wird. Deshalb wird empfohlen statt dessen “idleConnectionTestPeriod” zu nutzen, welches einen Verbindungstest nach x-Sekunden durchführt. Erweiterte Einstellungen sind mit “preferredTestQuery” und “automaticTestTable” möglich.

Da ich keine hochperformante Verbindung benötige hab ich mich vorerst nur für die testConnectionOnCheckout-Variante entschieden. Damit klappt es bis jetzt bestens.