50
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 have finally bashed together the code I need to look at an object/record and create/load a datatable based on it for later loading into a db. I have been hacking away at this on and off for way too long, and am happy to have it.
However this seems to have been some sort of Faustian bargain/monkey paw because i've now been stuck getting the rest of the program to work when normally I could blaze through that.
One day I swear i'll be good at this, but it's not today.
Not sure if it totally counts as a technical project, but I'm designing a gentle introduction to computer science course at my university. The idea is to give students a 2 credit (small course) gentle introduction to a few topics that are likely to get them excited enough to do the hard work. It will consist of some pre-made projects that they just have to take over the finish line to feel a sense of accomplishment.
Right now, I'm definitely doing about a third of the course on 3D printing using OpenSCAD as the "computer science" part. My thought there is that they will exit the course with a physical object, which will be hard to forget. I have a Prusa printer all set to go so that they can print out whatever creations they make. The only trouble I'm coming to is what specifications I need to make to ensure that their objects are both possible and interesting. I don't expect to get into very complicated geometry using OpenSCAD and don't want to allow Fusion/etc because that defeats the programming aspect.
After that, it'll be a game and likely some sort of website. I haven't nailed down the game libraries or genres, but I think I'll give a side scroller starter and make an RPG starter. They can do whatever as long as new logic gets added. Not 100% sure what for the website yet, but still probably pretty basic.
I'd be interested to hear ideas for such a course. What would get you interested in CS if you were a stone cold beginner?
I'm someone who's bounced off programming more than once, because I have a hard time seeing how I get from "hello world" to something useful. I don't have a particular interest in game development, which I feel tends to be where the "get people excited" portion tends to land. If you could think of some examples of ways that people could use programming to make their life easier and automate boring things that you could integrate into the class, I think that could get a certain subset of people hooked. Who doesn't like a shortcut?
As an aside, writing curriculum is hard. I'm currently in the process of revising my employer's terrible onboarding process, and my brain is fried. Huge respect to people to actually do that for a living.
Completely agreed; show me a repetitive task and I'll show you a way to make it easier, particularly involving browsers.
I was excited to learn that Chrome's devtools now has the ability to record and export Puppeteer scripts natively (Devtools' tri-dot menu > More Tools > Recorder). It helped me convince a colleague to look into automating some of his occasionally repetitive work.
It truly is very hard. You nicely highlight one of the particular challenges here in that we certainly can't cater to everybody. Thanks for the thoughts. I'm not sure if much automation is going to hit with the demographic since they barely can operate their own computers at this level, but there may be some adjacent ideas there.
Check out Godot if you teach some game dev!
I agree with what ispotato said. Very often it's considered that game development and other things where you can see a visual product are the most attracting. My first project (following the book I was using to learn at the time) was a game, and I didn't really enjoy it that much. Not to say it's a bad option, it just might not be for everyone.
For me, and a fair few people I know, it was the ability to automate things and create your own applications to make your life easier that truly brought me into programming. I started off with Discord bots to offload moderation work, then made a bunch of very niche desktop software (both CLI and GUI) for myself, and recently to browser extensions & user scripts (once again to implement QOL things).
While it may not be extremely suitable for a beginner course, I'd recommend giving it some thought. Maybe near the end of the course (where they've learned a decent bit about the language and how to use it), ask them to come up with one simple digital task that annoys them. Perhaps it's a repetitive task, or potentially it's something they have to remember to do every X days, etc, then create something to automate that.
Unfortunately, depending on the task, it could require varying skill levels. I'll use Python as an example here since it's more beginner-friendly, but same goes for any language. It could be a basic problem solvable with a simple script and potentially built-in modules, it could also require input control (pyautogui), maybe it'll need web tools (e.g. Selenium & BS4), maybe it'll need a GUI library (e.g. tkinter or QT5), etc. I think it's worth considering, it will show a very practical use for programming and also give them something they can use to make their own life easier. They can also continue to improve that software themselves even after the course if over if they choose to continue using it, likely learning more in the process.
EDITS: Minor rephrasing to improve flow and grammatical errors.
Automation is certainly a good hook for already technically competent people, but these won't be. One of the surprises in education is how many entering students can do things that only give the illusion of being technically competent. I keep being told about (local) kindergarteners using Scratch and high school students learning Python, but have yet to encounter an group that retained any of it. Conversations about automation work very well with students in later courses and less well in the early ones.
But on top of that, I can't scaffold a thing that makes each individual student annoyed, and anything these students do will require quite a lot of scaffolding. I could see doing some kind of API slurping as the webtech section of the course, but would have to find an example that caters to everybody. That could be something along the lines of price tracking or home automation via API.
I 100% agree with both replies that games aren't a thing that quite everybody cares about. They are something that can grant instant gratification, and that's more of the point here.
Two things, both related to EVE Online. One tool is a station trading tool that I had made like 10 years ago in C# WPF. It automatically parsed CSV files created by the game and showed me some basic information about items I might want to trade (profit, cost of sales, margin). I've started playing again and missed my tool, so I decided to remake it as an electron app with vue3, mainly for practice as that's what my frontend devs use and I want to be at least semi proficient.
The other tool is a utility that regularly queries my trading character's API data and turns changes between calls into events, with the end goal of sending those to some analytics platform and make some pretty graphs for fun. This is written in dotnet core 7
I'm working on another WebExtension for Tildes called Tildes Shepherd. With all the wonderful people joining and asking a lot of questions, I thought, maybe we need something alongisde the documentation and previous discussions to point at, something like a collection of interactive tours that show you around and explains stuff.
So... here's a teaser of where I'm at so far.
The name comes from the library Shepherd.js that's made for exactly this kind of thing, guides and tours. I'm kind of thrilled with how this is gonna turn out, because Tildes is so focused on HTML and only minimal JavaScript it's super easy to insert mock examples of things. Also, because the theming system on Tildes uses CSS custom properties thanks to a particularly distinguished gentleman (and Deimos, of course), I can simply use all the same variables and styles as Tildes and have everything look exactly like it does on the site. Awesome!
Slowly but surely working on a web app using the unofficial NHL api. Going to be able to see standings, league leaders, team info (roster, schedule, general info, general stats), and player info (basic info, general stats). Using this as an opportunity to shore up my React skills. Once everything is complete I might create a backend using .Net for an account system (having a favorite team and limited favorite players).
I'd be very interested in this tbh if you ever make the API public - Also go Cats
I write ruby/rails all day for work. Been working on learning rust. I’ve done bits of C in the past but want to explore more systems level stuff. Ironically I’m attempting to build a web app with it so I can first map the concepts I already know. Enjoying it so far.
People make fun of Rust for being a fad or pushed by too many developers, but I think it's a perfect language to go deeper in the lower levels of code. It's relatively sane with a lot of high-level features that you can find in modern C++, but still manageable for small to large projects. The compiler is a dictator which is very good because it forces you to write good code (or at least not so shitty code).
I learned it a bit to replace a log parser that was written in Python, and the result was very good: fast program with every error handled properly.
Can I just say that I certainly chuckled at your calling the compiler a dictator?
Specifically, though, what makes it so dictatorial in Rust, as opposed to, say, C++?
I've been learning Rust as well, did C++ in College but have been a Frontend dev since then. It's been a lot of fun, and a good change of pace. The Rust book has been super helpful, although I'll admit borrows and references still trip me up.
I, too, toil in the Ruby mines all day. What resources have you been using for learning Rust? Anything good that's like "Rust for Ruby devs" or something that skips the basics of programming? I've been a little curious about it for a while now.
Really just the rust programming language book which has been great. It’s definitely a little hand-holdy for people new to programming but I just flew through some of the early chapters. I happily spent some time getting my nvim set up to be a happy place for rust programming.
Does a semi-technical role count? I'm in a data management role where I'm more or less a human ODBC layer between the operational data we produce how it's packaged in a way that matches the mental models of our business that a bunch of VPs have. A much-delayed but still open-ended project to restructure a bunch of inputs without changing the output by a byte received a "this must happen right now" deadline a couple of weeks ago. After having the SQL kicking around in my head over the last year, I came up with a simple solution that I'm not allowed to tell anyone. My managemers think it's better to work on a riskier, more time-consuming solution that includes a second team because that gives us someone to blame if it goes tits up. /vent
Currently working on a text based MMO. Quite fun, backend is written in Go with a frontend in Svelte (because I wanted to try something new).
So far everything is working good except the database planing when adding new features. I mostly struggle when I should just add a new column or create new tables, I don’t want to make stupid decisions which I have to revert later on. So this part is where most of my brain power is needed, sadly.
A text based MMO sounds really intriguing. Do you have any more information about your project?
No, not currently. Still at the start.
The main way to approach this is by asking:
"Is the data in the new column completely determined by the primary key on the table?"
If yes, add it as a column. If no, add a new table based on the key that will determine this data.
Unless you're working with a really huge database or designing one for a special purpose (like a data warehouse), sticking to 3rd normal form is the best approach. You can always de-normalize your database later if it becomes necessary.
That sounds fascinating. Is it going to be a persistent browser game like Legend of the Green Dragon, or more like a MUD with text input?
I've got a side project (which I barely touch and have barely made any progress on) to develop a text-based single-player RPG. I was originally using C because I wanted to be able to run it on MS-DOS, but I ran out of patience for it and started experimenting with Go instead. I should pick it up again.
The idea was basically a mix. Elements from MUDs but with less controls that it's playable.
How do you like Go so far?
Sounds like a cool project.
Go is pretty good. I wish the standard library could be a bit more comprehensive. I like that the language is very simple compared to, say, C#. It also supports more platforms, like FreeBSD.
Huh? Isn’t the std library really big compared to other languages? What are you missing?
And yeah, I really like the simplicity. Nearly everybody can read the code without a problem. The error handling is a bit weird at the start but it’s getting better over time imo.
I guess it depends on which language we compare it to.
I've noticed that compared to C#, the Go standard library lacks some useful data types like a stack or hash set (essentially a keyless map with similar performance).
Therefore I've built my own stack class in Go, or used janky solutions like creating a map of
struct{}
to emulate a hash set.I'm sure there are mature community packages to add these, but I still thought it was a little weird that Go didn't at least have a stack type.
Go's error handling is definitely a bit odd. I have to admit I prefer exceptions, but Go error handling isn't so bad considering it's functions can return multiple values (e.g. a result and a potential error code). I also like that it's fairly consistent throughout the language.
I quite like Go overall.
I mean a stack is easily implemented with a slice, isn’t it? Even easier with generics, it’s a simple lifo. 2 lines(?)
HashSet is a valid point, probably because of the missing generics for a long time. That’s indeed missing, would probably use a simple map for that.
I haven't used Go 1.18 yet, so I haven't begun exploring generics. A 2-line solution sounds simpler than what I was doing in prior versions, but maybe there was a simpler solution than mine all along.
Nonetheless, I thought the stack would be a good candidate for standard library inclusion so that there would be a single standard implementation.
I've been looking for a Bill Of Materials app that I can self-host. A while back I was suggested InvenTree but I found it far too complex for my needs and has some questionable design choices like having to restart the app after changing the theme.
I started working with Deno and one of its web frameworks, Fresh, a couple of weeks back. I'm a glutton for punishment when it comes to new front-end stuff, and I have bounced between quite a few over the years. My two latest kicks were the Deno ecosystem, as well as Astro and its ability to pull in components from any front-end library and consolidate the functionality into a static site. I guess I just like static sites too...
Fresh looks interesting, I might try it out for my next project!
Now, I just need to find a new project to work on...
Perhaps a project-idea generator? :D
One direction I'd suggest looking towards is something that could supplement a niche interest/hobby of yours
I have been working on famd. I had moved it to alpha just a little while ago. Today I committed tree maturity and a ping save feature. Both items on my todo list. I am now working on adding barn and silo upgrades. Just got to come up with the items for it and a curve for the costs. If you haven’t guessed I like to talk about it, but I don’t want to overwhelm everyone with posts/comments about it.
I'm working on trying to combine as many machines as I have in my place into a frankencluster to learn more about k8s on!
I'm using Rancher for cluster orchestration, Ubuntu Server for x86 machines, and k3s for Raspberry Pi's. So far I have set up a Gitlab-CE instance and configured gitlab runners to run in the cluster (succesfully!)
I'm working on a web soundboard for me and my friends, because we always shout random inside jokes based on some specific clips at each other.
It's using SvelteKit for front- and backend. I've implemented dynamic routing (e.g. you can create your own board combination by linking to
/board1+board2
, each board holding multiple sounds grouped together), otherwise a backend wouldn't even be needed. I'm basically hosting my own api made out of json files that link to mp3s (generated from clipped mp4s on git push) and dynamically generating routes (e.g./board1
, or/board1/sound1
).I really like how Svelte allows a single code base for everything and I love the approach to gently expanding/using existing JavaScript syntax they've taken, as opposed to React, for example.
That sounds excellent, mind sharing a link if it's OSS?
Something like that would've been useful back in the day (my roommates and I ended up making little Autohotkey scripts) but considering my affinity for sound drops I'm sure I'll be curious about it again at some point!
As the code is now, it's too littered with personal references to be made public, but I can post the code that enables grouping boards togethr (if you're familiar with Svelte, otherwise it won't do much good):
But it is cool to know that more people are interested in stuff like this!
/src/routes/[group]/+page.js
A friend of mine has invoices to send to clients, and I would like to help him for this. Ideally, I would write a program for Windows with a small GUI, a few buttons, and a SQLite database.
I'm a bit confused by the language I should use for this. I know C++ pretty well but Conan and Qt have issues on my computer (macOS), and even though Conan is supposed to work out-of-the-box, it's not working at all.
I'm looking at the Rust alternatives but I will have to choose one of the hundreds GUI frameworks in https://www.areweguiyet.com/ and it's confusing.
I could also do something in Python with PySide, or any other language, but I would prefer using a language I know (C++) or something good for the future (Rust). Wish me luck...
I don't have much experience writing desktop GUIs, but back when I did, I used C# and .NET framework. It made the UI forms very easy. Another simple option is to do a web app, where you can write the UI in HTML with a Javascript framework which will work naively on any device. These are both approaches that I took when starting out. For Python, I'm actually a big fan of Django for rapid prototype apps because it takes care of a lot of the boilerplate stuff for you (eg you don't have to write any SQL, you just declare everything in Python classes, and treat them as objects and Django's ORM takes care of all the SQL for you.
It's been a long time since I've used C#, but I used to love WPF. The XAML layout format made a lot of sense, and you had (have?) cool tools like Microsoft Blend for animations. It was such a big upgrade from WinForms haha
Ahh I think I moved away from Windows-based development before I got a chance to try WPF. So WinForms was pretty much all I knew. I was writing mostly utility stuff so it didn't need to look pretty!
If you know for sure that this will only be used on Windows, PowerShell May be a good option. You can spin up a gui for it fairly easily using the built-in support for Windows Forms. I’ve done this a number of times when adapting a PS module for use by less-technical colleagues and it worked very well.
Not sure about SQLite support - but .NET has support for it, and PS gives you full access to .NET, so I’m sure there is a way.
If you like the simplicity of immediate-mode, egui and imgui are quite popular.
I've been maintaining a small GUI application in Rust for a while now. I personally didn't like the idea of immediate-mode, so I went with iced. It's been mostly good, but it's very much a pre-release product and they periodically make breaking API changes, which can be a headache. Can't complain about the performance or how easy it's been to build artifacts for any target OS.
Finally, if you don't mind web dependency, I've got some friends who say good things about tauri.
Those are the four frameworks I've personally heard the most about. Hopefully that provides a slightly less alarming start to your search than the giant list at areweguiyet.com.
Thanks for the advice. I was reluctant to use immediate-mode GUIs but I'll see again what they are capable of. It should also give me one good project for testing Rust.
Teaching myself Godot4 by making my autistic daughter a game that acts like a 3D-side-scrolling endless-runner (with no dying/fail-state) mixed with a typing tutor, to teach her to type on keyboards without the frustration she gets from normal typing games that make you die/fail if you’re not fast enough.
I’m purposely not using any tutorials and just the Godot docs, to try solve the basic problems myself, and not just copy other people’s solutions.
It’s a fresh change from doing Unity stuff where you generally just copy the pre-existing “best way” of doing everything. My solutions are probably horribly inefficient and “wrong” but they work, and the compiled game is no different to doing things the “right” way.
This sounds really cool, and you’re learning way more by not copying some tutorial.
i love doing that (outside of work of course). it’s very fulfilling. i love that idea of a game for your daughter, though i have to wonder, how will she learn how to type properly if there’s no failure state?
The fact that it’s pure “fun” without frustration at losing/dying means she plays it so so much. Eg she’s probably put 30-40 hours into the single-level 2D demo I put together that only has you doing 1-letter challenges, and it’s gone from her spending 10-30 seconds hunting for the right key on the keyboard, to her now knowing exactly where they are and going “I know this one, too easy!”. The fail state is not being able to find the key, but by not having a timer that runs out and goes to a “you lose” screen it means she can relax and just take her time searching the entire keyboard.
Her pure excitement and how good she’s gotten is the whole inspiration for putting effort into making this a “full” game with bigger words and more levels.
The two main projects that I'm intermittently working on are komorebi which is a tiling window manager for Windows 10/11, and Notado, a web service that I started running mainly for myself (now open to other users), which I use to save comments and highlights from the web and then share with others.
I do mostly backend development, but have done a bit of tinkering on the frontend (mostly Javascript/jQuery, and some Angular). I want to learn React and/or Vue, so my next project for work will be a log searcher/viewer for one of our systems that will be backended by Splunk, where Splunk's built-in dashboards won't suffice for the experience that I need.
Sounds like a good way to get into frontend and make something immediately useful. Do you plan on a standalone application or a browser extension?
Yeah, I've found that that's the most effective way for me to learn a new language or platform. I recently did the same sort of thing writing a Kubernetes controller to sync passwords from our password storage.
I'll probably keep this as a standalone web app. We have too much variety of technology and platforms in our company for me to put this into a browser extension ecosystem.
React is a game changer. I used to write my websites with JavaScript/jQuery. I can't even imagine trying to go back. I actually used to hate doing front end work, and much preferred the backend, but React/Vue made the frontend so... fun? I actually really enjoy doing frontend work now.
I'm sure you're more than capable on your own, but if you get stuck on a React or Vue problem, I've got decent experience with both, feel free to shoot me a message :)
Awesome! I'm really glad to hear that Frontend can be fun. I'm looking forward to trying it out. Since you seem to have experience with both React and Vue, do you have any preferences between the two? Does one work for certain types of projects better than the other?
I personally prefer React, though Vue 3 looks really good. They both have pros and cons, but either are great options for building a frontend! React is a little weak when it comes to forms/input. I think Vue does a better job out of the box in those situations. I tend to prefer how React does reactivity versus Vue, it sort of "just works" where Vue feels a little more clunky in terms of overheard. Look into both of them, they're both great!
I've been reworking how I stay organized at work. When I get a ticket, I create a new tab group in Firefox and group all tabs related to it. It's really helping me keep things together and easy to refer back to. The one issue I keep running into is that my notes, test data, screenshots, etc. all exist outside of the browser, so those don't stay as organized.
What I really need is gigantic cork board in my browser that I can quickly throw notes and images up on. But I want the freedom to drag these notes/images around the board. I'm sure there are 3rd party solutions, but I'm not keen on giving yet another company my info, especially work info and especially not for something as simple as note-taking. Might be a FOSS self-hosted solution, but ehhh..way more fun to do it myself!
Over the past week I've been struggling with getting dragging to work in vanilla JS. My idea was to use absolute positioning to do it, but the performance was super lacking. And every example of it I found was missing something. If I couldn't get dragging working, then I wasn't ever going to make any progress with this before I lose interest in the idea. So I did what any struggling JS developer does -- I found a library! interact.js. It handles all the annoying crap for me in a way that lets me easily fetch/set positioning data.
I currently have a proof of concept working where I can drag blue boxes around and their positioning is stored/restored via localStorage. Eventually I'll be creating a proper backend for this and store it in a small database where I'm hoping to be able to store multiple cork boards. My thinking is each work ticket will have its own cork board that I keep archived for future reference as needed. Not sure if I'm going to write the backend in Node or PHP. My instinct says Node, but I haven't written any PHP in about 10 months now, so I'd like to keep those skills fresh.
Right now it's just an HTML file with some cobbled together JS to make it all work, but eventually I'll be moving it to React as a learning exercise. We're transitioning from AngularJS (like the ancient 1.x version) to React 18 at work, so this will be a good opportunity to learn.
I'm curious, do you really think your notes belong into a browser? I also organize my tickets into tab groups but I abondened the idea of notes in my browser years ago. I find that an additional monitor and good old pen and paper work much better for me. I'm also asking because I think that notes should be persistent, tagable, easy to find and easy to sync across devices. And that's a whole lot of effort for a side project. (I don't want to talk you out of anything, I'd just like to hear what you think about it.)
I think for me personally, yes the browser makes a lot of sense. If I'm already keeping all of my other reference materials (ticket links, test URLs, google docs, etc.) in the browser, I should probably keep the notes/screenshots there as well, rather than scattered around my desk and computer. Otherwise I'm going to lose something. I also have ADHD, which means two things:
But we'll see :D
Okay, seems like it does make a lot of sense in your case. Good luck with this project, I hope you find the motivation to keep going and finish it :)
Created my first ever pull request on github, but the person I forked from hasn't made any contributions in the past 2 years, so I might have to go to the person they forked from.
Also created this pretty neat collection of miscellaneous powershell functions and snippets, and figured out some stuff about using wpf with powershell
I'm new to Tildes, sorry if my comment feels a bit rude.
I wrote short scripts in PowerShell but never functions like those in your PowerSnippets. Maybe you could add a section in the README to explain how a newbie like me could use those things. There is no main function and I don't know how I could use your code, some explanation would help.
Sorry for the late reply, I forgot about Tildes for a while.
The snippets (contained in Snippets.md) are just examples of how to do some things, they do have descriptions of what they do and you can run them directly to see what they do.
The functions, which each have their own file, also each have an .Example tag in their comments showing exactly how they can be used.
Finally making progress on something I've been bashing my head against for a while - a standalone program to connect to a WebRTC stream output by vdo.ninja and save it to disk. The big breakthrough was to switch to Go and start using the Pion packages instead of trying to use GStreamer and webrtcbin.
I've been yearning for some simplicity due to a looming deadline and the resultant increased pressure at work. I've also been wanting to learn Go, so I've been taking some time to make some small terminal apps in my spare time.
Right now I'm working on a bookmark manager. It's pretty basic (right now it just has basic CRUD operations for the bookmarks, and the ability to import/export the database from/to JSON), but making it has been a nice break from the stress of work. Plus it's been a good introduction to the language, and a reminder that making programs for myself has its advantages :)
Been spending a lot of time recently working on methods to derive network representations of multiple skeletonised silhouettes of biological things. That now works really well (finally) but I've had to go back and work out a new way to generate those silhouettes as my old method doesn't work with the new fieldwork techniques.
Looks like I might need to learn how to design, train, and run u-nets, and I just have no talent for machine learning right now :'(
You're still better off than me.
ML stuff makes my head spin.
The concept and applications are really interesting but the math deters me from it.
It really is wild, though it also does seem like it's decently easy to use without fully understanding the linear algebra behind it.
That said I'm very much a mechanistic modeller and so anything that feels like a black box makes me feel a bit icky inside.
I may be misunderstanding what you need to do re: silhouettes, and maybe this isn’t suitable for your project, but have you tried the SegmentAnything? There’s a new version of it with incredible detail.
Very curious about your project - would you mind elaborating on “ network representations of multiple skeletonised silhouettes of biological things”?
Ahh a good recommendation and one that I have tried, but it doesn't perform super well on stringy subjects compared to big blocks that you're trying to segment. I did actually throw together a quick jupyter interface using SAM for really quick mask generation for art purposes!
Didn't see the new version of it though, maybe I'll give it another look as an alternative binariser module for my pipeline, thank you for the pointer!
And absolutely, though this is still unpublished so I've possibly gotta be a little vague. Long story short I'm working on automating the digitisation and analysis of spider webs. As a part of that it's really useful to be able to represent the webs as a set of line segments for trait extraction. Hence I now have some cool pixel-level analysis and traversal techniques that allow us to find the places where silk joins other silk and join those up.
These same techniques apply well to anything that has that same "long and thin" structure, so I'm also applying parts of it to tree structure (if by any chance someone here knows lots about tree QSMs please hit me up) and other systems like that.
Tldr: I'm an imaging biologist who uses photos to derive important structural traits that we care about :)
If you’re willing to go through the effort of labelling your dataset I’ve had decent success training Unets with relatively small datasets + data augmentation for image segmentation of blood vessels.
I am currently lying on my bed manually labelling datasets! At 24 megapixels it does take a while though :) Thank you, that is really good to hear that multiple people have had success with the u-net approach!
Out of interest, did you implement it in keras? And what augmentations did you use?
Yeah I used keras and pretty much just recreated the model from the original paper. Though I’ve also heard good things about the Unet++ which basically just adds additional skip connections.
For augmentation I only used reflection, rotation, and some noise addition. For my work I found that changing the scale to any meaningful degree was negatively impactful, though you may find otherwise.
Ahh yeah same approach then! Unet++ looks really cool, and not too hard to set up once you have the basic structure in there.
My images have a potential gravitational component which might limit me in whether I can bring in rotational augmentations, though I think that with low training sample sizes it's probably best just to augment as much as possible. I've got a lot of pixels to work with per-image, so possibly rescaling might prove somewhat usable in my case.
Thanks for the pointers!
I’d be interested to see if the gravitational component would affect anything. I’m really not sure.
If your images are rather large I’ve also had some success with tiling the original image before feeding it through the Unet. Lowers GPU requirements massively. Though due to the convolution the edges of the tiles can get messed up. I had to write a script for tiling that overlapped each tile and reduced the convolutional artefacts. Also means that the dataset is much larger than it would be otherwise.
Ooo that's a good point about convolution adding edge effects! I literally just finished working on a tiler/slicer/augmenter for preprocessing, but I should probably give an option to tile with major overlap.
Also had the wonderful realisation today that you can easily apply affine transforms to 4D matrices, so I can just stack all the tiles together and rotate them with a single matrix multiplication. That was exceptionally satisfying!
You should really only need to overlap a few pixels, I never got around to it in my implementation it may also be worth blending the edges of the tiles together as well. It’ll just make the tiles a bit more homogenous when put together.
Also if you’re training on tiles I would add contrast variation to your augmentations, otherwise it can overtrain on the exposure of each pictures set of tiles.
Thank you this is amazing help, seriously!
I've since added some extra logic to the slicer so you can either suggest a number of samples to try and take from an image (it usually takes a couple fewer because of...many reasons) or specify the number of samples you want to take on both dimensions (such that the total slices is n^2). Either way there's now loads of ways to slice up an image so I should have better tools to dial in slicing settings later if I end up getting dire fits.
And that's a good idea, though this does have a fairly restricted luminance distribution shape (as the fieldwork methodology specifically attempts to maximise Weber contrast), so I'll need to be careful not to blow that out with too much variation in RMS contrast.
Out of interest, are you a computational biologist?
You sound like you’ve got a really robust platform now I’m glad I’m of some use.
I guess that would probably be the closest thing to describe what I did. I did the software and analysis for a lab that focused mechanobiology. So most of my experience is with very specific analysis of cellular imaging.
I’m actually a biomedical engineer by trade. Not that I’ve ever actually worked as one. I’m now working in the defence industry as a signal analysis engineer.
It's definitely come together at this point, you've been invaluable.
Ahh that's honestly what most people who do imaging in biology specialise in, I've found.
And wow, a bit of a transition there, but at least one with a lot of interesting problems to put one's brain towards!
Honestly I just found any of the ‘biomedical engineering’ industry jobs super boring. Pretty much just turn into glorified tech support for existing products.
There’s a weirdly large amount of overlap between radar & microscopy data, and it was a way out of being stuck in academia for the rest of my life so I went for it.
Do you mind if I ask what your specialty is?
Yeah that was sort of the vibe I got from that!
Also (amusingly) my grandfather was a radar technician and early computing guy, and used to go over to talk to Yates (as in "Yates' correction to the t-test") at Rothamstead to talk about weird statistics he could take back to radar from biology. And good on you for getting out, I personally came back in from industry so we sort of switched over I guess.
I'm a computational biologist and imaging specialist really. I am usually focused on heuristic and mechanistic analysis of signals rather than ML and phenomenological modelling (I like knowing what all the knobs and dials in a model actually mean). Currently I predominantly work on spider webs and automating data collection from them.
Honestly I completely agree with your takes on ML despite my experiences with it. It really rubs me the wrong way just kind of throwing my data into a black box, even if it’s a very big black box that I designed.
And sure it has its uses, I reviewed a paper that used a small CNN to solve an ill-posed inverse problem. And sure it appeared to work, and was incredibly efficient computationally, I just can’t bring myself to trust it, tools like that are so easily misused. I’m not going to trust the outcome of a paper if the analysis is entirely driven by ML.
Yeah precisely, in the end it does pattern matching exceptionally well, but we have to be super careful when interpreting the results to make sure we do not overstate the generality.
That paper sounds absolutely fascinating even given the nuance. Do you happen to have a link to it?
Also an aside: I haven't had a conversation this long and interesting ever in over 10 years on reddit. Reminds me so much of my old forum days!
It’s the issue with and machine learning/ai they’re such useful tools but the people using them tend to be completely blind to what they actually are. LLM are a bit far from my personal expertise but I see a similar trend which the misuse of the gpt models now that they’re ‘public’
Sadly the paper was a prerelease, I’m not sure what actually happened with it, I’ll have a look though and see if I can find a copy.
Honestly it’s the same for me, I think I made a grand total of one post and about 5 comments in just under ten years on Reddit. I’ve been amazed at just how conducive this platform is to meaningful conversation. Also just the chances of stumbling upon someone with experience in a somewhat similar and relatively niche subject matter is amazing.
Yuuuuuup! People see it like magic rather than like a tool that you need to understand in order to effectively use. The thing that scares me is that ChatGPT is exceptionally coherent and convincing. But like... Doesn't know things.
Thank you! And if you do find I'd love to take a look!
And yeah, this is definitely the joy of a tiny platform
Sorry about the delayed response, I’ve been travelling the last week or so.
It’s really worrying just how coherent it has become, I don’t think I would have believed such a thing even a couple of years ago.
It is such an amazing tool, that has been bastardised by high schoolers using it for homework and for people that think that it’s the new Google. I get that openai need to have a product and all that, but it’s just so dangerous.
Don't worry! I've also been going all over trying to buy a house so I can't really judge.
We're spending a lot of thought right now (as a collective teacher class) to try and work out the best ways to teach in the era of shitty LLMs. Right now the most coherent strategy seems to be to use other strategies of assessment to mitigate, alongside running essay questions through ChatGPT yourself to have a look at the type of thing it tends to generate.
Also honestly, a lot of the time you know what your students are capable of, and thus if you see something wayyy out of their usually attained level, you take a look with more detail.
I don't envy you being a teacher in a time like this, I knew so many people that would have used them for everything. Wouldn't even know where to begin dealing with something like that.
I think it would just hurt to see it happen, that they're so willing to take the easy route rather than actually learn. Though I guess that's been an issue for decades now.
Wow, very cool.
I'm really curious about the pixel-level traversal and how you model the structure after analysis - like, do you end up with vectors describing each line segment, etc.
But I'll not press you given its in-progress work. Also, I don't really know what I'm talking about heh. Please do share when you publish!
The pixel-level traversal uses the context of the immediate 3x3 grid around a given white pixel to determine which directions you can leave a given node. As we're working on a skeleton, we know that we will usually start at a node based on a pixel with 3+ neighbours that are white (termed in my work as a 3-node) and that it'll be joined to a run of pixels that only have 2 neighbours: where you came from and where you're going to (aka 2-nodes). Thus you iterate out in a direction until you hit another non-2-node and you know that the start and end nodes are joined by a path in the image.
This allows you to know what the distance along the path is and remember that when creating the edge object linking the two nodes.
You end up initially with a standard graph consisting of nodes and edges, but those both have extra attributes that allow you get useful biological data out of the web representation. Given that the nodes have location information and the edges join nodes, treating them as a formal light segment is easy and opens the door to mathematical analysis rather than relying on the pixels any more.
And haha I shall, don't worry I'm not too worried about people trying to scoop my work. My field is small and there are very few people who do what I do really, plus the real devil is in the application of this technique to Ecology.
Thanks so much for your interest by the way, it's really fun to come and chat about all this!
SvelteKit + Cloudflare's D1 (Edge-based SQLite DBs) and R2 (native storage/cdn).
Game changer for the web if you ask me. Serverless, edge-served websites created in a single unified codebase.
The longer I'm using this stack, the more I love it. Not to mention the price difference from cloud webapps + db.
Posted about it in another thread, but I've been working on a desktop environment using SvelteKit. It's been a really fun, relaxing project. Have a window manager, simple desktop launcher, read-only file system and a few example apps built out. Looking to build out a application design system (like GTK) and possibly a way to incorporate user create applications. Would also love to find a spot to use Rust+Web Assembly since I've been learning Rust lately.
a desktop environment using a web framework? how does that work?
Maybe calling it a DE is overselling it, but basically it acts like a regular desktop environment within a website. There's a desktop with icons that launch applications, those applications are wrapped in moveable/resizable windows (Applications are Svelte components that are async loaded when launched). The public folder is used as a "filesystem" that you can browse and open images/documents/etc with a file manager application.
It's still pretty barebones right now, but it's been a lot of fun to work on! Here's a screenshot Imgur.
oh i see what you mean, honestly that's pretty fun and cool!
Thanks! It's been a ton of fun to work on. Planning to use it as my portfolio (links on the desktop, Resume in a documents folder with a PDF viewer application, a blog application, etc).
We recently had a hackathon at work. Our idea was a little boring but still useful imo. My company is in the business of value added resale (VAR). So we take orders from customers, and place similar orders with vendors to get the hardware before either assembling and configuring it in our warehouses, or sending it right to the customer. My team takes care of the automation and support around sending purchase orders to our vendors. We typically receive an acknowledgement and order updates from our vendors relating to these purchase orders. On occasion, for whatever reason, sometimes the acknowledgement we get back does not match up exactly with what we sent. This is a problem, because it often goes unnoticed until someone doesn't get everything they needed, and they waited six months to get their stuff.
All that to say, my team spun up a workflow in the backend to capture these purchase orders and respective acknowledgements / statuses, and run a comparison on them. It automatically emails the buyer if it finds a discrepancy, which in turn takes them to a UI that shows the difference. I built the UI by myself which I'm very proud of. Lots and lots of Vue 2 which I wish was Vue 3.
We did not win, but it was fun to work on something that felt really important and "groundbreaking" like that.
I was working on a project related to Ikea, but I think I'll abandon it
Ikea has 3D planners used to create your furniture by assembling parts and customize them, like this : https://www.ikea.com/addon-app/storageone/besta/web/latest/?range=besta&uiPlatform=web&locale=en-US#/planner?vpc=MJZRSS
You can save your design and it gives you a code (MJZRSS in this case). These codes are not private and they're just a sequence MJZRSS, MJZRST, MJZRSU, etc.
My plan was to save a design, then generate every missing ID, get all the data from their API and make some kind of library of every design made by users.
The main issue is that Ikea operates in several countries, and codes are not linked to a specific country. So you could try to open this MJZRSS design on Ikea US, FR, UK, etc. and depending on the country it'll open fine OR it'll crash, because some parts in the design aren't available.
I have found a way to check for the parts availability in a country, but it means making 1 request per design, per country, per day... So I won't do that!
That's a cool idea, like a gallery of user created designs? Is there a way to create a visualization from the IDs using their API? Honestly didn't even know Ikea had a publicly available API.
Yes that's the idea
It's not really a public API that's your supposed to use like this, but you can just see what requests are made when using the planner and figure things out. You only need to provide their static api key and it works fine.
I've been working on a very simple (and insecure) network-local file server written in Nim.
It was fun learning about all of the different webserver libraries and even making small contributions to some of them.
It started out being written in python but distributing python was a nightmare and I needed a non-technical person to be able to run, configure, and host files from it. Ultimately moving from Flask over to HappyX (uses async) and then Mummy (uses a multithreaded scheduler)
I was able to condense it into a single binary (It has an svg icon embedded into the binary to serve). Just drop it into a folder and double click. It'll create folders for files and logs on its own and then open the host's default browser to localhost. If you add files to the "files" folder and then refresh the page they'll show up.
For technical users it allows specifying the host address and the port on the commandline when launching the program, and an option to not automatically open the browser. Host defaults to 0.0.0.0 and port defaults to 80.
The
--no-browser
option is currently required on linux, or at least it is for me since firefox refuses to run in sudo mode (which is necessary for running the webserver).If anyone has a suggestion to circumvent this issue, I'm all ears.
Its main purpose is just so I can share my PrismMC instances with my brother since we play on a modded LAN server, and any other misc files we need to share back and forth.
I’ve been indulging in building custom keyboards (both hand-wired and using Gerber files from others to order PCBs) to find the most comfortable and compact setup I can. I’ve built a Dactyl Manuform, Hillside, Klor, and an Avalanche so far. I like that it’s kind of a nexus between my other hobbies like microcontroller programming, 3D printing, soldering, and so on.
One of the projects on my list would be designing and building my own mechanical keyboard. I'd love to tinker with all the design steps. The selection of full sized keyboards in a UK ISO layout is a lot more limited than ANSI ones are. I'd really like to make a full sized (maybe with detachable 10 keys?), wireless, extensible usb, knob/roller inclusive, hot swappable, UK ISO mechanical keyboard.
Post some of your custom keyboards on here. I really liked browsing /r/mechanicalkeyboards
As someone without much exposure to ISO keyboards, what are some of the biggest differences. I really am ignorant here, the only thing I think when I hear ISO is an oversized “enter” key lol
It's just what I'm used to mainly. I don't want to switch to ansi and have all my keys in different places and my muscle memory won't keep up. I get frustrated typing on laptop keyboards where keys are slightly different so I wouldn't want to fork out for a fancy mechanical keyboard and hate using it.
Enter key is bigger, left shift is smaller and leaves room for the | and \ key over there on the left, I think having the @ key on the 2 key is bonkers. Having a dedicated # and ~ key is super useful for Tildes. As I used it I'd probably find many other differences that drove me up the wall.
Not many places make mech keyboards with the UK layout, especially not in full sized, and adding the other filters like wireless and volume/media keys means it's probably going to be easiest to design my own. Plus it'll be a fun project.
I've just started learning Android development, haven't done any coding in years and never anything professional but I'd like to start working on apps. I've just started learning Koltin and am still in the very beginner stages so if anyone has any tips or advice for a beginner I'm all ears. I'm really interested in helping develop open source projects and hopefully one day get a job.
Honestly, I hated Android when I learned it, though that was a number of years ago. There’s a lot of little things that are annoying. For example, when the user changes the orientation of the phone, the scene gets completely reloaded.
My friends who do mobile development use flutter and rave about it. I’m not saying it isn’t worth learning kotlin or anything, but maybe check out flutter too. It’s good to know multiple libraries and I think flutter can be used for android and ios.
Back in November me and two of my friends participated in a web application competition through the career technical organization we were members of. We created a social media gaming website using Flask and TailwindCSS. We also had to get it operational on the net, which given our IT class is traditionally about computer networking, it was the easy part (besides setting up the web server itself).
I’m trying to write a Pokémon/digimon game in Godot. Learning the engine has been interesting. I really like gdscript. I’m mostly limited by assets, because I’m not an artist.
Flipping time between two Python/Flask web apps.
First is a website where a user (likely a fundraiser at a small sized non profit) can upload a donor file with addresses and ages. For super small non profits without access to donor screening services, I just added an option to run the address through Zillows Zestimate API and add that data to their file. After that, or if they already have home values, they can run the file against the census median home values pulled from the data.gov API. It pulls in the median home value by zip code and adds it to the file but also compares the median to the actual and prioritizes by how far above the median the actual home value is. The third option is running the donor against the census median household income data. If the donors age is provided in the file it will return that age buckets income for the zip code. If no age is on the file it will use the overall median for the zip code. About to do the first demo of it next week for the president of the regional fundraising researcher chapter.
Other side is a wine/drink database. Input a barcode from a beer or wine and it will search that barcode in the total wine database to get the sku. Then it searches the sku to get the actual location in store (aisle and shelf), price, inventory for your local total wine. Setting it up to be able to keep try/buy/hate lists to keep track of stuff and know what the price is in case I’m out somewhere and see something I might want to try.
Should be making an alternative to Google's nearby share (well, actually an implementation that's FOSS), but I am always postponing it
I'm working on a windows app to have people use software like elevenlabs as their own microphone in voice chats.
It works if you use something like VB audio cable. But I'd like to make it work without that. The problem, windows drivers are horrible to figure out. It's been over a week and I've made almost no progress with figuring out how to create a discreet virtual microphone that can accept audio from a program and "input" it back.