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 4 > ** code for collecting monies
29 - from donation, paid accounts
30 - via PayPal / Credit Cards (Authorize.net)
31 - design data structure / code that understands the difference between paid and unpaid accounts
33 5 > What functionalities go with a paid account
37 - ability to import / export data
38 - import / export <==> oe.quickbooks.com, mint.com, freshbooks.com
40 - bank reconciliation (bank, etrade, visa, american express)
43 - create / track invoices
45 6 > Attach data that represent physical records of an entry - images, pdfs , doc, rtf
46 7 > Schedule a time for the application to record an expense
50 >>>>>>>>>>>>>>>>>>>> MARKETING
52 - define product; ( easily organise your financial records from anywhere in the world )
54 - define market for online bookkeeping ( small businesses, entrepreneurs, accounting & bookkeeping firms );
55 - what bookkeeping problems are these clients having? ( forums: www.proseries.com )
56 - what would make thier life easier?
57 ** find accountants (accounting firm) to use / improve the product
59 - define competition ( Quickbooks Online Edition, www.netsuite.com, ... );
60 - where and how they are selling ( boring and tedious web ads )
61 - check out bookkeeping software
62 http://freshmeat.net/projects/dolphacct/
64 -> Quickbooks Online Edition
70 - free basic account; 5 accounts and 1 journal
71 - $5 / month for unlimited accounts & journals
75 - tools to tell friends
76 - consult with a good marketing person
79 >>>>>>>>>>>>>>>>>>>> LATER
82 ** commit semantics are a mess, use XPath / XQuery to find, save XML data
84 -- put 'notes' into the entry and debit/credit tokens
87 -- XQuery script to create XML:DB collection structure
89 -- loaded bob can update/augment data structure by calling a load method on itself (will require some redesisgn)
92 ** in 'bkeeping' ExpressionVisitor put add and remove in commands (now using the visitors)
93 ** in FindCommand, use the new com.interrupt.bookkeeping.cc.bkell.command.FindVisitor for a list of possible results
95 -- unit tests for save, load, delete, update
98 ii. TestPersistence.testBobRetrieve
101 -- 'Bob' support for xpath, xpointer, xquery, xupdate
104 -> exporting to excel is the best way; try ( http://jakarta.apache.org/poi/ )
105 -> other major accounting softw.:
106 [OK] QuickBooks, (et. al. accounting softw.);
107 * import/export excel
108 - uses a bloated, proprietary file format
110 * import/export excel
111 [x] Peachtree Bookkeeping
112 - doesn't import data
113 [OK] Simply Accounting;
116 -- WORKFLOW; write a simple workflow system
117 ? based on PNML (Petri Net Markup Language)
118 [x] 'bossa' does not enough documentation
119 - needed for when objects should be:
120 1) persisted when a transaction is CLOSED
123 [OK] write up a simple petri net diagram for
124 i) processing transaction (after adding many journal entries)
126 [x] rakiura-jfern-3.0.0
127 - designed to accomodate already built petri-net engines
129 Bossa can read the PNML files created by the Petri Net Kernel editor.
132 -- have a 'fitnesse' wiki to track
136 >>>>>>>>>>>>>>>>>>>> SELLING
138 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.
141 - Platform Independent; Windows, Linux, OS X
143 - Adding Journal Entries
144 - Reversing Journal entries
145 - Deleting Journal entries
146 - Easier Finding / Viewing / Ordering of Journal entries
148 - Preparing Taxes ( Canada, US, UK )
152 QuickBooks, ( .QIF file format )
153 Quicken ( .IIF file format )
155 Peachtree Bookkeeping
157 [NEW; all linux packages] SQL Ledger(http://www.sql-ledger.org/), GNUCash(), KMyMoney2()
160 - generating general ledgers for configured time periods ( Fiscal year )
161 - generating income and balance statements
162 - generating tax statements at the end of the tax year.
164 - Bank Reconciliation
172 >>>>>>>>>>>>>>>>>>>> ISSUES
174 - when closing an entry through a <transaction/>, there is currently not a way to guarantee that
175 each entry balances, before the transaction adds those entries to the corresponding <journal/>
178 - how to exchange data with QuickBooks, (et. al. accounting softw.)
179 -> All transactions are easily exportable to other programs as standard tab-delimited text files
181 - how to do Bank Reconciliation
183 - can Flash be the desktop UI? (can laszlo UI generate desktop windows)
185 - generating general ledgers for configured time periods
186 - generating income and balance statements
187 - generating tax statements at the end of the tax year.
189 - sort journal entries by... date, alphabet, etc
191 - or deleting entries
193 * see also 'bookkeeping.xml' and 'system.xml' for notes
195 * initially, there is 1 general journal
197 ** had to build a custom version of sablecc-anttask to get it to generate my classes
201 >>>>>>>>>>>>>>>>>>>> TECHNOLOGY lookups
203 [x] JDO vs. Hibernate vs. XML Database
204 Neither JDO, nor Hibernate provide full native XML persistence. However, hibernate has a feature that aims to map xml documents to DB data.
206 [x] Hibernate (for Obj/DB persistence)
209 http://www.rpbourret.com/xml/XMLAndDatabases.htm
210 http://www.rpbourret.com/xml/XMLDatabaseProds.htm#native
211 http://www.cse.iitk.ac.in/report-repository/2004/Y1043.pdf
212 XML:DB; native xml database ()
214 - http://exist.sourceforge.net/api/index.html
215 XQuery (http://www.w3.org/XML/Query)
217 [OK] workflow (to handle states of objects throughout different types of a process)
221 [x] Lucene (for text search)
228 >>>>>>>>>>>>>>>>>>>> COMPLETED
230 - try (java.rmi.dgc.VMID)
231 [DONE] debits and credits for all accounts
232 [DONE] list of accounts are always maintained by the system and persisted
233 [DONE] generate 'objectid'; for example, 'entrynum' for each entry
234 [DONE] each object in the system should have an id
236 [DONE] double entry bookkeeping
237 [DONE] debits equal credits for 1 transaction
238 [DONE] each debit/credit goes to an account
239 ** 'CloseAction' puts into correct account. make this
240 [DONE] make transaction/entry close() process separate from class (visitor)
241 [DONE] create 'Accounts' object/subsystem
243 [DONE] all transactions balance
244 [DONE] all accounts balance after transaction
245 [NOTE] a 'CLOSE' state
246 ** create 'Balance' objects
249 [DONE] income, expense, asset, liability and capital accounts
250 [later] a banking institution's books
251 [OK] find MAILING LIST to introduce bookkeeping; xml-dev (http://lists.xml.org/archives/xml-dev/)
253 [x] debits / credits should be in 1 place.
254 [OK] Leave them in <journal:entry/> and <account:account/> looks through all journals
255 [x] after time jounal entry list will get big
256 [OK] Keep <journal:entry/> <account:account/> division
257 [x] must constantly resolve debits / credits in <account:account/> with <journal:entry/>
261 -> Laszlo (www.laszlosystems.org); can deploy laszlo Java servlet engine
262 -> XUL (http://www.mozilla.org/projects/xul/)
263 - view journal entries
264 - sort journal entries
266 [OK] make debit/credit input component
267 [OK] make + / - buttons
268 [OK] make cancel / save buttons
269 [OK] open / close operations & Window workflow; incl. dbl-click & window popup
270 - add / remove operations (addNode,deleteNode)
271 - on Accounts, Journals & Entries
275 -> maintain 'namespace'
276 -> generate 'entrynums'
277 -> match date format w/ Java date format
279 - grid vertical & horizontal bounding
280 - preselect 'account' drop down (Account, Entry)
281 - put Application into 'Jetty'
282 - cleanup hardcoded values
285 [OK] native XML DATABASE
287 - xml / relational mapping too messy
289 - default implementation does not map to xml datastore
290 [x] Hibernate [native xml]
293 [x] Prevaler; object Prevalence for Java
295 - xmldb:exist://localhost:8080/exist/xmlrpc
297 [OK] need examples of <journal:entry />
298 [OK] make a java program to connects to database
299 [OK] adding / retrieving xml from DB
301 [OK] adding journal entries
302 [OK] retrieving journal entries
303 [OK] updating entries ( affected by any reversals )
306 6) updating account data ( affected by <journal:entry /> )
308 [OK] ?? How to maintain the relationships between xml nodes
309 [OK] don't maintain relationships; let application do that.
312 [OK] ?? Should journal entries be
313 [OK] separate documents
314 ii) all in 1 document
316 [OK] ?? is an XML:DB collection also a document
320 [DONE] only 'run-gen' if there is no created files
321 [DONE] fix classpath referencing
323 [DONE] figure out a way to have an implicit way to set 'counterWeight' ( bookkeeping.system.xml )
325 [DONE] split -def / -sys (Bob)
326 [DONE] need a cleaner way to access handler input values ( Bob; bob.system.xml )
328 [DONE] create Users, Authentication & Authorization
333 [OK] close a set of entries ( transaction )
336 [OK] reverse an entry
340 [OK] by a date // MM/dd/yyyy HH:mm:ss z
343 [OK] before and after date
345 - add / find / remove <Journals/>
346 - add / find / remove <Accounts/>
349 [DONE] do not make 'Accounts' a singleton;
350 [DONE] make <Accounts/> and <Journals/> 1 entity per <bookkeeping/> (root) node.
352 TestActions, TestGeneral, TestTransaction / Entry, Transaction
356 [OK] scheme for naming xml docs inside eXist
357 [OK] specify toXML depth in Bob
358 [OK] prefix namespace in Bob.toXML()
360 [OK] loading 'Bookkeeping' from XML data store
361 [OK] saving 'Bookkeeping' to XML data store
365 [OK] Strategy for dividing <bookkeeping/> XML into separate pieces
366 I think Accounts, Journals, and Transactions should be in
367 separate documents, per user -> this has been achieved in the XML
369 [OK] Strategy for CRUDing XML w/ native XML database 'eXist'
370 - for now, the UI and 'Bob' model will talk to each other.
371 - There will be a commit method for changed nodes after a command has been run.
374 [DONE] finish 'reverse' command
375 [OK] this involves i) changing the ReverseCommand to set the receiver token's parent <entries/>
376 [OK] 'entries' is a new token in the system
379 [DONE] variables; (this feature of course ties b'keeping to 'bkell'; loading/saving to 'XML:DB'; and XML to 'Bob' )
380 - variables [are NOT loosely typed] a variable can be XML
381 - automatic variable is the result of the last command run
382 - @variableName can be assigned to i) the last run command or ii) as the result of an expression
383 [OK] define variable syntax
384 [OK] Expression visitor gets/sets variables in command shell (bkell)
387 [DONE] put 'account' attribute in debit/credit
388 - now adding entrie tries to use the 'accountid', then the 'account' attributes of the <debit/> and <credit/> tags
391 [DONE] Bookkeeping 'Shell' & 'Command Set' for executing functionality
392 [OK] go through all usage scenarios for using 'Bookkeeping'
393 [OK] design little grammar for 'Bookkeeping'
397 [DONE] 'print' command ( for variables )
399 [DONE] finish commit command
400 -- variable names with same name should overwrite previous
401 -- reading the previous command variable - '@@'
402 -- use XML:DB transactions where if something fails, I can roll back
405 [DONE] ** --> 'Action' interfaces for:
406 [todo] a set of executed commands should be recorded in a shell (bean shell, rhino, -- none, custom shell).
407 an implicit transaction
409 [ok] ADD / REMOVE / REVERSE
410 [ok] UPDATE - figure out the syntax for this
411 ** LOAD - implicit at system loading
414 ** LOGIN - implement later
415 ** LOGOUT - implement later
416 [ok] EXIT - implemented in the Bkell itself.
419 ** COMMIT save in memory XML to the database
421 autocommit (true/false); creating or updating an xml will only affect in memory XML unless this is set to true
423 [OK] tag PreAlpha bookkeeping
424 [Projec-Version-Date]
425 bookkeeping-PreAlpha-06082007
427 [OK] create 'bookkeeping' user
428 [OK] System should start with a default system, users, bookkeeping/accounts/journals/transactions
430 [OK] clean up DB access code to use configured credentials
431 - no explicit file referencing
432 [OK] create a clean system initialisation procedure: Authentication, Bookkeeping System, Bkell
433 BookkeepingSystem -> Spittoon
435 [OK] introduce many currencies; a currency can only balance against itself
436 [OK] refactor Account / Journal debit and credit to be pointers to a separate node
437 [DONE] > Authentication & Authorisation code
438 [x] separate servlet to handle authentication, adding and removing of users
440 - make it thread-enabled
442 [OK] REFACTOR XMLs to use new 'bookkeeping.system.xml' model - bookkeeping books will be kept in groups!!!
445 [DONE] refactor actions to all use Action interface; and all Actions use Authetication and Authorisation
446 code. Authentication and Authorisation code should use a Mediator pattern where an Action adapter or
447 client (webkell, servlets; bkell, shell/SableCC) call Actions though the Mediator. The Mediator
448 would authenticate and authorise the calling code.
450 [x] remove the idea of a commit when adding / updating. Just add debit / credit to an entry.
451 - a separate servlet will control the authentication, adding and removing of users;
452 authentication / authorisation information is transfered to client
454 - with authentication / authorisation information in the servlet client, the client can handle
455 session, and authorisation rules. Those rules should be discarded at the end of the servlet's lifecycle.
457 -- test for DB update / retrieval for a given user
459 - new commands must be created in bkeeping/bkell to
460 1. run the shell as a particular user or
461 2. login / logout as a particular user
463 [DONE] have SableCC code call updated Action interface
464 ** Put Aauthentication into these places
466 [OK] Free Java Hosting service
470 -- unit tests for DSL code
471 [x] upgrade to SabelCC 4
472 - Sablecc end of expression parsing; getting rid of EOF (SSableCC 4)
473 - having shell take input (for history, etc), forward it to lexer
474 - map the newline to EOF
475 - make newline an expresion terminal
476 [x] wait for SableCC4
477 [OK]- bkell functional tests
478 - webkell functional tests
480 [X] auto-commit on/off
481 auto commit on commands:
482 add, create, remove, reverse
483 set auto-complete variable in the bkell environment; everytime a command is run,
484 [OK] it puts the result as a variable in the shell
485 - it is auto-committed if applicable
486 ** we don't necessarily want the entire bookkeeping system in memory, so load and save only chunks of XML
488 [OK] PERSISTENCE LAYER; 'Something' that figures out the persistent lifecycle of my objects
489 ** hardcoding it for now.
490 i) connection pooling
492 iii) transaction management
494 [OK] Store data online / offline ( locally )
496 [OK] web UI for bookkeeping
497 - linkedIn, blog, email signatures, facebook, skype, ycombinator
498 * links: donation, tell a friend
500 ** what 'look' do I want;
501 - very simple gmail-like vertical tabs ( www.gmail.com )
502 - simple information organisation & colour scheme ( del.icio.us )
503 - implicit, clean layout ( www.alistapart.com, openrico.org, www.informationarchitects.jp )
505 ** error handling on bad input / balance
508 [x] XML encryption & password shadowing ; using SSL
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();) {