Skip Navigation

InitialsDiceBearhttps://github.com/dicebear/dicebearhttps://creativecommons.org/publicdomain/zero/1.0/„Initials” (https://github.com/dicebear/dicebear) by „DiceBear”, licensed under „CC0 1.0” (https://creativecommons.org/publicdomain/zero/1.0/)P
Posts
1
Comments
204
Joined
3 yr. ago

  • I watched a few of the digikey tutorials in YouTube for the basics, and that was good enough for me to get started. But also I think like a computer after years of software dev, and I've done constraint-based UIs before, so I think it was pretty native for me.

    Here are some "once you know what the buttons do" tricks that I've learned:

    Early on I tried to put all of the details into one sketch, because it looked like "what I was trying to make", and then it was a pain to pad this and then pocket that, etc. Now I think of it as an interative process, more like sculpting, I guess. But also you don't have to do things in manufacturing order either!

    Maybe I want the outline of the case to be dependent on the screw holes, so it feels like I have to do them together. Wrong. In the Part Design workbench, in a single body, one sketch can just be the circles for the screw holes, because those have a fixed size and location. Done. Next sketch can be the the internal outline of where your board fits in, referencing the circles of the screw hole sketch using the "external geometry" button. Okay, now I have a sketch for the screws and a sketch for the internal bits, but I haven't actually "made" anything yet. That's fine! Now we can do another sketch for the outside perimeter that again uses the external geometry feature to be constrained based on the screw holes from one sketch and the internal space from the other, while maintaining a 4mn wall thickness around those features, or whatever. Great! Now we're in a place where we can pad down the outline, pocket out the internal gap to one thickness, pocket down the screw holes to a different depth. The way we "built" the 3D features didn't have to match the order we designed the sketches.

    Now that we have that, it's still mutable. We can at this point add another sketch for some risers you want, and pad those up. Great, what else? Maybe this edge is a bit sharp. Click it and apply a chamfer. Okay what's next? You know? Just step through it getting closer every time. You don't necessarily have to get all features defined up-front.

    If things start at different heights, you can use datum planes! From your body, click the datum plane button, then it will be asking what you want to reference it off. From here you can expand your Origin in the tree view and click the XY Plane to have another one like that. Then you can set the offset in the task panel on your right to be basically 7mm above the XY plane or whatever. Great! Probably name it, and then hide it because it's just visual clutter. But now when you're making your next sketch you can attach it to this "screw height" plane, and be exactly where you need to be to either pad up from here or pocket down or whatever. And when padding or pocketing you can also use the "to face" mode instead of "dimension" mode, and pick the datum plane as your face, to have an easy "it's as thick as it needs to be to get here" thing that will ensure your pockets down always line up with your pads up, for example.

    You want a lid? Great! New body in the Part Design Workbench. But you want it to be based on your other bottom part so you don't have to redo everything? You want a Shape Binder, which looks like a green blob for some reason. And if you have your lid as the active part (its name is bold in the tree), then you can select any sub-element of your main body before clicking the binder button and only grab that element. Like, for the lid you probably want the sketch of the screw holes rather than the whole thing. And maybe another of the sketch of the outside perimeter. And now you can use that as external reference geometry in your lid sketch and have the whole thing done in 10 minutes! And there's even a chance that if you adjust a constrain on those screw holes later, the whole body and perimeter and lid will all adjust together because they're all referencing each other. Of course, the downside is if you delete a line and redraw it in the screw hole sketch, everything downstream might break because all of their references are now missing. But having several simple sketches makes this better than one mega-sketch with all the detail.

    The number one number one number one thing to not get tripped up on early is that an individual body, the 3D part, must always be connected at all times! Which kinda makes sense as a finished product, it has to be one thing, but it can be confusing when you're in the middle of working on it. Your sketches can have shapes wherever, but the 3D part must stay contiguous. So let's say you wanted some posts around each screw hole to act as stand-offs. Makes sense. So you make a sketch for the screw holes, which is just some circles in space and nothing else, and you make a sketch based on that for the posts and it's also just some circles in space. And you think "I'll just pad these down to give me the posts, then I'll pocket the holes into them, and then I'll get to work attaching them with a base". Wrong. Sensible but wrong. When you do that you'll only get one post, because the others aren't connected to it! You can build up the sketches in any order, but when it comes time to realize it, it needs to stay contiguous. So sketch the holes, then the posts, then the outline for the base, but then pad the base up, then pad the posts down from the screw layer to the base layer. Or up from the base layer to the screw later. Whatever. Now that they're connected to the base, you'll get all the posts, because they're one thing. Now you can pocket the screw holes from each post. Etc.

    If at some point you're missing something, or your whole body disappears, make sure you haven't cut something off from the main body. Everything must be attached! If not, it's a separate body and should use the shape binder, as mentioned, to reference cross-body external geometry.

    Have fun, and don't expect to be amazing right away! Oh and also, remember your goal is the print. Any amount of ugly in the CAD is something you have to contend with, but won't affect the print. It'll still be a case if you had to copy the constraints 5 times. It'll still be a case if you used a circle instead of a bezier curve. You can't see those sins in the print. And likely you won't be starting a business of custom prints, so even you may never have to look at this CAD file again. So do whatever you need to to get the print. Make a new sketch that references the other sketch as external geometry and then traces all the relevant details in a particular order just to get the loft right. Ask me how I know. It's stupid, but it works, and it gets the print.

    You got this!

  • I know we're joking... but just in case people don't know, π, despite what we call it in English, is the letter "p", which ought to be said "pee", and was chosen for "periphery". Though "perimeter" could be used as as well. Because even though we have the special word "circumference" for the perimeter of a circle, pi is the ratio of a circle's perimeter to its diameter. As in, take diameter, multiply by magic constant p, get perimeter.

  • Everything local, I assume, means no upload? My dad does house inspections and so there's like 4 or 5 pdf forms he fills out all the time. If he were using this, would he upload the template every time, or could he upload it once and then fill it out multiple times?

    I assume also that it wouldn't keep a history of each finished file, and it's all ephemeral?

  • Maybe not a teen thing, but among children I think "because 789" could bring 789 into the discussion.

  • Okay but... she was the spirit of Christmas Present. That quote is the Hot Hot Hot guy.

  • Given your tone and general panic, I'm going to say don't look into Guix. It's technically interesting, but I don't think it's for you where you're at. 😛

    And I mean this with love, not gatekeeping.

  • Yeaaaaaaah, I wasn't sure whether or not to put that somewhere or not, and eventually decided not. I devalued all env vars, which I would feel like I had to move up to get into the PATH. I love the path, and I do agree with you that is important for understanding how the system really works, and how you can add your own commands, but I guess I figure that's a good Shell 201. For someone who wants to start using it, and isn't sure what a grep is or why a cat is involved, I figure they're not yet primed to care where these things live on their disk.

    But soon after, for sure! And obviously others can disagree with me.

  • Before you get too lost, I want to write a tiny intro:

    The terminal (also called shell and sometimes command prompt, even though these are technically different things) is a place where you run commands.

    If you open one right now and type ls (that is a lower case L), and then hit enter, it will list the files in your current folder. And it spits that out as text, which will be important later. So that's the gist, ls is a program that does something, and you type the name of it to run it, and it outputs its result as text.

    Most commands have "flags", which are options you give it when you run it. ls -l is ls run with the "l" flag (also lower case L). If you run that you'll see it lists more information per file this time. The mnemonic here is "l for long". There are lots of flags, and you can usually combine them with a single dash, so ls -lth is the same as ls -l -t -h, which lists extra data, sorts by time, and uses human readable units like "3GB" instead of 3096432764 bytes.

    There are also "long flags" that start with two dashes by convention. These would look like ls -l --time --human-readable which does the same thing as before, but is more readable but less compact. Long options don't combine the way short options do, so you need to separate them with spaces.

    Some flags need values. Like ls -l --sort size which is usually the same as ls -l --sort=size but confusingly not the same as ls -l --sort = size (note the spaces) which makes sense if you know how these things work, but for now you just need to accept.

    Commands also have "arguments", which are not flags. Sometimes also called "parameters". So for ls up until now we've been just listing the current folder over and over, but ls can list any folder, like ls Documents or ls Downloads, and that can be combined with flags, usually before the arguments, like ls -lth Downloads.

    Okay, so that's flags and arguments, but you may be wondering how do you know what flags are available and what they do? Two main options!

    The first is called a "man page", man being short for manual. Man itself is a command that opens essentially instructions for a command, in the terminal itself, and you can use the arrow keys to go up and down and "q" to quit. Try man ls to see what is it's got for you. You usually don't need to read it to to bottom and understand everything, you normally just go looking for something in particular. You can also use / in man to search for something, like /sort to look for the word sort. And then n and N go forward and back searching for the next and previous hit for that search. Also man -k search will search through the man pages looking for things that match, in this case, the term "search" and list you commands. You may want that for being like "there's gotta be a way to do this, but I don't know what the command is!". Also man pages are sorted into sections, and contains more than just commands. So you only care a out the things in section 1 for now.

    The second way to get help is that most commands, but not all, will have a -h or --help flag that tells them to list their own help as output instead of what they normally do. So ls --help lists the options it supports.

    Quoting! You may have noticed the shell is sensitive to spaces. So imagine you had a folder with a space in the name. If you ran ls My Folder, it would break that into two arguments, My and Folder, and would try to find you the contents of both of those two folders, which would fail because they don't exist! So to fix that we have two options: quoting and escaping. You can wrap it in quotes like ls "My Folder" to tell the shell "this is all one unit, don't break it up", or you can "escape" the space by putting a backslash before it, like ls My\ Folder to tell it "this next space isn't a splitting one, so please include it in the argument". The backslash won't be there by the time ls sees it, it's just telling the shell how to split the arguments.

    And then pipes! Pipes are the killer feature of the shell, as they allow you to take the output of one command and make it the input of the next. And some commands are built with this in mind. Like grep, which can search its input for things that match the pattern given as its argument. Like ls Downloads | grep pdf, which will take the list of files we're used to seeing ls output to us, and instead feed that to grep which will filter it down to just the pdfs. There's a lot you can do with these pipelines, because you could then take the output of grep and pipe it to something else to further process it, etc.

    So that's nowhere near everything, not even close, but it's hopefully enough to be able to wander around the big wide world and know what the heck people are talking about, and at least how to read what you're seeing.

    Quick note! The command rm means remove. It deletes files, and it doesn't use a trash can or anything, they're just gone. So be very careful with that one! And if some jackass out there tries to get you to run rm -rf / or some equivalent, DON'T DO IT. That stands for "remove" with the flags "recursive", which means descend into child folders and keep going, and "force" which means delete things even if you shouldn't. Then it has the argument of "/" which is the root of your filesystem, meaning a recursive operation on that will effect every file on your computer. So essentially this command deletes all files on your machine. Bad. 😅

    Here's some quick notes to give words to other things you might see and have trouble looking up!

    • ls $HOME: the thing after the $ is an "environment variable", which is some value your shell has stored and allows you to inject into the command. You can run the env command to see what variables there currently are
    • echo blah is a command that just outputs its args (argument is such a long word). It's useful for injecting words into a pipeline, or outputting environment variables, like echo $HOME
    • ls ~/Pictures: The "tilde" is just a shortcut for your home folder, so it's actually the same as ls "$HOME/Pictures", but it's so common to do things relative to your homedir, that it's a shortcut.
    • ls | less: the less command is great, because it takes its input and presents it in an interactive scrollable thing sometimes called a "pager". This is actually what man uses to present its pages, so the same arrow keys and q applies, but you can take any output and put it in less
    • ls `echo Documents` or ls $(echo Documents) are two equivalent ways of running a command in a subshell, and then having the result be itself and argument for the outer command. So echo spits out "Documents" as its output, but not to us. That output is then an argument to ls, which just runs like ls Documents. This is different than a pipe, but is a other way commands can be linked together to form larger units. The first one is called "back-ticks" by the way.
    • sudo whoami: sudo is a command that "does" something as "super user". S U DO. It's used to escalate your privileges. So maybe a normal user can't install packages, but sudo whatever can. The sudo command just asks your password and gets you access, the runs the rest of the command as-is. You'll see this a lot in instructions people give.

    I think that's enough to get off the ground? Good luck!

  • The world tells me I'm white, but if I had to name my skin I'd say it's pretty clearly pink 😛

  • I know it doesn't matter, and is fully a side issue to this post, but I hate that "blacklist" gets brought into this. It's never been used to be "a list of black people" or something; that wasn't the original meaning, and that's not the modern intention. It's just a word that sounds like maybe it could have been racist in origin, but it wasn't. And that one makes me grumpy just as an annoying word person.

    The real hot take was that we used the term black and white for people at all! If we could go back to the past and make it so we call it, like, Affo and Euro or something, whatever, it would have cleared up a lot of unrelated term confusion.

    I mean, if we could go back and change things there's maybe some other stuff that would be more important to change... but among the changes I would make are those!

  • I might even recommend naming it or tagging it with your name or something similarly identifiable, like 'local/whatever' so that 18-month-from-now-you will remember you built this one locally and to update it yourself from source, rather than being like "where the hell did this come from and why can't I find it now!? Did they remove the repo? Why!?"

  • I'll admit I don't use dockge, so it's possible I'm misunderstanding...

    But I think if you have a source folder on the box, separate from the one you keep your compose files in, you can run:

     
        
    docker build -t someName:someVersion .
    
      

    and that will build the image. Then in your normal docker compose folder you just specify the image as matching whatever you built it as, and docker won't pull images it already has, so it'll just use the one you already built.

    So yeah this source folder is different from the compose folder, but you don't have source folders for all the stuff you didn't build, so this shouldn't really be that different. And the compose part doesn't care where the images came from once you have them.

  • I think the classic answer would be Mailman. But I hope someone else has a better answer 😛

  • The "where I live" part is key. Because very likely this person is in SF, where they cannot buy a luxurious house cash with that money, and where cost of living eats surprisingly far into that stupid high number.

    But notably, this is why all the normal people who don't make a half million dollars a year can't live in SF! 😅

  • I always assumed the name was more of a reference to audio Master Recordings.

    It's the original tapes or whatever that all copies are derived from. It's also where the term "remastering" comes from, as in "we went in and rebuilt a new master from the individual tracks, and this is the new master now", versus just making another copy of the master for a re-release.

  • Yeah, typically per year. And usually it's called Total Compensation because some of it is in salary, some in stock, some in stock options, sometimes even some kinds of perks, etc.

    So all of that gets balled up into Total Compensation, which is different than annual salary

  • I can least kinda appreciate this guy's approach. If we assume that AI is a magic bullet, then it's not crazy to assume we, the existing programmers, would resist it just to save our own jobs. Or we'd complain because it doesn't do things our way, but we're the old way and this is the new way. So maybe we're just being whiny and can be ignored.

    So he tested it to see for himself, and what he found was that he agreed with us, that it's not worth it.

    Ignoring experts is annoying, but doing some of your own science and getting first-hand experience isn't always a bad idea.

  • Sure but... I'm pretty sure the word and title does come from him specifically

  • At least part of it is self esteem and trust. That's not to say that no poly people have self esteem issues, but if I am worried that my partner being with another person means I'm not good enough for them, then I'm going to feel resentful, insecure, jealous, or some combination of those. That's not a recipe for success. But if I can feel like their time without me isn't a reflection on their time with me, then there's not as many feelings in the way.

    But I think overall for me the philosophy is a rejection of Hallmark and Disney notions of love. I don't believe any one person could ever be my one and only everything, and in fact it seems sick to put that much pressure on either of us. Whereas spreading the load around and having different people with different strengths seems much healthier.

    So maybe a bit more "community" oriented, rather than individualistic or insular "you and I against the world"?

    Or maybe I'm putting too much into this 😛

  • Copy some of it, or importantly reject some of it