An Update and Continued Assignments at Yost Labs

Life Update

It has been a very long time since I last posted to my website, so I thought an update was overdue. The last time I posted was about the PrioVR Utility and my starting work on rewriting the 3-Space Suite. A lot has happened in my life since then. I finished the Fall 2016 and Spring 2017 semesters at Shawnee with perfect grades, and I started designing and building my own hardware. I have designed several boards at this point, and I’m still going strong. I’ve gotten good enough to where I feel capable selling my built products on the market. Of course, I am not selling sensors, since I still work at Yost Labs. A conflict of interest could arise if I did such a thing. I’m going to sell breakout boards and general consumer electronics. I’ve founded a company for this purpose: Reborn Logic LLC. I will have a website for it soon enough. I am only waiting on the state of Ohio to process the papers and get back to me. I plan on having four products at the start, and I have one fully designed, while the other three are only waiting on finishing touches. Below are all of the boards I have designed and built by hand so far. I also went through the interview process for Google, did interviews, and almost got a job there. I just fell short, but that does not bother me, I always have next Summer.

MyBoards

The 3-Space Sensor Suite

The Suite is 99.99% complete at this point. Features are all there, and it all works pretty well. No software is perfect though, so bugs may still exist, but most users should have no issue. There are tons of windows and features, it does almost anything a general user could want. It can be found: here. Not that anyone can use it, you need a 3-Space Sensor for that! Most of our sensors are expensive for hobbyists like myself, but we have a couple new sensors on the way that will change that. The LE and LX sensors are shiny, new, fast, and cheap! The picture below highlights the appearance and major features of the new Suite.

3SpaceSuite

Future at Yost Labs

My time at Yost Labs has lasted longer than I ever thought, and I’m so happy that I could help make such useful software. I’m not sure what assignment I’ll be working next. It might be reworking the PrioVR Utility to have more stability and a better user experience. I learned a lot from making the Suite, and it is now the biggest software I have ever made. It surpasses even the PrioVR Utility! I could also work on research, or some hardware design. This Fall, when the college semester starts back up, I might have to stop working at Yost Labs. I have an extremely busy school schedule this Fall and finding the time to work will be difficult. But who knows? I might be able to still squeeze in the time.

General Future

My company was founded to give myself an excuse to design and build more boards, while also maybe making money on the side. If it does turn out to be profitable, that money will go towards my college funds and more parts. This Fall semester will be busy and unique to me. I am taking DC Fundamentals to cement my self-taught knowledge of electronics. I am also getting some general classes out of the way, like Ethics. I’m still working towards a dual major in Computer Engineering and Video Game Software Development, so I have still have classes like AI and Automata. Overall, I’m going to stay a busy person for the foreseeable future and I wouldn’t have it any other way.

 

Assignments At Yost Labs

The PrioVR Utility Application

My first true assignment was the Utility. It was made so that users could have some tool to use to setup, test, calibrate, debug, and experiment with their suit. It was developed with web tech. The app base is Electron, which is based on Chromium, which is nearly identical to Google Chrome. So the app appearance is written in HTML and CSS, the functionality is written in JavaScript. Usage of the PrioVR suit requires access to USB ports, which requires me to drop down to native levels for that. If I am going to go to native code at all, why not use our PrioVR API? So I wrote a binding. This idea has been done at Yost Labs before with MoCap Studio. So what we do is this: We take a C++ library known as JSON-RPC and use that to make this binding possible. Then we have a server run in the background on app startup. The JavaScript will send RPC requests to the server and it will call a C++ function with arguments given by the JavaScript. The C++ will call an API function and return the results to the JavaScript.  Here is a screenshot of the app on my Mac.

app

This app is complicated and does so many things it is untrue. It is by far the biggest project I have done. Biggest in scope, importance, code size, and time. I also wrote an updater, which is yet to be deployed at the time of this writing, which is complex and soon to be open source. So the Utility took me months to make, along with the API server, and the Updater took a couple weeks. All of the coding was done by me alone. Sure others helped, like the authors of the PrioVR API, the Electron team for the base, and much more. But the act of assembling it all and making it work was all me, and I am happy.

