User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
Admin
completely blind computer geek, lover of science fiction and fantasy (especially LitRPG). I work in accessibility, but my opinions are my own, not that of my employer. Fandoms: Harry Potter, Discworld, My Little Pony: Friendship is Magic, Buffy, Dead Like Me, Glee, and I'll read fanfic of pretty much anything that crosses over with one of those.
keyoxide: aspe:keyoxide.org:PFAQDLXSBNO7MZRNPUMWWKQ7TQ
Location
Ottawa
Birthday
1987-12-20
Pronouns
he/him (EN)
matrix @fastfinge:interfree.ca
keyoxide aspe:keyoxide.org:PFAQDLXSBNO7MZRNPUMWWKQ7TQ
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@daygar @jscholes @matt If you look at this file, you should be able to understand what's expected from you by both ECI.dll and NVDA. github.com/fastfinge/eloquence_64/blob/master/host_eloquence32.py
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@matt @jscholes Is there really anything to be gained, though? Few enough blind people who care about eloquence know C++. Even fewer are going to know rust. So is being one of maybe three people who could maintain it worth whatever performance gains you'd get?
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes @matt I know davidacm is working on something in rust, of all things. But I don't know where he's at with that, and I don't know anyone else who wants to work in rust. So either he'll finish it and maintain it all himself or nothing will come of it. :-)
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@matt @jscholes Yup. I'm hoping someone will get inspired and do things correctly. I just wanted something that worked, and Python was the easiest way for me to get that done. It's far from the best way.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes You might be right. I just didn't wanna distribute like five different dependencies with the addon. Then it turned out that NVDA's version of Python doesn't include multiprocessing, even though it's built-in to Python by default, so I had to annoyingly include .pyd files and library code anyway.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes Extremely annoying. I spent like two hours fighting with that because I'd given the AI the 6.4 manual, and it was doing things the manual said were allowed, but it wasn't working. Took me forever to realize that the DLL is a different version than the included manual.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@feld @jscholes Maybe you could. But I don't really understand low level c++ code and pointers and things well enough to want to use AI for this. When it comes to Python, I can at least understand the code well enough to audit it (even if not to write it myself), and understand the approach. With C++ that wouldn't be the case.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes Those are for version 6.4 of the DLL, and we use 6.1 because 6.4 has a bunch of changes like requiring registry entries for languages and voices that make it not portable, and several annoying bugs. I believe 6.4 also made a bunch of changes around threading. I already ran into issues with this, because the tts.txt is the manual for 6.4, and we need to use 6.1, the last release before IBM took it over.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes It's original code used C++ as the host, with GRPC for communication. I made it retry because I didn't want to deal with the complexity of the GRPC dependencies in an NVDA addon, I don't really understand protobuffs, and it just didn't feel any faster.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes So the reason I wanted Python was because I naively thought a lot of the existing code could be reused, as well as some of the learnings from IBM TTS, eloquence threshold, and the sonata voices. That turned out to be entirely wrong. The "correct" way to do this would be to write a 64-bit API compatible wrapper for ECI.dll. But that's way beyond my abilities as a programmer, and AI can't help because we don't have the development headers for ECI.dll to feed it.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes So with more code updates this morning, the thing I'm noticing is that the more rewriting that is done, the less and less code there is from the initial AI rewrite. The AI solution mostly worked, but was over-complicated and multi-threaded where it didn't need to be. We're slowly arriving at code that is both simpler and works better.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes Hah no worries. Your question got me thinking about what that even means. Like if my collaborator doesn't speak my language, does that mean I should disclaimer the code as AI assisted? If the code started off as entirely human generated, and an AI rewrote it, is it now AI generated? If a human rewrote large parts of what the AI did, when does the code stop being AI? I really don't know.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes Oh, also, I used spell check on the build docs. So I guess that counts. And Titet11 is Mexican and more comfortable working in Spanish, so AI translation was involved in communication and some of the comments. If you want to avoid anything that uses AI you need to avoid this, as it couldn't exist otherwise.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes And obviously the code for the 32-bit addon was entirely (I assume) human written.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes At this point I would estimate that every line of code has been read by at least two humans, and about 50 percent of them modified directly by a human once the AI was done.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@jscholes Yup. AI for the initial rewrite, then humans to fix the many bugs.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
Edit: This is now released. Say all works, though the audio becomes choppy sometimes. But it doesn't crash.
Right! I now have a copy of Eloquence that works on the 64-bit alphas of
, with the following issues: say all on the web doesn't work (it stops whenever the type of element changes for reasons I don't understand), and dialect switching doesn't work (but it doesn't crash everything anymore). If you want to play, you need to follow the build instructions; I only understand about a quarter of this code and have no intention of actually releasing things that are still broken: github.com/fastfinge/eloquence_64/
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@xogium Okay so, for gits and shiggles I looked closer into the state of espeak on Android. The app in the play store is broken. However, you can download an APK from the official github, and that works fine; it's up to date, modern, and has no ads. Why isn't the official APK from the espeak-ng github on the play store? Who knows! It's open source; you'll take your inexplicably broken things and like it that way, darn it! Oh, maybe it's not on the Play Store because it's on F-Droid? Hahaha no! Get your APK from github just like you do for Windows apps; no package management, for you, buddy.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
@MikeGorse @mhussain In my case, I know the fix is wrong and bad. But I also don't have time to actually fix the problems right now. So this code is keeping the things I need to work working, until an official fix is released. The problem, of course, is that temporary code fixes have a habit of becoming permanent code fixes.
User avatar
🇨🇦Samuel Proulx🇨🇦 @fastfinge@interfree.ca
3mo
dream, mentions of male genitals Well, time for another ! Last night I dreamed that I'd gotten Nintendo's latest console attachment: a jockstrap. Then I played the latest best-seller game, called "kick ball". The jockstrap attachment would sense your leg movements, to detect when you had kicked a player in the balls. Then it would squeeze the players balls based on the strength of the kick. The rules to kick balls were: two players join, standing across from each other. Then they kick one another in the balls until someone surrenders. After I won several games, I discovered that Nintendo had a public leaderboard of players who won the largest number of kick balls games. But they captioned it "Ladies, avoid these guys. They're stupid and their dicks won't work." I think I woke up from sheer embarrassment at that point.