15
votes
What programming/technical projects have you been working on?
This is a recurring post to discuss programming or other technical projects that we've been working on. Tell us about one of your recent projects, either at work or personal projects. What's interesting about it? Are you having trouble with anything?
I found a free TV on Facebook marketplace that needed a new backlight. The new set of backlight strips were $75, so it was a cheap way to upgrade from a very old 1080p TV to a relatively okay 4k TV. It took me a few hours, but the replacement went off without a hitch.
The only problem is the colors were way off, even on the "calibrated" mode. My guess is the output color of the new backlight LEDs is slightly different from stock, so the factory calibration just makes it less accurate. I've never properly calibrated a TV before, so I jumped into the deep end of learning. Turns out display calibration is crazy complicated. I managed to get it reasonably close to accurate (with the help of ChatGPT) once I figured out out to disable the local dimming zones. This TV only has 12 anyway, so it's nearly useless and makes the calibration inconsistent.
Now that I have it dialed in, I think it's more accurate than our previous TV. All around a fun project, and now I have a very useful little tool in my tool belt.
Welp, I got distracted and now I guess I'm working on a retro virtual pet site based around combining slimes.
It's written in Rails 8 because I am familiar and comfortable with the framework. I am experimenting also with Stimulus/Hotwire, but honestly kind of flying by the seat of my pants with it. The DB is postgres chosen specifically for JSONB making things nice and easy for me.
The slimes are currently modelled with a Genotype object, which consists of Locus objects of varying types. Two slimes squished together produce an offspring that combines the genetics. I initially conceived it as being more "purely" genetically-oriented but kept running up against the tension between "simulation" and "game", and I think I decided to fall more on the side of "game."
Colour was hard to figure out for a multitude of reasons, but I believe I have a pretty good grasp on it now. I'm currently working on the shape of the slimes, which I suspect will be VERY hard.
Each slime is actually a radial function, basically, setting out N points which are then joined by a Catmull-Rom spline. While I have a variety of set body types I have been experimenting with ways to modify them based around individual inheritable characteristics - for a little while today I tried to actually model different loci as harmonics in different combinations, but it became pretty clear pretty quick that if I did that people would just immediately try to make their slimes look like buttplugs (because it's the first thing I did).
So as interesting as that was, back to set shapes for now. I have a debug toy where I can lerp between them to get some interesting midpoints, which I might do something with.
Got me thinking... If you express the shape of a slime as a function that operates on a line then you get an arbitrary wiggly line. Then you turn that line into a circle by connecting the ends. If the line ever crosses itself when it is bent then you could treat that as the slime splitting at that point into two slimes. Two slimes colliding at a point would merge the slimes functions in some way. Slimes could naturally then grow by combining the length of their circumference line. Anyway, fun project!
That's an interesting approach and kind of what I was going for with the harmonic series! The slime is a circle, I applied transformations based around periodic functions to the outline, and the final expression was a finite Fourier transformation of the harmonic sums. (I also provided a "floor line" to them to make them look like creatures rather than just "splats", gave them eyeballs). It could produce cute slimes, but unfortunately also produced a lot of weird-looking slimes that I couldn't see anyone being excited to have - and sometimes there was no clear throughline of "this slime has aspects of both its ancestors", which is important to me. I suppose that is the risk of making things more free and procedural in general!
But yes, right now squishing them together is more akin to breeding them than to FULLY combining them. Just curling them together computationally rather than starting with periodicity as a requirement could potentially allow for more interesting ways of combining them in more of an "amalgamate" way than a "breeding" way, which I kind of like! I'll definitely keep it in my back pocket, if not for the breeding mechanic directly, then for some kind of something down the line. Maybe getting rid of unwanted slimes can smush them into THE GREAT AMALGAM.
Trying to find a new approach to verifying who's human on the web. I don't think that capthca and the forced ID things are the right answer
A worthy endevour, do you have any good ideas?
Well, I have ideas; not sure if they are good. One fundamental thing is that the system needs to not-scale. Which is like the opposite of what everyone thinks. The system needs to be designed to limit itself to operate on the human scale and start off from the beginning with these principles. What did early/small communities look like? Folk new other folk and could vouch. EG: Is @bwerf an OK human? @artvandlay says they are. And of course with that model we'd still need to have some cryptography and signatures and stuff.
That's an ambitious project, not so much the tech, but trying to mix human scale and global network scale.
If the goal is to replace CAPTCHA, wouldn't it need to fail requests by default? You could only pass requests where attestation already existed. And wouldn't that mean that it would always auto-fail some percentage of potentially valid requests even if you managed to drive widespread adoption?
In addition, wouldn't you need a central attestation store because you couldn't rely on users being connected to the network at a given time? And in that case wouldn't it only work if there was already an attestation record for that request? Would it be IP based? Fingerprinting?
Or am I misunderstanding and this is meant to replace CAPTCHA on just one particular site? In that case though it sounds like invite-only would be a lot easier and more reliable.
Hopefully I'm missing something because better CAPTCHA is something we all want.
You are missing some things. Also, your comments touch on a lot of the problems in this space. There is just a lot more problems than what you've pointed out. Those, and many others, are bouncing around my brain, getting notes and research and thought experiment.
Another thing is, the "business model" because I don't have budget to run a service that could have (eventually) millions of users.
And then business structure. Likely have to make an NFP, and get a diverse board early for credibility.
Lots of hard problems. Should be fun.
I can't deny the appeal of hard problems! I'll be curious about your solutions
Interesting, so some kind of humans vouching for each other? I'm interested in where this will lead, good luck!
The trouble I see is that you probably don't want the community to be completely dead and that's the most likely result. It can't be too hard to join or it won't work at all.
Invite-only seems like a reasonable way to go?
Yea, it's got a big cold-start problem.
Tangled is doing this, if you could use some inspo. I haven’t used it myself, but I’ve been following their development with interest.
Looks like they use this to implement vouching.
I've been following the Ghostty issues. Thanks for the pointer to Tangled
Out of curiosity, is this something you're building for your own use? Just wondering what your motivation is.
I'd like it to become something widely used. I don't like many of the methods today and really don't like government enforcing online identity. We should be able to prove we are human, without needing to specify which human.
I'm a burgeoning programmer. Lately I've been working on a simple Python program that will track the time I've spent studying and log it to a SQLLite database all with the push of a button. Now the most important thing I need to do is find the motivation to continue working on it consistently...
Home server upgrades are in progress. I harvested parts from my old server and moved everything into a new case. Things are functioning just fine thankfully. I had installed the new HDDs I bought without realizing that the SATA controller on the motherboard doesn't support the 4k block sizes. So now I'm waiting on a HBA card + cables to arrive in the mail so I can verify if my new drives work.
Been starting to research building my own alarm clock based off of a raspberry Pi for my wife. She has been wanting a simple standalone alarm clock, but one where she can pick the audio file for it. Her research has seemed to indicate that picking your own audio file is quite hard to achieve, unless you pay too much. So I am in the beginning research stage of building my own
Like @edoceo I've recently been working on a way to make bot protection suck less. My solution isn't particularly exciting: Run extensive signal and behavior scoring to determine if a request needs to get a CAPTCHA gate.
The goal is for humans to never see a challenge, while challenging the majority of automated traffic reliably.
So far it's working great, after a lot of iteration over time, but I haven't yet run it on a high traffic site.
My book tracker is turning into something I'm feeling proud of and enjoying using myself. I've been mostly focusing on polish and improving the dashboard function recently. There's now a much better widget editor UI and the default dashboard is to the point where it's usable and not horribly ugly and buggy. But there seems to be no end of things small bugs that need fixing.
Some screenshots:
https://ibb.co/7JzHNQBb
https://ibb.co/JjrndnCj
https://ibb.co/mVpWbTyy
https://ibb.co/1YtKd2gW
have we talked APIs? which are you using?
I have Google Books and OpenLibrary integrated. Not really happy with either of them. I looked at some other options but quickly hit juice vs squeeze issues.
A core thing I'm trying to do differently is to let any user customize anything about their library, so I am hoping to make it accessible to like scan a book directly vs needing a given edition of a book already available. I'm mostly been focused on physical books, ways to scan data from audiobooks/ebooks or integrate with libby or audible or such is something I haven't even begun to think about.
yes! I have built about four book trackers over the last few years and the whole ISBN system is so fucked that I end up giving up. Like you, I don't care about the edition -- I just want the metadata.
Really makes me appreciate IMDB (omdbapi) for its simplicity.
The last one I was using oku.club and then syncing everything back to a spreadsheet (js and json), but the data just isn't consistent.
A wrapper for chatGPT or whatever would probably be the easiest -- snap a pic, it pulls the info, cleans it, then you send it off to a form or whatever...
fuck ISBN :)
Yep, I have that implemented! It'll also crop and cleanup the cover for you so the image matches your edition. I also have bookshelf scanning the same way.
so rad. I thought about making an app for record shopping. Snap a pic of the cover and it plays 30s from the middle of a few tracks. Spotify offers this preview anyway, so its a breeze. I didn't want to use AI for it, but I think that's the only reliable way.
So cool. Good use of AI.
I've been nerdsniped and find the whole concept of photogrammetry, gaussian splatting, and mesh generation/extraction fascinating.
I'm trying to setup my own pipeline around open source/source available technologies, and am having a bit of fun learning. End to end, I've managed to produce a mediocre guassian splat of the Gerrard Hall data set in 1.5 hours, and have since learned about the importance of masking, not overfitting, etc.
So I'm currently trying to find (or will make) a tool for masking with SAM3 + manual edits, after which I'll see how else I can improve my quality (short of buying a more vram).
I'm chugging away on my homelab hyperfixation!
I bought a chinese motherboard from Aliexpress for $50 and got a used Intel Xeon CPU E5-4628L V4 off ebay as well as an Nvidia Quadro P1000 GPU. All for less than $100 total, so I'm happy about that.
I'm going to be rebuilding my NAS/Media Streaming server inside my homelab rack with this new hardware, so it'll give me a far better overhead on media transcoding.
I also got ERPNext running on an old Mac Mini that I'll be adding to my homelab, and I've been writing a custom app for small commercial print shops to use as their MIS system and project management system.
I decided to give a try to vibe coding a side project since my work requires me to learn that stuff. Did an implementation of my chess variant. Posted about it a while ago here, but I designed the rules back in 2006. It's pretty cool to finally see it played online. I used to only play it on the board with friends.
The LLM implemented all the features and I did the QA:
Play it here: https://apostolique.github.io/AposChess/.
If you want to watch AI vs AI, the loop-champion is the current strongest neural net. At the time that I'm posting, it has 3 hidden layers: 64, 16, 8. It tends to beat the handcrafted AI (where the piece value and position evaluation is hardcoded) at depth 6 a good 67% of the time.
For quick games, depth 4 vs depth 4 is good, tick the eval option to see what each one is thinking. It's really cool how different AIs will disagree on who is currently winning. I find that using custom and setting depth to 0 and timeout to 6000 gives good quality games.
The variant doesn't tend to result in as much draws as regular chess from what I can see.
So at work we've got this bash script that runs as a github action when we cut a release. It
git diffs to determine the new tickets in the release, sends them to openAI to generate more descriptive descriptions from the PR descriptions, then dumps them into a release document on Confluence.I picked up a few tickets centered around improving the script and it quickly led to a bunch of issues because it's impossible to fully test locally (because of the AI handoff and Confluence aspect) and there's no easy way to do unit testing on the script.
I got fed up with it and decided to refactor the whole thing in nodeJS.
I had a few goals:
For #1, easy enough -- node and TS.
For #2, just reused our existing unit test framework in the codebase
For #3, I had to get creative!
The main limitation of running it fully locally was that there's an AI handoff component, and none of the individual devs have access to the openAI API key used. So I wrote a "sandbox mode" that hands off the AI bits to the individual dev's instance of Claude or Codex. It's not 100% the same, obviously, but it's as close as we can get without access to that API key (which I cannot get). The next limitation was Confluence. I didn't want to spam a confluence workspace with docs, but I found out you can query Confluence for docs by name. So the solution was a single document that serves as THE test document. It just gets overwritten any time the sandbox script gets run. And the sandbox doc has a big disclaimer at the stop stating that it's for testing purposes and not a REAL release doc, just in case some dipshit product person finds it while browsing confluence.
Anyway, that's all there is to say about it really. I'm trying to get a few "high impact" items under my belt for leverage for a promotion, and there's been a recent push to make our releases easier for dev managers to test/approve before release (ya know...what release managers used to do before they got axed). And I figured this would be a good opportunity to improve upon our release docs to satisfy that goal. Plus it's internal tooling, which is so much more fun than client work.