• 0 Posts
  • 97 Comments
Joined 3 years ago
cake
Cake day: June 15th, 2023

help-circle
  • If you take the tree of life showing the evolutionary branch, you won’t be able to pick off a branch that includes all of the things you would think of as “fish” but excludes all of the things you think of as “not fish”.

    The reason for that is that all land animals with a four limb body plan, including reptiles, mammals, and birds dinosaurs evolved from a family of fish called tetrapods. But there are still tetrapods in the ocean that you would think of as “fish”, and I don’t mean whales.

    Hank Green has a much more entertaining and complete discussion at https://youtu.be/-C3lR3pczjo



  • Yeah, the libraries are pretty great. I’m working on a kinda personal kinda professional project right now. Ideally it would support reading and writing about seven different sorta obscure file formats. For a bunch of reasons I’m writing it in rust and there is a good library for one of them, multiple half assed libraries for another, and none for any of the others. There is excellent support for all of them as a single Python library. My first step has become writing a comprehensive rust library for all of them.




  • I have been using Python as my second language alongside whatever system language I was using professionally as well as for a variety of personal projects for about 20 years. I’m quite fond of the language for the sorts of things I use it for, which is either scripting glue or doing serious math because I hate dealing with Matlab licenses.

    And you are so fucking correct it isn’t even funny. Not only is the tooling a disaster, but it seems like every few years there is a new tooling scheme that doesn’t work quite right with the old one and is a disaster in its own unique way. And

    I know people get annoyed by rust evangelists, but I started using it six months ago and god damn does cargo slap. Want to initiate new project? One command gives you the complete boilerplate. Adding a new dep? One simple command. Want to pin or unpin a version? One simple command. Want to update all the deps to latest? One simple command. Want make a release package? One simple command. Want to update all your installed packages? One simple command. Want to keep every project tied to a different version? You guessed it.

    I definitely have some issues with Rust syntax, but I want cargo to manage my life.

    Really, the a Python project needs to take a look at the Zen of Python and apply it to the tooling. And then use cargo to do it.

    Edit: And, all of those simple commands work across all platforms the same. None of this, “Everything is perfectly cross platform and is the same anywhere. Unless you’re using a Mac. Or Windows. Or the wrong Linux distro.”

    Edit x2: There is, of course, an XKCD for that.

    Edit x3: And it’s not just venv. I am constantly struggling with which pip to use on which machine. Is it pip, pip3, pipx, uv pip, conda pip?


  • Oh it absolutely is. Bringing files into Be is fine. The file type sniffer runs in the background and adds whatever metadata it can in a lightweight quick way. IIRC there are addons for specific file types like media files that add nice things like author, runtime, etc.

    Sending them out is a pain though. All the metadata is usually lost and from what I recall even emailing a file from one Be machine to another could be difficult. IIRC you could zip them and the metadata would make it, but raw files and tgz would lose it.



  • My college roommate got an install CD of the first version that ran on x86, maybe 3.0? I tried it on my computer and became an instant convert. It was so astoundingly much faster and stable than Windows was on the same hardware, had a decent free IDE, and could play MP3s without skipping while compiling, browsing the internet, and spinning a GL Teapot all at once on a Pentium 75 with 16MB of RAM. Nothing else even came close for a desktop experience. I bought a copy for myself and every version that came out.

    I’ve been daily driving Linux for a long time now, but I still look back and wonder what could have been. There are still things to this day that BeOS did better and faster in the ‘90s on single core sub GHz machines with spinning rust than Linux, MacOS or Windows can on top end modern hardware.


  • I think there are a couple of reasons. First, the Linux kernel doesn’t support resource forks at all. They aren’t part of POSIX nor do they really fit the unix file philosophy. Second, most of the cool things that BeFS enables are very end user desktop oriented, and Linux leaves that desktop environments, not the kernel. BeOS was designed as a fully integrated desktop os, not a multiuser server os. Finally, I expect that they are a security headache, as they present this whole other place that malware could be stored. Imagine an innocent looking plain text file that has an evil payload sitting in an attribute.


  • If you are nostalgic for BeOS, then the elevator pitch is, “It’s Be, only on modern hardware and more software support.”

    If you are unfamiliar with BeOS, the pitch is: “Imagine an extremely lightweight desktop is with all of the things you would expect in a modern environment with none of the legacy. In an alternative universe, BeOS would have become OSX.”

    There are so many things that Be did right from the very beginning that other OSs have adopted, but never as cleanly as Be did it.

    For example, its file system. Most people don’t really notice or care about the file system, they all have directorys and hold files, maybe with permissions. BeFS does that as well, of course, but so much more. The entire file system acts as a database, so you can easily perform fast queries on it. You can also create virtual directories that are the result of those queries.

    You want a “folder” that contains every markdown file created after 2020 between 20 and 1000kb in size? Bam, instantly done and live updated whenever something accesses it. The files aren’t actually copied there, just appear there to normal tools, almost like soft links.

    BeFS also supports a resource fork system that it calls attributes. These can also be queried using the same database like tools as the rest of the system. File typing is done this way, every file gets a MIME type attribute and there is a daemon that sniffs them when a new file is downloaded or copied over.

    Even more, this allows some crazy things like plain text files that have font, color and other formatting elements because all that is stored as an attribute.

    Or their contact information app, which stores every person as a zero length file with details as attributes. You can create a virtual folder of all your contacts that meet a certain criteria and have other applications use that folder for whatever.

    Or the email app which stores each email as a file, and adds the basic metadata like to, from, subject, read, etc as attributes. Then you can have different virtual folders based on those. This also means that the basic file system browser is the default way to view email, because it supports all the attribute viewing, queries and such you would need. Or you can do it all from the command line using either basic cli tools or some slightly specialized ones.

    Combining attributes and virtual directories makes for a fantastic media library system, all built into the os for free. Imagine a directory that contains “Every metal song I have, from 1989 to 1993, that I haven’t played in three weeks” or whatever else you want.

    Back when people used files and all applications were local first, this was probably much more exciting, but it’s still pretty cool.


  • So my oldest is almost to the point where I’m going to want them to have something for schoolwork and writing. They use a classroom Chromebook at school, but I have no idea what would make sense for them here at home. I’m an engineer who daily drives Linux, so I’m probably overthinking it. I do have an old laptop that will easily handle a lightweight distro, and as long as I don’t give them sudo it will probably be ok? Though I haven’t looked at parental controls for Linux accounts.

    What do you recommend?



  • At one point I thought like the middle guy, but I didn’t have the money to do it so my computers were made from whatever parts I could scrounge up from dumpster diving, school auctions, or whatever. I was building or upgrading my computer every six months or so with what I found.

    Once I had the money to buy basically whatever computer I wanted, I would build a high end machine and then not bother to upgrade it until I had a friend who needed one. I pass my old one on to them and the cycle repeats.

    My laptops are still random auction finds. My current one came as a pair for $40. I popped in a new SSD and battery in one and have ignored the other. I should see if Haiku supports it well enough to be worth daily driving.





  • I recently read this blog post and gave it a try. After a little bit of tweaking, I found that it became a useful tool for me while still letting me enjoy coding. It doesn’t fix everything that is wrong with AI development but it does help a lot in my day to day.

    TLDR: Add this to your copilot_instructions.md or whatever you use.

    When the user gives you a task specification:
    
    1. Explore the codebase to find relevant files and patterns
    2. Break the task into a small number of steps. Each step should include:
        a. a brief, high-level summary of the step
        b. a list of specific, relevant files
        c. quotes from the specification to be specific about what each step is for
    3. Present the steps and get out of the way.
    
    When the user says "done", "how's this", etc.:
    
    1. Run git status and git diff to see what they changed
    2. Review the changes and identify any potential problems
    3. Compare changes against the steps and identify which steps are complete
    4. Present a revised set of steps and get out of the user's way.
    
    Important:
    - Be concise and direct, don't give the user a lot to read
    - Allow the user to make all technical, architectural and engineering decisions
    - Present possible solutions but don't make any assumptions
    - Don't write code - just guide
    - Be specific about files and line numbers
    - Trust them to figure it out
    - Do not offer to write code unless the user specifically requests it. You are a teacher and reviewer, not a developer 
    - Include checks for idiomatic use of language features when reviewing 
    - The user has a strong background in C, C++, and Python. Make analogies to those languages when reviewing code in other languages
    

    The last three points are my addition as I am currently do a lot of development in Rust which I have no experience with.


  • I’ve never used IntelliJ, or Java for that matter. I’m primarily an embedded robotics developer, so most of the time I’m writing C or a subset of C++ for uC/DSP target, or using SciPy for data analysis and algorithm development. I recognize that probably puts me way outside of the norm for most people and software engineers in terms of process preferences.


  • I’m a “serious professional” who has been developing for over 20 years and I’ve generally prefer a text editor the IDEs that I’ve had to use at work. I find that most IDEs are slow resource hogs that don’t give me features that I actually care about over a fast text editor.

    The singular exception was Cider when I was at Google. It was fantastic at wrangling their massive monorepo, and integration with their code review and ticket system was nice. Somehow it was snappy and reliable even though it ran in Chrome.

    Nowadays I’ve switched to Helix and use LSPs for the languages I use most. For what it’s worth, those are C, C++, Rust and Python. Mostly Rust and Python now.