Pamela Bowman's Portfolio

--------------------------------------------------------

--------------------------------------------------------

Welcome to my portfolio!
This portfolio may look plain, and it is. If you are here, I have applied for a job that in some way involves programming. The intended audiences for this page include recruiters and employers with at least a mild technical background. I've lately been focusing on game engines, client design/layout and the back end. I don't have everything I've ever done here, and some things cannot be posted due to agreements I made with other collaborators of projects.

Please keep in mind that if you follow a link, you may need to use your BACK button to return to this page, as many of the pages were intended for general audiences, not just prospective employers.

Election-themed Bullet Hell (Danmaku) Game (links below) Status: Canceled
Written from scratch with a completely custom engine, I started the project (working title was: POTUS Hell 2016) as a low budget, low priced, and relatively low time frame indie game where my main motivation was just to get something out there. Its code was originally intended for a different game, and excluding those original efforts I expect to spend about 4-5 months on the code. I actually completed the majority of it, but ran into problems with acquiring adequate artwork. Unfortunately, these problems couldn't be resolved quickly enough for shipping before the election to be realistic. The game itself was intended as satire, fairly skewering all of the 2016 presidential candidates in the process. I may someday throw it up on itch.io or Steam with re-themed artwork and dialogue.

On the technical side, it is written in C++ supported by a custom everything, except that I use open source OGG/Vorbis libraries. Aspects of the resource and build systems, and much of the core source, dates back as far as 2007. (the mapmaker listed on this page has been repurposed and/or overhauled several times) An old port (sound excluded) is on my personal Android device.

Here is the game in action, modified 2017-04-18 for this portfolio (contains audio): https://www.youtube.com/watch?v=KWUV4wgvBRc

Two sample sources, for the projectiles themselves, are below. This is an old snapshot from 2016-04-19 and was subjected to much further improvement, but it demonstrates my general coding style. I plan ahead to ensure future modifications aren't exponentially more time consuming. One feature I like to point out is that the sources were originally generated in my Java-based resource/build suite, which creates stub versions of classes with nothing but new/delete support and basic memory leak/double delete detection code.

Projectile.cpp (browser-friendly version)
Projectile.h (browser-friendly version)
Team Fortress 2 Modding (links below) Status: Completed/On Hold
Modding in a language known as SourcePawn, a language with syntactic similarity to Java and C, however it is not an object-oriented language, or at least it was not while I was active in the community. (OOP was fully implemented around September 2015) The language also has rudimentary dynamic array support, but without so much as structs and given the predictable and relatively small data sizes needed, I don't find them to be worth the hassle in the examples provided. It is compiled rather than interpreted, but the platform supports dynamic loading and unloading of modules. The code samples are pretty meaningless if you don't have a use for the obscure language (its use limited entirely to Valve game modding), and in the videos it might be hard to pinpoint what my code does if you've never played TF2, but it shows a clean, commented style with organization that compensates for the lack of OOP. Also worth noting, I made all the source .txt files so they would be readable in your browser.

These are three public samples out of dozens -- most of my mods are still private. WORK-SAFE WARNING: YouTube links contain audio, and can get very loud at times. Recommend headphones with low volume and/or mute!
BREW side-scroller Status: On Hold
A side-scroller programmed in BREW. It was created entirely from scratch, originally as a "get familiar with the BREW API" program. Features include:
  • A custom side-scroller engine which scrolls in all directions.
  • A custom image format which addresses two issues: Phone incompatibilites and quirks with PNG images, and greater power, currently including:
    • Software transparency
    • Draw-time dynamic image scaling
    • Pseudo-sine wave graphics (fixed point)
    • Super-fast loading, fast draw-time decompression
  • Switchable characters with smooth transition between characters
As I do not own a test bit enabled BREW device, I cannot show the game at interviews. Screenshots can be found at this link, and a video can be found at this link. I apologize for the poor quality.
Civilization 4 Map Maker (open source) Status: On Hold
Civilization 4 map maker, open source project which I founded. The program itself is based on map makers I created for the MMO for cell phones below, and the BREW side scroller above. It utilizes the Java Swing API. The project is new, having its first code drop on 4/13/08, and therefore not fully set up yet (i.e. no SVN), but the code is up and I welcome you to view it.
MMO for cell phones (no link available) Status: On Hold
Link to Textbox J2ME widget source - Small example of my current coding style. Its base class was recently refactored from "Control" because "Control" is used by the media library, so "Widget" and "Control" are tossed around like the same thing. Also, the tabs used in the comments are aligned to Eclipse IDE style, so they won't look right in your browser.

Started in mid 2007, a massive effort toward making an MMO that will run on ordinary cell phones. The client is coded in J2ME, and virtually everything is from scratch. The user interface is built on an elaborate set of fully-featured controls (aka widgets), which are managed by the control container. These controls match or are superior to the default J2ME controls, giving the developer a great amount of power, and with a look and feel that is consistent across all platforms. These controls can easily be plugged into any J2ME app, and I happily use them whenever I make a test app and will use them in any future J2ME project.