My next project, which was just assigned last week, is a rewrite of the 3-Space Sensor Suite. The old one is not maintainable as the tech is unique and the original creators no longer are with the company. Below is what I have managed to accomplish so far.

app1

It is pretty, but not functional at all. I just got the Main UI 90% done Monday. Since then I have been working on the API server for this app. It is a different API so I need to write another binding. I just got the new binding done Wednesday and so development hasn’t truly started yet.

 

It has been great working at Yost Labs and I hope to work there for quite some more time.

An Update : Internship at Yost Labs

So it has been quite a while since I’ve posted an update on this site. I’m going to try start being more active since I have some new topics to provide discourse on.

 

yl_logo

The first thing I am going to talk about is my internship at Yost Labs. So back in May, I applied for and received my first real job as a programmer. At first, I worked as a researcher. My focus was mostly on a dreaded topic known as magnetometer calibration. Before I talk about that though, I should say what Yost Labs does.

Primarily, as far as I can tell, we make accurate orientation sensors. This sensor knows how you are holding it. Normally I would just say, “Just use a gyroscope, why buy a more expensive sensor?”. The reason is that a gyroscope will drift. The readings have noise and so if you code your orientation based solely on that, the sensor will become more inaccurate over time. Eventually it will be really wrong and have no way of knowing. Yost Labs, and others, solve this problem by using a technique called Sensor Fusion. You take three components and use their readings together to calculate your orientation. You need a gyroscope, accelerometer, and a magnetometer. The gyroscope does most of the work, but the other sensors are used to reassert correct position and prevent drift. For those who don’t know what these components are, I will explain quickly. A gyroscope measures angular velocity, which how fast you are rotating. The accelerometer measures general acceleration, which measures how fast you are moving. The magnetometer measures the Earth’s magnetic field and can tell where North is. Using this data and a complex piece of code called a filter, you can provide accurate orientation over long periods of time. The sensor technology is called 3-Space.

OK, so now that that is out of the way, we can move on. So my first real tasks were to do with 3-Space magnetometer calibration. The components need to be calibrated for them to work correctly.  The magnetometer especially needs calibration. The gyroscope, and the accelerometer do not need to be calibrated as often as the magnetometer. It needs calibrated each time you change location, usually only on a large scale, like miles. To calibrate, you need to take samples, and then calculate an offset and a matrix. It is really complicated so I’m not going any farther on that topic. My next major assignment was the PrioVR Utility App. PrioVR is a bunch of special sensors that you wear on your body and they can be used to find out the user’s body orientation, and position. Yost Labs had a Kickstarter about two years ago for PrioVR. After it was funded development started and was great at first. Then some stuff went down and we were massively delayed. I came in right as PrioVR was getting close to release. At the time, we still didn’t have a app for users to setup their suit with, so I built it. It had a lot of new challenges for me and I will detail the App as well as my new assignment in my next post.

It is pretty cool working here, and I can’t wait to provide more detail.

On Libraries and Languages

Lately I’ve been really bored with school. I’m still getting perfect grades, but it isn’t as exciting as it used to be. Unfortunately, I haven’t been able to find any new languages or libraries to occupy my time either. I usually pop around from thing to thing and learn as I go, but now there isn’t much I feel like learning. I’ve also tried to come up with project ideas to practice skills I already have, but I haven’t been able to come up with much. Recently, Stardew Valley was released and I bought it. It is an amazing game. I’ve sunk tons of hours into it now, and I’m loving every minute of it. I was curious to see how the game was made and why it was restricted to Windows. It was made with XNA, in C# most likely. They seem to not want to port to MonoGame, and therefore Mac and Linux. Such an amazing game, made in a library I wrote off as not viable. It has me thinking long and hard about my biased opinions. However, in this case I have an excuse for not liking XNA. I’m primarily a Mac user. No XNA there. Sure there is MonoGame, but it doesn’t seem to have the love that XNA receives. I actually installed Windows 10 through Boot Camp just to play this game and mess around in MonoGame, as the Mac version of MonoGame wouldn’t work for me. I’ve again come to the conclusion that XNA / MonoGame is not viable for me. I need cross platform functionality.

