O.K., I'll call my HURL/Stylist/CatTrap integration a tentative success! Now I'm throwing Typograffiti in to have something that can actually work as a "Haphaestus" web browser! As such I'm putting it in a new repo!
Took a bit to get something compiling here... Tomorrow I'll see what I can get running...
This pulls in Balkon updates to inline layout, some performance/reliability improvements, and allows downstream projects to inherit its length units support.
Hopefully I'll be adding more layout options soon!
#ArgonautStack news: Looking over the FontConfig API to see if I've made the same mistake (which caused my segfaults) elsewhere... I find a couple candidates to investigate, but it appears that I'm clean.
Tomorrow if I find time, I'll see what else FontConfig's cleanup might be complaining about...
#ArgonautStack news: Once Valgrind pointed me to the function that was causing me issues, I think I might have found my problem.
I got my foreign-function declarations wrong, it doesn't match FontConfig's actual ABI!
I'll have this fixed tomorrow...
But I've proofread these language bindings so many times ensuring I'm managing memory right, my ABI bindings are correct, & that I've covered the features. Somebody please take this headache off my hands! Maybe rewrite in better tooling?
I'm asking Valgrind why my #ArgonautStack integration test crashes.
Without --track-origins=yes it gave me some results fairly quickly. Though not as quickly as my Pantheon desktop would've liked, & a tad light on details.
Attempting to get some fuller output now, but that's taking forever to get started...
By tomorrow I should have enough to attempt a fix!
Ugh, the #ArgonautStack (my FontConfig language bindings specifically) are still segfaulting! Its just segfaulting faster now that I've added more laziness...
I guess I need to test under Valgrind...
I'm guessing there's a double-free somewhere...
A couple polls ended. Both of which indicate mild curiosity.
So regarding Haphaestus: In the new year I will set up an Open Collective account (OS Collective or failing that Open Collective NZ) . Depending on how much this collective receives I hope to smooth my personal income, pay people who wouldn't otherwise be able to afford to contribute, & send some money to dependencies so I don't have to take them over.
I want to ensure the #ArgonautStack works for everyone who wants it!
When the iPhone came out we lost good tools who didn't respond fast enough to the disruption. Computing most certainly wasn't better back then, but it did feel like we had a better vision.
XMPP was in a fragile state with few end-users being aware of how ubiquitously it powered most instant messengers of the time. Especially with them refusing to federate (in no way the fault of these standards!).
Despite hearsay from those who haven't tried it, today XMPP is a painless IM protocol.
XMPP (despite its incorrect reputation) is a full-featured mobile-friendly lightweight encrypted federated instant messaging protocol based on streaming XML over (amongst others) TLS. Once I setup a @snikket_im server for my #ArgonautStack , it has been extremely painless. Even when I tested federation against a personal YUNoHost server, which I hear good things about.
Under the hood Snikket's server is a branded Docker packaging of Prosody, so today I'll start studying Prosody's core.
This should theoretically fix my #ArgonautStack freeze/segfault issues...
I've added some laziness to my FontConfig language bindings so I won't wind up reading your entire font library upon layout!
I accidentally introduced a regression doing so, but now in isolation FontConfig still works. Tomorrow I'll release an update to test CatTrap against it...
Rewriting a simpler integration test & running it through LTrace... I think I'm reading too much of FontConfig's output & taking far far too long doing so! Manifests as a massive freeze!
I might also have multi-threading issues because when I run outside the main thread this freeze becomes a segfault...
Good news: I now know why I'm continuing to have those performance issues.
Bad news: Optimization isn't really helping as the task is I/O bound, I need to move the task out of the main thread. At least I might be saving energy!
Good news: Laziness has optimally intermingled compute & I/O without me needing to do nothing! That was confusing to diagnose though.
Bad news: I'm still segfaulting.
I found another optimization to try in Harfbuzz Pure!
I'm telling Haskell not to store the output data from Harfbuzz, its ~40x (depending on which alphabet you use) the storage space & more efficient to recompute. But if that data gets processed at all...
Haskell has a oneShot primitive for this.
This made minor improvements to benchmarks, but there's indications it might make a bigger difference to real code.
I should stop here, surprisingly addictive game...
I couldn't stop thinking about this, so I managed to implement my even lighter-weight peekArray alternative! Keeping a close eye on benchmarks... (solution in next toot)
My solution moves practically all the remaining overhead (which has improved to something acceptable) to the iteration over results.
But the benchmark indicates the caller's somehow slower...
#ArgonautStack news: I made another decent dent in improving CatTrap's (or rather Harfbuzz Pure's) performance! I figured out how to cut down on how many data copies occur when initializing a font. Which cut 2.5s to layout Dracula down to 0.8s. 1/3 the time!
I still need to go further as this is a major bottleneck. Doing some clearbox benchmarking, my main issue now is decoding the results. Takes 50x longer then encoding.
#ArgonautStack news: Bureaucromancy renders onscreen keyboards! Now I need to add support for typing...
Snitched a design I saw on Apple TVs, since I find that more ergonomic than navigating a QWERTY keyboard via arrow keys. It's a tabbed alphabetical square-ish grid. Minimizing how many button presses from one key to the next.
But I'm going out of my way to make it easy for any webdev familiar with Jinja/Liquid/Django/etc templates to contribute alternate or localized keyboards!
#ArgonautStack news: Finished drafting onscreen keyboards for the Latin1 charset in Bureaucromancy, split across 5 screens.
Also made a small change to add multithreading to CatTrap in hopes that that yields real-time performance. Probably won't, but this was (unusually) trivial!
I suspect my Harfbuzz language bindings are what's slow & the LibICU are what's crashing on me...