Beiträge vom Dezember, 2009

Lösung für 36 Cube gefunden

Sonntag, 27. Dezember 2009 2:34

Dieser Beitrag ist eher etwas untypisch für diesen Blog, aber ich möchte unseren Lesern die folgende (großartige) Entdeckung nicht vorenthalten, die ich über die Weihnachtstage gemacht habe: Ich habe die Auflösung für das Puzzlespiel “36 Cube” von Thinkfun gefunden. Der Hersteller selbst nennt dieses Spiel “das schwierigste Puzzlespiel der Welt”. Angeblich sollen erst wenige Menschen die Lösung kennen (wer’s glaubt? ;) .  Nun ja, einige wollen das Puzzle mit dem bekannten Zauberwürfel von Rubik vergleichen. Ich selbst würde dies nicht mehr so gern tun, dazu aber gleich mehr.

Im Puzzle müssen farbige Spielstifte auf einem quadratischen Brett derart angeordnet werden, dass sowohl vertikal als auch horizontal niemals gleiche Farben in einer Reihe anzutreffen sind. Das Gemeine daran ist: Die Spielstifte sind zusätzlich noch in der dritten Dimension (Höhe bzw. Tiefe) unterschiedlich. Es ist aber Pflicht, dass diese Höhenunterschiede ausgeglichen werden, so dass das Spiel im Endzustand exakt eine Ebene hoch ist.

Ich habe viele Stunden mit dem Suchen der Lösung verbracht. Zuletzt hat mir aber ein guter Hinweis aus dem englissprachigen Internet geholfen: Der Hersteller hat nämliche einen recht gemeinen Trick eingebaut, der erfolgreich eine Lösung verhindert hat. Ich persönlich finde diesen Trick nicht sonderlich fair, hat er doch im Gegensatz zur Produktbeschreibung nicht ausschließlich mit logischem Denken zu tun. Daher habe ich mich auch entschlossen, die Lösung für 36 Cube hier zu posten.

Wenn Sie also die Lösung für 36 Cube erfahren möchten, lesen Sie weiter. Ansonsten bitte hier mit dem Lesen abbrechen ;)

Damit die Auflösung nicht gleich ins Auge fällt, habe ich die “Enthüllung” des Herstellertricks und Fotos von zwei möglichen kompletten Lösungen in meinen (separaten) privaten Blog gestellt. Also überlegen Sie es sich, ob Sie gleich dem Link folgen möchten und weiterlesen.

Die Lösung für 36 Cube finden Sie unter diesem Link, der zu meinem privaten Blog führt.

Viel Spass weiterhin und ich hoffe, es hilft Ihnen?

Thema: Unsortiert | Kommentare (0) | Autor:

HTML_AJAX aus dem PEAR-Framework mit JsMin zu schlankerem JavaScript Code optimieren

Montag, 21. Dezember 2009 2:03

Im Ferienhauskatalog von Location Bretagne nutzen wir eine typische LAMP-Installation. Einige Funktionen des Katalogs (bspw. die Geo-Suche) werden durch AJAX-Technologien unterstützt, die das HTML_AJAX Paket aus dem PEAR-Framework nutzen. Dieses Paket wird entwickelt und unterstützt von Elizabeth Smith, David Coallier, Joshua Eichhorn (er stellt auch eine gute Dokumentation bereit), Laurent Yaish und Arpat Ray.

Insgesamt finde ich das Paket sehr gelungen und auch nutzbar, obwohl es leider seit 16.6.2008 im Beta-Stadium (0.5.6) “verharrt”. Dafür steht es unter eine L-GPL Lizenz und lässt sich als Bestandteil von PEAR bequem mit dem PEAR-Installer installieren und updaten. Zusammengefasst lassen sich mit HTML_AJAX PHP-Funktionen und Klassenmethoden als AJAX-Funktionen registrieren, so dass der PHP-Code komfortabel als JavaScript-Code bereitgestellt wird und sich so bequem aus JavaScript aufrufen lässt.

Einen gravierenden Nachteil hat das Paket jedoch: Der generierte JavaScript-Code ist alles andere als “kompakt”. Zwar lässt sich der Code mit gzip komprimieren, doch führt dies dennoch regelmäßig zu schlechten Bewertungen mit YSlow! oder Google Page Speed. Folgender Beispielcode zeigt, wie die Kompression mit gzip aktiviert wird:

//a session is required(you can also set session.auto_start=1 in php.ini)
session_start();
include ‘HTML/AJAX/Server.php’;
$server = new HTML_AJAX_Server();
// activate gzip compression
$server->compression['enabled'] = true;
$server->handleRequest();

