How do you start writing in a Tiddler?

Folks,

I am curious if any of you have thought about how you start when entering information in a tiddler, be it an idea, a task, some research notes or a poem?

Typically we have already titled the tiddler and this may already contain a question or statement of sorts etc… but then we may wish to extend the information in the tiddler.

If you are using automatically titled tiddlers such as in streams do you start your notes differently?

Why would I ask?
I always feel there may be a better way and wonder what others are doing. Its not something we document or share as a rule, but could be a good discussion for the community to share their practices.

Do you;

  • Just start typing a plain paragraph?
  • Start with a heading “! !! !!! etc…”?
  • Use the ";’ and “:” at the beginning of the line?
  • Use either * or # and go strait into a list?
  • Do you use a template for your tiddlers to kick start the content?

Please share your practices in this topic.

Easter egg example;
Here is one method I sometimes make use of in tiddlers when they are addressing or extending information in the text of the tiddler.

I have a global macro defined in a tiddler tagged $:/tags/Macro
\define ~() {{!!title}}

Here I use the tilde “~” which in dictionaries tends to refer to the word which is being described, Using tilde as a macro name that is simply replaced with the title eg <<~>>.
This actually influences somewhat how I name tiddler, so they still make sense when reused in the tiddler.

probably a bit of a niche use case, but here it is:

  • I enter the title only (usually I leave the body empty! I know, weird, see below)
  • then move into the first Streams node to add basic information
  • most times I add a Streams node (at bottom of the tiddler) with resources related to the topic (links)
  • I will have between 3-15 Streams nodes with any entry in my notebook, so they in fact replace the need to have headings. Editing is much faster also, because I can edit only the relevant node by double-clicking, and not the whole tiddler.

*exceptionally, when I don’t leave the body empty, it’s for special cases in which there is template TW code I want there. One example: I use TW for recurring meeting notes. The body of each instance of these meetings includes template code that will automatically fetch (in a “details” component; I forget which variant) the notes from the previous instance of that meeting. That way, as I am preparing for a meeting, I can quickly refresh my memory on what happened last time (and roll it away out of sight with the “details” component). In a way this zone is “utilitarian”, and does not contain any information per se related to the title of that tiddler.

So I think that answers the questions you were asking; the “lists” are implicit with Streams and can be re-ordered and hierachy-ized (organized into a hierarchy) easily with keyboard or mouse. Templates to kick start, yes, for specific note types like meetings.

1 Like

@fastfreddy thanks for sharing. Yes I think the more involved content benefits from the use of “compound tiddlers” like streams. I suppose when I raised this I was thinking of “singular tiddlers” but I also often have tiddlers defined by their title only. I try and reserve the text field for additional notes if required.

Since my original post I updated my tilde macro to show the text of any named field but with title still the default.
\define ~(fieldname:"title") <$text text={{{ [all[current]get[$fieldname$]] }}}/>

I am now looking at introducing another macro called “=” or <<= fieldname>> to “evaluate the field”, given the fieldname or content apply different formatting, but default providing a label eg:
<<= description>> would return
Description: Description content here

Why mention this here?

  • To add info to my original example of the <<~>> macro
  • Because such macros could influence the way we start or compose tiddlers.
1 Like

Hi,

  • I do start with a title that can be used as a human readable URL, without any filters or macros eg: test-something
  • The text most of the time starts with a heading 1
  • I use paragraphs
  • I use bullet lists
  • I don’t use wikitext to do text styling. If I want to style a text I use styelsheets only

Some advantages for me:

  • I can transclude my tiddlers, without the need to create a new and may be different heading.
    • So the headings are consistent, because there is only 1 “source of truth”
  • I’m sure my tiddler titles are always “lowercase only”
  • It’s easy to transclude tiddlers. … If the heading levels doesn’t fit, it is easy to “shift” them. See the attachment.

shift-headings.json (1.2 KB)

just some thoughts
-mario

Broadly speaking, I have two SOPs

1. Creating “content” tiddlers

These are tiddlers designed to be viewed and read - your everyday, regular tiddlers.

My tiddlers are organized into Chapters/Sections so I create a new Chapter or move to an existing Chapter (usually a number) and add a new section (always a number). Give it a subtitle and start typing.

Sometimes I start with a heading, something like !Problem or !Proposal. Later I might add !Solution.

2. Creating “functional” tiddlers

Macros, stylesheets, etc.

If this is a brand spanking new idea, and since this is a POC (proof of concept) I start a regular tiddler and type dfgfgfdsg or similar in the title and start typing in the body. The idea is to get started quickly before the idea evaporates from my aging brain.

If I need CSS, <style> is stored right there in the same tiddler.

The repl goes on like that until the POC is proved – then I add the tags I want, move the CSS to its own tiddler (whose name is then transcluded in my global “all css” tiddler).


Everything else I do is highly specific to my own working environment which would not make sense unless you had my wiki(s).

When I use a journal tiddler, I have setup a standard layout. I then add only note in one or two list with *. I’ve also a special field for the most important things of the day, which is used by this layout and also by other tiddlers for listing journal tiddlers.

And if some of my bullets become too big, they become full tiddlers and I set a link to it in the journal.

And for all standard articles, when they become too big, I break them in parts (and eventually, recursively) with some fields and macros so that I can read a part as a whole or access its sub-part for edition or reading, and each subpart can offer access to its parent part (very important ! See the mess that frames can be in the web!)

