I would like to know what your hoppy coding project are. It doesn’t really have to serve a purpose, but what are you coding on in your free time that just is fun to you and you enjoy working on?

As a background: I am an experienced programmer and do earn my money with it. In my free time I always enjoyed trying out new stuff related to technology, learn new things and improve my skills by doing so. But lately I recognise that I just have no clue what I should do or what a fun toy project I could work on. I really have no ideas. My head just feels completely empty whenever I open my IDE.

So please, tell me what you are coding on for fun.

Discotheque
link
fedilink
51Y

deleted by creator

nice. I am working with voronoi grids too in another field. Is there a source where I can read about your work more in detail?

I have my own music player written with Python, Gtk, and Gstreamer. I use it almost every day to listen to music during work

Im working on a multiplatform gtk graphing calculator app that’s pleasant to use and powerful at the same time. Mainly oriented towards mathematics and chemistry because thats what i do but more stuff may be added eventually.

flatbield
link
fedilink
English
3
edit-2
1Y

A short list:

  • The current one is a Linux system backup tool written in Python that I use for my systems.

  • Recently worked through Mozillas PWA materials to learn how to make Progessive Web Apps. I need decide on what to do with that next. This HTML, CSS, JavaScript, pretty much. Put up a Python web server for some of it.

  • I have a security system that is tied together via various Python services. I need to work on that more.

  • A few years ago I write a big Monte Carlo financial simulation for retirement planning including taxes. Again Python.

  • A while ago I wrote a bunch of test code too benchmark all of the ways to make Python fast. Also looked a C extension, parallel computing, vectorization, GPUs. Some results not that intuitive.

I have a ton more.

@peereboominc@lemm.ee
link
fedilink
English
41Y
  • make a boilerplate/starter project for something. For instance a java project that has a api so implement Swagger, json, some example endpoints, etc. That way, if I start a new project I don’t have to first configure it all and think about what dependencies I need to implement.

Or one for css or Angular. Just implement the basic style for buttons, text, menu’s etc and adjust where needed. A bit like Bootstrap but then more basic

  • make a private website where combine all your (future) tools/projects. Like some calculate (km to miles, whatever), some links to other projects, a page to your servers/services (kodi, plex, sabnzbd, etc)
s3rvant
link
fedilink
31Y

Building automation to play SpaceTraders as well as tools to aid in board game design

FOSS accounting app. There’s like 2 out there that I can find, and I hate them both.

@OttoVonNoob@lemmy.ca
link
fedilink
5
edit-2
1Y

I’m creating an RPG in GoDot using asprite for resources. I’m about 6 months in and I find it so relaxing making assets and plunking them in. Whatever you do it should be for you is the golden rule. To often people want to inject themselves in or offer input thats sneakily what they want. It should be what your vision is, your pace and you shouldn’t answer to anyone.

Bruno Finger
link
fedilink
3
edit-2
1Y

That sounds amazing, may we know a little more about your project if you’re ready to share something about it?

@OttoVonNoob@lemmy.ca
link
fedilink
4
edit-2
1Y

It’s in the vein of dragon. Warrior monster, simple combat but the fun is more seeing all the monsters and exploring. I posted some art assets ill share in a moment. Please keep in mind this is a fun hobby thing.

https://lemmy.ca/post/5372244

https://lemmy.ca/post/5319347

https://lemmy.ca/post/1795635

Bruno Finger
link
fedilink
21Y

Right I’m following the Pixel Art community and I saw your 2nd link before. Nice 🙂 Anyway good luck with your project, or rather, have fun with your project 😉

Thank You, when Its done and im old and gray I’ll throw it on Itch for free probably xD

z3bra
link
fedilink
31Y

For the past year, I’ve been working on an online scavenger hunt. It features many tech related challenges on various topics (web, protocols, crypto, stegano, …).

This is the project as a whole, but I had to work on many sub-project to bring it to life, out of which:

  • a Pokemon game (assembly)
  • an online scoreboard (go)
  • an encryption tool (go)
  • a crypto hashing tool (go)
  • a cli interface ©
  • many deployment shell scripts
  • … much more

What I love about this project is that it touches many different topics. I had to setup reverse proxies, complex firewall rules, VPNs, abuse the TCP/IP stack, … I could also work on very useless but fun topics, like creating a tool that answers to ICMPv6 traceroute packets to insert fake hops between the requester and the destination. I’m now close to releasing it, and I wonder what I’ll do when this is over…

