Kleines Update zum Widget

Mein erstes selbstgebasteltes Widget gibt’s jetzt in der Version 0.1.1.

Es unterstützt jetzt:

  • Tiefenbeschränkung
  • Nutzerdefinierte Angabe einer ID für die generierte Liste
  • komplettes Auslassen all des Klimselbimsels (Widget Wrapper li und h2) wenn der Title leer ist

Viel Spaß damit. Download.

Wordpress: Seiten und Kategorien in einer Liste darstellen

Es gibt so ein, zwei Dinge in Wordpress, die vermisse ich etwas und dazu gehört eindeutig die Möglichkeit, die Trennung von Seiten und Kategorien aufzuheben und sie gemeinsam darzustellen. Es ist mir völlig Latte ob die Sache im Backend bestehen bleibt (ist ja auch nicht ganz unpraktisch), allerdings ist es dem User einer Seite auch völlig Latte ob der nächste Link auf eine Seite oder eine Kategorie zeigt. Fakt ist: Beides ist Content.

Hier auf dieser Seite stört mich das nicht so sehr und ich gehe auch davon aus, dass mein Publikum die Trennung von Seiten und Kategorien gewöhnt ist. Für andere Seiten an denen ich arbeite ist das allerdings problematisch. Für KOP-Berlin habe ich schon mal in 5 Minuten etwas runtergerackert, allerdings ist mir das damals bei mehr als 2 Ebenen um die Ohren geflogen (mehr hatte ich da auch nicht gebraucht) und von angenehmer Einbindung kann auch keine Rede sein. Die Funktionsaufrufe mussten direkt ins Template gehackt werden, die Datei mit den Funktionen war Bestandteil des Themes. Alles irgendwie dirty.

Auf Anraten des Herrn Nachbarn habe ich diese kleine Softwarelösung jetzt einmal komplett überarbeitet und zu einem Widget umgebaut.

Das Widget unterstützt bisher folgendes:

Einschränkungen:

  • Keine Tiefe definierbar (kommt – und lässt sich über Excludes „notfallbehelfen“ *g*)
  • Keine gesonderten Formatierungen
  • Sortierung nur auf erster Ebene

Einschränkung 1 dürfte relativ schnell erledigt sein und wird auch nachgereicht. Einschränkung 2 werde ich nach und nach (von Nachfrage abhängig) fixen. Einschränkung 3 – keine Lust, brauch ich nicht, keine Ahnung, ob ich da fleißig bin.

Kleines Anwendungsbeispiel:

Konfiguration PageCat List WidgetDie Konfiguration ist noch nicht simpel, aber sie ist machbar mit ein wenig Denke. Wer will kann gerne eine entsprechende Oberfläche bauen, ich habe dafür keine Zeit ;).Trotzdem eine kurze Erläuterung:
In Order (bzw. Reihenfolge) werden die IDs der Kategorien und Seiten in der Reihenfolge angegeben, wie sie letztendlich auf der Seite erscheinen sollen. An jede Page ID wird zusätzlich ein kleines „p“ rangehängt. Jedes Element, dass nicht in dieser Liste erscheint, wird später einfach hinten dran gehängt.

Hier im Beispiel werden erst die Kategorien 5 und 14 angezeigt, danach kommen die Seiten 8 und 53, dann die Kategorie 15, die Seite 55 und schlussendlich die Kategorie 17. Also:

5,14,8p,53p,15,55p,17

In den Category Args kann man die Argumente übergeben, die man auch der Wordpress Funktion get_categories übergeben könnte.

Im Beispiel werden die Kategorien 1 und 3 nicht mit anzeigt und außerdem werden auch leere Kategorien gelistet.

exclude=1,3&hide_empty=0&title_li=

Für die Page Args gilt genau das gleiche.

Das Beispiel schließt die Seiten 74 und 3 aus der Darstellung aus.

exclude=74,3&title_li=

Wer das Plugin installieren will, schiebt es in den Plugin Ordner, aktiviert es in Wordpress, geht in die Widgetansicht und zieht das Widget in eine/die Sidebar.

Das Widget selbst gibts natürlich für lau, der Code ist unter der GPLv3 lizenziert. Ich lade gerne jeden ein mir Fehler um die Ohren zu hauen oder Verbesserungen vorzunehmen. Ich setze sehr auf die Eitelkeit von Programmierern und ihre sture Begeisterung fürs „ich-kanns-besser“ ;o).

Sobald ich Zeit habe, landet das Plugin dann auch im offiziellen WP Plugin Verzeichnis und wird dann wahrscheinlich auch so allerlei Updatekram und son Käse bekommen. (Noch) Kein Plan wie das geht.

Also dann. Viel Spaß damit und wer Probleme hat, darf sich melden ;).

