Best Practices und Softwareentwicklung

 Software  Kommentare deaktiviert für Best Practices und Softwareentwicklung
Mrz 182013
 

Neulich las ich einen Artikel, in dem ausgeführt wurde, dass Best Practices oft das Festhalten an veralteten Standards und Ideen bedeutet.

Vielleicht bin ich ja so altmodisch, aber manche Standards, die sich in der Softwareentwicklung durchgesetzt haben, finde ich doch ganz sinnvoll.

Anbei einige Not-To-Dos aus meiner beruflichen Praxis.

  • Bei der Installation „das System ist Unicode-fähig“ zu melden, ohne dies auch nur einmal getestet zu haben.
  • Bei Serverupdates direkt die Änderungen auf den Produktivserver einzuspielen, statt ein sauberes Staging über den Testserver mit Tests und Freigabe durchzuführen.
  • Bei Softwareupdates einen angeblichen Bugfix zu liefern, der sich als umfangreiches Update mit veränderter Oberfläche  herausstellt — und dann noch ohne aktualisierte Dokumentation, womit die neuen Optionen relativ nutzlos werden.

 

Share

Word-Änderungsmarkierungen mit Tastaturbefehlen bearbeiten

 Schreiben, Software  Kommentare deaktiviert für Word-Änderungsmarkierungen mit Tastaturbefehlen bearbeiten
Jan 212012
 

Die Änderungsverfolgung in Word ist ein schönes und gern genutztes Feature. Leider muss man sich normalerweise mühsam mit der Maus von Änderung zu Änderung klicken, um dann ebenfalls per Maus diese anzunehmen oder abzulehnen.

Diesen Vorgang können Sie enorm beschleunigen, wenn Sie die wichtigsten Funktionen der Änderungsüberarbeitung auf Tastaturbefehle legen. Dazu gehen Sie folgendermaßen vor (Beispiel Word 2003):

  1. Machen Sie einen Rechtsklick auf die Buttonleiste in Word und wählen Sie unten im Menü die Option Anpassen.
  2. Auf dem Fenster „Anpassen“ klicken Sie auf die Schaltfläche Tastatur. Das Fenster „Tastatur anpassen“ öffnet sich.
  3. Hier gehen Sie zur gewünschten Funktion, in unserem Fall unter Extras > ExtrasÜberarbeitungsMarkierungNächste.
  4. Klicken Sie ins Feld Neue Tastenkombination und drücken Sie die gewünschten Tasten, hier beispielsweise ALT+W. Die gedrückten Tasten werden angezeigt. In der Zeile „Derzeit zugewiesen an“ können Sie prüfen, ob eein Konflikt vorliegt – in diesem Fall ist die Tastaturkombination bisher nicht zugewiesen.
    Tastatur anpassen
  5. Um diese Kombination zu speichern, klicken Sie auf Zuordnen. Die Kombination erscheint dann im Feld Aktuelle Tasten.
  6. Sie können jetzt weiteren Funktionen  Tastaturkombinationen zuordnen. Klicken Sie am Schluss auf Schließen.

Für die Änderungsbearbeitung verwende ich folgende Kombinationen, die meiner Ansicht nach am günstigsten dafür auf der Tastatur angeordnet sind:

Kürzel Funktion Name in Word-Auswahlliste
ALT+W Zur nächsten Änderung gehen ExtrasÜberarbeitungsMarkierungNächste
ALT+E Änderung annehmen ExtrasÜberarbeitungsMarkierungenAnnehmen
ALT+A Änderung ablehnen ExtrasÜberarbeitungsMarkierungenAblehnen
Share
 

(JQuery ist bei Drupal 6 bereits im Core und muss für die folgenden Arbeiten angeschaltet sein.)

Die Darstellung von Comments in Drupal kann von Haus aus „flat“ oder „collapsed“ sein. Die Einstellung hierfür (und die Möglichkeit, dies für die User freizugeben), wird je Content Type getroffen. Besonders für ein Forum sind beide Optionen beliebt.

Bei „collapsed“ wird dabei ursprünglich nur der Link zum Comment eingefügt – der Comment-Text selbst ist nicht verfügbar. Dies ist in der Core-Datei „comment-folded.tpl.php“ festgelegt. Bei einem Umbau zu JQuery muss dafür Sorge getragen werden, dass die Comments verfügbar sind.

Am einfachsten wird dafür die Datei „comment.tpl.php“ (für flat comments) in die Datei „comment-folded.tpl.php“ umkopiert und als Grundlage für die JQuery-Darstellung genutzt. Das Ziel ist, die einzelnen Comments über slideToggle zwischen collapsed und nicht-collapsed zu schalten.