I have dozens of projects in varying levels of completion and maybe like 2 finished projects. Here’s my list, steal to your liking because I come up with ideas I want to see in the world, and clearly I’m not a great medium for that:

  • Philotic - p2p network of Python servers based on a generalization of process forking. Every server runs the same file (global scope is initialization) but some id-based guard like an annotation lets them do different things. I designed this to act as a lower layer for eventually splitting an LLM across multiple computers, something very obnoxious to do manually but relatively easy to code.
  • Servitor - Actually probably will continue working on this, it’s a library which makes it easy to use LLMs as “semantic functions”, effectively letting you describe a natural language task and execute it as if it were a normal function.
  • TAO - Type Annotated Objects, more or less CBOR with some personal improvements. 0-0x7f are tiny ints, the first nibble is a type, and the second nibble is usually an embedded length prefix (or signal for a longer length prefix). Being nibble-based and having a dedicated DEBUG type makes it a lot easier to read in hexdumps, and gives twice as many type prefixes to work with. I rearranged the types a bit to be more sane than CBOR (which eg has separate types for negative and positive integers), and also added streaming and varint support.
  • STM/Snow - Structured Text Markup (in-progress name, “Snow” is a bit too informal?), a text serialization format where all data is (un)quoted text, “tags” which are { followed by data or text: data pairs, then }, or “markup” which is [ followed by plaintext interspersed with tags and ending with ]. The mixed positional/named attribute model of tags makes its object model a generalization of XML using JSON-like syntax and I’ve found it to be very easy to implement parsing.
    • My “pie in the sky” dream is to completely overhaul HTML/CSS/JS for STM/simplified CSS/WASM, but that’s never going to happen 😞
  • Munchy - IDL-like language for representing file formats as an executable schema. Eventual goal was for it to be powerful enough to parse textual formats like JSON, which tend to be more contextual. At some point I found a similar project using YAML to define the schemas, but not being a DSL made it more confusing IMO.
  • RetroArch file - A common file format for RetroArch to combine ROMs, patches, cheats, saves, etc into one cohesive format. Never got far with this one.
  • Binary MIME aka contype. I even wrote an RFC apparently? Adorable.
  • LLM modification - A paper I wrote about a potential LLM modification replacing the FF layers with a shared vector database to decouple memorization objectives from semantic and syntactic objectives, resulting in smaller foundation models. Predictably no one cared and probably no one should care, but it might be an interesting experiment to implement.
    • Probably a more useful modification I haven’t seen yet would be to implement kv caching using a prefix tree rather than a per-request cache. That would make semantic functions a lot faster, since it could cache the prompt between requests and it would only have to process the data.
  • Preference vectors - Simple stochastic updating of “preference” and “feature” vectors to transparently associate preferences with content. This would allow people to essentially build their own “The Algorithms”, since the update operation can be designed to create a linear space so you can eg request content close to “my preferences + my mood + heavy metal + randomness”, and share feature vectors on social media. I think when I tested it I made a weird modular space where d(0, 255) = 1, and it still worked. Stochastic updates work, even in a distributed context, because it’s a kind of “simulated annealing”.
  • Wika - Simplified and standardized WikiText parsing (which is surprisingly not actually standardized and MediaWiki essentially defines it as “whatever our PHP parser can read”). Follow-up is naturally a wiki written in anything other than PHP.
  • i2cec - ATtiny11 firmware for bridging the i2c and CEC lines of an HDMI cable so you can send remote control commands via your SMBus to an attached monitor (I accidentally got a TV instead of a normal computer monitor). Never got it to work quite right, timing was very tight.
  • U413 - A unix terminal themed BBS forum with a looong history of makes and remakes and a community getting whittled down to a handful of people.

