• 0 Posts
  • 18 Comments
Joined 3 years ago
cake
Cake day: July 1st, 2023

help-circle
  • He has made a large number of questionable comments, including the argument that the solution to human trafficking includes legalizing child prostitution:

    27 April 2015 (Human Trafficking Act)

    The Senate’s Victims of Human Trafficking Act is dangerous in several ways.

    When it talks about having the customs agency do more to enforce “intellectual property”, I am sure that refers to something bad. Whenever that term is used, something nasty is afoot.

    The way to protect children from being forced into prostitution is to legalize prostitution by licensed prostitutes. Customers could be required to check the prostitute’s license. If the customer fails to check, that concrete omission would be legitimate grounds for punishment.

    Minors should not be denied prostitution licenses in a blanket way, but the state should ask them why they want one and probe their situation, then offer help so they can avoid prostitution.

    https://www.stallman.org/archives/2015-mar-jun.html#27_April_2015_(Human_Traffickting_Act)



  • Well, maybe you’d better wait 10min instead of one, to make sure the led lightbulb heats enough, but still…

    I tested this with a 5W IKEA LED light-bulb, since I was just doom scrolling, anyway:

    • After 1 minute of being on, the bulb was still room temperature.
    • After 10 minutes of being on, the bulb was lukewarm.
    • After 10 minutes of being off, the bulb was room temperature, though the fitting maybe felt slightly warmer. That latter will probably depend on your installation, and how well it is able to disperse the heat.

    This means that the solution either breaks down entirely, or is unreliable, since you are not (reliably) able to tell the first two buttons apart


  • Loop labels are rare, but they lead to much simpler/clearer code when you need them. Consider how you would implement this kind of loop in a language without loop variables:

    'outer: while (...) {
        'inner: while (...) {
            if (...) {
                // this breaks out of the outer loop, not just the inner loop
                break 'outer;
            }
        }
    
        // some code here
    }
    

    In C/C++ you’d need to do something like

    bool condition = false;
    while (...) {
        while (...) {
            if (...) {
                condition = true;
                break;
            }
        }
        if (condition) {
            break;
        }
    
        // some code here
    }
    

    Personally, I wouldn’t call it ugly, either, but that’s mostly a matter of taste




  • I believe that it is useful in a few places. cppreference.com mentions templates as one case:

    Trailing return type, useful if the return type depends on argument names, such as template<class T, class U> auto add(T t, U u) -> decltype(t + u); or is complicated, such as in auto fpif(int)->int(*)(int)

    The syntax also matches that of lambdas, though I’m not sure that adding another way of specifying regular functions actually makes the language more consistent, since most code still uses the old style.

    Additionally, the scope of the return type matches the function meaning that you can do

    auto my_class::my_function() -> iterator { /* code */ }
    

    instead of

    my_class::iterator my_class::my_function() { /* code */ }
    

    which is kinda nice


  • With Rust you safe 1 char, and gain needing to skip a whole line to see what type something is.

    Honestly, the Rust way of doing things feels much more natural to me.

    You can read it as

    1. Define a function,
    2. with the name getoffmylawn,
    3. that takes a Lawn argument named lawn,
    4. and returns a bool

    Whereas the C function is read as

    1. Do something with a bool? Could be a variable, could be a function, could be a forward declaration of a function,
    2. whatever it is, it has the name getoffmylawn,
    3. there’s a (, so all options are still on the table,
    4. ok, that’ a function, since it takes a Lawn argument named lawn, that returns a bool







  • A single underscore is just a naming convention, but double underscores triggers automatic name-mangling of the variable in question:

    $ cat test.py
    class foo:
            def __init__(self, x):
                    self.__x = x
    
    f = foo(1)
    f.__x
    $ python3 test.py
    Traceback (most recent call last):
      File "/mnt/d/test.py", line 6, in <module>
        f.__x
    AttributeError: 'foo' object has no attribute '__x'
    

    However, much like private/protected variables in java, this is pretty trivial to circumvent if you want.

    But I don’t believe that you can argue that access modifiers are required for OO not to be shoehorned into a language, not when influential OO languages like Smalltalk didn’t have this feature either. Java just happens to be closer to C++, where public/private/protected is much more rigidly enforced than either Java or Python



  • Unix shell scripts are one of the few holdouts.

    I don’t know if this applies to other shells, but bash will not only execute your script line-by-line, it will also read it line-by-line. Which means that you can modify the behavior of a running script by editing lines that have not yet been executed*. It’s absolutely bonkers, and I’m sure that it has caused more than one system failure, during upgrades.

    * For example, if you run the following script

    echo "hello"
    sleep 5
    echo "goodbye"
    

    and then edit the third line before the 5 second sleep has elapsed, then the modified line will be executed.