3 1 > synchronise database access
4 [OK] Working SingleThreadModel servlet.
5 [OK] Later make the servlet requests threaded and read/write lock on the DB code.
6 Also the SingleThreadModel is deprecated to be discontinued after 2.4.
8 - test to ensure that simultaneous servlet updates are executed 1 at a time;
9 which testbench to use that tests mutiple threads and performance?
11 * cactus; http://jakarta.apache.org/cactus
12 - give initial state; 'bookkeeping.2.system.xml'
13 - give 2 data to add / update
14 - system should fill in entry and debit/credit ids.
15 - client must specify the correct journalid in the entry; an incorrect journalid should give an error
16 <journal:entry id="" entrynum="" state="" journalid="" date="">
17 <account:debit id="" amount="50.00" entryid="" accountid="1" account="office equipment"/>
18 <account:credit id="" amount="50.00" entryid="" accountid="3" account="bank"/>
21 <journal:entry id="" entrynum="" state="" journalid="" date="">
22 <account:debit id="" amount="70.00" entryid="" accountid="1" account="office equipment"/>
23 <account:credit id="" amount="70.00" entryid="1" accountid="3" account="bank"/>
26 - ensure BookkeepingSystem MODEL is reloaded
28 2 > web UI for bookkeeping
29 - linkedIn, blog, email signatures, facebook, skype, ycombinator
30 * links: donation, tell a friend
32 ** what 'look' do I want;
33 - very simple gmail-like vertical tabs ( www.gmail.com )
34 - simple information organisation & colour scheme ( del.icio.us )
35 - implicit, clean layout ( www.alistapart.com, openrico.org, www.informationarchitects.jp )
37 ** error handling on bad input / balance
40 3 > XML encryption & password shadowing
42 4 > ** code for collecting monies
43 - from donation, paid accounts
44 - via PayPal / Credit Cards (Authorize.net)
45 - design data structure / code that understands the difference between paid and unpaid accounts
47 5 > What functionalities go with a paid account
51 - ability to import / export data
52 - import / export <==> oe.quickbooks.com, mint.com, freshbooks.com
54 - bank reconciliation (bank, etrade, visa, american express)
57 - create / track invoices
59 6 > Attach data that represent physical records of an entry - images, pdfs , doc, rtf
60 7 > Schedule a time for the application to record an expense
64 >>>>>>>>>>>>>>>>>>>> MARKETING
66 - define product; ( easily organise your financial records from anywhere in the world )
68 - define market for online bookkeeping ( small businesses, entrepreneurs, accounting & bookkeeping firms );
69 - what bookkeeping problems are these clients having? ( forums: www.proseries.com )
70 - what would make thier life easier?
71 ** find accountants (accounting firm) to use / improve the product
73 - define competition ( Quickbooks Online Edition, www.netsuite.com, ... );
74 - where and how they are selling ( boring and tedious web ads )
75 - check out bookkeeping software
76 http://freshmeat.net/projects/dolphacct/
78 -> Quickbooks Online Edition
84 - free basic account; 5 accounts and 1 journal
85 - $5 / month for unlimited accounts & journals
89 - tools to tell friends
90 - consult with a good marketing person
93 >>>>>>>>>>>>>>>>>>>> LATER
96 ** commit semantics are a mess, use XPath / XQuery to find, save XML data
98 -- put 'notes' into the entry and debit/credit tokens
101 -- XQuery script to create XML:DB collection structure
103 -- loaded bob can update/augment data structure by calling a load method on itself (will require some redesisgn)
106 ** in 'bkeeping' ExpressionVisitor put add and remove in commands (now using the visitors)
107 ** in FindCommand, use the new com.interrupt.bookkeeping.cc.bkell.command.FindVisitor for a list of possible results
109 -- unit tests for save, load, delete, update
111 i. BookkeepingServlet
112 ii. TestPersistence.testBobRetrieve
115 -- 'Bob' support for xpath, xpointer, xquery, xupdate
118 -> exporting to excel is the best way; try ( http://jakarta.apache.org/poi/ )
119 -> other major accounting softw.:
120 [OK] QuickBooks, (et. al. accounting softw.);
121 * import/export excel
122 - uses a bloated, proprietary file format
124 * import/export excel
125 [x] Peachtree Bookkeeping
126 - doesn't import data
127 [OK] Simply Accounting;
130 -- WORKFLOW; write a simple workflow system
131 ? based on PNML (Petri Net Markup Language)
132 [x] 'bossa' does not enough documentation
133 - needed for when objects should be:
134 1) persisted when a transaction is CLOSED
137 [OK] write up a simple petri net diagram for
138 i) processing transaction (after adding many journal entries)
140 [x] rakiura-jfern-3.0.0
141 - designed to accomodate already built petri-net engines
143 Bossa can read the PNML files created by the Petri Net Kernel editor.
146 -- have a 'fitnesse' wiki to track
150 >>>>>>>>>>>>>>>>>>>> SELLING
152 Double-Entry Bookkeeping, meaning debit and credit Journal entries. This means that the software can track debit / credit accounts. So the user can use 'Bookkeeping' to maintain income, expense, asset, liability and capital accounts.
155 - Platform Independent; Windows, Linux, OS X
157 - Adding Journal Entries
158 - Reversing Journal entries
159 - Deleting Journal entries
160 - Easier Finding / Viewing / Ordering of Journal entries
162 - Preparing Taxes ( Canada, US, UK )
166 QuickBooks, ( .QIF file format )
167 Quicken ( .IIF file format )
169 Peachtree Bookkeeping
171 [NEW; all linux packages] SQL Ledger(http://www.sql-ledger.org/), GNUCash(), KMyMoney2()
174 - generating general ledgers for configured time periods ( Fiscal year )
175 - generating income and balance statements
176 - generating tax statements at the end of the tax year.
178 - Bank Reconciliation
186 >>>>>>>>>>>>>>>>>>>> ISSUES
188 - when closing an entry through a <transaction/>, there is currently not a way to guarantee that
189 each entry balances, before the transaction adds those entries to the corresponding <journal/>
192 - how to exchange data with QuickBooks, (et. al. accounting softw.)
193 -> All transactions are easily exportable to other programs as standard tab-delimited text files
195 - how to do Bank Reconciliation
197 - can Flash be the desktop UI? (can laszlo UI generate desktop windows)
199 - generating general ledgers for configured time periods
200 - generating income and balance statements
201 - generating tax statements at the end of the tax year.
203 - sort journal entries by... date, alphabet, etc
205 - or deleting entries
207 * see also 'bookkeeping.xml' and 'system.xml' for notes
209 * initially, there is 1 general journal
211 ** had to build a custom version of sablecc-anttask to get it to generate my classes
215 >>>>>>>>>>>>>>>>>>>> TECHNOLOGY lookups
217 [x] JDO vs. Hibernate vs. XML Database
218 Neither JDO, nor Hibernate provide full native XML persistence. However, hibernate has a feature that aims to map xml documents to DB data.
220 [x] Hibernate (for Obj/DB persistence)
223 http://www.rpbourret.com/xml/XMLAndDatabases.htm
224 http://www.rpbourret.com/xml/XMLDatabaseProds.htm#native
225 http://www.cse.iitk.ac.in/report-repository/2004/Y1043.pdf
226 XML:DB; native xml database ()
228 - http://exist.sourceforge.net/api/index.html
229 XQuery (http://www.w3.org/XML/Query)
231 [OK] workflow (to handle states of objects throughout different types of a process)
235 [x] Lucene (for text search)
242 >>>>>>>>>>>>>>>>>>>> COMPLETED
244 - try (java.rmi.dgc.VMID)
245 [DONE] debits and credits for all accounts
246 [DONE] list of accounts are always maintained by the system and persisted
247 [DONE] generate 'objectid'; for example, 'entrynum' for each entry
248 [DONE] each object in the system should have an id
250 [DONE] double entry bookkeeping
251 [DONE] debits equal credits for 1 transaction
252 [DONE] each debit/credit goes to an account
253 ** 'CloseAction' puts into correct account. make this
254 [DONE] make transaction/entry close() process separate from class (visitor)
255 [DONE] create 'Accounts' object/subsystem
257 [DONE] all transactions balance
258 [DONE] all accounts balance after transaction
259 [NOTE] a 'CLOSE' state
260 ** create 'Balance' objects
263 [DONE] income, expense, asset, liability and capital accounts
264 [later] a banking institution's books
265 [OK] find MAILING LIST to introduce bookkeeping; xml-dev (http://lists.xml.org/archives/xml-dev/)
267 [x] debits / credits should be in 1 place.
268 [OK] Leave them in <journal:entry/> and <account:account/> looks through all journals
269 [x] after time jounal entry list will get big
270 [OK] Keep <journal:entry/> <account:account/> division
271 [x] must constantly resolve debits / credits in <account:account/> with <journal:entry/>
275 -> Laszlo (www.laszlosystems.org); can deploy laszlo Java servlet engine
276 -> XUL (http://www.mozilla.org/projects/xul/)
277 - view journal entries
278 - sort journal entries
280 [OK] make debit/credit input component
281 [OK] make + / - buttons
282 [OK] make cancel / save buttons
283 [OK] open / close operations & Window workflow; incl. dbl-click & window popup
284 - add / remove operations (addNode,deleteNode)
285 - on Accounts, Journals & Entries
289 -> maintain 'namespace'
290 -> generate 'entrynums'
291 -> match date format w/ Java date format
293 - grid vertical & horizontal bounding
294 - preselect 'account' drop down (Account, Entry)
295 - put Application into 'Jetty'
296 - cleanup hardcoded values
299 [OK] native XML DATABASE
301 - xml / relational mapping too messy
303 - default implementation does not map to xml datastore
304 [x] Hibernate [native xml]
307 [x] Prevaler; object Prevalence for Java
309 - xmldb:exist://localhost:8080/exist/xmlrpc
311 [OK] need examples of <journal:entry />
312 [OK] make a java program to connects to database
313 [OK] adding / retrieving xml from DB
315 [OK] adding journal entries
316 [OK] retrieving journal entries
317 [OK] updating entries ( affected by any reversals )
320 6) updating account data ( affected by <journal:entry /> )
322 [OK] ?? How to maintain the relationships between xml nodes
323 [OK] don't maintain relationships; let application do that.
326 [OK] ?? Should journal entries be
327 [OK] separate documents
328 ii) all in 1 document
330 [OK] ?? is an XML:DB collection also a document
334 [DONE] only 'run-gen' if there is no created files
335 [DONE] fix classpath referencing
337 [DONE] figure out a way to have an implicit way to set 'counterWeight' ( bookkeeping.system.xml )
339 [DONE] split -def / -sys (Bob)
340 [DONE] need a cleaner way to access handler input values ( Bob; bob.system.xml )
342 [DONE] create Users, Authentication & Authorization
347 [OK] close a set of entries ( transaction )
350 [OK] reverse an entry
354 [OK] by a date // MM/dd/yyyy HH:mm:ss z
357 [OK] before and after date
359 - add / find / remove <Journals/>
360 - add / find / remove <Accounts/>
363 [DONE] do not make 'Accounts' a singleton;
364 [DONE] make <Accounts/> and <Journals/> 1 entity per <bookkeeping/> (root) node.
366 TestActions, TestGeneral, TestTransaction / Entry, Transaction
370 [OK] scheme for naming xml docs inside eXist
371 [OK] specify toXML depth in Bob
372 [OK] prefix namespace in Bob.toXML()
374 [OK] loading 'Bookkeeping' from XML data store
375 [OK] saving 'Bookkeeping' to XML data store
379 [OK] Strategy for dividing <bookkeeping/> XML into separate pieces
380 I think Accounts, Journals, and Transactions should be in
381 separate documents, per user -> this has been achieved in the XML
383 [OK] Strategy for CRUDing XML w/ native XML database 'eXist'
384 - for now, the UI and 'Bob' model will talk to each other.
385 - There will be a commit method for changed nodes after a command has been run.
388 [DONE] finish 'reverse' command
389 [OK] this involves i) changing the ReverseCommand to set the receiver token's parent <entries/>
390 [OK] 'entries' is a new token in the system
393 [DONE] variables; (this feature of course ties b'keeping to 'bkell'; loading/saving to 'XML:DB'; and XML to 'Bob' )
394 - variables [are NOT loosely typed] a variable can be XML
395 - automatic variable is the result of the last command run
396 - @variableName can be assigned to i) the last run command or ii) as the result of an expression
397 [OK] define variable syntax
398 [OK] Expression visitor gets/sets variables in command shell (bkell)
401 [DONE] put 'account' attribute in debit/credit
402 - now adding entrie tries to use the 'accountid', then the 'account' attributes of the <debit/> and <credit/> tags
405 [DONE] Bookkeeping 'Shell' & 'Command Set' for executing functionality
406 [OK] go through all usage scenarios for using 'Bookkeeping'
407 [OK] design little grammar for 'Bookkeeping'
411 [DONE] 'print' command ( for variables )
413 [DONE] finish commit command
414 -- variable names with same name should overwrite previous
415 -- reading the previous command variable - '@@'
416 -- use XML:DB transactions where if something fails, I can roll back
419 [DONE] ** --> 'Action' interfaces for:
420 [todo] a set of executed commands should be recorded in a shell (bean shell, rhino, -- none, custom shell).
421 an implicit transaction
423 [ok] ADD / REMOVE / REVERSE
424 [ok] UPDATE - figure out the syntax for this
425 ** LOAD - implicit at system loading
428 ** LOGIN - implement later
429 ** LOGOUT - implement later
430 [ok] EXIT - implemented in the Bkell itself.
433 ** COMMIT save in memory XML to the database
435 autocommit (true/false); creating or updating an xml will only affect in memory XML unless this is set to true
437 [OK] tag PreAlpha bookkeeping
438 [Projec-Version-Date]
439 bookkeeping-PreAlpha-06082007
441 [OK] create 'bookkeeping' user
442 [OK] System should start with a default system, users, bookkeeping/accounts/journals/transactions
444 [OK] clean up DB access code to use configured credentials
445 - no explicit file referencing
446 [OK] create a clean system initialisation procedure: Authentication, Bookkeeping System, Bkell
447 BookkeepingSystem -> Spittoon
449 [OK] introduce many currencies; a currency can only balance against itself
450 [OK] refactor Account / Journal debit and credit to be pointers to a separate node
451 [DONE] > Authentication & Authorisation code
452 [x] separate servlet to handle authentication, adding and removing of users
454 - make it thread-enabled
456 [OK] REFACTOR XMLs to use new 'bookkeeping.system.xml' model - bookkeeping books will be kept in groups!!!
459 [DONE] refactor actions to all use Action interface; and all Actions use Authetication and Authorisation
460 code. Authentication and Authorisation code should use a Mediator pattern where an Action adapter or
461 client (webkell, servlets; bkell, shell/SableCC) call Actions though the Mediator. The Mediator
462 would authenticate and authorise the calling code.
464 [x] remove the idea of a commit when adding / updating. Just add debit / credit to an entry.
465 - a separate servlet will control the authentication, adding and removing of users;
466 authentication / authorisation information is transfered to client
468 - with authentication / authorisation information in the servlet client, the client can handle
469 session, and authorisation rules. Those rules should be discarded at the end of the servlet's lifecycle.
471 -- test for DB update / retrieval for a given user
473 - new commands must be created in bkeeping/bkell to
474 1. run the shell as a particular user or
475 2. login / logout as a particular user
477 [DONE] have SableCC code call updated Action interface
478 ** Put Aauthentication into these places
480 [OK] Free Java Hosting service
484 -- unit tests for DSL code
485 [x] upgrade to SabelCC 4
486 - Sablecc end of expression parsing; getting rid of EOF (SSableCC 4)
487 - having shell take input (for history, etc), forward it to lexer
488 - map the newline to EOF
489 - make newline an expresion terminal
490 [x] wait for SableCC4
491 [OK]- bkell functional tests
492 - webkell functional tests
494 [X] auto-commit on/off
495 auto commit on commands:
496 add, create, remove, reverse
497 set auto-complete variable in the bkell environment; everytime a command is run,
498 [OK] it puts the result as a variable in the shell
499 - it is auto-committed if applicable
500 ** we don't necessarily want the entire bookkeeping system in memory, so load and save only chunks of XML
502 [OK] PERSISTENCE LAYER; 'Something' that figures out the persistent lifecycle of my objects
503 ** hardcoding it for now.
504 i) connection pooling
506 iii) transaction management
508 [OK] Store data online / offline ( locally )
512 >>>>>>>>>>>>>>>>>>>> GOALS
514 [x] Making a package for small businesses
515 [OK] make 'bookeeping' usable to the point of
516 i) demonstration; proof of concept
517 ii) giving potentials a toy to play with
519 -> UI for 'entry'; add / find / update / reverse / delete
520 -> installer that puts (eXist, laszlo, java, & bookkeeping) onto system
521 [OK] EXAMPLE journal entries for a year
525 >>>>>>>>>>>>>>>>>>>> SCRATCH...
527 *) javac -classpath /Applications/eXist/exist.jar:/Applications/eXist/exist-optional.jar:/System/Library/Frameworks/JavaVM.framework/Home/lib/dt.jar:/Applications/eXist/lib/core/xmldb.jar CreateResource.java
528 *) java -classpath .:/Applications/eXist/exist.jar:/Applications/eXist/exist-optional.jar:/Applications/eXist/lib/core/xmlrpc-1.2-patched.jar:/System/Library/Frameworks/JavaVM.framework/Home/lib/dt.jar:/Applications/eXist/lib/core/xmldb.jar CreateResource /db/bookkeeping/ data/buyequipment.xml
529 *) for (Iterator it = allMovies.iterator(); it.hasNext();) {