Just wondering if any of you has created any software that is meant for your use only and will never see the light of the day for anyone else.

What does it do? How did you make it? How much time you spent making it? How often do you use it?

  • geophile 3 months ago |
    - Markup to generate HTML I used in courses that I taught. The markup generated links according to an outline (next/prev page, next/prev section) and a few other navigation related things.

    - Python-based pipe-objects-not-strings shell with cluster and database support deeply integrated. Twenty years later, it has turned into Marcel (https://marceltheshell.org), and I’m still the only one using it AFAIK.

    - Backup utility for Linux, with characteristics of Time Machine. Been using it for five years, it keeps daily, monthly, yearly full backups, relying on hard links for files that don’t change. Handles both local and remote (to my Raspberry Pi).

  • cranberryturkey 3 months ago |
    Yes I built a player for official MLB, NFL, NBA and NHL streaming providers so I didn't have to keep switching apps.
  • austin-cheney 3 months ago |
    I wrote a media player and playlist that executes in the browser to play my media on my phone. I did this so that I don’t have to stream media or dick around with all the limitations imposed by the iPhone. I have playlists for music, movies, and television that are dynamically generated with meta data and file hashes.
  • awesomestartups 3 months ago |
    I used to have python scripts that I wrote for my own use as the java packaging manager for a bank. Java versions are a moving target so it was difficult to build something that was generic and would work with each new release. I had to tweak things with most releases so I never published it.
  • k310 3 months ago |
    I did mostly scripting as in sysadmin work. No FT programming per se.

    I found no free optical design software that would run on Mac, so I coded something up to do some paraxial ray tracing ( maybe more, I'd have to dig up the code) and (this is the good part) draw lens diagrams from the specifications.

    Pretty simple, but it was fun to do. Very little available for Linux either. Physics and optics people want to have fun, too.

    Much of it was just parsing the input data.

    I do recall a design and/or analysis program written in Basic, but it wanted a particular basic interpreter, and I forgot if it had porting problems. Must have. I don't recall using the program.

    Oddest bit was something I did on my own for Sun flex office. I would get the list of scheduled occupants and their office choice and overlay that on a map of the office suite, for a "who is where" map.

    On a "real" work task, I learned how to write graphics commands in Illustrator 3 format. I may have used that on this project.

    But more generally, tacking the AI header code to the file made it valid Postscript/Illustrator format.

  • jamesfinlayson 3 months ago |
    I've open-sourced most of my stuff, but one thing I haven't is a gambling simulator - I feed in odds and results for a season of sport and I can tune some parameters to try different strategies.

    Someone once told me that apparently some local sports reporters' weekly tips are used with some seed money and the proceeds are given to charity and I was intrigued enough to spend a few days building something that could test that out.

  • beretguy 3 months ago |
    Currently working on a hub of “simple apps” which currently include a basic social network and car maintenance tracker. I plan to keep adding more useful apps, for example next on my list is budgeting app. Also will make it a PWA so that I can get notifications for example about posts from friends or maintenance reminders and such.
    • wonger_ 3 months ago |
      How does the social network function if you're the only user? Is it a custom frontend to some common social media?
    • plondon514 3 months ago |
      Also working on a budgeting app because everyone on the market is so annoying to use. Designed from the ground up just for my wife and I, we both love it: https://porkybank.io
  • latexr 3 months ago |
    You’ll probably enjoy this (relevant to your question). I’m not the author.

    https://www.robinsloan.com/notes/home-cooked-app/

    • htrp 3 months ago |
      Love the "learn to program" vs "learn to cook" dichotomy.
  • EvanAnderson 3 months ago |
    I maintain a fork of tt-rss[0] that I use to follow blogs, podcasts, and YouTube. I wrote a podcatcher that used the back-end database, too.

    I forked it back in 2005 because the maintainer wasn't interested in the direction my patches were going. My version has diverged dramatically from the current version.

    I have no idea how many hours I've put into it over 19 years. It has needed surprisingly little care and feeding (which I'd attribute to it being a simple PHP app).

    I've used it nearly daily in the last 19 years.

    [0] https://tt-rss.org/

    Edit: I also maintain a set of scripts to import my SMS from phone backups into my IMAP mailbox. Having a single place to search for my written communication is wonderful.

    • Gormo 3 months ago |
      Out of curiosity, what are the design changes you've introduced into TT-RSS? I've been using it for about 15 years as well, and often get frustrated with the over-opinionated design philosophy of the project myself, so have made a couple of tweaks to my own install, but nowhere to the point of maintaining an entire fork.
      • EvanAnderson 3 months ago |
        I haven't done a ton to it. Mainly I have my fork because I got the features I needed when mine diverged from the mainline back in late '05 and I never cared to keep porting my changes forward.

        Initially the changes were for handling enclosures. The developer had no interest in supporting them. I wanted to use tt-rss as a podcatcher. That necessitated adding some database schema (tracking enclosure URLs) and UI (a "request download" button in the entry list and entry detail panes for those podcasts where I only download selected episodes, a "download all enclosures" checkbox in the preferences UI for podcasts where I want every episode downloaded).

        I also added schema for multiple users to sharing the same database. It was basically per-user preferences and read/unread flags. My grand intention was to add "social" features and eventually a suggestion algorithm. The developer's reaction re: "social" features was, basically, "Why?". (I see that the project has since gained multi-user support...)

        I never did much with my multi-user schema. I never even switched my production copy over to it. Amusingly, I've ended up running three separate instances support my blog reading, podcatcher, and TV computer (Youtube feeds). If I'd finished the multi-user work I could be using that instead.

        That was the end of my interaction w/ the developer.

        In later years I added virtual feeds for the podcatcher and tt-rss itself to report errors downloading or parsing feeds.

        Edit: I'd heard about the developer being uncivil. He never was to me, but the reputation is apparently justified: https://community.tt-rss.org/t/how-to-contribute-code-via-pu...

  • booleandilemma 3 months ago |
    I see questions like this and I can't help but wonder about the motivation behind them.
    • dinkleberg 3 months ago |
      My guess is they are looking for inspiration for personal projects to work on.

      I think it can be easy to get caught up in the software is for business mindset and forget that there is an infinite number of use cases for things you could build that can just be for fun or personal/small community benefit.

  • 1in1010 3 months ago |
    While there is a plethora of Python back-testing and trading platforms, I was frustrated with many of them for a variety of reasons and ended up creating my own. This now drives the back-end of my website https://sugradh.com. Not sure if this is what you have in mind but I have spent more time(years) doing this than I should have. But when something goes wrong or does not work I know where to look and fix it.
  • geocrasher 3 months ago |
    I'm not a developer. I can write some bash scripts but otherwise I struggle. So, I use ChatGPT as my own private developer (version 4o with a subscription).

    The most recent is a Chrome extension that plays a "server down" tone any time the word "critical" appears on our system monitoring web page (Netdata). It plays that tone when the number of "critical" words goes up, and plays a "server up" tone when the number goes down. It's dead simple and works to give me audio alerts so that when I'm hyper-focused on something, I can get pulled out of it by the "server down" tone. It's gone over well with my coworkers as well.

  • Epskampie 3 months ago |
    Yes, I've got a shopping/todo/whatever list app that I made for myself and my girlfriend. So far it has multiplayer editing, offline mode, suggestions when adding, scraping ingredients from a recipe site we use. I love that I can just add random things that I need like that last one. I hate the multiplayer syncing, it's kinda brittle. I guess I spent around 20 hours on it.
  • broast 3 months ago |
    I use a notepad I created for myself where each line displays a timestamp of when it was last modified, for my personal note taking workflows. Html/vanilla js.
  • thiagoperes 3 months ago |
    I created my own translation app using llama3-80b, I call it "expat translator": I live outside of my home country and always struggled with using translators like Google Translate because they don't tell you if the way you're writing something feels natural in the other language. It gives me some pretty good results and I also instruct it to give me rewrites for informal and professional use, so I don't sound weird on WhatsApp for example.

    It uses an on-device model for language detection and results are sub 0.3s thanks to groq

    If someone wants to try: https://testflight.apple.com/join/GBxPMw2h

    • aadhavans 3 months ago |
      As a sort-of-expat myself, I can definitely relate to this struggle. Out of curiosity: does the language you're translating to have a non-latin script? I've found that llama often struggles with those.
    • dathos 3 months ago |
      So this app would not be for regular immigrants or travellers?
  • bachmeier 3 months ago |
    I wrote a productivity app for myself (basically my implementation of GTD). There are a gazillion such apps out there already, so I don't see a reason to share mine. I did it because everything else was either too complex to be practical or too simple to be useful.
  • satisfice 3 months ago |
    Most of my software is made for my own use. I write tools that help me test software.

    For instance, I wrote a tool that tells me how many simultaneous users I need to simulate X number of real users who are hitting the server only intermittently.

    If you write tools for your own use, unless they are really big you tend not to bother with coding style conventions. The important thing is being able to code it up quickly.

    I used to write everything is Perl, but I’ve switched to Python. It’s a great rapid prototyping language, and basically everything I do is a prototype.

  • michidk 3 months ago |
    https://github.com/michidk/vscli

    It allows me to launch vscode projects and devcontainers I often work on very quickly. Saves me so much time!

  • okaleniuk 3 months ago |
    I wrote myself a debug tool at 2007. It's a piece of GUI "to borrow". A Windows app that catches Windows messages addressed to it and shows things in its own windows. It can show numbers you give it, give numbers back, count calls, and measure time. So it's a kind of debugger/profiler/GUI.

    I open sourced it 8 years ago but it was not the original intention. I wrote it for myself. https://github.com/akalenuk/16counters

    I wrote it in MASM32. It's therefore a tiny .exe file of about 7 KB. I spent maybe a few hours initially, but I've been adding features one-by-one for several years. I use it a few times a month.

  • shred45 3 months ago |
    I built an OAuth proxy (only Auth0 currently works) hosted on Cloudflare workers. I'm a big fan of the self-hosted OAuth Proxy [1], but some projects don't lend themselves to hosting a container, sometimes you just want to set up a simple app on Heroku, Fly, Workers, etc. and have an auth proxy sit in front of it.

    My solution also manages SSL via Cloudflare and integrates with Stripe for simple fixed-price subscription billing models. The idea here is to be able to iterate on product ideas quickly without spending a day each time figuring out authentication and billing.

    I did set up a marketing site at the time so that others could use it, but I don't have any users, and I'm happy to maintain it just for my own projects (half a dozen now).

    It took me 2-3 weeks to make so on net I have probably not saved much time, but it really helps reduce the friction of launching things which I think is valuable.

    [1] - https://github.com/oauth2-proxy/oauth2-proxy

  • Dachande663 3 months ago |
    Yes. Several.

    - My blog, which has lots of weird pages for stats, time jumps, old games/tools/utilities. - Flight tracker app. - Home control app (because HA was a pain to keep updated). - Wood working tool helper for my dad.

    And more. It's liberating.

    • jasondigitized 3 months ago |
      What’s the wood working tool do?
  • jelkand 3 months ago |
    Lots of outdoor gear brands are now selling repaired or refurbished used gear and clothing. Since used gear is pretty eclectic in selection it’s hard to find what you want by browsing at a random time.

    I built a pretty simple web app that tracks a bunch of vendors and emails me when items matching my filters come in stock!

  • pfooti 3 months ago |
    My spouse is a teacher. The science department at the school uses a relatively complicated grading mechanism called conjunctive standards based grading, which used to require a lot of spreadsheet magic to work. I wrote a gradebook app (firebase, angular) that handles the grade entry (not grading), conversion of assessment data into grade reports for students, plus charting and stuff so you can see student or course aggregate progress over time.

    I originally thought more people might use it, but I have basically 6 teachers.

    • DrMachiavel 3 months ago |
      Hey,

      Hit me at [email protected] if you have some time, I might be interested in what you are doing!

  • paulcole 3 months ago |
    I have a bunch of single-purpose Google Docs extensions that I use every day at work. For example one sets permissions on Docs based on groupings of users that I have set up (HR only, Finance only, Leadership Team only, Just me).

    I think it took me like an hour to make and I use it several times a week.

  • benstein 3 months ago |
    I made my own webmail client in 2001. The killer feature was a Heart button that one-click opened a new mail addressed to my then-girlfriend-now-wife. I've never seen that feature replicated then or now. And since it was hard-coded to my girlfriend, it was clearly (hopefully!) not broadly applicable.
  • ogisan 3 months ago |
    While not exactly software per-se, I created a system of multiple text files to manage todos, long term goals, and various reminders (eg, IOUs, deadlines, etc). This was inspired initially by Jeff Huang’s blog post [1] but then grew to a complex collection of different files. A problem I ran into was building an interface for displaying and editing these text files (each file has a different width and for some files I want to have different heights when editing them). Ultimately I settled on multiple vim tabs in a terminal window. Been using this for close to five years now and I couldn’t be happier with it. However, at this point the system of files (and the terminal “user interface”) is completely customized to my life and would likely never fit someone else’s requirements.

    [1] https://jeffhuang.com/productivity_text_file/

  • xnx 3 months ago |
    I couldn't find any existing tool or technique to condense periods of low motion frames in long videos so I wrote my own Python/ffmpeg utility with the aid of Google Gemini.

    I love the results, though I have a strong hunch that there's probably a different processing approach that would be 10x faster.

  • pridkett 3 months ago |
    I’ve got two great examples of this. Both I use to help control DNS on my local network. They’re open source, but I doubt anyone else is using it, and I’m fine with that.

    unifi-dns-scraper[0]: a simple tool that logs into my Unifi console to get all the hosts and then creates a hosts file that my local DNS servers can use.

    unifi-doh-blocker[1]: as part of my efforts to better control my network, I don’t want random devices ignoring my local DNS by using DoH. This gets various lists of public DNS over HTTPS servers and updates a blocklist on my Unifi Dream Machine Pro. With a few other firewall rules this essentially forces all my DNS through local servers which then do encrypted DNS queries to a third party DNS service.

    These tools make me happy and were fun to write.

    [0] https://github.com/pridkett/unifi-dns-scraper [1] https://github.com/pridkett/unifi-doh-blocker

  • publicdaniel 3 months ago |
    All my software
  • fwsgonzo 3 months ago |
    I made a scripting solution for my game, mainly to keep motivation up. I really like writing an maintaining a high-quality emulator, while game development can be a slog sometimes. I believe this has kept me from losing motivation and perhaps it can be attributed to me one day releasing that game.
  • winchester6788 3 months ago |
    I made https://github.com/notAI-tech/fastDeploy for ease of use of deploying Deep learning models.

    Except me and the team at my company nobody uses it.

    After I made it lot of solutions came in this space, but IMO this is the easiest one to use still.

  • stefanve 3 months ago |
    created a car selection script, that collected data from several platforms, reliability data, occasion adverts, safety data, reviews and specs.

    I used it to buy a secondhand car based on several parameters (price, doors, features, reliability etc) and by assigning weight to the parameters

    Python in total a day or so of work (including tweaking and adding features) only used it a couple of times to buy a car

  • andruby 3 months ago |
    We use planning poker when evaluating our work tickets. I built https://pokershirt.dev as a small app for use to vote and reveal the votes simultaneously.

    Created with an early version of Phoenix (and re-created with LiveView)

    Here's a link to a room so you see it with multiple users: https://pokershirt.dev/r/hn

  • athorax 3 months ago |
    I made a CLI tool that templates out jira tickets so I never have to open the jira web client to create tickets. It took me far longer than it could ever possibly save me in terms of time, but it's the small victories over horrible, bloated, corporate software that give me joy
    • utensil4778 3 months ago |
      This reminds me of one of my favorite projects.

      I once wrote a discord not that interfaced with our Jira system. I wrote a whole chat interface that walked users through the steps required to produce a useful ticket, and they got thrown into a user report category.

      The interface was quite thorough and basically forced users to follow a template designed to exctact the relevant details. You could even upload files or screenshots.

      It was quite popular with power users as well as our own team. But most importantly, it gave angry users a place to complain instead of directly yelling at a developer.

      It was over 10 years ago and I think it's still the project I'm most proud of. The bot as a whole was extremely complex and could interface with several external applications like google sheets and trello. It also had a very nice feature where it would answer my DMs for me. I was a pretty public figure in the community and got a lot of messages that would be better answered by just asking in the general chat. The bot would (respectfully) explain that I can't give 1:1 support to everyone and direct them to better support channels. It also explained that if something really did require my direct attention, I could still be reached by sending another message. Almost nobody ever did. I couldn't believe how effective it was. The DMs still existed in my inbox, but the bot marked them as read so I wouldn't get notified. I'd review them occasionally, I never found any false positives.

      But of course that kind of thing is ancient history and will get your discord account banned nowadays. Using a bot to log in as a normal user has been prohibited for a long time. Too bad.

  • mostelato 3 months ago |
    What does it do?

    I built a bot that runs every 2 weeks, scrapes my local movie theater's currently playing titles, runs them against rotten tomatoes to filter out movies rated below 85%, then looks them up on youtube and posts the trailers to my discord server

    How did you make it?

    Python script that runs in google cloud functions, triggered on a bi-weekly schedule

    How much time you spent making it?

    An evening

    How often do you use it?

    Every two weeks

    • joeyagreco 3 months ago |
      might have to replicate this one...
    • c-hendricks 3 months ago |
      This isn't a bad idea but 85% seems like it would filter out a lot of good movies. The recent Dune, for instance, is at 83%.

      Looks like about half my library would be filtered out.

  • galdosdi 3 months ago |
    Reminds me of a classic story that makes a good programming parable:

    Back in 2011, my girlfriend was working at a catering company that announced shifts via a webpage and workers had to sign up for them. Other workers tended to pick them up very quickly, so it was hard to get too many shifts.

    I wrote a quick web scraper to automatically accept any shift offered and email her.

    For a couple weeks it was great, suddenly she had all the work she needed.

    Then one day she woke up late to find a voicemail telling her she was fired.

    Earlier that morning the script had detected a last minute job announced just an hour before start time and immediately accepted it, resulting in her not showing up to it. I had not accounted for the possibility they would announce a job so last minute, since it had never happened before.

    • roughly 3 months ago |
      As they say, Unix gives you enough rope to shot yourself in the foot.
    • qup 3 months ago |
      How'd she take it?
      • galdosdi 3 months ago |
        Well, while we obviously were both upset and sad about the situation, she was very understanding, for which I am thankful. We were in it together. It helped that she managed to find a slightly better job pretty shortly thereafter. Nevertheless I felt really guilty about it and as a result the obvious relevant professional programming lesson was instantly and indelibly burned into my brain: you can fix bugs, but you may never be able to undo the real world user level consequences of the buggy software's time in production before being fixed. I was just out of college then and it solidified more respect for the power of the machine.
        • satvikpendem 3 months ago |
          I've favorited your top-level comment. This is an incredibly important lesson to learn, one that I wish I learned earlier in life, but your favorited comment will be a reminder for me in the future.
          • galdosdi 3 months ago |
            I'm deeply gratified. Thank you.
    • omerhac 3 months ago |
      Great story. Did they fire her for that one time she didn't show up? Thats tough
      • galdosdi 3 months ago |
        This was in 2011, just after the Great Recession. It was a tougher labor market then. It was normal for low skill jobs to fire people on the spot for no show / no call. The labor market has changed in that sector since then.
  • jimnotgym 3 months ago |
    Yes, and I won't even tell you about it
  • rsoto 3 months ago |
    I have a quite big userscript that fixes all the little annoyances I've been finding on the sites I often visit. Is the click area too small? I fixed it. Is there a really big form that when I select a specific value some other elements need to be at a specific state? It's fixed now. Did we get a new business lead and we need to enter all their information to our CRM? I can now paste that info and the form will be automatically filled.

    I find usescripts way more easy to update than an extension, so that's what I've been sticking with for quite a few years now.

  • utensil4778 3 months ago |
    Several years ago, I picked up an old SmartBoard projector. The thing has no buttons, it's meant to be plugged into a remote control module attached to the board, or controlled over serial as part of a room system, or through its Ethernet connection.

    I don't remember how I got started initially, there was some investigation of the network protocol it used. It was some crusty old standard that used an odd command scheme, but I managed to divine what magic packets to send to wake it up and select an input.

    I ended up rolling it all into my first and only Android app. It eventually became a full remote control for the thing, including a sleep timer that would turn it off after an hour.

    It was extremely basic and horribly ugly. I never looked into automatic discovery of the device on the network, so it had a hardcoded IP address. But it worked well enough to get a free projector running.

    Apart from that, every programmer has thrown together innumerable scripts and throwaway programs for one-off tasks. My most recent was a thing that takes in a Diablo 2 save, then sets the version number and recalculates the checksum. My pirated copy is a bit old and won't accept saves made with modern editors. I don't know how many scripts I've written that walk through a file system to find or change something in the contained files.

    I also have a version of Klondike solitaire written in C++ with SFML. I initially wanted to build a neural network to play solitaire, but after building the game itself, I found in my research that solitaire is actually a very difficult problem and far beyond my skills.

  • kyle_u 3 months ago |
    I’ve spent five years and 100KLoC building https://github.com/kyleu/projectforge which helps generate and update other Golang projects I maintain. I use it daily.
  • rufius 3 months ago |
    The static site generator for my personal website. It was something I wrote in an evening. The code[0] isn’t the best but it’s been easy to extend as needed.

    It basically takes a couple json files for configuration, and some markdown.

    [0]: https://git.sr.ht/~zacbrown/zsitegen

  • sohzm 3 months ago |
    Made a browser app which used androids web view, added a few buttons and gave it to a friend and forgot about it. About a year later he messaged me he still used that dumb app. Lol

    Also made a notes app for Android that just had one text view with only options to edit text and save it. Used it for years for pasting random stuff, and gave it to a twitter friend and forgot about it. Connected with that friend years later and he said he used that app as well :)

  • xena 3 months ago |
    God yes, I made a personal API thing called mi that I've maintained over the last few years. It manages a few things, but the main thing it does now is repost my blogposts on a few other social channels when I publish new posts. I'm also working on having it manage the list of events I'm going to attend so that I can get reminded to create "trip report" posts.

    I spend about 30 minutes a month maintaining it on average and I recently rewrote it in Go so that I could bring it back into my /x/ monorepo.

    I have iOS automations that query and post to it about once every day. Eventually it's also going to handle photo uploads so that I can yeet it a photo and get the embed code for it shoved into a buffer note on my phone.

  • acrophiliac 3 months ago |
    I built a bot to play my favorite word game on Android. It's not technically against the TOS but certainly against the spirit. It gives me an inordinate amount of satisfaction watching it autonomously playing the game and winning every time.
  • qznc 3 months ago |
    The static site generator for my website: http://beza1e1.tuxen.de/gen.py

    A news bot: https://github.com/qznc/mrktws-news (the output is public, does it count?)

    A TiddlyWiki server: https://github.com/qznc/tiddlywiki-py

    Such stuff usually costs me a few frantic evenings to build the first version and then minor maintenance.

  • owlglass 3 months ago |
    I wrote some PowerQuery functions and VBA macros to facilitate client invoicing that cut down ~2 hours of work to ~10 minutes (and shrinking, as I toy around with the scripts to delegate more of the work to the machine each time).

    The billing data is pulled from an external vendor's portal. The contact data is pulled from our internal CRM. Both sets of data are then cleaned up and merged with PowerQuery, and then VBA is used to send emails out to clients.

    I probably spent in the range of 3-4 hours getting a working version going and ~20 hours optimizing during downtime at work. I genuinely find it enjoyable to work on—there is something immensely satisfying about automating rote work away.

    I use this once per month (a billing cycle). It will probably never see the light of day for anyone else, at least in its current state, because I work in a low-tech, nonprofit environment and using this kind of tool would be daunting for my co-workers (for reference, mail merging is sometimes intimidating at my workplace).

  • rpastuszak 3 months ago |
    Yeah, quite a few! Here's the list: https://untested.sonnet.io/Projects+and+apps+I+built+for+my+...

    Two highlights:

    Enso (https://enso.sonnet.io) - I use it every morning and generally keep it open throughout the day: https://untested.sonnet.io/Stream+of+Consciousness+Morning+N...

    Sit. (https://sit.sonnet.io) - I use it every morning and on some afternoons (I start my main job after lunch)

    I made those for myself, and made them public after chatting with friends/colleagues, that's why they're available online now.

    I also have a bunch of small scripts/apps/productivity tools (automate boring job tasks).

  • hitchstory 3 months ago |
    I created a command line app for applying jinja2 to orgmode. I did it to scratch the itch of being able to generate pretty latex PDFs for my CV and for printed letters with content from my note taking app on my phone.

    I published it on pypi/github out of habit, but it's primarily about scratching my itch and I doubt anybody except me will really use it. There's some interest in doing this type of thing with org mode but it all centers around LISP and emacs (neither of which I like).

  • halotrope 3 months ago |
    Yes many things actually.

    - A mac app to generate to read text as playlists from openai tts api (my gf can't use the api)

    - A automatic visual scraper that can get arbitray information from any website (e.g go to target and get the top 3 milk prices or get the licensing information from this opensource project)

    - An ETL tool (called tabmaster) that can sync arbitrary json apis into postgres tables. with automatic schema inference and deduplication logic

    - A really good OCR tool that enriches scanned PDFs with accurate words and not the bs that adobe ships

    all really useful and used daily.

    EDIT: formatting

    • johnisgood 3 months ago |
      > A automatic visual scraper that can get arbitray information from any website (e.g go to target and get the top 3 milk prices or get the licensing information from this opensource project)

      Sounds interesting. How does this work exactly? How do I input that I want the top 3 milk prices, and how does it retrieve that data?

      • halotrope 3 months ago |
        it works with a llm/visual model and is integrated with a control for the browser. it works surprisingly well i might do a shown if its interesting for other people
  • axegon_ 3 months ago |
    Plenty as a matter of fact. Two large ones off the top of my head.

    First one: cloud services are expensive and come with a lot of overhead. However I do enjoy the idea of lambda/cloud functions a lot but I didn't want to rely on cloud services for them, especially since I have a ton of hardware to self-host stuff. So I built a service which piggybacks on DIND where I could add templates for such lambdas for a few languages(just rust and python cause that's mostly what I use) where I can allocate some resources and build tiny containers. In order to avoid wasting resources, they are all off by default but through the magic of what I build(management and something like a reverse proxy + container management for DIND), I can call an endpoint, which will check if there is a container to handle the requests and proxies the request and response to and from it or it will spin up the container, do the same and shut it down after a pre-defined amount of time. You could argue that I could have achieved the same with minikube or k3s but this has proven to use a lot more resources compared to a single rust binary I can run on anything x86 with docker on it. The downsides are that I can't distribute it across multiple servers so it only runs locally. But that fits my needs perfectly. There might be some people that would be interested in it but I never got to open sourcing it so I'm the only user. I've been planning to open source it "next week" for the past 2 years or so.

    Second one: I love data. Specifically unstructured, raw data and I've been collecting a ton of articles from the internet over the past 2 years or so. The ingestion involves a pipeline that automatically processes them and extracts data/makes them a lot less unstructured: events, locations, timestamps, what has happened where and all that jazz. It's a long list of ml models, data transformations, validations, 3 llm's fighting each-other and a bunch of other stuff. Kinda feels like a child to me so I don't want to open source it. I know that I could hypothetically convert it into a product and make some money off it but my past entrepreneurial experiences have been very unsuccessful, I have limited time and lack motivation. So at the moment I'm simply enjoying the data getting spit out on a grafana dashboard such as this [1].

    [1] https://i.imgur.com/fAoQghk.png

  • jonahbenton 3 months ago |
    Bank and other statement PDF processing tools to feed records into Beancount. Because CSV downloads are not a legal record and are often not correct and contain no balances, and giving permanent access to aggregation services like Plaid and others are not worth the privacy violation.
    • emilburzo 3 months ago |
      Is any of the code public?

      Or at least the tool(s) you use?

      I have the same need but it's surprisingly difficult to get it right, at least with the `camelot` or `fitz` python packages.

      • jonahbenton 3 months ago |
        No public code. This has been a long running project for me. Last I touched it- pre-LLM world- it had turned into a real Rube Goldberg machine. Hard to imagine anyone else putting up with it.

        PDF to text (using either python or Java lib), which then is turned into a "header" structure with dates and balances via configuration driven regexes, and a "body" structure containing the transactions. The transactions themselves go through an EBNF parser to extract the date(s), narration, amount, and balance if reported. The narration text gets run against a custom merchant database for payee and categorization. It is a painful problem! The code is Clojure so there is not much of it, and there are high abstraction libraries like Instaparse that make it easy to use grammars as primitives. And the rube goldberg has yielded for me balance-validated data now for the last several years from half a dozen financial providers.

        I have been incorporating local LLMs, running on an RTX 3090, into some other workflows I have, hope over the summer to see if those can help simplify some of the workflow.

  • mlfreeman 3 months ago |
    Many years ago I partially cloned the old iGoogle homepage because I liked it (and Google was killing it off). It's gone through a few experimental rewrites in various technologies for personal educational purposes.

    Right now, it's ASP.NET/.NET 8 on the backend and still plain jQuery on the frontend.

    I display RSS feeds, US National Weather Service data, and comics in it. I also have it send some things to friends and family as emails periodically.

    Hangfire works on the backend to actually fetch new data at appropriate intervals.

    I occasionally have to modify something and manually push a new build because something remote changes but it feels fairly stable right now (knock on wood).

    I want to redo it to use ASP.NET AssemblyParts and work towards essentially giving each little box its own DLL as a sort-of-plugin-system so that I feel more comfortable adding more types of boxes (stocks, different weather data, etc) and maybe one day can open-source it. (I'd like to so I can point prospective employers at it and say "see, i can actually write reasonable real world code.")

  • islandert 3 months ago |
    I made a CLI tool called kilojoule that is similar to jq. I addition to the normal suite of JSON manipulations, it also has support for a couple of other file formats and can call other shell commands.

    https://github.com/stevenlandis/kilojoule

    I’ve found it to be a pleasant multi tool for interacting with the shell when I need something a little more than bash.

    It took a couple of weekends and evenings to get working but was a really fun way to learn about parsers, interpreters and Rust.

  • imclaren 3 months ago |
    Great question! Most of the articles I read only focus on apps with multiple millions of users, but most software has a much smaller user base.

    I assume that most things I build will only be used by me and a small group of users, and sometimes will also eventually be used by others. I generally only build tools that I use every day. For example:

    - iCloud/Dropbox alternative macOS, iOS, and web app

    - task management GTD macOS, iOS, and web app

    - photos api for digital photo frames

    - media management

    Mostly built using go for backends and SwiftUI for macOS and iOS frontends.

  • javier123454321 3 months ago |
    I have like a dozen bash scripts that automate little actions locally. They each took from a few minutes to a few dozen minutes to make. I use them all the time at work.
  • applesauce004 3 months ago |
    Oh man. Do i have a list for you! I am very self-conscious of publishing my work. So over the years i have made many software games and utilities that will never be published. My wife thinks i am being silly and i shoud publish it. Anyway, here goes....

    MP3Renamer(2002) - The age of music piracy is still rife and i have downloaded my share from napster, university file shares, etc. However, most filenames are horrendous and not clean. So, my first utility was a java program that would analyse file names based on common garbled patterns and rename it into [Artist] - [Songname].mp3. It worked surprisingly well for 90% of the use cases,

    CombatLogAnalyzer(2008) - Me and my wife are in the throes of World of Warcraft arena which is a competetive dueling system. We only play 2v2 and we both suck at it. So, i enabled combatlogs in WoW and then wrote a parser, analyser and visualizer for every arena game and that shows which spells were used, where did damage come up, highest contributer of damage and this was by each playable class. By the end, we learnt what was killing us and the statistics showed our strengths and weaknesses. Suffering high latency and poor skills we managed to crawl from 800 rating to 1800 rating! We just couldnt go beyond that! (I was the crutch). This was done in .NET WinForms and i really learnt how to use linq.

    Space Commander (2019) - My daughter is almost 4 years old and i think she is ready for computer games. I decide to learn MonoGame and i make a Space Commander clone. It is a HIT!

    HappyMrsChicken (2019) - From my smash hit game above, i make a clone of HappyMrsChicken except this is in a forest where you have corn that the chicken has to eat and there is competetion from a mysterious goblin creature who also goes after the corn. Who will win?? Turns out, i cheated and gave the chicken a boost. My daughter won a lot!!

    OptionsTrading (2020) - It is covid and i am locked in a quarantine facility for 28 days. Like a lot of retail noobs, we are getting into trading stocks and options. I decide IBKR interface sucks and I can do better. While spending those 28 days in isolation from family, i learn react to write a frontend and python to write a backend that displays all our trades, statistics, UIs, loss calculators, PnL, etc. My wife and I use this to date but i am too chicken-shit to publish it.

    My personal favourites are: CombatLogAnalyser, OptionsTrading and HappyMrsChicken in that order

  • shtack 3 months ago |
    I have a lot of examples but a funny one that comes to mind is: in the early 2000s when IM clients were all the rage, I wrote a VB6 application to go through my MSN Messenger logs and rank my friends by how much I talk to them. Kind of like a MySpace top 10 prior to MySpace.

    I spent a decent amount of time tweaking the UI, improving performance, adding filters, providing different file output formats, etc. Never shared it with anyone.

  • boricj 3 months ago |
    Over the past two years I've been working on tooling that allows me to delink programs back into object files. What started out as a bunch of Jython scripts is nowadays a full-blown Ghidra extension that can export working object files from a program selection in two mouse clicks. I'm using it as part of a video game decompilation project, but it also enables a whole bunch of other use cases I've documented on my blog.

    It's not that it is meant for my use only (any capable reverse-engineer familiar with Ghidra should be able to pick it up and use it) nor that it will never see the light of the day (it's open-source). However, it is such an esoteric capability and outright heresy according to computer sciences that I'm having a hard time just finding people who can wrap their heads around the concept, let alone people who would actually want to use this. Simply put, it's so far out there that I don't even know where or how I could even advertise it in the first place, which makes it de facto for my own use only.

    A couple of people did end up reaching out to me in the last couple of weeks about it, so it might be on the cusp of sprouting a very tiny user base. Still, I've made it for my own use and until very recently I've never expected anybody else would use it.

    If someone wants to check out the dark magic: https://github.com/boricj/ghidra-delinker-extension (disclaimer: might give nightmares to linker developers).

    • vintagedave 3 months ago |
      I know a linker developer, I'm going to send this to him :)

      Not sure about heresy according to computer science. Sure, it's not intended, but it's a very clever thing to be able to do.

      • boricj 3 months ago |
        Delinking by itself isn't a heresy (no more than disassembly or decompilation), but what I do with it definitively is. Ripping out MIPS code from a PlayStation video game and shoving it into a Linux program, dismembering a x86 Linux program and turning it into a native Windows program...

        It's when you get creative and throw ABIs out the window in order to create some cursed chimeras that this really becomes heresy.

        • nrr 3 months ago |
          One person's heresy is another person's sickos.png. This sounds exactly like my favorite sort of object code vivisection.
      • liamYC 3 months ago |
        Technology like this will create huge selection pressures against desktop apps if it becomes easy for people to reverse engineer, remove payment mechanisms, and then freely distribute. Wouldn’t you think?
        • pmontra 3 months ago |
          Freely redistribute, I don't know. If a program can extract code from another one, a program can detect that code. It looks similar to virus signatures. A company with some IP would run the detector on the software of competitors.
        • boricj 3 months ago |
          Delinking isn't a miracle technology in that regard, you still need to put in the work to reverse-engineer the artifact.

          It does allow a couple of nifty tricks, like pervasive binary patching (if the program is chunked into relocatable object files, then you're no longer constrained by the original program memory layout when patching/replacing stuff). It's also useful for decompilation projects, where you can reimplement a program one piece at a time until you no longer have binary pieces left and still create a fully working program at each step (you don't even need perfectly matching decompilation since the linker will mend stuff back together anyway).

        • fragmede 3 months ago |
          The tools and know-how to remove payment mechanisms from binaries have existed basically as long as binaries themselves have.
    • jart 3 months ago |
      Something like that really deserves to be written in C so you don't need to install Ghidra to use it. The way I imagine it working is if I want the function `foo` then I'd say `objsuck -ffoo -ofoo.o prog.elf` and it'd look at the elf symbol table to find the `.size` of `foo` and copy that symbol into the .o. I guess you would then need to use xed to disassemble the opcodes to see what other symbols it jumps into or calls, and grab those too, along with any memory references, and then emit relocations. Overall I support this, since it'd be the easiest way to expropriate content from open source codebases whose source code is too byzantine to let me extract one teensy tiny little feature without the bloat. To me this is perfectly normal. You'd also be smart to only support COFF if the person uploads the binary to a hosted service you control and pays you money. In fact this would be even better if it could generate .s files from the object content, so no one would get triggered by binaries.
      • boricj 3 months ago |
        > Something like that really deserves to be written in C so you don't need to install Ghidra to use it.

        I think there's the Witchcraft Compiler Collection if you want a freestanding option [1], although I haven't looked into it too closely.

        The problem is that object files are made up of section bytes, a symbol table and a relocation table. You can't just rip bytes out of a program and call it a day, you need to recreate all that information in order to actually delink code into relocatable object files.

        Doing that isn't a trivial problem, it requires a lot of analysis and metadata, especially if you don't have debugging symbols or symbols at all. Leveraging Ghidra allows me to concentrate on the specifics of delinking, which can get very tricky depending on the platform (MIPS in particular is a nightmare to deal with).

        I'm also trying to solve delinking in general and not just for one platform/ISA pair, so reinventing the wheel for every architecture out there is a nonstarter in that context.

        [1] https://github.com/endrazine/wcc

        • jart 3 months ago |
          It's trivial if you can compile the binary with `cc -static -r` and you don't need to extract dwarf data too. If relocations are stripped, you're fine so long as you can count on st_size being present (i.e. doesn't contain handwritten assembly) and you're able to parse the machine language. If symbols are stripped, then it simply can't be solved. It's just reverse engineering at that point.
          • boricj 3 months ago |
            If you reduce the problem statement to an ELF x86 program written in C, with a symbol table and a complete relocation table (not just the one you get when dynamically linking), then sure it's trivial, you have almost all the information you need to make an object file (issues like switch jump tables can still crop up in that case). If you don't have that relocation table from `cc -r` however, you'll run into problems.

            Without this relocation table on hand, you'll have to recreate it in order to make the section bytes relocatable again. This means analyzing code/data and identifying relocation spots, like you've said. But that `0x00400000` integer constant within an instruction or a word data, is it referring to the function at that address or is it the TOSTOP flag value? Who knows, but each time you get it wrong you'll corrupt four bytes in that object file.

            I'm dealing with one rather gnarly scenario, which is a PlayStation video game without any source code, symbols [1] or linker map, just a bag of bytes in an a.out-like format. The MIPS architecture also happens to be an absolute nightmare to delink code from (one of the many pitfalls for example is the interaction between HI16/LO16 relocation pairs, branch delay slots and linkers with a peephole optimizer).

            I've been at it for two years and I've only recently managed to pull it off on the entire game code [2]. Writing out the object file when you have the program bytes, the symbol table and the relocation tables is the easy part. Writing an analyzer that recreates a missing relocation table for the 80% of easy cases isn't too difficult. Squashing out the remaining 20% of edge cases is hard. All it takes is one mistake that affects a code path that's taken for some very exotic undefined behavior to occur in the delinked code.

            Delinking with a missing relocation table (and without manually annotating the relocation spots yourself) is a thing that looks easy at first glance, but is deceptively hard to nail all of the edge cases. I'd gladly be proven wrong, but if you do have the full, original relocation table on hand then you're cheating with `cc -r` on code you just built yourself. Almost no real-world artifact spotted in the wild one would care about is ever built with that flag.

            [1] I did end up recovering lots of data out of a leftover debugging symbols file from an early build later on, but that's a story for another time.

            [2] Note that I'm working on top of a Ghidra database that contains symbols, type definitions and references, so the bulk of analysis is actually performed upstream of my tooling. Even then, the MIPS relocation synthesizer is a thousand lines of absolute eldritch horrors, but I do acknowledge that the x86 relocation synthesizer I have is quite tame in comparison.

            • jart 3 months ago |
              > the MIPS relocation synthesizer is a thousand lines of absolute eldritch horrors

              Wow I only really know amd64, arm64, and i8086. What is it about MIPS that makes it so evil?

              • boricj 3 months ago |
                That would warrant an entire blog post to describe all the pitfalls [1], but I'll condense it down to the highlights.

                On MIPS, loading a pointer is classically done in two instructions, a LUI and an ADDIU, which forms a HI16/LO16 relocation pair I need to identify precisely in order to delink code. I'm using Ghidra's references in my analyzers, but these are attached to only one instruction operand, typically a register or an immediate constant.

                So my MIPS analyzer has to traverse the graph of register dependencies for a reference within an instruction and find which two instructions are the relocation pair. It's trickier than it sounds because references can have an addend that's baked in the immediate constants (so we can't just search for the pattern of the address bits inside the instructions) and complex memory access patterns inside large functions can create large graphs (ADDU in particular generates two branches to analyze, one per source register). It's bad enough that I have one method inside my analyzer in particular that is recursive and takes six arguments, four of which rotate right one step at each iteration.

                But that graph traversal can't be done in reverse program order, because there are instruction patterns that can terminate the graph traversal too early with the right mix of branches, instruction sequencing and register reuse. I've had to integrate code flow analysis to figure out which parent code block has to be actually considered during the register graph traversal.

                But the most evil horror is the branch delay slot. One particular peephole optimizer consists of vacuuming up a branch target instruction inside a branch delay slot and shift the branch target one instruction forward, which effectively shortens the execution flow by one instruction. It also duplicates the instruction, which is catastrophic if it had a HI16 relocation because now we have LO16 relocations with multiple HI16 parents, which can't be represented by object file formats. I have to detect and undo that optimization on the fly by shifting the branch targets one instruction back, which I accomplish by adjusting the relocation addends for the branches.

                I've only written relocation analyzers for x86 and MIPS so far. I don't know what other horrors are lurking inside other architectures, but I expect that all RISC architectures with split relocations will require some form of that register graph traversal and code flow analysis [2]. What I do know is that my MIPS relocation analyzer [3] is probably the most algorithmically complex piece of code I've ever written so far, one that I've rewritten a half-dozen times over two years due to all the edge cases that kept popping up. I also had to create an extensive regression test suite to keep the analyzer from breaking down in subtle ways every time I need to modify it. I expect that there are still edge cases to fix in there that I haven't encountered yet.

                [1] I've written about some of them here, but it's far from the whole story: https://boricj.net/tenchu1/2024/05/15/part-10.html

                [2] That piece of code is split off in its own Java class: https://github.com/boricj/ghidra-delinker-extension/blob/mas...

                [3] In case you're curious: https://github.com/boricj/ghidra-delinker-extension/blob/mas... (remember that the register graph and code flow bits are split off inside another class)

      • cxr 3 months ago |
        > Something like that really deserves to be written in C so you don't need to install Ghidra to use it.

        By that logic, it should be written in JS so you don't need to install a C build toolchain for it.

  • sir_pepe 3 months ago |
    My day job is all about doing presentations, so I obviously wrote my own slide software. It is a pure expression of my workflow, my requirements, and my idiosyncrasies and the way all of the above changed over ~10 years. It is a great performance booster if you can basically brain dump your thoughts straight into slides, and if you can just implement breaking changes (or choose to keep supporting an objectively bad feature for all eternity). I don't need to care about any other users, or the bus factor.

    The only part of that software that ever became public was the animated syntax highlighter[0], but I don't believe any other part would help anyone else accomplish anything.

    [0] https://code.movie/

  • brink 3 months ago |
    I made aquinas for myself. The source code is out there, but I don't think anyone else uses it, but I use it almost daily. https://github.com/codabrink/aquinas

    It's a media player that sits in the console.

  • hiAndrewQuinn 3 months ago |
    Basically everything I have at https://github.com/hiAndrewQuinn at least started this way, before I polished it up for external use. But, no, if it really is meant for my own eyes only, it lives and dies as a shell script.
  • Gualdrapo 3 months ago |
    Just silly stuff as my development abilities let me do - the most "significative" one is a remote control to, ahem, control my TV from my pc (to save some batteries from it and some peace of mind so I don't need to look for the remote control every time) - as a KDE Plasmoid w/ QML and some Javascript via IRCC-IP. It broke in the KDE5->KDE6 transition but I'll fix it, try to improve it and share it when I have some spare time.
  • explorigin 3 months ago |
    I once ripped the corner of my windows install code sticker. I was missing the last 2 characters. I wrote a script in SikuliX to bruteforce the remaining 2 characters. It took about 4 hours to run but in the end, I got the full valid code.
  • hobs 3 months ago |
    A recipe scraper and rehosting website that nobody cares about but me, a slack/mumble/link checker/duper and chat logger, a bunch of arduino/espressif stuff to manage and control little projects like a home gardening, a suite of database synchronization, troubleshooting, and monitoring tools.
  • bengarney 3 months ago |
    I wrote a tool to do automated QA on internet video (HLS/DASH, tech used for Netflix, YouTube, Twitch, etc.).

    It evaluates streams against a database of 100 or so "quirks" that identify either general issues or issues that will only manifest on certain player libraries. For instance, specific "in spec" encodings which are actually non-standard in practice get flagged.

    Built on TypeScript/node/Docker over the course of maybe 18 months. Used it fairly often when I was working in the space, not at all these days. Originally the plan was to license it as an enterprise vid tool.

    (I've been considering open-sourcing it - would YOU use it if so?)

    • vivekv 3 months ago |
      I am definitely curious about a tool like this. I work with a lot of video streams and this collective knowledge of quirks might be useful as a QA tool
    • klabetron 3 months ago |
      I’d be interested if for no other reason to see if some of the hiccups I see in streaming video recordings are more common than just me/just random.
  • dirteater_ 3 months ago |
    I hate flashcards so I made my own app for studying Chinese after finishing HelloChinese. Very similar interface, but allows me to bring my own content.
    • arnavpraneet 3 months ago |
      this might help me though- I am in the same boat
  • Leftium 3 months ago |
    I made an app for my brother's wedding so all invitees could easily upload and view photos in a shared slideshow (displayed in real-time on a big TV at the event). Dismantled as soon as the event was over. It took less than a day to create with SvelteKit, Dropbox, and https://slidesome.com

    Some more:

    - https://weather-sense.leftium.com: weather app with the trendcast just the way I like it. WIP, but already using it on daily basis.

    - https://multi-launch.leftium.com: quick link launcher; can launch multiple links at the same time. I use this multiple times a day.

    - https://tt.leftium.com: tool to streamline conversions I frequently need. When the input type is detected on paste the converted value is automatically put into the clipboard. Also paste works from anywhere on the page. A super-niche hidden feature is if I paste the outerHTML of my SoFi relay accounts list, it will transform it into a TSV format for pasting into a Google sheets balance sheet. I use it a few times a month.

    - https://ff.leftium.com: tool to calculate the time I needed to do something in a game I used to play. Automatically updated a calendar event with notifications.

    - https://orbs.leftium.com: another tool to help with planning in the game I used to play.

    • pimlottc 3 months ago |
      You made a marketing page for your one-off shared photo collection app?
      • Leftium 3 months ago |
        No marketing was needed. The app was specifically made just for that single event.
        • pimlottc 3 months ago |
          Not being familiar with Slidesome, I thought /that/ was the app you created. Now I see it's just a component you used. Hence my confusion. :P
          • Leftium 3 months ago |
            Ah, I understand your confusion, now. I didn't link to the actual project because it's not active, anymore. I guess I could link to the repo: https://github.com/Leftium/PhotoDrop

            Finding a service that integrated with Dropbox the way I wanted probably took more time than the actual development.

    • IIsi50MHz 3 months ago |
      > - https://weather-sense.leftium.com: weather app with the trendcast just the way I like it. WIP, but already using it on daily basis.

      The multiple lines per graph kinda reminds me of the meteograms that yr.no used to have on their site and in their app. I really like their presentation. Concise, and much faster to digest than a table of data. Sadly, they eventually split them out to multiple graphs, with no UI option to put them back on one graph.

      • Leftium 3 months ago |
        Yes, I think this is one of the cases where multiple scales on a single plot works[1]. To avoid confusion, I did a few things:

        - Different units have differing plots (mm represented as bars, percentages as area graphs, and temperatures as lines.)

        - The y-axis is not labeled. For exact measurements, you can hover over the graph and read the exact values at the top.

        - The legend at the top actually uses checkboxes. Eventually, you'll be able to toggle individual metrics on and off.

        [1]: https://hw.leftium.com/#/item/40391614

  • vintagedave 3 months ago |
    I wrote a static site generator. It was the first "real" Python app I wrote (many files, classes, etc and actively using Python features.) The code is _terrible_ in the way that code can be when you're learning a language. You can definitely see the progress of understanding Python as you see the project develop. However, it's robust and is used to generate my site right now.

    It supports Markdown plus a custom template language to convert Markdown-plus-more documents into a website, which allows me to add footnotes, sidenotes, images with specific formatting, custom markers, etc. It has specific support for parsing English and splitting sentences, so each one is in their own span in the resulting HTML. This is used for specific typographic layout.

  • arnaudsm 3 months ago |
    As a freelancer I invoice in multiple currencies, and I couldn't find a program to generate them that wasn't an overly complex $100/mo SaaS.

    So I build a little cli to generate my invoices. 100 loc and super simple.

    I miss the 70s when programming was the default way to solve problems. Excessive abstractions and proprietary software often slow us down.

    • epolanski 3 months ago |
      My (polish) bank gives invoicing software for free and obviously you can put whatever currency you want.

      Bank is called millenium bank.

      • pedrosorio 3 months ago |
        Millennium bank is Polish TIL

        What's up with Portuguese and Poland? (Millennium, Biedronka, what else?)

        • epolanski 3 months ago |
          Globalization I guess :)
    • 6510 3 months ago |
      > I miss the 70s when programming was the default way to solve problems.

      When you get deep enough into writing a custom tool it starts doing things a generic tool would never accomplish (or it would have to be bloated with features no one needs) Hard coding values and constraints for personal use makes such elegantly simple interfaces.

      For example, my agenda is a beutiful boulderdash-like grid of icons. The data is a set of arrays [1,2,1,0,0,1,1] and an object for special days. There are no setting, it has zero buttons to press.

      I've made countless silly things other people could use if only they knew it existed.

      https://go-here.nl/real-salary-calculator.html

      https://title-spider.go-here.nl

      https://salamisushi.go-here.nl

      endless things I've made for personal use. I think something like 60% needs one or two lines of love to work in 2024.

  • abofh 3 months ago |
    Most of what I write is for an audience of one - even if it gets merged to the company tree, I'm usually writing for my own immediate needs. But to what you explicitly ask, I contact and I hate invoice management, so I have my own time tracker cli that integrates with stripe invoicing.

    My hours get billed, I've got my notes for the cycle, and payments to my LLC get automatically routed to the right financial targets based on stuff I integrated with mercury.com.

    Doesn't do the taxes, but cuts a lot of the low value/high cut vendors out of my revenue cycle and that makes me happy.

  • koeng 3 months ago |
    I pretty much rebuilt my bioinformatics stack from scratch in Go, and I’m pretty proud of it! It does things that no other library, even python libraries, do for synthetic biology applications.

    I’m pretty sure nobody else uses it, but I use it a lot for DNA design work for my company https://github.com/koeng101/dnadesign

    • heuermh 3 months ago |
      Very cool!

      I am curious if you might explain how/why this stack diverges from the upstream one (bebop/poly)? I see for example dnadesign has a version two of the seqhash algorithm that looks rather interesting.

      • koeng 3 months ago |
        I'll make sure to explain it a little more!

        Basically, I developed a whole lot of bebop/poly, but I had some disagreements with the owner of the repo (Timothy Stiles) about direction at the later stages of development. For example, I wanted to standardize all the parsers to use a generic interface, so that they're all used in the same way, while he didn't really want to change anything. There were other features I wanted to add as well - you can see a full list in the changelog (which are the changes since diverging from upstream)

  • beattheprose 3 months ago |
    Web service that turns a YouTube channel to a Podcast-compatible RSS feed, just by changing the URL from https://youtube.com/XYZ to https://$SERVICE_URL/XYZ.

    Use it almost every day. It’s nice to keep up with channels I care about while escaping the algorithm.

    Something I work on-and-off on. Could be interested in open-sourcing it fully if folks are interested in helping out. Im a pretty junior engineer, so work is slow and I’ve never been satisfied enough with the code to publish yet.

    • joeyagreco 3 months ago |
      You should open source this!
      • SwiftyBug 3 months ago |
        I second this! This is somehting I'd love to use.
    • kingofthehill98 3 months ago |
      I would totally use this no matter how bad the code is.
    • slenk 3 months ago |
      Would love to see this!
  • onassar 3 months ago |
    Bookee: https://onassar.github.io/extensions/bookee/ Chrome Extension to navigate my bookmarks a bit easier (I use the keyboard shortcut 50+ times a day)
  • 65 3 months ago |
    Almost all of the software I make in my free time is for my own use.

    My most used tool I have is a note taking web app that automatically saves markdown files to S3. The most important feature I added was a little button that would automatically make a note for the current day, and put it in the daily notes folder, all sorted and organized. I also have full text search which is very helpful for finding old notes.

    I also use an RSS reader I made. Instead of just showing you the text of the page like a standard RSS reader, it proxies the web page so you can read the article directly from the website, but with the added benefit that since it's a proxy, I can control all the HTML, CSS, and Javascript on that page.

    Another daily one I use is a random background music playlist for Spotify that is auto generated daily. Using the Spotify API you can find random music, then find random instrumental music from that random music. I use this to discover new songs to listen to while working.

    Basically, making your own software is fun. Making production software is much less fun. I don't need to worry about a million things when I make my own software. Sure, I make $0, but if I spent months making, for example, my notes app production ready, and tried marketing it, I'm guessing I'd still be sitting at $0.

    • co0lster 3 months ago |
      I’m stealing Spotify random instrumental music idea! Why I cannot come up with similar ideas by my own? Thats the hardest part I think…
      • 65 3 months ago |
        I actually stole the idea from a guy named Max Hawkins who made a Spotify Daily Random playlist. I made it to be just instrumental music since I wanted it for working.

        https://maxhawkins.me/

    • positr0n 3 months ago |
      How does the full text search work?

      On-device copy of all the notes? Text index in another database? Just download them all from s3 when you search?

      • 65 3 months ago |
        Text gets indexed in another database every time a note gets saved/deleted/created. There might be better solutions with AWS Athena but using a simple MySQL database was by far the easiest (and quickest in terms of querying) way to add full text search. My database is paid via usage so I don't have to spend much money, if any, to index my notes.
    • dougdimmadome 3 months ago |
      > My most used tool I have is a note taking web app that automatically saves markdown files to S3. The most important feature I added was a little button that would automatically make a note for the current day, and put it in the daily notes folder, all sorted and organized. I also have full text search which is very helpful for finding old notes.

      I have a very similar thing, mine uses a dropbox folder as a backend so I can easily browse on laptop and use whatever. I like the daily notes idea though!

      • dudus 3 months ago |
        Sounds like you'll be better served by obsidian. The free plan covers all those use cases and more
        • meiraleal 3 months ago |
          Did you read the title of this thread?
          • dudus 3 months ago |
            Yes I did. So?
        • dougdimmadome 3 months ago |
          obsidian came out 2020 and I built my version before 2017. also the initial version was on Windows Phone and I migrated to android later
    • newsbinator 3 months ago |
      > Using the Spotify API you can find random music, then find random instrumental music from that random music.

      For this, I made a Spotify playlist with 41 hours of instrumental soundtrack music that helps me focus. It's not random like yours, but with that many hours, there's enough variation if you put it on shuffle.

      It's mostly epic and uplifting movie scores. Or suspenseful and building up to something... none of that 8-bit video game beep boop shrill stuff.

      https://open.spotify.com/playlist/31buZEaVGW9f5Y4cEcKtbt?si=...

      • jasondigitized 3 months ago |
        Added to my Spotify. Thank you.
      • duckmysick 3 months ago |
        Since your #1 song on this playlist is a Star Wars track, there's a fun little easter egg in a Spotify client. The progress bar is replaced with a lightsaber and you can change its handle by clicking on it.
        • bavell 3 months ago |
          Couldn't find it...
    • SushiHippie 3 months ago |
      > Using the Spotify API you can find random music, [...]

      Which API endpoint do you use for this?

      • 65 3 months ago |
        There is no endpoint for random tracks. The method I found that works the best is to search for two random letters, e.g. "fq", pick a random result, and then use the API to find recommendations based on that track that have a minimum instrumentalness of, say 0.9, then pick a random recommendation from the results. I store all the songs that have been added to the playlist in a DynamoDB database and make sure no song gets added twice.
  • automatic6131 3 months ago |
    I control the RGB Leds of my gaming PC from the command line. And the overclock on my GPU based on the daily temp (this is just a few lines in a shell though).
  • mutantgn0me 3 months ago |
    I've got a...very large...Bash script I wrote in 2009 for interacting with my MP3 collection via email and icecast (there were more reliable email clients than Web browsers embedded in devices back in the day.) It's basically a queue manager for ices(1), with playlists, "programs", special handling for audio books, and regular radio DJ-like chatter delivered via Swift (weather updates, track info, inside jokes among my friends, that sort of thing.) A cron job keeps it going with random tracks. I've even added some old 50s and 40s radio commercials because hilarious.

    It is madness in script form which will never see the light of day, but I've never succeeded in rewriting it or making a nice Web interface for it 'cause what I've got Just Works for me. I interact with this script almost every day, making it the single most-used software I've ever written, either professionally or personally. It's great having a self-hosted streaming service. Run via Bash.

    Mwuahahahaha.

  • kleiba 3 months ago |
    Isn't that the majority of software one makes?
  • rowofpixels 3 months ago |
    I built a hydroponic garden as a covid hobby. I wrote software to maintain the garden, water it on schedule, apply ph changes to the water, turn lights on / off, humidify, as well as monitor statistics (temperature, humidity, water temperature, water ph, water conductivity).

    Rough guess would be that I spent 50 hours actually working on the software.

    There's a handful of raspberry pis involved. I wrote everything in elixir and used https://nerves-project.org. The dashboard is written with phoenix live view. One of the raspberry pis is the "brain" and basically runs the dashboard and controls devices. The devices are all in an elixir cluster. I also run timescale db for some basic history of metrics.

    Once I start a grow I don't use it that much actively, but it passively runs all the time. I check in every few days or week to make sure nutrients are looking good.

    I've grown strawberries, lettuce, jalapenos, and cayenne peppers.

    • sloaken 3 months ago |
      That is AWESOME! I would love to see what you did for this. Even more I would love to build the same.
      • stoneman24 3 months ago |
        I agree, a blog post or other description would be great and really inspiring for my own projects.
    • neoecos 3 months ago |
      Did you published this project, sounds interesting just to see the basics of nerves in a real small thing ?
    • robxorb 3 months ago |
      How does it automate ph changes to the water?
      • throwup238 3 months ago |
        Not OP but I use aquarium peristaltic dosing pumps that pump General Hydroponics pH Up/Down solution controlled by a Raspberri Pi with an Atlas Scientific pH sensor.
      • rowofpixels 3 months ago |
        I use two pumps from Atlas Scientific - one for a jar of base and one for a jar of acid. I have a sensor for PH so I can see in the live dashboard, and can click a button on the dashboard to disperse a set number of ml to the tank. I should have been clearer - PH is the one thing I didn't "close the loop on" because it'd be a little volatile. For instance when you first add nutrients to the water the PH drops steeply but stabilizes over hours or a day, I didn't want to respond too constantly to those changes. I should spend more time on this aspect though and maybe just have notifications for when it makes decisions.
    • Gormo 3 months ago |
      Any chance of making your code public? I'm thinking of dabbling in aquaponics in the near future, and what you've built sounds almost exactly like what I would end up working on myself.
    • aperrien 3 months ago |
      What do you use for valve automation? Is it a commercial or custom part? I've been wanting to do the same myself, but I hear there's all sorts of quality issues with automatic valves.
      • samtho 3 months ago |
        Not OP, but I made one of these for my partner and I’s bonsai garden.

        I use standard 3/4” sprinkler valves from the big box stores, connected to a manifold via unions on each side. This enables me to swap if needed, but these are ruggedized and will last a while. They do take 12VAC, so you need a transformer and use relays to turn them on, but they work very well.

      • throwup238 3 months ago |
        Not OP but I use motorized ball valves from Amazon [1] which are hooked up to a four way water hose manifold to create four different zones. It's wired up to an ESP32 that controls them with relays via GPIO, using the ESPHome sprinkler controller module (which does pretty much everything OP's code does). I've never had a problem with them and the last time I even touched them was over a year ago. They're pricey but you can DIY them.

        The usual sprinkler valves at hardware stores need quite a bit of water pressure to change state which is probably what most people have a problem with, especially if they're trying to feed them with the kind of pumps they get at hydroponic stores.

        [1] https://www.amazon.com/Motorized-Stainless-Electrical-U-S-So...

      • rowofpixels 3 months ago |
        I originally bought some solenoid valves to experiment with, but ended up simplifying my approach. I use a submersible pump that is plugged in to power. I can just automate turning on/off power to that outlet (I have two TP-link / Kasa HS300 strips). The nutrients / water are in a tank below the tray of plants, so when the power is "off", gravity brings the water back through the pump into the tank again.
        • whitehexagon 3 months ago |
          What a clever and simple solution, I love it. I have been thinking about such a grow system for a long time for my chilli plants, and after having had a few split solenoid valves on a different irrigation project I was very hesitant. Thanks for the inspiration.
          • jborden13 3 months ago |
            It's a relatively common setup known as Ebb and Flow (Flood and Drain).
    • j45 3 months ago |
      This sounds like a great project to reconnect one with growing food… with some perks.

      Appreciate you sharing, helps share others are thinking about it too.

      Is there a reason you went with hydroponics vs aeroponics?

      • throwup238 3 months ago |
        In practice aeroponics is very fragile. All it takes is a failure for a few hours for roots to irrecoverably dry out and kill the plants. Most hydroponic methods give you a safety margin of days or even weeks.
        • j45 3 months ago |
          Thanks for the insight, I'll be sure to include hydroponics in my reading :)
      • rowofpixels 3 months ago |
        I know next to nothing about aeroponics - I did read about aquaponics a bit when I started, but hydroponics seemed the most accessible for me.

        I've loved making my own crushed red pepper. And there's something fun about growing plants in the middle of a cold snowy winter in the basement.

        • j45 3 months ago |
          Thanks, appreciate it. Makes sense to me.
    • abrookewood 3 months ago |
      Any chance we can see the code? I'd love to do some work in Nerves and that sounds like the perfect project.
  • emarsden 3 months ago |
    I have a smartphone app that scrapes replay TV listings for a few shows that I like to watch at the gym and allows me to download the low-quality media stream to the phone to view offline ad-free.

    I released the Rust library that downloads and reassembles media segments from a DASH stream (https://github.com/emarsden/dash-mpd-rs). Won't release the web scraping bits because they are against website terms and conditions, and because annoying countermeasures will be implemented if too many people use them.

  • hugocbp 3 months ago |
    I created a personalized finance app based on a Google Sheet that I used to track my registered account contributions and performance.

    Basically I enter the transactions and it shows a dashboard of my contribution rooms, how much is left, how much I have already contributed, etc.

    Nothing fancy, but it just just a Remix frontend with MantineUI backed by an SQLite db inside Dropbox. Took me about 6 hours, and I only made it after I botched some changes I made into the Google Sheet that broke a bunch of formulas.

    I thought about making it into a public app, but it is so tuned to what I want that it is probably not really that valuable to others.

    I use it every time I save. Used to be weekly but lately monthly.

  • monitron 3 months ago |
    I wrote my own home automation platform. I started >10 years ago when the existing options were pretty disappointing to me. It’s a web app that runs on wall mounted tablets in my house as well as on my and my family’s phones and computers.

    It handles lights, fans, cameras, sensors, locks, doorbells, speakers and TVs, HVAC and more. It runs automations based on time, weather, presence of people, and other events. It tracks energy consumption, sends alerts, etc. There’s a strong focus on local control (as opposed to cloud).

    My favorite thing about it is that the client and server run from the same codebase and share state over a WebSocket connection. I’m still working on it occasionally but mainly it just runs quietly and my people seem to like it. The whole thing is configurable (connectivity, behavior and interface) so theoretically it could be used by someone else, but for many reasons I doubt it ever will :)

  • ryandrake 3 months ago |
    I made a macOS/iOS tournament clock for live poker games. I just wasn't happy with the few existing applications, so built and use my own. It is client/server so other people in the tournament can connect their devices and have the clock synchronized and shown on their own device, including phones and watches. It can also run dedicated/headless on Linux. I use a command line client to integration-test the networking and synching.

    I never released it because 1. it's perpetually 98% done and 2. I don't feel like offering technical support for it and dealing with people who don't like it or find bugs. I may just open source it, but then I get to be a maintainer which is an even more thankless job.

  • willhackett 3 months ago |
    I've made an email-based AI personal assistant I thought I'd roll into a business, but ultimately have kept it for personal use. I may open source this as it's a fun project built entirely on Cloudflare Workers (with the exception of one Postgres DB & mail routing).

    I've written some really crappy Notion API (before the official API) to act as a CMS for a headless site.

    I'm at a weird point in my life that I need to work on these little hacky projects because they bring me genuine joy. It's like lego to me.

    • jasondigitized 3 months ago |
      What does the personal assistant do?
      • willhackett 3 months ago |
        I can CC it on emails to handle the back & forward of booking meetings - quite handy when I need to organise with a group of people.

        It can also send follow-ups at set times on my behalf or handle some vague inbounds. It's not the best, but it's ok.

  • SCUSKU 3 months ago |
    A few years back when I was looking for apartments in SF I wrote a craigslist scraper that would filter based on my preferences. I probably could've just used craigslist's built in filters + email alerts, but where's the fun in that?
  • Valord 3 months ago |
    About 3 years ago I wrote a web app to make browsing and categorizing my YouTube subscriptions easier. I can, for example, select the music category and see all videos posted by channels I have marked as music. Really simple stuff backed by a sqlite db.

    I spent a total of probably 20 hours on it and use it 5/7 days a week.

  • pryelluw 3 months ago |
    I have a forever project that is only meant for my needs. It’s basically a web app with a bunch of tools to make my life easier. Things like a links board, blog engine, event tracker, and more. Now I’m adding an llm to include better search abilities. The thing is pretty nice and fast. Uses a simple architecture because I don’t want to spend a lot of time maintaining it.
  • tealpod 3 months ago |
    https://HelloEle.com is a Cli tool to upload, download files with numbers.

    I built it in the process of teaching a cli tool. Which I extensively use to move files between computers, especially to servers.

  • steveridout 3 months ago |
    I've got a bunch of scripts to handle my finances, both personal investments and to help with certain parts of my company tax reporting.

    Among other things it uses ChatGPT to extract structured data from PDF invoices for reporting expenses.

  • SoftTalker 3 months ago |
    I pretty much stopped writing code for myself/as a hobby when I started writing code as my day job. There really is something about losing passion for a hobby once it becomes work, at least in my case.
    • wtngfnncl 3 months ago |
      Sadly, I did the exact same.

      I went from writing my own tricked out Web 2.0 blog, writing my own 6502 NES games, writing myriad utilities and scripts to… remodeling my home, learning how to operate and maintain a pool, work on vehicles, garden and homestead.

      I think in hindsight my hobby isn’t programming, it’s learning and I just enjoyed learning programming and kicked out into a good career.

  • olalonde 3 months ago |
    Coded a microcontroller that allows me to open my gate using my phone so I don't have to carry the gate remote around. Also convenient when I have guests.
  • suriya-ganesh 3 months ago |
    I've written a bunch of web apps, extensions and bots to help me with tasks, taking notes on articles and books.
  • racl101 3 months ago |
    If you count a bunch of individual shell scripts for text processing then yeah. A bunch. I still use a lot of scripts I built like 15 years ago. Every now and then I make tiny changes but yeah I still use them a lot. I'd say 40% of the software I've ever built has been for me.

    I'd say it's a rite of passage to write software for yourself:

    1) It gives new programmers some practice.

    2) It can help you understand software development better.

    3) It reinforces the concept of dogfooding what you create (even though in this case others won't get to use your software). Again, making you better developer. You'd be surprised how many people write programs that they barely use or test. Never really knowing how useful it is or isn't to others.

  • KronisLV 3 months ago |
    Back in the day, I had a laptop with only 4 GB of RAM, which would run out if I'd open too many browser tabs or programs. I didn't have an external monitor always connected, nor were most of the tray monitoring solutions to my liking. So instead I wrote a program that would create a few semi-transparent windows in the OS, snap them to the sides of the screen, allow clicks to pass through and resize them as the resource usage would change.

    A blue full sized bar on the left size of the screen? The CPU is under 100% load. A purple bar on the right side of the screen, that reaches 3/4 of the way up? Guess my RAM usage is getting close to the limit, better not get too eager with the tabs, maybe close a program.

    It actually wasn't that bad, but shortly after I just bought some more RAM. That was also before I had my own Gogs or Gitea instance, so I don't think I have the source anymore, it wasn't too hard to do on Windows though (nowadays I'd probably just put Linux Mint on the system or something, it needs a bit less memory in general). Oh, also now I have like 4 monitors for my main PC and don't do too much computing on the go. The 8 GB MacBook that I have for when I'm out and about feels rather slim, though.

    Aside from that, there's the CMS I use for my website, though I'm not showing it to anyone because it's so bad that it makes me want to climb into a hole and disappear off the face of the planet. It still works though, so I don't necessarily see myself changing it out for something else just yet.

  • xoxxala 3 months ago |
    I write little Python scripts (or use Excel) to simulate computer/video game mechanics and quickly iterate over them before passing them off to a real programmer. I also design boardgames, so often write die rollers to calculate probabilities (it's faster for me to write something that generates hundreds of thousands of results than to actually do the math, especially if I want to tweak in real time).

    My bad habit is not properly archiving these little programs, so I invariably end up recreating them from scratch each time.

  • sghiassy 3 months ago |
    I wrote some scripts that convert my Quickbooks accounting data into detailed reports that are insightful to me and beautifully printable
  • rye-neat 3 months ago |
    I'm building a streetable rock crawler out of a 78 F150 with a custom radius-arm suspension in the front. I needed to measure the deflection of the drag-link & track-bar as the front axle cycled up and down while changing a few variables: mounting locations, drag-link/track-bar angles, and drag-link/track-bar lengths. I used plain Javascript to display a graph, lines representing the drag-link and track-bar, enabled them to be clicked+dragged along with their mounting points and sizes.

    With this visualization I was able to determine the best way to package this on the vehicle with the minimal amount of deflection to avoid bump-steer and death-wobble.

    I suppose it would be useful to other people building radius-arm/link-suspensions that incorporate a track-bar but I haven't got around to hosting it any where.

    • digdugdirk 3 months ago |
      I'm a mechanical engineer, so I'm always intrigued by visual calculations like this that exist outside the standard CAD/excel paradigm. Is there any particular reason you went this route for this application? Do you use a pre-built framework to enable rapid creation and iteration of the setup?
      • rye-neat 3 months ago |
        I went this route because I'm a software engineer that mostly works with Javascript and needed it fast. No framework but bounced a lot of the problems off of Chat GPT to help me figure out how to get it done. I also figured it would be more useful than a CAD model to non-technical folks if I made it available online.
    • geocrasher 3 months ago |
      That is really cool. I haven't built a rig like you, but I have it on my bucket list to build a fully dressed rock crawler out of a Mitsubishi Montero 2dr (also sold as a Dodge Raider in the states). It'll be leaf sprung to start, but using your method of going 4 link would be preferable to the "build and pray" method that most people seem to take.
  • costco 3 months ago |
    40 lines of C to control brightness on Linux in the way I like (Pressing brightness up key should make it go up more than pressing brightness down key makes it go down). It took 20 minutes to make. Used as a keyboard binding.

    TODO list program and the list is periodically printed on my desktop with conky

    Software to automatically book reservations at good restaurants on Resy. Supported proxies, multi account, automatically running every day and getting reservations in a certain time range, and even something with a USB GSM modem to respond to the confirmation texts you get a day before. Used it until I got banned from Resy :\

    Family photo search using CLIP (actually uform) and face labels from Synology NAS. So you can search “winter +christopher” and it will only show pictures of me and sort by the most winter related ones. You can also filter out certain names, search multiple names, click on an image to get images most like it, filter by year, or any combination thereof. Took a couple days to make with Flask, pgvector, and some code to scrape data from the Synology web interface. My family uses it sometimes too though.

    • walthamstow 3 months ago |
      Love the Resy one!
    • cocodill 3 months ago |
      any chance to opensource your foto searching?
  • philip1209 3 months ago |
    I run a little Rails app for myself. I end up putting some random things in it. Here's a partial list:

    - My blog mailing list (Sendy) was having a bot signup problem. I wanted to deploy a captcha, but the mailing list software didn't support it. So, I put a simple proxy that validates the captcha before inserting the record to the software.

    - Wanted a way to apply an email template to the Sendy mailing list, so I wrote a software that consumes my RSS feed, applies a template, and creates a draft in my mailing list software.

    - Wrote a "Scoreboard" that aggregates MRR across Stripe accounts into a graph, and sends auto-emails to friends when I cross thresholds.

    - Wrote a script that emails me when the HN "whoishiring" job goes live every month. (Simple crons like Zapier don't work)

    There are a few other things in there, too.

  • torstenvl 3 months ago |
    I think most software developers create software that's specific for their own use, not for release.

    A big chunk of these are proof of concept programs, test code that is good for trying an idea but won't be complete enough for a test suite in the end result.

    Others are random data fixes when you're migrating file formats or end up with a bad CSV or something.

    I have a toy program that just tells me what a keystroke looks like via raw mode.

  • airstrike 3 months ago |
    I wrote an app that takes all localized strings in an Xcode project, turns it into a json, batch translates it with the OpenAI API, validates the json, and then converts it back into a .xcstrings file that you can drop into your project. I was writing an app that I wanted to translate into X different languages, of which I only spoke a couple and not perfectly, and this was the solution. It turned out pretty good.

    I've considered putting a little bit more elbow grease and turning into a packaged product but I'm not sure if there's demand for it out there.