-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.txt
273 lines (269 loc) · 13.4 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
step 1
[ ] db: stream blob and clob to outputstream and from inputstream
[ ] bob: Form: upload file
[ ] b.file: parent, name + unique, created, modified, owner, credentials, size, content type
[ ] create unique file name, upload, postback the unique file name, create file and blob
[ ] bob: authentication framework
[ ] user with credentials
[ ] b.user: email, password hash, credentials
[ ] b.session: ref user
[ ] firewall
[ ] class name starts with
step 2
[ ] ViewTable: Element.scrollIntoView() instead of scroll to top considering included views
[ ] include a form as a field for aggregation 1 to 1?
[ ] make it right. DboField, DboRel, save etc?
[ ] FormRenderer wrapping xwriter and "this"? cookie.eat() or eat(cookie)
[ ] input clob
[ ] input blob
step 3
[ ] cluster: client: multithreaded, multiple connections to db, sql statements queue
[ ] insert returning id?
[ ] b: fix for client that makes many threaded requests and then stalls them to starve server of threads or create too many. ddos.
[ ] slowhttptest
[ ] b: in memory session with transfer between cluster members
[ ] in session (updated at every request) store current server ip
[ ] if ip changes transfer in memory session from previous ip to current ip
[ ] load balancer mode sticky session
[ ] b: use LinkedBlockingQueue<E> for requests
[ ] db.test: test default values
[ ] class_init extended to set statics on any class
[ ] db: at delete check if object is aggregated
[-] bob: Form idPath, objectId etc moved to FormDbo to reduce context of Form.
[ ] db: RelAgg, RelRef how to handle dangling references. Exception mode in Db settings?
[ ] bob: InputRelX: use reflection and jem naming conventions instead of accessing relation objects?
[ ] View: clear search
[o] FormDbo with convenience for editing dbobjects.
[-] parentId? objectId x/y/z.
[x] id path List<String> to Form and View? implemented with code smell.
[-] path,objectId to Form,View where path encoded x/y/z?
[ ] create object in View instead of Form?
[ ] create object from other object. example book from publisher with publisher as default value?
[x] find/select/create
[x] RelRefN
[x] default values
[x] RelRef
[x] default value
[x] RelAgg. object must first be saved.
[x] create object with state "editing" when form is opened. when saved state "published".
[x] RelAggN. object must first be saved.
[x] include ViewTable in form. includeView.
[ ] fix css for better rendering
[x] FormDbo: getViewsList(): for tabbed views of aggregated objects.
[x] tabbed view query field grabs focus.
[x] support for "create object at init" pattern.
[x] annotation interface CreateObjectAtInit? ok.
[x] delete object at close in case no save has happened. action "cancel". onCancel(boolean saved).
[x] protected void cancel(xwriter).
[x] bob.js: server is busy message box when typing fast.
[ ] server busy ui element
[ ] bob: FormDbo: save: check string lengths, min max values for numbers, timestamp
[ ] bob: DboRef(Class,int) or DboRef(DbObject) with transient DbObject field intending to reduce calls to to db for object in context
[ ] websocket version will not serialize. ok to have object cached outliving the transaction?
[ ] db: select unique
[ ] bob: Menu: better ui
[ ] xwriter: button tag
[ ] xwriter: <elem> tag instead of duplicate code for span and div
[ ] b: move convenience string methods etc to util
[x] ViewTable: on mouse over row css.
[ ] ViewTable: Table: <thead> and <tbody>
[ ] ViewTable: click on row callback working with other links in the row
[ ] https://stackoverflow.com/questions/32404185/event-onclick-on-td-and-tr
[ ] https://stackoverflow.com/questions/28477422/checkbox-click-overriding-table-row-click
[ ] bob: version with query strings and pages
[ ] x.js and bob.js common script extracted
[ ] ViewTable sort options
[ ] ViewTable rendered by javascript backed by json?
[o] ViewTable:
[x] infinite scroll instead of paging (?)
[ ] when initial page fits the page
[ ] keep reading pages until scroll bar appears
[ ] review code
[x] mobile chromium vertical document height (white-space:pre caused it).
[ ] fix "// todo" comments
[ ] WebsockBob: load/save element at on_open and on_close
[ ] FormFsFile: form has white space at the end of page from white-space:pre in div.output
[ ] FormBook: form has white space at the end of page from input.long{width:60rem;} overflowing x-axis
[ ] js: from element calling $parent(e,"tr") traverses the nodes until it finds the element type. e.parentNode
[ ] ViewTable: save object id in "tr" tag
[ ] cluster: health-check the database
[ ] jem: add package names that contain additional jem fields elements
[ ] b: rename to java convention
[ ] thread pool: get first, create if none available
[ ] use java.util.concurrent (keep it compatible with java 1.5)
[ ] b: request queue, thread pool
[ ] dbo: connection pool
[ ] bob.app: dbclass to class
[ ] Content-disposition: attachment; filename=file.txt
[ ] howto for google cloud
[ ] java: synchronize(Object) read { ... } allows multiple reader threads. synchronize(Object) write { ... } allows only one thread
-------------------------------------------------------------------------------
dbo
[x] RelRefN: removeAll
[x] update jem
[x] RelAggN: deleteAll
[x] update jem
[x] DbObjects: select when multiple classes vs one class inconsistency. reviewed and ok.
[ ] rename Query to Filter?
[ ] Db.engine from config
[ ] DbObject.duplicate()
[ ] Index: specify key length
[ ] Db.driver with engine specific limitations, differences, etc
[ ] cluster client connect to database through DriverManager is slow at first connect
[x] Class.forName and register driver? no impact.
[ ] database server reverse lookup or similar?
[ ] cluster hangs when droplet (digitalocean) is destroyed
[o] review code. search for "// todo" "// !" "// ?"
[o] cluster
[x] connections to multiple servers.
[x] write to all.
[x] read round robin. solved by the load balancer.
[x] file with ips of cluster nodes.
[x] transactions on auto-commit.
[x] establish one jdbc connection to the other servers.
[x] all writes through a synchronized block writing to the other servers sequentially.
[x] step 2. all writes through a synchronized block.
[x] step 3. cluster server that synchronizes all writes.
[x] cluster server does sql in parallel.
[x] refresh connection every nth ms.
[ ] restore node with mysqldump
[ ] pause the cluster writes
[ ] mysqldump testdb | mysql -h ... etc
[ ] start bob
[ ] cluster listen
[ ] resume cluster writes
[x] Db.tableNameForJavaClass does not include package name.
[o] javadoc
[ ] Query.TableAliasMap: User -> u. if u present try us etc
[o] removing referenced DbObject. check and possibly fail or update to null? DbClass.List<RelRef>. setting on db update_referring
[x] updates referring tables column to null
[ ] objects in cache not updated. evict all objects of the referring type or iterate through cache and set null where field refers to deleted object
[x] racing conditions. example object referring to deleted object is committed after the deletes. not resolvable.
[x] index on the referring field for delete ... where.
[ ] Db.instance().makeConsistent() deleting RefN orphans, setting null on missing Ref etc
[ ] Db.instance().delete(Index) Db.instance().create(Index) for faster imports?
[ ] check RelRef.set(id) vs RelRef.set(DbObject) check type? requires get() for id. still not safe. maybe when Db.mode_safe_ref_set=true
[o] Index(DbField...)
[x] Collation asc (default).
[ ] Collation desc
[o] Query(IndexFt,String)
[x] IN BOOLEAN MODE (default).
[ ] IN NATURAL LANGUAGE MODE
[ ] IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
[ ] WITH QUERY EXPANSION
[ ] ponder on replacing getStr, getInt etc with getObj
[x] dbfield.set(DbObject ths, Object v) vs dbobject.set(DbField f, Object v)?
[ ] class OID instead of integer
[ ] FldString check string length vs field length at set? DbField.getSize()?
[ ] FldFloat max from Float.MAX_VALUE can not be committed
[ ] reference count on associations?
[ ] inheritance
[ ] example: select t1.* from File where t1.clspth like 'aaabbb%'; selects all objects that are File or inherits from File given File clspth=aaabbb
[ ] components
[ ] example: DbClass.addComponent(DbClassComponent) where DbClassComponent has fields, relations and indexes
[ ] refactor commands. example: rename main.User main.Person, rename main.User.name fullName, delete main.User.hashCode etc
[o] drivers for other (open source) rdbms. see https://www.databasestar.com/sql-data-types/
[x] mysql
[ ] sqlite
[ ] postgresql
[ ] oracle?
[ ] ms sql server?
[ ] ibm db2?
-------------------------------------------------------------------------------
resolved / rejected
-------------------------------------------------------------------------------
[x] xwriter: select renderer.
[-] DbTransaction: dirtyObjects, cache: create at first use
=> tradeoff between function call and accessing field
[x] qa: websock test
[x] ViewTable: Query: throttle queries to one every nth milliseconds.
[x] db: DbField.defaultValue to avoid boxing.
[x] db: DbObject.onCreate().
[x] b.session: created time stamp
[x] DbObject fields in an list with DbField holding an index in the list instead of a map of values.
[x] db: DbField.getValue(DbObject) FldInt.getInt(DbObject)->int etc.
[x] update jem accessors generator.
[x] DbField.getDefaultValue()->Object instead of .setDefaultValue(Object[]).
[-] db: tn.delete(Class,id) taking into account if a dbobject needs cascading delete. needs instance of object thus convenience only.
[x] db: RelAggN and RelAgg must delete through transaction to keep cache and dirty objects in sync.
[x] flush transaction prior to delete and check referring classes.
[x] db: DbObjects getFirst(q,s,l) => DbObjects.first().
[x] Form: two-step-constructions to implement.
[x] aggregated objects views in tabs.
[x] BobElem implementing idPath logic from Form and View.
[-] BobElem: implement Titled.
[x] db: RelAggN use id for context instead of ths? also.
[x] db: RelRefN use id for context instead of ths? also.
[x] db: RelAggN.delete(thsId,trgId) if target class does not need cascade do "delete from ... where ...".
[x] db: DbRelation.ensureIndexes
[x] RelRef
[x] RelRefN
[x] RelAggN
[x] bob: Form: include view.
[x] bob: Form: handling of exceptions, focus and highlighting field.
[x] review x.css using bob.css.
[x] xwriter review consistency tago etc
[x] csv sample books:
[x] parse authors, separated by ';'
[x] parse published date
[x] authors object and reverse lookup author->books
[x] categories
[x] publisher
[x] indexes on author, category and publisher name to speed up lookup
[-] category has one case with exceptionally long name, truncate?
[x] trim values
[x] pager rendering if there is only 1 page
[x] ViewTable: onRowClick(xwriter,code,id) to have other click types from row
[x] onRowClickTyped(xwriter,code,id)
[x] onRowClickTyped(xwriter,code,pid,id). use case not yet encountered.
[x] refactor onRowClickTyped to onRowClick() with parameter which may be null
[x] xwriter.xucb(e): update checkbox value by setting attribute "checked"
[x] websock: implement ping/pong. not implemented by browsers
[x] timeout on client and send empty message every x minutes
[x] input type checkbox instead of characters
[x] ViewTable: review code, nl() css padding etc
[x] xwriter: inconsistency spano spanot divo etc
[x] xwriter.xalert when used in error with websocket generates broken javascript. xwriter.is_ub_open
[x] callbacks x_... if method not found recursively check super. already so.
[x] how to for aws
[x] bob: controller: when opening a new view or form scroll to top
[x] custom search section in view_table
[x] xwriter: review inpx
[x] bob,b: window.scrollTo(0, document.body.scrollHeight), element.scrollTop = element.scrollHeight;
[x] remove package c
[x] req state to enum
[x] page that does not save state or access session
[x] annotation regarding transaction and state saving, @stateless does not initiate transaction or reads/writes path object
[x] performance testing in qa
[x] jmeter
[x] ab
[x] xwriter: review
[x] css not allowed in the body tag but is supported by major browsers. keep.
[x] bob: review css for conformity
[x] bob,b: adaptive design for mobile users. <meta name="viewport" content="width=device-width,initial-scale=1"/>
[x] content type for cached file from Map of suffix to content-type?
[x] cookie: same-site
[x] etag instead of last-modified
[x] review ranged requests
[x] file
[x] cache
[x] b.map_resource_to_path(String,String)
[x] oschunked to send first packet including the http response headers
[x] packet snooper to investigate and improve. tcpdump
[x] dbo: better connection pool, close old connection etc
[x] review code, the ugliness is overwhelming. Db.createJdbcConnection blocks at exception.
[x] rework Db.initTransaction deintTransaction
[x] rework the websock
[x] add send que
[x] fix edge case
[x] full duplex with thread for send? no.
[x] try b with 1B input buffer
[x] try b with socket small in/out buffers
-------------------------------------------------------------------------------
[x] class DbObjects filter(...) sort(...) limit(...) asList() count()
[x] better connection pool
[x] thread safe
[x] wait if connection pool is empty or create new connections? wait.
[x] close connection after a number of recycles and create a new one
[x] log_sql()
[x] tn.get(new Class[]{User.class,File.class},...) returns List<DbObject[]>