Prep for 2019 release
[fanfix.git] / docs / worklog.md
CommitLineData
55d2b2c2
KL
1Jexer Work Log
2==============
3
a69ed767
KL
4October 21, 2018
5
6All future work for this project has been moved to GitLab. GitHub
7will remain up for a few months longer, until the next release comes
8out.
9
10September 18, 2018
11
12Collecting up a few bug fixes involving race conditions: message box
13(and input box), TimeoutInputStream, window close. Will get these
14uploaded to GitHub in a little while.
15
d625990d
KL
16July 13, 2018
17
18This project isn't dead, I swear!
19
20My meatspace life has been very crazy busy. But I do hope to be back
21to work on this in another couple months.
22
051e2913
KL
23December 15, 2017
24
25We now have 24-bit RGB colors working with Swing backend.
26EMCA48Terminal isn't happy though, let's try to fix that... still no
27dice. So RGB is there for ECMA48 backend, but it sometimes flickers
28or disappears. I'm not sure yet where the fault lies. Ah, found it!
29Cell.isBlank() wasn't checking RGB.
30
31Well, I do say it is rather pretty now. Let's get this committed and
32uploaded.
33
34December 14, 2017
35
36TComboBox is stubbed in, and it was quite simple: just a TField and
37TList, and a teeny bit of glue. Along the way I renamed TCheckbox to
38TCheckBox, which was almost more work than TComboBox. Heh. Things
39are starting to come together indeed.
40
41TSpinner is in. Now working on TCalendar... ...and TCalendar is in!
42
43December 13, 2017
44
45A user noticed that the example code given in the README.md caused the
46main window to freeze when clicking close. Turns out that was due to
47the addWindow(new TWindow(...)) line, which led to TWindow appearing
48in TApplication's window list twice. Fixed the README, and then made
49TApplication.addWindow a package private function plus a check to
50ensure it isn't added twice.
51
52On the home front, my main box is now a Fedora 26 running Plasma
53desktop. That ate a few weekends getting used to. Current-era Linux
54is pretty nice, systemd so far (cross fingers) isn't creating any real
55problems, audio and wifi worked out of the box (thanks to Intel
56chipsets), and I can finally have all of my books and references on
57the same box as dev. So woohoo!
58
59SwingTerminal is getting the insets wrong, which is a bit aggravating.
60So let's add adjustable insets in SwingComponent with a default
612-pixel border around the whole thing, which I can tweak for my
62laptop. Done!
63
64Alright, so where are we? Well, I will have some time in the evenings
65over the next couple weeks to put into projects. This one will get a
66little bit of love, probably a new widget or two; Qodem might get
67libssh2 + mdebtls support in Windows if those aren't too involved;
68Jermit will get a little more push towards a Kermit implementation.
69
d36057df
KL
70October 17, 2017
71
72I finally gave up the ghost on using gcj as the default compiler due
73to its awesome unused imports messages, and learned how to get PMD to
74do that job. Which promptly created 1000+ warning messages related to
75class item order (variables, constructors, methods), nested ifs,
76useless checks, and so on. So now we go on a code sweep to fix those,
77and along the way set a new class template. Since this is so large
78and invasive, I will bite the bullet now and get it done before the
79next release which will get it out on Maven finally.
80
be72cb5c
KL
81August 16, 2017
82
83Holy balls this has gotten so much faster! It is FINALLY visibly
84identical in speed to the original d-tui: on xterm it is glass
85smooth. CPU load is about +/- 10%, idling around 5%.
86
87I had to dramatically rework the event processing order, but now it
88makes much more sense. TApplication.run()'s sole job is to listen for
89backend I/O, push it into drainEventQueue, and wake up the consumer
90thread. The consumer thread's run() has the job of dealing with the
91event, AND THEN calling doIdles and updating the screen. That was the
92big breakthrough: why bother having main thread do screen updates? It
93just leads to contention everywhere as it tries to tell the consumer
94thread to lay off its data structures, when in reality the consumer
95thread should have been the real owner of those structures in the
96first place! This was mainly an artifact of the d-tui fiber threading
97design.
98
99So now we have nice flow of events:
100
101* I/O enters the backend, backend wakes up main thread.
102
103* Main thread grabs events, wakes up consumer thread.
104
105* Consumer thread does work, updates screen.
106
107* Anyone can call doRepaint() to get a screen update shortly
108 thereafter.
109
110* Same flow for TTerminalWindow: ECMA48 gets remote I/O, calls back
111 into TTerminalWindow, which then calls doRepaint(). So in this case
112 we have a completely external thread asking for a screen update, and
113 it is working.
114
115Along the way I also eliminated the Screen.dirty flag and cut out
116calls to CellAttribute checks. Overall we now have about 80% less CPU
117being burned and way less latency. Both HPROF samples and times puts
118my code at roughly 5% of the total, all the rest is the
119sleeping/locking infrastructure.
120
f6d90207
KL
121August 15, 2017
122
123I cut 0.0.5 just now, and also applied for a Sonatype repository.
124It was a reasonable spot: TEditor was working albeit buggy, and a bug
125had just come in on the main TApplication run loop. So we are about
126to embark upon some performance work again, it's been probably version
1270.0.2 or so since the last cycle.
128
129Code size: 40446 lines.
130
131Now switching head to 0.0.6 and taking a small break.
132
df602ccf
KL
133August 14, 2017
134
135TEditor is basically done. Mouse movement, keyboard movement,
136backspace / delete / enter / etc. are all in. Things are starting to
137look pretty good.
138
139I'm going to prep for a final cut and release tag tomorrow or the next
140evening. I need to take a break and get some meatspace life dealt
141with.
142
e8a11f98
KL
143August 12, 2017
144
145TEditor is stubbed in about 50% complete now. I have a Highlighter
146class that provides different colors based on Word text values, but it
147is a lot too simple to do true syntax highlighting. I am noodling on
148the right design that would let TEditor be both a programmer's editor
149(so Highlighter needs to have state and do a lexical scan) and a word
150processor (where Word needs to tokenize on whitespace). I estimate
151probably a good 2-4 weeks left to get the editor behavior where I want
152it, and then after that will be the 0.0.5 release.
153
154Finding more minor paper cuts and fixing them: the mouse cursor being
155ahead of a window drag event, SwingTerminal resetting blink on new
156input, prevent TWindow from resizing down into the status bar.
157
3e074355
KL
158August 8, 2017
159
160Multiscreen is looking really cool! Demo6 now brings up three
161screens, including one that is inside a TWindow of a different
162application.
163
42873e30
KL
164August 7, 2017
165
166Had trouble sleeping, what with a bunch of imaginative thoughts for
167this release. jexer.backend will be the ultimate destination for
168jexer.session and most of jexer.io. TerminalReader will be the
169interface for keyboard and mouse events. cmScreenConnected and
170cmScreenDisconnected will be new events to represent a screen
171appearing/disappearing, and MultiBackend will be a new backend
172multiplexer that goes full XRandR. Several new demos demonstrating
173multi-screen support will be coming along.
174
175August 6, 2017
176
177Time to clean up more API, particularly between Backend and Screen.
178Both of these will be interfaces soon, so that one could easily
179subclass JComponent and implement both Screen and Backend. The
180original code evolved out of Qodem, where screen.c and input.c were
181two different things leading to ECMA48Screen and ECMA48Terminal, but
182now there is really no need to keep them separate. It also
183complicates the constructors, as these are basically friend classes
184that have used package private access to get around their artificial
185separation.
186
187When I get this done it should be a lot easier to do any of:
188
189* Pass a JFrame or JComponent to SwingBackend and have it add itself,
190 like any other Swing widget.
191
192* Construct a SwingBackend and add it to any regular JComponent.
193
194* Have multiple TApplications running inside the same Swing
195 application, including having actions affect each other. (Will also
196 need to ensure that TWidgets/TWindows are not in different
197 TApplication collections.)
198
199* Build a Backend/Screen multiplexer, so that one could have a ECMA48
200 TApplication listening on a port and a local Swing monitor for it.
201
202* Build a Backend/Screen manager, so that one could have multiple
203 ECMA48 screens acting as a single large screen (e.g. XRandR).
204
205Now I need to decide which package will collect Backend, SessionInfo,
206and Screen. jexer.io has some java.io stuff, so it stays anyway.
207
2fef9c6e
KL
208July 28, 2017
209
210Got very busy with my meatspace life, now getting a chance to come
211back around.
212
213I gave up on TEditor knowing about graphemes, instead pulling back to
214simple Cells. This will be better anyway in the long run, as getting
215grapheme support in Screen someday will also get it for me in TEditor
216for free. But it does mean that TEditor will chew through much more
217RAM than it needs to for a text file. Performance optimization will
218come someday. But this means I can also go back to gcj, because I
219really like its warnings about unused imports.
220
221I've got a POM stubbed in, and created an account over at sonatype.
222If it isn't too hard, I will try to get 0.0.5 released into the maven
223universe. But that is still a bit away, I need TEditor running with
224syntax highlighting first.
225
226July 17, 2017
227
228Focus-follows-mouse is in, as is NOCLOSEBOX.
229
8c236a98
KL
230July 15, 2017
231
232I think I have cleaned up most of the window show/hide/activate mess
233in TApplication. Demo4 has some cool interactions between a
234background TDesktop and several foreground TWindows, which helped
235expose bugs.
236
237July 9, 2017
238
239While working on TWindow.hide/show I decided that I am sick of
240TApplication's active window handling. TApplication makes lots of
241assumptions, things are too fragile between modal and not, and one
242cannot easily say window.activate(). So I will also be changing that
243too. ... Code is still a bit of a mess, but hooks are in place at
244least for show/hide/activate.
245
246July 8, 2017
247
248Qodem 1.0.0 released last month, I had a vacation, and a Jexer user
249(nikiroo) started opening up pull requests. :-) So back unto the
250breach we go!
251
252TButton is now animated so that there is some feedback when selected
253via keyboard. StringJustifier was written which permits TText's to
254have left/centered/right and full justification. TDesktop is now in
255too which can act as a permanent max-sized window without borders.
256
257Next up is Viewport, an interface to collect scrollbar API, and then a
258cleaner API for scrollable widgets and windows. After that is more
259window API: hide/show/maximize/restore, and unclosable windows. I am
260cherry-picking bits from @nikiroo's PRs, which will likely break them
261before it fixes things, but I will find some way to get Niki credited
262with those pieces.
263
e685a47d
KL
264March 21, 2017
265
266I am starting to gear up for making Jexer a serious project now. I've
267created its SourceForge project, linked it back to GitHub, have most
268of its web page set up (looks like Qodem's), and released 0.0.4. And
269then this morning saw an out-of-bounds exception if you kill the main
270demo window. Glad I marked it Alpha on SourceForge...
271
272Yesterday I was digging around the other Turbo Vision derived projects
273while populating the about page, and made a sad/happy-ish realization:
274Embarcadero could probably get all of them shut down if it really
275wanted to, including Free Vision. I uncovered some hidden history in
276Free Vision, such that it appears that Graphics Vision had some
277licensed Borland code in it, so there might be enough mud in the air
278that Free Vision could be shut down the same way RHTVision was. But
279even worse is the SCOTUS ruling on Oracle vs Google: if APIs are
280copyrighted (regardless of their thoughts on fair use), then any
281software that matches the API of a proprietary project might find
282itself subject to an infringement case. So that too could shut down
283the other API-compatible TV clones.
284
285Fortunately, Jexer (and D-TUI) is completely new, and has no API
286compatibility with Turbo Vision. Jexer could be a new root to a whole
287generation of TUI applications.
288
a7986f7b
KL
289March 18, 2017
290
291TStatusBar is working, as is "smart" window placement. Overall this
292is looking quite nice. Found a lot of other small paper cut items and
293fixed them. It looks absolutely gorgeous on Mac now.
294
295Tomorrow I will get to the public wifi and get this uploaded.
296
297Time to call this 0.0.4 now though. We are up to 32,123 lines of
298code.
299
55d2b2c2
KL
300March 17, 2017
301
302Jexer is coming back to active development status. I had a lot of
303other projects ahead of it in the queue, mostly Qodem but also Jermit
304and of course lots of actual day job work keeping me too tired for
305afterhours stuff. But here we are now, and I want to get Jexer to its
3061.0.0 release before the end of 2018. After that it will be a
307critical bit of function for IWP and NIB, if I ever get those going.
308I need to re-organize the demo app a bit so that it fits within 80x25,
309and then get to TStatusBar.
310
311A status bar will be an optional part of TWindow. If it exists, then
312it will be drawn last by TApplication and get events routed to it from
313TWindow's event handlers. This will have the nice effect that the
314status bar can change depending on which window is active, without any
315real extra work on TApplication's part.
316
317Putting together a proper TODO now, with release and regression
318checklists. I think I will see if jexer is available at SourceForge,
319and if so grab it. Perhaps I can put together some good Turbo Vision
320resources too. At the very least direct people to the Borland-derived
321C++ releases and Free Vision.