I few options always cross my mind and the same questions and frustrations always pop up. First lets look at the languages I love most, regardless of their viability for cross platform games.

  1. Swift
  2. Scala
  3. C#
  4. Java
  5. C++
  6. JavaScript
  7. C
  8. Python

When bringing in the cross platform requirement Swift dies instantly, open source or not. C# also fades since its support is sketchy at best. Python fades due to lack of general game libraries and speed. C is out due to its lack of Object Oriented Programming support. JavaScript is out because your code isn’t private. The last three are fine.

  1. Scala
  2. Java
  3. C++

Now I have to consider the gaming libraries available in these languages. Raw OpenGL is almost always available, but I’d like to avoid the low level stuff for now.

C++

  • Allegro 5
  • SFML
  • SDL

Java / Scala

  • libGDX
  • LWJGL
  • JMonkey
  • Slick2D

Allegro 5 was the first true gaming library I learned. I still love it and I know how to do a lot with it. I do not like that it is in C. Same goes for the widely popular SDL. SFML is my favorite here as it is in C++ and has a few add-on modules that extend its feature set.

On the JVM we have quite a few libraries available, most of which I am going to disqualify for myself. Slick2D is old, JMonkey is for 3D, and LWJGL is too low level. LibGDX wins here. It provides lots of add-on modules and has a lot of functionality built in.

Which to choose? I don’t know. It has been some time since I messed around with SFML, so I think I will go with that for awhile.

Until next time!

New Side Project Ideas

I’ve been looking for something to do in my free time that will be educational. I’ve got a few ideas.

  • Use C and Allegro 5 to make a random / infinite world generator
  • Use Java and libGDX to make a Grocery Simulator (Running a cash register?) and model it in UML
  • Use Java and libGDX to make a Gambling Game and model it in UML
  • Spend more time on Lynda.com: “Learning C” and “Design Patterns”

All of these will teach me one thing or another. The first idea will help my C skills and will make use of some new ideas I have for infinite worlds. The second and third ideas will refresh my Java skills, since I’ve spent so much time in Scala, and they will help me learn UML. The third idea in particular will help since this is what we are going to end up doing in my Object Oriented Programming and Software Engineering class. The fourth idea requires the least amount of work, but will be boring. The Learning C course starts at the beginning, teaching about variables and such. I’ve worked in C a lot, I’ve just never learned the finer points of it. The Design Patterns course looks interesting and will be helpful in many places. I’ve already watched a couple sections on it, so I may as well finish it.

I’d like to do all of these things soon, but there isn’t enough time in the day, and I’ve got assignments I could be working on. I have to work on my Platformer Lab for Game Programming 2, I’ve got to study for my 3D Game Programming class, we have a test Monday, and I’ve got an art project to be working on. It’s funny how I don’t consider my school assignments as educational. They honestly aren’t though. I’ve actually been doing the Compiler class’s labs for fun. It’s a spring semester senior level class. I’ve done the first two labs no problem. They were on creating a lexer to lex some simple code files into token streams. I can’t wait until the teacher for that class posts the labs to make our little lexer useful. Until next time!

The Difficulties of Keeping a Blog and Open Sourcing Some Projects

I have a horrid time keeping a journal or blog. I don’t have much of an audience so there isn’t much pressure to keep things up to date. I’ve had Life In Space 95% complete for about two weeks now and I haven’t posted a thing on it. College started back and is taking up all of my time. What free time I have had I have spent on Lynda.com. I’ve been teaching myself Adobe Illustrator CC, Maya LT, and Unity 5. I have new Lynda Certificates uploaded to my page to show off my time spent learning. Currently, I’m finishing up Scripting Unity with C#. It is a basic course, I really didn’t need to watch it, but hey you never know. I have lots of options for my next Unity course, and I’m not sure what to pick. My next art course will be Photoshop CC Essential Training (2015) and wow is it a long one. That will take days, another excuse not to write new posts ¯\_(ツ)_/¯.

Since posts on Ava3D and Life In Space will be limited if any at all, I’ve open sourced the code for these projects on my Bitbucket account. Comments are a rare thing for me, I know that is very bad style but my reasoning is sound in these cases. These were personal projects that I didn’t really intend to share and I have ADHD so spending time writing documentation is enough to kill my enthusiasm for a project. I write docs when I intend on sharing code, like in group projects, and when they are required professionally, like with college. Enjoy!

