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