And finally then there’s my magnum opus, Espresso, my favorite project I keep coming back to time and time again and bikeshedding refining over many years. If anyone else takes it up I’d be ecstatic.

  • Influences: TypeScript, Python, Lua, Rust, C/++, Julia
  • Self-hosted prototype-based scripting language with its JIT written in itself (eventually)
  • Emphasis on simple rules which build up arbitrary complexity, a pathological avoidance of repetition, conciseness, and near Lispian customizability. SMOL.
  • ASCII lexing with unicode support deferred to other stages (compare to Lua, which treats > 0x7e as an identifier - I also treat <= 0x20 as whitespace).
  • PDA tokenization (used to be FSA/regex but nested format-strings required more power).
  • LR(1) parsing with concurrent bytecode emission (ala Lua), AST is built up until it can be converted to bytecode. The most extreme case is extensive destructuring assignment (Rust, Python, [P2392]) which shares a syntax with object literals, but can be treated as LR(1) by keeping track of a distinction between “lvalue” and “rvalue” compatible syntax.
  • All types defined with proto[...T] Super Sub(...args) { ... }, eg proto class Animal { ... } and proto Animal Monkey { ... }
    • The higher-order types include class, enum, union, interface, struct, etc. Compare to [P0707]
    • Note that these kinds are objects, not keywords. They define how to convert the body to a type constructor and prototype chain(s).
    • It took a few months to figure out this is possible by maintaining separate prototype chains for classes and instances.
  • Statements implicitly end, ; is an optional operator to explicitly disambiguate their ending.
    • after operator, x() after y() == (var t = x(); y(); t) - surprisingly useful for conciseness.
    • “Everything is an expression” - loops are generators, eg list comprehension works like [...for(var x in 10) x] == list(range(10))
  • Operator overloads use the operator itself as the method name, eg proto class { +(rhs) { console.log("\{this} + \{rhs}"); } }
  • Type annotations define compiler semantics: Type objects have a delegate() method which define how to represent the variable on the stack. Untyped variables use an inferred type or an implicit any, which wraps a dynamic object. This lets you create objects like int32 while still using the prototype semantics.
  • Recently I thought the syntax itself can be partially dynamic by using static scoping and macros which hook into the compiler when they’re encountered, but I’ve tried similar things a few times and it tends to lead to failure. This would need something like C#'s unsafe compilation distinction to avoid catastrophic vulnerabilities.
  • “Initialization is compilation” - When you run a file, executing the global scope (“initialization”) is treated as a stage of compilation, and the resulting module object is what is saved, not just its bytecode. Compare this to Python, which saves just the bytecode of the module.
  • Lifetime semantics (ala Rust and friends) are still a WIP.
  • Based on [P0709] and Rust’s try! semantics, exceptions are actually wrapped in a returned Result[T, E] type: try is an operator which unwraps the result and returns if it’s an error. Thus you get var value = try can_fail();. Using type object operator overloading, the Result type doesn’t need to be explicitly annotated because Result[T, E] == T | Result[T, E] == T | fail E.
    • fail keyword instead of throw/raise.
  • Really want proper coroutines using PyPy’s continulet/stacklet abstraction. Also maybe delimited continuations as the implementation for panics.
  • Structured process forking.
  • GC based on ideas from this LuaJIT 2.0 GC document.

I could go on for hours with all of the stuff I’ve thought of for this language. If you want to know more, the README.md and ideas.md are usually the most authoritative, and specification.md is a very formal description of a subset of the stuff that is absolutely 100% decided (mostly syntax). I’ve written turing complete subsets of it before. First usable implementation to arrive by sometime in 2200 lmao. 🫠 I can also unpack the other projects if you want to know more.

Holy moley, you keep yourself busy. :D

Something I’ve been wanting to work on is a TUI wizard for configuring software.

The thought is most Linux server program use various config files, and in order to configure them correctly it generally takes a few minutes to a few hours to read through their documentation. But a lot of the configuration boils down to passwords/keys, file paths, network locations, a few different booleans, etc.

So the general idea is, for a program, the developer or the community can provide a config file telling the TUI wizard what arguments the config file needs, and this one program can walk the end user through setup and generates the config files. This would reduce the amount of time hunting through documentation and reduce bugs due to typos or invalid choices.

It could go a step further and auto generate keys or passwords if needed, validate entries (ie if the config needs an IP it could make sure it’s valid, etc)

I recently wrote a tool to make my D&D games a little easier. It’s a web app that lets you load up an encounter’s worth of enemies and keep track of their health (plus extra stuff, like legendary actions). And it does the math for you, which is a huge weight off my mental load.

It would be neat to expand it with an API that lets you load in monsters from a database and calculate the encounter difficulty, but I’m in no hurry. I don’t usually have a lot of energy to code on weekends now that it’s my full time job.

Current main side project is a web music player, using WASM for the UI, because everything else is no fun.

I also have an own, tiny OS automation framework that I’ve been meaning to continue dicking around with.

Then I’ve got a minimalistic note-taking helper program. (My note system is just a bunch of loose text files, and that program helps create those files according to a scheme and allows me to search them.)

Planned projects, requiring larger and larger levels of megalomania:

  • A musical keyboard application, where I can type on my normal keyboard and it’ll play like a piano. Potentially integrating LV2/VST plugins in future.
  • A physics-based game, integrating concepts from general relativity and quantum physics and such. Kind of to help (me) visualize these concepts better.
  • An own Git forge, with ForgeFed integration, WASM UI etc…

