Ask HN: Computing Side Project Ideas?
This year, I have been striving toward one of my long-term goals: to build a programming language. This has been a great way to exercise my technical muscles.
I wonder what other "computing"-type side project ideas are out there in which one would refine their programming skills (as opposed to interest-based projects like an app to do X or projects with monetization potential).
Examples off the top of my head:
- Make a programming language
- Build a database or query language
- Build a kernel module
- Implement a protocol (TCP, HTTP, UDP)
- Write code in a functional language
What other ideas fall into this category?
(
11 comments
| 2 points
| on HN
)
The idea is to write a pipeline that can determine the start time of an impulse sound, typically gunshot, that can be carried out on a raspberry pi platform. The sounds recording and highly accurate registration part is done with my platform. If this next part is done then the final stage would be to send this time to a central server to align with 3x other devices and which if also received then calculates the co-ordinates from where the gunshot came from and mails out alerts/map links. This is then used to counter poaching.
Then they'll likely figure out how to disable the sound without killing the device, so then you'll figure out how to tell if that has happened... and things continue.
You need to use FPGA board to build a machine that runs an OS ported to this architecture, which has a high level language with a proper tool chain, all built by yourself. Then you use the language to build DB, Webserver and such.
Actually, I think it's more interesting to focus on one and dig deeper.
This is a great place start. The ML family of languages are excellent for tokenizing and lexing, which is what you'll be doing when you get to your compiler project. For getting your feet wet I'd highly recommend working through the first few chapters of Okasaki's 'Purely Functional Data structures'. It's SML, which is really close to OCaml syntactically.
Once you're done with that you could jump to an OCaml project, say converting sexepressions to an AST of sorts, and practice the fundamentals of lexing/tokenizing.
And then the OCaml ecosystem has a parser generator, menhir, which is like yacc but better.
Anyway, this is the path I took and had a blast. I haven't written my own language but have dabbled with some of this stuff in a practical way now including adding new syntax to the multicore fork of Merlin (IDE syntax). It's now obsolete because multi core is mainline. But reading through and modifying code written by experts that walks an AST was an excellent learning experience; seeing what state needs to be carried forward, what sort of errors can be recovered from, those recovery strategies.
No matter what path you choose I'm sure you'll find it interesting.
I think it is possible to do Petaflop computing using a BitGrid[1]. I'm fairly confident I can get the VHDL or Verilog written to actually make the chip. After all, it's just a huge grid of Static RAM cells hooked to some 16:1 multiplexers and latches, and 2 phase clock distribution.
The tricky bit is the programming. I'm at the stage where I have to figure out how to compile an expression into set of binary logical equations, then route it into LUTS in the chip.
I also need to find out how much energy a single stage will consume in one cycle, to then figure out if this actually would be worth the effort or not. I estimate the odds 50/50 at this time.
[1] https://esolangs.org/wiki/Bitgrid