Technik

Status von dialogbasierten Menüelementen in C++ ändern

28. Juli 2011 · Programmierung · andreas · Kein Kommentar

Während sich der Status eines Menüelements bei fensterbasierten Menüs problemlos mittels “Enable”, “SetCheck”, “SetRadio” oder “SetText” auf ausgegraut, mit Häkchen versehen usw ändern lässt, zeigen die gleichen Befehle bei dialogbasierten Menüs keine Wirkung.

void CTestDlg::OnUpdateTestProc(CCmdUI* pCmdUI)
{
    pCmdUI->SetCheck(TRUE); // Bewirkt offensichtlich gar nichts.
}

Im KnowledgeBase-Artikel “Q242577” erklärt Microsoft nicht nur, daß es sich hierbei um “This behavior is by design.” handelt, sondern auch, wie man das gewünschte Verhalten doch erreichen kann.


Drag & Drop-Zielordner in Thunderbird hervorheben

27. Juli 2011 · Anwendungen · andreas · Kein Kommentar

Während Windows beim Einsortieren einer Datei in den Ordnerbaum den Zielordner farbig hervorhebt, bleibt das Umsortieren von Mails mittels Drag & Drop in Thunderbird ein Glücksspiel.

Hier kann durch eine Änderung der “userChrome.css” Abhilfe geschaffen werden. Nach Hinzufügen von

treechildren::-moz-tree-cell-text(dropOn) {
    font-weight: bold !important;
    text-decoration: underline !important;
}

wird der Zielordner ab sofort fett & unterstrichen markiert.

Wer darüber hinaus das Aero-Theme von Thunderbird anpassen will, sollte einen Blick auf den Artikel “Aero-Theme von Thunderbird 5 bändigen” werfen.


Zusätzlichen WordPress-Feed anhand benutzerdefinierter Felder erstellen

25. Juli 2011 · Anwendungen · andreas · 2 Kommentare

Obwohl WordPress vielfältige Möglichkeiten bietet, mittels RSS-Feeds auf die Inhalte eines Blogs zuzugreifen, ist in der Grundinstallation keine Möglichkeit vorgesehen, einen individuellen Feed anhand eines (oder mehrerer) benuzerdefinierter Felder zu erstellen.

Ein solcher Feed kann allerdings mit nur wenigen Zeilen Programmcode in der Datei “functions.php” des aktuell gewählten Themes ergänzt werden. Die Zeile

add_action('init', 'mycustomfeed_add_feed');

fügt der WordPress-Initialisierung die eigene Funktion “mycustomfeed_add_feed” hinzu, welche die Einrichtung der benötigten Funktionalität übernimmt.

function mycustomfeed_add_feed() {

	global $wp_rewrite;

	add_feed('mycustomfeed','mycustomfeed_feed');
	add_action('generate_rewrite_rules', 'mycustomfeed_rewrite_rules');
	$wp_rewrite->flush_rules();
}

Die Funktion besteht aus dem Hinzufügen des eigenen Feeds mittels der Funktion add_feed, sowie dem Hinzufügen einer Rewrite-Regel mit Hilfe der Funktion add_action, bevor durch den Aufruf von flush_rules die soeben geänderten Regeln neu eingelesen werden.

function mycustomfeed_rewrite_rules($wp_rewrite) {

	$my_rules = array(
		'feed/(.+)' => 'index.php?feed=' . $wp_rewrite->preg_index(1)
	);
	$wp_rewrite->rules = $my_rules + $wp_rewrite->rules;
}

Die hinzugefügte Regel bewirkt das Umschreiben aller aufgerufenen URLs nach dem Schema “/feed/irgendwas” in die Form “?feed=irgendwas”, so daß zum Zugriff auf den neuen Feed auch die erste Schreibweise verwendet werden kann, ohne daß Änderungen an der “.htaccess” vorgenommen werden müssen.

function mycustomfeed_feed() {

	query_posts('meta_key=mycustomfeed&meta_value=1');

	include('wp-includes/feed-rss2.php');
}

