It depends on what you are after (quality, legibility, performance, etc.).
If you're after quality then Qwen3 TTS is a very good model esp. if you take some effort to craft a voice file. It is slow, so isn't practical for real-time voices (like assistants). It can also occasionally switch to a different voice to the one provided, so you may want to break up the text being processed.
I've not yet tried other recent/recentish models.
If you are after performance then two options from older models are:
1. flite with a HTS (Hidden Markov Model) voice like cmu_us_rms (male) or cmu_us_slt (female);
2. espeak/espeak-ng with an MBROLA (an Overlapped Add model) voice (mb-us1, mb-de5-en, etc.).
Alternatively, you could try using Qwen3 TTS or over voice changing model with the CMU Arctic (http://www.festvox.org/cmu_arctic/) voice data which includes audio for the rms and slt voices among others.
If you're feeling adventurous you could also try fine tuning one of the TTS models on that data to create a custom voice, though the data is likely to be in the training data for the voices, so using an audio sample may be sufficient depending on the TTS model.
In fairness I think a lot of people (me included) genuinely thought that would be an entertaining name for the ship, so the polling result wasn't necessarily wrong per se.
My goto when integrating SSO in a Java/JVM application via SAML, OAuth, JWT, and other authentication mechanisms is pac4j (https://github.com/pac4j/pac4j). It has integration to and demos for various web frameworks like Spring and Scala Play. It does a lot of the heavy lifting for integrating SSO into an application.
The two remaining Zodiac cyphers are very short: 13 characters and 32 characters respectively. As the messages don't share a cypher with the other messages they could theoretically be anything.
The YouTube channel https://www.youtube.com/@doranchak/videos by David Oranchak, one of the people who solved the Z340 cypher, has some more details on this as well as how the Z340 cypher was cracked.
So... distribute a LoRA (or equivalent) that modifies the base weights with the abliteration vectors. That makes sense as it would be possible to try different abliterations and keep the storage space down.
Could you please explain why? It's an additive update to the weights, adding an outer product of a vector with its transpose, which must have rank 1. What am I missing?
I've not written a language server but have written a language plugin for IntelliJ.
I started with writing a correct recursive descent parser. I then extended it to detect, report, and recover from common syntax errors as I encountered them so that the parser is robust. And adding a parser test case for each of these (e.g. one test for each branch through an EBNF construction).
Some examples are:
1. missing keywords when the keyword can be detected from the current context (e.g. missing semicolon at the end of a statement);
2. using the wrong token (e.g. `:` instead of `::` in a C++ namespace qualified name);
3. detecting and ignoring whitespace in a whitespace-sensitive qualification (e.g. in XML QNames);
4. keeping in the prolog state (where functions are defined) when there are errors so that functions after the error don't get lost;
5. lexing incomplete literals like `10e` so they can be handled as integers in the parser and emitting an error for them.
It's a dead-end. Sure, it can work in simple cases, but there will be always a case where such syntax recovery isn't possible. That's why relying only on syntax recovery isn't an option.
Because of that I use a different approach. I do parse on each document editing, but such parsing is guaranteed to produce valid results only up to the point with broken syntax, where editing usually takes place. Such parsing is enough to reconstruct location of the point where editing takes place (namespace/class/function) and to reconstruct local context (local variables declared prior to editing place). This allows to perform almost perfect autocompletion by suggesting global and local names available at the editing point. In order to provide proper suggestion of non-local names declared after the editing point, I do keep a structure for the most recent document state with valid syntax.
With features like "go to definition" I do the same. I store a hash-table with location to definition point mapping, but it's updated only from time to time and only if document syntax is valid. In order to be usable for cases with edits made after building such hash-table I just perform text-based position mapping using accumulated edit events.
I find AI autocomplete and chat (asking specific questions, getting general code I can adapt, etc.) to be useful. I'm not sold on agents and agentic workflow.
When I tried using agents for something as a test it immediately started doing things instead of being part of a conversation. I want to be actively involved in the process, not sit back and let AI agents write/generate stuff that I'd have to/end up rewriting/modifying anyway when it goes against the design I have in mind.
The other thing I don't like about agents is their ability to run any command [1]. That seems like a nightmare w.r.t. the potential for leaking secrets (signing/access keys, etc.) or doing damage (deleting files, database tables, etc.).
[1] You can set the option to review every command it runs, but you're then just hand-holding the agent.
I'm in a similar position. I can easily imagine the kinds of tasks where "agentic workflow" seems useful. I just don't have any of them personally right at the moment, and think the world of software has more of them than the needs of software actually justify (due to previous bad engineering and planning).
> The other thing I don't like about agents is their ability to run any command. You can set the option to review every command it runs, but you're then just hand-holding the agent.
The thing about this is that you're treating "agent" as if it refers exclusively to the products offered for that purpose by the major LLM companies. Nothing stops you from designing and implementing your own, with a security model that you think is more sensible. The models won't have been trained against your specific tools, but you can still give them descriptions of what those tools do and then prompt them to make appropriate use of them. All that's really happening is that the LLM outputs some JSON, and your client detects that the output was a tool call (instead of a direct response), parses JSON, invokes whatever other code with whatever parameters and perhaps writes back a response.
This is kinda where I’ve landed as well. I find the chat super helpful as a solo dev almost just as a sounding board for ideas and it is good at pointing out things I’m missing or not thinking through completely. I write almost all the code myself, I like the actual physical activity of writing code and find it keeps me engaged mentally for longer stretches.
I’ve also tried the agentic thing, but I find it so draining laying out in such explicit detail exactly what I want and then cleaning up what it’s messed up, like it’s easier to clean it up than just keep prompting and pulling the magic “Do This” lever.
I probably will never code without AI again. I’ve been doing this for 30 years since I was a teenager, was very fortunate in my career and don’t have to work anymore, but I still code and build because I love it, maybe even more so now with AI, but I would absolute hate my life if I was forced to just run agents all day long and never actually write or be the primary thinking driver for code.
One of the biggest limitations right now is memory capacity (storing large models/contexts in memory) and bandwidth (transferring the relevant data/weights to the silicon that is performing the operations on that data). This would cover things like:
1. having more memory on the card/chip and/or faster access to that memory;
2. integrated memory and compute units optimized for matrix and vector multiply add operations;
3. optimized load circuitry to e.g. read memory in the stride and span (next row, next column) access patterns common to matrices or ensure that no/few parts of the chip are stalled waiting on data or operations to complete.
Another aspect is quantizations. These are similar to SIMD vector operations in that you are performing an operation on a block of n-bit data values at the same time, so can have optimized circuitry.
For 2 or 3 valued quantizations you can reduce various addition and multiplication operations to logic operations, avoiding circuitry for things like the half-adder, full-adder, and carry-lookahead.
Then there's adding specific circuitry for common operations such as ReLU like is done in hardware acceleration of image, video, etc. processing. There's a trade off here as optimized hardware would perform better at the specific operations but if those are too specific then they can't be used by different/newer model architectures. (Though it does make sense to try and optimize common operations/logic where possible.)
It would be interesting to see if these designs can/will benefit training as well, as that would bring down the time/cost/energy of training large models as well as making it easier for local fine-tuning.
reply