Will Johnson
 

Welcome to willjohnson.me. My name is William Johnson and I am a professional software and computer engineer. First, I would like to welcome you to my website and encourage you to visit and leave a message on my blog. I created this website to share with you my expertise in web development, seo, game development in both Direct X and Flash, and robotics. I have a passion for developing software and robotics systems and I hope that you will enjoy the demos and tutorials that I have posted on my site.

William Johnson, Founder

Biography: William Johnson


Since high school, I have been fascinated with the many amazing things that can be built with technology. In my senior year, I became the president of our computer club where we worked together to design small games with an emphasis on object-oriented design. This was the start of my journey into software development.


After graduating from Spotsylvania High School, I was accepted into the Florida Institute of Technology where I planned to major in Aerospace Engineering. At the time, my goal was to use my knowledge in computers to innovate new ideas for the space industry. At the Florida Institute of Technology, my education consisted of advanced studies in calculus, statics, dynamics, aerospace design, thermodynamics, linear algebra, and differential equations. Additionally, I was the team leader for a project in which we were instructed to design an airfoil and a small plane that would carry the maximum weight possible while flying at a low speed. We built this plane from scratch and it placed very well.


With the unfortunate event of the space shuttle disaster in 2003, I decided to transfer to the University of South Florida where I would continue my education in Computer Science and Computer Engineering. The University of South Florida has a fantastic Computer Science and Computer Engineering program. While attending this school, it became clear to me that I was not there to simply learn a programming language, I was there to learn the skills necessary to innovate and become a true engineer. While attending, I participated in many software engineering and logic design applications. My education at the University of South Florida has taught me that wherever I go, I will have the skills necessary to learn and adapt to any project.


While attending the University of South Florida, I was given the opportunity to work in a cooperative education program at Citigroup. I spent a year performing software testing in the UAT department for several web applications. After a year, I transferred to another department where I began working on database and .NET development. Initially, I worked on the backend of many web applications. Moreover, I created several .NET applications for reporting and network administration. I worked with a great team and an amazing manager.


In 2007, I had reached my senior project class for the engineering program. In this class, my partner and I created a Jeopardy-like game in flash. In addition to creating the game, we created a tool that allowed the game designer to quickly generate a game with his or her own content. Additionally, the game used a form of fuzzy logic to make the game competitive for the player. The game used avatars and was capable of playing in a single player mode or in a multi-player mode.


After receiving my Bachelors in Computer Engineering from the University of South Florida, I began working in St. Petersburg, FL. The name of the company and the type of work I performed is confidential. I recently decided to move to Atlanta, GA to be closer to my family and am now pursuing my masters in entertainment business where I plan to start my own company very soon.



 

Resume: William C. Johnson

242 Forrest Dr.
Palmetto, GA 30268
813-957-6398

Objective:

To obtain a software engineering position with the world's leading independent developer and publisher of interactive entertainment software.

Programming Knowledge:

  • Languages:

    C, C++, VB, SQL, C#.NET, VB.NET, XML, XSLT, HTML, Javascript, JSP, Flash (Action Script 2.0. and 3.0), PHP, ASP, CSS, AJAX, JAVA.

  • Frameworks:

    PureMVC, JQuery, Flex.

  • Software Tools:

    Visual Studio 2003/2005/2008, SQLServer 2000/2005, Flash CS3/4, Dreamweaver, Fireworks, Photoshop CS3/4, Eclipse, Lectora, Illustrator CS3/4, Flex Builder, Unity 3D.

  • DirectX:

    Knowledge of Fixed-Function Pipeline; understands use of Vertex Buffers, Vertex Indices, Memory Pools, Primitive Types, Flexible Vertex Formats, and 3D Mathematics.

  • Virtual World:

    SmartFox Server (server configuration, JAVA extensions, Action Script extensions, client side development with SmartFox API)

  • Database:

    Oracle 9i, SQL Server 2000 and 2005, MS Access (Jet Database Engine), MySQL 5.1. Experience in designing and normalizing databases.

  • Operating Systems:

    MS Windows (2000, 2003, XP, Vista), Mac OS 9 - 10.5, Ubuntu (Linux). Experienced in installing and managing software, performing standard OS operations and maintenance.

  • Testing:

    Executing and creating test plans / matrices, performing black box testing.

  • Project Management:

    Create and manage project timelines / resources, write technical documents based on project requirements.

  • Documentation:

    UML design, Flowcharts, User manuals for software applications, specification and design documentation, standards and procedures for development documentation.

  • Networking:

    Experience in wired and wireless networking, managing routers, configuring networked computers, virtual private networks.

  • SDLC:

    Knowledge of waterfall model, Agile Development / SCRUM, Spiral, rapid prototyping, incremental, Extreme Programming.

Experience

  • 01/2009 - Present
  • Technical Director

  • ISO Interactive
  • Atlanta, GA

  • Primary Virtual World Developer

  • Create and design Non-Playable Character (NPC) Engine / Finite State Machine

  • Develop Java extensions for Smartfox Server

  • Create and manage websites using latest web standards

  • Manage projects and resources using Basecamp

  • Create and manage repositories in Subversion using Beanstalk

  • Develop state of the art Flash games


  • 01/2007 - 12/2008
  • Software Systems Engineer

  • Sealund & Associates
  • St. Petersburg, FL - Manager, Atlanta Office

  • Website development (PHP, MySQL database integration, CSS, XHTML, XML) eLearning Course Development

  • Flash course and game development (both design and ActionScript)

  • Created all courses to be SCORM 1.2 and SCORM 2004 conformant

  • Designed web graphics

  • Assistant project manager on various projects

  • Developed Game Engines using C#

  • Lead developer on LetÕs Meet 3D Serious Game Engine


  • 08/2005-01/2007
  • Development and Testing Co-op

  • Citigroup
  • Tampa, FL

Development:
  • Key Developer of a tool in C# created to allow Networking Engineers to have quick access to modify Web application config files on multiple servers over a networking environment.

  • Built an automated reporting tool, which pulled important client data from a key database and saved information in a .CSV formatted file

  • Export Manager Development

  • Working between NCB & Swift Messages with the Data Warehouse

  • T-SQL Ð Creating and maintaining stored procedures, functions, and data extraction

  • Working between front, middle, and back ends in a three-tier environment

  • C# Development (Developed Networking tools for the infrastructure team, Excel Lite conversion application, currently building an ASP.NET web log for all applications assigned to our team)


Testing:
  • Worked in UAT testing environment for Web application


Education

  • University of South Florida
  • Bachelor of Science in Computer Engineering

  • Tampa, FL

Memberships

  • IEEE Computer Society

  • IGDA Member

  • Georgia Game Developers Association

  • ASTD (American Society for Training and Development)

  • Players to Professionals (Fall 2006 Treasurer)

  • ACM Computer Association (Programming Competition)

  • Phi Theta Kappa Honor Society Alumni

  • University of South Florida Alumni Association

References

Career Highlights

willjohnson.me was founded by William Johnson, Professional Software and Hardware Engineer; graduate of The University of South Florida. Mr. Johnson started willjohnson.me to publish his own work and experience in game development, software applications, web applications, and robotic systems. This website is a place for me to share my knowledge and the findings of my work with the world.

William Johnson, Founder

Education:


My professional career has evolved through hard work and discipline. I obtained my Computer Engineering degree from the University of South Florida. Education has strengthened my ability to solve problems, work as a team, and most importantly, it has taught me the importance of completing projects on time and working with clients in a professional manor. Through my education, I have developed a solid methodology for producing high quality products that are delivered on time and satisfy the project requirements.



University of South Florida
 

Work Experience:


Work experience is very important to any professional. While education prepares an individual for the work force, there is no greater teacher than experience. My work experience began at Citigroup, as a Quality Assurance Analyst. After a good solid year of software testing I was ready to move into the development department. While I desired to work as a developer from the beginning, the software testing in the UAT department opened my eyes to the importance of the software methodology that we use today. Once in the development department, I was eager to build professional applications for one of the largest banks in the world. Thankfully, I established a good relationship with the development architect, Momin Khalil. Under his mentorship, I was exposed to several projects, giving me the oportunity to truly expand my knowledge in the development field in both application, web, and database development. I helped write network applications for our network team using C# .NET; developed database applications for several citibank clients using MS SQL Server; authored software to auto generate database reports, and assisted in the design of an efficient system to run web applications.



 

Development Skillset

A developers skillset is their toolbox. Without the proper tools, a developer can not perform their job. This also means that the more skills a developer posesses, the more jobs and oportunities that developer can perform. Consequently, a developer must constantly be on the leading edge of technology to ensure that they are familiar with all of the tools avaible to them. The challenge I face is that technology is always changing and taking the time to train requires a lot of effort. Throughout my career, however, I have always made it a point to train myself in as many areas of technology as possible. Below you will find a list of software and development skills that I have acquired through education and experience.

Web Development

Web Development:


Web Development is a very challenging and rewarding experience. I enjoy learning the various scripting languages and markup to produce web sites and web applications. My web development experience is as follows:

Markup:

  • XHTML
  • CSS
  • XML
  • XSLT