libGDX Game Jam

So the amazing libGDX game library is having a game jam. With Ava falling to the side due to lack of interest, I decided to “participate”. I am supposed to announce my participation and keep a Dev Log  on my progress. I’m also supposed make the code public. I’ve done none of those things. I just had this great idea that fit the theme of “Life In Space” and I didn’t feel like sharing it straight away. So far I’ve put in around 40 hours into the project. I started Sunday morning and have been working on it for around 7 hours a day since. I worked even through Christmas. I’ll post more on it when I have the game to a completed state. This has been my first major experience using not libGDX but Scala. I learned Java as my first language, and after learning C++, I can see its weaknesses. Scala fixes those problems and adds many new features to boot. I’ll post more later.

Ava Engine: Update 4

It has been a really long time since I posted info on my website. Almost an entire month. The reason was a combination of things. Tons of programming assignments and finals hit all at the same time. I also ran into some troubles with Ava. Namely, frame buffer objects. I wanted to have True Type Font support, which isn’t hard to do, but I wanted to be able to transform the text. Rather than do the math on how to draw the text already transformed, I thought to use render textures, aka frame buffer objects. As you can see, the smiley face is 2D in a 3D environment. He is actually a FBO. The black background behind it is what is giving me trouble, I can’t remove it. In other news though, I have a ton of new features.

 

Features


  • Specular Textures
  • Emission Textures
  • Model Loading
  • Render Textures
  • Ambient Lights
  • Spot Lights
  • Directional Lights

Ava1

Ava2

This post is rushed because I have new stuff I want to talk about. See Ya Later!

 

Ava Engine: Update 3

I have been hard at work on Ava. I’m still following the OpenGL tutorials I found. I’m about half way through the lighting tutorials. I’ve implemented tons of new features and broken countless more! The 2D engine is completely messed up right now due to the sheer amount of shader modification I’m performing. On the bright side, 3D!!! I’ve also ported the sound engine from SDL_Mixer to FMOD. It gives more for file type support and 3D sound. I started work on the Quad Tree feature and I have it implemented, but it does not work at all. It needs to be fixed in many places, not sure what is wrong. I need text drawing and primitive drawing to draw debug info, and there is only so much you can do with std::cout and printf. Once I have more features, I will go back and make sure it works.

This first picture is a 3D test with textures. I have a camera class that the user can use to hide the mouse, keep it in the center of the screen and move based on where you are looking with WASD. Q and E are used for easy up and down movement. The cubes generated here were static and unmovable, so I worked on changing that with the next section.

Ava_3D_Texture

This second picture features a new 3D API for positioning cubes and setting their colors. The big cube rotates and the little white cube stays still. The rotations here use Quaternions. I’ve never used them before, so they were new to me. The math involved was vastly simplified thanks to GLM (OpenGL Mathematics) and I think I’ve implemented them correctly. The lighting here is bad in my opinion. I just have to remember that I’m only half way the lighting section. Lighting Maps are next on the list to learn.

Ava_3D_Light

Overall, this project is very fun. If I’m not on Fallout 4, I’m working on Ava. My school projects are on the back-burner but not in a bad way. I’m still getting A+s on my assignments, I’m just rushing them more than I’d like. Source Code for Ava will be available on my Bitbucket account when I get done with the lighting and model loading sections of the tutorials. I feel the engine and API will be more stable at that time. It will still be heavily modified as I update it, but it should be in a mostly working order. As always, I will post again when I have news!

Site Move!

I’m moving away from Microsoft Azure. I owe them around $20 and I’m the only one who has been using the site as far as I know. I’ve ported the content to Amazon’s Cloud Services. My experience has been positive so far. Setting up the site was easy. Getting logged into SSH required me to setup the site a second time, making sure to get a key this time,  but besides that all has gone smoothly. The site is way quicker than with Azure, and I’m not paying for it! Free for one year! When when traffic overwhelms the micro server I might upgrade, but that seems far in the future for a personal blog. News about my Ava Engine and source code will be coming soon. I wanted to get my site in working order before content started to become hard to just port over to other sites. Well, back to work!

Next Page