slambast's recent activity

  1. Comment on Nobody warned electric vehicle owners how quickly they would burn through tires in ~transport

    slambast
    Link Parent
    I do :) my car (3,200lb, 250hp Focus) came with Goodyear Eagle F1 Asymmetric summer tires, which were worn out after about 20,000 miles. I replaced them with Yokohama Advan Sport A/S+ all-season...

    I do :) my car (3,200lb, 250hp Focus) came with Goodyear Eagle F1 Asymmetric summer tires, which were worn out after about 20,000 miles. I replaced them with Yokohama Advan Sport A/S+ all-season tires which have a 55,000 mile treadwear warranty. I've been on those for ~25,000 miles and they look basically new. They have noticeably less grip in warm and dry conditions, but are better in the wet/cold, and obviously last much longer. My driving trends towards spirited as well. 6,000 miles is ridiculous - that's motorcycle territory.

    1 vote
  2. Comment on I have an issue with the 3 Body Problem in ~tv

    slambast
    Link Parent
    This is explained in the book: one message from earth is not enough to pinpoint its location, but two messages would be. It doesn't matter if other Trisolarians/San-Ti hear it. The message in the...

    This is explained in the book: one message from earth is not enough to pinpoint its location, but two messages would be. It doesn't matter if other Trisolarians/San-Ti hear it.

    The message in the book was: This world has received your message.

    I am a pacifist in this world. It is the luck of your civilization that I am the first to receive your message. I am warning you: Do not answer! Do not answer!! Do not answer!!!

    There are tens of millions of stars in your direction. As long as you do not answer, this world will not be able to ascertain the source of your transmission.

    But if you do answer, the source will be located right away. Your planet will be invaded. Your world will be conquered!

    Do not answer! Do not answer!! Do not answer!!!

    2 votes
  3. Comment on The end of the MrBeast era in ~tech

    slambast
    Link Parent
    I just watched one linked in the article for the first time, and it definitely validated my feelings about that genre of content ("pop-youtube"?). It felt like I was being smacked in the face with...

    I just watched one linked in the article for the first time, and it definitely validated my feelings about that genre of content ("pop-youtube"?). It felt like I was being smacked in the face with an entertainment bat.

    29 votes
  4. Comment on The FBI’s new tactic: Catching American suspects with push alerts in ~tech

    slambast
    (edited )
    Link Parent
    iOS is the one I have familiarity with, so I can answer that at least: when you give an app permission to send push notifications, that app is then allowed to get a push token for that user....

    iOS is the one I have familiarity with, so I can answer that at least: when you give an app permission to send push notifications, that app is then allowed to get a push token for that user. Generally, the app then sends that to a server somewhere that handles notifications and talks to APNs. So AFAIK, if you don't give push notification permissions for an app, this de-anonymization won't work.

    (Honestly, it's news to me that all apps get the same push token—I thought it was unique per-app)

    Edit: At least for iOS, push tokens are unique per-app. See here:

    This address takes the form of a device token unique to both the device and your app.

    So this seems slightly more involved than just looking for string matches.

    Edit 2: The existence of provisional authorization for trial notifications seems like this attack might not be mitigated by simply not allowing notifications. Unsure how those work.

    5 votes
  5. Comment on Amazon Prime Video will start showing ads on January 29th in ~tech

    slambast
    Link Parent
    I had a month-to-month prime subscription that I canceled today because of this. They allow either not renewing next period, or canceling immediately and getting a refund. I'm in the US, but I...

    I had a month-to-month prime subscription that I canceled today because of this. They allow either not renewing next period, or canceling immediately and getting a refund. I'm in the US, but I would guess that you'll be able to get a refund too.

    21 votes
  6. Comment on Meeting bloat has taken over corporate America. Can it be stopped? in ~life

    slambast
    Link Parent
    Just me; I would do the daily posts of updates, and I also have unscheduled one-on-ones with the founder where I would give more detailed updates 1-2x per week. I still have more video chat hours...

    Just me; I would do the daily posts of updates, and I also have unscheduled one-on-ones with the founder where I would give more detailed updates 1-2x per week. I still have more video chat hours a week than I would like, but my team's meeting time is way lower, so I'm calling that a win.

    1 vote
  7. Comment on Meeting bloat has taken over corporate America. Can it be stopped? in ~life

    slambast
    Link
    I've worked at a small startup (<10 people, all remote) for a couple years now, and we've struggled with too much time spent in meetings as well. The founder is clearly the only one who's meeting...

    I've worked at a small startup (<10 people, all remote) for a couple years now, and we've struggled with too much time spent in meetings as well. The founder is clearly the only one who's meeting oriented, and it's astonished me how much constant push-back it takes to keep things reasonable.

    When I started, it was normal to spend 1-2 hours every day in a meeting with the whole team. After I became lead, I managed to get it down to 45 minutes once a week + 10 minute sync every day, which I'm quite happy about! My biggest solve there was noticing this:

    1. The founder being present tends to elongate meetings.
    2. The founder liked to see progress happening, and got nervous when they didn't.
    3. A lot of the technical work (fixing a minor bug, refactoring, laying the foundation for some new feature) takes up a lot of time, but is almost invisible to someone casually checking out the product; i.e. progress often appears slow, even when a lot of necessary work is getting done.

    My solution was: for daily meetings, don't include the founder - keep them technical discussions only. This keeps them short. Also, I posted a daily update in Slack, saying what each one of us had done and was going to do. This worked REALLY well—we could often finish meetings in 5 minutes, and only went over when there was actually something we needed to talk about; our boss got to see what we were working on day-by-day, but didn't have the need (or really the opportunity) to micro-manage any of it. The downside was that large changes are often large for very complicated reasons, and it was occasionally difficult to explain why tasks like "add first push notification" was the focus for days in a row. More detail helps here, even if it trends jargon-y.

    So, if you figure out (1) who is pushing the most meetings, and (2) what they're gaining from it, there may be another way to solve that need and save a LOT of time. Unfortunately, I don't think this would work for systemic meeting bloat, but who knows, it might alleviate it somewhat!

    11 votes
  8. Comment on Ads don’t work that way (2014) in ~life

    slambast
    Link
    The distinction between inception (creating associations between a product and positive emotions) and cultural imprinting seems minor to me. As the author notes, the beach corona ad does work by...

    The distinction between inception (creating associations between a product and positive emotions) and cultural imprinting seems minor to me. As the author notes, the beach corona ad does work by inception, at least partially. The idea that cultural imprinting is inception + common knowledge is definitely an interesting framing, but I would frame it differently—it's all the inception model, and part of that inception is a brand identity that you will assume everyone else has picked up on as well.

    Brand identity seems to be a common goal in advertising. Corona is a beach relaxing beer, Nike is a top-performing athlete shoe. I do think there is a distinction between emotional inception and brand identity, but the distinction seems like splitting hairs, because regardless, the ads work by forming associations between products and positive feelings (except those positive feelings include an identity). IMO, this is not functionally any different from the common story about how ads work.

    2 votes
  9. Comment on Black women with guitars? in ~music

    slambast
    Link
    Some of my favorites that come to mind (hope banjo is an acceptable substitute!): Amythyst Kiah (Fancy Drones) Rhiannon Giddens (Wayfaring Stranger) Kaia Kater (Saint Elizabeth)

    Some of my favorites that come to mind (hope banjo is an acceptable substitute!):

    6 votes
  10. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link Parent
    I was having exactly the same problem! Glad it's not just me. Let me know what you do think if you try it out (and use with caution since it's a newly made tool that has the capability to delete...

    I was having exactly the same problem! Glad it's not just me. Let me know what you do think if you try it out (and use with caution since it's a newly made tool that has the capability to delete files)!

  11. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link Parent
    I bought an ESP32+small e-ink display kit with similar goals, but I never got much further than printing bad-looking text to the screen. It looks like the Inkplate's software situation is much...

    I bought an ESP32+small e-ink display kit with similar goals, but I never got much further than printing bad-looking text to the screen. It looks like the Inkplate's software situation is much better - have you found that part easy to use?

    1 vote
  12. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link
    I've been working on rescaffold, which is a tool to unpack reusable parts of codebases (scaffolds) into multiple projects as needed. It's roughly similar to yo/create-react-app and the like, but...

    I've been working on rescaffold, which is a tool to unpack reusable parts of codebases (scaffolds) into multiple projects as needed. It's roughly similar to yo/create-react-app and the like, but it can update a codebase to use updated versions of the scaffolds in it!

    It's functional enough to actually be used, even though it can't git pull yet, and doesn't have sophisticated conflict management. But it can unpack a scaffold into an existing project, with template replacement for configurable things like project names, and it can also update existing files (and won't overwrite files you've changed yourself). It will also remove files that have been removed in the updated version scaffold they came from.

    For example, you can make a small scaffold that adds source for an executable to a Go project. It might just contain one file: pkgs/go/cmd/<command name>/main.go. Adding this scaffold will ask you what the project name should be. If you say "foo", it'll create pkgs/go/cmd/foo/main.go, creating any directories that don't exist yet, and leaving everything else alone. Then, if the scaffold source is updated, you can update the file with the new contents, but only if you haven't modified the file yourself. You can use many small scaffolds this way, or few huge ones, and it should just all work together!

    3 votes
  13. Comment on What programming/technical projects have you been working on? in ~comp

  14. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link Parent
    Good to know, thanks! I started by writing the readme as if it existed, to get a feel for how I want it to work, so that's below if you want to check it out and see if it would work for you....

    Good to know, thanks! I started by writing the readme as if it existed, to get a feel for how I want it to work, so that's below if you want to check it out and see if it would work for you.

    README of lies and false promises (none of this exists)

    rescaffold

    Rescaffold is a project scaffolding generator and migration tool. Unlike other tools which can only create a template once, rescaffold can update scaffolding in-place without mangling any of your code.

    Usage

    From the root directory of a new or existing project, run

    rescaffold <git-template-url>

    This will clone the git repository and interactively run first template setup. Rescaffold will perform any template generation tasks (e.g. name directories according to your project name), and unpack new files into your project. If there are any conflicting files, rescaffold will gracefully back out and return your project to its original state.

    Rescaffold automatically tracks the template source and version information of the scaffold(s) you use, so if you want to use the newest version of a scaffold, you can run:

    rescaffold -upgrade

    or

    rescaffold -upgrade <git-template-url> to upgrade a specific scaffold.

    You can add as many scaffolds as you want, simply by repeating the initial command. If you want to remove a scaffold (which only removes files created by rescaffold and are since untouched), you can run:

    rescaffold -remove <git-template-url>

    Commands can specify a full URL to operate on a specific scaffold, but scaffolds can also be specified by the project slug. I.e. git@github.com:user-name/my-scaffold.git can be specified, or you can simply write "my-scaffold". If there are multiple scaffolds named "my-scaffold", rescaffold will notify you with an error.

    Scaffolds can be:

    • URLs of git repositories
    • Relative or absolute paths to locally stored directories

    This means you can develop scaffolds without going through a git remote, and also that you can clone a repo yourself if your setup requires more than an unauthenticated git clone.

    .rescaffold.toml

    .rescaffold.toml is a file that rescaffold will place in the working directory when you first run it. This toml file tracks which scaffolds are in place in your project, their versions, their sources, and the list of files that they have placed, along with their checksums. This file is used by rescaffold to avoid overwriting any files or directories that were not created by rescaffold, so it should be committed along with the rest of your code.

    If .rescaffold.toml gets deleted, rescaffold will need to be run interactively to resolve any conflicts that arise, and any files that need to be updated will have to be checked manually.

    Creating Scaffolds

    Scaffolds are directories with a .rescaffold-manifest.toml file at the root. They can be stored in a VCS, like git, or live as a directory on your local filesystem. The manifest file looks like:

    rescaffold_version = "0"
    
    [meta]
    title = "Example Scaffold"
    author = "Firstname Lastname <me@example.com>"
    
    [config]
    open_delim = "_"
    close_delim = "_"
    modifier_delim = "|"
    
    [vars]
    [vars.project_name]
    type = "string"
    description = "A short, descriptive name for your project"
    
    [vars.postgres_version]
    type = "enum"
    enum_values = ["12", "13", "14", "15"]
    default = "15"
    description = "Postgres version to use in tools"
    

    Directory names, file names, and file contents can all use values from vars as needed. For example, your directory structure could be:

    _project_name_
    ├── _project_name__config.go
    └── _project_name_.go
    

    And _project_name_.go might contain

    package _project_name_
    
    func PrintWelcome() {
      fmt.Println("Welcome to my project, _project_name_!")
    }
    

    If your project name was "foobar", this would be generated as the file foobar.go, containing

    package foobar
    
    func PrintWelcome() {
      fmt.Println("Welcome to my project, foobar!")
    }
    

    Delimiters

    Rescaffold uses delimiters for template replacement by searching for instances of open_delim + var_name + close_delim, for all variable names, and replacing those substrings with the actual value the var is set to. Also, occurrences of open_delim + "\" + var_name + close_delim will be replaced by the same string with the backslash removed, to allow predictable escaping.

    You can edit the delimiters used for template replacement to whatever makes life easier for your scaffold. For example, if a scaffold contains a lot of HTML, using <> delimiters for replacement might cause problems. In that case, you might prefer delimiters of ${ and } instead. Also, you can always follow opening delimiters with a backslash to escape replacement, e.g. <\title> will be replaced by the literal string <title>.

    Delimiters, both opening and closing, are also optional. For example, you could set an opening delimiter of MY_SCAFFOLD_, and an empty closing delimiter. This means that template replacement would replace all instances of MY_SCAFFOLD_title with the string value of the title var. Delimiters won't be exposed to users of your scaffold—they will only interact with the end result.

    Modifiers

    Replacement substrings can also contain modifiers, such as _name|titleCase_. These modifiers can change the var value before performing replacement. The modifiers that are available are:

    • titleCase: "some string" -> "Some String"
    • lowerCase: "Foo" -> "foo"
    • upperCase: "Foo" -> "FOO"
    • camelCase: "foo_bar" -> "fooBar"
    • pascalCase: "foo_bar" -> "FooBar"
    • snakeCase: "fooBar" -> "foo_bar"
    1 vote
  15. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link Parent
    Thanks, I'll check it out! I was thinking that anyone could make their own templates to use with it, and mix and match those templates in projects as needed. For example, I often wind up in a...

    Thanks, I'll check it out! I was thinking that anyone could make their own templates to use with it, and mix and match those templates in projects as needed. For example, I often wind up in a situation where I have three protobuf service implementations with dockerized tools for things like protoc, but all three have slight differences in the edge cases they handle, versioning, etc. I would like to make a template for "protobuf service" where I can maintain that template instead, and then automatically patch the projects that are using the same template. Repeat for postgresql with local test database and connection methods, sqlc builder, etc, and those gains could really stack.

  16. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link
    It's sort of a meta-project, but I'm running into an issue with personal projects where I have a stack I love—Go, protobuf/Twirp, ts-proto, sqlc, postgres, Svelte, and esbuild—but a project...

    It's sort of a meta-project, but I'm running into an issue with personal projects where I have a stack I love—Go, protobuf/Twirp, ts-proto, sqlc, postgres, Svelte, and esbuild—but a project skeleton (complete with mage commands and dockerized/version-pinned tools) is heavy.

    There are plenty of tools, especially in the Node space, that can generate a project template for you. However, I haven't found one that can update your project template after you've started adding code to it. So, what I'm in the early stages of is a tool that can do the basic template gen stuff, but also update it (gently, without clobbering your code). Sort of an in-place migration tool for stack templates. I'm thinking a lot of this could be managed by dotfiles that can be tracked by git and used to store information about which files are template-generated along with checksums, so that those can be replaced when updated, and the tool can more or less guarantee that code you yourself have added won't be removed.

    I'm really curious if anyone would be interested in this, or if there are existing tools I'm unaware of, since I've barely started this project!

    5 votes
  17. Comment on Time is not a synchronization primitive in ~comp

    slambast
    Link
    As soon as I saw the first Go snipped I thought "oh, this needs a wait group". Then I saw the other snippet where net.Listen was simply lifted outside of the goroutine's scope... I'm not sure I...

    As soon as I saw the first Go snipped I thought "oh, this needs a wait group". Then I saw the other snippet where net.Listen was simply lifted outside of the goroutine's scope... I'm not sure I like what this says about me.

    At work, our codebase is pretty good about avoiding time synchronization, but there's one situation where it keeps popping up, which is: there's another process running that needs to finish, and will take some unspecified amount of time, that we don't have visibility into. For example:

    • An integration test sends several messages through a mocked pubsub interface, then checks that they were sent. But pubsub is running in a different process, so we just wait a bit before checking.
    • We run docker commands to (a) start the local container with postgres, and (b) start another container that runs migrations on the newly created container. Here, the migration runner needs to wait until the postgres container is up and accepting connections, but we don't have an interface to that. So we essentially poll once time.Sleep(1 * time.Second).

    I don't have good solutions for these cases, but what they seem to have in common is that they require bidirectional communication. We need the "other" service to tell us when something is ready or complete, so we're basically stuck polling, and polling is time synchronization at its core.

    1 vote
  18. Comment on Small tech companies are staying remote to attract workers, while Big Tech goes back to the office in ~comp

    slambast
    Link Parent
    My experience has been similar to u/T-o-a-s-t. I used to have a cheap-ish standing desk from Wayfair, which kind of sucked—it went up and down just fine, but was just a bit wobbly at all heights....

    My experience has been similar to u/T-o-a-s-t. I used to have a cheap-ish standing desk from Wayfair, which kind of sucked—it went up and down just fine, but was just a bit wobbly at all heights. After moving last year, I ditched it and switched to a 4-leg standing desk from Uplift, who will bundle a LifeSpan TR1000 with a discount, so I did that.

    I like walking and working with this setup; I can write code just as well while walking (apparently) and it's nice to be able to get hours of light exercise in without cutting into my non-work time. The drawbacks are:

    • You have to move the treadmill under the desk, and plug it in and everything, every time. It only takes a couple of minutes, but it's a big enough interruption that I often don't get around to it during the work day.
    • When I do have meetings, they're on video, and it feels super weird to be on a video call while walking at your screen.

    Overall, walking and working is pretty great, but it wasn't cheap to arrive at a setup that didn't feel rickety.

    1 vote
  19. Comment on What is some noteworthy music that is quarantine/COVID-specific? in ~music

  20. Comment on What programming/technical projects have you been working on? in ~comp

    slambast
    Link Parent
    I can't disagree with you there, I'm sure it would rate terribly on how personal/warm/welcoming it feels :) but the fact is, I really just made this for myself, and I'm used to the whole dark...

    I can't disagree with you there, I'm sure it would rate terribly on how personal/warm/welcoming it feels :) but the fact is, I really just made this for myself, and I'm used to the whole dark mode/high contrast life. The material design part is because I was already familiar with materialize-css; I don't love it either, but it was the easiest and fastest way to get something that looked better than plain text.

    I appreciate the feedback though, I've considered moving away from materialize and this might just be the push I need. Thanks!

    2 votes