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