Wiki

Clone wiki

Practice / Home

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/

Updated