readit

Tooling for managing structured reading notes for scientific publications

git clone https://git.8pit.net/readit.git

  1# readit
  2
  3Tooling for managing structured reading notes for scientific publications.
  4
  5## Motivation
  6
  7When reading scientific papers and books I usually take notes.
  8Currently, I primarily use markdown for note taking. Markdown has the
  9disadvantages that it does not enforce any structure regarding these
 10notes and it doesn't allow me to search them efficiently, e.g. find all
 11publications on a specific topic. In an attempt to improve my reading
 12notes, I came up with this repository.
 13
 14## Status
 15
 16Work in progress, I am (more or less) happy with the input format. The
 17tooling is still in very early stages of development. Tooling for
 18finding entries and generating reference graphs is available as a proof
 19of concept. Additionally, I would like to add tooling for interacting
 20with fields (e.g. list all field names) and tooling for generating HTML
 21output. The existing tooling also needs to be improved significantly.
 22
 23## Features
 24
 25* Simple plain-text input format
 26* [CHICKEN Scheme][chicken website] module for parsing the format
 27* Work in progress tooling for interacting with files of this format
 28	* `readit`: Allows finding entries by field values.
 29	* `readit-graph`: Allows generating reference graphs.
 30
 31## Installation
 32
 33If a correctly configured chicken toolchain is available run:
 34
 35	$ chicken-install -test
 36
 37This will compile `readit` and add the binary to your `$PATH`.
 38Additionally, it will perform some basic functionality tests.
 39
 40### Building without installing
 41
 42If installation is not desired, build `readit` as follows:
 43
 44	$ export CHICKEN_REPOSITORY_PATH="${CHICKEN_REPOSITORY_PATH}:$(pwd)"
 45	$ chicken-install -n -test
 46
 47This will create a `readit` binary in the current working directory.
 48
 49## Syntax
 50
 51The input file is based on reading list entries with associated
 52information. Each entry consists of a current state, either read `x` or
 53unread `-`, a unique identifier, and a description (e.g. publication
 54title). Additionally, key-value pairs and notes can be optionally
 55associated with an entry, both must be indented by either 4 spaces or
 56one tab. The syntax of the input format is specified using parser
 57combinators in the file `parser.scm`.
 58
 59The optional key-value pairs are entirely user-chosen. Two special types
 60are provided for field values: References and sets. References are
 61enclosed in square brackets and contain (one or more) references to the
 62unique identifiers of other entries. Sets are collections of multiple
 63values, e.g. multiple author names, sets are specified using curly
 64brackets.
 65
 66The optional notes are separated from key-value pairs using an empty
 67line (even when fields are omitted). The reference and set literals
 68cannot currently be used in the notes section. At the moment, notes are
 69just uninterpreted plain text. As such, the note format is currently
 70entirely up to the user, it is (for example) possible to use markdown
 71syntax for notes.
 72
 73## Example
 74
 75Consider the following input file:
 76
 77	x [rfc7252]: The Constrained Application Protocol (CoAP)
 78		* Authors: {Zach Shelby, Klaus Hartke, Carsten Bormann}
 79
 80	- [rfc7228]: Terminology for Constrained-Node Networks
 81		* Authors: {Carsten Bormann, Mehmet Ersue, Ari Keranen}
 82		* DOI: 10.17487/RFC7228
 83		* Topics: {Internet of Things, Constrained Devices}
 84		* References: [rfc7252]
 85
 86		* Introduces different Internet of Things related terms
 87		* Differentiates different classes of constrained devices
 88
 89This file contains reading list entries for [RFC 7252][rfc7252] and
 90[RFC 7228][rfc7228]. Only the latter contains notes, both make use of
 91optional fields. Tooling is provided for finding entries by fields. For
 92example, to find a publication by a specific field value, e.g. a
 93publication with a specific `DOI`, the `readit` tool must be invoked as
 94follows:
 95
 96	$ readit -f test.readit -v "10.17487/RFC7228" DOI
 97	- [rfc7228]: Terminology for Constrained-Node Networks
 98
 99As the value of the `DOI` field is neither a reference nor a set, this
100query only matches entries providing a `DOI` field with this exact
101value. For set values the tool only checks if any element in the set
102matches the value. As an example, this can be used to find all
103publications co-authored by `Carsten Bormann`:
104
105	$ readit -f test.readit -v "Carsten Bormann" "Authors"
106	x [rfc7252]: The Constrained Application Protocol (CoAP)
107	- [rfc7228]: Terminology for Constrained-Node Networks
108
109To find all publications written by both `Carsten Bormann` and `Mehmet
110Ersue`, the `-v` flag can be passed more than once. For example:
111
112	$ readit -f test.readit -v "Carsten Bormann" -v "Mehmet Ersue" "Authors"
113	- [rfc7228]: Terminology for Constrained-Node Networks
114
115## License
116
117This program is free software: you can redistribute it and/or modify it
118under the terms of the GNU General Public License as published by the
119Free Software Foundation, either version 3 of the License, or (at your
120option) any later version.
121
122This program is distributed in the hope that it will be useful, but
123WITHOUT ANY WARRANTY; without even the implied warranty of
124MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
125Public License for more details.
126
127You should have received a copy of the GNU General Public License along
128with this program. If not, see <http://www.gnu.org/licenses/>.
129
130[chicken website]: https://call-cc.org/
131[rfc7252]: https://tools.ietf.org/html/rfc7252
132[rfc7228]: https://tools.ietf.org/html/rfc7228