Matthew Carter's Projects and Tinkerings

Table of Contents

HINT: You can press 'n' and 'p' keys to navigate around quickly and read this as if it were a chapter book. Alternatively, click in the top right corner to see it as a giant HTML document with folding, or just disable javascript if you'd prefer to see it as a massive in-line file.

BONUS HINT: If you want to read about some particular subject, press 'C' for a tags index (I tend to tag by programming language, or 'thing'). You can use '?' to see more shortcuts, or click any HELP button.

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:

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.

Comments

fin.

Author: Matthew Carter

Email: m@ahungry.com

Created: 2019-10-02 Wed 00:37

Validate