docs: developer notes, roadmap notes
This commit is contained in:
parent
599398baa3
commit
5f82a9cd6b
108
NOTES
108
NOTES
@ -9,7 +9,7 @@ hledger project notes
|
|||||||
** measure
|
** measure
|
||||||
** test continuously, test everything
|
** test continuously, test everything
|
||||||
** less is more
|
** less is more
|
||||||
** pair programming
|
** pair programming/code review
|
||||||
** inspiration
|
** inspiration
|
||||||
"...simplicity of design was the most essential, guiding principle.
|
"...simplicity of design was the most essential, guiding principle.
|
||||||
Clarity of concepts, economy of features, efficiency and reliability of
|
Clarity of concepts, economy of features, efficiency and reliability of
|
||||||
@ -91,6 +91,31 @@ clever tricks like the plague." --Edsger Dijkstra
|
|||||||
***** a tour of hledger's code
|
***** a tour of hledger's code
|
||||||
**** ledger cooperation
|
**** ledger cooperation
|
||||||
*** developer docs
|
*** developer docs
|
||||||
|
**** roadmap
|
||||||
|
***** 1.0
|
||||||
|
culmination of 0.x releases - stable/usable/documented
|
||||||
|
followup releases are 1.01, 1.02..
|
||||||
|
GHC 6.10/HP 2009 primary platform
|
||||||
|
GHC 6.12/HP 2010 also supported if possible
|
||||||
|
GHC 6.8 might work for core features, but not officially supported
|
||||||
|
separate ledger package ? license ?
|
||||||
|
separate vty, web packages ?
|
||||||
|
support plugins ?
|
||||||
|
web: loli+hsp+hack+simpleserver/happstack, or yesod+hstringtemplate+wai+simpleserver(/happstack) ?
|
||||||
|
add: completion ?
|
||||||
|
chart: register charts ?
|
||||||
|
histogram: cleaned up/removed
|
||||||
|
complete user manual
|
||||||
|
binaries for all platforms ?
|
||||||
|
|
||||||
|
***** 2.0
|
||||||
|
development releases are.. 1.60, 1.61.. or 1.98.01, 1.98.02..
|
||||||
|
separate ledger lib
|
||||||
|
plugins
|
||||||
|
Decimal
|
||||||
|
binaries for all platforms
|
||||||
|
|
||||||
|
|
||||||
**** internal api docs
|
**** internal api docs
|
||||||
**** external api docs
|
**** external api docs
|
||||||
**** DEVGUIDE
|
**** DEVGUIDE
|
||||||
@ -362,17 +387,18 @@ competitors/fellow niche inhabitants
|
|||||||
**** usability
|
**** usability
|
||||||
**** download & usage stats
|
**** download & usage stats
|
||||||
** errors
|
** errors
|
||||||
*** parsing: rules file with trailing whitespace
|
*** better leap year checking
|
||||||
*** parsing: rules file with comment paragraphs but no rules
|
ledger:
|
||||||
unexpected end of input
|
While parsing file "/Users/simon/personal/2010.ledger", line 442:
|
||||||
expecting blank line or comment line
|
While parsing transaction:
|
||||||
*** parsing: comment lines immediately after postings
|
> 2/27=2/29 (20100201ucla) ucla payment
|
||||||
*** parsing: accept all real-world ledger files
|
Error: Day of month is not valid for year
|
||||||
|
|
||||||
** refactoring, code cleanup
|
** refactoring, code cleanup
|
||||||
*** pair programming
|
*** more modularity
|
||||||
*** seek more modularity
|
**** plugin strategy
|
||||||
*** try export lists
|
**** export lists
|
||||||
*** graph and reduce dependencies
|
**** graph and reduce dependencies
|
||||||
*** clarify levels of abstraction
|
*** clarify levels of abstraction
|
||||||
**** balance sheet view - data model, view layout
|
**** balance sheet view - data model, view layout
|
||||||
**** hledger web framework - define routes, handlers/views/actions/controllers/presenters, skins/styles..
|
**** hledger web framework - define routes, handlers/views/actions/controllers/presenters, skins/styles..
|
||||||
@ -388,19 +414,26 @@ expecting blank line or comment line
|
|||||||
*** inspiration
|
*** inspiration
|
||||||
http://community.haskell.org/~ndm/downloads/paper-hoogle_overview-19_nov_2008.pdf -> Design Guidelines
|
http://community.haskell.org/~ndm/downloads/paper-hoogle_overview-19_nov_2008.pdf -> Design Guidelines
|
||||||
** features
|
** features
|
||||||
|
*** Double -> Decimal
|
||||||
*** parsing: safety check that effective date > actual (to catch eg 2009/12/30=1/4)
|
*** parsing: safety check that effective date > actual (to catch eg 2009/12/30=1/4)
|
||||||
*** parsing: in effective date use actual date for defaults
|
*** parsing: accept all real-world ledger files
|
||||||
*** web: filter patterns
|
As far as I know it currently accepts all ledger 2.6-era files.
|
||||||
period doesn't work anywhere
|
Add support for ledger 3 file format as/when that stabilises.
|
||||||
account doesn't work on balance
|
It would be nice to optionally report/upload parse errors when they happen.
|
||||||
can't filter by description
|
*** talkback feature
|
||||||
|
gather data on real-world installation & usage issues
|
||||||
|
simplify bug reporting/handling
|
||||||
|
improve reliability
|
||||||
|
*** upload feature
|
||||||
|
*** payee & account anonymisation
|
||||||
*** easier timelog formats
|
*** easier timelog formats
|
||||||
*** implicit timelog account
|
*** implicit timelog account
|
||||||
*** easy data entry
|
*** add: completion etc.
|
||||||
*** assume current year as default
|
*** convert: generalise/reuse add's history awareness
|
||||||
|
*** web: charts (Chart or google)
|
||||||
*** wide/customisable/consistent layout
|
*** wide/customisable/consistent layout
|
||||||
*** --flat balance report format
|
*** --flat balance report format
|
||||||
*** effective/actual? dates for postings
|
*** effective/actual dates for postings
|
||||||
*** better web ui/gui
|
*** better web ui/gui
|
||||||
*** nice reports with charts
|
*** nice reports with charts
|
||||||
*** ledger-compatible xml output ?
|
*** ledger-compatible xml output ?
|
||||||
@ -418,8 +451,41 @@ import Codec.Binary.UTF8.String (encodeString, decodeString)
|
|||||||
import Data.ByteString.UTF8 (fromString, toString)
|
import Data.ByteString.UTF8 (fromString, toString)
|
||||||
import Data.ByteString.Char8 (pack, unpack)
|
import Data.ByteString.Char8 (pack, unpack)
|
||||||
import Data.Text.Encoding (decodeUtf8)
|
import Data.Text.Encoding (decodeUtf8)
|
||||||
*** speed
|
*** speed, memory usage
|
||||||
*** clear interfaces/surfaces/plugin architecture
|
*** clear, documented interfaces/surfaces
|
||||||
|
*** plugin architecture/modular packaging
|
||||||
|
**** goals
|
||||||
|
***** allow separately-packaged functionality to be discovered at run-time and integrated within the hledger ui.
|
||||||
|
Example: user installs hledger-ofx package from hackage, or adds Ofx.hs to their ~/.hledger/plugins/;
|
||||||
|
then "ofx" is among the commands listed by hledger --help, and/or is a new command available in
|
||||||
|
the web and vty interfaces, and/or is a new file format understood by the convert command.
|
||||||
|
**** issues to consider
|
||||||
|
***** what is the api for plugins ?
|
||||||
|
they'll want to import Ledger lib, to work with ledger data structures
|
||||||
|
|
||||||
|
***** there are different kinds of "plugin". What could plugins provide ?
|
||||||
|
****** commands - for all uis, or for one or more of them (cli, web, vty..). A command may itself be a new ui.
|
||||||
|
****** import/export formats
|
||||||
|
****** skins/styles/templates for uis, eg the web ui ?
|
||||||
|
**** techniques to consider
|
||||||
|
***** running executables provided by plugins
|
||||||
|
a cli command plugin: cli execs the executable with same arguments
|
||||||
|
a web command plugin: web ui runs the executable as a subprocess and captures the output
|
||||||
|
***** linking plugins into main app with direct-plugins
|
||||||
|
simplification of plugins lib
|
||||||
|
main app needs to know the types used in plugin's interface
|
||||||
|
weakens type safety, avoiding runtime errors requires extra care
|
||||||
|
requires whole-program linking at plugin load time
|
||||||
|
plugins can be discovered by querying ghc for installed packages or modules in a known part of the hierarchy
|
||||||
|
maintained and keen to help
|
||||||
|
***** linking plugins into main app with plugins (original)
|
||||||
|
more complex than above
|
||||||
|
more type-safe/featureful ?
|
||||||
|
***** interpreting plugins under control of main app with hint
|
||||||
|
ghci in an IO-like monad
|
||||||
|
types need converting, etc.
|
||||||
|
plugins may run more slowly
|
||||||
|
plugins can be discovered/loaded by module path or by loading files directly
|
||||||
|
|
||||||
* misc
|
* misc
|
||||||
** things I want to know
|
** things I want to know
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user