Linked from this article is also a super-helpful and interesting DTrace One-Liners

    1. 2

      Should have the “satire” tag (it’s not clear until you read to the punch line at the end.)

      1. 1

        Ah! Agreed, thanks, updated.

      1. 9


        Unlike many other HAT projects, CaribouLite utilizes the SMI (Secondary Memory Interface) present on all the 40-pin RPI versions. This interface is not thoroughly documented by both Raspberry-Pi documentation and Broadcomm’s reference manuals. An amazing work done by https://iosoft.blog/2020/07/16/raspberry-pi-smi/ (code in https://github.com/jbentham/rpi) in hacking this interface contributes to CaribouLite’s technical feasibility. A deeper overview of the interface is provided by G.J. Van Loo, 2017 https://github.com/cariboulabs/cariboulite/blob/main/docs/Secondary%20Memory%20Interface.pdf. The SMI interface allows exchanging up to ~500Mbit/s between the RPI and the HAT, and yet, the results vary between the different versions of RPI. The results further depend on the specific RPI version’s DMA speeds.

        1. 2

          Whoa that is news!

        1. 2

          ALiEn Project Website

          ALiEn Documentation

          What I find cool about this is that in order to handle the scale of the required simulations, the simulation code is entirely written in CUDA:

          Artificial Life Environment (ALiEn) is a simulation program based on a specialized 2D physics and rendering engine in CUDA. Each simulated body has a graph-like structure of connected building blocks that can either be programmed or equipped with functions to act in the world (accelerators, sensors, weapons, constructors, etc.). Such internal processes are triggered by signals coming from circulating tokens. The bodies can be thought of as small machines or agents operating in a common environment.

          The simulation code is written entirely in CUDA and highly optimized for large-scale real-time simulations of millions of bodies and particles.

          1. 8

            Huge write-up about a huge release!

            • Async/await - SE-0296
            • Async/await: sequences - SE-0298
            • Effectful read-only properties - SE-0310
            • Structured concurrency - SE-0304
            • async let bindings - SE-0317
            • Continuations for interfacing async tasks with synchronous code - SE-0300
            • Actors - SE-0306
              • Beyond actor isolation, there are two other important differences between actors and classes:
                • Actors do not currently support inheritance, which makes their initializers much simpler – there is no need for convenience initializers, overriding, the final keyword, and more. This might change in the future.
                • All actors implicitly conform to a new Actor protocol; no other concrete type can use this. This allows you to restrict other parts of your code so it can work only with actors.
            • Global actors - SE-0316
            • Sendable and @Sendable closures - SE-0302
            • #if for postfix member expressions - SE-0308
            • Allow interchangeable use of CGFloat and Double types: - SE-0307
            • Codable synthesis for enums with associated values - SE-0295
            • lazy now works in local contexts
            • Extend property wrappers to function and closure parameters - SE-0293
            • Extending static member lookup in generic contexts - SE-0299
            • Concurrency Interoperability with Objective-C - SE-2097
            • Task Local Values - SE-0311
            • Package Collections - SE-0291
            1. 3

              I implemented a build-log parsing web app that would show which parts of the build failed using awk cgi. I’ll be really honest, I don’t recommend it. AWK is great if it is all you have, but compared to something like, python, perl, javascript, etc, it isn’t very pretty to build big parsers in, that correctly emit json or html. I can recommend CGI as a whole though, it’s great for quickly adding a hacky api to any service, especially if it is internal or has low volume. A lot of the stuff at my work is implemented like this since the engineering org is maybe ~25 people.

              Also, why the chroot? hopefully this behavior can be turned off. trying to copy over the interpreter and hoping ldd catches all the linked components seems troublesome for no real benefit. what would the scripts even usefully do in such a limited context?

              1. 5

                httpd with chroot is the default on OpenBSD. The philosophy is: why give an attacker able to compromise your web-app access to your entire system?

              1. 1

                Really glad to see the focus on performance improvements in the compiler & type system:

                Runtime Performance and Code Size Improvements

                In Swift 5.4, protocol conformance checks at runtime are significantly faster, thanks to a faster hash table implementation for caching previous lookup results. In particular, this speeds up common runtime as? and as! casting operations.

                Further, consecutive array modifications now avoid redundant uniqueness checks.

                Finally, there are a variety of performance improvements:

                • String interpolations are more aggressively constant-folded
                • Fewer retain/release calls, especially for inout function arguments and within loops
                • Generic metadata in the Standard Library is now specialized at compile time, reducing dirty memory usage and improving performance
                1. 3


                  “Pyodide was originally developed inside Mozilla to allow the use of Python in Iodide, an experimental effort to build an interactive scientific computing environment for the web.”

                  1. 9

                    I’ve been using OpenSCAD for a few years and have made some pretty complicated parametric designs, but even in Chapter 2 I learned things I didn’t know about!

                    Figure 4.: Preview individual geometry parts by temporarily prefixing them with a ! character

                    Since our funnel shape is the subtractive part of a difference operation, it is somewhat difficult to model the shape “blindly”. If we prefix the funnel shape with an exclamation mark (!translate( … ) union() …) and run a preview, then only the funnel shape will be drawn and no other geometry (Figure 4.). This selective preview of individual geometry parts is very useful and you will probably use it very often as a modeling aid.

                      1. 9


                        SIGBOVIK is an evening of tongue-in-cheek academic presentations, a venue for silly ideas and/or executions.

                        SIGBOVIK (Special Interest Group on Harry Query Bovik) is an annual multidisciplinary conference specializing in lesser-known areas of academic research such as Perplexity Theory, Sticky-Finger Manipulation, and State Dominance.

                        SIGBOVIK 2021 is the fifteenth edition of this esteemed conference series, which was formed in 2007 to celebrate the inestimable and variegated work of Harry Quintessentially Bovik. We especially welcome the three neglected quadrants of research: joke realizations of joke ideas, joke realizations of serious ideas, and serious realizations of joke ideas. (In other words: )

                        1. 3

                          The three high-level features of Jujube are described as:

                          • The working copy is a commit - All runs of the tool log/commit the current state of edits
                          • Commits can contains conflicts - Conflicts are folded back into the repository
                          • Operations are logged

                          One of the things I love (and hate 😂) about git is how it reflects just the DAG of changes.

                          I’m super curious how folding in the management of conflicts into repositories would impact other areas of tooling / workflows.

                          It seems to me that including conflicts as a first-class repository entity would reflect the DAG of changes even better, and allow much more interesting / helpful tooling.

                          To quote the author’s description of commits containing conflicts:

                          It means that there is a consistent way of resolving conflicts: check out a commit with conflicts in, resolve the conflicts, and amend them into the conflicted commit. Then evolve descendant commits.

                          It naturally enables collaborative conflict resolution.

                          The in-tree conflicts means that there is no need for book-keeping in rebase-like commands to support continue/abort operations. Instead, the rebase can simply continue and create the desired new DAG shape.

                          1. 3

                            One of the interesting aspects here is a bit hidden as supporting “Evolution”. It tracks the meta changes of a repository. How commits moved, e.g. if you have two commits squashed together, there will be an edge from the two original commits to the squashed commits, so you can trace this back. Same applies to rebases, etc. So you reflect not just the history as an engineer wants it, but also how it originated.

                          1. 6

                            This is an important piece on a whole bunch of levels, everything from the very micro Notifications are actually one of the hardest problems in software, to the very macro Just because a developer calls a feature complete, doesn’t make it usable

                            On the notifications front, I personally worked, first as a Support Tech, then a developer on a product where notifications were basically the key feature. It was an all-in-one monitoring application that did network and systems monitoring from a central server.

                            As a support engineer, one of the most frequent questions was: “Why was I not notified of this?” In our product it usually came down to one of two things, either “You were notified, I can see the notification was triggered and sent to your email, but you didn’t see/ignored it” or, “Because you inadvertently configured the notification to suppress the notification”.

                            The developers realized that notifications were key to the product, and made it so configurable that I once described the notification system as “The notification systems prior to version x were insanely complex and byzantine, then in version x+1 they made them far worse”

                            As a sysadmin at another job I spent what seemed like half my working life tweaking the Icinga2 notifications, both to notify me when there was a problem, and not notify me when intermittent problems were solved before I could get to action them. For example. You expect a CPU to spike when kicking off multiple builds on the build server. You don’t want to get notified everytime the CPU goes to 100%. You do want to get notified when the build server spends over an hour with cpu at 100%.

                            As to the very macro point: I work on the Terminator terminal emulator, and there was a feature that took me so long to figure out the very mechanics of how to implement it (it took about 6 months), so that when it came down to wiring up the interface, I did a terrible job that the first person to try and use it, couldn’t, for various reasons. I suffered a really bad case of what pilots call “Get-there-itis” and messed up the really easy parts. And this was on an Open Source project that I don’t get paid for.

                            1. 2

                              Totally agree about the Pandora’s Box that is Notifications.

                              A good way to phrase it would be “Oh, you sent a message from Thing 1 to Thing 2? Enjoy your new distributed system! 😢”

                            1. 2

                              So with async/noasync functions we’ve got red/blue functions, now with differentiable/non-differentiable do we go all the way to CMYK functions? 😂

                              1. 1

                                The article mentions Direct Routing, which I’ve used in the past (Direct Server Return’s basically the same, IIRC) to great success with Linux.

                                Is there any good way to implement DR/DSR with FreeBSD or OpenBSD?

                                1. 1

                                  Wow, this (simple) data pipeline architecture is almost exactly what I was looking for 5 years ago for something at work. I ended up writing something very similar to this so we could wire up disparate APIs to talk to each other and synchronize data across different providers, platforms & environments.

                                  I’d love to see some in-depth, real-world (read: gnarly) setups that use this; I’m curious how it handles integrating all of these features into a functioning system.

                                  1. 2

                                    It’s a little old now but there’s a blog from Meltwater loosely outlining how they use it for enrichments: https://underthehood.meltwater.com/blog/2019/08/26/enriching-450m-docs-daily-with-a-boring-stream-processor/, the input/outputs are fairly basic as it’s consuming from Kafka to Kafka, but in between it has to perform a network of HTTP enrichments each with a unique API and format for batching messages (JSONL, JSON array, individual parallel requests, etc).

                                    The more modern way of doing it is outlined in a simpler example here: https://www.benthos.dev/cookbooks/enrichments/.

                                  1. 1

                                    This Clipboard / Drag&Drop inspector mentioned in the article looks really helpful as well: https://evercoder.github.io/clipboard-inspector/

                                    1. 2

                                      Great article! I was reminded of the “1-Bit Symphony” by Tristan Perich (2009). The physical version of the piece is a circuit built into a standard, clear plastic CD jewel case. Summary of the works with photos here: https://marijebaalman.eu/dafx/pages/1bitMusic.html

                                      1. 4

                                        Yes! I was given “1-Bit Symphony” as a gift about 10 years ago and blown away. I honestly was so mesmerized by the idea that polyphony could be achieved on a single pin. I’ve gone down a bit of a rabbit hole the last week after reading this article and have found that there is quite a bit more resources on this topic since the last time I attempted to look into it.

                                        Dr. Blake Troise, (aka PROTODOME), the author of the the article, has an album on a chip as well. You can actually view the source code for the album here

                                        Anyway, I’m glad you found some joy in the article as well :).

                                        1. 1

                                          Awesome walk-through of iterating towards a really neat ray-traced shader animation!

                                          And here’s Part 2: https://wallisc.github.io/rendering/2020/05/02/Volumetric-Rendering-Part-2.html

                                          1. 1

                                            Ha… ha… 😛

                                            Should be tagged satire