The client itself is as thread-safe as threads can be. Data is encrypted, queued(flushed every 40ms), and sent to the server with no risk of mangled data. Like any MMO, it uses a persistent connection, which I anticipate will have problems on a real phone. (and of course, I have a few ideas on how to handle such problems) Painting is also queued so that for slower phones, paint is not a blocking action, thus users can browse the app at the same speed as any other phone, just not at the same frame rate.

The server(Java) is also thread-safe, using the same techniques as the client. Obviously, keeping it this way is much more complicated as user interaction comes more into play. The server communicates with a MySQL database, though data used by common functions is cached from the database at application startup and 'shouldered' by the server, to keep the DB from being overwhelmed. Aside from the server itself, I've developed several internal apps including a Java applet Telnet client which handles encryption/decryption, since said encryption/decryption makes it unreasonable to use standard telnet. Other internal apps include bots which simulate real users connecting remotely, a proxy which decrypts and logs client/server communication, and other time-saving or automated 'clean-up' applications.

Only time will tell where this project will go, but I would be happy to show some of the source or the app on request.
Webcomic Management System Status: Complete (mostly)
Made in 2007. Probably ironic considering that I just said I'm not a graphics artist, but I am currently working on a fully featured webcomic authoring system. It works for anyone whose webserver allows writing files, and supports PHP and MySQL. The link above has all the source. It's designed to automatically work on Dreamhost and HE.net websites. It supports .gif, .jpg, .png, flash, and php templates, and the user end features are just about complete. I'd like to support RSS feeds, but I'm too busy on my current project.

Templates and global functions are heavily used with this system. Every page includes functions.php (global functions), toptemplate.php, and bottomtemplate.php, the latter two can be edited by anyone who uses the system for a more personal look. Classes are not used, as there's no real benefit from them in this case. Everything you see was coded by me, including the customizable (by the webcomic author) calendar.
Mobile Webcomic Viewer Status: Changes pending
The app can be downloaded to a J2ME via the above link, which in 2016 means it's next to unusable. The rest if this text is in the context of 2008.

It is not a stable release. In fact, some of the early comics are guaranteed to crash your phone. I plan on working out the memory issues(which will need server mods) and connectivity issues (retry algorithm), updating the code to use my latest techniques, then I'll release it as open source. But for now I'm dedicating my free time toward my current project.

Problem: Web browsers for mobile phones are horrible for comic viewing. Attempting to view webcomics online tends to have disastrous results. Often the image is shrunk to the point that the captions aren't viewable. This program solves that problem, at least for comics using the Webcomic Management System above.

The two combined allow anyone with just a basic website, meeting the minimum requirements for the website not only publish their comics on the web, but also be viewed on mobile phones. The program allows people add comics that support the system, (saved persistently, of course) as well as modify entries, remove, and view comics. The viewed comics are completely unaltered, at the same height/width as it would appear on a computer. The viewer allows both vertical and horizontal scrolling, and the menu allows navigation. (though basic previous-next navigation can be achieved by pressing the 1 and 3 keys)

Source here.
Japanese Flashcard Program Status: May Revive/Overhaul?
Made in 2004. Another simple program, a flashcard system. It has a simple, yet intuitive and user friendly interface. It still suffers from the age-old flashcard problem, where one word can have dozens of correct answers. But it includes some tricks like allowing "to" to be put in front of verbs. It's a simple program that loads hard-coded arrays, but if I could redo this one today, I would have it load wordlists from a file into a class, storing the list in the class as a dynamic array or vector, and have several functions managed by that class.

If the above link fails, and it probably will, downloading and unzipping this file and then typing appletviewer j2e.html in a console window should work if you have Java installed.
Java RPG Clone Status: Discontinued
Made in 2004. Made in approximately 40 hours, except for few of the graphics. It was a final project for a Java class I attended in '04. It's a standalone Java application. It's incredibly rough and poorly written, but I leave it up to show growth. The entry class is GameWindow.
Java Chat Client/Server Status: Discontinued
Made in 2007. A simple chat program made for the purpose of experimenting with client/server protocol. It should load properly in a browser, but because I do not have a decent server to host the chat server program on, I decided to just put up the programs and source code. Just the result of playing around for a day or two.
PHP Message Board (link no longer available) Status: Discontinued
Made in 2005. Probably not a great demonstration of my user friendliness, as the project died fairly early on. Originally the object was to make a forum that was completely low bandwidth using CSS, and quick to navigate. Like with the webcomic system, it relies heavily on global methods, and uses MySQL for data storage. There's a couple minor bugs, but it is stable and functional. As it was hosted on my old website provider, it is no longer available.