Very simple daily entries to embed within your Readme.md.
mkay-diary entry # to create or edit today's entry
mkay-diary full # to create full diary
mkay-diary embed # to embed full diray in Readme.md
npm install --global @lpezet/mkay-diary
Use sudo
in front of the command above if you get an error like the following:
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
The reason is that npm
will download the @lpezet/mkay-diary
package into /usr/lib/node_modules/
and create a symbolic link in /usr/bin/
named mkay-diary
to it.
Changes in /usr/bin
may require privileged access and therefore the need for sudo
in such situation.
As an alternative, you can clone this repository and execute the following commands in its directory:
npm install
npm run dist
alias mkay-diary="`pwd`/dist/src/bin/mkay-diary.js"
At this point, running mkay-diary
should work but this is a temporary alias.
You can make the alias permanent by editing your .bashrc
for example, or create a symbolic link to that mkay-diary.js
file in /usr/bin, /usr/local/bin or anywhere suits you:
sudo ln -s $(pwd)/dist/src/bin/mkay-diary.js /usr/bin/mkay-diary
To generate full diary within your Readme.md
, simply add the following tags:
<!-- START mkay-diary -->
<!-- END mkay-diary -->
The goal of this tool is to help generate and integrate a simple dev diary. Working on lots of small projects, I found it useful to keep a diary, with simple daily entries. For example, going back to those entries after long periods of coding idleness helps remember where things were left off. Other times, without being away too long, it helps reading through a train a thought written down.
To create a new entry, or edit the current day's entry, run:
mkay-diary e
or
mkay-diary entry
This will create (or edit) a file in .diary/entries/
folder, using a path like YYYY/mm/DD
. So if we are in March 7th 2021, the entry would be .diary/entries/2021/03/07.md
.
To generate the full diary, run:
mkay-diary full
or
mkay-diary f
This will generate .diary/full.md
using all entries in .diary/entries/
.
To embed all those entries in your Readme.md
, add the necessary tags and run:
mkay-diary embed
or
mkay-diary b
Configuration for mkay-diary
is located at .diary/config.json
.
You can either edit the file directly, or use interactive command like so:
mkday-diary config
or
mkday-diary c
To publish next version of mkay-diary
, run the following:
npm version patch
git push --tags origin master
npm run dist
npm publish dist/ --access public
This is where the diary of this project is embedded using tags.
THis is a test. Here I talk about toto, titi, and tata.
This is also a test. But I only talk about tutu here.
Decided today to spice things up a bit. Some ideas:
- Some static part of the diary: things that can be edited but outside the normal daily entries.
- Maybe concat all entries WITHIN say the Readme.md (like doctoc). In this case some template/tags are just needed and the static part is just whatever's in the Readme.md already. This should be easy to do with say
sed
. - Decided to rename boring "my-diary" to something more...different: "mkay-diary", with the binary being "mkay", m'kay?
For #2 above, tags could simply be START mkay-diary
and END mkay-diary
, and be replaced by START mkay-diary generated diary please keep comment here to allow auto update
and END mkay-diary
(unchanged) respectively, with the content in between.
Need to convert mkay
from bash
to nodejs
(typescript
of course).
This will allow from better handling of files (tags, replacing, etc.) but more importantly easier, more efficient, cross-platform, and most importantly, more testable.
New entry.
Need to refactor a couple of commands to make them more testable. Somehow Sinon doesn't seem to stub global methods like "open" from the open npm package, or "exec" from child_process. Must define some simple methods for Entry command, as such:
export type ChildProcessInfo = {
readonly stdout?: string;
readonly stderr?: string;
readonly killed?: boolean;
readonly pid?: number;
readonly exitCode?: number | null;
readonly signalCode?: NodeJS.Signals | null;
};
export type Deps = {
open: (command: string) => Promise<ChildProcessInfo>;
exec: (command: string) => Promise<ChildProcessInfo>;
};
Same for Full
command as it reads a bunch of files and write to one file:
export type Deps = {
createWriteStream: typeof fs.createWriteStream;
createReadStream: typeof fs.createReadStream;
};
Constructor for those classes will then look like:
constructor(pConfig: Config, pDeps: Deps) {
this.config = pConfig;
this.deps = pDeps;
}
...in which case the src/main/index.ts
must be updated accordingly (using open, exec and fs functions for implementations).
Log file should reside in Config.baseDir() (.diary
by default).