• 18 Posts
  • 117 Comments
Joined 2 years ago
cake
Cake day: June 10th, 2023

help-circle

  • Not what you’re looking for, but I think Shinsekai Yori and Made in Abyss have pretty impactful psychological horror elements. I haven’t gotten around to watching Higuarashi, but it’s well known as a (apparently psychological) horror anime.

    I do agree that the medium limits the visceral impact that visual elements have. Despite that, I was still fairly grossed out by some select scenes in Orb: On the Movements of the Earth.

    Also, if you want something like a horror movie, you probably want a movie… The same suspense can’t be sustained over separate 20 minute chunks.

    Movie or not, I don’t think there are many anime that are even attempting to fulfill your horror desires.


  • We get a new view of Gluttony’s ability from Beatrice’s perspective, like being disassembled and reassembled/rewound.

    The announcement voice announcing that everything was OK was quite strange, are we supposed to accept it plainly? None of the characters seem to find it strange. They make the announcement immediately, and the announcement systems looks to be in very bad shape.

    The show has hinted hard as to what’s up with Al with a few of these recent episodes. I wonder if that’s going somewhere, or if it’s going to be a slow burn.

    I’m quite surprised that they want to keep Wrath alive, I guess they’re that desperate to get any edge they can against the Witch Cult.

    And that ending scene with the happy-carefree music, lol. Poor dude.


  • why didn’t Natsuko draw Mighty Greatsword Luke to begin with?

    Natsuko drew the Luke she’s drawn all her life. Throughout the show she’s been drawing existing animations. In the dark she comes to accept that drawing that Luke isn’t enough. In the end, with the emotional support of QJ, she realizes that she should draw her own Luke, the one she’s come to know and fall in love with. It’s her coming to terms with her feelings towards Luke, which is emphasized by what she says after she draws him. Or so I say. A line from Natsuko about what sparked the change would’ve been better than listening to QJ moan. Really anything probably would’ve been better than listening to QJ moan. “I know, I should’ve drawn him shirtless!”, whatever, anything else, please.

    I was hoping that Natsuko would take more agency over a new ending for Tale Of Perishing after this point.

    I was definitely hoping to see Natsuko draw an entire new in-canon ending for Horobiku Monogatari. Do a complete revision! That’s literally the title of the show!


  • Title drop! Zenshuu is easily my favorite anime of the Winter 2025 season. This is partially because the Winter 2025 season on a whole may have been weak and I’ve delayed watching a few shows that I know I will like, but Zenshuu itself is a delightful experience.

    very end spoilers

    Justice! 😭

    A bunch of references in the posters in GENJITSU for what Natsuko drew:



  • I’m not familiar with Radeon PowerPlay, so I don’t know if there is a proper way to solve this, but you should be able to make a systemd system service to run the upp command on boot.

    To do so, I think you can use the following:

    [Unit]
    Description=Run my_user_script
    After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
    
    
    [Service]
    Type=oneshot
    ExecStart=upp -p /sys/class/drm/card1/device/pp_table set --write smc_pptable/SocketPowerLimitAc/0=312 smc_pptable/SocketPowerLimitDc/0=293 smc_pptable/TdcLimit/0=300 smc_pptable/FreqTableSocclk/1=1350 smc_pptable/FreqTableFclk/1=2000 smc_pptable/FclkBoostFreq=2000
    
    [Install]
    WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
    

    To configure this service:

    • Save the text (using sudo/root) to a new .service file in /etc/systemd/service. (e.g. /etc/systemd/system/my_update_pp.service)
    • run sudo systemctl daemon-reload to tell systemd to re-read the service files
    • run sudo systemctl restart my_update_pp.service to manually run the service
    • run sudo systemctl enable my_update_pp.service to tell systemd to run your service automatically on boot/wake (WantedBy tells systemd when it should include the unit/service, After, Wants, Requires, and Before help systemd decide the order to run all the units/services)

    Notes

    • Usually for simple systemd services, you can omit After and set WantedBy to just WantedBy=multi-user.target, but if you also need to run upp after sleep or hibernate, then you probably need something more complex. I copied the After and WantedBy from a stackexchange answer, but I haven’t tried using those targets before. You might have to add multi-user.target to the WantedBy list.
    • I don’t actually know if you need to run upp after sleep/hibernate. Running on boot might be sufficient.
    • I think you can skip the chmod if you run upp as sudo/root. Systemd system services run as root by default.
    • I don’t know how safe it is to mess with PowerPlay during boot. My gut says it’s probably fine, but it also seems like something that could cause graphics to not work. Tread carefully.

    References:


  • Use triple backticks for blocks of code-type stuff

    ```

    like so

    ```

    example, wrapped in a spoiler tag.
    upp -p /sys/class/drm/card1/device/pp_table dump
    header:
      structuresize: 2470
      format_revision: 15
      content_revision: 0
    table_revision: 2
    table_size: 802
    golden_pp_id: 2466
    golden_revision: 16307
    format_id: 128
    platform_caps: 24
    thermal_controller_type: 28
    small_power_limit1: 0
    small_power_limit2: 0
    boost_power_limit: 0
    software_shutdown_temp: 118
    reserve:
      reserve 0: 0
      reserve 1: 0
      reserve 2: 0
      reserve 3: 0
      reserve 4: 0
      reserve 5: 0
      reserve 6: 1
      reserve 7: 0
    power_saving_clock:
      revision: 1
      reserve:
    ... and so on ...
    



  • I was a bit unenthusiastic going into this episode, thinking that it might be some drawn-out flashback. While the flashbacks were long, I found the whole episode to be a fun trek through Natsuko’s inadvertent romcom maneater adolescence.

    Each flashback had little surprises, while also emphasizing how Natsuko is 200% dedicated to her craft.

    Fukushima’s (the animation studio’s president) perspective was also interesting. Drawing a parallel between Natsuko and the director of A Tale of Perishing (who, unlike the bird, is smiling in Fukushima’s recollection), and challenging Natsuko to surpass her current limitations.



  • This is called localization.

    Information or brevity will always be lost in translation (and communication in general), so the translator needs to pick what information to convey and how to convey it. Sometimes it can be difficult to find a satisfactory localized translation, like translating a pun. Or if the translation has been localizing the Japanese name-honorifics system as whatever the characters in an English speaking country would call each other, but then there is a long dialogue in the show discussing how they are addressing each other; that dialogue can throw a wrench in the translation.

    For Love is War, the source joke word was probably ちんちん (chinchin) which is both a childish way to say “penis” (like “poopoo” is a childish way to say 💩, or like “peepee”) and a dog trick where the dog sits and begs (it might also have additional meanings). The translator probably had to think about how to make a similar gag with the existing visuals.


  • Hmm, I can’t think of an anime that matches the trailer. That is to say, an anime that is an action-horror demon-world adventure with modern military weapons.

    Hole in the ground with horror monsters makes me think of Made in Abyss.

    There’s a gluttony of anime with monsters in dungeons, like DanMachi, Arifureta, and Solo Leveling.

    There’s Chained Soldier, which technically takes place in a hell-ish place with monsters that is connected to regular earth. And there’s some military element to it.

    There’s a gate to another world and modern military in Gate: Thus the JSDF Fought There!, but no monsters that I recall.

    Just throwing some other out there: Hellsing Ultimate, Seraph of the End, WorldEnd, Dimension W, .

    When I hear arctic demon, I can’t help but think about The Thing, which isn’t anime.

    You can try crossposting to [email protected], which is more active. Or post in their next weekly discussion thread.





  • Raku

    My actual solution ran in about 2.5 seconds, but I optimized it to run in about 1 second.

    sub MAIN($input) {
        my $file = open $input;
        my @connection-list := $file.slurp.trim.lines>>.split("-")>>.List.List;
    
        my %connections;
        my %all-computers is SetHash;
        for @connection-list -> @c {
            my ($first, $second) = @c.sort;
            %connections{$first} = [] if %connections{$first}:!exists;
            %connections{$second} = [] if %connections{$second}:!exists;
            %connections{$first}.push($second);
            %all-computers{@c.all}++;
        }
        for %connections.values -> $list is rw {
            $list = $list.sort.List;
        }
    
        my $part1-solution = 0;
        for %connections.keys -> $c1 {
            for %connections{$c1}.Seq -> $c2 {
                for (%connections{$c1} ∩ %connections{$c2}).keys -> $c3 {
                    next unless ($c1, $c2, $c3).any.substr(0,1) eq "t";
                    $part1-solution++;
                }
            }
        }
        say "part1 solution: $part1-solution";
    
        my $part2-solution = find-max-party((), %connections, %all-computers).join(",");
        say "part2 solution: $part2-solution";
    }
    
    sub find-max-party(@party, %connections, %available-members) {
        my @max-party = @party;
        for %available-members.keys.sort -> $c1 {
            my @new-party := (|@party, $c1);
            my %new-available-members := %available-members ∩ %connections{$c1};
            my @max-party-candidate = find-max-party(@new-party, %connections, %new-available-members);
            @max-party = @max-party-candidate if @max-party-candidate.elems > @max-party.elems;
            last if @max-party.elems == @party.elems + %available-members.elems;
        }
        return @max-party;
    }
    

  • Raku

    I spent way to much time tweaking the part 2 code to get a working solution. The solution itself is quite simple, though.

    sub MAIN($input) {
        grammar Input {
            token TOP { <register-a> "\n" <register-b> "\n" <register-c> "\n\n" <program> "\n"* }
            token register-a { "Register A: " (\d+) }
            token register-b { "Register B: " (\d+) }
            token register-c { "Register C: " (\d+) }
            token program { "Program: " (\d)+%"," }
        }
        my $parsed = Input.parsefile($input);
        my $register-a = $parsed<register-a>[0].Int;
        my $register-b = $parsed<register-b>[0].Int;
        my $register-c = $parsed<register-c>[0].Int;
        my @program = $parsed<program>[0]>>.Int;
    
        my $part1-solution = run-program($register-a, $register-b, $register-c, @program).join(",");
        say "part1 solution: $part1-solution";
    
        my $part2-solution = search-for-quine(0, $register-b, $register-c, @program, 0);
        say "part2-solution: $part2-solution";
    }
    
    sub run-program($a, $b, $c, @program) {
        my ($register-a, $register-b, $register-c) Z= ($a, $b, $c);
        my $pc = 0;
        my @output;
        while $pc < @program.elems {
            my ($opcode, $operand) Z= @program[$pc, $pc+1];
            my $combo = (given $operand {
                when 0..3 { $operand }
                when 4 { $register-a }
                when 5 { $register-b }
                when 6 { $register-c }
                when 7 { Nil }
                default { say "invalid operand $operand"; exit; }
            });
            given $opcode {
                when 0 { $register-a = $register-a div (2 ** $combo); }
                when 1 { $register-b = $register-b +^ $operand; }
                when 2 { $register-b = $combo mod 8; }
                when 3 { $pc = $operand - 2 if $register-a != 0; }
                when 4 { $register-b = $register-b +^ $register-c; }
                when 5 { @output.push($combo mod 8); }
                when 6 { $register-b = $register-a div (2 ** $combo); }
                when 7 { $register-c = $register-a div (2 ** $combo); }
                default { say "invalid opcode $opcode"; exit; }
            }
            $pc += 2;
        }
        return @output;
    }
    
    sub search-for-quine($a, $b, $c, @program, $idx) {
        return $a if $idx == @program.elems;
        for ^8 {
            my $test-solution = $a * 8 + $_;
            my @output = run-program($test-solution, $b, $c, @program);
            my @program-slice = @program[*-1-$idx..*];
            if @program-slice eqv @output {
                my $found = search-for-quine($test-solution, $b, $c, @program, $idx+1);
                if $found {
                    return $found;
                }
            }
        }
        # Time to back track...
        return False;
    }
    

  • Raku

    Pretty straight-forward problem today.

    sub MAIN($input) {
        my $file = open $input;
        my @map = $file.slurp.trim.lines>>.comb>>.Int;
    
        my @pos-tracking = [] xx 10;
        for 0..^@map.elems X 0..^@map[0].elems -> ($row, $col) {
            @pos-tracking[@map[$row][$col]].push(($row, $col).List);
        }
    
        my %on-possible-trail is default([]);
        my %trail-score-part2 is default(0);
        for 0..^@pos-tracking.elems -> $height {
            for @pos-tracking[$height].List -> ($row, $col) {
                if $height == 0 {
                    %on-possible-trail{"$row;$col"} = set ("$row;$col",);
                    %trail-score-part2{"$row;$col"} = 1;
                } else {
                    for ((1,0), (-1, 0), (0, 1), (0, -1)) -> @neighbor-direction {
                        my @neighbor-position = ($row, $col) Z+ @neighbor-direction;
                        next if @neighbor-position.any < 0 or (@neighbor-position Z>= (@map.elems, @map[0].elems)).any;
                        next if @map[@neighbor-position[0]][@neighbor-position[1]] != $height - 1;
                        %on-possible-trail{"$row;$col"} ∪= %on-possible-trail{"{@neighbor-position[0]};{@neighbor-position[1]}"};
                        %trail-score-part2{"$row;$col"} += %trail-score-part2{"{@neighbor-position[0]};{@neighbor-position[1]}"};
                    }
                }
            }
        }
    
        my $part1-solution = @pos-tracking[9].map({%on-possible-trail{"{$_[0]};{$_[1]}"}.elems}).sum;
        say "part 1: $part1-solution";
    
        my $part2-solution = @pos-tracking[9].map({%trail-score-part2{"{$_[0]};{$_[1]}"}}).sum;
        say "part 2: $part2-solution";
    }