Also, when I want to list in a special ways some kind of articles, I will use dedicated fields to allow listings of most usability and diversity and devise new macros to handle them.

When I’m building tw applications, I use these techniques and also templates. Most tiddlers have then automatic names. Some also have human readable title, eventually only by transcluding an automatically named tiddlers (with some tricks within some macros to take this possibility into account (native tiddler or transcluding tiddler).

@jypre thanks for sharing

Most tiddlers have then automatic names.

Do share you automatic name algoritium(s) as I plan to make a collection.

These names are mostly for database tables tiddlers, and they can be set by human beings or by machine code. A basis is that I append would-be table names to get tiddlers names, an from them I get the name for operative tiddlers that do the CRUD for them. In effect, the CRUD operations are all centralized within a single tiddler for each kind of data sub-table – of course there are specialized tiddlers for doing the actual operations – think of it as a master/detail relationship.

First I start with a project name, which is free but with constraints such as only lower letters and digits and eventually a point within digits (for version number) and starting with a letter. The same for the tables of projects with also no digits for it. My project tables is called projets and let’s say there is a foo project. The tiddlers for projets CRUD is PTF_projets (PTF as portefeuille de projets). Since it’s an important starting point, I avoid such an horrible name by crating a “portefeuille des projets” tiddles whose sole content is {{PTF_projets}}}.

Actually, the projets table is not stored in a projets tiddler but as a system tiddler in $:/user/eva/data/projets (eva being the name of the app and I store all my user-written system tiddlers within $:/user/). I use a system tiddlers for all database tiddlers to avoid it being pouring continuous change in the recent history (it was obliterating everything else and ho interest).

Each database table is a json tiddlers. I have not metadata associated with it beside a few fields such as to tell its purpose for instance. That can be used to generate some listing tiddlers with macros.

A project has campaign. These correspond to a table that would be named cmp. But I have not one huge table for all the campaigns of all the projects as I would in a real database. That would no be very clever within tiddlywiki. Instead I have one sub-table tiddler for all the campaigns of any given project. As for its name, just give an example : for the foo project,its campaign are in the foo_cmp tiddler (cmp for campaign). It would be bar_cmp for the bar project. And the CRUD tiddler for foo_cmp is CMP_foo_cmp (and the CRUD tiddlers are not system tiddlers because it’s useful to be able to look for them and know if they are updated as I develop the application). CMP is just the upper case of cmp and this is the rule: the CRUD tiddler for *_something is always SOMETHING_*_something but I try to limit something to 3 to 5 letters.

Below campaigns are tests, which are in a tiddler named foo_cmp_tst for the foo project and CRUDed with tiddler TST_foo_cmp_tst (tst for test).

This naming leads to may CRUD tiddlers. But each such tiddlers only transclude a template tiddler like $:/user/eva/templates/CMP_Template for the CMP template or $:/user/eva/templates/TST_Template for the TST template. There is no nesting for template names as you can see.

And within my json tables, I don’t use the default structure provided by tiddlywiki for arrays of objects. Because I need to be able to identify each record for fetching/updating/deleting it and that is nos possible with a simple array. Instead, I use an array of key+value there each key is the value of the identifier and the value is the whole record, including the key (to be more able to repair problems if/when the data get corrupted).

For instance for the projets table, here is one possible full contents of the projets table with two projects, foo and bar, name being the name of the key:

[
    "foo": {
        "name": "foolish app",
        "url": "http://foo.acmeserver.com",
        "project": "Foo"
    },
   "bar": {
       "name":  "bar",
       "url": "https://barometer.acmedev.com/app/",
       "project": "barometer of ACME projects"
   }
]

This naming is heavy but essential as the name allows to know the place and the function of any given tiddlers that is so named. It has proven to be hugely helpful!

I think it would be cool if my json convention for arrays could be natively supported. I had to develop some dedicated code to manage my tables (that I could share).

Back to the CRUD. As I said, there are specialized tiddlers that do each task of crud (one for input of key value, one for editing fields (but for key!), eventually one for deleting) their names are free, but all of them has only one line of text like {{$:/user/eva/forms/campaignEditor}} which point to the actual tiddlers whose name follon stricter rules: they are in $:/user/<project>/forms/and are name as <name-of-concept><name-of-operator>. The latter part being either CreatororEditororSuppressor. Each of these latter widgets like campaignEditor have some fields to help processing line a datasetone indicating on which data tiddlers it is operating,tempwhich indicate the name of the temporary data widget in which the data is really being edited. I really hate the default scheme when you edit without having to confirm your edit and cannot cancel them and it's not how one do in data managing apps so I have to copy data from dataset into temp and then wire the editing widgets with the temp. There is also a host field which indicate the name of the tiddler to be on display, for instanceCreation of a new campaign`for the $:/user/eva/forms/campaignEditor (you can see that each one in this relation know its peer) and this allow the programmer to indicate it want to operate an edition quite simply without having to worry if the name of the GUI tiddlers vary (thus, this functionality is OK for localization).

1 Like

Thanks @jypre very intyeresting, I will work through “with a fine tooth comb” to extract your design methods.

perhaps you could explain these terms in your post (edit)

That was a typo. I have fixed it, clarified what I meant and added a big part at the end concerning CRUD operations where there are also some naming schemes involved.

Need I say I only devised that in an iterative manner, along my own tiddlywiki knowing increasing (thanks to work and the community in Google groups at the time) and progressive identification of problems and ways to address them in a systematic way.

1 Like