Hier der Download: Klick!

Update gibt’s hier.

qTranslate mit vielen Sprachen

qTranslate, ein Wordpress-Plugin mit dem mensch seine Seite in mehreren Sprachen anbieten kann, ist ein ganz hervorragende Lösung. Das muss man wirklich mal sagen. Ich bastle im Moment an einer anderen Seite herum und habe dort 8 Sprachen zu verwalten. Einziges Manko:

Bei so vielen Sprachen wird der Platz für die Tabs in der Artikel- und Seitenerstellung insbesondere auf kleinen Bildschirmen (das kleinste was ich hier hab ist 15″ 4:3) etwas knapp. Dadurch Überlappen sich Einträge, Menüpunkte verschwinden im Textfluss, etc. pp.

Abhilfe schafft hier die Firefox-Erweiterung Stylish. Für das eigene Wordpress Blog (auf die zweite Zeile achten!) legt man einfach folgende Einträge fest:


@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain(“eigenedomain.topleveldomain“) {
div.postarea div.qtrans_title_wrap {
margin-right: 300px !important;
}
.has-right-sidebar #post-body-content {
margin-right: 0px !important;
}
#media-buttons {
float: right !important;
padding: 6px 10px 0 0 !important;
}
}

Wer weniger als 8 Sprachen verwendet, wird jetzt sehen, dass das Eingabefeld für den Beitrag bzw. die Seite mit in der Sidebar hängt. Das ist natürlich ungünstig. Abhilfe schafft folgender Code hinter #media-buttons { … }:


div#postdivrich.postarea {
margin-top: 50px !important;
}

Diese Angabe ist ausreichend bei 7 Sprachen. Für jede weitere fehlende Sprache einfach 90 zu den 50px addieren. Irgendwann macht das natürlich keinen Sinn mehr, weil man eh nie genug Sprachtabs hätte, um den Editor zu sprengen ;).

Viel Spaß damit….wer’s braucht ;).

Es wird unübersichtlich

