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/)F
Posts
2
Comments
1234
Joined
3 yr. ago

  • TL;DR: Intellisense works best if you write bottom-up (true) and it means you have to remember less stuff (also true), therefore it makes you write worse code (very doubtful).

    So I don’t think IntelliSense is helping us become better programmers. The real objective is for us to become faster programmers, which also means that it’s cheapening our labor.

    This doesn't make any sense though.

    1. People don't have unlimited time. Writing high quality code takes time and wasting it remembering or typing stuff that Intellisense can take care of means I have less time for refactoring etc. Also one of the really useful things about Intellisense is that it enables better refactoring tools!
    2. It doesn't make you dumber to use tool assistance. It just means you get less practice in doing the thing that the tool helps you with. Does that matter? Of course not! Does it matter that I can't remember how to do long division because I always use a calculator? Absolutely not. Similarly it doesn't matter that I can't remember off the top of my head which languages use starts_with, HasPrefix, startswith, etc. doesn't matter at all if Intellisense can easily tell me.
    3. You don't have to use the Intellisense suggestions. Just press escape. It's very easy.
    4. It's very well known that making something easier to do increases demand for it.
  • I don't think there were any standards for this sort of thing when Flatpak and Snaps first came out, and they arrived at the same time and have pretty big differences. So this doesn't apply.

  • Yeah I agree.

  • In my experience taking an inefficient format and copping out by saying "we can just compress it" is always rubbish. Compression tends to be slow, rules out sparse reads, is awkward to deal with remotely, and you generally always end up with the inefficient decompressed data in the end anyway, whether in temporarily decompressed files or in memory.

    I worked in a company where they went against my recommendation not to use JSON for a memory profiler output. We ended up with 10 GB JSON files, even compressed they were super annoying.

    We switched to SQLite in the end which was far superior.

  • Hmm I think just using SQLite or DuckDB with normalised data would probably get you 99% of the way there...

  • Well that's clearly worse... Why even make this comment?

  • If I'm understanding you correctly, you can create a branch to mark where you are git branch tmp then abort the rebase. Switch to tmp get the history like you wanted, then switch back. Finally do a git rebase -i again, but immediately git reset --hard tmp. Now you have the resolved commits you want, and can delete any you don't want to do again with git --edit-todo.

    Maybe.

  • I like how they have to explain what interlacing is but not DPI. I'm old.

  • That's way more than 30 lines or code and also their "We didn’t add anything." claim seems to be nonsense.

  • You mean like forcing people to use email to submit pull requests to your self-hosted git repos?

    I think he meant "you" as in there person running the project, not a contributor.

    But... it's still stupid because GitHub doesn't force a workflow on you. Unless he means "have an issue tracker" and "use CI" are a workflow. You don't even need to use merge requests if you don't want (but I have no idea why anyone would give up something that works so well).

    The majority of the post comes across as someone who just doesn’t like the forge sites and aside from the trust aspect, then spent a bunch of effort trying to create associations and limitations between things that don’t exist.

    Definitely.

  • Config should be pretty flat.

    Why? I don't see any reason for that.

    TOML rocks precisely because it nudges you into making simpler configs.

    This is just "you're holding it wrong".

    In most cases you don’t, and when you do, it’s possible and not unreasonable.

    Really. Here's the first Gitlab CI example I could find:

     
        
    lintDebug:
      interruptible: true
      stage: build
      script:
        - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
      artifacts:
        paths:
          - app/lint/reports/lint-results-debug.html
        expose_as: "lint-report"
        when: always
    
      

    Let's see the TOML:

     
        
    [lintDebug]
    interruptible = true
    stage = "build"
    script = [
      "./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint"
    ]
    
      [lintDebug.artifacts]
      paths = [ "app/lint/reports/lint-results-debug.html" ]
      expose_as = "lint-report"
      when = "always"
    
    
      

    Gross. The tool I used to convert even added extra indentation because otherwise it is unclear.

    IMO JSON5 is the best:

     
        
    {
      lintDebug: {
        interruptible: true,
        stage: 'build',
        script: [
          './gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint',
        ],
        artifacts: {
          paths: [
            'app/lint/reports/lint-results-debug.html',
          ],
          expose_as: 'lint-report',
          when: 'always',
        },
      },
    }
    
      

    This is much clearer than TOML and less ambiguous than YAML. It could do without the outer {}, but overall it's still better.

  • Right but JSONC does support them. We just want support for JSONC as well as JSON.

  • TOML is a terrible format. It is anything but obvious, especially when you have more than one level of nesting.

    It is pretty annoying that there isn't an obvious format that Serde supports to use though:

    • YAML is an awful format (worse than TOML in many ways). serde-yaml is abandoned anyway.
    • serde_json is great but dtonlay refuses to support comments/trailing commas
    • serde_json5 is an option but JSON5 doesn't have good IDE support.

    I would probably go with either RON or one of the forks of serde_json that adds support for comments. I think there's serde_jsonc and serde_jsonc2 maybe.

  • The junior devs I've worked with don't just send me raw ChatGPT output.

  • It's not hard and fast but:

    • API is the actual interface for the functions, not the implementation. It's possible for one API to be implemented by more than one library.
    • Library is a bunch of code provided together. It might have more specific meaning depending on the language.
    • A package is something you can install. It's pretty much synonymous to library since most packages contain one library.
    • A framework is just a library that dictates a lot about how your app works.

    Apart from API they don't really have strict definitions so they'll be used interchangeably and differently depending on the language.

  • I still remember when the first (and maybe only?) time I've had a GPU driver crash in Windows. It just restarted the driver and had a little popup saying what had happened. So far ahead of Linux; I think that was like 10 years ago.

    Would be nice if Linux could catch up.

  • Ah yeah I don't think that existed last time I used it.

  • There must be dozens of malicious extensions. I'm honestly surprised we haven't seen it more. Chrome extensions get sold to shady people all the time; I would have thought VSCode extensions are even higher value targets.

  • Yeah that's a great option too. Not free though (although the pricing is very reasonable IMO). I think if you're this much of a beginner it doesn't make sense to pay for Pycharm.

  • Yeah others have pointer out the error, but I want to really recommend using VSCode with the Python extension and static types. It will make finding these errors super easy because it adds a red underline exactly where the problem is.

    Static types means:

     
        
    def splitter(expression: str) -> tuple[str, str, str]:
    ...
    def calculate(x: str, y: str, z: str) -> str: