Daily Practice Ideas
This is just a list of ideas for what to work on. It will fluctuate over time.
[ ] - Something with MessagePack: https://github.com/msgpack/msgpack/blob/master/spec.md [ ] - Retro Computing [ ] * Atari ST [✓] - Get an emulator up and running [✓] - Learn how to install and use development tools (Devpac3, Hisoft C, etc.) [✓] - Copy sample ASM and C programs and play with them a little to get familiar [ ] - Write a simple ASM program from scratch [ ] - Write a simple C program from scratch [ ] - Export a C function interface from ASM [ ] - Write a C program to call an ASM-implemented C interface [ ] - Start playing with graphics? [ ] * ASM/C interface on Altair 8800 emulator [ ] * ASM/C interface on Commodore 64 [ ] * ASM/C interface on Commodore Amiga 500 [ ] * ASM/C on Nintendo 64? [ ] * Turbo Pascal [ ] - Get Turbo Pascal running. Requires a DOS environment. [ ] - Get a Turbo Pascal program building. [ ] - Look into getting Turbo Pascal running on Linux? [ ] * Turbo C [ ] - Get Turbo C running. Requires a DOS environment. [ ] - Get a Turbo C program building. [ ] - Graphics [✓] * Linux Framebuffer programming (software graphics without X) [✓] - Hook up some sample code which interacts with the framebuffer [✓] - Disable text cursor when showing framebuffer [✓] - Investigate usage of fbset (http://linux.die.net/man/8/fbset) to change fb rez [ ] - Try Framebuffer graphics on Arch Dell Mini 10 machine (with no X running) [ ] - Select aspect ratio and then scale to fit actual display. [-] * eg.: If program's internal res is 1920x1080 and display is 1366x768, then both have an aspect ratio of 16:9 so we simply scale both dimensions by ~0.711. If the aspect is different then we can either do a zoom, or render black bars to compensate. [ ] * DirectFB (Probably a dead-end now!) [-] - https://en.wikipedia.org/wiki/DirectFB [-] - http://elinux.org/DirectFB [-] - https://www.phoronix.com/forums/forum/software/general-linux-open-source/820485-directfb-has-temporarily-disappeared [-] - https://web.archive.org/web/20150324105333/http://www.directfb.org/index.php?path=Documentation%2FAPI+Reference [-] - https://github.com/DirectFB/directfb [ ] - "Paint" program for Pico8 as per the Pico8 Zine. (Issue #2 I believe.) [ ] * Bezier Curves [ ] * Animated Bezier Curves [ ] * Bezier Curves with Mouse Interface (requires double-buffering) [ ] * Bezier Curves with interactive control point placement [ ] * Pico8 program to plot points onto a canvas. [ ] * Pico8 program to support Bezier curves with an arbitrary number of control points. [ ] - Pico 8 Projects [ ] * Pico8 program with NURBS curves. [ ] * Pico8 program for NURBS curves with interactive control point editor. [ ] * 3D Software Renderer (Investigate simple projected cube demo) [ ] - SDL versions of the above Pico8 programs. [ ] - Custom memory allocator the way HandmadeHero does it. [ ] - Attempt some macros in C for things like `foreach' [ ] - Linux ASM [ ] * Custom ASM program for Linux. [ ] * Custom ASM program for Linux that uses the C runtime library. [ ] * Calling OS functions in ASM on Windows is awesome. Can you do that in Linux, too? [ ] * C99 (and earlier) fn() vs. fn(void) and see how ASM differs. (http://stackoverflow.com/a/693794/321897) [ ] - Linux General [ ] * Windows DLL Loader [ ] * Threads aren't necessarily faster than processes (Source: Either Glen Fiedler or IT Hare) [ ] - Linux Console Programming (CLI, Terminal) [ ] * Interactive wifi selection. (Assumes netctl and previous run of wifi-menu.) [ ] * Session save/restore (like with Tmux plugin) for Screen + dvtm + abduco [ ] * dvtm "taskbar" (persistent "windows" at bottom or top of screen) [ ] - Virtual machine that interprets custom bytecodes. [ ] - Network Programming! (See Gaffer on Games for more info.) [✓] * Same-machine Unix domain sockets client/server program pair [✓] * Separate-machine IPV4 domain sockets client/server program pair [✓] * Virtual connection over UDP [ ] * Full server->client, client->server communication over virtual connection via UDP [ ] * Support multiple clients on virtual UDP connection [ ] - Bootloaders! (Libreboot on other CPUs?) [ ] - Compiler [ ] * Compiler backend. (Custom intermediate code to ASM, then ld to binary.) [ ] * Compiler backend. (Custom intermediate code directly to binary.) [ ] * Compiler frontend. Generate LLVM intermediate code. [ ] - Rust Language [ ] * Project Euler in Rust [ ] * Rust Baremetal programming (https://github.com/hackndev/zinc) [ ] - Elixir Language [ ] - Console GUI Programming [ ] * Sample NCurses Program [ ] * NCurses replacement like: https://joeyh.name/blog/entry/a_tiling_region_manager_for_the_console/ [ ] * Lots of opportunities for commandline interfaces (ie., Dell Mini Laptop) [ ] - Algorithms [✓] * Binary tree implemented via static array [ ] - Copy API (for resizing) [ ] - AVL rebalancing [ ] - Current Impl estimates assuming perfect saturation at each level. Est. high based on AVL rebalancing. [ ] * Delta Compression (https://en.wikipedia.org/wiki/Delta_encoding) [ ] - Web [ ] * Page builder, like Jekyll [✓] * Text replacement [✓] - Needs to support proper footnotes (Note: footnote anchor names need to be unique across all posts) [ ] * Read stream from read end of a pipe [ ] * Read environment variables [ ] * Read a config file and modify the environment [ ] * Investigate libccgi http://libccgi.sourceforge.net/ [ ] * Investigate libctemplate http://libctemplate.sourceforge.net/