TiddlyWiki für den Haushalt

Created: 2020-12-20 Updated: 2023-08-04 History Videos

TiddlyWiki ist eine einzelne HTML-Datei, die auf dem eigenen Computer gespeichert und im Browser bearbeitet werden kann. Das Programm zeichnet sich dadurch aus, dass es alle Informationen in sich selbst abspeichert. Dadurch lässt sich die Datei gut synchronisieren und archivieren, was dabei hilft, es in verschiedenen Situationen wiederzuverwenden. Gleichzeitig lassen sich die Informationen schnell bearbeiten, durchsuchen und teilen, sodass sich das Programm vor allem dafür eignet, nicht-persönliche Daten abzuspeichern.

Ich habe TiddlyWiki in der Vergangenheit in meinem Haushalt genutzt, um verschiedene Probleme zu lösen und möchte diese Lösungen an dieser Stelle sammeln, damit andere Menschen ebenfalls die Möglichkeit haben, darauf aufzubauen. Ich habe letztendlich eine eigene Weblösung programmiert, da TiddlyWiki zurzeit (2023) keine gute Synchronisierbarkeit und Kollaboration besitzt.

Gliederung

  1. Konzepte
  2. Empfohlene Plugins
    1. Grundfunktionen
  3. Ernährung
    1. Ich weiß nicht, was ich essen möchte.
  4. Organisation
    1. Ich möchte eine Aufgabenliste haben, die ich täglich einfach nacheinander abarbeiten kann.
    2. Ich möchte nach einer bestimmten Zeit auf etwas hingewiesen werden, ohne dass es in meinem Kalender auftauchen soll.

Konzepte

Empfohlene Plugins

Grundfunktionen

Ernährung

Ich weiß nicht, was ich essen möchte.

Die beste Möglichkeit, dieses Problem anzugehen, besteht für mich darin, das Gericht, das ich mag, als einzelnen Tiddler mit Rezept und Bild abzuspeichern, es danach bestimmten Kategorien zuzuordnen (meine sind Lecker, Gesund, Snack, FastFood) und im Anschluss auf meiner Übersichtsseite mehrere Knöpfe zu platzieren, die mir ein zufälliges Gericht aus der entsprechenden Kategorie vorschlagen.

Der Code für einen der Vorschlag-Knöpfe ist folgender:

<$wikify name="tasty" text="""<$list filter="[tag[Essen]tag[Lecker]random[1]]"/>""">
<$button set="$:/Temp/Tasty" setTo=<<tasty>>>Leckeres</$button>
<$link to={{$:/Temp/Tasty}}><$transclude tiddler="$:/Temp/Tasty"/></$link>
  1. <$wikify> setzt die Variable <<tasty>> zu einem zufälligen Titel (random[1]) aus allen Tiddlern, die die Tags "Essen" und "Lecker" besitzen.
  2. Danach erstellt <$button> einen Knopf, der einem temporären Tiddler $:/Temp/Tasty die gesetzte Variable zuweist, sodass sie festgeschrieben wird und von überall abgerufen werden kann.
  3. <$link> erzeugt abschließend eine direkte Verlinkung zum zufällig ausgewählten Tiddler.

Wenn ein Gericht nicht doppelt vorgeschlagen werden soll, bietet sich der folgende Code an:

<$button>
<$action-listops $tiddler="$:/Temp/Tasty" $field="text" $filter="[tag[Essen]tag[Lecker]!list[$:/Temp/TastyList!!text]random[1]]" />
<$action-listops $tiddler="$:/Temp/TastyList" $field="text" $filter="[list[$:/Temp/TastyList!!text]prepend{$:/Temp/Tasty}unique[]limit[5]]"/>Leckeres</$button>
<$link to=<<formula "[list[$:/Temp/Tasty!!text]]" >>/>
  1. Der Button erstellt zunächst eine zufällige Auswahl aus allen Tiddlern, die die Tags "Essen" und "Lecker" besitzen und nicht in "TastyList" abgespeichert sind.
  2. Danach fügt die Schaltfläche diese Auswahl zu "TastyList" hinzu und löscht je nach limit[X] die vorherigen Eintragungen. Limit muss kleiner als die Anzahl aller Auswahlmöglichkeiten gewählt werden, da ansonsten irgendwann nichts mehr passiert, wenn man auf die Schaltfläche drückt, da alle Möglichkeiten dann bereits in der Ausschlussliste stehen.
  3. Zuletzt erzeugt <$link> eine Verknüpfung zur Auswahl.

Organisation

Ich möchte eine Aufgabenliste haben, die ich täglich einfach nacheinander abarbeiten kann.

Häufig kann eine lange Liste von Aufgaben erdrückend wirken. Um dieses Problem zu lösen, kann eine Aufgabenliste weiterhelfen, die jeweils nur immer eine Aufgabe anzeigt. Solange diese Aufgabe nicht erledigt wurde, wird auch keine andere Aufgabe angezeigt. Ich nutze diese Art der Aufgabenliste, um verschiedene unterschiedliche Bereiche nacheinander abzuarbeiten. Die Aufgaben sind individuell nach Wichtigkeit sortiert und werden entweder täglich oder nach einer bestimmten Anzahl von Tagen wiederholt.

Meine Lösung benutzt nur einen Tiddler und jeweils einen Tiddler für jeden Ablauf. Darüber hinaus werden die Plugins TiddlyFormula und let benötigt.

Übersicht für die Abarbeitung der einzelnen Aufgaben

<$list filter="[!is[system]let:DATE updated LT ![]!has[draft.of]tag[Ablauf]nsort[importance]order[reverse]limit[1]]">
<$transclude field="text" /> - 
<$button>
<$action-setfield $field="updated" $value=<<formula to_tw_date(date(year(add_days(now(),{{!!day_interval}})),month(add_days(now(),{{!!day_interval}})),day(add_days(now(),{{!!day_interval}})))) >>/>
<$action-setfield $field="importance" $value=<<formula "{{!!reset}}">> />
Erledigt
</$button>

<$button>
<$action-setfield $field="importance" $value=<<formula "{{!!importance}} - 30">> />
Später
</$button>
</$list>

(= if(eq(count([!is[system]let:DATE updated LT ![]!has[draft.of]tag[Ablauf]nsort[importance]order[reverse]limit[1]]),0), 'Alles geschafft!', '') =)

Die Übersicht zeigt alle Aufgaben an, deren Ablaufdatum älter als der aktuelle Tag ist und sortiert sie nach dem Feld "importance" (Eine Zahl, die die Wichtigkeit angibt; höhere Zahl, höhere Wichtigkeit). Daneben stehen zwei Schaltflächen. Mit der Schaltfläche "Erledigt" wird angegeben, dass die Aufgabe für heute erfüllt ist. Mit der Schaltfläche "Später" wird die Aufgabe ganz nach hinten verschoben. Darüber hinaus wird ein "Alles geschafft!" angezeigt, wenn keine Aufgaben mehr vorhanden sind.

Wenn eine Aufgabe nach hinten verschoben wurde, dann bleibt sie auch an anderen Tagen ganz hinten, bis sie irgendwann erledigt wird. Dies wird darüber erreicht, dass das Feld "importance" und damit die Sortierung der Aufgaben angepasst wird.

Ablauf-Tiddler erstellen

Um einen Ablauf-Tiddler zu erstellen, muss der Tiddler den Tag "Ablauf" zugewiesen bekommen. Im Textfeld wird dann eine Frage gestellt oder die Aufgabe ausformuliert. Dann muss das Feld "importance" und das Feld "reset" mit derselben Zahl für die Sortierung (bei einer höheren Zahl wird es eher angezeigt) hinzugefügt werden. Außerdem muss das Feld "day_interval" mit der Anzahl der Tage zwischen dem erneuten Auftauchen in der Liste bestimmt werden. Damit die Aufgabe sofort sichtbar ist, sollte das Feld "updated" auf "00000000000000000" gestellt werden. Das Feld "updated" bekommt automatisch das nächste fällige Datum für das Auftauchen in der Liste zugewiesen, sobald einmal die Aufgabe als erledigt markiert wurde.

Ich möchte nach einer bestimmten Zeit auf etwas hingewiesen werden, ohne dass es in meinem Kalender auftauchen soll.

