(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