Als letztes ändert die eigene Feed-Funktion die Auswahl der auszuliefernden Daten mit Hilfe der Funktion query_posts, bevor durch Aufruf des originalen WordPress-Feedmechanismus die Ausgabe generiert wird.

Im obigen Beispiel werden nur die Beiträge ausgeliefert, die ein benutzerdefiniertes Feld mit Namen “mycustomfeed” und dem Wert “1” enthalten.


XML-RPC in Wordpress aktivieren

23. Juli 2011 · Anwendungen · andreas · Kein Kommentar

Beim Versuch, mittels offiziellen WordPress-Android-Client auf ein Blog zuzugreifen erscheint bei abgeschaltetem XML-RPC nur die Fehlermeldung

XMLRPC Fault: XML-RPC-Dienste sind auf diesem Blog deaktiviert.
Ein Administrator kann sie hier aktivieren: http://<blog-url>/wp-admin/options-writing.php [code 405]

Wie aus der Fehlermeldung indirekt zu entnehmen vertsteckt sich der Schalter “XML-RPC” im Untermenü “Schreiben” der “Einstellungen”.


HTML-Dokumente zerlegen mit HTML::TreeBuilder

8. Juli 2011 · Programmierung · andreas · 1 Kommentar

Geht es um das Extrahieren von Informationen aus einem HTML-Dokument, so bietet sich Perl als “the Swiss Army chainsaw of programming languages” geradezu an und bietet unzählige Wege ans Ziel. Nicht nur gibt es die mächtige RegEx-Engine, auch im CPAN gibt es eine Vielzahl von Modulen, die für den Einsatzzweck geeignet scheinen.

Ein Modul, das ein gutes Verhältnis zwischen Aufwand und erzieltem Ergebnis verspricht, ist HTML::TreeBuilder, dessen Einsatz am Beispiel eines Flickr-Fotoalbums demonstriert werden soll:

Nach der Initialisierung des HTML::TreeBuilder-Objekts genügt ein Aufruf von “parse” oder wahlweise “parse_file” auf eine z.B. mittels “LWP::Simple” heruntergeladene Datei, damit der HTML-Tree zur weiteren Verarbeitung zur Verfügung steht.

$tree = HTML::TreeBuilder->new;
$tree->parse($page);

Die einzelnen Thumbnails eines Albums sind bei flickr jeweils in ein “div”-Element eingebettet, dem die Klasse “thumb” zugewiesen ist.

<div class="thumb">
    <span>
        <a title="..." href="...">
            <img width="75" height="75" border="0" alt="..." src="...">
        </a>
    </span>
</div>

Um eine Liste aller Thumbnail-Elemente zu erhalten, genügt der Aufruf von “find_by_attribute” mit passenden Parametern

@urllist = $tree->find_by_attribute('class', 'thumb');

der den gesamten Dokument-Tree durchläuft und eine Liste aller Elemente mit Klasse “thumb” zurückliefert, die dann einzeln abgearbeitet werden können.

Die Links zu den jeweiligen Bilderseiten können dann über den Aufruf zweier weiterer Funktionen etxrahiert werden:

foreach $thumb (@urllist) {

    $link = $thumb->find_by_tag_name('a');
    print $link->attr('href');
}

Der Aufruf von “find_by_tag_name” lokalisiert das Link-Element innerhalb des “div”-Elements, mittels “attr” kann auf dessen “href”-Attribut zugegriffen werden.

Das Download vollständige Beispielskript , das mittels

flickldr.pl http://www.flickr.com/photos/<werauchimmer>/sets/<wasauchimmer>/

aufgerufen wird, ist lediglich als Demo zur Verwendung von HTML::Template zu sehen und alles andere als ein zuverlässiger Downloader für Flickr-Alben. Neben fehlendem Fehlerhandling gibt es auch keinerlei Option(en) zur Wahl der Fotogröße - es wird einfach davon ausgegangen, daß alles wie gewünscht verfügbar ist.

Seit dem Relaunch von Flickr am 20. Mai 2013 können mit dem Skript keine Alben mehr heruntergeladen werden.