I wrangle code, draw pictures, and write things. You might find some of it here.

  • 3 Posts
  • 97 Comments
Joined 10 months ago
cake
Cake day: March 13th, 2024

help-circle
  • I’ve been around the internet a long time, and even back then when throwing slurs at each other and “making fun” of marginalized groups was, if not accepted, at least tolerated because it was considered some poor attempt at humor, I don’t remember ever seeing a rule or passage in any netiquette stating it that explicitly.

    It was always “we don’t censor speech but don’t be an asshole” with a giant asterisk about what both censoring and being an asshole meant, but I don’t think I’ve ever seen even the worst places say, “we explicitly allow hate speech, go ahead”.

    Holy fucking shitballs.


  • The worst bit is, the devs who aren’t like this are basically forced to comply anyway. Whenever I justify a delay in some release with that testing/bugfixing takes time, I get slapped with release it anyway, you can patch it later, and although I am lucky to be in a privileged position where I can fight this for some amount of time, every young programmer who comes into a job with a good mindset is not and has to bend over or face shit like negative performance reviews because they’re too slow.

    This is so fucking infuriating. I don’t want to release shit software, I want to make sure the stuff I ship works. Back when patching meant you had to ship a physical medium to a non-trivial amount of users, that was how things worked, but apparently only because IT HAD TO and not because it’s good fucking work ethics to have. Now that you can just zero-day patch everything it’s apparently okay to ship unfinished shit and use your customers as beta testers.

    I hate this so much and I try to avoid doing this as much as I can professionally. And whenever I can’t I actually feel bad and want to apologize to everyone who has to use that shit release.






  • Mii@awful.systemstoTechTakes@awful.systemsruh roh
    link
    fedilink
    English
    arrow-up
    24
    ·
    20 days ago

    Oh look, YouTube managed to circumvent uBlock for like two hours again before someone figured out a fix, lol.

    Seriously, I wanna know how much funds Google allocates to fight ad blockers just to come up with a working solution every odd month that then gets fixed by the uBlock community in hours. There’s no way this is profitable for them or gets a sizable number of uBlock users to buy their subscription.



  • I use Posteo for mail and calendar now (they’re not encrypted between users like Proton but you can just hook it up to any mail client and PGP your shit) .Mail is IMAPS, calendar is CalDAV, contacts are CardDAV, etc. Depending on where you fall on the security-convenience sliding scale, that might be an option. I’ve decided that I care more about portability and standards than super-thick encryption which made me choose them over Tuta, because Tuta offers no way to access the mail over IMAP whatsoever, not even an optional bridge like Proton, and that was a total dealbreaker for me. Posteo also claim they’re 100% green energy which is a nice bonus.

    For drive I use Filen.io now. They’re relatively new so I can’t make any assumptions about how long they’ll be around but the price is fair and they offer lifetime payments too. Also their Linux client is pretty solid and doesn’t fucking eat my RAM for breakfast. They’re also in the process of adding support for rclone as per a GitHub issue I’m following.

    VPN I pretty much don’t use because I’ve never felt I needed it, so no recommendations there from me.


  • I’m a senior software engineer

    Nice, me too, and whenever some tech-brained C-suite bozo tries to mansplain to me why LLMs will make me more efficient, I smile, nod politely, and move on, because at this point I don’t think I can make the case that pasting AI slop into prod is objectively a worse idea than pasting Stack Overflow answers into prod.

    At the end of the day, if I want to insert a snippet (which I don’t have to double-check, mind you), auto-format my code, or organize my imports, which are all things I might use ChatGPT for if I didn’t mind all the other baggage that comes along with it, Emacs (or Vim, if you swing that way) does this just fine and has done so for over 20 years.

    I empirically work quicker with it than without and the engineers I know who are still avoiding it work noticeably slower.

    If LOC/min or a similar metric is used to measure efficiency at your company, I am genuinely sorry.



  • That’s gotta be one of my favorite Zitron piece to date. Ed managed to articulate some points which have been floating around in my mind for a while which I did not have the words to explain. Especially how using any form of out-of-the-box computer these days is just a completely user-hostile pile of steaming horseshit, and why I am anal-retentive about what software gets installed on my devices and how exactly my window manager has to work, &c.

    I mean, it’s probably because I’m an obsessive nerd, but the fact that it makes me feel in control when I can rip shit of the source code that bugs me (or put shit in that I miss) is a major factor, too.






  • Day 2, Part 1
    use strict;
    use List::Util qw( min max );
    
    open(FH, '<', $ARGV[0]) or die $!;
    my @lines;
    while (<FH>) {
    	my @report = split /\s/, $_;
    	push @lines, \@report;
    }
    
    close FH;
    
    sub in_range {
    	my $diff = max($_[0], $_[1]) - min($_[0], $_[1]);
    	return $diff >= 1 && $diff <= 3;
    }
    
    sub is_safe {
    	my $prev = @$_[0];
    	my $dir = 0;
    
    	for (my $i = 1; $i < scalar @$_; ++$i) {
    		my $el = @$_[$i];
    		if ($el > $prev) {
    			return 0 unless $dir >= 0;
    			$dir = 1;
    		} elsif ($el < $prev) {
    			return 0 unless $dir <= 0;
    			$dir = -1;
    		}
    
    		return 0 unless in_range $prev, $el;
    		$prev = $el;
    	}
    
    	return 1;
    }
    
    sub part1 {
    	my $safe_reports = 0;
    
    	foreach (@_) {
    		$safe_reports++ if is_safe @$_;
    	}
    
    	return $safe_reports;
    }
    
    print 'Part 1: ', part1(@lines), "\n";
    

    My part 2 solution didn’t work with the real input but worked with all the test cases I threw at it, so I couldn’t figure out what was wrong with it and I’m too lazy to debug any more right now.


  • Advent of Code is one of these things I wanna do every year and then I end up in fucking end-of-the-year crunch time every December and work for 10-12 hours and really don’t wanna code after work anymore.

    But hey, here’s a quick solution for day 1. Let’s see how far I make it.

    Day 1
    use strict;
    use List::Util qw( min max );
    
    open(FH, '<', $ARGV[0]) or die $!;
    
    my @left;
    my @right;
    
    while (<FH>) {
    	my @nums = split /\s+/, $_;
    	push(@left, $nums[0]);
    	push(@right, $nums[1]);
    }
    
    @left = sort { $b <=> $a } @left;
    @right = sort { $b <=> $a } @right;
    
    my $dist = 0;
    my $sim = 0;
    my $i = 0;
    
    foreach my $lnum (@left) {
    	$sim += $lnum * grep { $_ == $lnum } @right;
    
    	my $rnum = $right[$i++];
    	$dist += max($lnum, $rnum) - min($lnum, $rnum);
    }
    
    print 'Part 1: ', $dist, "\n";
    print 'Part 2: ', $sim, "\n";
    
    close(FH);