Interests: programming, video games, anime, music composition

I used to be on kbin as e0qdk@kbin.social before it broke down.

  • 1 Post
  • 75 Comments
Joined 2 years ago
cake
Cake day: November 27th, 2023

help-circle

  • When I was a kid, we had a class on Logo in, I think, 4th grade? (It was either that or 5th grade.) It wasn’t particularly hard to make various geometric drawings with it, but it also wasn’t clear how to use it to do anything beyond that.

    I used to tinker with Visual Basic on the school’s computer lab at recess sometimes around then. One of the people who ran the lab showed me just enough to try to make a calculator UI (e.g. push number buttons and have it add numbers to the display) but didn’t really explain the principles enough for me to get further than that. (I think he loaned me a book on BASIC that I tried to read on the school bus, but I couldn’t get very far with it at that age.) I ran into a macro virus back then as well, and I was able to understand the logic for erasing files on a particular date when it was pointed out, but I wasn’t able to make something like that or analyze it myself at that age.

    I also tinkered with HyperCard and some other creative software at home at around that age. I did not understand HyperTalk but could do a few simple things. I also stumbled into AppleScript but didn’t understand it. I think I recorded macros with it, and tried to modify what it spat out without much success. I remember running into something about timezone conversion that was really cryptic to me as a kid – that might have been the first time I encountered the term “GMT”? There’s a lot of little things like that which will trip up a young beginner…

    I think I also checked out a book on Java from the library that had a CD-ROM with the compiler on it somewhere in that 4th~6th grade age range (don’t remember more specifically when) – I was definitely too young to for that. I was able to install the software, type in a program from the book, and make it run but I wasn’t able to do anything beyond that with it and it was too tedious for me to persevere through the cryptic parts when I was that young.

    Somewhere around 5th ~ 6th grade I found Game Maker and taught myself that by tinkering with the sample games. For example, by making alternative level layouts for the Pac-Man clone and adding in some simple things like one-way teleporters. I used the drag and drop interface at that age with one of the really early versions before the 4.0 UI re-design – it was a lot more approachable as a beginner, IMO, before that redesign. (With the changes it was better for me as a hobbyist as I got older though.) I eventually taught myself how to use its scripting language through a mixture of reading the manual and trial-and-error. The manual didn’t explain the basics of programming very well, but the reference documentation for it was easy enough to understand that once I got a handle on the basics I could do a lot with it. I’m not sure how old I was when I got a good handle on it. Maybe 7th or 8th grade? I was able to make some fairly complex things from scratch by 9th grade and taught myself C++ in high school.

    I definitely could’ve learned a lot more conceptually earlier if I’d had more direct mentoring from someone who could code; I had to figure out a lot by trial and error. My knowledge of math, reading ability, etc. limited my ability to self-teach from books. People around me were also rarely able to answer questions when I hit something above my expected grade level (e.g. I remember asking what “sigma” meant to a math teacher in 7th grade after encountering it in a book and she didn’t really understand my question and told me it was another variable like x instead of recognizing that I was asking about summations but didn’t know that word yet… I eventually made the connection between it and for loops but I could’ve understood it then if I’d had the vocabulary to ask the right questions or had the sample text handy when I asked…) In retrospect, I’m surprised at how bad my teachers in high school were when I tried to get help with figuring out how to move things in circles in a game I was writing – that was all just basic trig.

    I guess to summarize: if they’re motivated, yeah, you can get a surprisingly long way very young.





  • Here’s one of mine. I got annoyed at the complexity of other command line spellcheckers I tried and replaced them with this simple python script for when I just want to check if a single word is correct:

    #!/usr/bin/env python3
    
    import sys
    
    try:
      query = sys.argv[1].lower()
    except Exception:
      print("Usage: spellcheck <word>")
      exit(1)
    
    with open("/usr/share/dict/words") as f:
      words = f.readlines()
    
    words = [x.strip().lower() for x in words if len(x.strip()) > 0]
    
    if not query in words:
      print("Not in dictionary -- probably a typo")
      exit(1)
    else:
      print("OK")
      exit(0)
    





  • Huh. Maybe I’m just too early in the game still (despite having put 10+ hours into it) but crafting materials are like, the one thing I’m not hurting for. It’s got the Zelda rupee problem for me, at least at this point in the game – I’m constantly pegged at the max capacity, and it feels like I have basically nothing to use it on. (I mean, I do use the tools I have found so far, situationally, but I don’t think I’ve been down by more than ~100 or so from max other than for that one wish in the starting area.)

    Edit: Ok, I’m a bit further in now, and I see what people mean… -.-


  • There’s something else going on there besides base64 encoding of the URL – possibly they have some binary tracking data or other crap that only makes sense to the creator of the link.

    It’s not hard to write a small Python script that gets what you want out of a URL like that though. Here’s one that works with your sample link:

    #!/usr/bin/env python3
    
    import base64
    import binascii
    import itertools
    import string
    import sys
    
    input_url = sys.argv[1]
    parts = input_url.split("/")
      
    for chunk in itertools.accumulate(reversed(parts), lambda b,a: "/".join([a,b])):
      try:
        text = base64.b64decode(chunk).decode("ascii", errors="ignore")
        clean = "".join(itertools.takewhile(lambda x: x in string.printable, text))
        print(clean)
      except binascii.Error:
        continue
    

    Save that to a file like decode.py and then you can you run it on the command line like python3 ./decode.py 'YOUR-LINK-HERE'

    e.g.

    $ python3 ./decode.py 'https://link.sfchronicle.com/external/41488169.38548/aHR0cHM6Ly93d3cuaG90ZG9nYmlsbHMuY29tL2hhbWJ1cmdlci1tb2xkcy9idXJnZXItZG9nLW1vbGQ_c2lkPTY4MTNkMTljYzM0ZWJjZTE4NDA1ZGVjYSZzcz1QJnN0X3JpZD1udWxsJnV0bV9zb3VyY2U9bmV3c2xldHRlciZ1dG1fbWVkaXVtPWVtYWlsJnV0bV90ZXJtPWJyaWVmaW5nJnV0bV9jYW1wYWlnbj1zZmNfYml0ZWN1cmlvdXM/6813d19cc34ebce18405decaB7ef84e41'
    https://www.hotdogbills.com/hamburger-molds/burger-dog-mold
    

    This script works by spitting the URL at ‘/’ characters and then recombining the parts (right-to-left) and checking if that chunk of text can be base64 decoded successfully. If it does, it then takes any printable ASCII characters at the start of the string and outputs it (to clean up the garbage characters at the end). If there’s more than one possible valid interpretation as base64 it will print them all as it finds them.



  • Nginx is running in Docker

    Are you launching the container with the correct ports exposed? You generally cannot make connections into a container from the outside unless you explicitly tell Docker that you want it to allow that to happen… i.e. assuming you want a simple one-to-one mapping for HTTP and HTTPS standard ports are you passing something like -p 80:80 -p 443:443 to docker run on the command line, adding the appropriate ports in your compose file, or doing something similar with another tool for bringing the container up?



    • Steam Deck w/ official Dock
    • IOGEAR GCS1104 (4-port DVI KVM)
    • generic HDMI-to-DVI cable
    • Wireless (RF) headphones – compatible with Sony TMR-RF912R transmitter; not sure on specific headphone model (it’s the one that came with the transmitter, but I can’t read the model number on the headphones any more since it’s too old)
    • a generic 1920x1080 monitor with DVI input + keyboard + mouse
    • XBox360 controller w/ official wireless PC adapter (USB)

    I got the KVM used in good condition. It’s an older model – but I went with it anyway since it was a drop-in replacement for my 2-port setup and getting it used was much cheaper than their newer models. The newer ones support higher resolution/frame rates though, I think; I know this one won’t do frame rates above 60FPS properly even though my monitor is capable of it when plugged in directly.

    There’s a few quirks with this setup. Probably most annoying is that moving the mouse typically causes computers to wake from sleep (like pressing a key on a keyboard normally does…); I think there’s a way to mask that event off with udev rules but, eh, even a decade or so after getting the original 2-port KVM I haven’t cared enough to actually bother working it out, so I guess it’s not that big of an issue to me… :p