Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What is your proudest little invention or discovery?
34 points by ggr2342 on May 24, 2023 | hide | past | favorite | 46 comments
Have you invented or discovered something on your own without any prior knowledge about whether it has already been discovered or not?

It doesn't matter whether it has been already found or not. All that matters is the process through which you found so much joy that you still remember it.




This was forever ago and is a little silly, but for some reason, it ranks as one of my proudest accomplishments.

I needed to be able to record and play audio at the same time for a product I was making. I was targeting the most popular sound card at the time, the Soundblaster 16.

I had talked with engineers at Creative Labs about what I wanted to do, and they told me that it was impossible. Nonetheless, I dug into the card, hoping to find some way... and I found it.

It turned out that Creative Labs made the SB16 by adding a 16 bit sound system to the original Sound Blaster circuitry, but had kept the original circuitry in place as well (for backward compatibility?). And the two circuits operated independently of each other.

So I whipped up a sound driver that recorded on the 8 bit circuit by bit-banging, and played on the 16 bit circuit using DMA. It worked great, and felt great doing something that the manufacturer declared impossible.

Interestingly, my driver was later ripped off by a now-famous person who I won't name. I saw a post in a forum somewhere where he opined that it's safe for people to pirate because he thought my company was some unknown overseas company who would never find out. Immediately after I sold my company to another, the purchaser sued him for copyright infringement.


I didn't find this, I was given it by a grizzled veteran, but...

Back in '99 I had a lot of experience with Adobe's SVG plugin, especially around the javascript capabilities. I had been commissioned to build some demos but given free reign. One of them was a 3D molecule structure. SVG doesn't have any real 3D capabilities, so I was effectively using it as a canvas with a ton of javascript to move things around.

Today I know that the "proper" way to do this is with a matrix for camera position and orientation with a bunch of math, but this is back when I was young and dumb. So I ended up writing about 3 full screens of trig calculations to figure out exactly where each atom should be and to track mouse drags to rotate the whole thing. Remember that this was back in the 90's, so my 2-3 frames per second was nothing to sneer at. It worked pretty well, but there was a bit of weirdness with the coordinate systems; dragging up would rotate the top away from you at first, but if you turned the model around to the side it would be backwards.

So I show this off to a coworker of mine. This guy worked on some early Sega Genesis games, and he was like "oh cool, how did you do it" so I pulled up my source. He goes "huh. Try this" and deletes all of my trig code and replaces it with this:

  dZ = 0.001 * mouseDeltaX;
  dX = 0.001 * mouseDeltaY;

  for i in atoms {
    atoms[i].x += dZ * atoms[i].y;
    atoms[i].y -= dZ * atoms[i].x;

    atoms[i].y += dX * atoms[i].z;
    atoms[i].z -= dX * aroms[i].y;
  }
It was glorious.

My frame rate shot up to an easy 30 fps and because this calculates the next position iteratively the weird orientation problem I had was gone. This approximates circles, but it was close enough that 48 hours of spinning led to no visible degradation.


No critique, I'm just irritated the code uses dZ for the x delta and dX for the y delta.


Yeah, that was from memory, and I was thinking of dZ as steps around the Z axis, and dX steps around the X axis.


When I was working at The New York Times as a front-end developer I wanted to create a system where you could deep-link to any paragraph in a story, and potentially highlight passages of text.

Referencing a paragraph by order is very simple, but would not work in this case. It is not common for stories to be edited (correction, or updated as news event information becomes available) after publish - but it can happen. Likewise the inner text of the article could change.

Long-story short, I figured out the JS, learned about the Levenshtein distance for the first time, and built a robust tool that worked. Small things make me happy.

I also launched it without telling anyone. The blog post was retractive.

Source code: https://github.com/nytimes/Emphasis

More information: https://archive.nytimes.com/open.blogs.nytimes.com/2011/01/1...


At 13, I reinvented perspective divide: https://www.khronos.org/opengl/wiki/Vertex_Post-Processing#P... . I wanted to draw 3D things like in 3D games, but with QBasic. I knew how to draw lines and shapes in 2D, but I couldn't figure out how to do that in 3D. I would ask adults about this and they had no idea. They couldn't even understand the question. Eventually, I figured out that you needed to divide or multiply by the Z-axis with a "zoom" constant to make stuff move in 3D.


Around 2000 when I was little, Cartoon Network in India used to run various contests for which you'd need to mail in an entry to participate. The problem was that the shipping address would be displayed on the TV maybe for 2-3 secs and I could never get it. After a few tries to memorize, I whipped out my solar camera and prepared for the address to appear again and clicked a picture and got it developed to get the address.

A few years later when I was in high school, everyone used to have the state-of-the-art 0.3MP-1.3MP cameras on their Moto L7 and Nokia 6600. My high school would frequently stick various notices like people's test scores, examination schedules etc. on the walls and those walls would get swarmed and you'd have to stand for minutes in the swarm getting pushed while you found your name on the many sheets of paper that were stuck, or while you copied the exam schedule etc. I'd get to the front of the swarm and channel all my energy into holding my phone steady pointed at the wall and click a picture and later zoom into it to get the information I needed from the comfort of the librar. I'd hear a chorus of 'aaahs' each time I did this when everyone would realize they could do the same.

Realization that you can click pictures of documents these days of course is almost common sense :)


In high school I developed a "C" shaped mount that made it possible to affix closed loop liquid coolers (now pervasive, like those now made by NZXT and Corsair) to graphics cards in a time where the only real option for water cooling a GPU was to spend hundreds of dollars on a water-block, radiator pump etc if you wanted to overclock. With a CLC and my mount you could get nearly identical performance for $80 (circa 2012).

Initially, I published progress on the Overclock.net forum. People eventually asked if they could buy it and in time I was laser cutting hundreds a week and shipping with the help of my younger brother.

I basically used the income from this project to pay for college and eventually sold the IP to a well known PC accessories manufacturer. Asetek fortunately waited to dig up a private doc outlining IP claims they they had provisionally patented the notion of "affixing a CLC to a GPU" prior, but fortunately by the time they tried to bother me I'd already sold.

My biggest take away was how powerful building an audience can be - without that none of this would have happened.

Here's a showcase of the mounts from a corsair employee https://forum.corsair.com/blog/system-build-inspiration/the-...

Another more clear image of the mount: https://www.overclock.net/media/no-title.3710949/full


While messing around with numerical models of entangled states, I found a very simple and convenient way to characterize entanglement without a local frame of reference:

https://peteshadbolt.co.uk/posts/random_measurements/

It's the one result from my academic career that really felt rewarding. It's not a very important or mind-blowing result, but it is vaguely useful, and (to me at least) enlightening, and it is a clean, finished, self-contained piece of work. Makes me happy at least :)


Holy cow, this might be related to a design I had last week. My effort to build optical shaft encoders using simple polarization sheet. LEDs can be be used as bidirectional sensors as they work well as photodiodes. That lends itself to optical ring oscillators. Getting them synchronized across multiple encoders and/or controllers led to a control scheme that was.. interesting.


I figured out how to FCC-unlock my Lenovo-branded 4G modem to get it working under Linux based on a Lenovo snap with binaries to unlock another model from the same manufacturer, and then I was stupid and generous enough to tell the ModemManager devs and the rest of the world about it[1], but thanks to the devs and Lenovo's Mark Pearson it all ended up benefitting the world.

I didn't really know how to reverse engineer C, or even write C, but I was frustrated enough to stick to the task, and lucky enough to have at least some symbols still in the binary.

Ghidra is a nice tool, but kind of horrible to learn in a hurry, still easier than r2 if you have no idea what you're doing.

[1]: https://gitlab.freedesktop.org/mobile-broadband/ModemManager...


Back in 1986 I was asked to build a set of "game show" buzzers that would allow a number of contestants to hit their button and it would show who pressed first. I ended up creating a system that used relays that would latch the first button pusher's indicator ON and cut power to the other controllers at the same time. I came up with an improved design to allow an arbitrary number of buzzers to be daisy-chained but they didn't want to pay for version 2.0. It was a fun side-hustle for this high school Radio Shack employee.


Cool, I worked on the same quiz bowl apparatus as a pet project around 20 years later. I remember the available commercial options ca. 1998, generally made by small shops. One popular one must have been a similar S-R latch design, and another was probably based on a microcontroller, as it tested the lights and buzzer when it was turned on.

I am impressed with arbitrary daisy chaining. Mine was limited to 4 per side, but had a shared cable.


2018: I am playing a SEGA Genesis game from 1988 called Super Hang On, which is itself a port of an arcade game from a couple years earlier. Being an arcade port, this game has a high score screen but it's reset to the defaults every time you turn off your sega.

After getting a high score, i tell the machine my name is SEX. To my surprise it records my name as NAO instead. A couple more playthroughs confirm that this happens every single time.

I contacted the editor of Super Hang On's page on the cutting room floor wiki (which tracks easter eggs and unused content in video games) and confirmed that they were not previously aware of this.

I checked the rom in a disassembler to see if it was a bug; it explicitly checks for SEX and changes it to NAO so it's definitely intentional. It doesn't do this for any other word, either.


This is probably a holdover from arcade games - many score boards would check for "no no" words like ASS, SEX, DIK, etc and would change it to the initials of a developer or acronym for the company


I tried all the other 3-letter words, SEX is the only one that's not allowed.


When I was fifteen and just getting my feet wet with RDBMS, I figured out on my own how to model an m:n relationship between two tables.

In hindsight, it seems super trivial, but back then it felt so satisfying.


When I was learning to code I figured out a difficult problem using recursion without any knowledge of what recursion was, I remember being happy and thought I was a genius for a short time. Whenever something ‘clicks’ and you get that dopamine the best part of coding.


I don't know what counts as "genius", but coming up with that on your own, with little development experience, is at least brilliant.


The first recursion I put into production is a good memory for me. I wore a big smile that day.

It was a routine to discover all the ancestors of a category, to create a breadcrumb navigation for a web directory.

I believe it's still in production, although the site has been re-skinned so it's hard to say for sure.


Back then Android USB was a thing, you can plug it on a TV and you will have the whole Android OS on your TV. This was 2012, Ice Cream Sandwich OS.

My task was to create a launcher, and widget, and no clue how. There were no widgets back then if I remember correctly. But managed to pull it off.

https://law.gmnz.xyz/uploads/2023/169e32e731.png


Back when Flash was still around and well before it peaked, I wanted to do socket-based communication. So I built a bridge from Flash -> JavaScript -> Java Applet -> socket -> Java server (to send messages and vice versa for the receive chain). I was a terrible coder and it crashed under any kind of load (no back pressure and poor browser quality back then). But it worked and caught the attention of a bunch of influential people. XML sockets were added to ActionScript in Flash v5 ;)


Maybe not the proudest, but I thought I was pretty clever when I was younger...

Years ago I spent a lot of time trying to figure out how to get a Kindle to "Whispersync" sideloaded books. Eventually I figured out it was as simple as having an ASIN included in the books metadata (Calibre does this automatically now, but it was fun figuring it out manually with Python scripts).

Originally I thought the ASIN had to be valid, but eventually realized it didn't even matter, just had to match the pattern.


Back in the early days of HyperCard, I was browsing its scripting language. When I discovered "mouseEntered," I had an epiphany. I could use this feature to make deeply interactive geologic maps. I built my professional reputation doing this. People thought I was an exceptional programmer. Not so. I was just first to use someone at Apple's brilliant work.


