From 12cc69b3cfcef87e131507fe916dc33aa6f6d33f Mon Sep 17 00:00:00 2001
From: Simon Michael
Date: Fri, 30 Apr 2021 12:27:49 -1000
Subject: [PATCH 1/3] HaskellerZ 2021-04-29 meetup slides
---
Makefile | 22 +++
README.org | 50 ++++++
haskellerz.md | 356 ++++++++++++++++++++++++++++++++++++
haskellerz.revealjs.html | 380 +++++++++++++++++++++++++++++++++++++++
haskellerz.slidy.html | 353 ++++++++++++++++++++++++++++++++++++
5 files changed, 1161 insertions(+)
create mode 100644 Makefile
create mode 100644 README.org
create mode 100644 haskellerz.md
create mode 100644 haskellerz.revealjs.html
create mode 100644 haskellerz.slidy.html
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..6d154e4c0
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,22 @@
+SLUG=haskellerz
+
+TYPES=\
+ slidy \
+ revealjs \
+# dzslides \
+# s5 \
+# slideous \
+
+default: build open watch
+
+open:
+ open *.html
+
+build:
+ for T in $(TYPES); do pandoc --slide-level=2 -s -t $$T $(SLUG).md -o $(SLUG).$$T.html; done
+
+watch:
+ ls *.md | entr bash -c 'make -s build && date'
+
+clean:
+ rm -f $(SLUG).*.html
diff --git a/README.org b/README.org
new file mode 100644
index 000000000..5b8f63302
--- /dev/null
+++ b/README.org
@@ -0,0 +1,50 @@
+* Haskellerz talk 2021-04-29
+
+** blurb
+Inside hledger: an architectural tour and how-to
+
+hledger is a suite of CLI, TUI and WUI tools, file formats, and
+documentation for doing accounting with plain text. It is something
+that's not yet common: an end-user application written in Haskell,
+that aims to be easy to install, robust and pleasing to use, on all
+major platforms, including by non-techies.
+
+I have been building and growing hledger and the hledger project for
+about 15 years. In this talk I will, after a quick intro to plain text
+accounting and hledger, give a tour of hledger's architecture,
+codebase, significant evolutions, and some design principles. Then
+I'll give some practical tips on how to: add your own custom hledger
+commands; use hledger from your own app; troubleshoot hledger
+behaviour; investigate bugs; and create effective pull requests. This
+will hopefully go smoothly, and the Q&A we can go deeper on whatever
+you like.
+
+Simon: https://joyful.com
+hledger: https://hledger.org
+Plain Text Accounting: https://plaintextaccounting.org
+
+** preliminary outline
+*** Inside hledger: an architectural tour and how-to
+**** quick intro to accounting, plain text accounting, hledger
+10m
+**** project goals
+**** a look at the essential functionality in its earliest/simplest form
+**** a fast run through the evolution since then
+**** a tour of the codebase and project today (2021Q2)
+**** design principles
+25m
+
+**** how to script hledger
+**** how to integrate hledger in your app
+***** run cli, capture csv/json
+***** run hledger-web, use http-json api
+***** link with hledger-lib and/or other hledger packages, call public functions
+**** how to investigate a hledger bug
+***** basic troubleshooting - docs, comparison, minimisation, reproduction, support
+***** code debugging
+**** how to submit a pull request
+25m
+
+**** Q & A
+30m
+
diff --git a/haskellerz.md b/haskellerz.md
new file mode 100644
index 000000000..0b00b589e
--- /dev/null
+++ b/haskellerz.md
@@ -0,0 +1,356 @@
+% Inside hledger: an architectural tour and how-to
+% Simon Michael
+% April 29, 2021
+
+# Introductions
+
+`0:00 (10m)`
+
+## Who am I ?
+
+Simon Michael\
+Independent software consultant and developer.\
+
+
+
+Started in the home computer era (Ireland, 80s). ZX-80, Pet, VIC, C64, Amiga, PC, Mac, VAX/VMS, unix..
+
+FOSS fan, contributor, project leader. Two big projects:
+
+- **Zwiki**, 1996-2006, wiki engine, Python/Zope
+
+- **hledger**, 2006-present, accounting tool, Haskell
+
+## Overview of talk
+
+- A quick intro to plain text accounting and hledger. (10m)
+
+- A tour of hledger's
+architecture,
+codebase,
+evolutions,
+and design principles. (25m)
+
+- How to script and develop hledger:
+custom commands,
+calling from other apps,
+troubleshooting,
+bug investigation,
+effective pull requests. (25m)
+
+- Q&A to go deeper on whatever you like. (30m)
+
+
+## What's Plain Text Accounting ?
+
+A name I proposed (and a website I built) to help unify and grow the
+communities around
+Ledger, hledger, Beancount and similar accounting
+tools.
+
+
+
+## The PTA ecosystem
+
+The "big three" apps:
+
+ * **Ledger** - John Wiegley's pioneering command line accounting app,
+ inspiration for all the rest.\
+ C++, 2003-present
+
+ * **hledger** - Simon Michael's rewrite/remix.\
+ Haskell, 2007-present
+
+ * **Beancount** - Martin Blais' variant.\
+ Python, 2008-present
+
+Many more apps and add-on tools -
+
+
+## What's hledger ?
+
+A suite of
+tools,
+file formats,
+and documentation
+for doing "plain text accounting".
+
+
+
+## A successful FOSS project
+
+15 years, 134 contributors, 80-100 chatters, some number of happy
+users, useful to me every week.
+
+Reasonably successful.
+
+Not fulfilling my original goal of being financially
+self-sustaining and minimally time-consuming !
+
+## An end-user Haskell application
+
+hledger is something that's not yet common:
+
+An end user application (ie: not a programming tool),
+written in Haskell, that aims to be
+
+- easy to install,
+- dependable,
+- and pleasing to use,
+- on all major platforms,
+- by non-techies as well as power users.
+
+## Tools
+
+ * hledger
+ * hledger-ui
+ * hledger-web
+ * hledger-iadd
+ * hledger-interest
+ * etc.
+
+## File formats
+
+ * journal
+ * csv
+ * timeclock
+ * timedot
+
+## Documentation
+
+ * introductory
+ * reference
+ * cookbook
+ * developer
+
+
+# Architecture
+
+`0:10 (25m)`
+
+## hledger project goals
+
+I was a Ledger user and new Haskeller. I started hledger with many goals:
+
+- acquire a more robust, usable, evolving incarnation of Ledger
+- develop a consistent, effective accounting habit
+- get better at Haskell
+- find out if Haskell was good for end-user apps and maintainer productivity
+- grow a useful, long-lasting, financially sustainable FOSS accounting project
+
+## A fast run through the evolution
+
+- First commit
+- First types
+- First report
+- Balance report
+- Multi-column balance report
+- Stateful parser
+- Web interface
+- Curses interface
+- Package split
+- Speed, features
+- General currency conversion
+- Valuation
+- Always documentation
+
+## A tour of the codebase and project today (2021Q2)
+
+
+## Design principles
+
+
+# How to..
+
+`0:35 (25m)`
+
+## Script hledger
+
+
+## Integrate hledger in your app
+
+
+### Run cli, capture csv/json
+
+
+### Run hledger-web, use http-json api
+
+
+### Link with hledger-lib and/or other hledger packages, call public functions
+
+
+## Investigate a hledger bug
+
+
+### Basic troubleshooting - docs, comparison, minimisation, reproduction, support
+
+
+### Code debugging
+
+
+## How to submit a pull request
+
+
+# Q & A
+
+`1:00 (30m)`
+
+# End
+
+`1:30`
+
+```
+$ git shortlog -s
+Aerex
+Aiken Cairncross
+Alejandro García Montoro
+Aleksandar Dimitrov
+Alex Chen
+Alvaro Fernando García
+Amarandus
+Amitai Burstein
+Andreas Pauley
+Andrew Jones
+Andriy Mykhaylyk
+Arnout Engelen
+Ben Boeckel
+Ben Creasy
+Boyd Kelly
+Brian Scott
+Brian Wignall
+Bryan Richter
+Caleb Maclennan
+Carel Fellinger
+Carl Richard Theodor Schneider
+Carlos Lopez-Camey
+Christian G. Warden
+Christoph Nicolai
+Clint Adams
+Colin Woodbury
+Damien Cassou
+David Reaver
+David Zhang
+Dmitry Astapov
+Dominik Süß
+Doug Goldstein
+Eli Flanagan
+Elijah Caine
+Eric Kow
+Eric Mertens
+Everett Hildenbrandt
+Evilham
+Felix Van der Jeugt
+Felix Yan
+Fun Ilrys (Nissar Chababy)
+Gabriel Ebner
+Gaith Hallak
+Gergely Risko
+Hans-Peter Deifel
+Henning Thielemann
+Imuli
+Jacek Generowicz
+Jacob Weisz
+Jakob Schöttl
+Jakub Zárybnický
+Jan Zerebecki
+Jeff Richards
+Jesse Rosenthal
+Joachim Breitner
+Joe Horsnell
+Johann Klähn
+Johannes Gerer
+John Wiegley
+Joseph Weston
+Joshua Chia
+Joshua Kehn
+Judah Jacobson
+Julien Moutinho
+Justin Le
+Kyle Marek-Spartz
+Luca Molteni
+Léo Gaspard
+M Parker
+Malte Brandy
+Mark Hansen
+Marko Kocić
+Martin Michlmayr
+Mateus Furquim
+Matthias Kauer
+Max Bolingbroke
+Michael Kainer
+Michael Sanders
+Michael Snoyman
+Michael Walker
+Mick Dekkers
+Mitchell Rosen
+Moritz Kiefer
+Mykola Orliuk
+Nadrieril
+Nicholas Niro
+Nick Ingolia
+Nicolas Wavrant
+Nikhil Jha
+Nissar Chababy
+Nolan Darilek
+Oliver Braun
+Omari Norman
+Pavan Rikhi
+Pavlo Kerestey
+Peter Simons
+Pia Mancini
+Rick Lupton
+Roman Cheplyaka
+Rui Chen
+Ryan Desfosses
+Sam Doshi
+Sam Jeeves
+Samuel May
+Sergei Trofimovich
+Sergey Astanin
+Shubham Lagwankar
+Simon Hengel
+Simon Michael
+SpicyCat
+Stefano Rodighiero
+Stephen Morgan
+Steven R. Baker
+TANIGUCHI Kohei
+Thomas R. Koll
+Tim Docker
+Timofey ZAKREVSKIY
+Trygve Laugstøl
+Vladimir Sorokin
+Vladimir Zhelezov
+Wad
+Xinruo Sun
+afarrow
+agander
+aragaer
+awjchen
+azure-pipelines[bot]
+flip111
+gwern
+jeevcat
+jungle-boogie
+legrostdg
+trevorriles
+zieone
+```
+
+
+
diff --git a/haskellerz.revealjs.html b/haskellerz.revealjs.html
new file mode 100644
index 000000000..db9c930e8
--- /dev/null
+++ b/haskellerz.revealjs.html
@@ -0,0 +1,380 @@
+
+
+
+
+
+
+
+ Inside hledger: an architectural tour and how-to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Inside hledger: an architectural tour and how-to
+
Simon Michael
+
April 29, 2021
+
+
+
+
+
Introductions
+
0:00 (10m)
+
+
+
Who am I ?
+
Simon Michael
+Independent software consultant and developer.
+ https://joyful.com
+
Started in the home computer era (Ireland, 80s). ZX-80, Pet, VIC, C64, Amiga, PC, Mac, VAX/VMS, unix..
+
FOSS fan, contributor, project leader. Two big projects:
+
+
Zwiki, 1996-2006, wiki engine, Python/Zope
+
hledger, 2006-present, accounting tool, Haskell
+
+
+
+
Overview of talk
+
+
A quick intro to plain text accounting and hledger. (10m)
+
A tour of hledger’s architecture, codebase, evolutions, and design principles. (25m)
+
How to script and develop hledger: custom commands, calling from other apps, troubleshooting, bug investigation, effective pull requests. (25m)
+
Q&A to go deeper on whatever you like. (30m)
+
+
+
+
What’s Plain Text Accounting ?
+
A name I proposed (and a website I built) to help unify and grow the communities around Ledger, hledger, Beancount and similar accounting tools.
+
+
From 28f0e43aa5cabd0ee1f539635b7c75f26058eb5d Mon Sep 17 00:00:00 2001
From: Simon Michael
Date: Fri, 30 Apr 2021 12:53:29 -1000
Subject: [PATCH 2/3] post-talk tweaks
---
haskellerz.md | 55 ++++++++++++++++++++++++---------------------------
1 file changed, 26 insertions(+), 29 deletions(-)
diff --git a/haskellerz.md b/haskellerz.md
index 0b00b589e..177088947 100644
--- a/haskellerz.md
+++ b/haskellerz.md
@@ -77,15 +77,15 @@ for doing "plain text accounting".
-## A successful FOSS project
+## hledger project goals
-15 years, 134 contributors, 80-100 chatters, some number of happy
-users, useful to me every week.
+I was a Ledger user and new Haskeller. I started hledger with many goals:
-Reasonably successful.
-
-Not fulfilling my original goal of being financially
-self-sustaining and minimally time-consuming !
+- acquire a more robust, usable, evolving incarnation of Ledger
+- develop a consistent, effective accounting habit
+- get better at Haskell
+- find out if Haskell was good for end-user apps and maintainer productivity
+- grow a useful, long-lasting, financially sustainable FOSS accounting project
## An end-user Haskell application
@@ -100,6 +100,16 @@ written in Haskell, that aims to be
- on all major platforms,
- by non-techies as well as power users.
+## A successful FOSS project
+
+15 years, 134 contributors, 80-100 chatters, some number of happy
+users, useful to me every week.
+
+Reasonably successful.
+
+Not fulfilling my original goal of being financially
+self-sustaining and minimally time-consuming !
+
## Tools
* hledger
@@ -128,16 +138,6 @@ written in Haskell, that aims to be
`0:10 (25m)`
-## hledger project goals
-
-I was a Ledger user and new Haskeller. I started hledger with many goals:
-
-- acquire a more robust, usable, evolving incarnation of Ledger
-- develop a consistent, effective accounting habit
-- get better at Haskell
-- find out if Haskell was good for end-user apps and maintainer productivity
-- grow a useful, long-lasting, financially sustainable FOSS accounting project
-
## A fast run through the evolution
- First commit
@@ -167,29 +167,26 @@ I was a Ledger user and new Haskeller. I started hledger with many goals:
## Script hledger
+
+ *
+
## Integrate hledger in your app
+ * Run cli, capture csv/json
-### Run cli, capture csv/json
-
-
-### Run hledger-web, use http-json api
-
-
-### Link with hledger-lib and/or other hledger packages, call public functions
+ * Run hledger-web, use http-json api
+ * Link with hledger-lib and/or other hledger packages, call public functions
## Investigate a hledger bug
+ * Basic troubleshooting - docs, comparison, minimisation, reproduction, support
-### Basic troubleshooting - docs, comparison, minimisation, reproduction, support
-
-
-### Code debugging
-
+ * Code debugging
## How to submit a pull request
+ *
# Q & A
From 79beb34b900b5d35b065e145d6200d227de16945 Mon Sep 17 00:00:00 2001
From: Simon Michael
Date: Fri, 30 Apr 2021 12:53:36 -1000
Subject: [PATCH 3/3] render
---
haskellerz.revealjs.html | 52 ++++++++++++++++++++++++----------------
haskellerz.slidy.html | 52 ++++++++++++++++++++++++----------------
2 files changed, 62 insertions(+), 42 deletions(-)
diff --git a/haskellerz.revealjs.html b/haskellerz.revealjs.html
index db9c930e8..37672e22b 100644
--- a/haskellerz.revealjs.html
+++ b/haskellerz.revealjs.html
@@ -81,11 +81,16 @@ Python, 2008-present
A suite of tools, file formats, and documentation for doing “plain text accounting”.