Jeremiah Blanchard

PhD, Computer Engineering
Director of Computer Engineering
Assistant Instructional Professor

NSC 223
jjb at eng.ufl.edu


Jeremiah's Face (It's Purdy)
Haunt my dreams
(Sorry for my ugly homepage... I'll try to make it prettier later.)

Who is this guy?

I'm currently an Assistant Engineer (lecturer & researcher) at the University of Florida in the Engineering Education Department and an Affiliate Faculty Member in the Computer & Information Science & Engineering Department. I conduct research in computer science education. Previously, I served as Program Director over Game Development at Full Sail University in Winter Park, Florida (in the greater Orlando area), where I'd worked for 10 years. Before that I worked as a freelance game and application developer and lived, worked, and studied in the Osaka region of Japan. I speak fluent conversational Japanese.

I am currently studying how novices learn programming languages by analyzing the languages themselves in an attempt to identify, test, and mitigate built-assumptions that may limit or hinder the learning process at early ages. My work has convinced me that we frequently underestimate the abilities of children, and that motivation is a key determination of success.

What I Currently Teach

Senior Design: Computer Engineering Capstone Sequence

This is new! I'll be teaching the Computer Engineering capstone sequence starting in Fall 2021. I am still working on how we will model this; if you are a Computer Engineering student and would like to opt-into this new capstone sequence, please reach out to me.

AI for Computer Games

This course focuses on the development of artificial intelligence within the context of games. Topics include fundamentals as game design and interfaces as well as classical and game-specific topics of AI. The techniques covered include problem-solving algorithms, turn-based game-playing, and behavioral / decision-making techniques used to develop game agents as characters. In this course, we will focus not just on developing the most intelligent AI systems, but also on those systems that develop player interest and engagement in order to enhance players’ experiences.

Operating Systems

This course covers the design and implementation of various components of modern operating systems, including I/O programming, interrupt handling, process and resource management, computer networks, and distributed systems. This is a course on the theory, design, and implementation of operating systems, not a course on merely how to use an operating system; students will be expected to apply and further develop skills and knowledge related to architecture, organization, and data structures within the field of operating system use and development.

CS Teaching & Learning

This course covers basic pedagogy, especially as it relates to computer science and engineering. We will cover three fundamental elements in education – learning environment, educational theory, and educational practice – as well as approached to engineering-specific training. Topics include how into interact effectively with students, models of learning and expertise development, and how to implement approaches in a classroom.

Performant Programming in Python

We'll using the flexibility of Python but take advantage of some of the features it has that help us do higher performance stuff. E.g: Thread / process pools; using C/C++ library calls; number crunching libraries (often part of standard lib but written in C for performance); asynchronous calls; generators; monkey patching; and maybe, if I can fit it, some frameworks (e.g., Django).

Projects (Research & Senior Project)

NOTE: Generally speaking, I accept students interested in working on these existing projects before I consider outside Senior Project proposals. These projects cover my areas of expertise and give students an opportunity to work on a "real-world" project. With that said, I will consider as special cases very unique projects that explore a novel space in terms of research in human-computer interaction.

Examples of projects I will not oversee:

First-person shooter games (Not my thing, it's not personal)
General puzzle games (Not my thing, it's not personal)
Role-playing games (I love them, but you aren't going to finish one in a semester)
One-player games (Not enough interaction to be interesting)
Mobile apps (some exceptions for novel concepts)
Web apps (JS is the devil)
Business-driven projects
Projects for an outside client

This list is not exhaustive. In general I seldom have time to oversee "one-off" projects; when I do, I expect projects to be team-based and have an excellent and unique contribution to computer science and/or the community.

SimCoast (To be renamed)

SimCoast takes elements from SimCity and other city-builder sims but adds coastal erosion and weather patterns as the key educational feature. Players will have to deal with changes to the terrain caused by climate change. This game will use actualy erosion models collected over several decades at Florida coasts. We will start by building a prototype for the game in Summer 2021.

Critter Collector (To be renamed)

We have built a prototype for an educational game to help K-6 kids learn about animal classifications & taxonomy. This prototpe uses Unity, but we will be building out a new codebase in either Godot or Unreal. The game targets mobile platforms and will be used for educational research.

MineTest Language Integration

MineTest is a game very similar to Minecraft. It is written in C++, with mods written in Lua. We are working to integrate the WebAssembly and JavaScript Virtual Machine "SpiderMonkey" (part of Firefox) into the code base. This will allow us to integrate additional languages into the engine more easily so that we can expand the engine's accessibility. Our eventual goal is to make it possible for mods to be built by K-12 students as they learn computer science.

Lounge Lizard Chat Client

Lounge Lizard is a branch of Wey, an open source Slack client. We have expanded on the features of Wey and plan to add additional chat systems - such as MS Teams, Google Hangouts Chat, and Zulip, and Matrix - into the client. This will allow for a single client but many workspaces from various services. We have also begun on an experimental redesign using libpurple (an open source instant messaging library).

Amphibian Dual-Modality Plugin

The Amphibian Plugin for IntelliJ (and compatible IDEs) allows the user to go back and forth between text and blocks representations of production languages. The plugin currently supports Java, and we will soon integrate our Python, JavaScript, and CoffeeScript support. C, C++, and C# support are also in various stages of completion. You can see a video here: Amphibian Demo Video