Ein Ausweg ist die Aktivierung von “packJavaScript”, die wie folgt aktiviert wird:

//a session is required(you can also set session.auto_start=1 in php.ini)
session_start();
include ‘HTML/AJAX/Server.php’;
$server = new HTML_AJAX_Server();
// activate gzip compression
$server->compression['enabled'] = true;
// activate pack javascript
$server->ajax->packJavaScript = true;
$server->handleRequest();lan

Dadurch wird der Code schon deutlich kompakter, da überflüssige Zeilenumbrüche etc. weggelassen werden. Die Testergebnisse bei YSlow! und Page Speed werden besser, allerdings sind sie noch lange nicht optimal. Statt dessen zeigte Page Speed bei mir immer noch mögliche Verbesserungsraten von ca. 1/3 an. Doch wie können wir den Code noch kompakter und schlanker machen? Standardmäßig leider gar nicht, statt dessen sind Modifikationen am HTML_AJAX Paket notwendig.

Mein Ansatz besteht darin, die Bibliotheken JsMin für PHP von Ryan Grove bzw. die nochmals optimierte Version JsMin+ für PHP von Tino Zijdel in den “Packalgorithmus” von HTML_AJAX zu integrieren. Dafür habe ich die Methoden packJavascript aus dem HTML_AJAX Paket (Klassenname: AJAX.php) insoweit modifiziert, dass nun über die zusätzliche öffentlich verfügbare Objekteigenschaft packJavaScriptEngine ausgewählt werden kann, mit welchem Mechanismus der JavaScript Code optimiert werden soll. Dabei muss als Stringparameter einer der folgenden Werte angegeben werden ORIGINAL, JSMIN oder JSMIN+.

In ersten Tests funktionierte die modifizierte Version problemlos. Die Nutzung von JsMin erzeugte nochmals deutlich kompakteren JavaScript Code, so das die Testresultate von YSlow! oder Google Page Speed immerhin “grün” wurden. Allerdings wurde noch immer bemängelt, dass der JavaScript Code noch kompakter sein könnte. Die Nutzung von JsMin+ brachte dann die erhoffte “Erlösung”: Der Code wird derart kompakt, dass bei Tests nichts(!) nichts mehr zu bemängeln haben.

Den beispielhaften Aufruf meiner modifizierten Version unter Nutzung von JsMin+ zeigt folgender Beispielcode (dabei muss die Bibliothek jsmin.php bzw. jsminplus.php seperat eingebunden werden – beide Bibliotheken können kostenlos auf den Seiten der Autoren geladen werden):

// jsminplus.php must be required because it’s not provided by HTML_AJAX!
require_once ‘jsminplus.php’;

$server = new HTML_AJAX_Server();
$server->compression['enabled'] = true;
$server->ajax->packJavaScript = true;
// Use JsMin+ to compact JavaScript
$server->ajax->packJavaScriptEngine = ‘JSMIN+’;
$server->handleRequest();

Die modifizierte Version von AJAX aus dem PEAR-Paket HTML_AJAX kann hier heruntergeladen werden. Ich habe die Modifikation ebenso wie die Originalautoren unter eine LGPL Lizenz gestellt.

Über Kommentare, Verbesserungsvorschläge und Anregungen freue ich mich sehr!!

/**
* Makes JavaScript code smaller, using 3 possible engines: JsMin for PHP, JsMin+ for PHP or the orginial one provided by the authors of HTML_AJAX
*
* @param string $input Javascript to pack
*
* @access public
* @return string packed javascript
*/
function packJavaScript($input) {
switch($this->packJavaScriptEngine) {
case ‘JSMIN’:
return JSMin::minify($input);
break;
case ‘JSMIN+’:
return JSMinPlus::minify($input);
break;
default:
return $this->_packJavaScript($input);
}
}
/**
* Make JavaScript code smaller
*
* Currently just strips whitespace and comments, needs to remain fast
* Strips comments only if they are not preceeded by code
* Strips /*-style comments only if they span over more than one line
* Since strings cannot span over multiple lines, it cannot be defeated by a
* string containing /*
*
* @param string $input Javascript to pack
*
* @access private
* @return string packed javascript
*/
function _packJavaScript($input)
{
$stripPregs    = array(
‘/^\s*$/’,
‘/^\s*\/\/.*$/’
);
$blockStart    = ‘/^\s*\/\/\*/’;
$blockEnd      = ‘/\*\/\s*(.*)$/’;
$inlineComment = ‘/\/\*.*\*\//’;
$out           = ”;
$lines   = explode(“\n”, $input);
$inblock = false;
foreach ($lines as $line) {
$keep = true;
if ($inblock) {
if (preg_match($blockEnd, $line)) {
$inblock = false;
$line    = preg_match($blockEnd, ‘$1′, $line);
$keep    = strlen($line) > 0;
}
} elseif (preg_match($inlineComment, $line)) {
$keep = true;
} elseif (preg_match($blockStart, $line)) {
$inblock = true;
$keep    = false;
}
if (!$inblock) {
foreach ($stripPregs as $preg) {
if (preg_match($preg, $line)) {
$keep = false;
break;
}
}
}
if ($keep && !$inblock) {
$out .= trim($line).”\n”;
}
/* Enable to see what your striping out
else {
echo $line.”<br>”;
}//*/
}
$out .= “\n”;
return $out;
}

Thema: Entwicklung, Technik und Technologie | Kommentare (0) | Autor:

Lösung: Word in Office 2007 – Text nicht mehr markierbar mit Lenovo Client Security Solution auf Windows 7

Samstag, 12. Dezember 2009 12:59

Ich habe mich so gefreut, mein Windows 7 64 Bit Professional läuft super! Bis ich vor kurzem bemerkt habe, dass auf einmal Word 2007 und Outlook 2007 aus Microsoft Office “spinnen”: Auf einmal war es nicht mehr möglich, Texte in beiden Programmem mit der Maus zu markieren. Das normale Schreiben klappte jedoch problemlos… Jetzt habe ich zum Glück auch dafür eine Lösung gefunden: Übeltäter ist diesmal offensichtlich der Passwort Manager von Lenovo Client Security Solution (den ich bspw. im Zusammenhang mit dem Fingerabrducksensor zum komfortablen und sicheren Verwalten von Passwörtern auf Webseiten und in Programmen nutze).

Offensichtlich tritt das Problem nur unter Windows 7 auf. Sobald man mit der Maus Text auswählen und markieren möchte, passiert einfach nichts. Kurz: Es geht nicht! Ich war ratlos, was denn nun die Ursache dafür ist. Jetzt habe ich die Lösung gefunden: Lenovo hat einen Fix für die Client Security Solution veröffentlicht, der dieses Problem unter Windows 7 behebt. Merkwürdigerweise wird mir dieser Fix z.Zt. nicht automatisch zum Download über das System Update Tool angeboten. Daher ist es notwendig, den Fix manuell zu laden und zu installieren.

Thema: Sonstiges, Technik und Technologie | Kommentare (0) | Autor:

Lösung: Acronis True Image 2010 hängt bzw. stürzt ab unter Windows 7

Samstag, 12. Dezember 2009 2:49

Vor kurzem hatte ich eine nette Diskussion mit Mac OS X Usern beim Grünkohlessen ;) Inhalt der Diskussion war u. a. die tollen Funktionen der Backup Lösung “Time Machine” von Apple. Ein wesentliches Feature ist das permanente Backup, d. h. das regelmäßig (bspw. jede Stunde) die Systemänderungen gesichert werden, so dass das System jederzeit wieder zu verschiedenen Zeitpunkten wiederhergestellt werden kann. Diese Funktion ist nur fast mit Windows 7 Boardmitteln möglich. Zwar ermöglicht die Systemwiederherstellung von Windows 7 unter Nutzung des Schattenkopiedienstes auch eine Wiederherstellung zu bestimmten Zeitpunkten, jedoch werden die Schattenkopien (standardmäßig) immer auf der aktiven Partition erstellt. D. h. sollte die Festplatte durch einen Hardwaredefekt zerstört werden, sind i. d. R. auch die Schattenkopien zerstört. Dann bleibt nur noch das letzte Backup auf einer externen Platte bzw. einem externen Speichermedium übrig. Dafür eignet sich natürlich die Backup Funktion “Sichern und Wiederherstellen” – leider ist die kürzeste Frequenz dabei “täglich”.

Eine gute Alternative dazu ist Acronis True Image 2010 für Windows XP/Vista/7.  Mit diesem Programm lässt sich das System ähnlich wie mit Time Machine kontinuierlich auf eine externe Festplatte sichern (bspw. alle 5 Minuten).

Nach Kauf des Programms währte die Freude allerdings nur kurz: True Image stürzte regelmäßig ab, nachdem ein Backupauftrag gestartet wurde. Dieses “Abstürzen” drückte sich darin aus, dass das Acronis Programmfenster hellgrau wurde (“Keine Rückmeldung”) und dass leider auch das gesamte übrige System nicht mehr reagierte. Der Mauszeiger verwandelte sich in die bekannte Sanduhr (bei Windows 7 sieht dieser wie ein ‘Kringel’ aus) und nichts ließ sich mehr klicken. Der Mauszeiger selbst bewegte sich jedoch noch; dies ist ein Zeichen, dass das System noch nicht ganz eingefroren ist. Der berühmte “Klammergriff” (Strg + Alt + Del) funktionierte auch nicht mehr. Daher half es nur noch, das System hart herunterzufahren (Ausschaltkopf).

Glücklicherweise gibt es mittlerweile eine Lösung: Acronis hat am 04.12.2009 einen Knowledgebase-Artikel für dieses Problem angelegt. Dort wird eine aktualisierte SnapAPI Version zum Download angeboten. Bei mir hat die Installation das Problem endgültig gelöst. Laut Knowledgebase Artikel tritt das Problem nur unter Windows 7 und manchmal unter Windows Vista auf. Angeblich ist nicht Acronis “schuld”, sondern eine Änderung im Volsnap Treiber von Windows.

Generell habe ich mit Acronis sehr gute Erfahrungen gemacht. Bei Problemen hat der freundliche Support (via Email) schnell und kompetent geholfen.

Thema: Sonstiges, Technik und Technologie | Kommentare (8) | Autor:

Urlaub im Bretagne Ferienhaus mit Hund?

Donnerstag, 3. Dezember 2009 2:28

Mit dem Hund in den Urlaub? Die Bretagne und ein Ferienhaus eignen sich ideal

Mit dem Hund in den Urlaub? Die Bretagne und ein Ferienhaus eignen sich ideal

Besonders für Urlauber mit Hund ist die Bretagne sehr gut geeignet. Durch die geringe Bevölkerungsdichte in der Bretagne (diese Region in Frankreich hat etwa eine Fläche von 27.000 Quadratkilometern und beheimatet ca. 3 Millionen Einwohner) sowie die vielen kilometerlangen Sandstrände und Felsküsten hat der “vierbeinige Freund des Menschen” viel Auslauf! Statt sich selbst und den Hund in ein kleines Hotelzimmer “einzupferchen” empfehle ich lieber ein geräumiges Ferienhaus, möglichst noch mit einem großzügigen Garten – damit das “Gassi” gehen auch gern mal auf dem eigenen Grund stattfinden darf. Doch auch bei den Ferienhäusern gibt es unterschiede. Da besonders in der Bretagne die meisten Feriendomizile noch im Familienbesitz sind, hängt es ganz von der Besitzer-Familie ab, ob der “Kleine” auch willkommen ist.

Daher sind sämtliche Ferienhäuser und Ferienwohnungen im Katalog von Location Bretagne gekennzeichnet, ob Hunde mitgebracht werden dürfen oder nicht. Bei den Unterkünften, in denen Hunde willkommen sind, haben wir eine zusätzliche Kennzeichnung eingeführt, die angibt, wieviele Hunde mitgebracht werden dürfen. Diese Zahl ist bei Buchung durchaus wörtlich zu nehmen: Denn mehr Hunde, als in der Katalogbeschreibung angegeben ist, dürfen nicht mitgenommen werden. Jedoch kann aus dieser “Hundezahl” noch etwas anderes gelesen werden: Je mehr Hunde “zugelassen” sind, desto tier- und hundefreundlicher sind in der Regel die Eigentümer – meist besitzen diese selbst Hunde.

Gerade auch die Häuser, in denen mehrere Tiere mitgebracht werden dürfen, eignen sich auch für größere Hunderassen. Gründe dafür sind bspw. das Mobiliar, die Beschaffenheit des Grundstücks sowie die Gastfreundschaft der Eigentümerfamilie. Mittlerweile haben jedoch eine Menge sehr schöner, gepflegter und wie immer qualitätsgeprüfter Ferienhäuser in unserem Katalog einen Platz gefunden. Aus diesem Grund haben wir uns entschieden, eine separate Themenseite für den Urlaub im Ferienhaus Bretagne mit Hund zusammenzustellen. Auf dieser Seite haben wir Ferienhäuser und Ferienwohnungen zusammengestellt, die aus unserer Sicht besonders gut geeignet sind. Positive Eigenschaften, die zu einer guten Eignung beitragen, sind bspw.:

  • Größe des Grundstücks/Garten,
  • Beschaffenheit der Umgebung,
  • Beschaffenheit des Grundstücks (Umfriedung, etc.),
  • Gastfreundschaft bzw. Tierliebe der Eigentümer,
  • Beschaffenheit des Mobilars.

Ich hoffe, dass die neue Themenseite in unserem Katalog allen Hundeliebhabern, die Urlaub in Frankreich machen wollen, einige interessante Vorschläge bereitet!

Thema: Bretagne | Kommentare (8) | Autor: