There's already 1001 (places to visit|books to read|movies to see|{insert other activities}) before you die. Why not 1001 to hack/make/develop/design/start/attempt before you die that's more HN friendly:
1. Write a Hello World application from scratch. No C library, compiler, linker, nothing. You get a hex editor.
Does this involve anything more than loading "Hello, world" into memory, setting up the registers/stack in a certain way, and invoking the syscall interrupt? (All the cool stuff happens in your terminal emulator. That's where 0x41 gets turned into the pixels that look like "A" on your screen, after all.)
Doing it with _just_ a hex editor (ie writing out the ELF headers and sections yourself) may not be exactly what the commenter did, though. Cos that sounds really tedious.
I imagine that even writing "Hello, World" in the simpler way that you describe, on a simpler system (Apple IIe or so), would probably teach me something. I remember trying to write 6502 machine code in hex (no assembler) on my IIe when I was about 10 years old. It never worked then, I wonder if it would work now?
The idea is that you strip away everything that does something for you so that you are sure to completely understand the entire process with no "pushing the green compile button."
Write it for a system that doesn't have a terminal (or a character mode.) A Super Nintendo (65c816 CPU with the most thoroughly-tested emulators on the planet), say.
0001: Learn a functional language well enough to write something of some complexity
0010: Create a product with 100+ users
0011: Sell 100+ products (doesn't have to be the same as 0010)
0100: Get married!
0101: Learn either vim or emacs
0110: Learn Mandarin
0111: Become an expert at something tech *and* something non-tech
1000: Contribute to an OSS project
1001: edit: learned binary. thanks for pointing out my stupidity lol
Some of this is hacking in a technical sense, some of this is hacking in terms of modifying your life to get it to be what you want it to be, or to grow yourself.
19 - Harness Zero Point Energy
20 - Publish a paper in a journal
21 - Present at a conference
22 - Hack food, make something new
23 - Modify your body (with something cool like magnets)
24 - Do something legally/morally questionable and get away with it, just enough to make you rethink boundaries but not enough to hurt someone.
25 - Modify your brain chemistry in an expansive way
26 - Build a great group of friends
27 - Put your projects down and spend some time with your family
28 - Learn assembly language
29 - Code an old school demo
30 - Write a cool program on an 8-bit computer
31 - Travel to another continent with a completely different culture and immerse yourself in it.
32 - Learn how to crack (i.e. break into) applications
33 - Learn how to crack (i.e. break copyright and write keygens) software
College, actually. Got them to fix an issue with forgetting to clear the cached AFS credentials when their login program crashed.
Also tried to convince them to get people to use SSH instead of telnet, but they took a few years to get around to deploying that and ignored me. In retrospect, the university president was the wrong person to tell; he had no clue what I was even talking about. Mind you, this was in 1998 and more than a few people had already figured out that it's not too hard to listen in to unencrypted traffic on a LAN. I'm assuming that the people who did bad things with that knowledge are the ones who actually got them to change the policy.
Also made them change the terms of use that forbade "downloading copyrighted material" to "downloading copyrighted material without permission" given that almost everything online is copyrighted.
I also ended up acting as an unofficial helpdesk member just because I was up there chatting to the real people too often. It's always fun to fix problems for people and when they ask how you know so much about the program they're using to point out that, in fact, you've never actually seen or used it before...
Here are some of the things that I have done so far.
1. Write an editor based for card-image files in XPL (for the Sigma 5 RBM system)
2. Write a document processor along the lines of nroff for fixed-width character printers (think Courier). There were at least two of these I believe
3. Write a simulator to estimate the probability of a busy signal for a given call volume and a given number of phone lines. Oddly, when we later compared these results to similar simulations provided by the phone company, the phone company's numbers showed we needed more lines.
4. Write a code generator for an industrial compiler.
5. Write the (rough) equivalent of an IRC channel for AX-25 packet radio DX-spotting network.
6. Write the software necessary for the first real-time QSO-logging system used in a DXpedition. (Used in the YJ8V/YJ8PD trip.)
7. Contribute a very tiny piece of software that is part of a control-system analysis program used to decide where to locate Argonne National Labs. (And I mean really tiny.) First program I wrote for pay.
These are just a few of the more fun ones.
However, there is one challenge that has captured my imagination over the years. Imagine a final exam of programming skill that has the student in an electronically-locked room with a computer that controls the lock. There are but a few necessities in the room, no internet. The student needs to write a program that will unlock the door.
I haven't done this last one exactly, but sometimes it seems like a metaphor for some near-deathmarch projects I have gotten myself into.
Current homework includes writing an intercepting proxy in a handful of languages.
(disclaimer: I'm a bit of an ambitious guy and I probably won't achieve even a "sizeable" portion of this, but I will try)
Make my own versions of these pieces of infrastructure in one or more variants of Lisp, using various novel approaches or combining some "old" approaches that are nevertheless not used as much as they should be today, and comprehensively document it all:
My own web framework (in progress), window manager, UI toolkit and layout system, 3D engine, video editor, image editor, video and sound codec, emacs-style editor, operating system, kernel, Common Lisp implementation, virtual machine, BIOS, OS bootstrapper.
Also, maybe an NES or SNES emulator, for fun and maybe trying to make a full blown modern development environment to make it easy to make whole new games for these consoles instead of just making more or less elaborate hacks to already existing games.
Learn to play the piano, guitar and violin. Learn to compose my own music.
Not that I expect or count on it, but it would be convenient if a treatment to stop aging appeared while it's not too late for me, cuz I'm pretty sure I'll be out of time before I'm doing what I want to do properly...
- Repair something that isn't meant to be repaired
- Make a disposable consumer product into something more useful and enduring
- Use something old to create something meaningful for someone you love
1 - Develop a custom firmware for Playstation 3.
2 - Create a native and fully fuctional distro for Playstation 3.
3 - Achieve 1 and 2 and send a certified post mail to Sony with you happy face on it.
4 - Try to return to the Open source community as much goods as it has given to you.
Learn 3D graphics and build a small virtual world.
Virtual worlds have always fascinated me, but I've always been a command-line/server guy and never got around to learning the theory/math that goes into doing 3D graphics.
A few years ago I came across an old teddy-ruxpin... I thought it would be awesome to build a setup to record custom control tapes... never did it, but I still want to.
1. learn asterisk
2. Install Haiku
3. Make a Firewall with a xBSD
4. Install linux in Mac/apple
5. Install cool stuff in device with adroid
6. With Backtrack hack your Police Department
7. Help people in a forum
8. F&%k in second life
9. Build a LFS
10. Help someone to be better hacker
Or you can create a child that solves the 1000 hacks before you die. That's the closer you can get of a high order function that solves that for you :)
1. Write a Hello World application from scratch. No C library, compiler, linker, nothing. You get a hex editor.
2. Write a non-bootstrapped compiler or interpreter using assembler.
3. Write a program that learns to play a game.
4. Develop a network protocol.
5. Write a web server. You can use the language of your choice, but nothing is allowed except a socket library.
6. Write a platform game that performs at least as well as the original Super Mario Brothers.
7. Design a circuit that has some sort of non-trivial purpose and build it.
8. Write Tetris in Javascript.