Monday, August 4, 2014

My Life as a Programmer

So yeah this post is going to be another lengthy one (we'll see ( ͡° ͜ʖ ͡°) ). Oh yeah and if at any point this seems like rambling, it's because it is.

My Journey into the Underground Club of Being Nerdy
It's exactly how it sounds. How the hell did I get to this point? I'm going into my sophomore year of college basically majoring in being a computer nerd. Most people have this whole coming of age where they realized that they didn't actually like business school and became a doctor or something. I've always had an affinity towards computers but I was unsure how that turned into a lifestyle. So it only seemed natural that when I figured that I could go to college and learn more about computers I was going to do just that. 

Disregard what I said about it being either "underground" or a "club" anyone can be nerdy about anything. I just find it weird how I'm drawn to computers. Why is anyone drawn to anything? All I can chalk it up to is a need to have everything organized and printing naughty words in the console when something breaks. 

The whole notion of technology gets pointless. Let's take facebook for example. It's purpose is to connect you with friends and family sell you advertising. It's built on technology built solely for the internet, which was made just so these computers could talk to another. Those computers were built because a guy named Alan Turing needed something to break the German's Enigma code. Let's face it breaking a code with pen in paper is fun, but Alan was sick of doing it. Point being technology is self-serving, quite literally, it means that if I want to make use a career out of technology, I'm making money from self-serving myself, like some double-dipping greedy bastard. I think the reason is more because I'm drawn to the fundamental nature of programming

 The Life of a Computer Programmer : A Memoir

I don't know exactly how or when it started. My oldest computer memory was playing Math Blaster. This was when I was 6 or 7. Around 8 I had found my dad's old Toshiba satilite laptop from the early 2000's and I loaded XP on it. That thing had one USB 1.0 Port and a 20 gb HDD. I basically used it to make paintings and photoshops in GIMP. Fast forward to  middle school and I was in Lego Robotics doing basic programming. I thought "Cool I can make LEGOs react to sensors!". I started learning C++ and LabView starting with my experience with FIRST Robotics. 

During high school, I dabbled with Blender, making basic plugins with Python, and also programming a National Instruments CRio on a complex robotics system. Yeah, I guess that's the first time I really opened my eyes to the world of programming and cool computer stuff. SIDE NOTE: I don't really want to think about how many hours I've sat in front of a screen since then *cringe* 

Since then, I've gotten into all sorts of trouble. I rolled my own server using debian and a VPS. Done countless things with Python, C#, and CUDA C. I even built some complex digital logic in Minecraft. I was a tech alcoholic that didn't get hangovers. I did my school work in high school and got into Iowa State University. Leveraging my background in programming, I've done a good job with my classes there. This prior and out-of-class experience ultimately landed me my internships and gotten me even more experience. Was there more to this programming thing then I thought?

Strangeness
 It's always weird to think about how I type things into a computer for a summer job. Admittedly it's a bit more complex than that but you get the gist. As a coder or programmer you might think you're hot shit because you programmed a killer app for IOS, but don't ever forget that you're thinking you're cool because you typed something on a keyboard and made something blink. 

That brings me to my main point, yeah you're probably thinking "Wow Tom actually has a point within this pile of opinion?", that main point is that no matter how small or simple a program is, it's no less powerful than some million line space shuttle project. Taking a step back and realizing how cool it is that you've done something with just text is an important process in becoming a mature programmer. You have to realize the impact of what you just created.

This fall I'm going to be taking another step in my development as a programmer. I'm going to be the first Treasurer of a club called CyHack. Aside from managing money, etc. I'm going to be actively planning events and teaching other students with my fellow club organizers. Coming full circle, I might get the opportunity to go to a middle or high school and talk about my major and why I love computers and you shouldn't be afraid of those feelings. Just imagine, if I can inspire just one kid, then they can inspire others around them. Spreading the word about not just Computer Engineering but everything STEM and more. Opening  the world up and sharing my experiences about how I took what I loved and made it into a career, and a fun one at that. 

This is the strangeness. This is the weird feeling. I'm reaching back into my past an inspiring myself again in some ways. I want to teach the world to sing. Because the world is changing faster than ever and we need more smart people that love what they do. Something more powerful than code or a good friendship. Legacy. 

Leh-GAh-SEE
This word was most popularized by my high school principal Mr. Brady. He loved to use this word. He would talk about how we as high school students should leave a positive legacy at the high school. And by positive he meant don't get sloshed and text someone a picture of your nether regions, or be a leader or something. Going back to programming, while it's important to leave good comments and make a logical OOD system, it's also important to mentor and give back to the people who may one day be programming your wireless catheter. 

We seem to measure our lives with how much money we make or how hot our girlfriend or boyfriend is. Heck some people are extra mushy and measure it with good friends. I want to measure my life by the contribution I've made to society. Not just future programmers. Just a long as I can still make great code and build overly expensive computers. 

That's about that. If you made it this far, thank you. If you did that and liked it why not share it with your constituents?






  

Friday, August 1, 2014

Code is beautiful.

Code. Such a simple word, yet extremely powerful. In this day and age it's everywhere, it powers our cars, phones, computers, power grid, etc. It's the next technological step for mankind; we created technology; code allows us to control that technology. 

The Inklings of an Idea

At the most basic level, code is just text that is either compiled or interpreted to do a certain task, or move some bits around, or blink an LED. Right now, I'm typing into my Firefox Nightly window which sits upon a framework of code, using javascript on Blogger.com to eventually post this text / html to a server and have it hosted for all to see. It's so complex yet it has to work seamlessly. Sure, I could use VIM and write all my blog posts in pure html via SSH, but I choose this method, why? Because it is seamless. Two separate methods of communication with the world, all built on code, same functionality. 

Looking at programming and coding at a functional level is all well and good. For instance if you're just learning a programming language you'll need to get the mechanics of that language down, learn how to build it and run it, debug, etc. However, once past the layer of syntatic symbols, there's something more beautiful... But I'll get to that later.

A bit of background before I dive into this topic any further. I'm going to be a sophomore student studying Computer Engineering, I've programmed for a number of years, and I've had two internships programming in various languages (If that didn't sound like an elevator speech then I don't know what would). I've also been exposed to professional programming schedules and the responsibilities that go long with that. Through my personal and professional experiences with code, I've come to form an idea about code that I can't quite fully grasp as of this post but it's a start.

Imagine you're a programmer at a medium sized company developing code for some platform, now imagine 50 years down the road, how does the code you committed yesterday work and how compatible is it with this imagined future code? Not very well right? It's impossible to know that far in advance what features or frameworks you're going to have to interface with. The thing about your code in 50 years is that (if it's still around in some form or another) it will have evolved and changed, to make use of new features and technologies. This is a glimpse into why code is beautiful, it's metaphysical, it's amorphous, it's an exact reflection of the time the team of programmers put into it. 

 

Code Like an Ocean

Now that I've fleshed out that the "code" I'm talking about is more abstract than concrete characters, I can pull back the curtain a bit more on my thought process. I'll admit it was very hard to focus these thoughts into something as coherent as this blog post, I'll try my best to explain my thoughts. The one path that led me down the rabbit hole was Object Oriented Programming, or designing pieces of software that couple with one another to mimic complex systems. As opposed to functional programming which is linear and is very difficult to scale, OOD is quite literally what you make it, a reflection of sorts of the inner psyche of the programmer writing it. 

Take for instance a program that creates a Car object, makes some Wheel objects and puts them all together, pretty simple right? It reflects a relationship between objects that make sense in our physical world. But what about the instances in which we need to create a more abstract system? Where do these ideas stem from and how is one considered 'better' than the other? In this way code is meta, there's no inherent structure to conform to, only the imagination of the coder's mind, a canvas for the imagination and a world still to be explored. 

Reaching back to the "What will this code look like in 50 years" thought experiment, how will people of the future perceive programming? Will it all be by though without a mouse or keyboard? I believe that our notion of programming today will be much different in the future, perhaps it will all be done by thought, programmers will sit meditating, willing complex systems into being from the singularity of their collective minds. No barriers, no boundaries, no code rebases. 

But "Wait!" you might say "Humans need rules and rigidity!", indeed you are correct, the internet was not build upon the ethereal thoughts of our internet fore-bearers, but was instead engineered and painstakingly designed to allow the explosion of a previously under utilized technology. And here we find ourselves, the humble programmer, amid the Ocean of Code, drifting endlessly across the rigid and rough waters, constantly paddling towards the calmer seas of lucid programming. 

  

All is not without consequence

You might think it's simple to brute force our way to greener pastures, just program like hell and you'll reach nirvana. But it's never that simple. Bringing the conversation back into the relevant world, there is a barrier, who's name is Technical Debt. Wandering back to my high school days I would write programs to fetch and scrape websites using Java. I was naive as to OOD in those days, but I beat my head against the wall until I could scrape RSS feeds for popular websites blocked by my school's IT department. It was crude but hey, I wanted that freedom. No fancy frameworks, no beautiful idiomatic code, no revision control. 

Looking back, I realize the sheer amount of tech debt that I was ranking up. Had that continued into a bigger project, I would have been swamped, and work would have ceased. Project management tools can only do so much to make your code manageable. All programmers walk the line between the time it takes to plan a project and the time it takes to execute said plan. As outlined by this relevant xkcd comic 

http://xkcd.com/1319/

Pulling in some experience from my two previous jobs at Webfilings (now known as Workiva) and Garmin, I've gotten the chance to work on fairly large projects and deal with tech debt first hand. While Workiva was very organized and all code, as far as I could tell, was well written and meaningful, they also ran into issues using two different languages for both the front and back ends, a constant source of upkeep was required to maintain both. Despite this tech dept it was managed and I consider Workiva to be a pretty efficient coding machine. 

On the flip side, the code I had been working on at Garmin was significantly older. The framework documentation was nonexistent and people just went to 'the guy who knows about that module' for any help, I was surprised how this system could function when built upon very old code. While Garmin had a larger technical debt working in a non OOD language with complex but non-decoupled frameworks, they still managed to get all the functionality they wanted for their line of products. They did this by correctly managing software development teams excellently and efficiently.

To compare these internships to games, Workiva is to Civilization V as Garmin is to Dwarf Fortress. Both are games I enjoy very much but DF has a much steeper learning curve. Tying this back to code as a metaphysical instance, your blob of code wont standup unless you trim the fat and focus on making your project or framework modular and easy to navigate. 


Walking the line

I think it's safe to admit that the world will always have issues, always some form of misgivings somewhere. Code is that way, there will never be completely lucid and unified API, period. There might be some pretty darn close APIs out there but under the thin veil of neatly organized function calls and objects, there lurks a labyrinth of programming pitfalls. Now, this post isn't going to actually teach you the exact way to fix your specific problem, but more as a spiritual guide to programming. Feelings your way through the tougher problems presented, that can't be solved with a simple switch case or loop comprehension. 

Our secondary jobs as programmers is to not only write the code we think up but to architect this code in a meaningful way. Even if you're just beginning to program, it's important to start thinking about how your code will function with other pieces that you've written. I'll admit, it's hard to predict whether your one-off script will turn into a framework. It's even harder to begin putting together lines of code, not knowing whether your code is destined to be a glorified POS or a beautiful API. 

It's only going to get harder as the way programs are written will be built on more complex frameworks. There's nothing to fear for you stand on the shoulders of giants. Those who coded before you, meticulously thought out and planned their systems. And in time it becomes harder to keep track of your own project, therefore use commenting and copious amounts of documentation to clear your thoughts. 

Look into yourself dear programmer, find your inner strength and think before you type. Work out all the possible routes and expansions you want to add to your project before you open a new Visual Studio project. Leave room for seconds, and thirds. Know the extent of your project even better than you know yourself, and you too can walk the line. 

 

from Mind import Sanity

This all might seem a bit crazy to you, it's still pretty damn crazy to me. Like I've stumbled upon some secret to the universe. Above all the metaphors and abstract ideas, I've been enlightened as to the true inner workings of programming and organization. I hope that my brief journey with you has been equally eye opening. Thinking abstractly about code and then being able to solidify it into complex systems that are powerful AND work well is an excellent skill to have. As a programmer that skill will basically start you on a path to a great career.  

Now, as a bit of a disclaimer. I don't mean to sound all high and mighty, I'm not suggesting that programming is the only place where planning is important, of course planning is crucial in nearly every aspect of life. I'm simply providing my thoughts on how to be a better programmer. Fortunately these skills of abstraction translate well to the real world, critical thinking is ever more important. 

Programmer or not, I hope you criticize my opinions above, the world is all about improving on the ideas of others and looking for self betterment. Do not shy away from complexity, instead embrace it. Think of your code on a more grand scale. See the big picture. Grab hold of your programming skills and use them as your super power, control and create the technology around you. Make the world a better place. And above all remember that Code is Beautiful.

Friday, July 11, 2014

The future is 3d

The future is now!!!!!

But really, It's totally now. I received my 3d printer yesterday and BOY am I exited! I assembled it last night and wired it all up and printed my first cube. Below is a picture of the tolerances on my first print. They were only .15 mm off!! not bad for a first print!!!

Look at that nice Caliper
 For the build photos click on my dropbox album -> https://www.dropbox.com/sh/si316hk017orxqd/AAB4evClgMYpCjh9Ie_2rovta

Bonus pic of me in a Dinosaur hat for you guys. 

So anyways that's my Printrbot Metal simple, I look forward to printing more and more cool things! Stay tuned (uh to my blog I guess, I doubt you're viewing this on a TV) for more cool stuff!

-Tom

Thursday, July 10, 2014

PrintrBot Simple Metal - Pre-Review?

Hello to the many people that read my blog. (which is like 7 people). My PrintrBot Metal hasn't arrived yet :( That's the bad news, now the good news is that I have my room setup to accommodate a 3d printer now! For those of you who haven't seen the original Printrbot, below is a picture of the laser cut one. Pretty cool right?
Look at this cheeky fellow
Now fast forward a year or two to 2014 *time warp noises*. I'm in the market for a 3d printer and I don't want to spend a lot of money on my system but I still want a good product. Introducing the Metal Simple from Printrbot. It's basically the same design, with the X-axis bed and the ZY-axis arm, but it's ALL made of METAL. Which adds like +10 to it's sex appeal... if a printer can have such a thing. Here's a link and a picture -> http://printrbot.com/shop/simple-black-kit/
Industrial Beauty
Now, if you're wondering, I did buy the kit option, because first, I can probably assemble it without breaking it and two, I want to do it. Meh I have the internet if all else fails, and Printrbot does a good job with their instructions.

Shipping Woes

Now I haven't actually received my Simple Metal yet. According to the site there's a 1-2 day lead time which is totally understandable, and a ton better than makerbot's. My lead time was a WEEK, now take into account that one of the days was the 4th of July, that's still pretty unreasonable. 
I contacted support and they told me that they didn't have enough metal parts to put together a full kit and apologized with a 10% off coupon. That was good enough for me, I can understand that there are going to be production issues with a smaller company. Now I'm waiting on USPS to deliver that package  before Friday!


Getting ready for my bundle of Joy

Like any good parent, making sure you have a place for your baby before you bring it home is important. So i decided to accommodate my printer before hand so it felt at home when I got it. Now I'm going to use a bulleted list, bear with me.

Things to do before 3d printer gets delivered:
  • Setup laptop with Octoprint for network printing [x]
  • Cry deeply over the longer wait time for my printer [x]
  • Buy tools and materials for the baby [x]
  • Clear off some precious desk space [ ] 
  • Hire Private Investigator to track the package discreetly [ ] 
As you can see, that list is pretty comprehensive and is almost done. Check out my octoprint screenshot below

  
In closing, I'm exited, maybe a little too excited but excited non the less. I'll post pics (or video) of the assembly / unboxing then post more about my prints! and as always thanks for reading!

Thursday, July 3, 2014

The future is now!

Hello comrades. It is your glorious leader, Tom. So good news, I bought a 3d printer from printrbot.com. This one specifically http://printrbot.com/shop/simple-black-kit/. Man am I stoked. I ordered it Monday but there's a lead time of 1-2 days and the thing still hasn't been processed :(. I wanted it by the 4th to play with this weekend, but I guess I'll have to suck it up. I'll be writing a review about the thing once it gets here, maybe to an unboxing (because that's original). I'll finish this post later

Thursday, June 26, 2014

IndieGoGo Campaign Officially Launched!

https://www.indiegogo.com/projects/mesosphere-pioneer-1/x/1698207

Check it out above! Please help support my project to send a weather balloon payload to space!

I will be making more updates as I organize more things. If you'd like to see me and talk about the project, I will be at the KC Maker Faire this weekend.

Happy crowd funding!

Tuesday, June 24, 2014

New Project: High Altitude Weather Balloon

Alright, you people better settle in. This is going to be a long post.

 Okay, now that I've warned you, I'm glad to announce my new project. It's going to be a weather balloon to SPACE (or like 100,000 feet). This has long been a desire of mine to send a tiny box filled with gadgets to space, and I have the money to pursue it now.

It all started out with a passion for space...

About 5 years ago I thought it would be a good idea to take an old para foil kite from our garage, make a Styrofoam box, and slap a camera inside to see what the ground looks like from the sky.
This is very similar to the kite I had (and probably still do)


This is similar to the rigging system I used later on.
Then I found this gem on my old youtube account.

 That's footage of my old house and property. Pretty shaky I know. This footage was simply breath taking to me when I finally pulled the kite down and looked at the film. This was before Google Earth had the definition it did today, you can imagine my excitement that I had being able to record this insane point of view with a kite, a camera, and a windy afternoon.

Now fast forward a couple of years to the summer of 2014. I just finished my first year of college at ISU in Computer Engineering and I'm currently (at the time of this blog post) working as an intern at Garmin International. This idea was rekindled partially out of the money that I'm making as an intern and the go-and-do-it mentality at Garmin. With all this background and passion to do something, I want to go higher and I want to see more than ever before.

I want to see the dark sky. I want to see the edge of the horizon arc in front of me. I want to experience space.

Enter the weather balloon, a simple device that will transport a scientific payload directly up, pop at its max altitude then fall back to Earth with a parachute. No electronics needed... unless you want to get a good view. This is also where Garmin comes into play. I have an employee discount on their action camera called the VIRB Elite. You might ask why I didn't just buy a Go Pro instead. For a couple of reasons actually.
\/ Check it out below \/

First, I have a good discount being a Garmin associate
Second, the VIRB uses a better camera sensor (a better chip from the same company actually) than the Go Pro.
Third, the VIRB is actually made to be outdoors and doesn't need a case, and also has a much better temp range than the Go Pro.
Fourth, the VIRB has automatic altitude tracking using GPS, meaning that it can turn on and off at certain heights making it PERFECT for this type of project.

Not only will the VIRB take video but it will also do GPS tracking as well.

I'll also use a GTU10 for tracking the balloon after it comes down.

Thanks for reading part one of my high altitude weather balloon project! I'll be posting more updates as I get parts / make designs for the gondola.