This is awesome! I hate the way tmux hijacks so much of my terminal's behavior (scrollback, seaching with escape-/, etc.) and I've been looking for something like this that will manage persistent sessions without any extra nonsense.
BTW I think your readme shouldn't just characterize it as a resumeable ssh tool. I often need to start a long running process that I want to reconnect to later, or I want to put some always-on system service inside a tmux container so I can easily jump in and see logs or mess with things in one way or another. There's a lot of utility besides just handling network dropouts.
The thing is that without hijacking it and passing it through, you can't have nice things like handling resizes, supporting attaching with multiple terminal emulators, or reconnecting to applications that make heavy use of terminal escape codes, because all of those set up persistent state in the terminal emulator.
As a result, any tmux-like layer needs to emulate a console in order to get a view into the state, and then re-render that emulated console on attach to restore state to the terminal emulator that you're connected from.
From the readme, this tool does that, kinda. I'm actually confused about why they'd go to the effort of implementing a VT100 emulator, write the code to redraw the screen from it, and yet not bother with doing the work that would let multiple terminal emulators attach.
This feels like it sits in a weird place between simple, crude tools like dtach, and tools like tmux; shpool has done most of the work to implement tmux-style behavior, and then decides to cut weird corners.
You definitely don't need the in-memory terminal emulator to handle resizes or allow attaching with multiple local terminal emulators, since dtach does both and does not have an in-memory terminal emulator.
> I'm actually confused about why they'd go to the effort of implementing a VT100 emulator, write the code to redraw the screen from it
Well, we kinda cheated here. shpool_vt100 is just the already existing vt100 crate with a single critical bug fixed, so it actually wasn't much work :). Turns out having a nice package manager for a systems language comes with some benefits.
I'm actually open to adding a feature to allow multiple simultaneous connections to a single session. I never really had a usecase for it personally so I haven't prioritized it, but it is something that similar tools support and people keep bringing up. Since this isn't the first time I've heard people talking about it, I just made https://github.com/shell-pool/shpool/issues/40 to track work adding the ability to attach multiple clients to the same session.
> This feels like it sits in a weird place between simple, crude tools like dtach, and tools like tmux; shpool has done most of the work to implement tmux-style behavior, and then decides to cut weird corners.
I'm not aware of any tool that does internal rendering and subsetting handling scrollback and copy-paste in a way that I personally find usable, so these decisions were very much intentional.
I think tmux is a great tool for a lot of people, and I tried to get into it for years, but I could just never get over the weird scrollback and copy-paste issues or the fact that it meant that I couldn't use my normal `i3`/`sway` bindings to switch between terminals inside a tmux session. If tmux works for someone, I think that's great and they should keep using it. shpool is meant for people like me who aren't very good with computers :).
I’m not sure what the popular use case is for multiple connections to one multiplexer. But, two (niche seeming) ones could be: if you have a desktop, you want to be able to SSH to it and use it locally at the same time. Or, if you have two people ssh-ing to one system, and letting them share a terminal might be nice (although in that case it would really be nice to give them independent cursors, which starts to become an involved project).
I usually have a drop down terminal that I use the most, then a full screen window on some other space. I can switch between them quickly and connect to any of my sessions from either.
Or one person ssh'ing to the same remote from two or more devices. If I don't feel like sitting in the office (desktop) and grab the laptop and go to the sitting room or back deck I can continue my session without issue, and then transition back later. I don't want to have to disconnect/detach a session when I do this, I want it to be seamless so both connections (actually three typically, an iPad as well) are running continuously.
we do use multiconnections when doing interviews - candidate solving test case on VM, interviewers are observing. Idea was not to confuse candidates by requiring screensharing during the interview, just see the particular ssh session.
Hi.
Nice kit.
> I couldn't use my normal `i3`/`sway` bindings to switch between terminals inside a tmux session
Just curious, what are your normal 'i3'/'sway' bindings that you cannot get to work with tmux ? And what actual terminal program do you use ?
Perhaps tmux wants more config than most people care to bother with, but scrollback and copy-paste can be configured just as you like.
If you’re using a tiling window manager your window switch keybindings necessarily conflict between the manager and tmux, since if you configure the same one and then press it while focused on a tmux window, the tiling window manager will override tmux and claim the event.
Scrollback and copy paste cannot always be configured as you want. I’ve shared some specifics elsewhere in this thread.
Hi.
ok, I get that. Maybe something like A-left to move to next i3 window and A-S-left to move to next tmux window within an i3 window ? Perhaps a tiling window manager with multiple windows combined with tmux dividing some of those windows further into sub-windows isn't an ideal flow.
It's not i3/tmux, but a similar problem exists for vim/tmux, where the vim window management keys will conflict with tmux's.
And there's https://github.com/numToStr/Navigator.nvim that unifies the keys by letting the outside layer (tmux) always ask the inside layer (vim) before any movements.
Although that is indeed a lot more setup. But works pretty well.
I just started using this and it is indeed awesome. Only thing I need to figure out how to do is make a tab truly full screen. It's much nicer, more intuitive, has more built in support for things and is super lightweight. It's great.
Seems like most of the features you need are what mosh offers. I've been using it for a decade, probably, and it is pretty awesome for latent mobile connections (read as: throttled 2G @16kBit/s with interruptions).
Either you waste lots of traffic bandwidth because you have to have a session identifier or nonce in every packet, or you have to map sessions to ports in order to guarantee persistance when the client drops its connection.
Other ways of doing session handling will lead to an attack surface that can probably be used for DoS attacks.
Maybe I am missing something: How would you solve this, given the limitations of UDP and TCP?
I once had a VPN utility that HAD to be closed with a Keyboard Interrupt in order for it to shut-off properly, so my systemd setup for it didn’t work. I ended up making bash aliases for tmux commands to run it and send the keyboard interrupt signal into it to stop it. I’m sure there was a way to do this with systemd, but tmux was easy, if a bit jank.
The best signal was had by hanging my phone from the ceiling. Since the phone itself was connected to the cafe Wifi, I couldn't use wifi to connect to the phone. So I shared the phone's (cafe wifi) internet over Bluetooth. (I didn't know that was a thing until I tried it!)
(I think I was able to connect to that with another phone and set up a wifi hotspot for all my devices... but it's been a while!)
Maybe it was something like a Raspberry Pi that he placed at that cafe? Curious that his Bluetooth had more reach than the Wifi itself though. Maybe with a directional antenna. Agree, would be interesting to know his setup.
I'm not even diabetic but they always pre-check your blood during blood / plasma donating. I would say it doesn't even register as a pinprick and feels more like the percussive slap of a tiny elastic band.
Ha, I would say quite the opposite, that the finger prick is my least favourite part of giving blood— it's ironic that taking a few drops could be that much worse than the big honking needle which draws an entire pint, but I guess fingertips just have a lot of nerve endings.
Can you share a little about the "additional labs" you did?
I wore a CGM for about a month. Also found that my glucose numbers were not nearly as good as I would have expected, especially considering that I'm quite active and not overweight. But it's the "what next" that I'm stuck on.
Front page has 20% off coupon. This should get you a pretty wide view. You can add on extras, but this should get you most of what you want to understand. But, this level of lab work is going to require 20+ hours of research to understand, and even more if you pop funny values and want to figure out why. Have fun....
I've read Outlive (and am a big fan of Peter Attia in general), but there's really not much there besides "exercise more, eat better".
I was on strict keto for a year, with daily blood tests to monitor ketone levels. My fasting glucose would still be above 100 often enough. Even a moderately sized carb-heavy meal can send my BG above 200 (even after being off of keto for a few months).
Maybe if I paid the $2500 for his "Early" program that details all the labs he does I might get some insight, but that is clearly priced for someone outside my tax bracket.
Thanks for linking the spec. It has been a living document for a long time. I discovered that the implementation had made it into the SDK's master branch. Since it's very early stage and lacking documentation, I made this repo which demonstrates creating a macro that implements some of the most popular codegen functionality Flutter developers use.
My launch day Apple Watch was unbelievably bad. Not even good for telling time as the raise-to-wake feature was so flaky. So by the sound of it, the Vision Pro might be starting in a better position than the watch.
Watch v1 was just awful. Those laptops with butterfly keyboards and the first gen Air were also completely broken in their own ways. If Apple manages to keep iterating on this device, they might eventually have a winner
My job at the time gave me a brand new Series 2 and it was annoying to interact with... when it was new. Dropped frames, missed touches, etc. There was still a little bit of lingering hope there would be "killer apps" outside notifications and exercise.
But nope, nothing more interesting came, and OS updates ruined performance so badly that I happily returned it to my employer 2 years later and opted not to buy my own until 2021 (for exercise and notifications only).
As a counterpoint, I had a Series 2 for years and it worked really well. It was slow, so third party apps were not really usable, but the core functionality of the watch was perfectly fine. That is, until an unfortunate incident broke its screen while in the sea.
I had the watch they launched with, which Apple pretends didn't exist as they named the next model the Series 1 and this model never got a name. The watch improved considerably in the next generations, so you can do the math back from your Series 2 to get a sense of how truly bad it was.
he never said to steal the key, but hijack it - eg by prompt injecting in a different prompt, and using the output of that to serve their own app
nobody seriously does this at any appreciable scale, for rate limiting and reliability reasons, but it is an attack vector for sure and given enough time you could make a "botnet" that compromises a bunch of prompt injection exposed sites at once to serve your needs, but anyone smart enough to do that is probably getting millions in vc funding to build Yet Another LLM Ops Startup
WAAAAAAAAAAAY back in the day, a misconfigured, or brute-forced PBX could present a dialtone to an inbound caller, allowing calls to originate from the system. (Actually, this is probably easier with VOIP trunk credentials nowadays)
Once discovered, this would quickly pivot and feed a redialer service and run up your phone bill something fierce. Till the next billing cycle, the system owner might be none the wiser!
If there is money to be made selling something obtained for free, legally or illegally, it will be abused.
I met an entrepreneur on a flight. He was all excited about AI and was telling me how his social good web app allows users access to an AI prompt. My first thought was "now I know where to go if I ever need free access to ChatGPT."
(For the record, I didn't actually use it, but the idea did pop into my head.)
Social media has effectively split in two directions, and the ends of the spectrum are Discord and TikTok.
TikTok is almost purely algorithmic, stranger-generated content consumption with the novelty factor cranked to 11. Discord has no algorithmic curation, voting, etc, and is just people talking that you have to curate yourself.
Facebook is trying to pivot in the TikTok direction. Problem is there are a lot of people who want to use it to connect with actual people (because that's kinda how it worked in the past), which is orthogonal to their mission of pumping the maximal possible amount of garbage into your brain.
Discord isn't social media, it's an instant messaging app and a terrible one at that. A messaging app can't fully replace early-Facebook-like social network, because it just works so much differently and is optimized for different use cases. There's strangely nothing at all to fill this particular niche, although I'm working on one fediverse project that tries.
I find it hard to believe that there are no products out there trying to fill the 'early-Facebook-like social network' niche. People are discovering that a true social network, between actual people in the physical world, is not a scalable thing...and it should not be. On top of that, these same products trying to create social networks eventually run into a monetization problem.
I love discord. It is the only social media I regularly use. There seems to be a sentiment that pops up every now and again that it’s a shame that content in discord communities is getting “walled off” and inaccessible by google and others from the rest of the internet. That is a strange sentiment to me. Discord communities are private by design. If the server owners want public discourse, there are many options for that. Are these same people upset that there aren’t microphones at every table in restaurants so that those conversations aren’t “walled off” from anyone not in the restaurant? In fact I think scraping website content by third parties for their own indexing should be opt-in, not opt-out, it’s pretty obnoxious in my opinion that you can put up a website intended only for friends and family but then large entities all over the world crawl your content and broadcast it on their own platforms without your consent.
I think most people complaining about that are talking about support discords for software projects - where the default used to be that you contributions were permanent and searchable. Walling it off makes it less useful.
I use discord mostly for keeping up with friends and am very glad those chats aren't on the open internet
I don't think anyone wants to read you and your buddies' discussion of Cities: Skylines II and Super Mario Wonder.
They're irritated by all the open-source projects replacing their mailing list, forum, or wiki with "Just ask on the Slack or Discord". It's the most god-awful mode of community support imaginable.
Discord optimizes for you getting help with your problem at the expense of you being able to help yourself with your problem by searching for other people having the same problem.
Just look to the Discord channels for popular games or 3rd party modpacks to see this constantly in action. Lacking a forum with a pinned thread for FAQs or basic support, the mods/admins/regulars must rely on chatbot auto-answers keyed off of keywords to pull out rote responses to common tech support questions.
I get that the majority, perhaps the vast majority, would prefer such a socially high touch "bulletin board" model, but... some of us run away screaming from such things. I find Discord impossible to navigate in terms of finding discussions of issues that have already occurred, and having to perform my own "archeological excavation" to discover the tidbits that are actually relevant to me is orders of magnitude harder and more irritating than, say, perusing/searching a discussion forum or similar online venue.
For those of us who came of age during the "RTFM before bothering anybody, dammit!" attitude toward supporting engineers, looking for already posted answers to a problem that likely someone else has already solved is vastly superior to bothering someone about a problem they might well be tired of talking about for the 100th time.
I've never been good at "conversation" in real life or online; some of us simply aren't and have/find our strengths elsewhere, and increasingly it seems all online discussions about, say, issues around a game published by a small indie vendor are being pushed to Discord and in some cases even shutting down other online communication channels in favor of that. A vendor who keeps its online discussion forums available and supported is always going to get a lot more interest from me than what I see younger companies doing.
Maybe it's just a big cultural shift, and I am no longer relevant. Not ready to "go away" just yet...
I don’t see how that’s discord’s fault though, blame the project leaders. They must have their reasons. Maybe for projects in active development, content from years ago just isn’t relevant anymore anyway.
Are they? I'm sure there are people who use Discord like that, but I am on dozens of servers and all of them are public, i.e. anyone can join anytime. That's not private that's just hiding from Google.
> If the server owners want public discourse, there are many options for that.
Chat/video/audio as good and popular as Discord? Where? IRC? Matrix?
> Are these same people upset that there aren’t microphones at every table in restaurants so that those conversations aren’t “walled off” from anyone not in the restaurant?
Fair enough but nobody is asking direct messages or the servers for people who actually know each other and want privacy to be on the open web. Just the ones that are closer to being public squares for discussing specific topics.
> In fact I think scraping website content by third parties for their own indexing should be opt-in, not opt-out, it’s pretty obnoxious in my opinion that you can put up a website intended only for friends and family but then large entities all over the world crawl your content and broadcast it on their own platforms without your consent.
Eh, I get what you're saying but don't you think the Internet as a whole loses a lot of its value if this happens? Wasn't Google and good indexing one of the crucial things that led to the Internet revolution?
I’m sure the vast majority of sites would still opt-in to the indexing, considering the lengths people go to with SEO crap to get to the front page of google.
There are groups that hang out behind a subscription. They use payment management services that handle renewals and subscription. Not patrons. They can be really well organized like work slack level of organization. The fees often pay for people to manage the content and staff to moderate. Though moderation staff is generally younger or in poorer countries.
It's not strange to me at all. People use Discord for things that should be publicly searchable, like FAQs or issue tracking. This is usually what drives complaints.
If an open source project chose to track issues using a series of private conversations in restaurants, most of us would recognise how ephemeral and fleeting that is.
And I totally agree; this is the perfect way to try out something like this.