1. 9

    I’ve used two specialized languages for digital signal processing/audio programming:

    Faust is an older language developed in academia and supports a functional design and support for a huge variety of platforms from microcontrollers to the web browser via WebAudio + WebAssembly

    Soul is a new language that just hit 1.0 a couple of weeks ago. It is a fresh take on the same problem space, but it has a simpler syntax and seems targeted at devs that are familiar with C++ or Java.

    Both have real advantages for doing audio programming and have active communities with a lot of open source code available to build on top of.

    Since both support compiling to WebAssembly, I’ve added a code editor to the experimental browser-based audio synthesis platform[1] I’m building to dynamically compile code in either one of these languages to WebAssembly on the fly and then load the compiled module into the WebAudio graph.

    The fact that both languages are pretty simple with a tiny toolchain and specialized domain makes this dynamic compilation simple and effective. It’s a great way to prototype audio effects quickly without having to spin up a ton of boilerplate or project setup.

    [1] https://github.com/ameobea/web-synth

    1. 7

      This is some tremendous clickbait holy shit. I have no idea what point this article makes because I’m not going to click anything with a title like this. It’s at the same level as something like “10 crazy things you never knew about Linux”.

      1. 4

        Submission of an article like this is a good way to get informed contrary opinions for those who may have the benefit of enough domain knowledge to spot the mistakes. There were no comments on HN at the time of this posting, but within 12 hours some very good response here.

      1. 4

        I’m very surprised that nobody has said they use VS Code yet. I figured it had the lion’s share of the market, but maybe that’s just webdevs.

        I use VS Code exclusively as my text editor, except for Vim which I occasionally use for editing config files and writing commit messages. I write Rust for my dayjob (fullstack) and most side projects (also fullstack), and I use the trunk rust-analyzer which works pretty well these days except for situations with lots of complex macros and codegen. I also write a good deal of JavaScript/TypeScript which VS Code supports 100% out of the box.

        I make very extensive use of full-codebase search with VS Code (ctrl + shift + f) as well as normal find. I also make extreme use of go-to definition; I feel that my workflow is neutered if I’m working anywhere without both of those features available, regardless of language. I find that I only use the file tree on the left secondarily; I primarily navigate between files by following go-to definition or clicking on results in all-code search.

        I use code formatters for every language I write in; I can barely work without one now. I type out a whole piece of logic without pressing newline or space unless necessary and then have it auto-format when I save. I use linter plugins for VS Code wherever available. The thought of not having at least syntax checking in-editor feels incredibly constraining.

        A few other editor plugins:

        • Auto add trailing newline
        • Auto trim trailing whitespace
        • Side-by-side markdown preview
        • GitLens (show file history, show line history, show blame for currently hovered line in bottom bar, etc.)
        • Language-specific extensions wherever available
        • VS Code live share which I’ve used for pair programming a few times with mixed results

        I have my frontend, backend, and any other pieces running in their own tabs within my terminal (iTerm on Mac, Konsole on Linux desktop). I use zsh/OhMyZSH with some nice plugins:

        • autojump (fuzzy-jump to directory by partial/close name)
        • show shadow completing all commands while typing (incredibly helpful)
        • show git branch and dirty status for current directory if in a git repo

        I have a pretty basic set of dotfiles with mostly just config for stuff like NVM, PATH, GOPATH, etc. I have some useful aliases which I use (gd for git diff, cb for cargo build, etc.)

        I have three monitors and generally have terminal and/or web browser on the left one, text editor on the middle one, and web browser on the right (usually for displaying the webapp I’m working on). I keep all my windows maximized at all times and primarily use the taskbar to switch between different windows on the same screen. Taskbar is set to only show tabs for windows on the current screen.

        I rarely use a debugger with the exception of the browser devtools debugger when I use heavily. I rarely use repls with the exception of, again, browser devtools which I use extremely heavily. When I do use a debugger, I use VS Code’s integrated debugging for Rust and C# (those are the only two languages I’ve used a proper debugger before so far).

        Rust utils have taken over my system, replacing many traditional Linux ones:

        • ripgrep (grep replacement)
        • fd (find replacement)
        • dutree (visual size distribution of subdirs/files)
        • twiggy (Wasm size profiler)
        1. 2

          I’ve started using vscode for my typescript and kept using sublime for everything else.

          Extremely similar overall, most problems have been just learning new shortcuts etc.

          However:

          • Sublime is 1 frame faster at rendering text after I press a key. Bothers me slightly in vscode, but most don’t appear to notice.
          • Several times a week, code gets into a weird state where code search gets stuck and takes 3-5 seconds to respond to input. Appears to be pegging a CPU. I suspect there’s a keyboard shortcut I’m accidentally triggering which tells it to search everything, even .git and node_modules but haven’t figured out what it is.
          1. 1

            Vscode gets pretty slowly when dealing with large projects. Have you experienced that. Even though the eco system is great and they wide range of plugins

          1. 5

            No docs, no website, no wiki, last commit 7 years ago…

            1. 2

              Facebook Container prevents Facebook from tracking you around the web - Facebook logins, likes, and comments are automatically blocked on non-Facebook sites. But when we need an exception, you can now create one by adding custom sites to the Facebook Container.

              Interesting that they surface this as a top-level new feature of Firefox, when as far as I can tell it’s an add-on that a new user would have to manually install and enable first. I’m also curious what additional protection this offers that couldn’t be implemented in the base container add-on that was already available. Is Facebook specifically doing things to break normal Firefox containers that have to be mitigated here?

              1. 7

                What I don’t understand is why they don’t have a Google Container. It’s more likely that Google will track you through Analytics, AdWords, Tag Manager, etc without you noticing than Facebook doing the same.

                1. 14

                  What I don’t understand is why they don’t have a Google Container.

                  They get a lot of money from Google.

                  1. 6

                    Also, a lot of sites break when you block Google scripts :(.

                    1. 4

                      This is a big pet peeve of mine. It’s ridiculous how many sites are too lazy (or cheap, I guess) to host their own Javascript.

                      A nice extension (or uBlock/uMatrix feature) would be redirecting all of the googleapis.com URLs to localhost or some other server.

                      1. 4

                        I think this is what decentraleyes does: https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/

                        1. 1

                          Hosting JS, fonts, etc. from CDNs improves the chance that they’ll be cached since other sites use the same CDN URLs for those resources.

                          1. 5

                            Chrome and Firefox will soon partition the cache by the origin of the top-level document to prevent timing leaks. Safari already does.

                            1. 2

                              Most sites are so big it’s kind of silly to worry about a few kilobytes of Javascript, isn’t it?

                            2. 1

                              This isn’t about hosting their own JavaScript. Pretty often, it’s business-logic trackers (e.g. “user clicked the buy button” that crash the JS program if they fail, because no one expects them to).

                              1. 2

                                because no one expects them to).

                                Decent programmers everywhere do. I don’t, though.

                            3. 2

                              This isn’t blocking google scripts though - it’s using a separate set of cookies/state for pages that are google-first-party vs the rest of the web.

                            4. 1

                              I made my own container to hold my Google stuff.

                            5. 1

                              At a guess, it’s the usual story: They expect too many complaints about breaking behaviour the users consider normal and desirable. Remember that new features can’t break too much existing usage, or else users switch to another browser.

                              If Firefox were to break every site with a recaptcha, users would complain a lot. Breaking like buttons isn’t as serious… I think.

                            6. 3

                              I just started using Firefox again on Linux, and I got prompted to enable Facebook Container by the browser itself, even from a completely new profile, so it seems that they’ve integrated the installation and enabling into the workflow itself.

                              1. 3

                                Facebook is known to build shadow profiles around users that are not on Facebook.

                                1. 5

                                  Is this materially different than the profile Google builds when visiting sites with ads or analytics?

                                  1. 7

                                    Yes. Facebook apparently connects them to their social graph like normal profiles. So they don’t only track your individual travel, but also your personal connections.

                                    1. 7

                                      I looked through what Google had on me once. It was enough to send me targeted ads, but it was nothing compared to what it could have been if, for example, Google were to trawl the entire gmail archives for mentions of my name.

                                      Facebook is different. You may have seen the “upload contacts” feature? Facebook will read all of your email and store the email addresses. If I send you and someone else email, and you “upload your contacts”, Facebook is said to store not just my email address, but also the relationship between me and that someone else. Sleazy.

                                1. 1

                                  Thanks for this!! I took this and adapted it into a slightly simpler approach (just trimmed all my fonts to only include ASCII characters rather than doing your fancy collection mechanism for those) and knocked 70% off of my fonts payload size, which for mobile was a big deal since the images are sized smaller there.

                                  1. 14

                                    TypeScript has been hard to beat for me recently.

                                    Now that tooling has matured to the point of having a fairly no-thinking-required project boilerplate story (prettier, eslint, jest, debugging in VS Code, Dockerfile, tsc config, etc.), I find that it’s the language I’m able to get productive in fastest. I get the whole JavaScript ecosystem at my disposal, have every possible kind of tooling/library/etc. you I may need available, and get to work in a modern typed language with support for my favorite patterns and helper libraries (Funfix, Ramda, Lodash). Cross-platform compat for free, pretty much everyone knows it enough to where they can contribute or at least debug some issue on their own. Types can be shared between the backend and frontend with little effort, and the same language can be used for both (TypeScript + React is my go-to for the frontend).

                                    Other than that, the only real other thing I’ll use for webapp backends is Rust. The Rust+Rocket+Diesel+Postgres stack is compelling as well, but the speed at which I can create features is not at the level of TypeScript.

                                    1. 3

                                      I certainly agree that the screen sharing scene on Linux isn’t ideal, but there’s a lot more there than the author lists in their writeup.

                                      I use the public testing build of Discord, and the screen sharing scene is already waaay better than it was a month ago, and it wasn’t very long before that they launched it in the first place. They allow you to select individual windows to share, I’ve gotten no random crashes even after using it pretty regularly over the past couple of weeks, and the only remaining issue is that sound sharing doesn’t work. Given the monstrous complexity of just one of the sound servers available for Linux (as detailed by the writeup posted to Lobsters over last weekend, I really can’t blame them.

                                      Linux is so low-priority for Discord

                                      The fact that Discord is supported as a first-class platform is impressive tbh given the still minuscule share of users that Linux represents. As much as devs love to rip on Electron, it makes this sort of thing possible for the vast majority of languages and frameworks where cross-compatibility doesn’t “just work.”

                                      To watch my screen, viewers have to open a video client, and point it at my RTMP URL

                                      This isn’t the only way for that to work. You can create a web page that connects to the server and plays the RTMP stream. There will certainly be some configuration to do, but just googling “HTML5 RTMP player” should be a good start. I’ve set this up myself on more than one occasion.

                                      One last point is that the author doesn’t mention Teamviewer. I use that program regularly both connecting from and to Linux desktops and between different operating systems with ease. It’s free for private non-commercial use, it works pretty well, and it’s low-latency enough to support real-time collaboration and remote control.

                                      That all being said, I’d certainly love to see more complete and fine-grained support for screen sharing. There’s a ton of room for improvement, but there’s a lot of working solutions to build off of as well.

                                      1. 36

                                        Twitter is a terrible platform for (among other things) long hand writing, it’s unreadable. I wish people would stop using it for that.

                                        1. 26

                                          Unlike the other folks who are defending Twitter, I think Twitter isn’t a great format for consuming content, but I also think it reduces friction for producing content, which results in a lot of great content that wouldn’t otherwise exist. For example, foone lays out his reasons for posting on Twitter here:

                                          Not to humblebrag or anything, but my favorite part of getting posted on hackernews or reddit is that EVERY SINGLE TIME there’s one highly-ranked reply that’s “jesus man, this could have been a blog post! why make 20 tweets when you can make one blog post?”

                                          CAUSE I CAN’T MAKE A BLOG POST, GOD DAMN IT.

                                          I have ADHD. I have bad ADHD that is being treated, and the treatment is NOT WORKING TERRIBLY WELL. I cannot focus on writing blog posts. it will not happen.

                                          if I try to make a blog post, it’ll end up being abandoned and unfinished, as I am unable to edit it into something readable and postable. so if I went 100% to blogs:

                                          You would get: no content

                                          I would get: lots of unfinished drafts and a feeling of being a useless waste

                                          but I can do rambly tweet threads. they don’t require a lot of attention for a long time, they don’t have the endless editing I get into with blog posts, I can do them. I do them a bunch! They’re just rambly and twitter, which some people don’t like.

                                          I’ve tweeted about it before, but I’ve been told this is “unprofessional” and I’m sorry if this surprises you, but I am not a professional writer. of course my hobby writing is going to be unprofessional. Cause it turns out there’s good reasons I’m not a professional writer, and the main one is that I can’t do it.

                                          Note that this also address the one direct criticism in the other sub-thread, broken sentences.

                                          Personally, if my options are “read foone’s writing on Twitter (or via something that re-writes his Twitter threads)” or “not be able to read foone’s writing”, I’ll choose the former.

                                          For some authors, like @jxxf, this is less extreme. He has a blog that he writes on, but the tradeoff is still the same at the margin: because he has a low friction platform available to him, he writes a lot more than he otherwise would and I’m glad he does.

                                          I view this the same way I view complaints that making programming easier has dumbed down programming because (for example) people no longer have to understand pointers to produce useful software. I think that’s great, on balance, even if there are some downsides.

                                          For people who dislike Twitter so much that they would rather have no content than content on Twitter, they can make that choice for themselves: when they see a twitter.com link, they can not click on it. Some people would prefer to make that choice for other people (as of the time of this writing, this post has downvotes for “spam”, “off topic”, and “broken link”, which are all incorrect IMO) and I don’t agree with that. From looking at lobsters content from twitter, it seems like maybe 2-4 twitter posts get traction each month? IMO, it’s preferable that people who don’t want to read content on Twitter click “hide” 2-4 times a month than to not have this content exist at all or get flagged off of lobsters.

                                          1. 7

                                            I’ve read this guy’s reasoning before and I just don’t believe it. The guy may have adhd, I have no reason to doubt him, but I think anyone capable of writing super long tweet messages and doing in-depth device break downs can be taught to write blog posts one paragraph at a time.

                                            Of course, the dude should write however he likes, I’m not his boss. He may believe what he says, but I think his reason is not real.

                                            I agree with your “don’t click on it.” approach as what I love about the internet is our ability to choose and filter.

                                            I don’t comment out of a wish to squash this guys stuff and I certainly don’t have to read it. But I comment because I want to understand why people write this way, and want to discourage others from writing this way, as overall it reduces the amount of content people can read, I think. Since this way takes longer to read, is hard to share and respond to thoughtfully.

                                            1. 2

                                              Eh I can believe it. I have ADHD. Sometimes the things you can do, and the things you can’t do, don’t make any goddamn sense. ADHD is an executive dysfunction disorder. Shorter tasks do help…

                                              1. 2

                                                I have ADHD and I can relate really strongly to the sentiment. My thoughts don’t flow in a natural stream, it’s more spurts and fits. I can sit down and write a blog post, sure, but I’ll be sitting around writing it for 30+ minutes (an eon!) before I either a) get bored, and decide the point I’m trying to make isn’t worth making anyway, or b) realize my thoughts really don’t sound as good as I thought they did, even if they may have some merit. In the end, the blog post ends up getting deleted either way.

                                                I’d say using Twitter over a blogpost is more writer-centric than reader-centric, which obviously hinders the audience, but the way foone puts in the previous post really resonates with me:

                                                if I try to make a blog post, it’ll end up being abandoned and unfinished, as I am unable to edit it into something readable and postable. so if I went 100% to blogs:

                                                You would get: no content

                                                I would get: lots of unfinished drafts and a feeling of being a useless waste

                                                It’s all about focus, collecting thoughts, and forming them into a singular, discrete narrative - which just does not jive with ADHD behavior.

                                                1. 2

                                                  Agreed as a fellow. My draft folder is a nightmare, my writing is comment sections and tweets.

                                                  Even if I write a blog post it becomes painful, as I usually hyperfocus on it, will spend multiple days on it and end up rereading it too often out of fear for small errors. Tweet chains are much more permissive and raw.

                                                  The guy may have adhd, I have no reason to doubt him, but I think anyone capable of writing super long tweet messages and doing in-depth device break downs can be taught to write blog posts one paragraph at a time.

                                                  I hate to say it, but if I had a dime for every time a neurotypical person just utters disbelief about how my brain works, I’d have a ton of money on the side.

                                                  These effects are very real.

                                                  1. 1

                                                    I called out the ability to train. I understand ADHD really well. What I meant is that it’s quite possible to train on a writing technique where I write only one sentence or paragraph at a time.

                                                    That’s not unique to twitter. I can do the same thing in WordPress or google docs or many other tools that I can adapt to use.

                                                    Maybe this author can’t do it, but they can learn to produce content in a way that is still possible given their medical condition.

                                                    I was disputing the statement that the author can’t or that it’s impossible given ADHD. I don’t think that’s accurate. Maybe The author doesn’t want to train or learn. That’s cool, that is their prerogative. But the reason they aren’t doing it isn’t ADHD, it’s that the author likes it that way and is unwilling to change.

                                                2. 1

                                                  Not an unreasonable insight, but on the other hand if you can write 20 tweets, you can also write the same 20 tweets in a .html page?

                                                  By biggest gripe with Twitter is that it doesn’t work in Firefox for whatever reason. Clicking “Show this thread” just doesn’t seem to do anything. Probably due to some Firefox setting I changed or whatnot, but it’s really hard to figure out what (I discovered that copy/paste was broken in Twitter because I disabled the clipboard API, took me a long time to figure out). It can also takes ages to load (although not ridiculously slow, my connection in Indonesia is somewhat low bandwidth/high latency).

                                                  It’s all about what your goal is, if you want to just “tweet out in the universe” then by all means, go ahead. But if you want to reach people, then a blog post is probably more effective.

                                                  Perhaps this is an opportunity for creating better blogging software that combines the best of both 🤔

                                                3. 9

                                                  I like it as a format because it forces you to be concise and make every 280 characters a self-contained point. It’s a fun writing constraint.

                                                  1. 13

                                                    The endless scrolling, broken sentences (that most attempts have) and crappy twitter experience when JS is disabled doesn’t make it fun to read.

                                                    1. 15

                                                      I’d suggest maybe turning JS on to make your UX better, but I feel like you’re not going to be receptive to that idea.

                                                      1. 4

                                                        I suggest nitter, for a far more usable and less hostile experience, without requiring JS:

                                                        https://nitter.net/jxxf/status/1219009308438024200

                                                        1. 1

                                                          Wow - JS or not, that’s a really nice UI.

                                                        2. 4

                                                          Ok, even with JS on, it’s still a bunch of poorly separated blocks of sentences and sentence fragments.

                                                          The comment above mentions a ‘fun writing constraint’.

                                                          Writers, find a different way to punish yourselves without punishing your readers. The number of hours a writer spends on a piece is almost certainly less (much, much less) than the number of combined hours that readers spend reading it. Don’t drag your readers through shit for “fun.”

                                                          1. 2

                                                            Why not? Nobody is forcing you to read it.

                                                            If someone wants to have fun writing in a weird format, that’s their prerogative. They don’t have to be maximising your utility.

                                                            That said, consider just using something like this: https://nitter.net/jxxf/status/1219009308438024200

                                                          2. 1

                                                            I disagree that JS should be required to be treated decently on a website.

                                                        3. 6

                                                          This isn’t a constraint if it’s split over 50 tweets.

                                                          This tweet stream is an example of how things aren’t self-obtained points. Almost all of these tweets are meaningless without context before and after.

                                                          This story seems made up, like a business fable and even more so because it’s tweeted out in small amounts.

                                                          This was interesting the first few times I saw it 13 years ago. But now it’s weird and confusing and shows how valuable friends and editors are to the writing process.

                                                          I read a novel in 1999 where the entire story took place in emails. It was an interesting constraint. But the same book today would not be original enough to outweigh the awkwardness of such a constraint.

                                                          I am not sure what’s up with these “tweet storms.” I guess they are best for online brands or something since people can like and tweet each item. This author seems quite successful with hundreds of interactions per message. So maybe it makes more money, or sells more ads, or just shows which paragraphs are best liked.

                                                          But I just wonder if the author is capable of setting up a blog.

                                                          I liked the story, but it took much longer to try to read because of all the scrolling. It’s also harder to read because the lack of paragraphs and grammar and links.

                                                          1. 1

                                                            Is Exegesis by Astro Teller the book you are thinking of?

                                                            1. 1

                                                              That looks pretty cool, but not it. I’ve added it to my to read pile.

                                                              I was referring to E: a Novel by Matt Beaumont. It was set in present day (2000) office place and was just a simple, relatively ok office drama.

                                                          2. 0

                                                            I am with you. There is something engaging about the dramatic separation of paragraphs that each read like headlines. Not great for details, but for short stories I find it fun.

                                                          3. 2

                                                            I think there should be automation for mirroring twitter threads in an accessible format.

                                                            I don’t click Twitter links anymore, because my Twitter experience typically goes as follows.

                                                            1. Click the twitter.com link on lobsters
                                                            2. “If you’re not redirected, click this link”
                                                            3. “It looks like you’re browsing without JS. Do you want to continue to basic site? [Yes]” (Yes is the only option provided here.)
                                                            4. Get redirected either to the twitter home page or a thread I clicked on 3 days ago on reddit, which was stored in a cookie and did not update correctly.
                                                            5. Repeat steps 0-2.
                                                            6. Arrive at the page, start reading the content in between the repeating author name, user name, and irrelevant timestamps.
                                                            7. Any other Twitter links on that page, go back to step 0.
                                                            8. Trying to open any images takes me back to either the author’s page, the twitter home page, or some other thread I clicked on recently.

                                                            I think browsing without JS is valid, and no-JS users deserve to be first-class visitors.

                                                            1. 1

                                                              @bandali says:

                                                              I suggest nitter, for a far more usable and less hostile experience, without requiring JS:

                                                              https://nitter.net/jxxf/status/1219009308438024200

                                                            2. -1

                                                              Twitter threads are a de facto standard for publishing and consuming content like this on the internet, the ship has sailed, and it’s just mind-numbingly uninteresting to have to endure replies like this every time one is shared to a content aggregation platform. Get with the times, old man 👴🏻 ✊🏻 ⛅️

                                                              1. 3

                                                                De facto standard lol? Since when? Blogging is still alive and well and blog posts outnumber twitter threads 100:1 on lobsters alone.

                                                            1. 1

                                                              Several websites and their associated backends/databases:

                                                              • Apache2 webserver with PHP support. This serves traffic for ~6 different domains and serves as a reverse proxy in front of most API servers and app backends.
                                                              • All supporting infrastructure for Robintrack; everything is inside Docker containers running on VPSes.:
                                                                • Rails backend
                                                                • MongoDB database
                                                                • Redis
                                                                • RabbitMQ as a message bus
                                                                • Periodic Python scraper jobs running via cron.
                                                              • MySQL database used by osu!track and shared by several other applications
                                                              • Personal utility application containing screenshot/file uploader + hoster, email reminder, email feedback endpoint for use on other websites, and pastebin
                                                              • Static website hoster that I use for self-hosted continuous deployment of some websites during development.
                                                              • IRC + Discord chat bot for a video game
                                                              • Elixir backend for a small demo game I made a while back: https://io.ameo.design/
                                                              • Rust REST API server for in-development Spotify history tracker application
                                                              • Rust REST API server for in-development web-based audio creation platform
                                                              • Wordpress instance for my sister’s portfolio website
                                                              • Proxy server for getting Google Analytics traffic for my websites around adblockers so that I can get accurate user counts and traffic statistics

                                                              I used to self-host email, but gave up after spending dozens of hours trying to perfect the configuration but still having emails regularly to go peoples’ spam.

                                                              1. 4

                                                                https://cprimozic.net/

                                                                Built with GatsbyJS, which I recommend highly if you are familiar with React.

                                                                Full source code is on Github: https://github.com/ameobea/homepage

                                                                1. 5

                                                                  This looks like a really handy tool, I was a little disappointed to read through to the end and see that it’s not available to the public (yet?)…

                                                                  1. 5

                                                                    This is the second time I’ve seen marketing material for nodes posted here or hackernews, and it wasn’t available then either.

                                                                    Their tech does indeed look cool, but without any info about availability, pricing (if there will be an open source/nonprofit free version), etc. it’s hard to feel any excitement.

                                                                    1. 1

                                                                      Seems like something you’d wanna lead with.

                                                                    1. 2

                                                                      I built a project called phost[1] which is a command line application that I use to deploy static sites as subdomains of my website. This is what I do during development as a sort of minimal CD without having to deal with cloud providers.

                                                                      phost update deployment-name ./dist tar-gzip’s up the dist directory, uploads it to my server, and then creates + deploys a new version of the static site. It’s then available publicly at https://deployment-name.ameo.design/

                                                                      For my homepage[2] which is just a static site, I simply rsync it over to the serving directory of an Apache2 server: https://github.com/Ameobea/homepage/blob/master/Justfile#L32

                                                                      I’ve got Github Actions configured to build a static version of my site and then deploy it: https://github.com/Ameobea/web-synth/runs/330459508#step:6:1

                                                                      I deploy serverless APIs via Google Cloud Run: https://github.com/Ameobea/web-synth/blob/master/Justfile#L42

                                                                      For everything else, I just pull down the repo to my VPS, use some scripts that I run via the just[3] command runner on my server to build the image, stop + delete the old container, and replace it with a new one: https://github.com/Ameobea/robintrack/blob/master/backend/Justfile#L1

                                                                      I have logs for everything running in tabs of a screen session. That piece could certainly be improved, but the next step would probably be a Kubernetes cluster and I’ve spent wasted enough time at work configuring that already to do so for my personal projects as well.

                                                                      [1] https://github.com/ameobea/phost

                                                                      [2] https://github.com/ameobea/homepage

                                                                      [3] https://github.com/casey/just

                                                                      1. 2

                                                                        Ads have been an important source of revenue for the publishing industry since forever; well before the internet. User tracking for ads on the internet is indeed problematic, but simply going “literally every single ad is bad” is not helping solve any problems.

                                                                        Either way, the entire article is little more than a “literally every single ad is bad” rant, so I just flagged it as off-topic.

                                                                        1. 24

                                                                          I prefer this one: http://blog.practicalethics.ox.ac.uk/2015/10/why-its-ok-to-block-ads/

                                                                          What I find remarkable is the way both sides of this debate seem to simply assume the large-scale capture and exploitation of human attention to be ethical and/or inevitable in the first place.

                                                                          1. 11

                                                                            Could you explain further how this is off-topic? It would be on-topic on HN, and I’d presume that it’s on-topic here too.

                                                                            I feel that your argument is depressingly corporatist. “Toxic resource X has been an important source of revenue for the X industry since forever; well before modern mass media. People suffering from exposure to X is indeed problematic, but simply going ‘literally every single application of X is bad’ is not helping solve any problems,” right? This could be applied just as well to:

                                                                            • Unpasteurized fruits and the food preparation industry
                                                                            • Amazon packages and the logistics industry
                                                                            • Conflict minerals and the mining industry
                                                                            • Slavery and the cotton, pineapple, and sugar industries
                                                                            • Tetraethyl lead and the oil industry
                                                                            • Chloroflurocarbons and the aerosol industry

                                                                            Maybe it is unthinkable for you to imagine that all modern advertising and marketing techniques are psychologically damaging, but not everybody agrees with you. Famously, over a decade ago, São Paulo banned billboards and other outdoor advertisements; they did this in part because they believed that it would improve the health of people.

                                                                            1. 10

                                                                              I agree with your points, but the issue with this kind of “hot take” that the author presents is that it’s more of a rant/bragging piece than anything remotely rewarding attention. The author doesn’t like ads. So what? What do I as a reader get out of this post? There are no solutions presented. Only a few talking points being rehashed and a rant about Google at the bottom.

                                                                              I disagree that it’s off-topic, but I don’t find the post to be valuable, so I am leaning towards spam myself.

                                                                              1. 7

                                                                                Author here. I thought the solutions were apparent; using a browser which, in my experience, can actually block ads effectively, and, in rare cases where that fails (e.g. burnt-in sponsorship segments in videos), doing whatever possible to prevent the content of the ad reaching one’s senses (muting, averting eyes, etc.).

                                                                                1. 1

                                                                                  Author said their solution was Firefox + Ublock Origin + NoScript. Said they don’t see ads. Also said first two were really good without NoScript.

                                                                                2. 4

                                                                                  It would be on-topic on HN, and I’d presume that it’s on-topic here too.

                                                                                  There’s a lot of stuff that’s on-topic on HN that’s off-topic here.

                                                                                  That said, I see this particular submission as on topic.

                                                                                  As to whether advertising is harmful, either to individual’s mental health, or to political entities, it’s extremely debatable. In the very least, lumping everything into “advertising”, instead of focussing on stuff like corporate surveillance and the concentration of media power in companies that rely on advertising revenue, is not constructive.

                                                                                  Banning advertising in general would require very thorough reworking of the concepts of free speech, and of commerce. There’s no constituency for it, nor is there, as far as I can see, any ideological theory for it.

                                                                                  1. 2

                                                                                    I find your comparisons to things like slavery and conflict minerals distasteful and insulting. Sorry, but I have little interest to hold any kind of discourse on these terms.

                                                                                    1. 2

                                                                                      That’s too bad, then, because those are the examples I picked. I could have picked more nuanced cases, like the breeding of plutonium isotopes in enriched-uranium nuclear power plants, but I decided to go with examples that were unambiguously corporatist and harmful.

                                                                                      For what it’s worth, I’m glad that you felt insulted; it helps me understand what is important to you. It sounds like advertising technology is important either to your salary or your mental health. I wonder whether you can muster the empathy to understand that the actions of big businesses around us are not necessarily healthy for us, and in fact might be harmful.

                                                                                      On a meta-note, you seem more interested in explaining how to act than how you reason. Your first post told us that you are one of the half-dozen people who added off-topic flags, which isn’t relevant to your point. Your second post told us that you are insulted by my point and are not interested in refinement or improvement of your argument in the face of my point. As long as you are engrossed in emotional responses like this, and more interested in letting us know how to act online than how to prove claims and be convincing, then I agree: You seem to have little interest in discourse.

                                                                                  2. 6

                                                                                    Ads have been an important source of revenue for the publishing industry since forever;

                                                                                    This is very, very true. To this very day, the most effective way to make any kind of money off of digital content creation comes from advertisements. The author talks about the fact that they’ve not seen a YouTube advert in years, and yet all of those years they’ve been consuming the content created by YouTube video makers and hosted by Google without contributing anything back. If it weren’t for advertisements, YouTube and the massive ecosystem of diverse content it hosts wouldn’t exist; the author is depending entirely on the people still viewing those ads to support their selfish consumption.

                                                                                    YouTube Premium exists for this exact use case. For $10/month, you can choose to rid YouTube of advertisements completely; that subscription fee is then partially passed on to the content creators you watch. Similar options exist for many different sites. However, for the massive number of small or independent sites or content creators out there operating outside of the umbrella or a large corporation like Google, that’s not really an option.

                                                                                    If you create some kind of website that provides entertainment, information, or utility to people, the only real ways to monetize it are:

                                                                                    1. Put advertisements/sponsored content on it
                                                                                    2. Charge people subscriptions
                                                                                    3. Rely on donations
                                                                                    4. Harvesting user data which is often used for - you guessed it - targeting advertisements

                                                                                    There are a few exceptions to this for things like Google-scale companies providing things like Gmail for free in order to capture market share and funnel users into their ecosystem, but that doesn’t apply to the vast majority of independent or small-scale content creators out there.

                                                                                    The scope or utility of a piece of web content has to be way higher to justify charging people to use it; any kind of monthly charge is going to turn away well over 90% of your users, probably closer to 99%. Freemium can be a good fit for some things, but it takes non-trivial overhead to engineer and set up that system, and that’s assuming that people even care enough to do it.

                                                                                    When it comes down to it, the advertising industry is really one of the most direct methods of corporate patronage out there. These companies are convinced that they’re being provided incredible amounts of business value from showing their branding or products everywhere, but

                                                                                    I think ads are an incredibly inefficient and overall undesirable thing, but they’re absolutely critical to the rich ecosystem of free content that the internet provides today. People have proposed alternatives like browser-integrated cryptocurrency microtransactions (which are dystopian enough in and of themselves from the right perspective, but that’s a different conversation), but the fact is that there really are very few other paths out there to sustainably provide something for free on the internet without advertising.

                                                                                    Personally, I think that the advertising economy is going to collapse in the coming ~10-20 years. So many online advertising providers throw metrics at the advertisers that make it look like they’re capturing incredible amounts of value and seeing huge returns on their ad spend, but in reality they’re just paying to take up the search space they’d get for free organically[1]. Companies are going to start to realize that spending millions of dollars to show users ads for the same vacuum cleaner that they bought for two weeks after they bought it isn’t providing them any value at all. I don’t know what this will mean for the world of digital media, but I do know whatever does end up happening will require a fundamental shift in the way that

                                                                                    [1] https://thecorrespondent.com/100/the-new-dot-com-bubble-is-here-its-called-online-advertising/13228924500-22d5fd24

                                                                                  1. 3

                                                                                    I think about this very often, but usually in a broader context of software development. When I first got started with building web applications several years ago, I learned the web stack from the bottom. I wrote raw HTML, styled it with CSS, and hosted it with an install of Apache2 on a Digital Ocean droplet. There are for sure many ways in which this can be said to not be the most minimal stack, but besides the webserver handling the actual mechanics of hosting it, the JS/HTML/CSS that I wrote was what wound up on users’ computers and showed up in their web browser.

                                                                                    Just as the webserver abstracted away all of the details of the HTTP spec, which in turn abstracted over TCP, we’re now moving into abstracting over the webserver and even the application with containerization and serverless. More and more, people starting off in webdev learn React and a SaaS hosting platform (Heroku, Lambda, etc.) and skip the lower pieces entirely. This shift is different and more fundamental than others that have come before because the pieces are hidden - you can’t dive into AWS’s lambda infrastructure and trace the request from your browser through and back because it’s all hidden inside of AWS. Even with things like self-hosted Kubernetes, pods are transitive and things like the hard drive they use to store their data or the CPU they run on are disconnected from the code that runs.

                                                                                    Besides the stack that modern software runs on growing higher and higher to the point where it would be nearly impossible to understand thoroughly simply due to its size, a lot of these modern advances in deployment and devops infra go beyond abstraction and actually lower pieces of the stack, in some ways creating a new lowest-level. This is kind of scary from an open source/ownership perspective since you’re giving up control over knowledge and control of part of your stack to someone else, but it also is extremely powerful in that those lowest pieces are actually removed from your mind rather than just being smooshed under yet more software that you have to set up and configure yourself.

                                                                                    Personally, I think that trend will continue and exaggerate as we move forward as an industry, for better or worse. People will move further and further away from processes, applications, daemons, and servers and pick up services, libraries, and APIs as the new primitives (for webdev, at least). Right now, we’re in a transitional period where you have to understand both the full breadth of Kubernetes and friends as well as everything that runs inside of it to deploy moderately complex architectures, but I see that getting nothing but better in time. The webdevs of the future will think of things like networking ports and stdout/stderr redirection like we think of memory allocation: something that happens behind the scenes that many developers will never even understand in their lives outside of maybe a blog post or two.

                                                                                    1. 12

                                                                                      I went through the whole process - reverse DNS records, DKIM, SPF, made sure the IP address of the VPS I hosted it on wasn’t blacklisted anywhere, made sure that the mailserver components were well-configured (not open relays), set up SSL, took all of the mail tests I could find and got perfect scores on all of them.

                                                                                      None of that mattered; important jobsearch-related emails went into peoples’ spam, and I was left constantly wondering if people were just taking a long time to respond or if my email had been sent to spam. AT&T/Yahoo straight up blocked all emails from my IP TWICE; each time I had to send an email to a special address and wait ~48 hours to get my sending restored.

                                                                                      It turned out that since I was using a non-standard TLD for one of my email addresses (.link), I was immediately rejected by many large mail providers just because of that. Of course, there’s no documentation you can refer to; it’s all arbitrary. I guess a lot of bulk spam senders use those kinds of TLDs because they’re cheaper or easier to register or less policed or whatever. Maybe it was some random machine learning model that saw “wow 80% of all messages coming from .link domains have been marked as spam by users; seems like a clear choice to me.” That’s the cost of a highly effective spam filter I guess.

                                                                                      Anyway, all I’m saying is that if you run your own mailserver, you’re at the mercy of the Google/AT&T/Microsofts of the world and whatever random policies they decide to enforce. They’re not going to notice OR care; you’re a single user. They’re always going to optimize their decisions around the other big players since 99.5% of their legitimate mail come from those sources.

                                                                                      So, I sold out and now pay $6/month for GSuite. Email is too important to my life to put at risk. Maybe you’ll have better luck on your own, but the fact is that your entire ability to send/receive email rests on the whims of the large-scale providers. I personally don’t think it’s worth the risk, the effort, or the frustration.

                                                                                      1. 5

                                                                                        If there’s anything we’ve learned from the V language Internet drama that has unfolded over the past few days, it’s that open source projects have to do marketing if they want to get financial support.

                                                                                        I think this is a very valid claim, and I see similar patterns in huge parts of the software development community as a whole. There is such a larger market out there of people writing software, and the scale of things that people are building is always getting bigger. Critical pieces of open source software are taken for granted by virtue of there being such a rich open source ecosystem to rely on.

                                                                                        In order to stand out from the increasingly huge crowd, it takes more than just interesting tech or a novel idea in many cases. In the same way, the huge amount of content out there makes it harder to pick out truly unique and innovative projects from hype and noise.

                                                                                        I guess part of this is natural given the size of the software development industry, but they’re certainly new challenges that we have to learn how to face and handle as a community.

                                                                                        1. 5

                                                                                          I’ve just started my first role at a larger-than-tiny company, and the point that resonates with me the first is the urge to document everyone else’s code. I’d encounter these 500-line functions consisting of totally undocumented business logic with tons of mutation, 3-level-deep forEach loops, and duplicated code everywhere.

                                                                                          I’d spend the ~20 minutes necessary wrapping my head around it enough to get a feel for what it’s (probably) doing, and then my next thought is to add a big doc comment at the top explaining my archeological discovery.

                                                                                          It was only after I had a co-worker slack me and ask “what this function does” that I’d carefully documented with argument + return types and everything that I realized the issue. I realize more and more that people rarely read comments, especially big blocks of text - and that problem is only exacerbated by the fact that several other people working on the codebase don’t have English as their native language.

                                                                                          As an alternative, I’ve been switching out critical parts of the codebase to use TypeScript. While the added types aren’t quite “self-documenting” as some FP enthusiasts may extol, having a type to go-to-definition on is a lot better than an imperceptible entityDefinitionConfig variable that is indexed into 2 levels deep using dynamic keys.

                                                                                          1. 1

                                                                                            GatsbyJS is what I’m using for mine. I’m really happy with its support for stuff like building a TOC and listing of posts at compile time by querying the list of files on the website and stuff like that.

                                                                                            The majority of the action happens in this simple file: https://github.com/Ameobea/homepage/blob/master/src/pages/blog.js

                                                                                            All I have to do to publish a new blog post is create a markdown file in the blog directory, add a small header with a title and date, and then push the changes up to Github. I’ve got CircleCI configured to automatically build a fresh version of my website and rsync it over to my VPS where it’s hosted live via Apache2.

                                                                                            1. 4

                                                                                              […] there is a fast path where the sending thread is blocked, the receiving thread is unblocked, and control is immediately transferred without a trip through the scheduler.

                                                                                              That’s really impressive. I could see this being a big deal in the case of processes doing a lot of this kind of IPC.

                                                                                              1. 5

                                                                                                There’s an interesting talk by Paul Turner (kernel engineer at Google): https://www.youtube.com/watch?v=KXuZi9aeGTw

                                                                                                He describes some of the optimized thread-based programming models. It seems they arrived at similar thread swap primitives as well. I’m not sure if they’ve ever managed to upstream any of these ideas but it’s worth a watch.