I got contracted to attach a Wordpress instance to a React app a few years ago. It was painful, expensive, and never came to fruition.

We ended up launching a Docusaurus project for user guides, and it worked perfect!

Flash forward to today and I’m working on a completely baked React based version of Wordpress.

After I launched the initial prototype and got some user feedback and traction, I later learned of some popular web applications that are using the same concept. Funny enough, they are all using the same tech, with the same concept in smaller niches, and even launched here on Hacker News almost 10 years before I started on it.

I’d love some more feedback and support!

Currently looking for open source contributors too :)

https://github.com/elegantframework/elegant-cli https://www.elegantframework.com/


As a non-charismatic SDE, I discovered charisma tactics I haven’t seen anywhere else by studying actors and other charismatic people on YouTube

Eg. blinking your eyes when moving them to avoid unnerving “flitting”, avoiding too much head movement, etc

Used it to master sales in a business we started and took our call close rate from 30 to 80% at its peak


In case you haven't seen them, Olivia Fox-Cabane has a number of interesting YouTube videos on the subject of charisma and how to improve your own.


Figuring out how to swap NFS mounts behind a massive fleet of KVM instances

Long story short, you can't just unmount /somepath, mount it again, and pretend all is well

I learned a lot about mounts, particularly how the kernel tracks these with IDs

Definitely not novel, but the application/consequences of it made me a hero that week


Could you explain more? Sounds like a fun problem.


I'll do my best! Dodging proprietary bits (and bad term usage) along the way :D

First, some background: we had to pivot from one NFS instance to another. Assume the data was already consistent.

The goal being to minimize observable disruption to the guests. We can pause time, but can't restart the instances -- the services involved should be unaware.

Processes hold onto files they have open. This is pretty well understood - many have heard of file descriptors

These are very sticky -- particularly for things with mounted filesystems. This is where my path to glory appeared

The thinking was... as long as that path was there when the VM process was resumed, we'd be fine...

In reality, we weren't! The kernel isn't really concerned with the fully qualified path.

From the example above, /somepath is really just like "mount ID 2" to the kernel.

In the end we had to renew those file descriptors, consequently picking up the new mount IDs

We ended up pausing the instances, saving the memory state locally, swapping the mounts, and then resuming the VMs.

Time only briefly skipped, and we successfully moved thousands of instances from one NFS 'host' to another


A fixpoint algorithm for translating labels to absolute addresses. Nothing new, but I’m still proud of it.

For this architecture, the size of a jump depends on the address, which is not known until labels have been converted. Converting a label may trigger a cascade in offsets.

I was working on a compiler where all jumps used the maximum possible size (zero-padding the address) instead of 2-4 bytes in order to avoid solving this problem.

https://github.com/sshine/evm-opcodes/#accounts-for-size-of-...


https://lists.freebsd.org/pipermail/freebsd-scsi/2012-Decemb...

I patched FreeBSD's ciss driver:

- created a boot-time tunable (hw.ciss.max_logical) that allowed changing the maximum number of logical drives (defaults to CISS_MAX_LOGICAL, which was then 15 according to src/sys/dev/ciss/cissvar.h)

- changed the behavior of another boot-time tunable (hw.ciss.expose_hidden_physical) such that a value of 2 exposed the hidden physical direct access devices as da(4) devices, where a value of 1 retained the original behavior of exposing them only as pass(4) devices

- updated the ciss(4) manual page regarding the above modifications

This let me use a 20-disk storage array as a JBOD, which I then added to a ZFS pool.

Open source kernel development is gatekeeped to hell and back, so this didn't go anywhere. It's also a pretty minor change. Still, I'm pretty proud of figuring out to patch a device driver.


I was building on oncall scheduling tool for work, and I needed to apply schedule overrides to the default oncall rotation. But I also wanted to support multiple, overlapping overrides, and always pick the correct (latest) override for the given time.

I realized that it's like a queue, but I needed to sort the entries in the queue every time I added a new one.

Thus, I invented priority queues!


Figuring out a pattern for finding the square of, say, 10, then 11, then 12, etc. In my mind, the formula was: x^2 = (x - 1)^2 + (x - 1) + x.

For example, if you know that the square of 10 is 100, the square of 11 is 100 + 10 + 11 = 121. The square of 12 is 121 + 11 + 12 = 144.

Another way to think about it is enlarging a grid along both dimensions: first add an extra column (x - 1), then add another full row (x).

I "found" the pattern by observing and thinking about the relationships. I never came up with a formal proof - I'm a developer, not a mathematician! Here's a good explanation of why this works with intuitive images rather than just equations and words: https://betterexplained.com/articles/surprising-patterns-in-...


When I was an undergrad learning linked lists I discovered its possible to remove a node from a singly linked list with only a reference to the node to delete. This is cool because much of the point of a doubly-linked list is to enable this but it takes another pointer on every node to allow it. My idea was instead of deleting the node itself, just delete the next one and fix up the data pointers.

Like:

    remove(node)
    {
        next = node->next;
        node->data = next->data;
        node->next = next->next;
        free(next);
    }

You need to handle the case of deleting the last element in the list but that can be done by keeping an EOL element at the end just for this purpose. It's surprising the me that this solution is not very well known.


   n    3       n    2
  Sum (k )  = (Sum k)
  k=1          k=1
(Hoping the formatting comes out right...)

That is, for the natural numbers from 1 to n, the sum of the cubes of those numbers is equal to the square of the sum of those numbers.


Back in the PHP 4 days, I discovered that you can put the php extension on any file and apache would parse any php code found inside. It's how I dealt with cross-browser css issues for a while.


On my own time and dime, I came up with a way to glue together a thin-layer open-source LLM and open-source Meilisearch. After initial testing, it works exceedingly well for ecommerce / retail / online shopping, for search, discovery, product recommendation and deep intent recognition.

Now I have to figure out how to turn this into a monetized product, in the face of legal threats from my employer.

(I happen to work for one of the entrenched-retrograde "IBMs" of the information retrieval industry.)


That looks pretty cool. Would you mind explaining a little bit how you did that into more detail? Like, you ask Meilisearch some documents (keyword search) and then ask the LLMs score of those and refine the list a bit?


It's a two-step prompt-injection process. In the first step, I wrap the raw typed-in input inside of a dynamically-generated prompt template that takes some context into account (for example, the specifics of the product that the person is currently looking at, or the recent history thereof). The prompt generates a list of Meilisearch keyword search queries. I issue all queries and harvest the results. Scoring and ranking happens in the second (also prompt-injection powered) step.

So the answer to your question is pretty much yes.


Circa 2004 I remember realising the novel idea of slowing down a vehicle with an electric generator, rather than disc brakes…

However, I soon discovered that it was known as “regenerative braking” and was being introduced into many modern hybrid vehicles

I still remember the incredible feeling of thinking of an invention that I’d never seen or heard of…


I sat in the Australian outback with a pencil and a block of paper, and discovered a way of mapping n-dimensional geometries in the permutations of a braid.

I also invented a set of fuzzy logic functions based on the powers of i, and also invented some "shhh!" things, which might some day become commercially important to me


A six instruction triangle/point collision test algorithm on the ARM 2 instruction set. That was fun.


In my life, I have invented the holographic lens, bicycles and network cables.

Sadly, as I arrived at each invention and contemplated it, I realised it had already been invented.


I "discovered" negative numbers in 2nd grade while reading those top down arithmetic problems incorrectly. Seems RPN was my goto assumption.

Like:

4

-

3

=

-1


i implemented a simpler version of dijkstra algorithm during second semester of our my electrical engineering degree to navigate the robot through a maze using arduino uno and some sensors, only to be taught about it in next semester. i remember thinking in class, that can't be it. there must be something more to this. of course i couldn't come up with all the related maths but still.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: