Matthew Carter's Projects and Tinkerings
Table of Contents
Back to main site: http://ahungry.com
Preamble
Within this page, you will find some of the various projects that I've been working on / have worked on etc. with some thoughts and musings on each.
Websites
Making websites is essentially where I began my programming career (more or less), so it's where I'll begin this list.
Ahungry Dot Com commonlisp
Site: http://ahungry.com
Source: https://github.com/ahungry/com.ahungry
This site you're reading now.
This project was written in Common Lisp circa 2015. It was originally written in PHP circa 2010. The site hosts the "Ahungry EQ Auction Logger" (http://ahungry.com/eqauctions). This is a live-stream of the Project1999 Classic Everquest Emulator server (http://project1999.org). Around 5000 unique players come to the site daily to watch auctions of their favorite in-game items from out of game.
Originally it was called the auction tracker, but someone emailed mentioning that that term is actually trademarked and my site was overshadowing their site (which was for tracking ebay auctions or something similar). As such, the page title was renamed.
There are a few main parts:
- A client binary written in C, bash, common lisp, or clojure, that uploads/streams logs to a remote listener on the server (used by the player base).
- A listener endpoint that drops the streaming logs in a "bucket" to be processed by a perl script that converts the logs into database entries.
- A database indexer written in common lisp, that works similar to ElasticSearch for performing fast "natural" word searches.
- The front end "client" (the auction page, consisting of javascript/html, served by a server-side rendered Common Lisp web app).
The project is licensed AGPLv3 or later.
Sluglisp / Slugelisp / Slugclojure commonlisp
Sites:
Sources:
- https://github.com/ahungry/sluglisp
- https://github.com/ahungry/slugelisp
- https://github.com/ahungry/slugclojure
These 3 sites are all derivates of each other. They list packages available in the Common Lisp (Quicklisp), Emacs Lisp (MELPA), and Clojure (Clojars) eco-systems. They extend the native / "official" channel indexes (similar to javascript NPM / php packagist) by allowing regex search across the README files of the packages source code themselves, as well as a front end filter functionality.
The underlying system is using the Common Lisp Caveman2 web stack.
They work by indexing/pulling down the github star counts and README files, and essentially grepping them on demand, as a user interacts with the site(s).
The projects are all licensed AGPLv3 or later.
Langpop commonlisp
Site: http://lang-pop.ahungry.com
Source: https://github.com/ahungry/language-popularity
This site was created for my own usage, to quickly view "popularity" as derived from Reddit (https://old.reddit.com) subscriber counts.
The site was created in-tandem with a tutorial on using Common Lisp web frameworks (http://ahungry.com/blog/2015-07-07-Writing-a-Common-Lisp-Web-App.html).
It works by querying data from Reddit's API and making an on-demand pie chart for a visualization.
License: AGPLv3 or later.
Games
In addition to websites, I have tinkered with a variety of games, from web based games that cover a wide spectrum of implementations (javascript + canvas, javascript + dom manipulation), to SDL/OpenGL based native desktop games, to portable framework Godot (https://godotengine.org/) games that run on webgl, android, and native.
Magic Shield Attack clojure godot
Site: http://magicshieldattack.com (playable at link)
Source: https://github.com/ahungry/magicshieldattack
This one comes first, because it's my biggest focus (and procrastination).
In this game, you move around a grid based world, similar to Final Fantasy Tactics (play it if you haven't, it's great). The game plays like a never-ending roguelike, and as it is written in Godot for the front end, it's very portable. Oh - did I mention (as with most my games) it's multiplayer? The server side is written in Clojure.
I still have a lot of work to do on this game, and my most critical reviewers for the game are my son and daughter - so, here's to hoping I finish it before they get too old to be interested in it /laugh.
The game is my third big attempt at an online game, and unlike my first 2 attempts, it tries to remove a lot of the complexity that creeped in on the gameplay side, by keeping the game extremely basic at a game play level (think, rock paper scissors, but with movement of your character playing a role).
License: AGPLv3
Pseudo javascript commonlisp
Site: http://pseudo.ahungry.com (playable at link)
Source: https://github.com/ahungry/pseudo
This game is a "pseudo" 2.5d game - it uses the ray casting technique to make it appear as if the game is 3d (the old Wolfenstein effect).
The game is also multiplayer, but plays in a web browser. The "rendering engine" are overlayed slices of DOM controlled via JS, and the game can run on a 2004 laptop with no lag or staggering.
This game was my second big attempt at an online game. It's very rogue-lite-esque, as it is essentially never ending, allows collecting of gear, and has the player dive down into dungeons.
The sprites were fun to make on the game - they were done in Aseprite program.
License: AGPLv3
Ahungry Tactics javascript
Site: http://tactics.ahungry.com
Source: https://github.com/ahungry/ahungry-tactics
Very original name right? This is a Final Fantasy Tactics like game, where you move around on a grid system. It uses websockets just like the Pseudo game to handle multiplayer. It also sprinkles in some elements of the digital card game genre, so players collect cards to do their attacks (and can trade cards).
The game was originally written using JS AJAX polling with a PHP backend / daemon that would update the game loop every 10 or so seconds. Over time, it was rewritten into Common Lisp like a lot of my other early PHP projects.
License: APGLv3
Emacs Lisp Packages emacs
I enjoy using Emacs, and I also enjoy extending it (and sharing the extensions with the world).
If you load up the package list in Emacs (M-x list-packages) and press 'f' for filter, and type 'ahungry', you should, at a minimum, see:
geben-helm-proj... 20160611.59 available melpa Integrate helm-projectile with geben prog-fill 20180607.132 available melpa Smartly format lines to use vertical space. swagger-to-org 20160611.56 available melpa Convert a swagger.json file into an org-mode file ahungry-theme 20180131.328 installed Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry). md4rd 20190313.240 installed Mode for reddit (browse it). org-jira 20190712.443 installed Syncing between Jira and Org-mode.
Those are packages I have added to GNU Elpa or MELPA at some point.
I have a few more that I've added to Github, that I should still submit to one or the other (but occasionally the MELPA review process is a blocking point for getting the code accepted).
Color Theme Ahungry themes elisp
Source: https://github.com/ahungry/color-theme-ahungry
install from GELPA/MELPA: M-x package-install RET ahungry-theme
For this package, I went through the copyright assignment papers and gave the full copyright to the Free Software Foundation (https://www.fsf.org/).
Essentially its just a color theme for Emacs, but it was my first foray into an "official" Emacs contribution and GNU project. The experience for contribution was very different than that of contributing to a Github issue, but the community/mailing list was extremely welcoming and encouraging.
The package is available in GNU Elpa and MELPA package repositories.
I have a branch with a "mello-theme" that I use day to day, that I greatly prefer compared to my original "master" branch theme that I had added to the GNU Elpa repository. I should make that an official installable package.
License: GPLv3
Org Jira jira elisp
Source: https://github.com/ahungry/org-jira
install from MELPA: M-x package-install RET org-jira
This is a package that I took over when the old maintainer (Baohajun) went inactive due to no longer using Jira.
It's probably my most starred github repository.
It allows integration between Emacs' org-mode and the Jira ticket system by Atlassian.
My first large contribution (that gained confidence to hand the package over to me) was a nearly full rewrite of the networking code, to take it from a synchronous/blocking package (aka, it would lock up Emacs entirely while pulling down Jira issues, much like GNUS in Emacs does) to a fully async/callback based variant (so, hundreds of issues can get pulled down without any interruption to the user of Emacs).
I continue to maintain the package and try to be altruistic in serving the community with feature requests that I do not necessarily have a use for.
License: GPLv3
md4rd (mode for reddit, aka reddit-mode) elisp reddit
Source: https://github.com/ahungry/md4rd
install from MELPA: M-x package-install RET md4rd
This package is one I invented that went beyond a maintenance inheritance, or a color theme. It was not necessarily the first, but it is definitely the most popular.
It allows reading Reddit while in Emacs. I got the idea while using the Emacs hacker news mode, and coming across a "hierarchy" Emacs package (essentially tree-like folding of any arbitrary data structures).
It allows Oauth level sign in, which will permit the user to upvote/downvote/post comments on a main subject, or on another user's comments.
Conclusion
If you think anything here looks particularly interesting, or just want to chat / mention / request something of me, feel free to drop me a line at m@ahungry.com, or ping me on twitter at https://twitter.com/_ahungry, or leave a comment below.
Changelog
- Added a new theme from org-html-themes (https://github.com/fniessen/org-html-themes)
- Slightly adjusted the theme
Comments
fin.