/me fängt gerade an C zu lernen, eine Sprache, die ich wahrscheinlich vor allen anderen (Java, VB6, VB.net, C#, PHP, Pascal) hätte lernen sollen.

Aber: Besser später als nie. Zur Seite steht mir dabei das Standardwerk in ANSI-C Programmierung von Kernighan und Ritchie, leider in der deutschen Übersetzung (leider deshalb, weil man sich hier entschlossen hat auch „eingebürgerte“ Namen zu übersetzen, wie z.B. Array mit Vektor oder Backslash mit Gegenschrägstrich – das mag sogar perfekt übersetzt sein, aber ist eben doch etwas „eigen“).

Das Buch macht mir auch einen guten Eindruck. Trotzdem muss ich sagen, dass ich einige Dinge etwas zweifelhaft finde. Noch während der Besprechung von Arrays weißt man z.B. ständig auf Pointer (im Buch „Zeiger“) hin. Die werden aber erst 45 Seiten später besprochen. Das Vorgreifen erschwert hier wirklich die Übersicht, wie ich finde. Als störend empfinde ich aber tatsächlich etwas anderes.

Der grobe Inhalt (zumindest bis zur Seite 70 – da bin ich gerade) beschäftigt sich mit dem Nachbau von grundlegenden Funktionen zur Verarbeitung von Strings, die so auch schon im ANSI-C Standard vorhanden sind, nur werden sie hier eben genutzt, um die Sprache zu vermitteln. Da diese Funktionen zur Grundfunktionalität einer jeden Programmiersprache gehören (behaupte ich einfach mal ganz dreist ;D), ist es _natürlich_ sinnvoll, dass diese möglichst kompakt und effizient sind. Ich kann mir zumindest im Bereich der Programmiersprachen nichts schlimmeres vorstellen als lahmarschige Basisfunktionen. Genau aus diesem Grund eignen sie sich aber nur bedingt zur Vermittlung einer Sprache insbesondere in der Form, wie sie in „Programmieren in C“ aufgestellt werden. Ein Beispiel:


int strindex(char s[], char t[])
{
int i, j, k;
for (i = 0; s[i] != ‚\0′; i++) {
for(j = i, k = 0; t[k] != ‚\0′ && s[j] == t[k]; j++, k++)
;
if(k > 0 && t[k] == ‚\0′)
return i;
}
return -1;
}

Diese Funktion soll das erste Vorkommen des Char-Arrays (String gibt’s in C nicht) t in s liefern. Tut sie ganz bestimmt auch. Aber wir fassen mal fix die verwendeten Variablen zusammen: s, t, i, j, k.
Ganz ehrlich: Da sieht doch kein Schwein durch. Es liegt nicht daran, dass ich nicht verstehe, was da steht, denn das tue ich. Aber mal ganz ehrlich: Jedes andere Buch hat mir erstmal vermittelt ordentliche Namen für Variablen zu vergeben. Einige haben sogar noch verlangt eine Typabkürzung voranzustellen. s, t, i, j, k sind da jetzt wirklich nicht die Erleuchtung und ich finde den Stil hier tatsächlich schlecht. i, j, k kann ich sogar noch verschmerzen, weil es Zählvariablen sind und ein ordentlicher Name hier vielleicht sogar etwas schwierig zu finden ist. Warum s und t aber s und t heißen müssen ist mir ein Rätsel.

Lustig finde ich auch, und das wird im Beispiel von oben gar nicht mehr deutlich, weil ich die „Fehler“ schon selbst behoben habe beim Schreiben, dass die Herren sich nicht an Ihre eigenen Ratschläge halten. Denn eine Regel die sinngemäß „Der Übersicht halber platzieren wir vor und nach Vergleichs- und Zuweisungsoperatoren ein Leerzeichen.“ lautet wird hier mal angewendet und mal wieder nicht. Gleiches gilt für die Forderung eines einheitlichen „Klammersetzungsstils“. All diese Feinheiten, machen die Beispiele zum Teil unleserlich bis unlesbar und verleiten einen dazu, dass Buch auch mal halbwegs gefrustet zu schließen.

Fazit bis Seite 70: Von den „Erfindern“ der Sprache C hätte ich etwas mehr erwartet.

Update der Binäruhr

Meine Binäruhr für Windows Mobile (B1n4ry) hat eine kleines Update spendiert bekommen. Es sind keine neuen Features hinzugekommen, aber ich habe ein, zwei Fehler behoben und Änderungen vorgenommen:

Bugfix: Anwendung lässt sich jetzt im Landscape Modus starten
Bugfix: Close-Button wird jetzt nach Wechsel des Orientierungsmodus ordentlich dargestellt
Änderung: Digitale Uhr wird nicht mehr angezeigt
Änderung: Close-Button Grafik wurde ausgewechselt. Die neue ist nicht mehr so „aufregend“.

Der Download wurde aktualisiert und findet sich hier:

Download

PS: Die Größe der cab-Datei ist um etwa 3 KB gesunken.

Binary Clock für Windows Mobile

Ich habe als Auftragsarbeit für jemanden von nebenan eine Binäruhr geschrieben, die jetzt fertig ist.

Das Programm hat noch 2 Bugs, die ich gestern in meiner Nacht & Nebel Aktion nicht mehr ausmerzen wollte. Beide sind aber nicht wirklich ein Problem. Der erste tritt beim Beenden der Anwendung auf. Das Startmenü bleibt dann z.T. mit den Grafiken der Anwendung überlagert, obwohl diese bereits geschlossen wurde. Das Problem lässt sich beheben indem man einmal vom Landscape in den Portrait (bzw. andersrum) wechselt und wieder zurück (oder ganz böse: einfach Windows Mobile neu starten – aber das ist nur nötig, wenn man aus welchen Gründen auch immer nicht den Orientierungsmodus wechseln will/kann)

Das zweite Problem tritt auf, wenn man während die App läuft den Orientierungsmodus ändert. Dort hilft einmal auf den Ausknopf drücken und nochmal, um das Bild wiederherzustellen.

Installer gibt’s nicht. Wer ne Binäruhr versteht, wird schlau genug sein, ne CAB zu installieren *gg*.

Download

Büdde.

PS: Benötigt wird das .Net Compact Framework 2.0.

Netbeans Visual API Patch. Wer hätte das gedacht?

Ich jedenfalls nicht. Tatsächlich ist das Problem aus meinem letzen Beitrag mit nur 3 kleinen Eingriffen behoben. Die Aufrufe des Algorithmus auskommerntiert und fix ein

return ROUTER_DIRECT;

hinterher. Funktioniert wunderbar, auch wenns natürlich nicht so ein Augenschmaus ist. Aber ich denke es wird allen Betroffenen Gold wert sein, in Zukunft 99% weniger Prozessorauslastung beim Bearbeiten der entsprechenden Programme zu haben.

Frohes schaffen ;)

Download
Der Build setzt auf einen Snapshot von gestern auf. Getestet mit Netbeans 6.1 Beta.
PS: Wo die Datei hinmuss eröffnet eine Suche nach dem Dateinamen im Netbeans Ordner :).

The only IDE I ähh

Gängige IDEs werben immer mit großen Worten. Produktivität und Flexibilität: das sind Worte bei denen das Herz eines Entwicklers doch wirklich höher schlägt, nicht wahr nicht wahr? Netbeans setzt sogar noch einen drauf und behauptet es sei die einzige IDE, die ich bräuchte. Tatzbarsache? Derzeit geht mir Netbeans primär verdammt auf den Keks mit einigen designtechnischen Schnörkeln, die so gar nichts mit Produktivität zu tun haben. Aber erstmal von Anfang an:

Für mein Projekt LophanMobile, ein kleines Mathematikprogramm für Mobiltelefone und PDAs mit Java Unterstützung, nutze ich Netbeans 6, weil es einen verdammt coolen GUI Editor mitbringt und von Haus aus z.b. Lokalisierungsunterstützung mitbringt. Das nimmt mir einiges an Arbeit ab (ich gebs ja zu).
Betrachtet man Netbeans von dieser Seite, ist es faktisch makellos. Probleme gibt’s erst, wenn so ein Projekt etwas größer wird. Wie gesagt gibt’s einen GUI Editor. Dieser Editor bringt auch einen sogenannten Flow-Designer mit, der alle Elemente über eine kleine Verbindungslinie zusammenbringt die etwas miteinander zu tun haben. Wenn ich also ein Hauptmenü habe und über einen Eintrag ins nächste Menü will, zieh ich einfach ne Linie vom Menüeintrag rüber zum anderen Menü. Fertig. Klingt einfach: Ist es auch. Diese Linien haben aber einen „Haken“. Weils schön aussehen soll sind diese Linien nämlich nicht einfach streng durchgezogen, sondern haben jeweils 2 rechte Winkel. Die Netbeans Freaks von nebenan nennen den „orthogonal router“. Sollte mich eigentlich nicht interessieren. Tut es aber. Denn bei größeren Anwendungen schickt der entsprechende Algorithmus, der die Ecken sucht, Netbeans in den Winterschlaf. Warum? Weil er scheiße ist. Anders kann ichs nich nennen, wenn ein Stückchen Programmcode, der an ein paar Linien ein paar Ecken sucht, einen Dual Core Rechner in die Knie zwingt und Netbeans selbst für bis zu 20 Sekunden einfriert. „slow“ ist dafür gar kein Ausdruck mehr und unter „Performance“ würde ich wahrscheinlich sowas auch nicht mehr kategorisieren. Die überwältigende Erklärung der Entwickler:

Unfortunately we do not have a good incremental orthogonal router
algorithm.

Was echt? Hätte ich jetzt *so* gar nicht mitbekommen.
Lösungvorschläge?

1) During animation of graph-layout, temporarily disable routing of connections.
2) Introduce a new/faster orthogonal routing algorithm.

Ja! Besonders 2) haut mich völlig aus den Socken! Danke für den Input! ……narf

So wie ich das sehe wird dieser Bug auch in Netbeans 6.1 nicht korrigiert sein, obwohl er schon seit Oktober 2007 bekannt ist.

Derzeit bastel ich selbst an einem Patch für Netbeans, der die Anfrage nach „orthogonal routers“ faktisch ignoriert und nur „direct router“ zurückgibt. Wer Interesse hat kann hier bei Zeiten nochmal vorbeischaun.

muhahaha

(01:12:09) Matschfleck: zähl mal bitte die F in dem text hier

FINISHED FILES ARE THE RE-

SULT OF YEARS OF SCIENTIF-

IC STUDY COMBINED WITH THE

EXPERIENCE OF YEARS

 

Private Sub Command1_Click()Dim x As Integer, i As IntegerFor i = 1 To Len(Text1.Text)If Right(Left(Text1.Text, i), 1) = "F" Thenx = x + 1End IfNext iMsgBox xEnd Sub

Mod? Was das?

Es gibt ja so manchem Befehl den man ab und zu vergisst (vielleicht auch berechtigterweise), die Modulardivision aka Restwertdivision sollte in den Programmiersprachen aber definitiv nicht dazu gehören. Ansonsten bricht man sich mal schnell n Bein mit sowas:

Format((Time - (((Time \ 3600) * 3600) + (((Time - ((Time \ 3600) * 3600)) \ 60) * 60))), "00")

Nur so zur Erklärung: Diese Zeile sollte aus einer Zahl (Zeit in Sekunden) die Sekunde rausrechnen und das unter Abzug von Stunden und Minuten. Bei Einer Zahl von 8652 wäre als 12 rausgekommen (8652 – 2 * 3600 – 24 * 60). Das „\“ steht übrigens für keine normale Division sondern für eine Ganzzahldivision, bei der alles nach dem Komma abgeschnitten wird (ohne auf- oder abrunden). Deswegen ergibt Time \ 3600 * 3600 auch einen Sinn, im Gegenteil zu Time / 3600 * 3600.

Tja. Dumm gelaufen :). Aber jetzt hab ich’s ja zum Glück ^^.

Nächste Seite »