1. 1

    Ok now this is cool. I’ve been a big tailscale user/advocate, but this would allow me to add another service to my cloud server and all of a sudden I have a nice mesh vpn? SWEET!

    Keep up the good work!

    1. 5

      test.{ext}

      I have so many /tmp/test.go, /tmp/test.ex, /tmp/test.rb files it’s sad. Then they get lost on reboot and I curse myself out, but don’t change for some reason.

      1. 2

        Always some variation of test! Unless I’m feeling particularly lazy OR there’s another test in that directory and I don’t want to delete it. Then t.

        Anything with those names is always fair game for deletion, and in fact probably won’t be tolerated next time Future Me runs an ls command.

        1. 2

          I do this as well. I keep a handful of test.whatever files in $HOME with a large number of accumulated includes and imports. All the includes I need to try something out are ready to go in those files.

          1. 2

            One good thing about the name “test” is that it can be typed entirely with the left hand (on a QWERTY keyboard). Depending on the context, this can leave the right hand free to hover over the Enter key or the mouse.

          1. 1

            I’m writing something that will sync my tweets over to Mastodon. A lot of the solutions out there didn’t work so I’m just writing something quick that’ll do it for me.

            So far I have it working - and had the classic “post all recent tweets until I hit ctrl-c” happen. So that was embarrassing, but it’s fun either way!

            1. 2

              If you mean what my personal server is, it’s an IBM POWER6. I freely admit to being an outlier :)

              1. 1

                I’m interested, what specs? and what OS do you use?

                1. 3

                  It’s a “baby” 2-way SMT-2, so four logical CPUs, 16GB of RAM, RAID, etc. I run AIX on it. Admittedly it’s starting to show its age on CPU-bound tasks, but as a server, it’s still doing well.

                  I like the fact I can install PCI cards in it while it’s running and powered up.

              1. 4

                Interesting to see System76 going with fwupd for updating this keyboard firmware instead of their PopOS pop-updater.

                They were pushing their custom firmware updater over fwupd for a long time which led to some sour tastes in peoples’ mouths. I wonder if they’re going to adopt fwupd now instead!

                1. 2

                  This was their response. It sounds like their technical concerns certainly could be addressed (and probably would naturally be addressed as older systems age out and newer ones are built according to current practices). It wouldn’t be surprising if they’d managed to come together on the management concerns by now. The two sides didn’t sound all that far apart, blog posts aside.

                1. 1

                  Honestly not too much nowadays, I find that self hosting eats a lot of time as I get older and it’s not as fun as it used to be (for me at least, ymmv).

                  Things I do self host still:

                  And this isn’t including the tens of VMs I have running on my LAN for dev work etc, but those aren’t doing much “self hosting” more than just running dbs/queues/etc.

                  1. 1

                    Cool article.

                    One thing that immediately comes to mind is using Posgres as a job queue, its pretty common. The only thing that is (currently) missing is a better interface for it. This gist has been around forever and shows how fast it can really be and it’s only gotten faster due to the newer PG features being introduced, SKIP LOCKED most notably.

                    If there were more client libraries and a better interface for leveraging your existing postgres instance as a queue maybe the feature would get used a lot.

                    1. 4

                      Surprising results. I can’t wait until I can get an actual ARM (or any non-x86) board to use as a server.

                      Sidenote: The Talos PPC workstations look enticing but they’re a bit too expensive for me. Maybe POWER10 will be cheaper + more efficient than POWER9

                      1. 3

                        You can get plenty of them, they’re just generally not this powerful.

                      1. 4

                        Another +1 to Bitwarden, been using it for years. Before that I used 1password until I moved off of mac, then LastPass which was just all around a bad experience.

                        Bitwarden is just a steal at $10/yr and the option to basically seamlessly self-host if need be is just great. I’ve been debating standing up bitwarden_rs, I had tried the Ruby bitwarden implementation and it was not so good.

                        1. 11

                          Either email or the “Saved Messages” feature in Telegram, works great!

                          1. 2
                            • De-stickering my old work laptop to send back (got a new x1 carbon, its great!), not going to be fun!
                            • Tomorrow is the cheat day for the diet, so I’m very excited to try out the new local brewery’s beer they just came out with.
                            • Probably going to play with writing a simple kafka consumer in Go, since we’re going towards that way for work and I’m actually going to get to use something other than Ruby.
                            1. 2

                              (this got long, TL;DR: OO shell would be cool, but maybe simplicity is key, also check out jq!)

                              I like the idea of a “smarter” shell and while PowerShell is a good try, it’s definitely clunky and not a good one. It just feels so un-ergonomic (Get-ChildItem? is that to get a sub-process? what?). Also Perl’s implicit variables sprinkled throughout is just straight weird.

                              The idea of an OO shell that pipes objects vs just straight text would be cool, and jq kind of serves that purpose for me. One can map/filter/reduce json data in a pipeline, it’s awesome! Although adding methods to these objects would be pretty nifty…making filtering etc in pipelines even easier. But then again that makes it harder to understand. Looking up 6 different unix utilities (with great man pages) might be easier than looking up one or two custom object. But maybe that’s just because I’m so used to the standard coreutils.

                              Well this got longer than I thought it would be. Thanks for coming to my TED talk.

                              1. 3

                                The concept of item is defined as an object from a provider system, so a file or folder, a registry key, a row from an SQL database, etc. So Get-ChildItem just means children of an item. Commonly you would just write ls in the terminal if you want to invoke it.

                                If you want to do something related to processes, but you don’t know the command, I would highly recommend trying out gcm *process*. You’ll find that pwsh has a lot of aliases defined for common actions, gcm being aliased to Get-Command for simpler use. This command will list out every command that matches what you supplied as a search string, and since all commands in pwsh are so verbose, it’s rather easy to find a command that might do what you want.

                                And honestly, I have yet to find a unix utility with an actual “great” man page. At least in comparison to how damn good the man pages are in pwsh.

                                1. 2

                                  In practice you don’t write the whole cmdlet, you just write gci.

                                  1. 1

                                    That’s my feeling about PowerShell as well. I like the ideas behind it. However, PowerShell the language is clunky, and on Windows, PowerShell the terminal environment is also clunky. Powerful in its ability to expose Windows APIs, and definitely better than cmd.exe or JScript/VBScript, but still…

                                    I’m still not sure what a perfect programmatic shell should look like. There are some ideas coming from the ML/Haskell land that may be more promising than the OO approach.

                                    1. 3

                                      I dunno, the ISE[1] is pretty nice. PS does feel clunky for oneliners but it’s quite solid once you go above 1 line.

                                      It’s still slow though. If I have to deal with multiple large textfiles I prefer to use Cygwin and cat/grep/Perl.

                                      [1] integrated scripting environment

                                  1. 1

                                    I’ve been using thelounge for a bit now and have no complaints. Tons of themes to make it look better, runs super lightly, and the UI is repsonsive so a bookmarked PWA on mobile works great etc.

                                    1. 4

                                      My wife is getting out of the hospital as well, so I am grateful for that.

                                      Going to start working on a GIANT epic at work, can’t disclose much here but it’s pretty fun and involves making user’s lives easier (one click setup with AWS anyone?). Going to be doing the new stuff in Go as well, so it will be fun to mess with something other than Ruby. Or maybe it’ll bring more headaches. Who knows! Find out next week in “hard concurrency is”

                                      1. 4

                                        Learning Erlang by reading https://learnyousomeerlang.com/

                                        1. 1

                                          If that book leaves you looking for more, Programming Erlang is a classic: https://www.goodreads.com/book/show/808814.Programming_Erlang

                                          1. 1

                                            I am reading this too. I have slogged through the functional programming stuff and am about up to where the concurrency material starts. Hopefully it’s about to become a lot more interesting!

                                            1. 0

                                              Enjoy! Erlang is such a fun language. If you have Ruby experience I can recommend Elixir as well, they’re really closely related.

                                            1. 2

                                              Peer to peer and in plain text, just as the unix gods intended!

                                              1. 2

                                                Also probably insecure as heck, like finger.

                                              1. 7

                                                Honestly, Go is one of the few languages I feel like most people who already know a language could pick up in ~5-10 minutes. Minus goroutines, channels, and maybe interfaces it’s so damn simple.

                                                1. 6

                                                  And with goroutines, channels, and interfaces it really only takes a couple days of solid use to get comfortable.

                                                  1. 3

                                                    There are gotchas with capturing variables in a loop before passing them in to goroutines, and that for x := range []int{3,4,5} loops over the indices, not the elements. And fetching a rune from a string can not be done with s[1], but with []rune(s)[1]. Tiny things like these take additional time to learn.

                                                1. 76

                                                  Is there any way to support Lobsters’ hosting? Now that the server is not donated, I wouldn’t mind chipping in a little bit every month to subsidize operating costs.

                                                  1. 7

                                                    +1 to this, I’d donate!

                                                    1. 5

                                                      +1 I would too.

                                                      1. 3

                                                        Ditto. I can provide Sysadmin expertise and/or moderator time as well, if desired.

                                                        1. 11

                                                          Ever hear the internet rule of thumb: “Anyone who asks to be a moderator should never be made one.” ?

                                                          1. 3

                                                            Ditto re: sysadmin / SRE work.

                                                            1. 3

                                                              Ditto, can volunteer with SRE work

                                                            2. -1

                                                              +1

                                                            1. 5

                                                              Great write-up, I had no idea the REPL of lisp/smalltalk was so powerful. I need to get around to learning clojure.

                                                              I think the elixir* REPL fits the bill for the most part - if I start up one iex instance and connect to it from another node I can define modules/functions and they show up everywhere. And for hot-fixing in production one can connect to a running erlang/elixir node and fix modules/functions on the REPL live, and as long as the node doesn’t get restarted the fix will be there.

                                                              * erlang doesn’t quite fit the bill since one can’t define modules/functions on the REPL, you have to compile them from the REPL.

                                                              1. 3

                                                                Does Clojure actually have these breakloops though? I think I’ve seen some libraries that allow doing parts of it (restarts), but isn’t the default a stacktrace and “back to the prompt”?

                                                                1. 1

                                                                  You’re correct. Interactivity and REPL affordances are areas where Clojure–otherwise an advancement over earlier Lisps–really suffers compared to, for instance, Common Lisp. You don’t have restarts, there is a lot you can’t do from the REPL, and it’s easy to get a REPL into a broken state that can’t be fixed without either a full process restart or using something like Stuart Sierra’s Component to force a full reload of your project (unless you know a ton about both the JVM and the internals of the Clojure compiler). You also can’t take a snapshot of a running image and start it back up later, as you can with other Lisps (and I believe Smalltalk). (This can be useful for creating significant applications that start up very quickly; not coincidentally, Clojure apps start up notoriously slowly.)

                                                                  1. 1

                                                                    Well, prompt being the Clojure repl, but you’re correct that the breakloop isn’t implemented, as far as I got in the language. You can must implement the new function and re-execute, so you lose all of the context previous to the break. I think with all of the customizability of what happens when a stack trace happens, it’s possibly possible.

                                                                    I THINK the expected use with Clojure is to try to keep functions so small and side effect free that they are easy to iterate on in a vacuum. Smalltalk and CL have not doubled down on functional and software transactional memory like Clojure has. That makes this a little more nuanced than “has/doesn’t have a feature”.

                                                                1. 12

                                                                  I ended up doing this myself too. Went the whole route of having a cluster of k8s nodes on spare hardware, deployed EVERYTHING to it but ended up spending way too much time just getting stuff working, most notably having to pin deployments to boxes so port-forwarding would work. Also having a PVC provisioner is not fun.

                                                                  It was a huge pain, but a good learning experience. The one thing I sort of miss about it was having a nginx ingress, so one can just create an ingress resource and ingress routes traffic to the pods. Caddy handles that now though.

                                                                  I now use vultr for everything as well and am satisfied. It kind of goes to show that k8s really isn’t necessary even for container workloads. I’ve replaced my k8s deployments with podman run commands, from there you can generate a systemd unit file with podman generate systemd <containername>, then you have containers starting like services! It works great!

                                                                  1. 6

                                                                    podman generate systemd

                                                                    Thanks for mentioning that, I didn’t know about it. That’s really good to know!

                                                                    1. 3

                                                                      Absolutely! I recommend the –new and –name flags as well. That way it runs a new container every time and the service is the name you give it rather than the container SHA.

                                                                    2. 2

                                                                      Have you looked at systemd-nspawn?

                                                                      1. 3

                                                                        I have - but you have to jump through hoops to run OCI images e.g. using skopeo to copy the image down, extracting it, the spawning the chroot, firewall rules to forward traffic from the host into the container etc. Podman just does it all for you.

                                                                        Maybe I’m just lazy but the UX is nicer.