Hacker News new | past | comments | ask | show | jobs | submit login
1001 Things To Hack Before You Die
105 points by andre on Nov 11, 2010 | hide | past | favorite | 93 comments
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:



Some things I'm glad to have done:

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.


> Write a Hello World application from scratch. No C library, compiler, linker, nothing. You get a hex editor.

"To prepare a donut from scratch, you have to first create the universe."


Same with apple pie.


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.)


At least part of the "fun" on a loosely modern operating system is learning the nuts and bolts of the executable format and loading conventions.

I've never spent much time there, but some of the ideas are laid out well in this two part post: http://blog.ksplice.com/2010/04/libc-free-world-2/

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?


It's not that difficult or tedious, but it does require that you read the elf specification, or write your own "OS" from scratch.

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.htm...

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.


Then it's just setting some bits in the video memory to "on".


You can also take 1. to the extreme and write a mini-OS from scratch. Bootloader and all.

http://news.ycombinator.com/item?id=1605119


Orthogonal. They are using gcc there, which is not the same as his #1.


A variant on 4 that I've been meaning to get to for a little while now is to implement the same network protocol in several languages.


- Write a video game emulator (any old console or computer platform)

- Create a programming language

- Restore an old broken down pinball machine

- Build a mame arcade cabinet

- Write some Interactive Fiction

- Learn to make awesome programmatic artwork with something like Processing or Nodebox

- Create a roguelike


- Create an editor.

- Create an os in the language you designed above.


It's like your read from my personal list.


In the spirit of the topic...

  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


0001: Does F# count?

0010: Done that. the last project I openly released to the outside world now has at least that many users (6x that in downloads): http://dl.qj.net/psp/homebrew-applications/ebootr-v15.html

0011: Nope.

0100: Ditto.

0101: I use gvim and Nano. Sue me.

0110: Did that in high school. 我贏得了比賽

0111: Working on it.

1001: I run a few (ebooter, and my first work on Git: http://github.com/indrora/creed )


1000: Learn binary!


I'd have made that one 0000, personally...


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


17 - Make it through as much of http://projecteuler.net/ as you can.


1 - register YourName.com

2 - start a blog

3 - learn *SQL

4 - develop a javascript site, (gmail.com)

5 - write your own planning/todo program (because others just don't work)

6 - read, sign up, make at least one post on HN

7 - start an open source software project


0000. master the command line

0001. master a keyboard-only text editor (vim/emacs)

0010. master your mind

0011. determine how to help the world the most with the least effort

0100. learn from your mistakes

0101. learn as many programming methodologies as you can

0110. create an awesome sheep for electricsheep

0111. reverse engineer a program from decompiled machine code

1000. write a book worth reading in 100 years


Shouldn't 0010 be 0000? I would think mastering your mind would come before mastering any external tool...?

Definite up vote for answering a question about what to hack in the spirit of a hacker.


0010 is the true hack. these tasks can be executed in any order--even in parallel.


You skipped #4.



cause an additional security policy to be put in place on your high schools network


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...


I did that. In an Oxford college, to boot.


Ah, jmeter. The whole district was jammed. Two days ISS.


14 - Get a patch accepted to an open source project.

15 - Version your dotfiles and put them up online for others to learn from.

16 - Write and open source a plugin for your favorite text editor.


Notable things I'm proud to have achieved/hacked/made, in no particular order of importance:

- Built a HAM radio-vacuum tubes were involved.

- Developed a useful library of JavaScript tools

- Developed my own MVC web framework

- Collaborated on the design of, developed and launched custom child-still tweaking that one for performance

- Started a successful business

- Be a part of a popular Open Source project

- Wired a house

- Participated in the saving of a few lives


18 - Learn proper use of a version control system.


Good challenge.

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.


easier to keep count: https://spreadsheets.google.com/ccc?key=0AsoY_yr0BJCVdFhNVi1...

go ahead and add stuff, let me know if permissions are set incorrectly.


-Switch from vim to emacs


-Switch from emacs to vim


- start using emacs or vim


Then say "ah, screw it!" and code your own editor.


And call it the BestOfBothWorlds Editor.


I thought adding more features to emacs still made it emacs.


Ignore the haters and promote nano!


I've always wanted to switch emacs from elisp to perl. :)


17- Get some sleep


lol, good one, or a way to lower the requirement for so much sleep


(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...


1 - Develop a typesetting language based on markdown + css which can be so good as LaTeX.

2 - Learn Python, Haskell, Lisp, Lua, Ruby and build you own f*cking good language.

3 - Discover what is a monad.

4 - Play with Arduino.

5 - Write a basic kernel from scratch.

6 - Forget about Vim and Emacs. Learn how to capture brainwaves, plug an usb cable on it and do an text editor based on thougths.


Did anyone else read the 1001 in the title as 9 in binary ?


yup :)


- Write a (simple) web server.

- Implement part of a networking stack.

- Interface with some piece of hardware in a way it wasn't designed.

- Create a browser extension.

- Add an easter egg that nobody ever finds.

- Code a strategy to a game and compete against other implementations.

- Discover a subtle bug in a very well used bit of code.


- 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


-Do something that warrants its own Wikipedia article.


-Do enough somethings that you warrant your own Wikipedia article


Ship it.


11 - Write a book

12 - Fall in love

13 - Donate


13a - Donate to EFF


13b - do something that warrants the eff coming to your rescue


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.


build a motorcycle or other vehicle

invent a device like this guy http://www.npr.org/templates/story/story.php?storyId=1308907...


The Wikipedia page on the Universal Nut Sheller makes up for NPR's lack of technical detail:

http://en.wikipedia.org/wiki/Universal_Nut_Sheller

The thought that this machine is sometimes custom made to accommodate different environments and plants intrigues me.


- Finish "The Art of Computer Programming."

- Use the fixed point combinator in Javascript for something.

- Make your own bike lights.

- Figure out how the monad laws really work.

- Write something that makes more than $100 on the App Store.

- Figure out how to get the plants in the garden to not die.


Output Mandelbrot. Make it interactive.

Enter a hacker/code competition.

Predict the outcome of a sporting event.


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.


- Learn Forth

- Learn Erlang

- Learn to play the panflute


Of all the things arbitrary, why a pan flute?


- Learn to play the electric cello


8 - set up twitter account

9 - poke somebody on facebook

10 - comment on techcrunch story


Build your own computer using FPGAs (Field Programmable Gate Arrays).

Bonus points: Make it capable of reconfiguring itself based on the program it's executing.


Create your own computer from scratch


- Program a microcontroller, interface it to both a packet network and some analog sensors.


Create your own genetic algorithm for generate your own society of virtual beings!


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


-initiate new item freeze on your todo list in order to check everything off


Well, it looks like the 9 Things To Hack Before You Die are already posted.


- Run your own web server.


Build your own web server. :)

Bonus points if you hack the hardware together in the most power-efficient way. Or as small as possible. Or pretty. Or if it makes coffee too.


I would have assumed the list would be numbered in binary ;-)


- compile a linux kernel - overclock/underclock your cpu


Build a giant robot.


Larger than a city bus.

Oh, and in case someone hasn't seen Jaimie Manzel in all his retro 1990's site glory: http://jamius.com/


- Build a windmill


get posted on hack-a-day


Make a 1001 X to Y list


11 - Install LAMP


Why LAMP just why? :)


Upload myself.


Cheating!


My top ten list (I just thought it up now, so this is not my final list):

1. Making my own uC architecture and write it in HDL.

2. Make a lisp machine

3. Hacking a game for a old game console (not an emulator, you have to actually get it working on the physical machine).

4. Experiment with different types of OS on uControllers.

5. Hacking to gather a home automation system.

6. Implement a whole web server in the uController from scratch (means you have to make your own protocol stack and such things).

7. Make a widely used C library.

8. Get my long standing dream of localized electronics kit store to launch.

9. Get a patent on something new

10. Make a super computer cluster from home PC's

I know lot of these are very hard but hey I am just 19 and have a whole life ahead.


Before you die, you absolutely need to create a child. It will be your greatest creation.


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 :)


Yeah, nobody has ever done that before.


I'd say you need to create 2 childs in order to work towards a dominance of hackers on earth.




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

Search: