Threads for blissdev

    1. 5

      Oooh, nice. I currently use nix-darwin, and have been wondering what home-manager brings to the table. I think I will experiment with home manager this weekend.

      I understand you can use both home-manager and nix-darwin, but I don’t fully understand why you’d want to at the moment.

      1. 10

        nix-darwin installs nix (package manager) on darwin. Home manager lets you manage the configuration of applications with nix (language). I think the sweet spot that home manager hits is managing the configuration of tools that your configuration is simple and you don’t change often. Maybe something like your prompt if you use starship or htop with some simple settings. For things I change often like neovim I find the compilation step annoying and would rather just use init.lua. Some options won’t exist in home manager which can also be annoying. There are pro’s and con’s it’s up to you to figure out the sweet spot that works for you. My dotfiles are already a solved thing so I tend to just stick with that and not complect nix/home manager.

      2. 9

        home-manager is for managing your user environment, packages, configs. nix-darwin is for managing at the system level, more similar to what nixos provides.

      3. 1

        I wonder the same.

      4. 1

        Just to loop back on this, I’ve managed to create a flake.nix managing both Nix Darwin and Home Manager, without using the plugin to make Nix Darwin manage Home Manager. This loses some of the “atomicity” since I now have to run both darwin-rebuild switch --flake . and home-manager switch --flake . if I change both configs, but is IMO desirable since my Home Manager setup changes more frequently than my Nix Darwin one. Besides, running darwin-rebuilds switch --flake . requires typing in my password (presumably since it manages stuff in /etc) while running home-manager switch --flake . does not. (And the latter is much faster too.)

    2. 3

      The libvirt, QEMU, Virtualization.framework stack is getting close on macOS. I just wish it didn’t involve non-upstreamed formulae.

      QEMU recently merged support for Apple Silicon and the Virtualization.framework, so hopefully once that’s released the Homebrew formula will be updated to that version and then you won’t have to build QEMU from scratch.

      I haven’t looked into why libvirt needs patching.

      A working virt-install homebrew package would be the cherry on top for this workflow on macOS. It would completely remove the hand-crafted XML step. I highly recommend incorporating a cloud-init ISO to this workflow, as it will remove the manual setup over VNC. Although, I might be biased as I tend to only use headless VMs.

      1. 1

        I agree re: the cherry on top. Do you know of any good references for cloud-init similar to this usecase. Would great for a situation I’m working with.

        1. 2

          I’m not an expert, but this is almost entirely how I use cloud-init for my VMs at home:

          The meta-data file:

          $ cat > meta-data <<EOF
          instance-id: <the_hostname_you_want>
          local-hostname: <the_hostname_you_want>

          The more useful user-data file:

          $ cat > user-data <<EOF
            - name: <your_username>
              sudo: ALL=(ALL) NOPASSWD:ALL
                - <your_key>
                - <another_ssh_pub_key_if_you've_got_it>
          resize_rootfs: True
          packages: ['avahi-daemon']

          Create an ISO:

          $ genisoimage -output seedci.iso -volid cidata -joliet -rock user-data meta-data

          Then you can download a cloud image and pass the seedci.iso file generated in that last step as a cdrom drive.

          Anything more complicated than this and I would need to go to the cloud-init documentation or look up tutorials.

    3. 2

      I understand this. I use Phosh on Pinephone as my daily driver, but I cannot yet make an unqualified recommendation for it.

      What I can say is that if you’re willing to accept a reduced featureset and polish, a Linux-based OS for phones is doable today.

      I also have a mainstream mobile phone which I use for workflows not yet supported on Linux-based phone OSs, such as navigation and banking.

      1. 2

        Is banking not possible in the browser?

        1. 1

          My bank offers mobile deposits of paper checks with an android app, but afaik the bank website doesn’t provide mobile deposits.

          1. 1

            Ah fair point. A rare but useful need for me.

    4. 3

      I enjoyed the discussion of various commit strategies. We do rebase and merge, but in combination with bors to squash our PRs into a single commit at the end. I definitely feel like something is lost in that strategy however. Something like commit groups would definitely be nice.

      1. 4

        If you rebate and then merge –no-ff what would you gain by also squashing things? It seems like you lose the story if you squash, whereas a merge –no-ff gives you a clean “commit group” on the graph

        1. 1

          You lose having every commit on master beeing green.

          1. 3

            Green? You mean passing tests? Why are you making commits that don’t pass tests?

            1. 3

              Testsuites can take a lot of time. It’s not perfect but it is a reality.

      1. 2

        I use the older codemod tool regularly – didn’t know that a faster Rust version existed. Thanks!

      2. 1

        Is there a specific way to integrate rg with fastmod?

        1. 3

          I don’t think so, but fastmod uses the same regex engine as ripgrep, although it probably doesn’t have all the optimizations that ripgrep has. (Specifically, inner literal optimizations. Those can’t really be added to the regex engine, so they live a layer above it inside of ripgrep, well, the grep-regex crate.)

    5. 3

      Has anyone been using this browser? I’ve been thinking about trying it out, but would be curious how the experience has been for others.

      1. 2

        I just gave it a try in a VM. I wasn’t able to get the VI bindings to work and gave up. Not sure if there’s a bug or their docs are out of date..

        Edit: yeah, docs are out of date. The init file goes in $XDG_CONFIG_HOME/nyxt, not next like the docs says. But even with that, it fails to enable VI mode with: Could not load the init file: The name "NEXT-USER" does not designate any package. Using nyxt-user doesn’t help. ¯\_(ツ)_/¯

        1. 1

          That’s disappointing. Hopefully will get fixed soon.

        2. 1

          That’s not too surprising, considering the size of the project, and that it was promoted as the “Emacs of the Web browsers”.

    6. 4

      I would love to see a short demo video of this.

      1. 5

        The app page has small gifs about the app’s functionality.

      2. 2


    7. 1

      Do any of these services work well with multi-tenancy? Let’s say I have a SaaS app that puts clients on subdomains. I’d like to access analytics in isolation (per-client) but also in aggregate. I think I can achieve that with GA with a lot of setup.

    8. 2

      I found some helpful hints in here, thank you!

    9. 2

      This was incredibly inaccurate for me. Perhaps this is because of the way my speed ramps up over the time of the test, which I see in other tests, but with this test it just stays at the very initial speed.

    10. 1

      I have 3x Asus PB287Q displays. They’re a bit large to be 4k, but I’ve gotten used to it (I run 2x retina), and in honesty it’s kidna nice having everything be a little large, but still crisp. Recommended.

      I also have the LG 31” “real 4k” with 4096x across, on another desk. Needs a lot of signal bandwidth so you really do need to spend on cabling, but oh lawd that panel is beautiful. It shows colours I’ve never seen on an another computer display.

      1. 1

        What’s the model number on the LG 31”?

    11. 14

      Unhelpful article. Complains about gitflow, makes no real recommendations beyond “ask questions of your team”.

      1. 24

        The whole point of the article is to advocate spending significant time & effort on original thinking about what works for you and your group, and why - instead of copying a neatly-documented workflow you found on the internet.

        Given that, what other kind of recommendations could it possibly make?

        (nb: I have a preference but no strong opinions on the topic - deriving your own workflow is actually pretty expensive and you might want to spend those cycles elsewhere, but I’ve had good yield from the exercise in one team).

        1. 4

          encouraging your team to communicate is great! if that was the main point, then the article should have been titled “talk with your team” and been filled with techniques for better communication. but the article i read mainly complained about a git pattern that lots of people find useful.

          1. 4

            Why must every article critical of a topic take the paternal role of telling you what to do instead? Can’t you exercise the critical thinking yourself? There are likely hundreds of articles out there, some linked in this thread, about alternative version control workflows, and they’re not too hard to find. Flagged your reply series as “troll” because it adds nothing to the conversation except “the author didn’t write enough and so I didn’t like the article”.

          2. 4

            The point isn’t simply to communicate, the point is to critically think about the workflow. The blog post contains the author’s critical thoughts on the workflow, and encourages people to think critically about their own workflows. Asking questions of one’s team is really a means to that end rather than the end itself.

            1. 0

              Its easy to complain about something that’s causing you pain. Its harder and more useful to look for a better course of action that can alleviate the suffering. My problem with the article is that it complains alot about problems but talks very little about solutions.

              (The problems described are real, I’ve experienced them myself)

              1. 8

                While I generally agree with this, it is very important to see what is being criticised.

                git-flow is a heavy process that has to argue for its value at every corner. The “other option” is using unstructured branching and PRs to master.

                It’s a general problem that processes are argued for by pointing out the absence of a replacement. Some processes can be removed without replacement.

                1. 1

                  I disagree strongly with the idea that GitHub-style pull requests should ever be considered the ‘default’ workflow with git.

                  1. 1

                    I neither suggested one or mind which PR style you use.

                    1. 1

                      Well I extend that to all pull requests that aren’t git-pull-request. Sending patches is the default: it’s what git was designed around.

                  2. 1

                    What’s your thinking here? Or what are you advocating against? Can you point me towards any resources or your own thoughts on this?

                2. 1

                  That’s a useful point, which would have been helpful if included in and expanded upon in the article. (Unless I missed it somehow?)

                  1. 4

                    On that level, I definitely agree with you.

                    But the article in the end does make a case for reflection and inspecting your process. I think it’s a bit much to ask for what is essentially an essay to cover all the corners.

      2. 2

        Please see my answer above for one very simple suggested workflow I’ve seen work well.

        I think you may be going too far by labeling this ’unhelpful” because there is in fact no one size fits all solution, and the author is right about that, but I agree it could certainly be more helpful by offering some potential starting points for a solution.

    12. 24

      I often feel like I’m the lone developer in the world screaming into the void that python is a flawed language and it’s massive adoption recently is a mistake that we haven’t begun to see the costs of yet.

      The language itself, the grammar, operational semantics of the core language, documentation, and common library design idioms are all bathed in enormous complexity. The type system is a worst of both worlds compromise that manages to cause frequent crashes with no real upfront checking (mypy is a very small step in the right direction but has a very long way to go and probably can’t ever become as good as it needs to be) yet also don’t offer enough dynamism to justify the absurd cost of not having compile time checking.

      I just don’t get it.

      1. 10

        I’ve been using Python a very long time, and I have to admit that when I read your comment looking for something objective rather than subjective, all I find is something that doesn’t match my own experience (“manages to cause frequent crashes”) and really seems to be the same “dynamically-typed languages are all bad and constantly break” stuff that’s not at all backed up by the available literature on defect rates for static versus dynamic typing.

        1. 11

          I’m not going to try to make an objective argument against any language because I just don’t think we’re at a point in our understanding of software engineering yet where we can make substantive objective claims about languages outside of some very narrow cases. I’m familiar with the literature you’re referring to and while I grant that the conclusions did not support static typing, I’m not convinced by the research for several reasons (methodological concerns as well as concerns about how broadly you could extend the conclusions given the pretty limited number of cases that were actually studied).

          That said, I’m glad you’ve never had a problem. I have, and I’ve talked to quite a few other people who have as well (although they are generally dismissive of the problems). But it’s not strictly a matter of ahead of time type checking vs runtime checking as an absolute good/bad, it’s a matter of trade-offs.

          Ahead of time type checking can eliminate categories of bugs, at the cost of not admitting some valid programs. More sophisticated type checking can admit more programs at the cost of sometimes higher requirements for the programmer to think about types (dependently typed languages for example can express far more granular constraints but might be harder for a programmer to use than something like Haskell (omitting dependents Haskell for the sake of this discussion), and there is a large range of languages along this curve).

          Very dynamic languages on the other hand focus on flexibility of features at the cost of programs being less provable. A language like lisp, ruby, or erlang may have many programs that use this flexibility in ways that would make it very difficult to type check programs.

          The problem as I see it is that python is the worst of both worlds. It offers no guarantees though type checking, requiring at best the programmer to manually implement their own verification through runtime type assertions, unit tests, or manual proofs outside of the program itself, or at worst programs crash while running. At the same time, the languages own grammar and idioms do not seem to support the dynamism that other languages offer in exchange for giving up safety.

          In short, the problem with python isn’t that it’s dynamically typed per-se, but that it’s dynamically typed while being no more powerful or expressive than statically typed languages.

          1. 4

            It offers no guarantees though type checking,

            Well, it offers some.

            >>> "3" > 3
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
            TypeError: '>' not supported between instances of 'str' and 'int'

            If that doesn’t seem like much, consider that couple of the most popular programming languages today do not offer even this level of type checking.

            1. 4

              The problem is you still don’t find that out until runtime. That’s my fundamental point- to whatever degree there’s value in the sort of dynamism you’d get from having ‘3’ > 3, you give that up in python, but you don’t get anything in return. You just have to run it, and hope you exercise that code path early so it crashes while you’re in the office and not at 2am when you have to groggily debug stack traces under an SLA.

              1. 1

                The problem is you still don’t find that out until runtime.

                Yeah, I get that, and have made the same arguments in mounting levels of anger when looking at logs with many versions of 'NoneType' object has no attribute 'foo' that nobody knows where they’re coming from. The unfortunate part is that the people who decide these things don’t really care that some engineers have to suffer from it.

                but you don’t get anything in return

                I’m not sure if that’s true, but I find proving that point difficult. One benefit of python is a greatly enhanced support for explorative programming that many stricter languages in practice do not give you – although some, like Haskell, are close. The language is stupidly simple (in a good way) in my opinion, and I think the dynamism is part of that somehow.

                1. 3

                  I’m coming from Haskell as my primary language, but lately I’ve been forced into python at work. I find python far less capable for exploratory programming than Haskell, not just because of the lack of type safety but also the general lack of flexibility in the language. I’ll concede the situation might be different if the reference point for a typed language was Java or something.

                  1. 1

                    Perhaps things have changed since the last time I coded Haskell (which was ~10 years ago), but doesn’t ghci lose all local bindings when you reload your modules?

                    1. 2

                      Yes, that’s still a pain. I’m not going to defend Haskell as flawless or anything, it has a bunch of painful and irritating deficiencies. On balance though I still find it a nicer experience than python for exploratory programming.

          2. 1

            I tend to think of Ruby as being very similar to Python (though I haven’t spent a lot of time with Ruby). What makes it more dynamic than Python? What are the marginal features that you think make the dynamic nature of Ruby more worthwhile?

            1. 4

              Ruby is certainly the least differentiated from python of the three I listed, but I think there are some important differences in idioms at least, if not fundamental capabilities. In particular, ruby’s metaprogramming feels much more dynamic than python’s decorators (which in practice feel much more like something you’d get out of a preprocessor in any given statically typed language). Writing an embedded DSL in ruby, it feels much more dynamic and mutable than trying to do the same thing in a “pythonic” style.

              Ultimately, because of the metaprogramming capabilities and slightly more flexible syntax, idiomatic ruby “feels” more like a very dynamic message-passing OO system. Python, on the other hand, “feels” much more structured; like writing C or C++ but instead of types the compiler people spent all their time anal-rentatively trying to prevent you from using code formatting they don’t like.

          3. 0

            I’m really not trying to be dismissive, but again this feels like a rehash of the same “dynamic typing is bad, you have to write unit tests to assert literally everything in your program” that always comes up in static-versus-dynamic debates, and unfortunately that tends to be a highly subjective argument. Summaries of what research there is on the topic (this one is often cited) are very far from conclusive on anything, for example.

            So while I respect that you don’t care for Python, I also respectfully ask that you keep in mind how many other people have had experiences with dynamically-typed languages which don’t line up with your own.

            Also, it’s worth noting that if you want something with Python syntax and static type checking, Python 3 supports annotating with types and there are static checkers, like mypy, available. Though personally I dislike the fact that mypy went all-in originally on a nominal-typing approach when I find that real-world Python tends to want a structural approach, but that’s my individual preference.

            1. 6

              I get that people might have had different experiences, but at the end of the day my experiences are my experiences, and they’ve lead me to the conclusions I’ve articulated. I don’t see any reason I shouldn’t share them on a discussion forum where they are on topic just because some people have had different experiences.

              You like python? Never had a problem with it? Fantastic go write it all you want. I’ve had no end of trouble with it and furthers any discussions to hide the fact that I and others have come to the same conclusions about why, at least for some of us, it doesn’t work.

              1. 1

                Sharing opinions and experiences is fine!

                My issue was with the way the original comment phrased things seemingly as assertions of fact; that style of argument too often dominates any discussion of dynamic versus status typing, and reality is that nobody’s really in a position to make such assertions – the most anyone can do is share their experience and opinion, and accept that someone else might have different experiences and opinions.

        2. 2

          I at least somewhat agree with Rebecca. Python is a pleasure to write and a disaster to debug. My last bug was a missed comma in a statement:

          if word in [ 'keyword1' 'keyword2' ]

          Hidden within a couple of hundreds of lines, it can be very hard to figure out what’s going on.

      2. 3

        You’re not alone -

        Python’s syntax makes me want to yank my hair out, while Ruby’s makes me gnash my teeth during the day, and grind them to a fine dust at night.

        I agree with your points on Python - and have tried assembling a similar, grounded, reasonable list for Ruby, but that was before my descent in madness.

        1. 2

          Python’s syntax makes me want to yank my hair out, while Ruby’s makes me gnash my teeth during the day, and grind them to a fine dust at night.

          Good example of how much peoples’ opinions on these matters differ. I find both Python and Ruby to be in the top 5 of most beautiful programming languages.

          1. 2

            And that’s how we can still all be civil friends: all it boils down to is beauty.

      3. 3

        I agree, and I would also say that I feel python has become a bit of a worse language in recent years. I think it peaked around python-2.7. I was hopeful for python-3, and it seemed pretty decent at first, but I was really disappointed that the “twisted style async” was the version that won out with asyncio, and I feel it has only gotten worse over the years (more complex, stranger/weirder syntax additions, i find the “type checking” bolt-on very awkward, etc).

      4. 2

        I agree, this has been my experience as well.

    13. 1

      We use Concourse and GoCD. I am not a fan of Concourse personally. GoCD is nice though.

      1. 1

        Curious what issues you have with Concourse? I’ve always been interested in using it, but that may be mostly UI focused.

        1. 2

          The main issue I have is that it runs in a container, so if you are trying to run smoke tests in an integrated containerized environment, the performance of the nested containerization is extremely poor. My nit would be that the UI is beyond awful and still somehow manages to make my laptop fans start spinning the moment I open the page.

          1. 1

            Ah that’s sad to hear. Thanks for the info.

    14. 6

      We’re currently transitioning to as our single source of truth on these things. It’s not perfect, but it’s discovery and collaboration is must better than Confluence or GDocs, from experience. This is from the perspective of a small engineering team, though.

      1. 1

        That looks somewhat neat, but it looks like it has no Linux support and no web interface?

        1. 3

          Ah, I can see how you would get that impression from the landing page, but it does in fact have a web interface and I mostly just use it from the browser so that should solve the Linux support issue as well.

        2. 2

          It’s fully usable through a web browser, but there’s no Linux client, no.

        3. 1

          The native clients are basically web views. The web interface is what I use most of the time.

        4. 1

          It’s definitely web based and in browser, the desktop apps are just Electron wrappers. I think there may be an unofficial Linux Electron wrapper too (if you are willing to add to your collection)

      2. 1

        Thanks for the link. Definitely going to check it out!

    15. 4

      looks not really specific to docker, appart the fact to setup a database quick

      1. 2

        Yeah, it’s just that Docker makes it much easier to both get the speedup, and more broadly makes it easier to just start your database as part of your unit test run.

        1. 5

          I’m afraid the speedup doesn’t really happen on OSes where Docker runs in a VM like macOS. At my daily job, I’ve measured that our automated tests are around 30% slower when the database runs in Docker.

          One should also consider using a ramdisk in addition to disabling fsync.

          1. 1

            Does ramdisk work for VM docker environments? Curious if you were able to find any speed ups in that environment.

            1. 3

              I don’t know, it’s been a long time I stopped running databases in Docker on macOS for performance reasons. Nowadays, I simply open a terminal and start the plain old database binary in the foreground on a plain old macOS ramdisk with fsync disabled. I’m not sure the ramdisk really improves things but I’ve a few gigabytes of memory to waste so…

    16. 3

      I would really like to see it in action on an air traffic control screen, but I suppose that’s probably not something for public consumption.

    17. 1

      This is the approach that Vue is getting in the next big iteration (on the branch that ditches IE11 support).

      Interesting work :)

      1. 1

        Thanks! I’ve tested it, but it is quite slow. I’m looking for ideas to improve it.

      2. 1

        Any links to learn more about this? Curious if it has speed issues like @jfet97 mentioned.

        1. 1

          I’ve studied Proxies on MDN. I’ve tested it againts a simple Rxjs code and there is too much difference.

    18. 3

      I’ve really been enjoying Nightly, super fast and I eventually liked the UI changes. (I initially missed the curved tabs)

    19. 1

      This article is nearly 2 years old now. Am I missing something?

      1. 1

        This article ( is quite recent, and refers back to the link here, so I’m guessing this is what prompted this post?