Scripting:

  • Javascript
  • PHP
  • ASP
  • Ajax
  • JQuery

Database:

  • MySQL
  • Microsoft SQL Server

Web Applications:

  • ASP.NET
 
Game Development

Game Development


Game Development is something that I am very passionate about. I thoroughly enjoy storyboarding, the design process of game design, and developing the game. I am particularly interested in developing simple games in flash and more complex games built in c++ using the Direct X library. I have a lot of experience in both C++ and C#, which will allow me to develop more exciting games using the Direct X library. While I also have a lot of experience developing games in flash, I am leaning towards developing games that run on the Direct X platform and also console systems. My goal for the next six months is to develop a game engine that will include a 3D engine, sound engine, input engine, and more. Once completed, I plan to organize a team of developers, artists, and writers to develop a new generation of role playing games.


 
Multimedia

Multimedia


Multimedia helps bring games, simulations, and the web to life. Whether it be games, presentations, advertisements, or just images, multimedia gives every visitor a better experience. Realizing this, I have dedicated part of my training to learning the essentials of creating multimedia for both the web and games. I have experience using the following graphics applications:


  • Adobe Illustrator
  • Adobe InDesign
  • Adobe Photoshop
  • Adobe Dreamweaver
  • Adobe Flash
  • Adobe Captivate
  • Adobe Premiere
  • Final Cut HD
  • Quicktime Pro
 
Search Engine Optimization

Search Engine Optimization


Building a website requires a lot of preparation work. When I first decided to create my website, I was debating whether or not to build my site in flash or in an xhtml format. While I enjoy the ease of use and the many excellent features flash offers, I learned that search engines do not understand how to read a site that is written entirely in flash. Because of this, I began researching the proper techniques in building a website that is search engine friendly. To view some of my findings, visit the seo section.

 
Artificial Intelligence

Artificial Intelligence


Artificial Intelligence is a technique that I have used to solve puzzles in games and to program robots in making decisions based on their current environment. It is one of the most interesting courses I have studied. The most fascinating aspect of Artificial Intelligence is that it allows digital devices to make a decision without human intervention. These algorithms allow developers to create very interesting programs to help solve problems, simulate certain types of scenarios, and improve gaming environments. Currently, I have used Artificial Intelligence to solve puzzles, create adversarial searching games, and fuzzy logic in robotic applications.


 
Robotics

Robotics


Robotics is a special field in which designers must not only possess the knowledge of software intelligence, but they must also be capable of designing hardware such that the robot will be able to perform its function when it receives a signal. Robots have many applications. At the University of South Florida, the robotics department was developing hardware for search and rescue missions under the instruction of Dr. Robin Murphy. My favorite robot that I built from scratch is a photovore robot that chases whichever direction has the most intensity of light.


 

Game Development

Game development is one of my passions. I plan to create several small game demos that I will post below in both Flash and C++. The games made in C++ will use the DirectX library. I already have a lot of experience making games in flash and will post several game demos up soon. My primary goal, however, is to begin writing games using the C++ / DirectX libarary. Please see my game demos below.

DirectX Demo's:

DirectX Terrain Demo

DirectX Terrain Demo:


This terrain demo is based off of a Direct X lab from Game Institute. Using a 2d grey-scale as a height map, it uses the x and y coordinates of each pixel to determine a vertex position while the pixel color (0 - 255) is used to determine the height. This technique allows us to generate a vertex for each pixel of the 2d image in three dimensions.

Rather than using system memory to represent the vertices, I registered each vertex with the video card as a static vertex buffer. Using video memory or AGP memory is much faster than system memory and allows a shorter path for data to travel when rendering the terrain. Once the vertex buffers are registered, they are rendered as an indexed triangle strip. Gouraud Shading is used in conjunction with a virtual light source to produce the color shading of the terrain. Degenerate triangles were used to move between rows using a triangle strip without having to draw inappropriate triangles.

Launch Project
DirectX Hierarchical Sphere's

DirectX Hierarchical Sphere's:


This demo is based on another vertex buffer lab from the Game Institute. I created a class to generate the vertices of a sphere. Once the object is created, it can be translated and scaled easily using methods within the class. In this particular demo, three spheres are created in a hierarchical representation. The base sphere acts as the center object and does not rotate; However, its child sphere is translated by a certain distance and is rotated about the center sphere at a constant velocity at every frame. This "planet" sphere also has a child, which could be represented as a moon. This child sphere is translated a relative distance from the planet and is set to rotate about the planet at a constant rate at every frame.

Launch Project
DirectX Hierarchical Sphere's

DirectX Dynamic Vertex Buffers:


In many cases, a terrain is rendered at the beginning of a scene and does not change. This allows the video card to write the vertices using a WRITE_ONLY parameter, producing very efficient rendering times. There are, however, circumstances in which vertex buffers may be required to change dynamically during runtime. Luckily, DirectX allows developers to change vertices at run-time using the D3DUSAGE_DYNAMIC flag. This flag permits the application to lock and write to the index buffer without stalling the rendering pipeline. In this demo, the vertices of a plane are modified using the sine function to create a cyclical appearance.

Launch Project
2D Air Hockey Game

Air Hockey Game:


This is another fun game project that I made based off of a final project at the game institute. It required that the developer create a 2d air hockey game with basic artificial intelligence. The player uses the mouse to move their mallet and hit the puck. Since the objects are circular, hit detection is performed mathematically and was straight forward.

Launch Project
 



Flash Games:

Presidential Connect Four

Presidential Connection:


The Presidential Connection is a unique game of Connect Four. While many board games use adversarial searching techniques and informed (heuristic) algorithms, this game of connect four uses an artificial agent known as a three-layer feed-forward neural network. A neural network is an artificial agent that is used to respond to stimuli similar to the way our human brains would. While this is done on a much simpler level, the results can be astounding.

When developing applications that need to make informed decisions, it is common to find algorithms that branch from one point to another based on the current state of the finite state machine. While this method works well, it is very limited to only specific conditions. A neural network, on the other hand, allows the person behind the computer to actually train the software on the fly. In other words, the game is like a child that is playing for the first time. When playing the game, there is a certain set of rules by which the game is mentored. Every time the player or the computer makes a move, the computer analyzes the state of the game board and then sends the data to its "brain," waiting to receive output that would be in its favor. If the computer makes a good decision, the game will use positive reinforcement and write the information into its brain. Likewise, if the computer makes a bad decision, the game will use negative reinforcement and write the information into its brain so that it will not make the same mistake again. The game retrains itself after every move, recording data into its brain when necessary.

I mentioned in the paragraph above that information is stored in the games brain. The brain is basically a set of relational data that stores important independent and dependant variables into a database. The more the game is played, the more intelligent the artificial agent will become and the more difficult it will be to beat. This is only one application of neural networks. The ability to train software how to function to our needs will continue to grow in the future. Click the Launch Project button below to launch the game.

Launch Project
 

Web Development

Web development is a very challenging and rewarding process. When designing websites, I believe that the structure is very important. This means that planning and preparation are a must because the requirements will almost always change. To save time and money, a good design will prevent a lot of code rewriting and will focus on the concept of code reuse. My choice of language in developing websites is almost always PHP. I start out by designing templates (typically a header, footer, and menu). From there, I build content pages and incorporate them into the templates. This process has allowed me to develop and update web pages very quickly. For client side routines and web 2.0 effects I will typically use a form of asynchronous javascript (ajax). In many cases, I will also use the JQery library library.


Over the course of my experience in web development, I have become very good at working with javascript, the DOM, AJAX routines, PHP scripting and dynamically generating web content, database design and integration, cascading style sheets, and even animated effects through javascript and JQuery. To look at some of the libraries and demos that I have created, please see the section below.

Flash Games

Web Development Demos:


Demo's coming soon!

 

Robotics

Robotics is one of the most rewarding fields I have ever studied. Robotics does not only require the knowledge of software development and the creation of algorithms, it also requires the designer to be able to build things from a hardware and mechanical design standpoint. This requirement makes robotics a very challenging but rewarding field. I began researching more into robotics after graduating with my computer engineering degree. My first robot challenge was very exciting because I built the entire circuit board from scratch, inserted the microprocessor into the circuit, and programmed it to perform a certain function with my computer. After inserting the circuit into the hardware, I created two sensors that detect light from opposite directions. When powering on the robot, it was amazing to see the robot move towards the direction of light and stay out of shadows autonomously. I am working on a new project at the moment and will post a tutorial on how to build the robot from scratch for those who are interested. Please see the section below to learn more about my robot projects.

Photovore Robot:


My first robot is a photovore robot that follows the intensity of light. Building this robot was very exciting because I built the entire robot from scratch. I soldered the circuit board to accept a power pack and an AT Mega 8 AVR microprocessor. After inserting the microprocessor, I was able to connect the circuit board to a programmer and compile C code instructions onto the chip. By determining the amount of light detected by the two photoresistors, the robot would make a decision to move towards the direction with the most light. This autonomous robot was a very fun experiment. I will post a tutorial soon on how to build a robot such as this for those who are interested. Click the play button on the video to the left to see my photovore robot in action.

Launch Project