Texttop – An interactive X Linux desktop rendered in TTY and streamable over SSH
github.com
github.com
After the success of hitting the front page here last year, I really wanted to sit down and do this properly. So not only am I working on real text support (that you can of course copy and paste without even zooming). But I've removed the dependencies on ffmpeg, Xorg (for Firefox at least - Chrome strangely doesn't support webextensions in headless mode), docker AND it will work on all webextension-compatible browsers. It's going to be a single cross-platform, static, Go binary, that launches your preferred browser in the background.
Generally it's bad luck to talk about something before it's finished, but seeing as it's suddenly on the front page I wanted to let all those interested know that I'm making this 10 times better. And an early apology, because I'll definitely be posting the rewrite (and rename) here and hoping to get all your attention again.
I thought [cacaview](https://github.com/cacalabs/libcaca) was the only terminal image viewer player in town with their attendant `cacaview' prog. I'd very much appreciate it if anyone here knows of any other libs or especially the sanest way to do this in either C/C++ or Ruby … It's for a terminal-based project I have in mind :)
This is where go really shines in my opinion (generics or not :P). Cross platform just works; I was stunned when I installed go on windows and was able to build third party libs, and build and run exe's on windows.
Either something like Opus, or...
You could do a decomposition of the audio signal and send a small array of {frequency, amplitude} pairs for each frame, then ramp to each new pair as they arrive.
If you do this fast enough then you get just enough of the timbre of the original to make a listener think they are hearing the "right" thing for a video they already know.
Even with a single oscillator you can get some interesting sounds this way.
edit: syntax error
On the client side, I'm not so sure. Keeping with Pure Data, you could instantiate in the background and have it listen on a localhost port, then forward the pairs and resynthesize them.
If you want I can make a demo patch to show you what this sounds like.
So then the other thing is how to make it as convenient as possible to open up the audio connection. It's gonna have to be something like `ssh texttop -p1234` for the imagery and `texttop_audio_client.sh -p1235` for the audio? There's no way to combine them I don't think?
I can't remember if there was some big issue that eventually made me stop developing. I think the final issue was characters with dual width like many Chinese characters the gui library blessed did not understand the concept of characters with non standard width and a single such character would destroy the entire layout. And issues with correlting the render tree and the Dom tree.
It does work perfecly for single line text but not multi line text. The rect will become larger than the text and you won't know where each line starts.
Well that is what I remember happening.
The interfacer alone looks fun, seems like I can control a remote X session via ssh.
And I apparently starred the repo previously, but don't remember ever having seen this particular badass shit before.
Am I losing it?
There is so much great content -- both "empty calories" and otherwise -- that it is so easy to get buried under it. I came to HN to retrieve _one specific link_ and ended up with 7 new browser tabs open, counting this one.
Other options I'm aware of are conventional bookmarks, and OneTab.
Heh, I actually meant things like "LA to Vegas", "Family Guy", and the like, but yes, I can believe there are empty calorie HN links, too
I presume you're aware of the "noprocrast" and "minaway" settings on your HN profile? Using `/etc/hosts` is some hard-core HN Addicts Anonymous level stuff :-)
Another interesting project, that's similar, but for VNC.
Why not ssh -Y and use X protocol as intended?
I don't think X would handle that very well, and you may not have an X server at the other side.
One of the systems I'm responsible for currently can only be reached over a 1200bps dialup connection.
Looks like the goal is to be able to view modern websites over poor internet connections using mosh. (And also probably a lot of fun to implement/see working)
On the other hand, how about libcaca? https://en.wikipedia.org/wiki/Libcaca
After reading the first few paragraphs i also finally understand why it would be such a great idea to have a blocky firefox.
You could already run a browser in a framebuffer for ages. Which means you're not bound to X11. My friend, X11 hater (he was former Amiga user), just used CLI and a CLI web browser (well, he used Emacs) but sometimes he did need GUI and that was his solution. We're talking end of '90s/begin of '00s here during a time where X didn't even compositing.
If you want to run X11 over SSH, that's also possible, e.g. via NX Server. Another route could be SDN plus (Free)RDP. Mosh is great for latency, tho can't be used for SSH over Tor due to UDP.
Zooming (not panning) is essentially as easy as scrolling, and I'm looking forward to a day where it's utilised more since it's such a natural motion. I can image a desktop (relevant!) that presents a huge 'canvas', allows you to zoom in and out of the filesystem, navigate the web at different levels, etc. There's definitely potential in interface design; what annoys you about zoom? I agree it shouldn't be a primary action that one would have to carry out very frequently.
These projects I mentioned have already (partly) tackled the latency issues. RDP and NX suffers far less from latency issues than X11 and VNC.
As for framebuffer, see [1] [2] for examples. Although now that I'm looking into it perhaps my friend was using Links2 and not a Mozilla offspring. I remember he also used lynx/w3m/dillo. As you can see from the example, one could just run MPlayer locally back in those days, with a framebuffer on a local tty. Apparently YouTube works as well [3]. DirectFB links seem dead though, and it seems MPlayer website is also down [4].
Zooming appears a natural motion on mobile devices because it allows one to see more content which is hidden due to physical reasons (a trade-off). Do you really find that useful on todays large monitors? Laptops even? Instead, it appears that for desktop devices scrolling provides adequate user experience. Zooming was added ages ago in Xorg, allowing a compositing window manager to utilise. Has it been used a lot besides the obvious accessibility feature? The only reason it is usable in this specific use case is the low amount of pixels (low pixel density). But I am curious to all these use cases you got in mind for zooming.
[1] https://en.wikipedia.org/wiki/DirectFB
[2] https://en.wikipedia.org/wiki/Linux_framebuffer
Zooming is necessary due to the smallish smartphone display, "latency issues tackled by RDP" is mostly wishful thinking (okay, it's gone from "unusably bad" to "just bearably bad").
Dillo and Lynx are quick. Dillo last release was 2 years ago. Lynx is in active development. They don't have JS support though.
Links has support for JPEG/PNG and Linux framebuffer but somewhere in '00s they removed JS support (it was an unmaintained port of spidermonkey). ELinks port which also supported all 4 features is dead.
There's surf and uzbl. I don't know the latter much, former is used with keyboard shortcuts only. AFAIK these don't use the Linux framebuffer. Dooble is a lightweight web browser, but no Linux framebuffer support.
I question wanting JS 24/7 locally. You can also just not load all these JS nonsense and have a quicker experience (with NoScript or uMatrix). Same with loading all images. You could use a proxy to downsize JPEG pictures as well. The very first Opera versions on mobile phones did the same thing. They didn't even serve HTML! They spoke a different language with the browser. I'm not sure if Vivaldi (formerly Opera) still employs this feature. But you need to remember there's a market for this in upcoming economies where mobile bandwidth is scarce.
Sources used [1] [2]
[1] https://en.wikipedia.org/wiki/Comparison_of_web_browsers
[2] https://en.wikipedia.org/wiki/List_of_web_browsers_for_Unix_...
Have you (or anyone else) tried Texttop over Tor + SSH?
NX (FreeNX) and X2Go was already mentioned in the previous thread [1]. I've used NX successfully over 32 kbit/sec upload in 2005 (server in NL, client in CA/US). Latency was acceptable. But we're not talking about network speeds or latencies like 2G/Edge (which seems to be your use case). They support resuming of sessions. In other words, like RDP. And with regards to RDP: you can decrease the image quality to make it more bearable. Nowadays, open source implementations are available. If you're on very slow links you can also perhaps enable (more) compression, at the cost of more CPU power it might still actually decrease latency. Not sure if LZMA2 is used for compression in this context these days.
Good luck with your project!
EDIT: Just tried it on Windows. Is there a terminal you can recommend working on Windows? I tried CMD.exe, Powershell, Bash (WSL / Ubuntu) and Cmder. None worked well.