Threads for hwj

  1. 1

    $ curl https://alx.sh | sh

    Didn’t expect to see such a thing on an OpenBSD list ;-)

    1. 1

      hahaha, good catch. you’re right, I didn’t notice it myself :)

    1. 4

      (neo)vim

      1. 1

        One of the reasons I run a DNS server is the ability to set low TTLs. I’m not in the market for TTLs >= 1h which I get from my registrar.

        1. 70

          Nobody knows how to correctly install and package Python apps.

          That’s a relief. I thought I was the only one.

          1. 8

            Maybe poetry and pyoxidize will have a baby and we’ll all be saved.

            One can hope. One can dream.

            1. 4

              After switching to poetry, I’ve never really had any issues.

              pip3 install --user poetry
              git clone...
              cd project
              poetry install
              poetry run python -m project
              

              You can pull the whole install sequence in a Docker container, push it in your CI/CD to ECR/Gitlab or whatever repo you use, and just include both the manual and the docker command in your readme. Everyone on your team can use it. If you find an issue, you can add that gotcha do the docs.

              Python is fine for system programming so long as you write some useful unittests and force pycodestyle. You loose the type-safety of Go and Rust, yes, but I’ve found they’re way faster to write. Of course if you need something that’s super high performance, Go or Rust should be what you look towards (or JVM–Kotlin/Java/Scala if you don’t care about startup time or memory footprints). And of course, it depends on what talent pools you can hire from. Use the right tool for the right job.

              1. 2

                I’ve switched to poetry over the last several months. It’s the sanest installing python dependencies has felt in quite a few years. So far I prefer to export it to requirements.txt for deployment. But it feels like about 95% of the right answer.

                It does seem that without some diligence, I could be signing up for some npm-style “let’s just lock in all of our vulnerabilities several versions ago” and that gives me a little bit of heartburn. From that vantage point, it would be better, IMO, to use distro packages that would at least organically get patched. I feel like the answer is to “just” write something to update my poetry packages the same way I have a process to keep my distro packages patched, but it’s a little rotten to have one more thing to do.

                Of course, “poetry and pyoxidize having a baby” would not save any of this. That form of packaging and static linking might even make it harder to audit for the failure mode I’m worrying about here.

              2. 1

                What are your thoughts on pipenv?

              3. 5

                I’d make an exception to this point: “…unless you’re already a Python shop.” I did this at $job and it’s going okay because it’s just in the monorepo where everyone has a Python toolchain set up. No installation required (thank god).

                1. 4

                  I think the same goes for running Python web apps. I had a conversation with somebody here… and we both agreed it took us YEARS to really figure out how to run a Python web app. Compared to PHP where there is a good division of labor between hosting and app authoring.

                  The first app I wrote was CGI in Python on shared hosting, and that actually worked. So that’s why I like Unix – because it’s simple and works. But it is limited because I wasn’t using any libraries, etc. And SSL at that time was a problem.

                  Then I moved from shared hosting to a VPS. I think I started using mod_python, which is the equivalent of mod_php – a shared library within Apache.

                  Then I used a CherryPy server and WSGI. (mod_python was before WSGI existed) I think it was behind Apache.

                  Then I moved to gunicorn behind nginx, and I still use that now.

                  But at the beginning of this year, I made another small Python web app with Flask. I managed to configure it on shared hosting with FastCGI, so Python is just like PHP now!!! (Although I wouldn’t do this for big apps, just personal apps).

                  So I went full circle … while all the time I think PHP stayed roughly the same :) I just wanted to run a simple app and not mess with this stuff.

                  There were a lot of genuine improvements, like gunicorn is better than CherryPy, nginx is easier to config than Apache, and FastCGI is better than CGI and mod_python … but it was a lot of catching up with PHP IMO. Also FastCGI is still barely supported.

                  1. 2

                    nginx, uWSGI, supervisord. Pretty simple to setup for Flask or Django. A good shared hosting provider for Python is OpalStack, made by the people who created Webfaction (which, unfortunately, got gobbled up by GoDaddy).

                    I cover the deployment options and reasoning in my popular blog post, “Build a web app fast: Python, JavaScript & HTML resources”. Post was originally written in 2012 but updated over the years, including just this month. See especially the recommended stack section at the end, starting at “Conclusion: pick a stack”, if you want to ctrl+f for that section. You can also take a peek at how OpalStack describes their Python + uWSGI + nginx shared hosting setup here. See also my notes on the under the hood configuration for nginx, uWSGI, and supervisord in this presentation, covered in the 5-6 sections starting from this link.

                    You’re right that there are a lot of options for running a Python web app. But nginx, uWSGI, supervisord is a solid option that is easy to configure, high performance, open source, UNIXy, and rock solid. For dependency management in Python 3.x you can stick with pip and venv, remotely configured on your server via SSH.

                    My companies have been using this stack in production at the scale of hundreds of thousands of requests per second and billions of requests per month – spanning SaaS web apps and HTTP API services – for years now. It just works.

                    1. 2

                      I’m curious, now that systemd is available in almost all Linux distributions by default, why are you still using supervisord? To me it feels like it is redundant. I’m very interested.

                      1. 1

                        I think systemd can probably handle the supervisord use cases. The main benefit of supervisord is that it runs as whatever $USER you want without esoteric configuration, and it’s super clear it’s not for configuring system services (since that’s systemd’s job). So when you run supervisorctl and list on a given node, you know you are listing “my custom apps (like uwsgi or tornado services)”, not all the system-wide services as well as my custom app’s ones. Also this distinction used to matter more when systemd was less standard across distros.

                        1. 1

                          Understood! Thanks very much for taking the time to explain!

                      2. 1

                        Hm thanks for the OpalStack recommendation, I will look into it. I like shared hosting / managed hosting but the Python support tends to be low.

                        I don’t doubt that combination is solid, but I think my point is more about having something in the core vs. outside.

                        PHP always had hosting support in the core. And also database support. I recall a talk from PHP creator Ramsus saying how in the early days he spent a ton of time inside Apache, and committed to Apache. He also made some kind of data limiting support to SQL databases to make them stable. So he really did create “LAMP”, whereas Python had a much different history (which is obviously good and amazing in its own way, and why it’s my preferred language).

                        Similar to package management being outside the core and evolving lots of 3rd party solutions, web hosting was always outside the core in Python. Experts knew how to do it, but the experience for hobbyists was rough. (Also I 100% agree about not developing on Windows. I was using Python on Windows to make web apps from ~2003-2010 and that was a mistake …)

                        It obviously can be made to work, I mean YouTube was developed in Python in 2006, etc. I just wanted to run a Python web app without learning about mod_python and such :) Similarly I wish I didn’t know so much about PYTHONPATH!

                        1. 1

                          I agree with all that. This is actually part of the reason I started playing with and working on the piku open source project earlier this year. It gives Python web apps (and any other Python-like web app programming environments) a simple git-push-based deploy workflow that is as easy as PHP/Apache used to be, but also a bit fancier, too. Built atop ssh and a Linux node bootstrapped with nginx, uWSGI, anacrond, and acme.sh. See my documentation on this here:

                          https://github.com/amontalenti/webappfast-piku#build-a-web-app-fast-with-piku

                          1. 1

                            Very cool, I hadn’t seen piku! I like that it’s even simpler than dokku. (I mentioned dokku on my blog as an example of something that started from a shell script!)

                            I agree containers are too complex and slow. Though I think that’s not fundamental, and is mostly Docker … In the past few days, I’ve been experimenting with bubblewrap to run containers without Docker, and different tools for buliding containers without Docker. (podman is better, but it seems like it’s only starting to get packaged on Debian/Ubuntu, and I ran into packaging bugs.)

                            I used containers many years ago pre-Docker, but avoided them since then. But now I’m seeing where things are at after the ecosystem has settled down a bit.

                            I’m a little scared of new Python packaging tools. I’ve never used pyenv or pipx; I use virtualenv when I need it, but often I just manually control PYTHONPATH with shell scripts :-/ Although my main language is Python, I also want something polyglot, so I can reuse components in other languages.

                            That said I think piku and Flask could be a very nice setup for many apps and I may give it a spin!

                            1. 1

                              It’s still a very new and small project, but that’s part of what I love about it. This talk on YouTube gives a really nice overview from one of its committers.

                        2. 1

                          In addition to @jstoja’s question about systemd vs supervisord, I’d be very curious to hear what’s behind your preference for nginx and uWSGI as opposed to caddy and, say, gunicorn. I kind of want caddy to be the right answer because, IME, it makes certificates much harder to screw up than nginx does.

                          Have you chosen nginx over caddy because of some gotcha I’m going to soon learn about very unhappily?

                          1. 2

                            Simple answer: age/stability. nginx and uWSGI have been running fine for a decade+ and keep getting incrementally better. We handle HTTPS with acme.sh or certbot, which integrate fine with nginx.

                            1. 1

                              That’s a super-good point. I’m going to need to finish the legwork to see whether I’m willing to bet on caddy/gunicorn being as reliable as nginx/uWSGI. I really love how terse the Caddy config is for the happy path. Here’s all it is for a service that manages its own certs using LetsEncrypt, serves up static files with compression, and reverse proxies two backend things. The “hard to get wrong” aspect of this is appealing. Unless, of course, that’s hiding something that’s going to wake me at 3AM :)

                      3. 3

                        Why is Python’s packaging story so much worse than Ruby’s? Is it just that dependencies aren’t specified declaratively in Python, but in code (i.e. setup.py), so you need to run code to determine them?

                        1. 9

                          I dunno; if it were me I’d treat Ruby exactly the same as Python. (Source: worked at Heroku for several years and having the heroku CLI written in Ruby was a big headache once the company expanded to hosting more than just Rails apps.)

                          1. 3

                            I agree. I give perl the same handling, too. While python might be able to claim a couple of hellish inovations in this area, it’s far from alone here. It might simply be more attractive to people looking to bang out a nice command line interface quickly.

                          2. 6

                            I think a lot of it is mutable global variables like PYTHONPATH which is sys.path. The OS, the package managers, and the package authors often fight over that, which leads to unexpected consequences.

                            It’s basically a lack of coordination… it kinda has to be solved in the core, or everybody else is left patching up their local problems, without thinking about the big picture.

                            Some other reasons off the top of my head:

                            • Python’s import mechanism is very dynamic, and also inefficient. So the language design kind of works against the grain of easy distribution, although it’s a tradeoff.
                            • There’s a tendency to pile more code and “solutions” on top rather than redoing things from first principles. That is understandable because Python has a lot of users. But there is definitely a big mess with distutils + setuptools + pip + virtualenv, plus a few other things.
                            • Package managers are supposed to solve versioning issues, and then you have the tricky issue of the version of the package manager itself. So in some sense you have to get a few things right in the design from the beginning!
                            1. 5

                              Ruby’s packaging story is pretty bad, too.

                              1. 3

                                In what way?

                                1. 4

                                  I don’t know, it’s been a long time since I’ve written any Ruby. All I know is that we’re migrating the Alloy website from Jekyll to Hugo because nobody could get Jekyll working locally, and a lot of those issues were dependency related.

                              2. 4

                                Gemfile and gemspec are both just ruby DSLs and can contain arbitrary code, so that’s not much different.

                                One thing is that pypi routinely distributes binary blobs that can be built in arbitrarily complex ways called “wheels” whereas rubygems always builds from source.

                                1. 5

                                  Not true. Ruby has always been able to package and distribute precompiled native extensions, it’s just that it wasn’t the norm in a lot of popular gems, including nokogiri. Which by the way, ships precompiled binaries now, taking couple of seconds where it used to take 15m, and now there’s an actual tool chain for targeting multi arch packaging, and the community is catching up.

                                  1. 2

                                    Hmm, that’s very unfortunate. I haven’t run into any problems with gems yet, but if this grows in popularity the situation could easily get as bad as pypi.

                                  2. 1

                                    Thanks for the explanation, so what is the fundamental unfixable issue behind Python’s packaging woes?

                                    1. 1

                                      I could be wrong but AFAICT it doesn’t seem to be the case that the Ruby crowd has solved deployment and packaging once and for all.

                                  1. 2

                                    I just run pkg install some-python-package-here using my OS’s package manager. ;-P

                                    It’s usually pretty straightforward to add Python projects to our ports/package repos.

                                    1. 3

                                      Speaking from experience, that works great up until it doesn’t. I have “fond” memories of an ex-coworker who developed purely on Mac (while the rest of the company at the time was a Linux shop), aggressively using docker and virtualenv to handle dependencies. It always worked great on his computer! Sigh. Lovely guy, but his code still wastes my time to this day.

                                      1. 1

                                        I guess I’m too spoiled by BSD where everything’s interconnected and unified. The ports tree (and the package repo that is built off of it) is a beauty to work with.

                                        1. 4

                                          I’m as happy to be smug as the next BSD user but it isn’t justified in this case. Installing Python packages works for Python programs installed from packages but:

                                          • They don’t work well in combination with things not in packages, so if you need to use pip to install some things you may end up with conflicts.
                                          • The versions in the package repo may or may not be the ones that the thing you want to install that isn’t in packages need, and may conflict with the ones it needs.
                                          • The Python thing may depend on one of the packages that depends on Linux-specific behaviour. The most common of these is that signals sent to the process are delivered to the first thread in the process.

                                          In my experience, there’s a good chance that a Python program will run on the computer of the author. There’s a moderately large chance that it will run on the same OS and version as the author. Beyond that, who knows.

                                          1. 3

                                            I mean, we used Ubuntu, which is pretty interconnected and unified. (At the time; they’re working on destroying that with snap.) It just often didn’t have quiiiiiite what we, or at least some of us, wanted and so people reached for pip.

                                            1. 1

                                              Yeah. With the ports tree and the base OS, we have full control over every single aspect of the system. With most Linux distros, you’re at the whim of the distro. With BSD, I have full reign. :-)

                                              1. 3

                                                But it could still be the case that application X requires Python 3.1 when application Y requires Python 3.9, right? Or X requires version 1.3 of library Z which is not backwards compatible with Z 1.0, required by Y?

                                                1. 3

                                                  The Debian/Ubuntu packaging system handles multiple versions without any hassle. That’s one thing I like about it.

                                                  1. 1

                                                    Does it? Would love to read more about this if you have any pointers!

                                                    1. 2

                                                      I guess the main usability thing to read about it the alternatives system.

                                                  2. 2

                                                    The ports tree handles multiple versions of Python fine. In fact, on my laptop, here’s the output of: pkg info | grep python:

                                                    py37-asn1crypto-1.4.0          ASN.1 library with a focus on performance and a pythonic API
                                                    py37-py-1.9.0                  Library with cross-python path, ini-parsing, io, code, log facilities
                                                    py37-python-docs-theme-2018.2  Sphinx theme for the CPython docs and related projects
                                                    py37-python-mimeparse-1.6.0    Basic functions for handling mime-types in Python
                                                    py37-requests-toolbelt-0.9.1   Utility belt for advanced users of python-requests
                                                    py38-dnspython-1.16.0          DNS toolkit for Python
                                                    python27-2.7.18_1              Interpreted object-oriented programming language
                                                    python35-3.5.10                Interpreted object-oriented programming language
                                                    python36-3.6.15_1              Interpreted object-oriented programming language
                                                    python37-3.7.12_1              Interpreted object-oriented programming language
                                                    python38-3.8.12_1              Interpreted object-oriented programming language
                                                    
                                        2. 1

                                          Fwiw, I’ve had good luck using Pyinstaller to create standalone binaries. Even been able to build them for Mac in Circleci.

                                          1. 1

                                            It can feel a bit like overkill at times, but I’ve had good luck with https://www.pantsbuild.org/ to manage python projects.

                                            1. 3

                                              Without controlling for seniority or location, those numbers are pretty meaningless. According to levels.fyi, the most junior software engineer that they track at any of the big tech companies makes over $150K/year, yet this list has an upper bound of $95K/year. The numbers for the big tech companies are skewed by the fact that they are mostly based in a couple of big tech hubs (San Francisco and Seattle) that have very high cost of living. In contrast, someone in a small town can make half as much and still have a higher disposable income. I’m really curious how that’s going to change as more places move to remote working (why should the company pay you more to live in San Francisco if they don’t need you to live in San Francisco?).

                                              There are a few things on that list that make me very suspicious. For example, they report Objective-C developers making about 10% more than Swift developers. As the maintainer of the GNUstep ObjC stack, I’d love to believe that, but I suspect it’s really just an artefact of seniority: most new developers in the iOS / macOS ecosystem are going to be using Swift and so there are probably more junior Swift developers than there are total Objective-C developers. HTML/CSS developers are paid less than bash developers, which makes me think that they let people select multiple options and more junior folks are willing to report doing front-end work, whereas more senior folks report doing more *NIX sysadmin work. PowerShell is mid way between F# and C# in reported earnings, but I’d expect pretty much everyone who ticked F# or C# to also tick PowerShell (and probably a lot of folks to tick all three), so the location of PowerShell probably tells us more about the relative numbers of C# and F# developers in the sample than anything else.

                                            1. 39

                                              I’d prefer every downvote to cost karma points for the downvoter as well (not just for the downvotee).

                                              1. 11

                                                Maybe not cost, but those who flag a lot should get the same banner. Perhaps they already do. I haven’t flagged or seen that banner before.

                                                1. 4

                                                  It’s an interesting idea (though I can think of a few downsides as well). It adds a cost to flagging. Though I’m not sure how effective it would be on heated discussions with minority viewpoints where the commenter will feel the brunt of the flags but each flag costs a user a single point of karma.

                                                  1. 3

                                                    It adds a cost to flagging.

                                                    That’s exactly the point - to prevent people from blindly flagging everything they disagree with.

                                                    1. 1

                                                      Indeed, that was in agreement, apologies.

                                                    2. 2

                                                      Maybe we could play with the concept of “refunds” where an administrator certifying a flag (i.e. spam or self-promo) would give the karma back? Limiting the scope of said refunds would also prevent any ethical quandaries for the administrators.

                                                      1. 1

                                                        I thought about this as well, but this then places additional work on the admins or mods to actually go back and mark a flagged comment is valid. I also presume, especially because of the current usage of flags being used as “disagree” buttons, that many comments are flagged in a day. Hopefully a “currency” style of flagging helps, but I’m not certain.

                                                    3. 2

                                                      Feels a bit punitive. You can get a similar effect by having different downvotes weighted differently. E.g, every user has a base outgoing downvote scale of 1, each of your downvotes in a given calendar day has a base downvote power of the inverse of the number of downvotes you cast that day. That is: if you cast 2 downvotes in a day, each one has a base power of 0.5; if you cast 10 downvotes in a day each one has a base power of 0.1. That way people can just cast as many downvotes as suits the way they use the site, but the mechanics don’t add an incentive to cast more downvotes.

                                                      You could also take the base power of a downvote in a given thread and multiply it by the total number of upvotes that user received in that thread on that day. Or like, score every user according to pagerank for each topic and weight their actions based on their relative expertise in that topic (although that probably favors old accounts)

                                                      This is all assuming “democratic discourse” actually works, which I’m not particularly convinced of. It seems that on all the sites that structure discourse by popularity that a form of tyranny of the majority takes hold, and gets more and more severe as that network grows.

                                                      1. 2

                                                        That you refer to flagging (i.e. identifying something as inappropriate) as “downvoting” is the key take away here, IMO.

                                                        I don’t know what the official word is, but my view is that if you flag something because you disagree with it, you’re Doing It Wrong (TM).

                                                        1. 1

                                                          Which was the key issue here. If we let everyone “flag” things and give that flag any authority (such as, suggesting that a user takes a break or deletes their account), then we’ll just end up with like-minded people that only approve of each-others thoughts. If, on the other hand, we make this a signal for the mods, then the mods get the banner in question, the mods can have further authority to decide if this really is an issue. Context matters, and flags or downvotes system do not look at context.

                                                          1. 1

                                                            I think it is mostly a signal for mods now. But while Lobsters has an upvote, but no downvote, people are going to mis-use the flags to indicate “I disagree with this”.

                                                      1. 19

                                                        I enjoy the ESP32 boards quite a bit. They are very cheap, they come with WiFi and BT built in, and you can write either C or Arduino code for them.

                                                        There are the older esp8266 boards but they lack some cool power management stuff the newer ESP32 boards have.

                                                        1. 3

                                                          They also come with a pretty nice SDK - it’s usually the bane of the smaller boards, that the SDKs are terrible or you end up having to write a whole lotta a drivers yourself, which isn’t what I find fun ;-)

                                                          1. 1

                                                            I agree, the ESP32-IDF SDK is surprisingly pleasant. But there are some other embedded SDKs that seem nice too, like Zephyr and mbedOS, that support a lot of popular ARM-based boards. (Though I haven’t actually used them.)

                                                          2. 3

                                                            I have a bunch of the ESP8266s flashed with Tasmota, on breadboards with a Dallas temperature sensor for monitoring stuff around the house.

                                                            One of them has a relay which controls my garage door in parallel with the garage door switch at the wall. I have a few that are embedded in “smart outlets” bought from Amazon that I flashed Tasmota over-the-air as to avoid closed source firmware.

                                                            All of these are connected to my Hubitat for automation and pushing temps to InfluxDB. Here is a snapshot of one of my Grafana dashboards: https://snapshot.raintank.io/dashboard/snapshot/jzZznlmjEWaatSNw1AbN2znAPcC4N8wE

                                                            1. 2

                                                              Hubitat rules so hard.

                                                              1. 1

                                                                I bought the C5 shortly after it was released and they have done a great job improving it over time, the web UI is lot more responsive than it used to be and there has been a steady flow of sane features while still keeping it rather simple/focused. I like it a lot!

                                                                1. 2

                                                                  My only real issue is that geofencing with the mobile app doesn’t work consistently. Everything else is extremely reliable.

                                                                  1. 2

                                                                    Agreed, forgot about geofencing… My current workaround is the OwnTracks phone app with OwnTracks Presence app for Hubitat: https://github.com/bdwilson/hubitat/tree/master/OwnTracks-Presence - the downside is battery consumption on my phone is higher. I also use an app for presence based on WiFi since my phone has a static IP on my LAN.

                                                            2. 2

                                                              For the embedded category I really like the Nordic nRF52 chips. Well supported in Rust, nice bunch of peripherals onboard, debugging with OpenOCD+gdb works well, official docs are nice. Supports BLE, 802.15.4, ESB for radio. No Wi-Fi but that only makes everything lighter.

                                                              1. 1

                                                                That’s what I’ve started with, and they are fun for sure. I went with the Adafruit Huzzah32 boards, for a nice combination of features and low-enough price. (Might use something else if making a bunch of something.)

                                                                Next up, using uLisp on the one I’ve got on order.

                                                                1. 1

                                                                  Alternative: WFI32

                                                                1. 7

                                                                  Sourcehut began to silently support this last week as well, as the appropriate libraries used to validate SSH keys got updated. Sadly work on supporting FIDO2 as a second factor is blocked by the combination of the insistence that every feature of Sourcehut works without JS and Webauthn lacking a non-JS way to use it.

                                                                  1. 2

                                                                    the insistence that every feature of Sourcehut works without JS

                                                                    This is one of the reasons why Sourcehut is appealing to me.

                                                                  1. 2

                                                                    I don’t have a strong opinion on this, but I like your effort :)

                                                                    1. 2

                                                                      For those wondering what’s inside:

                                                                      A raspberrypi 4 is the brain of the project. Everything runs on Python […]

                                                                      1. 1

                                                                        I remember doing something waaay simpler on a PIC18F4550 for a uni project.

                                                                        As cool as it may be, I found it one of the most frustrating projects I’ve ever built.

                                                                        1. 1

                                                                          Was that in assembly?

                                                                          All these bank selections a PIC needs seem to be not very convenient for both humans and compilers…

                                                                          1. 1

                                                                            Yes it was.

                                                                            Inconvenient indeed.

                                                                        1. 1

                                                                          I’m using mailbox.org:

                                                                          • Privacy: good (e.g. you can encrypt all incoming mails with a GPG key)
                                                                          • Cost: 1 EUR/month
                                                                          • Reliability/Longevity of the service: I had maybe 1-2 hours outage in the last 2 years or so
                                                                          • Features: several, but I don’t use them

                                                                          If you don’t have a domain you can still generate random aliases (@temp.mailbox.org). However, these random aliases will be deleted after a month. So it’s probably not the behavior you want.

                                                                          (Btw. friend invitations include 3 months for free. Drop me a PM if you need one).

                                                                          1. 10

                                                                            1+ for including Forth.

                                                                            I wonder if it’s feasible to transpile Forth to CPython’s VM (or vice versa) since they are both stack based…

                                                                            1. 7

                                                                              1+

                                                                              I see what you did there.

                                                                              1. 3

                                                                                I’ve actually wondered the opposite before: could Forth be an extensible, bare metal VM for some stack machine based languages?

                                                                                1. 1

                                                                                  Does CPython’s VM contain registers? Forth isn’t just “stack based”, just operations are performed on it. The canonical Forth virtual machine has two stacks.

                                                                                1. 16

                                                                                  Just in case you want a visual on that, here is a German article with a picture of the burnt down SBG2 datacentre. Doesn’t look good.

                                                                                  1. 2

                                                                                    Some people have enough self-mockery to make fun of it:

                                                                                    https://pr0gramm.com/

                                                                                    1. 3

                                                                                      yeah but these guys have offsite backups.. so apparently memes have more technical knowledge and backups

                                                                                    1. -1

                                                                                      FYI I am flagging this as the full drewdevault.com domain was banned from lobste.rs. I expect the admins to remove your post or ban you for posting those blog posts.

                                                                                      1. 5

                                                                                        Flagging it as what? None of the categories is appropriate. I find your desire for some post to be deleted or a person to be banned for posting something relevant appalling.

                                                                                        1. 4

                                                                                          I wouldn’t expect a ban if someone didn’t know. It’s probably confusing to post something from someone who can’t respond, however.

                                                                                          1. 3

                                                                                            Why was it banned? I don’t see a mention of the ban anywhere in the rules…

                                                                                            1. 3

                                                                                              Among the top 3 results here

                                                                                              https://lobste.rs/moderations?moderator=pushcx&what%5Bdomains%5D=domains

                                                                                              However it just refers to top-level submissions, links in comments are fine.

                                                                                            2. 1

                                                                                              Sorry.

                                                                                              I knew this domain was banned for submissions, but I thought links to specific (on topic) posts are OK.

                                                                                              Btw: I just upvoted your explanation because I appreciate it :)

                                                                                              1. 0

                                                                                                Just to be clear I am being annoying on purpose because I don’t like the fact that the admin bans the entire domain on a power trip for no reason at all just because he has a personal problem with the author (who isn’t even the one posting the links to that domain on lobste.rs). I thought that this website is different and community moderated but sadly it isn’t and the moderation suffers from all the same problems as everywhere else. I don’t actually see anything wrong with the domain, its content or your comment. I just don’t like the admin who is being petty and if he wants to act like this then he should manage his own RSS subscription and not this website.

                                                                                          1. 2

                                                                                            I’ve heard that DeepMind uses it, or some derivative of it. I think the guy who invented it at Apple got hired by Google.

                                                                                            1. 5

                                                                                              That guy was Chris Lattner. He and others developed Swift for Tensorflow with it, but it got archived last month. I dont know if they still use it internally.

                                                                                              1. 2

                                                                                                He and others developed Swift

                                                                                                and LLVM ;)

                                                                                            1. 9

                                                                                              I’ve been waiting for episode 2 of this to drop for 3 years 😂

                                                                                              1. 3

                                                                                                There’s a “drop” word joke here.

                                                                                                1. 3

                                                                                                  glad you could pick it out? I hope it didn’t cause your eyes to roll?

                                                                                                  1. 3

                                                                                                    Thx, I didn’t catch that.

                                                                                                1. 2

                                                                                                  The group consisted of about 40 members with almost the same number of opinions

                                                                                                  Seems like not much changed since then…

                                                                                                  1. 1

                                                                                                    I played with bridge in the past. It’s basically a software-defined ethernet cable.

                                                                                                    1. 1

                                                                                                      With the caveat that I haven’t dealt with the OpenBSD feature in question here (only what I think is the corresponding Linux functionality), isn’t it more like a software-defined ethernet switch?

                                                                                                      1. 1

                                                                                                        Indeed. However, hub is even closer:

                                                                                                        This link between the interfaces selectively forwards frames from each interface on the bridge to every other interface on the bridge.

                                                                                                        This would be a “cable”: https://man.openbsd.org/pair.4

                                                                                                        1. 1

                                                                                                          Hmm, now I’m confused…

                                                                                                          veb(4) states:

                                                                                                          veb is a learning bridge that maintains a table of Ethernet addresses and the port that each address is reachable with.

                                                                                                          bridge(4) says:

                                                                                                          In general a bridge works like a hub, forwarding traffic from one interface to another. It differs from a hub in that it will “learn” which machines are on each of its attached segments by actively listening to incoming traffic and examining the headers of each frame. A table is built containing the MAC address and segment to which the MAC address is attached.

                                                                                                          I thought having a forwarding database and learning mac/port associations (and using it for selective forwarding) was the main thing differentiating a switch from a hub?