Hi, I'm Perry MacMurray.

Who am I?

I am a dedicated software engineer with a passion for solving intricate problems, whether independently or collaboratively within a team. For over a decade now, I have been programming independently, and, coupled with my formal academic knowledge and work experience, I have accumulated a wealth of knowledge across a range of subjects and languages.

At the University of Michigan College of Engineering, I worked primarily with C++ and C. My coursework covered a broad spectrum of subjects, including data structures, algorithms, computer architecture/organization, and logic design. My educational journey was not confined to the classroom; I actively applied my knowledge through both individual and team-based projects, enriching my understanding of diverse technologies, both academically and through personal exploration.

In addition to this, my engagement in computer science extends beyond the academic realm. I had the privilege of interning at Qualcomm, where I served as an embedded software engineer, and at the Institute for Human and Machine Robotics, where my role involved software engineering research into autonomous behaviors in robotics. These experiences allowed me to further expand my skill set across a wide range of domains.

As I look forward, I am eagerly committed to continuous learning and excited about exploring new opportunities that align with my passions while also discovering new areas of interest. I am enthusiastic about the journey ahead, eagerly anticipating new challenges and opportunities to make a meaningful impact in the ever-evolving landscape of software and technology.

Projects I've contributed to

IHMC Open Robotics Software

Type of contribution: Internship

Robotics software featuring legged locomotion algorithms and a momentum-based controller core with optimization. Supporting software for world-class robots including humanoids, running birds, exoskeletons, mechs and more.

View project on Github
ImGui Java

Type of contribution: Open source contributor

JNI based binding for Dear ImGui, a bloat-free graphical user interface library. ImGui is designed to enable fast iterations and to empower programmers to create content creation tools and visualization/debug tools.

View project on Github
PVCDB

Type of contribution: Individual project

A simple database for viewing chemical compounds and reactions. This project is separated into two parts, the website (open source) and the backend API, written in C# using ASP.NET (closed source). WIP

View project on Github
osu!

Type of contribution: Open source contributor (minor)

osu! is a popular free to play rhythm game, which prior to my contribution lacked a 12-hour clock.

View project on Github

Some of my relevant coursework

Fall 2023-24

EECS 485 - Web Systems: Concepts surrounding web systems, applications, and internet scale distributed systems. Topics covered include client/server protocols, security, information retrieval and search engines, scalable data processing, and fault tolerant systems. The course has substantial projects involving development of web applications and web systems.

Winter 2022-23

EECS 470 - Computer Architecture: Topics include out-of-order processors and speculation, memory hierarchies, branch prediction, virtual memory, cache design, multi-processors, and parallel processing including cache coherence and consistency. Emphasis on power and performance trade-offs. Groups design an advanced (e.g. out-of-order, multi-core, SMT) processor using an HDL.

TCHNCLCM 497 - Advanced Technical Communication for Computer Science: Advanced technical communication for computer science. Design and writing of user and task analyses, requirements documents, specifications, proposals, reports and documentation, all aimed at diverse organizational audiences. Preparation and delivery of final oral presentations and written project reports.

EECS 496 - Major Design Experience - Professionalism: Design principles for multidisciplinary team projects, team strategies, entrepreneurial skills, ethics, social and environmental awareness, and life long learning.

Fall 2022-23

EECS 497 - Human Centered Software Design and Development: Team-based, user-centered design and development of complex software systems incorporating effective design strategies and project management methodologies. Topics include customer discovery, contextual inquiry, prototyping, process models, creative problem solving, inclusive thinking, team dynamics, social concerns, and testing strategies.

EECS 442 - Computer Vision: An introduction to 2D and 3D computer vision. Topics include: cameras models, the geometry of multiple views; shape reconstruction methods from visual cues; low-level image processing techniques such as feature detection; high-level vision problems such as object recognition and scene understanding.

EECS 388 - Intro. to Computer Security: This course introduces the principles and practices of computer security as applied to software, host systems, and networks. It covers the foundations of building, using, and managing secure systems. Topics include standard cryptographic functions and protocols, threats and defenses for real-world systems, incident responses, and computer forensics.

TCHNCLCM 300 - Technical Communication for Electrical and Computer Science: Professional communication to the general public, managers, and other professionals about electrical and computer engineering ideas as presented in written reports and oral presentations.

Winter 2021-22

EECS 376 - Foundations of Computer Science: Introduction to theory of computation. Models of computation: finite state machines, Turing machines. Decidable and undecidable problems. Polynomial time computability and paradigms of algorithm design. computational complexity emphasizing NP-hardness. Coping with intractability. Exploiting intractability: cryptography.

EECS 215 - Intro. to Electronic Circuits: Introduction to electronic circuits. Basic Concepts of voltage and current; Kirchhoff’s voltage and current laws; Ohm’s law; voltage and current sources; Thevenin and Norton equivalent circuits; DC and low frequency active circuits using operational amplifiers, diodes, and transistors; small signal analysis; energy and power. Time- and frequency-domain analysis of RLC circuits. Basic passive and active electronic filters. Laboratory experience with electrical signals and circuits.

EECS 270 - Intro. to Logic Design: Boolean algebra, digital design techniques, logic gates, logic and state minimization, standard combinational circuits, latches and flip-flops, sequential circuits, synthesis of synchronous sequential circuits, state machines, FPGAs, memories, arithmetic circuits, and computer-aided design. Laboratory involves CAD-based design implemented on an FPGA including elementary interfacing.

Fall 2021-22

EECS 370 - Introduction to Computer Organization: Basic concepts of computer organization and hardware. Instructions executed by a processor and how to use these instructions in simple assembly-language programs. Stored-program concept. Datapath and control for multiple implementations of a processor. Performance evaluation, pipelining, caches, virtual memory, input/output.

EECS 281 - Data Structures and Algorithms: Introduction to algorithm analysis and O-notation; Fundamental data structures including lists, stacks, queues, priority queues, hash tables, binary trees, search trees, balanced trees and graphs; searching and sorting algorithms; recursive algorithms; basic graph algorithms; introduction to greedy algorithms and divide and conquer strategy. Several programming assignments.

Winter 2020-21

EECS 203 - Discrete Mathematics: Introduction to the mathematical foundations of computer science. Topics covered include: propositional and predicate logic, set theory, function and relations, growth of functions and asymptotic notation, introduction to algorithms, elementary combinatorics and graph theory and discrete probability theory.

Fall 2020-21

EECS 280 - Programming and Intro. Data Structures: Algorithm development and effective programming, top-down analysis, structured programming, testing and program correctness. Program language syntax and static and runtime semantics. Scope, procedure instantiation, recursion, abstract data types and parameter passing methods. Structured data types, pointers, linked data structures, stacks, queues, arrays, records and trees.

ENGR 100:400 - Intro. Autonomous Electronic Systems: Development and implementation of electronic systems to manage sensors, signal processing, control algorithms, etc. in order to create an autonomous vehicle that responds to changes in its environment while carrying out complex tasks.

If you've made it all the way down here, I've hopefully caught your eye. If you have an opportunity I'd be a good fit for, or would otherwise like to get in touch, please reach out: