New article: Trubanc Server Working
[loomclient.git] / loomsheet / design.txt
blob38e7e7e5880af3f686e55b14522c7980a1d50af7
1 ;-*- mode: Outline; fill-column: 80; -*-
3 * Note
5 This file is designed to be edited with Emacs. The lines beginning with asterisks define an outline structure. Table mode (table-recognize near the end of the file) makes editing the tables fairly easy.
7 * Loomsheet Concept
9 Loomsheet is a personal information manager with synchronization to external sources. The basic unit of information is the table, a table has rows & columns, and properties, including a current sort. Columns in a table have a label, a type, and a source. The type and the source control how the value in a cell is synchronized with the world outside of Loomsheet.
11 ** Example
13 Here's a depiction in table form of a Loom folder. Note that this can support multiple folders in a single view.
15 +-------------------+----------------------+---------------------+-----------+
16 |      FOLDER       |       LOCATION       |        ASSET        |   VALUE   |
17 +-------------------+----------------------+---------------------+-----------+
18 | Bill St. Clair    | Bill St. Clair       | GoldNow GoldGrams   | 20.700    |
19 +-------------------+----------------------+---------------------+-----------+
20 | Bill St. Clair    | Bill St. Clair       | Usage Tokens        | 30        |
21 +-------------------+----------------------+---------------------+-----------+
22 | Bill St. Clair    | Safe                 | GoldNow GoldGrams   | 200.000   |
23 +-------------------+----------------------+---------------------+-----------+
24 | Bill St. Clair    | Safe                 | Patrick GoldGrams   | 50.000    |
25 +-------------------+----------------------+---------------------+-----------+
27 In practice, when a table is sorted canonically, by column from left to right, the repeated values in a column are ommitted from the display, but this is an option:
29 +-------------------+----------------------+---------------------+-----------+
30 |      FOLDER       |       LOCATION       |        ASSET        |   VALUE   |
31 +-------------------+----------------------+---------------------+-----------+
32 | Bill St. Clair    | Bill St. Clair       | GoldNow GoldGrams   | 20.700    |
33 +-------------------+----------------------+---------------------+-----------+
34 |                   |                      | Usage Tokens        | 30        |
35 +-------------------+----------------------+---------------------+-----------+
36 |                   | Safe                 | GoldNow GoldGrams   | 200.000   |
37 +-------------------+----------------------+---------------------+-----------+
38 |                   |                      | Patrick GoldGrams   | 200.000   |
39 +-------------------+----------------------+---------------------+-----------+
41 Conditionally omitting rows from the display is an option. For example, both tables above omit the zero value for "Patrick GoldGrams" from the "Bill St. Clair" location.
43 Conditionally omitting columns is also supported. The FOLDER and LOCATION columns values above are really just the assigned labels for Loom 128-bit locations and the ASSET column values are labels for 128-bit asset IDs. Those 32-char hex values are in the table, or an associated table, as additional columns, and are used to synchronize the user labels, but are not shown.
45 ** Synchronization
47 There are a number of types of synchronization.
49 Loom Folder values, stored locally, need to be synchronized with the actual values from Loom, and discrepancies reported, likely with a mode to parse the Loom transaction log, if there, and accept differences that are accountable there. This recognizes when a location has been discovered, but the folder itself has not been compromised.
51 Exchange rate tables need to be synchronized with reality, using a web service, or HTML parser. This reveals the need for automatic periodic synchronization, and table properties to record them. Also, some column types are synchronized wherever they appear.
53 Some tables are synchronized by computations based on the values of other tables. Adding a "Dollar Value" column to your Loom folder, could multiply the value by the dollars/asset of the asset type.
55 The entire system is really a big, multi-page spreadsheet, where values can change based on synchronization with external sources, and be propogated around. Hence the name, Loom + spreadsheet = Loomsheet.
57 ** Commands
59 There need to be a number of different ways of manipulating the tables. Here are a few examples:
61 *** Direct Entry
63 Many of the cell values are plain old text. An address book, for example (synchronized, of course, with the built-in address book app on your computer).
65 *** Rename
67 The Labels on locations and asset types can be changed. Right-click on a name, select "Rename" from the pop-up menu, and type a new label.
69 *** Transfer
71 Move an asset from one Loom location to another. Right-click on the origin row, select "Move" from the pop-up menu, type an amount, and click on the destination row. Confirmation if so configured, likely by default.
73 *** Trade
75 Transfer, plus a background task that looks for the other guy to do his side of the trade, and snarfs the returned value. Right click, select "Trade", type amount, select returned asset type, type expected return amount, and click the transfer location. There need to be multiple ways to do this, with good defaults for exchange rates. Notification tells you when the trade is complete and whether the expected value was returned. There is a way to show all uncompleted trades.
77 *** Search
79 Apple Spotlight-style search in single tables and system-wide, with advanced search allowing specification of column names/types to look in.
81 *** Join
83 Two tables can be joined along one or more columns. Changes to the slave (lookup) table appear automatically in any master tables. The folder tables above really contain only the 32-char hex locations and asset IDs. The labels are looked up.
85 *** Other Standard Table Operations
87 Reorder columns, hide/show columns, sort, statistics, Comma-separated value import & export
89 * Encryption
91 Everything is encrypted with a database passphrase. Changing the passphrase is a pain to implement, but is supported (write a new copy of the database, encrypted with the new passphrase, and switch to it). A blank passphrase, disabling encryption, is possible, though discouraged. There is a tension between encryption and fast search. An encrypted word index, held in RAM during use, and periodically saved, is a likely solution.
93 * Database
95 Uses GDBM for persistence, like Loom itself. http://www.gnu.org/software/gdbm/
97 * Programming language
99 Python. It's nice, supports GDBM, and has a portable GUI: http://wxpython.org/ . I'd actually prefer Lisp, but it isn't as well known and doesn't, yet, have a portable GUI, unless I were to port wxWidgets myself. I could also use Java, but Java development isn't interactive enough, nor is its GUI as easy to use.
101 ** wxPython info
103 Running the wxPython demo:
105   python /Developer/Examples/wxWidgets/wxPython/demo/demo.py
107 * Emacs control cruft
109 ** Note
111 If you do longlines-mode as "mode: longlines", instead of evaluating "(longlines-mode)" after the evaluation of (table-recognize), it wraps the tables. Don't know why. Add to your .emacs file a setting of safe-local-eval-forms to '((table-recognize) (longlines-mode)) to prevent the safe variable query when you open this file.
113 ** Settings
115 ;; Local Variables: **
116 ;; eval: (table-recognize) **
117 ;; eval: (longlines-mode) **
118 ;; End: **
120 * Copyright 2008 Bill St. Clair
122 Licensed under the Apache License, Version 2.0 (the "License");
123 you may not use this file except in compliance with the License.
124 You may obtain a copy of the License at
126     http://www.apache.org/licenses/LICENSE-2.0
128 Unless required by applicable law or agreed to in writing, software
129 distributed under the License is distributed on an "AS IS" BASIS,
130 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132 See the License for the specific language governing permissions
133 and limitations under the License.