I write code and play games and stuff. My old username from reddit and HN was already taken and I couldn’t think of anything else I wanted to be called so I just picked some random characters like this:

>>> import random
>>> ''.join([random.choice("abcdefghijklmnopqrstuvwxyz0123456789") for x in range(5)])
'e0qdk'

My avatar is a quick doodle made in KolourPaint. I might replace it later. Maybe.

日本語が少し分かるけど、下手です。

Alt: e0qdk@reddthat.com

  • 1 Post
  • 56 Comments
Joined 1 year ago
cake
Cake day: September 22nd, 2023

help-circle



  • It’s not a GUI library, but Jupyter was pretty much made for the kind of mathematical/scientific exploratory programming you’re interested in doing. It’s not the right tool for making finished products, but is intended for creating lab notebooks that contain executable code snippets, formatted text, and visual output together. Given your background experience and the libraries you like, it seems like it’d be right up your alley.


  • I was just thinking about the image resizing thing again when I saw your message notice pop up. Another option for preview is a web browser. A minimal HTML page with some JS to refresh the image would avoid the image resize on reload problem, and gives you some other interesting capabilities. Python ships with a kind of meh (slow and quirky), but probably sufficient HTTP server (python3 -m http.server) if you’d prefer to load the preview on a different computer on your LAN entirely (e.g. cellphone / tablet / … ) for example.

    A simple HTML file for this would be something like:

    
    
      
        
        
      
      
        
      
    
    
    

    Regarding input from a gamepad – I’ve had some similar ideas before but haven’t really had much success using a gamepad artistically outside some limited things where I either wrote the entire program or was able to feed data into programs that accepted input over the network (e.g. via HTTP and which I wrote a custom adapter for). It’s been a long time since I’ve tried anything in that space though, and it might be possible to do something interesting by trying to make the system see the combination of a gamepad stick as relative mouse motion and trigger as pen pressure. I’m not quite sure how to go about doing that, but I’ll let you know if I find a way to do it.


  • The Wikipedia article for hqx points out that an implementation exists as a filter in ffmepg.

    You can run a command line conversion of e.g. a PNG -> PNG using hqx upscaling like: ffmpeg -i input.png -filter_complex hqx=4 output.png

    The =4 is for 4x upscaling. The implementation in my version of ffmpeg supports 2x, 3x, and 4x upscaling.

    As a quick and dirty way to get semi-live preview, you can do the conversion with make and use watch make to try to rebuild the conversion periodically. (You can use the -n flag to increase the retry rate if the default is too long to wait.) make will exit quickly if the file hasn’t changed. Save the image in your editor and keep an image viewer that supports auto-reload on change open to see “live” preview of the output. (e.g. eog can do it, although it won’t preserve size of the image – at least not in the copy I have, anyway; mine’s a bit old though.)

    Sample Makefile:

    output.png : input.png Makefile
    	ffmpeg -y -i input.png -filter_complex hqx=4 output.png
    
    

    Note the -y option to tell ffmpeg to overwrite the file; otherwise it will stop to ask you if you want to overwrite the file every time you save, and in case you’re not familiar with Makefiles, you need a real tab (not spaces) on the line with the command to run.

    ffmpeg also appears to support xbr (with =n option as well) and super2xsai if you want to experiment with those too.

    I’m not sure if this will actually do what you want artistically, but the existing implementations in ffmpeg makes it easy to experiment with.


  • What upside down thing with a banana??

    There was a viral video/meme maybe a decade ago about how monkeys peel bananas (might have actually been an orangutan or gorilla in the one I saw; been too long since I’ve seen it) where they peel it from the end opposite of how people are usually shown doing it. I’m guessing they mean that? Basically, instead of bending the stem bit (from where the bananas bunch up), you can pinch the tip at the other end and the peel splits open very easily – it’s easier to do, especially if the banana is still a bit on the greener side of ripeness and the stem part is flexible. (I tried it after seeing it and switched to peeling them from the “bottom” myself.)

    What back bit?

    There is a little black fibrous part of most Cavendish bananas near the tip I was describing; many people do not like eating it and avoid it.

    Also…veins?

    I’m not sure what they mean either.



  • Can Z3 account for lost bits? Did it come up with just one solution?

    It gave me just one solution the way I asked for it. With additional constraints added to exclude the original solution, it also gives me a second solution – but the solution it produces is peculiar to my implementation and does not match your implementation. If you implemented exactly how the bits are supposed to end up in the result, you could probably find any other solutions that exist correctly, but I just did it in a quick and dirty way.

    This is (with a little clean up) what my code looked like:

    solver code
    #!/usr/bin/env python3
    
    import z3
    
    rand1 = 0.38203435111790895
    rand2 = 0.5012949781958014
    rand3 = 0.5278898433316499
    rand4 = 0.5114834443666041
    
    def xoshiro128ss(a,b,c,d):
        t = 0xFFFFFFFF & (b << 9)
        r = 0xFFFFFFFF & (b * 5)
        r = 0xFFFFFFFF & ((r << 7 | r >> 25) * 9)
        c = 0xFFFFFFFF & (c ^ a)
        d = 0xFFFFFFFF & (d ^ b)
        b = 0xFFFFFFFF & (b ^ c)
        a = 0xFFFFFFFF & (a ^ d)
        c = 0xFFFFFFFF & (c ^ t)
        d = 0xFFFFFFFF & (d << 11 | d >> 21)
        return r, (a, b, c, d)
    
    a,b,c,d = z3.BitVecs("a b c d", 64)
    nodiv_rand1, state = xoshiro128ss(a,b,c,d)
    nodiv_rand2, state = xoshiro128ss(*state)
    nodiv_rand3, state = xoshiro128ss(*state)
    nodiv_rand4, state = xoshiro128ss(*state)
    
    z3.solve(a >= 0, b >= 0, c >= 0, d >= 0,
      nodiv_rand1 == int(rand1*4294967296),
      nodiv_rand2 == int(rand2*4294967296),
      nodiv_rand3 == int(rand3*4294967296),
      nodiv_rand4 == int(rand4*4294967296)
      )
    
    

    I never heard about Z3

    If you’re not familiar with SMT solvers, they are a useful tool to have in your toolbox. Here are some links that may be of interest:

    Edit: Trying to fix formatting differences between kbin and lemmy
    Edit 2: Spoiler tags and code blocks don’t seem to play well together. I’ve got it mostly working on Lemmy (where I’m guessing most people will see the comment), but I don’t think I can fix it on kbin.


  • If I understand the problem correctly, this is the solution:

    solution

    a = 2299200278
    b = 2929959606
    c = 2585800174
    d = 3584110397

    I solved it with Z3. Took less than a second of computer time, and about an hour of my time – mostly spent trying to remember how the heck to use Z3 and then a little time debugging my initial program.


  • What I’d do is set up a simple website that uses a little JavaScript to rewrite the date and time into the page and periodically refresh an image under/next to it. Size the image to fit the remaining free space of however you set up the iPad, and then you can stick anything you want there (pictures/reminder text/whatever) with your favorite image editor. Upload a new image to the server when you want to change the note. The idea with an image is that it’s just really easy to do and keeps the amount of effort to redo layout to a minimum – just drag stuff around in your image editor and you’ll know it’ll all fit as expected as long as you don’t change the resolution (instead of needing to muck around with CSS and maybe breaking something if you can’t see the device to check that it displays correctly).

    There’s a couple issues to watch out for – e.g. what happens if the internet connection/server goes down, screen burn-in, keeping the browser from being closed/switched to another page, keeping it powered, etc. that might or might not matter depending on your particular circumstances. If you need to fix all that for your circumstances, it might be more trouble than just buying something purpose built… but getting a first pass DIY version working is trivial if you’re comfortable hosting a website.

    Edit: If some sample code that you can use as a starting point would be helpful, let me know.


  • My guess is that if browsers as we know them weren’t invented, HyperCard would’ve become the first browser eventually. No idea where things would progress from there or if it’d have been better or worse than the current clusterfuck. Maybe we’d all be talking about our “web stacks” instead of websites, and have various punny tools like “pile” and “chimney” and “staplr”. Perhaps PowerPoint would’ve turned into a browser to compete with it.

    If browsers were invented but JavaScript specifically was not, we’d probably all be programming sites in some VB variant like VBScript (although it might be called something different).



  • I’ve never tried to make a stew out of duck before, but if someone asked me to wing it anyway, I’d probably try to use it in a gumbo: Dark roux, Cajun Trinity (celery + onion + bell pepper), jalapeno, garlic, stock, fresh thyme, bay leaf, lots of fresh ground black pepper, spoonful of hot sauce (e.g. Crystal or Tabasco if I can’t get that), plus your meat – served over white rice. For chicken (e.g. chicken thighs), I’d sear it first but I’m not sure on the best treatment for gamey fowl. Personally I might try to blanch it first to try to reduce the gameyness (based on recommendations I’ve seen about cooking certain kinds of stewed pork – like pork belly in Chinese dishes), but you’d do better to get advice from someone who’s actually cooked with gamey ingredients more than I have if you can.

    Adapting a coq au vin recipe might be another idea to try if gumbo doesn’t appeal, but again, I’ve never tried that with duck either.


  • And Sim Tower I was obsessed with that game for a long time when I was younger. Couldn’t stop playing until I got everything completed and filled every empty space on the map.

    Single, double, or triple story lobby? :-)

    I remember having a pretty good time with SimTower myself – I liked seeing all the little animations of people doing stuff throughout the building. I didn’t understand the apartment pricing thing as a kid, but as an adult thinking back on it, it’s clear that I was supposed to renovate the units if I wanted to keep renting them at the higher rates… (Delete and rebuild was not intuitive to me as a kid so I kept getting frustrated with the apartments and usually built massive amounts of hotel rooms instead.)

    I haven’t heard of Sim Safari myself what was that one like?

    I hadn’t played it for 20+ years so my memory of it wasn’t great when you asked this question – but I went down a bit of a rabbit hole digging through my boxes of old anime DVDs and strange things I burned to CD-Rs as a teenager and such – and it turns out I still have the original CD-ROM! It’s got orange and white stripes. It’s scratched up a little bit, but it’s still readable enough that I was able to install the game under WINE and IT WORKS! (The installer prompted me to install DirectX 5 to “improve performance”… lol)

    The game opens with a short animated splash screen – a map of Africa with animated zebras and other animals shown over it before eventually displaying the game’s logo. It then dumps me onto a main menu with a lantern that toggles an interactive tutorial on and off – somewhat confusingly; it wasn’t immediately clear that it was a switch unlike the other options. I turned the tutorial on but didn’t find it very helpful.

    The game itself is isometric and features a bunch of animals wandering around randomly while grass grows. (Screenshot) There are three different modes (park, camp, village) that I don’t really understand the details of. Park shows your animals, of course. I think the idea is you build up the camp site to get tourists to come (and bring you money), do gardening and animal management and such in the park which attracts more tourists, and hire people from the village to keep things running (otherwise they poach your animals, probably?) but it’s not clear how to actually get things going and most of the advisors seem pretty useless.

    There’s an ecologist adviser who has a field guide about plants and animals and can also show you various graphs and things. You can click on binoculars and then on an animal and it will bring up a window with a little animation of that animal.

    The game constantly plays animal sound effects by default including crickets and various birds and a bunch of animals whose sounds I don’t know well enough to name – but could probably learn from the embedded educational material if I cared to. (I have a feeling many parents of kids who had this game were probably driven bonkers by some animal or other going “AWEEEEE heee heee heee hee!” over and over.)

    I remembered the game being presented as more serious than SimPark (which has a talking cartoon frog guide you through things like leaf identification) – and, indeed, the character graphics are more realistic cartoon drawings in this one, but it’s also more cartoony than I remember with the sound effects for things like a “boing-a-boing-oing-oing” failure noise if you misclick the binoculars.

    The controls are not very good. Moving around the map is tediuous and unintuitive (you have to click in a particular region near the window border and hold the mouse down there – or else pull up a mini-map and navigate with that). The game also just builds paths immediately when you try to draw them with the mouse instead of letting you choose a route and drop to release to confirm the construction. You can “build” a 4 door car on your camp site for some reason as well as construct roads, but I think it may just be a decoration. There doesn’t seem to be any way to pick it up and move it if you plopped it in a bad spot (bye $3k!).

    Unfortunately I don’t have the original box/paper manual/whatever else came with the disc and the README file (in an ancient .DOC format) is not very helpful. It does, however, contain some lines like:

    By the time you read this document, the average home computer might be a 700MHz GazillaComp 2000 with 58 gigabytes of memory.

    which is pretty amusing since the decade old machine I’m running it on has a 3.7GHz processor – obscenely far beyond their dreams of high performance – but a mere 32GB of RAM. :p

    Somewhat oddly the game apparently has the ability to print – although I haven’t tried it.


  • I’ve seen Bubba Ho-Tep and Cemetery Man! Watched them during a movie marathon once that also included From Dusk Till Dawn and Jacob’s Ladder. That was a night well spent.

    Out of the games, I’ve played Sim Tower. I never made it to 5 stars but got as far as building the subway in at least one of my towers. I played way too many sim games as a kid. SimSafari is probably the most obscure I tried – never really made much sense out of that one though.

    I don’t know if it’s that obscure… but for anyone else who played a bunch of sim games – do you remember the song with the lyrics “I’m just a splatter, splatter, splatter on the windshield of life”?


  • Didn’t the GDPR have a data portability rule requiring that sites provide users the ability to easily export their own data? Does that not apply to Lemmy for some reason – or, am I misremembering it? (I remember account data download being a big deal a while back on reddit, but it’s been a few years…)




  • So I either need something like this that I could host myself (is something like that even feasible?)

    The closest thing I could find that already exists is GPT4All Chat with LocalDocs Plugin. That basically builds a DB of snippets from your documents and then tries to pick relevant stuff based on your query to provide additional input as part of your prompt to a local LLM. There are details about what it can and can’t do further down the page. I have not tested this one myself, but this is something you could experiment with.

    Another idea – if you want to get more into engineering custom tools – would be to split a document (or documents) you want to interact with into multiple overlapping chunks that fit within the context window (assuming you can get the relevant content out – PyPDF2’s documentation explains why this can be difficult), and then prompt with something like "Does this text contain anything that answers ? ". (May take some experimentation to figure out how to engineer the prompt well.) You could repeat that for each chunk gathering snippets and then do a second pass over all snippets asking the LLM to summarize and/or rate the quality of its own answers (or however you want to combine results).

    Basically you would need to give it two prompts: a prompt for the “map” phase that you use to apply to every snippet to try to extract relevant info from each snippet, and a second prompt for the “reduce” phase that combines two answers (which is then chained).

    i.e.:

    f(a) + f(b) + f(c) + ... + f(z)
    
    

    where f(a) is the result of the first extraction on snippet a and + means “combine these two snippets using the second prompt”. (You can evaluate in whatever order you feel is appropriate – including in parallel, if you have enough compute power for that.)

    If you have enough context space for it, you could include a summary of the previous state of the conversation as part of the prompts in order to get something like an actual conversation with the document going.

    No idea how well that would work in practice (probably very slow!), but it might be fun to experiment with.