Automation framework? Industrial automation or something else?

Ah, probably shouldn’t have abbreviated there. “OS automation” meaning “operating system automation”, as in scripted deployment and configuration of software, similar to Ansible, Puppet, Saltstack etc…

I’ve mostly been frustrated with how relatively little assistance these tools give you. Your IDE obviously won’t tell you what values can be put into a given configuration slot, nor will it auto-complete the right values, if everything is written in goshdarn YAML.
And so, this has mostly been an exercise in creating such a framework in a strongly-typed language, with lots of compile-checks, and which allows you to quickly define own task (in the same language, you use to configure tasks).

Gotcha. I read it as “Open Source”. I’m deep in industrial automation and it’s rare to find a kindred spirit.

Why do you prefer WASM over JavaScript (which is suppose is your alternative for the UI work)? I build a lot of web stuff but haven’t tried WASM yet.

Well, I’m mostly a backend dev, so my favorite part is that I don’t have to write JavaScript. 🙃

You might be more adept at navigating it, but that language is just a minefield of unexpected behaviour and has a massive, complex ecosystem.

I’m using Rust to compile to WASM (has the most mature tooling for that, as far as I’m aware) with Leptos as the UI framework.

You write your HTML and CSS like normal, but JS is replaced with Rust code.

And well, one big advantage is that since my backend is in Rust, too, I can use the exact same models, constants etc. in backend and frontend. If they drift apart, that’s a compile error.
(You do get this advantage, too, if you use NodeJS for the backend.)

But aside from me not liking JavaScript, there’s lots of little things that make Rust a pleasure to use here.
Rust’s sum types (Option, Result etc.) match really nicely with the infos you need for crafting a UI. Like, just yesterday I simply wanted to load a list of songs (Vec) and thought, I’ll do the error handling later, but Rust’s paradigms still eventually left me with a Result, Error> (contains either the song list or an error message).

At that point, I could have still just told it explode, if there’s an error, but then I realized, oh yeah, if I can’t load the list of songs, that Error is precisely what I want to show to the user.

And then you don’t have to deal with horrid ternaries. Instead you get full pattern matching, so my UI code now looks roughly like this:

let song_list_result = load_song_list().await;

match song_list_result {
  Ok(song_list) => 
  Err(cause) => <span>{cause}</span>
}

I did leave out quite a bit of the boilerplate there, so this isn’t valid code, but point is, it’s a hundred times better than passing data and error in separate variables, separately checking, if they’re non-null and never quite knowing what all the legal states are, since both could be intentionally null or uninitialized null or unintentionally null or both non-null. It’s so much complexity that you just don’t have.

And ultimately, yeah, I chose the word “fun” quite intentionally there. You get the cool parts of frontend, i.e. lots of visual feedback and something to show, while leaving out most of the downsides, i.e. fugly code.

There is, of course, different downsides to the WASM/Rust/Leptos stack, like it simply being a very new ecosystem. You can’t yet pull in dozens of component libraries and so may have to build things more often yourself. And it isn’t yet as tried-and-tested as some of the bigger frameworks, plus Leptos is still going through breaking changes.

So, yeah, maybe don’t yet switch over everything at your dayjob, and of course, if you know Rust already, that’s quite the advantage, but overall, I do quite recommend it and feel like it’ll become a lot more relevant in the future.

Thanks for the elaborate reply! All my backend stuff is in Python (Django) but I think there is python WASM frontend stuff too so I think quite some of your insights might apply. Python is not quite as secure-by-design (secure as in I know for sure how my code behaves and where to expect exceptions) as rust but still better than JavaScript so I might look into that!

I am, very slowly, building a Wireguard management UI. None of the ones I looked at do what I want, so I am doing my own. The think I just finished is a magnet: and .torrent handler that sends any link to my central torrent client.

A lot of the actual coding/scripting work that I’ve done recently has been server stuff. I recently containerized all of my game servers with Docker and bash, and I’m now looking at switching from my current janky Minecraft Docker setup to a fancier setup with autoupdates for Paper and its plugins. I’m far from a professional programmer, so it’s been fun to actually hack together useful things for myself.

Create a post

All things programming and coding related. Subcommunity of Technology.


This community’s icon was made by Aaron Schneider, under the CC-BY-NC-SA 4.0 license.

  • 1 user online
  • 7 users / day
  • 7 users / week
  • 14 users / month
  • 121 users / 6 months
  • 1 subscriber
  • 296 Posts
  • 2.15K Comments
  • Modlog