Änderungen in comment-folded.tpl.php

Am Ende des PHP-Bereichs muss ein eindeutiger Key geliefert werden, damit jeder der Comments einzeln angesprochen werden kann (sonst werden alle auf einmal aufgeklappt). Dieser Key ist idealerweise der $title-Link:
$key = md5($title)

Dann wird der Link entsprechend erweitert, nämlich um einen onclick-Event mit dem jeweiligen Key und einem slideToggle.
<h3 onclick="$('#<?=$key?>').slideToggle()"><?php print $title ?></h3>

Zuletzt wird die div-Class ebenfalls mit dem eindeutigen Key versehen und der Display zunächst auf „none“ gesetzt. print $content wird zu print $comment->comment korrigiert.
<div class="content" id="<?=$key?>" style="display:none">
<?php print $comment->comment ?>

Die Comments werden jetzt als Links ausgegeben, bei deren Klick der Comment angezeigt wird. Die Formatierungen sind allerdings noch nicht korrekt. Dies resultiert aus dem Core-Module „comment.module“, das nicht dafür vorgesehen war, im Fall von collapsed Comments diese auch anzuzeigen. Es wird daher nicht das entsprechenden Markup angewendet.

Änderungen in comment.module

Um dies zu beheben, wird die Zeile 1584
if ($visible) { verschoben, und zwar nach unterhalb der check_markup-Anweisung:
$comment->comment = check_markup($comment->comment, $comment->format, FALSE);
if ($visible) {

Über diese Änderung (jaja, ein Core-Hack :) werden alle Comments nun korrekt formatiert angezeigt.

Tipp: Der ausführliche Inhalt des Comment-Objects $comment kann über die folgende Zeile erhalten werden.
<div style="display:none; border:1px solid black;background-color:#d0d0d0"><pre><? print_r($comment); ?></pre></div>

Share
 

Wenn das Exportfile einer MySQL-Datenbank ein wenig größer wird und die Timeouts beim Import zunehmen, kann man den Import automatisieren.

a) Anlegen einer Datei „import cmd“ mit z.B. diesen Kommandos (in einer Zeile):
c:\xampp\mysql\bin\mysql.exe ––no-defaults ––user=username ––password=password ––database=datenbankname

im selben Verzeichnis wie mysql.exe.

b) Doppelklick auf die import.cmd-Datei. Dies öffnet eine Konsole in Windows.
c) Dort eingeben:
\. filename.sql und RETURN.

Der Import wird dann zeilenweise ausgeführt und kann in der Konsole verfolgt werden.

Share

Drupal-Suche – Problem der nicht-indizierten Nodes

 Software  Kommentare deaktiviert für Drupal-Suche – Problem der nicht-indizierten Nodes
Jan 272010
 

Als mir vor einer Weile in meinem Projekt auffiel, dass einige Nodes nicht gefunden wurden, war ich zunächst auf dem Holzweg und dachte, dass es etwas mit den vielen CCK-Feldern dieser Nodes zu tun hätte.

Aber weit gefehlt – es stellte sich nach mühsamer Suche heraus, dass das Problem durch den Import dieser Nodes hervorgerufen wurde. Offensichtlich erkennt Drupal nur dann Nodes als zu indizierend an, wenn „node_save“ durchlaufen wird, was bei einem Import mit dem Node Import Module nicht geschieht. (Für lange Winterabende lohnt sich auch die Lektüre von Roberts Artikel Drupal Search: How indexing works.)

Eine Quick-and-Dirty-Lösung dafür ist, die betreffenden Nodes einmal kollektiv z.B. auf „published“ zu setzen und dann manuell den Cron-Job für den Suchindex anzustoßen. In meinem Projekt kein Problem, allerdings nicht empfehlenswert, wenn z.B. viele Subscriber bei diesen Nodes mitlesen, da ein „published“ zu einer Mailflut führen könnte ;)

Besser wäre es, entweder das Node Import Module umzuschreiben oder das im Hintergrund arbeitende Force Search Index Module (im Netz aufgestöbert) auf D6 umzuschreiben.

P.S. Tolle Sache mit einer Edel-Suche über Tomcat/Solr, aber auch diese setzt immer auf dem Drupal Search Index auf. Wenn also dort Probleme auftreten, hilft das nicht weiter.

Share
 

Eine typische Anforderung bei einer Liste von z.B. ungelesenen Artikeln ist die Möglichkeit, diese per Checkbox und Knopfdruck auf gelesen zu setzen.

In Drupal kann für solche Massenaktionen über Views das Views Bulk Operations Module (VBO) genutzt werden. Der Haken hierbei war leider, dass es für „set to read“ keine Action gab. Diese musste daher selbst programmiert werden. Das geschah ausgehend vom Node-Module im Core und mit einem Blick auf Advanced Forum, in dem es eine analoge Funktion für ganze Foren gibt.

„Set to read“ bedeutet effektiv, dass der Timestamp-Eintrag in der Tabelle „history“ für diese nid und uid geändert wird. Dies würde mit einem Replace gehen, aber da beide andere Codestellen mit Delete/Insert arbeiten, habe ich es analog implementiert.

Der gesamte Integrationspfad ins Drupal-Projekt ist:

  1. Ein set-to-read Module anlegen und in der Modules-Liste unter admin/build/modules aktivieren.
  2. Unter admin/settings/actions/manage prüfen, ob das Module aktiv und die Node-Action „Set to read“ verfügbar ist.
  3. Ein Seite mit einem „Bulk Operations“ View bauen, und als Action „Set to read“ auswählen. Bei sofortigem Abarbeiten sieht der User wenig Effekt, bei der Batch API erscheint der blaue Fortschritsbalken (meiner Meinung nach weniger schön). Auf eine Sicherheitsabfrage und eine Rückmeldung habe ich in meinem Projekt verzichtet, da es sich um keinen kritischen Schritt wie z.B. Löschen handelt.
  4. Dann den View speichern und im Projekt prüfen.

Code für set_to_read.module-Datei (Achtung, beim Insert gibt es zwei unschöne Zeilenumbrüche):

<?php
/**
* Implementation of hook_action_info().
*/
function set_to_read_action_info() {
return array('set_to_read_noderead_action' => array(
'description' => t('Set to read'),
'type' => 'node',
'configurable' => FALSE,
'hooks' => array(
'nodeapi' => array('presave'),
'comment' => array('insert', 'update'), )
)
);
}
/**
* Implementation of the actual function set_to_read_noderead_action()
*/
function set_to_read_noderead_action(&$node) {
global $user;
if ($user->uid) {
$sql = 'delete from {history} ' .
"where nid='" . $node->nid . "' ".
"and uid='" . $user->uid . "'";
db_query($sql);
$sql = 'insert into {history} (nid,uid,timestamp) ' .
"values ('" . $node->nid . "', '" . $user->uid . "', unix_timestamp()) ";
db_query($sql);
}
}
?>

Share

MeVisLab 2.0 rc

 Software  Kommentare deaktiviert für MeVisLab 2.0 rc
Mai 122009
 

Ganz uneigennützig ein wenig Werbung für meinen Arbeitgeber — seit heute ist offiziell der Releasekandidat von MeVisLab 2.0 verfügbar, einer Software für medizinische Visualisierung.

MeVisLab bietet ein modulares Framework für Bildbearbeitung, Bildanalyse und Visualisierung. Wunderschöne Ergebnisse kann man auf der Screenshots-Seite sehen. Die Software kann unregistiert mit eingeschränkter Funktionalität getestet werden; wer also schon immer sein eigenes CT in 3D betrachten wollte, kann sich daran versuchen. Normalerweise wird MeVisLab in der High-End-Forschung und für Rapid Prototyping von medizinischen Anwendungen verwendet, insbesondere bei Fraunhofer MeVis.

Mein Anteil an diesem Release steckt primär in der Dokumentation und der Webseitenüberarbeitung, mit dem üblichen Anteil von Qualitätssicherung (Menüs und Abläufe testen, Schreibweisen vereinheitlichen, dumme Fragen stellen :). Dank der tollen Zusammenarbeit mit den Core-Entwicklern ein echtes Vergnügen.

Jetzt bleibt mir nur die Frage: gibt es eigentlich eine Release-Party…?

Share

Bericht zum Drupalmediacamp.ch

 Software, Web  Kommentare deaktiviert für Bericht zum Drupalmediacamp.ch
Mai 112009
 

Am Freitag und Samstag war ich beim Drupalmediacamp in Aarau und muss rückblickend sagen, dass es eine extrem gute Entscheidung war, dorthin zu fahren. Zum einen konnte ich eine Menge Kontakte vom Kölner Drupalcamp vertiefen und zum anderen viele neue Informationen einholen.

Die letzten Monate an Beschäftigung mit VMs, XAMPP, Drupal und der Dokumentation eines C++-basierten SDK haben sich außerdem dahingehend bezahlt gemacht, dass ich jetzt auch recht entwicklungsnahe Sessions nicht nur verstanden habe, sondern auch hoffe, diese für unser Projekt umsetzen zu können.

