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.
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.
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.
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...
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 :)
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
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 :)
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...
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.
In hindsight, it seems super trivial, but back then it felt so satisfying.
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.
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.
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/
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
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
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-...
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 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!
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-...
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.
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.)
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 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
Sadly, as I arrived at each invention and contemplated it, I realised it had already been invented.
Like:
4
-
3
=
-1