Bob Main Bob Main Web Development Microcontrollers & CNC Design Woodworking


About Bob

    A lifetime learner, maker, and teacher. I'm entering another chapter of my life into the world of Web Development, Software, and Design. With a background in woodworking, service and education, I aim to create where creation is done. 

    I grew up in an area too rural to foster coding, but through a winding path as wood-craftsman and a tinkerer I discovered an industry I had an aptitude and a childlike excitement for. After a couple years with a TeamTreehouse account, a Community College course in programming, an amazing online coder community, all-nighter obsessions, and an extremely supportive web-developer girlfriend, I’ve compiled a variety of projects from the front-end and back-end to the woodshop. Now, I’m ready to see what we can accomplish together.

    I’m JavaScript centered and gaining skills with HTML5 and CSS3, pulling my long-time experience with Adobe Photoshop and Illustrator into the fold. In the back-end, and on the software side I'm experienced in Python, node.js and C++. I wrote a python program to interoperate Vector paths from G-code into a string to be executed by an Arduino Uno with code I wrote in C++ for 3D milling or printing paths.

   Thanks for stopping by! Check out my projects and send me a note. I love to get feedback.

Contact Info

    I’m currently living in Oakland, Ca and anyone with any questions or comments regarding my portfolio or any of the projects on display, please feel free to contact me via email, which is the best way to get ahold of me.

    As of writing this, I am currently considering full-time employment or contract work based on the skills on display within this site. If you have a project or job opportunity you’d like to talk to me about, feel free to email me about that as well. Also, visit my linkedin.

  • Email:
  • Phone: 530 588 8404
  • 8-by-8 Pixel-Art Creator

    • Also, Live Pixel-Chat with DIY Global Display Frame. •

        My first full-stack project is underway and a testable prototype is up and running. If it wasn’t obvious with a few other projects I’ve created and worked on - I like grids and pixels. I’m a horrible free-hand artist so when it’s simplified and as mathematic as possible, it makes it hard for other artists to know I’m a sham!

        So here, on this site we have an 8-by-8 grid constrained to 16 colors, one being transparent. This project currently stands alone for a user to create pixel art and save it to the public gallery.

        Also, as an experiment with PubNub’s global data-stream network, I decided to stretch their service’s legs and create a global pixel-chat function that allows anyone around to world to simultaneously create pixel-art on the same grid. Hypothetically there could be more artists than pixels!

        The video on the slideshow above demonstrates how two star-crossed lovers could work on a pixel heart together - at the same time – from opposite sides of the planet – in a pre-framed portrait.

        I plan to add several functions to the site, but as of now, the sites is still a 100% front-end application with all shared data stored and retrieved as JSON files from PubNub. A Node.js backend is on its way and will bring with it additional capabilities such as user log in, editing, deleting and sharing of pixel art. Also, a SUPER Ayte-by8 - also called and Ayte-by8-by8-by8, or 64-by-64 editor is on its way!

        In addition, I have built an 8-by-8 pixel display frame with the CNC router (see: CNC microcontrollers for project info) as well as implementation the new MKR1000, Arduino’s new IoT WiFi capable microcontroller.

        WARNING: your art will be framed and displayed in my living room upon sharing to the public gallery or editing the live pixel-chat. The framed pixel display is programmed in C++ and continuously check for new updates to the website. If a new Ayte-by8 is shared the image will display on the frame! So, what are you waiting for! Let me see your art.

        If you don’t believe me or want to see what you art looked like in my living room, send me an email and I’ll put it back up and take a picture and send it to you!


    • A Game Inspired By a Classroom Math Exercize •

        Riiple is a joint venture project and game inspired by a card game my brother and I were both taught in our rural elementary school. This project is still in development and updates are soon to come.

    • Beach Sudoku •

       A from-scratch coded simple Sudoku game with 100 easy, medium, hard and extra-hard puzzles. The puzzles were generated by a python code I wrote to find possible puzzles that wouldn't break the rules of the game.

    • Tools
      • HTML5/CSS3
      • JavaScript
      • Python
    • Techniques
      • Creating and Changing the DOM(Document Object Model) with JavaScript.
        • Puzzle box status and complete answer key stored in 81-character arrays.
        • Functions and Loops used to populate puzzles and change array status.
        • Selected input values 1-9 used to trigger functions that check the answer key for correct placement and if the puzzle is complete and correct. DOM color manipulation used to signal the users answer/s are correct or incorrect.
    • Challenges
      • One main issue that's yet to be resolved is specifying the difficulty of the puzzle. Simply, the removal of more numbers doesn't always seem to mean it's more difficult.
      • Also, randomly removing the numbers can also lead to a bunching of the number given, which creates a range of difficulties and situations where forced guesses are created. 
    • Additions and future development
      • If this project is continued in the future, A fun addition would be to implement a backend to store user information, so that players could see how fast they completed the puzzle compared to other players and how many puzzles they've completed in total.
      • Also, changing the random removal of the numbers maybe changed to a random removal to a set number within each of the 9 3x3 boxes, which would eliminate the bunching effect and possibly make the difficultly more closely related to the number of numbers removed.
    • Questions? Comments?
      • Hit the telephone icon in the top left part of my portfolio to see my contact information.

    • My Portfolio Project •

        Perhaps the longest, largest, and most challenging project of my portfolio has been the actual portfolio itself. It’s ongoing and it’s been a tornado of lessons, struggles, re-focuses, accomplishments and lost-in-CSS-land fun.

    • Tools
      • HTML5/CSS3
      • JavaScript
      • Adobe Photoshop/Illustrator
      • Final Cut Pro X
      • jQuery
      • Bootstrap’s front-end framework’s Carousel
    • Techniques
      • Animation and event handling libraries:
        • Built to control several functions to handle different effects of the objects within the portfolio.
      • Fluid, Responsive and Scalable content
      • SVG with normal HTML layering.
        • Position styling to force content to occupy the same space
        • Opacity, Visibility and Display used to hide content and reveal when needed.


    • Challenges
      • Using SVGs within and outside of a main background viewport all while handling events within SVGs and normal HTML tags started off great but quickly spiraled out of control and presented many positioning problems that still persist on my site today.
      • In hindsight, I probably would start this project from scratch: much more simple and eliminate and/or simplify many of the effects and layers.
      • As a latecomer to the process, Bootstrap’s image carousel became a major challenge, getting it to behave and fit in place and update the content when required.
    • Additions and Future Development
      • As I go forward, I’m going to be adding projects and will have to alter the way the site behaves with more content. My initial feelings of the site are that it’s a bit bogged down with animations and should be more focused to effectively communicating the projects I’m working on and have worked on.
      • In addition, including separate links to certain projects would help direct people, rather than searching through the interface.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information.


    • A Purple Rain Pixel-Art Annimation •

        A little program I wrote as a Prince tribute. Browser art like this can be a lot of fun and JavaScript really allows for this kind of expression. Sorry, mobile users, it’s pretty heavy on a phone and freezes up. Don’t forget to drag your mouse over the pixels after following the link to the actual page.

        I used divs for the pixel cells, and I think that many divs may be what’s causing it to slow down, Writing in as an SVG format may help speed things up.

  • Questions? Comments?
    • Click the telephone icon in the top left part of my portfolio to see my contact information
  • • Homemade CNC Router •

        Building a CNC router unknowingly allowed me to become seduced into the world of programming. I started this project as a woodworker; I had no idea what programming was. But, it has already changed the trajectory of my life.

    • Tools
      • Arduino Uno
      • Adafruit Stepper Motor Driver
      • C++
      • Python
      • LCD display
      • Super Nintendo Console Controller
      • Various Power Tools: table-saw, drill press, power drill and more
      • Various woods plastics and metals
    • Techniques
      • The model for the design was mostly an organic on the fly creation that was built out from three Nema-17 stepper motors.
      • Rather than use expensive parts, I tried to build as much as I could from stuff I could get at my local hardware store.
      • XYZ rails were developed with simple aluminum siding.
      • Rather than mount a rotary tool, I went with a snake extension that would be much lighter on the small stepper motors.
    • When I first started researching the project I discovered that a small microcontroller could do a lot of the work controlling three stepper motors for the XYZ axis. After teaching myself a little code, I was able to build the machine around the six basic movements (forward/reverse from 3 motors).
    • The movements were converted into linear motion with the use of a threaded rod. A threaded bolt was used to connect a sliding mount that would each complete a three-axis system, which would in turn move the tip of an end-mill (carving drill-bit) around a 3-dimensional space.
    • This sequence of movements, or paths, is created by a variety of software and programs that is used to design an object that is created by removing the surrounded material (mostly wood so far) to carve the desired shape.
    • This project is ongoing and has been revealed to be a passion project that will continue to improve and evolve throughout my life. At some point I plan on starting over and building a larger, better and faster model.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information.

    • Python Built Gcode Editor and Interpreter •

        When you boil it all down, a CNC router, like a 3d printer, is just a point in space moved around by Stepper motors in small increments: forward, back, left, right, up and down. A Router cuts the material as it moves, or a 3d printer places material at that location. But for that motion to make beautiful sculptures or carvings, a path must be created. Like the small steps needed to create the object, there are several small steps along the way to create the path itself.

    • Tools
      • Python 2.7
      • C++
      • Arduino Uno
      • Vectric Aspire
      • Serial Port Python library
      • Pythagorean theorem
    • Techniques
      • The 2D or 3D Objects are created in Adobe Photoshop/Illustrator or Google Sketchup, and converted to Gcode using either InkScape or Vectric.
      • Python program interoperates Gcode into a single character array, which is passed to and converted to the C++ programing language and send to the Arduino Uno
      • The Arduno Uno then reads the string and sends out voltage to the specified motor.
    • Challenges
      • The Gcode splits up the path into small segments connecting two points by either a straight line or an arch. It was quite a difficult for a junior developer like myself to work through the necessary functions needed to appropriately connect the two dots and be able to make sure it didn’t have problems with varying resolutions.
      • It was also very important to create a visual model of how my code was working so I Didn’t have to run through dozens of test cuts just to find out things weren’t quite running correctly.
    • Future Development
      • A current goal for this CNC project is to convert the program into a Web based program that could be accessed via the web. So that anyone could interoperate, edit and convert their Gcode into this basic, easy-to-handle code for hobbyist’s CNC routers who maybe using Arduino or similar microcontrollers.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information.

    • Arduino Uno XYZ Stepper Motor Driver •

    • Writtin in C++ programing language for the ATmega328P chip. •

        The jump from code to Machine really happens when the signal is sent to move one of the motors. It can be a sensitive transition and this his jump also happens to be where I discovered the value of coding and the Arduino Uno.

    • Tools
      • Arduino Uno
      • Adafruit Motor Shield
      • WIRES!
      • Solder Iron
    • Though small motors in the stepper motor category, The Nema-17 still draws a lot more energy then the small Arduino likes to deal with - more than ten times actually. So, the signal needed to be relayed to a larger power source. That’s where the Adafruit Motor Shield came in.
    • After a bit of soldering, the little guy fit right on top of the Arduino and used the output pins to get the messages. Those messages were then used to control the larger flow of electricity to the motor, both giving the motors power and preventing the motors from pushing the power back, which would fry the Arduino Uno.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information

    • LCD Display for CNC files, Status and Control •

       Being able to start doing some actual projects with my CNC router made me realized I didn’t want my computer tethered to a loud machine for hours on end. So I broke down the basic control and display components and created a program that would allow the machine to run without the computer.

    • Tools
      • Arduino Uno
      • C++
      • Super Nintendo Entertainment System Controller (SNES)
      • LED 2x16 character display
      • SD card reader
      • TEMP36 (temperature sensor)
    • Techniques
      • The SNES controller was programed to be able to move the CNC router in both a free-flow manner as well as push-and-hold movements in 1/100”, 1/10”, ¼”, 1” and 4” increments. This really allowed for easy setup and start location placement of the end mill.
      • The Display was mostly used to show the different files on the SD card and the bottom uses as well as displaying the temperature inside the CNC router’s sound box.
    • Though the Gcode has been converted to a basic string and saved on a file, that file is rather big, even for small paths. AND, if I wanted the computer to not have to be tethered to the CNC Machine, I’d need a way to store the data. Using the SD card allowed me to save the path file and then have the Arduino read directly from that instead of slow chunks from the computer.
    • What I realized after implementing the control and display functionality was that I really didn’t need to have the machine hooked up to the computer at all. I’d just need to save and pass the SD card. This has caused me to reconsider future modifications and designs.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information.

    • Photoshopped Images to Stincels •

        After purchasing a lathe and creating a few wooden mugs, I really liked the idea of painting images on the mug. Except, I’m not very good at painting on a curved surface - and, I’m not very good at painting on a flat surface either. So, that’s why I like stencils!

    • I found a great stencil cutter, which is a machine that looks a lot like a paper printer, but has a small blade to cut images out of paper or other thin material.
    • Using a combination of Adobe Photoshop and Illustrator I was able to simplify the photographs, images and maps I’d created into stencil friendly formats.
    • Then, I used the stencil cutter to cut the clear plastic sheets (much like the over-head projector slide material) and an airbrush to apply the images. It was a bit difficult to apply the stencil to the rounded surface. I was able to achieve this by spraying a temporary adhesive to the back of the stencil to force the image down while applying the paint.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information

    • A Backyard Shed, Designed with Google Sketchup •

         After living in a cramped apartment in San Francisco for nearly 2 years, I moved out to Oakland where I found a small house with a backyard! The only thing missing was shed to store my tools.

    • Design
      • Utilizing Google Sketch up, I was able to make a 3D model of the project and break it down into sections before starting construction.
      • Being able to see the construction through really gave me a good idea of how it was going to look and the changes that may be necessary.
      • Inspired by a shed I saw in a backyard while on a jog in Oakland, I decided to have a root-top planter box be the centerpiece of the design.
    • After two years, I realized there were a lot of leaks and decided to tar the roof, which has worked out great through the wet-seasons El Nino of 2016
    • Also, I’ve been neglecting my shed lately, as I’ve been consumed by coding and I fear a skunk has picked up where I left off and built his own home under a shelf   :-(
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information

    • Wooden Gravity Clock (in progress) •

        Cogs fascinate me. When I first started thinking about building a CNC machine, I started thinking about making cogs. No idea what they’d do, just that they’d be. So After I accomplished my goal of cutting out some basic wooden cogs I decided I needed to put them to use.

    • Here’s my goal: I found a great website that designs wooden gravity clocks, Brian’s Law Wooden Clocks . Here, I was able to find complete plans to re-created one of the many wooden clocked that are listed on the site. So, I’m planning on using the plans as a template as I design my own.
    • Currently, I’m testing different types of wood and trying to figure out the best way to mill the pieces out. More updates soon to come!
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information

    • Backyard Built Woodshop/Shed •

        I had a truck, I had the necessary power tools, and I had a yard. But, I didn’t have a place to keep it all. I’ve worked with wood my whole life but only on small projects. This project would be a challenge, a lesson, a triumph, and a failure.

    • One of my main goals when I set out on this project was to build it with as much reclaimed wood as I could find. To be honest, it was really about the money I’d save that was the motivation. Living in the East Bay Area allows for easy access to people giving away free wood!
    • However, this really put a strain on my design since pieces weren’t equal and it caused some major setbacks as I was forced to adapt to the imperfections of my supplies.
    • I didn’t plan on having this shed standing for more than a few years so a foundation wasn’t necessary (at least I didn’t think so), but I needed to make sure the ground was as flat as possible. I built a small 2”x4” frame in a 8’x12’ area, and built up the walls one-by-one from there.
    • If there was any lesson I could take away from this first construction-like project, it is that I should have made the roof much more simple. I got cheeky with the design and when the rain started to fall I discovered several leaks that were no good for uncovered power-tools.
    • But, after some tar on the roof, water seems to be staying out much better.
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information

    • Sorry, No Squirrels Allowed •

        A backyard without cats or dogs is a squirrel’s back yard, not human’s. At least, that’s what I’ve learned from my backyard. They chatter, they jump around and mostly they just entertain; however, they seem to think soft soil in a planter box is a free access mineshaft!

    • First, I tried to scare them off by purchasing some wolf urine online… don’t know if it was actually wolf urine, but I do know it didn’t work.
    • So, I decided I needed to just block them out. I created a large compass to draw large circles in some tongue and groove redwood I had.
    • The benefit of the tongue and groove is that it allowed me to cut the circle rather tight and set them into place plank by plank after drilling a half-hole in the two centerpieces.
    • And, It seems to work, except I think I might have trapped a winter’s supply of nuts from a squirrel and disrupted the power structure within their small society….
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information

    • Redwood Lathed Cups •

        Lathes are great, and a really fun tool to work with. Starting out with a ragged ‘ol 4”x4” piece of lumber and slowly round off the edges into a cylinder is actually quite a soothing and relaxing process.

    • But, that’s only half of the process when you want to create a beer mug. The inside needs to be taken out as well. Now, some very skilled craftsmen could, and have, achieved this on the lathe, but I am not one of those skilled craftsmen, and I took a more brute-force approach at getting the wood in the center out.
    • Instead, I used a drill press, clamped the wood down and used a large forstner bit (2-1/2” in diameter) to bore out the center of the mug. While this did the trick, I had to also put a sanding mop on the drill bit to sand out the rugged inside that was leftover from the forstner bit.
    • After some sanding, painting and handling I found that beeswax and mineral oil crated a nice combination to seal the mug. They really are a delight to drink from!
    • Questions? Comments?
      • Click the telephone icon in the top left part of my portfolio to see my contact information