Die Sessions (die Links führen zu weiteren Infos und ggf. vorhandenen Materialien&Filmen):

Alleine drei meiner Favoriten wurden von Jonathan Minder aka jon gehalten, der sehr techniknah arbeitet und viel Background-Informationen auch zur Frage des Stagings mit svn/Testserver/Lifeserver lieferte. Alle Vorträge sind in seinem Blog zu finden.

Kantonschule Enge: Wie die grösste Kantonschule Zürichs Drupal erfolgreich einsetzt: Hier sprach jon ausführlich über die Vorteile von Drupal vs. Typo3, was mich nochmals in unserer Wahl bestärkt hat. Außerdem wurde dieses Projekt in einem kurzen Zeitrahmen mit recht wenig Programmieraufwand erstellt.

Apache Solr: Hier beschrieb jon die Geschichte, Funktionen und Vorteile von Aache Solr und die Verbindung mit Drupal. Da wir für unser Intranet ja nicht die Acquia-Suche buchen können, ist das lokale Installieren von Solr die richtige Wahl für unsere Suche, und die Facets-Funktion ist spitze!

Workshop: Wie richte ich eine perfekte Drupal – Entwicklungsumgebung mit PHP Debugger ein: Hier stellte jon die Einbindung der freien IDE Aptana mit Drupal vor; ist ggf. für uns aktuell der Overkill, aber es beruhigt zu wissen, wie es gehen würde.

Continue reading »

Share

Drupal-Patches anwenden

 Software  Kommentare deaktiviert für Drupal-Patches anwenden
Apr 132009
 

Bisher habe ich mich in Diskussionen auf drupal.org eher mit Schaudern von den patch files ferngehalten, z.B.

Heute allerdings wollte ich ein Panel-Problem beheben und versuchte mein Glück. Hier der schnellste Weg zum Patch:

  1. Patch bei Drupal herunterladen und in ein temp-Verzeichnis speichern.
  2. Die zu patchende Datei ebenfalls ins temp-Verzeichnis speichern.
  3. Die Anwendung „Patch“ für Windows von Sourceforge herunterladen: Patch
  4. Eine Windows-Console aufmachen, in den Pfad von Patch wechseln und das Programm starten:
    patch [original] [patch]
  5. Falls eine Fehlermeldung wie „Assertion failed, hunk, file patch.c, line 343“ kommt, Patch mit binary-Option starten:
    patch --binary [original] [patch]

Hintergrund des Fehlers ist, dass unter Windows die Patch-Datei eine Textdatei sein muss, d.h. CR-LF als Zeilenende. Eine Datei mit LF führt zu failed.

Fertig!

Share
 

Seit wenigen Tagen läuft das Intranet-Projekt. Die ausführliche Spezifikation mag ich hier nicht einstellen, aber Tricks und Kniffe, denen ich auf dem Weg begegne, möchte ich für mich und andere Interessierte niederschreiben:

Tipp A:
Bei Timeouts beim Bearbeiten der Module-Liste in der php.ini-Datei die Werte für max_execution_time, max_input_time und memory_limit hochsetzen. Dabei allerdings darauf achten, welche php.ini tatsächlich eingelesen wird! Diese Information kann man z.B. bei XAMPP über die Startseite > php_info() aufrufen. Danach den Apache neu starten und prüfen, ob die Einstellungen übernommen wurden.

Tipp B:
Wenn man unterschiedliche User in verschiedenen Browsern testet, auch unbedingt darauf achten, dass man nicht an ganz anderen Bugs hängen bleibt. So lief der FCKEditor bei mir zunächst nicht in Opera, und ich habe das auf einen falsch konfigurierten User geschoben, obwohl es ein Problem von FCK unter Opera ist, das mir eigentlich auch schon mit Typo3 begegnet war.
Ich habe dann das Problem gelöst, indem ich wie hier angegeben in der Datei fckeditor.js die Operaversion auf „>=9“ gesetzt und meinen veralteten Opera upgegraded habe.

Last not least wurde ich auf dem IRC-Channel #drupal.de (Server irc.freenode.net) dann noch shanghait von Thomas breitgeschlagen, beim Korrigieren von deutschen Übersetzungen zu helfen. Eine Liste der entsprechenden Modulen gibt es unter dem Titel Übersetzungschannel. Die einzige Voraussetzung (neben gutem E/D) ist das freie Programm poedit, das ich hier im Blog im WordPress-Kontext schonmal beschrieben habe. Eine unvollständige Terminologie für Drupal gibt es im Wörterbuch-Wiki.

Demnächst Runde 2…

Share
© 2012 Doku-Hotline Suffusion theme by Sayontan Sinha