Posts

Practical Project 1: Magic Mirror Hardware

Returning again to the Magic Mirror, it's time to add more hardware functionality.  Let's give the mirror a camera and a microphone so we can use gestures and voice for input to better control the magic mirror. First some notes about soldering.  What is solder?  Solder is conductive metal that establishes a joint between two electrical devices whereby one gives electrons the ability to travel through the path of least resistance being a path through the solder.  Solder, when hot, turns into a liquid metal that is easy to work with and turns back into solid metal as it quickly cools down.  You can pick up solder along with a soldering station from your local electronics store. Note that Solder does create toxic fumes and should only be worked with in a well ventilated environment.  To create a joint, heat the pad and the wire one wishes to attach to the pad, then introduce the solder to the pad.  The heat will draw the solder into a liquid form on...

Vulkan Part 2

This year's Google IO had a lot of wonderful gems for Embedded Development including a release of the official Vulkan support libraries.  Those libraries require Android N and only on one of three specific devices: Nexus 6p Nexus 5x Nexus Player In order to target the larger market, we're going to continue using Qualcomm's released Vulkan API and enable targeting any Qualcomm Snapdragon 820 or 821 device such as the very popular Samsung Note 5 and Samsung S7.  I'll also make the important note that both of these devices are among the current generation able to work in the Oculus Gear VR device.  That important note opens the intriguing possibility of doing Virtual Reality work in Vulkan to give much needed performance improvements. Now that we have our motivation intact for using Qualcomm's Vulkan API, there is something very useful about Google's Vulkan effort that we can take advantage of the SPIR-V compiler (shaderc) included in the NDK in our projec...

Practical Project 2: Giving sight to the blind appetizer

Practical Project #2 Giving sight to the blind In this project, I’m going to take a project that I’ve already done and already works and transition it to a different platform in a more generic way and take you fine readers along for the ride.  A while ago, I worked with Google on their Giving Through Glass project and one of the projects I worked on was to give sight to the blind.  I worked with Classroom Champions and an amazing Paralympic athlete named Lex.  Lex is a blind long jumper who lives and trains in San Diego.  I’ve worked with him for the last year or so on creating an application for Google Glass that would allow him to hear the world around him via an app that translates the images from the camera into sin wave sounds. As cool as that project is, there’s plenty of people out there that are similarly blind, like Lex.  And it is now impossible to get the same hardware as Google is no longer selling consumer Glass devices.  So I thought it...

Practical Project 1: Magic Mirror Software

It’s finally time to return to the first practical project “Magic Mirror.”  We need to start addressing the software to make it run and do things that would be cool, useful or at the very least give us a way to start being creative with it from the software side. When we last talked about the “Magic Mirror,” we had our 410c sitting pretty in a custom framed case with a 2 way mirror completing the enclosure with Linux happily running on our network.  So many happy memories getting to this point, continuing is a must!  So in this article, let’s start by talking about trying to get something onscreen.  We want to take up the whole screen.  The easiest way to do that is to launch a browser and use it to browse to a custom server running whatever we want to display on screen.  To do that, we can simply setup what’s called a LAMP (Linux Apache Mysql PHP) stack on our 410c sitting in the mirror.  Then, you’d want to set the servers to launch automatically ...

Vulkan part 1

In my faculty as a Developer Advocate for Qualcomm, I’ve gotten the awesome chance of working with Vulkan for Android for a few months now.  Being able to work with such a new technology this closely is an awesome chance and I’m so excited about it I felt the need to create an example program and share it with the world via this blog. Let’s start by talking a bit about what this whole Vulkan thing is and why it is important.  Back at the beginning of the graphics world, hackers found ways of creating cursors of ASCII art images decorated by text.  There were no GUI or concept of a window or any other form of User interface beyond a keyboard.  To be honest that level of technology is perfectly serviceable to the business world whose needs range from a text editor to a spreadsheet.  Thus the interest in creating more was chiefly a pursuit by “hackers” a term truly defined as those that would tinker in their free time, making things like games and creatively pur...

Continuous Integration (CI) with Jenkins

Continuous Integration is the idea of running a full build every time someone on a team publishes new changes to source control (such as git).  The idea of setting it up allows for greater visibility into changes, by finding which build exhibits problems and which doesn't as every build happens immediately following a change in source.  This process allows QA to quickly and easily track the life of a bug. By marrying the CI server with other tasks such as Unit tests to check on the system, we get a higher level of confidence that the code under test is stable.  A competent CI system can run several tasks that are often viewed as a drudgery by developers to try and run at regular intervals.  Unit Tests, Integration Tests, code coverage reports, profiling, memory consumption reports, and quick / easy build deployment with automated publishing are just some of the common tasks a Jenkins server can be found doing. As we're embedded developers, we often will have to tar...

A journey of a thousand miles begins with a single step - laozi

As I'm heading towards discussions about C++ and some cool practical knowledge things for use in Embedded software development, I feel it's important to highlight how we got here by looking at the history of this science.  Let's start by defining Computer Science.  Computer Science is not about coding, programming or software development.  Computer Science is the study of automating algorithmic processes that scale.  Algorithms occur in nature, as everything from how the stars gather together to form galaxies to the spots of a leopard or freckles on a child.  All obey natural laws that are defined within the confines of flow dynamics and were discoveries made possible by algorithmic interpretations made by Alan Turing.  A computer is merely a tool in the same way a microscope is, a tool to observe and work with the natural world by viewing and controlling algorithms. So how did we get to this modern world?  Let's look at where the term "Computer" come...