Dieses Problem tritt vor allem bei Handlungen auf, die zwar sinnvoll sind, aber nicht im Tagesrhythmus verankert wurden. Außerdem möchte man mit diesen Aufgaben nicht ständig im Kalender konfrontiert werden, weil diese Erinnerungen schnell die wichtigen Ereignisse verdecken könnten. Bei mir ist das vor allem bei der Pflege von Zimmerpflanzen der Fall, oder bei Freizeitaktivitäten, die nicht so wichtig sind, dass sie unbedingt regelmäßig eingeplant werden müssten, aber an die ich doch hin und wieder erinnert werden möchte. Der große Vorteil von TiddlyWiki besteht in dieser Hinsicht natürlich darüber hinaus darin, diese Erinnerungen in anderen Bereichen weiterverwenden zu können.

Dieses Problem erfordert insgesamt 5 vorbereitete Tiddler und einmal die Plugins TiddlyFormula und let. Die Tiddler sind in zwei Bereiche aufgeteilt: 1. Eine Benutzeroberfläche für das Hinzufügen von neuen Erinnerungen und 2. eine anpassbare Übersicht für die Darstellung der Erinnerungen von verschiedenen Kategorien (bei mir zum Beispiel Zimmerpflanzen). Eine Erinnerung ist ein Tiddler, der über eine Schaltfläche und mehrere Eingabefelder genauer bestimmt werden kann.

1. Benutzeroberfläche für das Hinzufügen neuer Erinnerungen

Benutzeroberfläche mit Suche

<div class="search-bar">
<ul>
<<list-filter-searchnolimit filter:"[!has[draft.of]tag[Erinnerung]sort[created]order[reverse]]" template:"$:/Templates/SearchItemErinnerung" search:"search:*" limit:5 placeholder:"Suchen" >>
</ul>
</div>
<div class="wizard">
<section class="left">Titel:</section> <$edit-text tiddler="$:/state/Erinnerung/title" tag="input" default="" /> 
<section class="left">Beschreibung:</section> <$edit-text tiddler="$:/state/Erinnerung/description" default="" rows="5" />
<section class="left">Tags:</section> <$edit-text tiddler="$:/state/Erinnerung/tags" tag="input" default="Erinnerung" /> 
<section class="left">Wiederholung:</section> Tage: <$edit-text tiddler="$:/state/Erinnerung/repeat-days" class="small" tag="input" default="0" /> Stunden: <$edit-text tiddler="$:/state/Erinnerung/repeat-hours" class="small"  tag="input" default="12" /> 
<br /><br />
<$button>
<$action-sendmessage $message="tm-new-tiddler" title={{$:/state/Erinnerung/title}} text="{{||$:/Templates/ErinnerungVorlage}}" description={{$:/state/Erinnerung/description}} tags={{$:/state/Erinnerung/tags}} updated=<<formula to_tw_date(add_hours(now(),(({{$:/state/Erinnerung/repeat-days}}*24)+{{$:/state/Erinnerung/repeat-hours}}))) >> repeat=<<formula (({{$:/state/Erinnerung/repeat-days}}*24)+{{$:/state/Erinnerung/repeat-hours}})>> />
Neue Erinnerung hinzufügen
</$button>
</div>

Template: $:/Templates/SearchItemErinnerung

<li><$view field="created" format="date" template="YYYY-0MM-0DD" /> - <$link to={{!!title}}><$view field="title"/></$link></li>

Template: $:/Templates/ErinnerungVorlage

|''Title'': |<$view field="title" />|
|''Description'': |<$view field="description" />|
|''Updated'': |<$view field="updated" format="date" template="YYYY-0MM-0DD 0hh:0mm:0ss" />|
|''Repeat'': |<$view field="repeat" />|

2. Anpassbare Übersicht für die Darstellung der Erinnerungen, sobald sie fällig werden

Übersicht

<ul>
<$list filter="[!is[system]let:DATE updated LT ![]!has[draft.of]tag[Erinnerung]sort[created]order[reverse]]" template="$:/Templates/SearchItemErinnerungFaellig"/>
</ul>

Template: $:/Templates/SearchItemErinnerungFaellig

<li><$view field="updated" format="date" template="YYYY-0MM-0DD 0hh:0mm:0ss" /> - <$link to={{!!title}}><$view field="title"/></$link>: <$view field="description"/> - <$button>
<$action-setfield $field="updated" $value=<<formula to_tw_date(add_hours(now(),{{!!repeat}}))>> />Erledigt</$button></li>

Ergänzungen

Um die Darstellung der Erinnerungen auf bestimmte Tag-Kategorien zu beschränken, muss der Filter der Übersicht so angepasst werden, dass ein zusätzliches "tag[TAGNAME]" in der Filterliste ergänzt wird.