Threads for yaymukund

  1. 14

    Another option is to use Tailscale to connect to your Raspberry Pi from anywhere. I use that plus Jellyfin as my music server.

    That said, I really think anyone old enough to have a developer job should either pay for/watch the ads for YouTube Music or not use YouTube. Using an ad blocker or whatever to get commercial free YouTube without paying is fine when you’re a broke kid, but doing it as an adult with a job is just entitled behavior. If you don’t think you should have to pay for music, then lobby Congress to repeal the bloated copyright laws, but you still live in a society and can’t just decide you don’t feel like using for a service but not paying for it.

    1. 9

      Wow. The copyright MPAA talking point propaganda has really had an impact, it seems. That’s absolutely insane to me that anyone would think it’s unethical to block advertisements.

      1. 4

        YouTube gives you two different ways to pay for it. Choosing to use the service (which directly contributes to its monopolization of short video!) and then neither watching the ads nor pay the cheap monthly fee is entitled behavior. Using P2P is better because at least you’re not leaching bandwidth.

        1. 3

          Yes, not only that it’s ethical to pay google but that it’s unethical to not pay google. Stick that to your boot and lick it.

          It’s the same logic that says shoplifting from Wal-Mart is wrong even though most theft is wage theft. [1]

          [1] https://inthesetimes.com/article/walmart-corporations-wage-theft-labor-settlements-firms

          1. 3

            Stealing from Wal-Mart if you’re not poor is wrong. It doesn’t make it good if they are also thieves.

        2. 5

          Technically they can decide to use a service and not pay for it, as shown by this post. Personally I am more concerned that the artists don’t get paid than YouTube. Their payment through YouTube is close to not getting paid anyway.

          People have financial situations and alternative philosophies that may provide a different justification besides “entitlement”. In the grand scheme of things, someone copying some music without paying for it is not really undermining our society.

          1. 4

            I’m not an absolutist about it. I just feel like if you’re an adult and you can afford it, it’s entitled to consume without even trying to pay.

            1. 3

              YouTube literally saved the music industry. The fact that the industry doesn’t pay artists is a different, and older, problem.

              1. 1

                YouTube literally saved the music industry.

                Could you elaborate on this?

                1. 5

                  For sure. Back in the Napster then *tella etc “piracy” days the music industry was freaking out. Albums would often leak from the plant and be available online before any release had been made and the while radio single, then CD, model was in serious trouble. There was no way to profit from these systems because they were distributed and ever-changing and there was no business to partner with. They tried doing 360s and all that (which they still do today) but it was a serious problem for them to imagine what to do, and hence why they tried the “suing fans” model for awhile, desperate for anything that could work.

                  Then all of that started to get replaced by stuff like YouTube. A centralised repository run by a company that already monetizes the content! The right parts of the industry realised this was amazing for them and threw their support behind this, in exchange for a cut. Singles and other pre releases drop on YouTube before the album and they get paid. These days with contentid they get paid even when their catalog is used in someone else’s video.

                  As with all short summaries the above is missing detail and nuance. The music industry partnering with YouTube with their one hand did not prevent them suing YouTube with the other. Carrot and stick and internal disorganization etc. YouTube was not the only presence in this period but it’s the main one left, etc. But I think this gives a good glimpse into the very real way that YouTube and similar helped end the mass fan lawsuits and provide a very real out for the music industry to make enough money to keep going on their model and give space for new things to emerge.

                  1. 1

                    Interesting! I remember the pirating days and I remember the threat of being sued as a seeder, but it all kind of faded away and I didn’t know what changed. Thanks for explaining!

          1. 3

            It’s a shame some Darwin stuff wasn’t handled as blockers. Crystal is broken and I think v8 still doesn’t build :-( There doesn’t seem to be enough people with time to support that system.

            1. 3

              Darwin is kind of a different release channel and I think it’s fine to not release those in lockstep. The biggest darwin blockers I’ve run into have been the makeWrapper stuff. I’ve been submitting some PRs to address the ones I run into. The maintainers have been pretty receptive when I do so.

              1. 1

                Personally I’m happy they keep the focus on Linux as that’s usually the environment of production and CI. I wouldn’t be reprised if some Mac folk jump shipped after drinking the Kool-Aid 😉

                1. 2

                  While I use Nixos as my daily driver, it would be nice to have faith that my nix packages would build on Darwin. Our Linux build chain has been rock solid since we moved to a Nix flake and it would have been nice not having wasted the past two weeks tracking down a Mac build issue.

                  1. 3

                    But then, especially with flakes, can’t you add a flake input with an older version of nixpkgs, and pick the problematic packages from the older version when they weren’t broken? I would assume that’s doable, though I never tried it yet, so I’m curious…

                    1. 2

                      Your understanding matches mine.

                      I think the main issue is stuff that never worked on Darwin

                      1. 2

                        More the stuff that worked on Darwin but new versions don’t. Both V8 and crystal worked before. Then upgrades got merged without validating Darwin.

              1. 2

                Could you tag it, but also add a comment stating your relationship to the post if you’re not the author? If you’re not the author, I think it’s worth elaborating how you know them and your relationship to the work. I don’t think a checkbox or enum can capture all the possibilities.

                1. 1

                  This looks excellent. How are the hosted demos meant to be used? I opened them in two different browser sessions, but I don’t see how they’re supposed to signal to one another.

                  1. 5

                    This is timely. I spent the better part of last week trying to get a Python library working on my NixOS system. I eventually gave up and installed Python inside Arch inside a headless qemu virtual machine. Now I build using ssh -t my_qemu_instance 'cd src/foo ; cargo build'. I guess it could be worse.

                    1. 2

                      I’m a little surprised that that’s “ssh… cargo …” rather than “ssh… pip…” or something.

                      1. 3

                        Oh, right. It’s a Rust project that uses the inline_python crate. It’s been a long week…

                        To my surprise (& to that crate’s credit), invoking Python from Rust worked like a charm. The hard part was installing the Python dependencies in the first place.

                      2. 1

                        Are you blaming nixos or Python package system?

                      1. 1

                        “My minimal config with a good amount less code than LunarVim loads 40ms slower. Time to switch.”

                        • @mvllow, Potential LunarVim user.

                        This made me wonder - does LunarVim perform any sort of optimizations on top of lazy-loading plugins?

                        1. 2

                          One thing I saw in the source is the use of ftplugin to lazily configure filetype LSP. Other projects tend to configure LSP up front.

                        1. 4

                          I didn’t realize conduit was so far along in development. I’d like to give it a spin in the coming weeks.

                          Conduit is now in the Beta phase. You can already use it as a Synapse replacement, but there still are some smaller problems.

                          Is there a more detailed feature breakdown somewhere?

                          1. 4

                            I saw this in the README:

                            There are still a few important features missing:

                            • E2EE verification over federation
                            • Outgoing read receipts, typing, presence over federation
                          1. 3

                            This was really cool. I’ll need to watch that a few times to understand Zig’s callsite behavior. I’ve never seen that design before, but it seems nice to have this kind of flexibility.

                            1. In Zig, if you naively wrote an async function and then called it without async, would it behave as expected synchronously?

                            2. What are the historical influences on each language’s async design? What was the first language with Zig’s callsite behavior?

                            1. 3
                              1. Calling without async means that you await the function immediately.
                              2. Not sure, but to make this work, Zig uses comptime lazyness a lot and I don’t know of other languages that have that same approach to metaprogramming.

                              If you want to read an introductory post to Zig’s Async/Await, I wrote this a while ago: https://kristoff.it/blog/zig-colorblind-async-await/

                            1. 2

                              Should this optimization be valid? In safe Rust, there’s no question that it is. However, safe Rust has to coexist with unsafe Rust that may be doing all sorts of subtle pointer tricks under the hood. If bar is defined elsewhere, the compiler does not know what its definition looks like (and whether it internally uses unsafe code) and thus must treat it like a black box.

                              Is anyone able to expand on this or point to relevant documentation? I thought unsafe code was supposed to conform to the expectations of safe Rust when viewed from the outside. The idea of optimisations being discarded because a function call could potentially be mutating an immutable value is surprising to me.

                              1. 2

                                I thought unsafe code was supposed to conform to the expectations of safe Rust when viewed from the outside.

                                It’s not that simple. Here is my understanding:

                                • unsafe fn danger_foo() can cause undefined behavior. If it is written correctly and if you use it correctly, then you can use it safely.

                                • Now, you might be asking: Since the lowest levels of std often involve unsafe, and since most things are built on top of the standard library, isn’t most Rust code unsafe? Well …not quite. You can do:

                                  fn foo() {
                                      unsafe { danger_foo() }
                                  }
                                  

                                  By doing this, you’re effectively saying, “I’ve verified that this works.” If you trust the author of foo(), you can now assume foo() is safe when you invoke it from other safe code. Hooray. Safety.

                                • That last caveat is important. You can only trust foo() from safe code. Unsafe Rust needs to be careful trusting even safe code. This is explained in the nomicon:

                                  The design of the safe/unsafe split means that there is an asymmetric trust relationship between Safe and Unsafe Rust. Safe Rust inherently has to trust that any Unsafe Rust it touches has been written correctly. On the other hand, Unsafe Rust has to be very careful about trusting Safe Rust.

                                • LLVM is ‘unsafe’ so you need to assume that even a safe foo() { ... } may within it contain a call to danger_foo().

                              1. 7

                                Nix is great for tracking dependencies but you really need to go all-in on making it your platform. To use a blood type analogy, Nix is a universal recipient of software; the polar opposite of a universal donor. Software like this helps, but it’s only useful for distributing programs with fully Nix’d dependencies.

                                I’m working on a project right now which involves a handful of Haskell executables and a Cythonized Python wheel. Nix bundle can easily package the Haskell programs since they don’t link against anything external; their only public interface is the command-line.

                                Building and distributing a Cython wheel which links against arbitrary other Python libraries is a separate challenge altogether. NixOS/Nixpkgs attacks this problem as a competing distribution of packages, when I really need something one level more meta.

                                Poking around Nixpkgs, I did find various libraries for building RPM packages, managing VMs and building containers

                                1. 2

                                  Nix is great for tracking dependencies but you really need to go all-in on making it your platform. To use a blood type analogy, Nix is a universal recipient of software; the polar opposite of a universal donor. Software like this helps, but it’s only useful for distributing programs with fully Nix’d dependencies.

                                  What would it mean for a platform manager to be a ‘donor?’ Are there examples of that?

                                  It’s true that ‘Nix’-ifying a program sometimes requires modifying software. However, this modification - removing hardcoded dependencies - typically bears no long-term maintenance cost. For this reason, maintainers tend to be happy to do it. That’s been my experience, at least.

                                  1. 1

                                    I guess the “software donor” I’m thinking of would be better described as a build system. Imagine a tool which provides similar determinism/reproducibility as Nix, but helps you build “native” deb/rpm packages for target distros.

                                    BuildStream is the closest fit I know of.

                                1. 15

                                  After convincing a German bank to give me a mortgage, I no longer need to be a full-time worker to check any boxes to meet long-term goals, and I’ve dropped my working hours to 8h/wk. There are 3 projects that I’m particularly excited about spending more time on this week and for the next few months at least:

                                  • sled is so close to something I can tell people is stable and reliable for long-term projects, but I still need to rearrange a few key architectural pieces to consume significantly less memory and disk space for “aged” regions of data that can slide across the RUM-conjecture space toward cold and compact after being represented in a contention-friendly-yet-higher-memory form while being actively modified. Once sled uses less space for non-hot items, I will feel comfortable calling it stable and a good choice for long-term projects in Rust.

                                  • seaslug is currently a collection of buzzwords, but over time I hope to grow it into a small actor-based language that plays nicely with SMT-based test case generation and runs atop a fat runtime leveraging sled, io_uring, and software transactional memory for handling the stuff that has nothing to do with modeling or instrumenting the world outside the program. A lot of studying different rabbit holes inspired by Frank Pfenning’s recent CMU course on Bug Finding, the feature reduction that gives Ada SPARK such applicability to mechanical reasoning and usage in safety-critical spaces, past experience with simulation and property testing, why3, and generally wanting the language to guide people to thinking more about modeling the world outside the program than the peculiarities of the language itself, gives me a lot of fun stuff to learn about and maybe a usable language will pop out :)

                                  • preparing for a possible PhD entrance exam after learning that several German institutions may let me skip a master’s due to my open source database work, have relatively light teaching load, and zero required classes to possibly get it with ~3 years of effort. I’m particularly interested in thinking more about pulling probabilistic control theory and data structure design together to build low-configuration highly-flexible in-memory and persistent data structures that move along the RUM conjecture space.

                                  The main point of dropping to 8h/wk is to spend significantly more time with the people in my life given the uncertainty of societal stability over what I could assume to be a natural lifespan otherwise, but I think these technical projects will also be fun and worthwhile in the extra time I have now :)

                                  1. 2

                                    Amazing. I’ve followed your work on sled for a while now, so I’m happy to hear that’s almost done. But more happy that you’re building a life in a thoughtful way. Congratulations and best of luck.

                                    1. 2

                                      A lot of studying different rabbit holes inspired by Frank Pfenning’s recent CMU course on Bug Finding

                                      These lectures aren’t publicly available anywhere, are they? The YouTube playlist appears to be private.

                                      1. 3

                                        I’ve been going through the available notes and code samples, which are still quite loaded with fascinating perspectives and pointers to related work.

                                    1. 5

                                      There are a couple reasons why this is getting such a strong response:

                                      • It’s difficult to demonstrate the uses of reproducibility. You probably don’t care about nix’s guarantees unless you’ve done sysadmin-type work. Or perhaps you have some interest in distributed computing, formal verification, OS dev, etc.
                                      • There’s a dearth of documentation on nix. It’s rare to see a succinct article with some example code. Normally, you have to hunt through GitHub to figure things out.
                                      • Most developers have dealt with package management. It’s foundational to modern software development, so we have established workflows that work for us. We have learned to accept occasional as ‘the cost of getting things done’, so the example in this blog post appears unremarkable.

                                      Anyway, I enjoyed it but I’m a NixOS user, so I’m a sucker for any thoughtfully put-together nix code (as per bullet point #2).

                                      1. 4

                                        This is very reassuring. I’ll probably be running NixOS on the Framework laptop in a couple months :o)

                                        1. 20

                                          Writing something about programming that hopefully won’t get instantly downvoted.

                                          1. 5

                                            That’s a mood

                                            1. 9

                                              Yeah, there’s a few people that instantly down vote everything I write/post here as off topic or spam and it’s kinda discouraged me from writing as much as I normally do. If it continues i may ask push to look into it or something.

                                              1. 7

                                                Yikes, I recognize your name as someone who’s submitted great quality original posts in the past. Maybe I’ve been missing them recently because of this.

                                                1. 4

                                                  That’s odd. The stuff you tend to work on and talk about tends to generally be a good read.

                                                  Maybe a bit sillier than other people may like, but solid nonetheless.

                                                  1. 2

                                                    For what it’s worth, I have the opposite reaction. I think of your writing as always detailed, practical, unpretentious - exactly the things that lobsters was built to showcase. (Sidenote: your posts on NixOS are what finally convinced me to switch, so thanks for that :))

                                                    1. 1

                                                      If it helps, some of your stuff I like a lot and some of your stuff I’m not terribly interested in, but I never downvote your posts ’cause I want you to keep writing and posting here.

                                                  2. 2

                                                    Illegitimi non carborundum.

                                                    1. 1

                                                      I also have anxiety about this, which is why I have several things I’ve written and haven’t posted.

                                                    1. 2

                                                      I have started reading these updates since @akavel’s comment in praise of them and they are quite good, very accessible even if you’ve never written or taken apart a shell.

                                                      1. 2

                                                        Thanks! If you want more stuff to read, check out Popular Posts with Many Comments. It’s linked in bold on the blog index, but based on my logs very few people visit that page :)

                                                      1. 32

                                                        I’m not usually one to comment on these sorts of issues but it ticked me off how the author of this article consistently decided to refer to leah2 by her deadname and to use the wrong pronouns. Kinda took me out of the article, oh well.

                                                        1. 13

                                                          Not only me, but also other people involved. :(

                                                          1. 4

                                                            That’s awful, there’s no justification why the author would do that. I’m sorry for you and everyone else involved. :(

                                                            1. 4

                                                              I wouldn’t treat this as an attack. It’s a historical account of the past years where people went by different names in the past 10 years.

                                                              1. 3
                                                                1. 1

                                                                  Ok.

                                                                  Most of the software I touched in the last few years, as well as maintained websites, have my name updated, refer to them as such.

                                                                  If you speak about me in a context where only my old name is known, it’s not a problem to me. Please try to use they/them, though.

                                                                  Leah’s name has not been updated in the referenced git repository.

                                                                  Anyway, I do not think it was an intentional attack.

                                                                  1. 2

                                                                    I don’t intend to speak for Leah but according to her comment I was replying to, she’s clearly not stoked about it. I think that’s a good enough indication that this wasn’t really the way the author should have approached mentioning her if the intent was to respect her. I’m not trying to frame the blog post as an “attack” either, but yeah. I don’t think there’s really a discussion to be had here.

                                                                    n.b.: I do not know Leah nor have I have ever talked to her.

                                                                    1. 1

                                                                      From the article:

                                                                      nowadays known as Leah Neukirchen.

                                                                      It seems pretty clear that her new name is known and clarified.

                                                            2. 13

                                                              Same, plus the Rust as a Microsoft + Mozilla + Google conspiracy against open source.

                                                              1. 9

                                                                yeah, that struck me too. i wish there was a flag like, “this is ok except i would rather not have to endure ambient transphobia with my os/compiler blog post”

                                                              1. 3

                                                                I have used NixOS as my daily driver for a couple months now and I love it. However, I have a very superficial understanding of its architecture so I struggle to make meaning out of this. I’ve read https://r13y.com/ already, but it left me with more questions:

                                                                1. What is being compared to determine whether two builds are consistent with one another? (diffoscope?) Isn’t the output necessarily different due to hardware optimizations? Are they turned off for the purposes of these tests?
                                                                2. Does reaching the 100% threshold unlock new capabilities or use-cases?
                                                                3. Are there other 100% reproducible (non toy) operating systems? How non-reproducible are other OSes?
                                                                4. Were there any particularly challenging non-reproducible components?
                                                                1. 7

                                                                  Yocto Project (an embedded Linux system) also has a reproducibility status page:

                                                                  https://www.yoctoproject.org/reproducible-build-results/

                                                                  Here is their wiki page about the topic: https://wiki.yoctoproject.org/wiki/Reproducible_Builds

                                                                  1. 2

                                                                    Thank you. The documentation is very precise, which I find reassuring.

                                                                  2. 5

                                                                    What is being compared to determine whether two builds are consistent with one another? (diffoscope?) Isn’t the output necessarily different due to hardware optimizations? Are they turned off for the purposes of these tests?

                                                                    In my understanding reproducible builds require that you target the same hardware, so e.g. arm64 without any extended instruction sets or so. Non-deterministic optimizations need to be turned of for that. https://reproducible-builds.org/docs/ is a nice resource, listing things which makes reproducible builds complicated in practice.

                                                                    Does reaching the 100% threshold unlock new capabilities or use-cases?

                                                                    Yes, one can assert whether a given ISO image matches upstream sources and hasn’t had any backdoors or so backed into the binary without disassembling it. This ability is lost if you are <100%.

                                                                    Are there other 100% reproducible (non toy) operating systems? How non-reproducible are other OSes?

                                                                    None that I know of, but many are working on it, see https://reproducible-builds.org/projects/

                                                                    1. 2

                                                                      Yes, one can assert whether a given ISO image matches upstream sources

                                                                      The act of verifying removes the need for verification. When you build it yourself to check, you no longer need to check. Just use your build artifacts.

                                                                      Reproducible builds are nice for other reasons – eg, caching by hash in distributed builds, but they’re security snake oil.

                                                                      Finally: if you’ve got a trusting trust attack, you can have a backdoor with no evidence in the code, which still builds reproducibly.

                                                                      1. 2

                                                                        If you’re building it yourself to check, you no longer need to check. Just use your build artifacts. This is security theater.

                                                                        It’s not. It would explicitly have prevented the Linux Mint ISO replacement attack we saw 6 years ago.

                                                                        https://blog.linuxmint.com/?p=2994

                                                                        (It belongs to the story that the parent comment is just parroting talking points from Tavis)

                                                                        1. 1

                                                                          It’s not. It would explicitly have prevented the Linux Mint ISO replacement attack we saw 6 years ago.

                                                                          Can you explain how anyone would have noticed without building the ISO from scratch?

                                                                          1. 3

                                                                            I think preventing it is hard because there are so many avenues to exploit, but reproducible builds can help you determine whether a build has been compromised. If you don’t know whether the attacker managed to alter your build artifacts, you can just rebuild them and do a byte-for-byte comparison. If your builds aren’t reproducible, you have to look at what the differences are: are they changed timestamps? optimization levels? reordered files? etc

                                                                            1. 2

                                                                              You need to build it yourself to check, but could notify others if hashes mismatch as that would be much more suspect than it would be for non-reproducible software. Independent third parties could build other peoples ISOs on a regular basis to check.

                                                                              1. 2

                                                                                Also, I forgot the obvious circumvention (beyond the trusting trust attack): being lazy and putting the exploit into the distributed code – since in practice, nobody actually audits the code they run, it seems like in practice this would effectively circumvent any benefits from reproducible builds. Signing the ISO gets you a hell of a lot more bang for the buck.

                                                                                1. 2

                                                                                  Reproducible Builds only concerns itself of the distribution network and build server. It can’t solve compromises on the input because that is not the goal. We need other initiatives to solve that part. Reproducible Builds is only part of the puzzle, and I people like you and Tavis really struggle to see that. I don’t know why.

                                                                                  This is very much like claiming memory safety issues are pointless to mitigate since logic bugs are still going to exist. But wouldn’t eliminating memory safety issues remove a good chunk of the attack surface though? Isn’t that a net gain?

                                                                                  1. 1

                                                                                    I can get the claimed benefits of reproducible builds by taking the exact steps I’d need to verify them – running a compiler and deploying the output.

                                                                                    If you can tell me how to get memory safety by running a compiler once over existing code, with no changes and no runtime costs, I’d also call any existing memory safety efforts snake oil.

                                                                                    Again, if you’re concerned about the security problems that reproducible builds claim to solve, you can solve them today with no code changes. Just run the builds.

                                                                                    1. 1

                                                                                      Again, if you’re concerned about the security problems that reproducible builds claim to solve, you can solve them today with no code changes. Just run the builds.

                                                                                      I have better things to do then swap out my distribution with Gentoo and pretend it solves the problem.

                                                                                  2. 1

                                                                                    Yes of course, my claim was that one could check whether the binary matches the sources, not that it magically solves all security issues. You are right that people need to be able to trust their toolchains in the first place (trusting trust), but this is true for all software, reproducible or not.

                                                                                    Another initiative in this direction are “bootstrappable builds”, https://www.bootstrappable.org/

                                                                                2. 2

                                                                                  Nobody! And even fewer people if the ISO build is not reproducible. Which is the point of reproducible builds.

                                                                                  Ensuring we can reproduce a bit-for-bit identical artifact ensures we can validate the work, even with a signing key compromise. Without reproducible builds we are only left to our own device and have no way to even start validating it.

                                                                        1. 11

                                                                          This missed my favorite technique, which is to ls > copy_files.sh and then edit the script in vim. It’s not very impressive, but - at least for me - much faster than writing the code presented in this article. :)

                                                                          1. 11

                                                                            I do that with vidir, it opens vim with a number and the filename per line, you can change the filename and when you exit vim it will just rename changed filenames by looking up the old name using the number.

                                                                            1. 1

                                                                              See also my favourite tool, qmv from renameutils. Sounds like the same as your vidir but will just open whatever your $EDITOR is and doesn’t add line numbers.

                                                                              1. 1

                                                                                Wow, that’s almost what I wrote in python, dump file lists into lines, and rename or delete from the diff of the output. Sometimes I need create hardlink or move files around, and vidir seems only does rename?

                                                                                1. 2

                                                                                  Deleting and moving files works too, hardlinks not.

                                                                                  $ tree
                                                                                  .
                                                                                  ├── a
                                                                                  ├── b
                                                                                  └── c
                                                                                  
                                                                                  0 directories, 3 files
                                                                                  $ vidir
                                                                                  1   ./foo/bar/a
                                                                                  3   ./foo/c
                                                                                  :wq
                                                                                  $ tree
                                                                                  .
                                                                                  └── foo
                                                                                      ├── bar
                                                                                      │   └── a
                                                                                      └── c
                                                                                  
                                                                                  2 directories, 2 files
                                                                                  
                                                                              2. 3

                                                                                same here

                                                                                  ls *.txt | vim -
                                                                                
                                                                                  abc.tx -> mv abc.tx abc.txt
                                                                                
                                                                                  :w !sh
                                                                                  q!
                                                                                
                                                                                1. 1

                                                                                  Incidentally, I wrote a little Vim plugin earlier this week to streamline that workflow a bit, which makes editing that kind of stuff in Vim a bit easier.

                                                                                  1. 1

                                                                                    Nice method! I use ranger for bulk-renaming files in a vim-style workflow. However I frequently find myself installimg ranger for that single purpose. Your method seems more easily accessibie.

                                                                                  1. 4

                                                                                    Fantastic. As someone more familiar with Rust than C++, I’m enjoying this both as a review of the Rust memory model and as a window into how C++ developers think of these same concepts.

                                                                                    1. 9

                                                                                      Love Orca!

                                                                                      I hope this isn’t against the rules, but I’ve been streaming myself learning Orca from scratch. I start from a blank canvas to a ‘full song’ in about an hour, or at least that’s the goal.

                                                                                      Here are some other videos I’ve found helpful or just fun:

                                                                                      1. 2

                                                                                        I hope this isn’t against the rules, but I’ve been streaming myself learning Orca from scratch. I start from a blank canvas to a ‘full song’ in about an hour, or at least that’s the goal.

                                                                                        Heck yes! I love the Orca programming model but have no musical skill whatsoever so it’s nice to see people actually use it for actual things.