NAME

App::Standup::Diary - Manage a simple Markdown journal for your daily standups

SYNOPSIS

# From command line
diary --data-dir /home/smonff/diary/ --project-name SeriousWork

# In your Perl code
my $diary = App::Standup::Diary
  ->new(
    data_dir     => $data_dir,
    project_name => $project_name
);

$diary->write();

DESCRIPTION

This module is the implementation of the diary command, that can help to keep a directory of organized daily notes aimed at standup preparation and presentation.

It provides a couple of ways to customize the notes template.

It use internal tools built with CPAN modules:

App::Standup::Diary::Template

The Markdown template where your data are interpolated.

Standup::Role::Date

Provide date features for all the diary uses.

Standup::Role::Project

Provide a project name, so far.

MOTIVATIONS

Daily standups are a common, tried and tested modern work methodology. They are "brief, daily collaboration meeting in which the team review progress from the previous day, declares intentions for the current day, and highlights any obstacles encountered or anticipated" (source).

This tool is supposed to provide self-support for persons:

Who struggle with daily standups presentations oral expression
Surely familiar with the Perl ecosystem

How did it start?

Social anxiety can make my standup presentation very confusing. I also tend to forget key points if improvising, due to the stress of having no talk notes support. Keeping a diary of my thoughts drastically helped me to stay calm and collaborate better with the various teams I worked with. And if they are well sorted by year, month and day, it makes very easy to find old notes for eventual later usage.

Ready for production

I have been using it at work since 2021 and it helped me to reduce the stress of standups and meeting.

Methodology

Every morning, create the daily file by running diary. It's template is a simple 3 items list. Open the day file in $data_dir/$year/$month/ and stash your thoughts by using the following methodology:

done

List of tasks you accomplished in the previous day

todo

List of tasks you plan to accomplish today

blockers

List of eventual blockers, so that your colleagues can support you

Then just read the notes during the daily standup.

Experiment with Object::Pad

App::Standup::Diary is my pet project for Perl's Corinna implementation of the core OOP features. diary use Object::Pad, not the class feature introduced in Perl 5.40. Object::Pad is the test bed for the new core OO system.

INSTALLATION

For common usage

cpanm App::Standup::Diary

It will make the diary command available in the ~/perl5/bin/ directory. Should be available in your PATH.

See diary for command line usage.

For development

# Install a Perl module manager
apt install carton

git clone git@codeberg.org:smonff/Diary.git

cd Diary

# Install CPAN dependencies
carton install

How to use it?

I set an alias in my .bashrc. Should also work in your own-favorite-shell:

alias diary="diary --data-dir /home/smonff/diary --project-name SeriousWork";

Each morning, before my work standup, I run diary. It create a Markdown file in the specified --project-name directory. I then edit my thoughts with an editor.

See diary for command line usage.

FIELDS

config

daily_data_path

data_dir

template

A App::Standup::Diary::Template object.

METHODS

build_full_file_path()

build_path($self->date->ymd('/'))

Use the date from Standup::Role::Date to build the final path file name.

create_directories_tree()

If $self-should_create_dir()> returns a true value, it would take care of the directory creation using Path::Tiny mkpath.

init_daily_data_path($file_path)

Helper that initialize $daily_data_path with a Path::Tiny instance for the current day diary entry.

# foo/2022/03 (Path::Tiny)
$self->init_daily_data_path($self->build_path)

should_create_dir()

Check if a new year or month directory should be created so that we can store the standup file. In simpler words: are we the first day of the year, or of the month?

write()

This is App::Standup::Diary entry point, AKA main().

TODOs

Make the template configurable by setting it in a separate file
Retrieve TODOS from previous days

See the issues tracker.

SEE ALSO

A couple of similar tools:

StandupGenerator

On the CPAN, this is pretty much all what I found. I like the spirit of this one.

Almanac

A similar effort written in Bash.

ACKNOWLEDGEMENTS

Thanks to the maintainers of Config::Tiny, Mojo::Template, Object::Pad, Path::Tiny, Time::Piece.

LICENSE

Copyright 2022-2024 Sebastien Feugère

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

See perlartistic.

AUTHOR

Sébastien Feugère - seb@feugere.net