ZC’s Programming Project Ideas
1. Introduction
There are a lot of ideas out there for beginners’ programming projects. Unfortunately, I’m not sufficiently motivated to create most/many of them since they don’t feel original and/or practical to me. If I can’t foresee any practical applications that a project may have once its complete, then it feels illogical or nihilistic for me to create it. On the other hand, if what I’m creating doesn’t feel sufficiently original compared to other software that already exists, then I would feel as if I’m reinventing the wheel if I were to attempt creating a similar project. Doing redundant tasks feels nihilistic to me, even if it’s necessary for training sometimes. I suspect that my aversions to doing these sorts of activities are an autistic personality trait of some sort. Whatever it is, it’s one of multiple reasons why I’ve been unable to gain the experience that I need to become a software engineer or computational linguist, which is what I thought I would’ve been doing for a living after graduating college.
Another reason why I was never inspired to further improve my programming skills may have been that I didn’t focus on creating projects that I actually care about. Another problem may have been I didn’t think and plan enough about what I would need to do to make such projects happen. From experience, I don’t seem to enjoy learning about all the programming language libraries out there and their interworkings. However, I also never had much interest in knowing what it takes to build a website, until I wanted to create one myself. My desire to create this website motivated me to learn multiple new things in order to build and customize it to my liking, even if I thought some of these tasks were boring or tedious. So, it’s plausible that building programming software that I actually care about would motivate me to learn the necessary programming libraries and skills that I need to build said software.
Thus, the purpose of this webpage is to detail a list of (mostly) original and practical programs to create. Hopefully, this can start a new attempt on my part to try a different approach to learning software development. Each of these projects are of varying difficulty. I’ve tried to sort the projects based on their estimated difficulty, but the estimations may prove to be different from reality. None of the ideas below describe in great detail how the final programs should be made or what they should look like, so they will each require a lot of planning and thinking about the design process beforehand.
If anybody would like to assist or work together with me on creating some of these projects, please reach out at my contact page.
2. Personal Programming Project Ideas
2.1. Relatively Simple Projects
- Create an interactive population dynamics simulator to illustrate to readers how population dynamics work and accompany the Overpopulation FAQs. Try Javascript.
- I could write some Javascript code to make links on my essay pages red if they are linking within my own site. This would help readers more easily figure out what I’m linking to in many cases, and it would make the formatting or color scheme of my essay pages more consistent with the formatting of my homepage.
- Write a program that automatically re-labels downloaded files to your filename specification standards (this should be straight-forward, as it only involves case-toggling and search-and-replace function calls); store the original filenames in a log file.
- Write a program with similar functionality in Elisp. (See: Changes That I Want To Make To Dired)
- Build an interactive truth table generator? Try Javascript.
- Write some Javascript code to make links red if they are linking within ZC’s site, for my HTML pages that are generated from org-mode exports.
One thing that would really help people read and understand my site more clearly is if all the links in my essay pages were red if they are linking to pages on my site, if links stayed blue if they were linking outside my website, and if links were green if they are videos. But unfortunately, I haven’t done this since it would be very difficult to implement in org-mode.
2.2. Intermediate Projects
- Write a Python program that retrieves data from the Ebembe Language excel workbook.
- Create a Python bot for writing Wiktionary entries, using the Ebembe corpus data.
- Look into other Lexicography projects that use Python?: https://dictionaryapi.com/.
- Animated Video based on my paper “Mathematical Methods for Modeling Language Phonology” (using Manim Python library?) for Summer 2025 Math Exposition? (there are no plans to do SoME 4 in 2024)
- Ideally, I should expand the paper first though.
- Are there any programs out there that can create venn diagrams, based on a given set of set theory propositions? Or a set theory program that states a list of set theory propositions, based on the venn diagrams drawn and defined by the user? Or a program that allows input and output both ways? Try Javascript.
- Make an interactive JavaScript game or applet that explains the SUOP.
- Design a web application that automatically generates and counts syllables after specifying all the phonotactical constraints of a language, dialect, and sociolect in sufficient detail. Try Javascript.
- Create a built-in search webpage and algorithm for this website, similar to the one used on http://xahlee.info/xli_search.html?
- The 404 page could feature some JavaScript code that tries to reads the user’s input URL suggest pages that might be what the user was looking for.
- Create a web browser extension that can only let you view particular sites within a limited time window, twice, or other parts of the day.
- Create better screenshot program for Linux, similar to the default one on MacOS.
- A reddit bot would that searches comments for people who spell <should’ve>, <would’ve>, <could’ve>, etc incorrectly and explains what the correct spelling and grammar is and why. Mispellings of <shouldn’t’ve>, <wouldn’t’ve>, <couldn’t’ve>, etc should also be corrected.
- Create a program for mapping out belief networks.
- Tweak DockBarX with Python: https://github.com/M7S/dockbarx.
2.3. Advanced Projects
- Create/Train an AI algorithm and/or bot to respond to people who make reddit posts and comments asking questions or making arguments that assume the misconceptions presented in the FAQs.
- Create AI Software that can intake a corpus of content and create FAQs pages, similar to the concise and well-formatted style. List of FAQs pages to create and/or improve:
- Pro Gun Rights FAQs
- Georgism FAQs
- Drug Legalization FAQs. I don’t have enough interest in writing this, so it’d be better to crowd-source help from Libertarians and other proponents.
- Orthotropics FAQs
- Efilism FAQs (directed towards Efilists)
- Epistemology FAQs
- Pragmatosphere Glossary
- Note: An AI program designed to create FAQs pages could surely create great glossaries as well.
- Create AI software that can take written essays and turn them into educational videos.
- Create an algorithm that figures out which abbreviations are the most intuitive, or tries to figure out how natural language speakers would abbreviate words in their languages (given their specific dialect).
- Abbreviated words seem to be most intuitive when only the first syllable is used, it’s clearly identifiable and unlikely to be ambiguous, and it typically features a distinct onset and distinct coda.
- Improve espeak to make it sound more human/natural? (even if this is far beyond your abilities or free time, you could still figure out what would need to be done to improve it); https://itsfoss.com/espeak-text-speech-linux/.
- Creating a tool that will automatically generate graphics similar to the ones shown in Carneades’s Philosophy YouTube videos?
- Program hardware drivers for my ergonomic mouse?
- Fine-tweaking the QMK source code for my ZSA Moonlander to do something really specific that I can’t program with ZSA’s Oryx Webapp.
3. Lisp Programming Tasks for Improving Emacs
3.1. Relatively Simple Tasks
- Modify insert-from-kill-ring.el so that pressing ’q’ and <enter> exits the program by doing nothing.
- Modify insert-from-kill-ring.el to display the first line from each kill-ring entry on only one line. Preceding this, the number of the kill ring entry will be displayed at the beginning of the line in the following format: ##:\t[first_line_of_text_of_kill_ring_entry_#]
- Perhaps I could create a key that can toggle between these two displays?
- Modify the Emacs windows <swap-buffers> function to use Colemak homerow letters for swapping buffers between windows instead of Qwerty’s homerow letters.
- When I add a new footnote to the file, the footnote numbering of the org mode file should adjust.
- Make the insert state the default starting state for vim after creating a new file? If the file is new, there really isn’t anything useful to use the normal state commands on since the file is empty.
- Pressing enter while I’m typing a bulleted list should not create a bullet that gets indented on the next line. Instead, it should just create a new bullet that is on the same level as the current one.
- When new sections are added in org-mode, Emacs should automatically insert a blank newline between the sections to help separate things.
- Perhaps there could even be an option to toggle this in case there are times where it is unfavorable to have a blank newline for separation.
- I don’t know when this would be desired though. Maybe to keep information packed and dense, alignment of text, aesthetics, or something else?
- Create a new “thoughts-storage” file format, and create a major mode for it? Or make it a sub-format of org-mode?
3.2. Intermediate Tasks
- Configure minibuffer to toggle to not display certain commands and stay blank.
- Modify the org-mode HTML exporter so that clicking a header section will bring that header and it’s section to the top of the page. In other words, every section header will have a URL fragment link that shows that part of the page specifically. This would be similar to the functionality that is offered for Gwern’s website. There could be an option to toggle whether users want this functionality or not shown in their org-mode HTML exports.
- Configure Emacs to switch to other quote (’’“”) when % is pressed.
- Create a command that can re-arrange the items, commas, and spaces within a list each time the command is executed forwards or backwards?
- Create a command that can convert comma separated lists within a selected region into bulleted lists and vice versa?
- Create a command that only capitalizes the first word and content words, ’I’, and any other words that should be capitalized; but not words like ’a’, ’an,’, ’the’, ’to’, et cetera. It should not affect acronyms.
- Develop an Emacs command tool that can highlight selected uses of the verb “to be” and its other conjugations. Strictly following E-prime is probably a bad idea, but it might strengthen writing in some cases if forms of “to be” are rewritten to use less frequent and more creative verbs instead.
- Write some minor mode for typing Latin text in Emacs, such that macrons appear over the long vowels (when pressing the vowel key twice) and that Latin text is spell checked.
- Typing a vowel’s letter twice to put a macron over it, and backspacing will simply delete the macron without deleting the entire letter.
- It would be convenient if there was somehow even greater compatibility between PageUp and PageDown buttons in the mouse layer of the ZSA Moonlander and Ctrl+b and Ctrl+f commands for moving back and forward within Emacs buffers.
- For example, I wish that it was still possible to move forward and backwards pages in Firefox using Ctrl+b and Ctrl+f. The main benefit to this is that page navigation would be improved having to switch between the base layer and the mouse layer before and after pressing PageUp and PageDown. Of course, I could also program PageUp and PageDown into the keyboard if I hold a key down or double-tap, but I would dislike the added complexity that this alternative would involve.
- Create a own major Emacs mode to keep track of my own personal streaks for doing certain things everyday in a row?
- The hybrid relative and absolute numbering should be modified. Since the main motivation and advantage for relative line numbering is to make vertical motion more efficient, there are no advantages for using it for the very top and very bottom line numbers of the screen, since ’H’ and ’L’ would both be used to navigate to those areas respectively, not numbered motion. In other words, three lines would be displaying absolute line numbers (or just two if the cursor is at the very top or very bottom line of the screen), and all other lines would display relative line numbers.
- That said, absolute numbering should thus be used for the current line, as well as the top line on the screen and the bottom line on the screen.
- This would require being able to edit C code: https://github.com/emacs-mirror/emacs/blob/master/src/xdisp.c
- The line numbering in org-mode should account for when the collapse of “:PROPERTIES:”, “:CUSTOM_ID:”, and “:END:” affect the displayed line numbering.
- Create a function that can toggle whether the line numbering displayed in the left numbering column shows what lines the headers are on in the buffer, or what relative line numbers would have to be entered to navigate to those parts of the buffer, if all the sections, functions, etc remain collapsed.
- Maybe I want a command that will only toggle between absolute and relative numbers, instead of doom/toggle-line-numbers, which toggles between relative, absolute, and no line numbers.
- It would be convenient if there were commands that scroll by the number of visual lines given in the prefix arguments, instead of scrolling by logical lines. This would may scrolling files much easier when long lines are wrapped around the window edge, because then one could just look at the number line and know exactly how many lines to scroll up or down without even thinking about it.
3.3. Advanced Tasks
- For some reason, macros that I save in one session aren’t saved for future sessions. I wish I could permanently create the following macros and assign keybindings to them:
- Create a keybinding or macro for double-spacing or single-spacing lines within the region.
- See if I can record macro or some other solution that: 1. double-spaces, 2. single spaces, 3. added dash-bullets to a highlighted region of text.
- If it doesn’t work out, maybe I can view the macro code while using edit-kbd-macro, and write equivalent Elisp code that would do the same, or ask ChatGPT?
- Has anyone ever created an Emacs command that will display all of someone’s keybindings on an image of their keyboard inside an Emacs buffer? If not, would it be worth creating such a thing for my own use? I imagine thousands of other people would find such a program useful since it could help people visualize the most efficient keybindings that they could map onto their keys.
- I wish it was possible to flush-lines in rgrep and multi-occur buffers, but every time I try this, Emacs always returns “file is read-only”, although it doesn’t do that for other editing commands.
- Edit occur to have a Key Word In Context (KWIC) toggle option that can display the keyword in question at the horizontal center of the screen, vs displaying the beginning of the line containing the keyword?
- Similar to the evil-everywhere package, perhaps someone could create a colemak-everywhere package/module which replaces everywhere where keys were placed to fit Qwerty homerow keys with Colemak homerow keybindings and key presses?
- Org-mode presents doesn’t display italicized text correctly in cases where the slashes are before the end of the ending square bracket, like in this example. “Example” should be italicized in the previous sentence, but it isn’t, although it is italicized correctly in HTML exports.
- A list of English words (with nouns proceeded by ’the’) piped through DeepL into Spanish or French could be a great way to create a text dictionary. Then I could create a program that creates a new file and places the words side by side separated by some ASCII characters of my choosing, and perhaps even footnotes after a semicolon.
- A command that queries dictionary entries from wiktionary.org.
- Has anyone ever considered editing the info pages for Emacs so that they are displayed with org-mode instead, thus eliminating one less set of keybindings for learning, and also so that the folding headers functionality of org-mode can be gained when reading the info documentation? It shouldn’t be too difficult to create a parser that can edit all the info file to make them display in org-mode instead, right?
- Or maybe there’s already packages that do this, that I don’t know about?
- Create a fully functional Emacspeak module for Doom-Emacs.
3.4. Changes That I Want To Make To Dired
- Display relative line numbers in dired by default (to make vertical motion easier).
- Maybe I could create a user-defined function and command that can automatically format text to fit the requirements outlined in my standard text file formatting standards. (See: Relatively Simple Programming Project Ideas)
- When I rename files to similar but different names, how do I stop dired from preventing me from renaming the file since it thinks I am giving it the same name?
- In the suggestions, the old name appears, so when I press enter, dired thinks I am selecting the suggestion, when that’s not what I want.
- In dired, I wish ’gg’ and ’G’ would go to the top and bottom of every the directory files list, just as they do when editing text files. This might be resolved with evil-collection.
- Learn how to create symbolic links and hard links in dired.
- Remap the navigation keybindings in info mode so that they are exactly the same as dired-mode? This will generate less confusion.
4. Things To Report Or Program In Xfce
Despite all these issues, I still prefer Xfce as my favorite desktop environment. I just think that Xfce could be improved. It’s already improved a lot since I first tried it in 2014.
- Learn how to report issues on Gitlab. Report all of these issues or feature requests to the development team.
- Report bug in xfce-screenshooter to xfce development team
- Is it possible to add the icons from HaikuOS into my main OS? They look great.
- I wish Xfce would show the volume meter when I’m adjusting the volume, without displaying previous changes in the system volume in the notification center’s list of notifications. This is annoying.
- I would also rather have the notification bell icon inside the panel to display not display a red dot every time there’s a new notification. It distracts me if I’m noticing it.
- Currently, the only way to get rid of it is to turn on “Do Not Disturb”, which also distracts me, since the notification bell icon is crossed out.
- I would also rather have the notification bell icon inside the panel to display not display a red dot every time there’s a new notification. It distracts me if I’m noticing it.
- I wish that the xfce screen timeout timer would always reset upon awakening the computer from sleep/suspend mode, so that it wouldn’t be necessary to reset it upon starting the computer again.
- Create a variant of the Xfce time-out plug-in that counts upward as the minutes and seconds go by (instead of downwards), and when the time is up, the panel icon flashes. The stopwatch continues counting upwards until you click on it or use some chosen keyboard command. If you need/want to work a bit longer, then you can post-pone the time-out, and it will increase the length of the break that you should take to rest your eyes, while accounting for the additional time that you postponed the upwards-counting stopwatch. This behavior makes more sense than the current Xfce time-out plugin because it won’t block out the entire screen, will be less annoying, and it makes sense that you should want to take longer breaks that are at least several minutes long if you know that your eyes will need it, and you should take longer breaks if you have been working longer.
- Fix topmenu panel plugin for xfce.
- If I’m in XfDashboard / Mission Control / Task View, it would be convenient if I could just press one of the numbers on the keyboard to switch to that desktop.
- How to make scrolling more gradual for every turn of the mouse wheel in Xfce?
- The icons on the desktop still go offscreen when there is a monitor that is smaller than the main monitor placed to the left. This needs to be fixed.
- It would be convenient if Xfce gave the option to eject removable media, after right-clicking icons are displayed on the Desktop, rather than only allowing me to unmount them.
- I wish that Xfce would give the option to select a set of files, right click, and the option to place all the files in a new folder appears in the right-click menu.
- I wish Xfce would allow users to set default window dimensions for windows from different applications.
- It would be convenient if I could just press a keyboard shortcut to switch two maximized windows between two different monitors.
- I wish that the windows wouldn’t automatically shift to the left monitor when I plug in my second monitor. I also wish that the windows would return to their original positions on the main monitor when the second monitor is unplugged.
- I wish that Thunar would make the name fields longer by default, without me having to readjust that column’s width when resizing the window width.
- I wish that Thunar had a viewing option similar to the column view on MacOS Finder: folders are displayed in one column, and the next column(s) displays the contents of the selected folder(s).
- I would prefer Thunar to display the file renaming textbox inside the file manager’s window itself on the line of the file to be renamed, instead of opening a new pop-up window that will disappear (in only a few seconds if it’s a quick rename, which probably makes things a bit more annoying).
- I wish ’SUPER + 1/2/3/4/…’ would switch to that numbered tab in Thunar, and maybe just all apps in general.