Mike Etlinger | Full-Stack Developer

  • About
  • Portfolio
  • Contact

Parallel Worlds!

October 13, 2017 Leave a Comment

“Can anyone learn to code?” With stereotypes around programmers (that they’re anti-social wunderkinds) and misconceptions around what programming is really like (that it’s more mathematical than creative), the instinct may be to say no – “No, I’m not wired that way.” But it should be clear to us that human potential is infinite when we look past perceptions—history has shown us time and time again that we’re only limited by our assumptions of what we’re capable of and our access to effective education.”

-Avi Flombaum, Flatiron School Co-Founder and Dean

When most people think of programming, they think math nerds and walls of impossible to read text. While sometimes I agree about the walls of text, I’ve come to realize that, as Avi says, programming is in large part creative. It’s about knowing how your program should function, planning, and then coding it in what seems like a not so straight forward manner. Knowing how to think in a way that your language of choice will tell a computer what to do. That was probably my biggest obstacle before diving in, my self doubt about being a mathematical type. In fact, since I’ve started, I’m a lot more interested in math. I would say that learning how to code has piqued my interest in a way where I have the motivation and drive to improve my math skills. However, I still think programming is largely creative. Not in an artsy kind of way, but in a problem solving aspect. With an interest in creating tools for people, I can’t help but build parallels between editing television, and programming user facing apps.

Coming from the TV Post Production Industry, I’ve learned that effective communication in design, flow and implementation is paramount. At the end of the day, every show has a message deep down(even if that message is pure entertainment), and as an editor, we are shaping that communication to the viewer.

The first parallel: Good storytelling often reduces complex details into easily digested tidbits for viewer consumption.

This is huge for both programming and editing. It’s easy to be overwhelmed by the big picture; in editing it’s the hours and hours of footage, and in programming it’s the sheer scope of the entire project weighing on your shoulders. Both require a cool head and a game plan to execute your vision. In editing, our approach is usually building the story out, one act at a time. In my last job, that meant 5 acts, plus a cold open, which is an intro to the show. So already, we are focusing on one act at a time. Inside those acts are scenes, and those further reduce the burden of cutting the entire show. Programming is very similar, you really can’t look at the whole project as you’re building, otherwise you will face the entire overwhelming weight of the project. We need to separate common areas of the app. So if it’s a user facing app, we might separate Authentication, and Authorization right off the bat. We know we will need those two things, but perhaps there’s a solution that takes care of both. Then we might focus on our backend, building tests for our business logic, breaking down the problems even further into individual tests for each model. When our backend is up and running, we may stub out functionality in the front end for testing purposes. And so goes the development process until it become a polished masterpiece(like all my apps of course).

The second parallel: Effective communication is paramount.

Editing for television means taking your audience into consideration when you’re laying out your story. We must dictate the emotions associated with certain scenes. For example, if it’s an action scene, we need to amplify that for dramatic effect, and so the audience knows that the stakes are high, or if it’s a happy scene, the audience should feel that emotion too. On the same note, programming(or product design) user facing apps, we must know convey a message of ease, with a feel good emotion attached. Frustration is not the emotion of choice we want for the user. We should think of programming like the art that it is and refine each decision to reflect a greater message with our choices.The flow should be clear, and the functionality should reflect the needs of the user.

It is said that perfection is achieved not when there’s nothing more to add, but when there’s nothing left to take away.

Software development has many parallels to my roots in video editing, and as a budding fullstack developer, I enjoy incorporating creative problem solving to reduce complex problems into manageable morsels of code!

Filed Under: Uncategorized

How To Make A CLI Ruby Gem Part II

October 12, 2017 Leave a Comment

see part I here

This is my first real world application, and when you’re first learning to program, you can get carried away on the details and perfectionism arises. This is where your growth as a programmer takes flight. You start planning your application; the ideas are really flowing! Then, you being to realize that your brilliant idea has 27 edge cases, you’re not quite sure how to implement the functionality that you want and what was once optimism has quickly turned to overwhelmism(* Yes, I just made that up).

Not to fear however, this is the lifecycle(hehe) of a programmer.

Idea
\|/
Excitement=> Planning=>Cold Cold Reality of Implementation=>Repeat

Cycle of a programmer

You realize that the only way to bring this project to life is if you break everything down into bite size problems. Find the simplest way for your app to work(even if the functionality is off) and get it to that first working state. Then it’s a matter of polishing and building on top of a simple, yet solid foundation. The frustration will undoubtedly still be there, but it’s only a matter of time before you see that spark become a flame

There’s this Frankenstein moment. All of your hard work and the broken=>functioning code cycle has paid off.

It's Alive!

There were many obstacles along the way, namely this really wacky DOM structure, where the Date Heading was actually nested really far down and therefore almost impossible to iterate through all dates, and grab the child elements, because the date is actually the child element.

So I ended up grabbing the #items css id tag and iterating through all of it’s child elements to extract the event date, title, location, artists and URL.

after I got my app up and running the final step is to push it to Ruby Gems!

Taken from http://guides.rubygems.org/publishing/

You can try out my app via Ruby Gems with the following command:

$ gem install ra_events

Other resources:

Building a Ruby CLI Gem From Scratch


http://blog.thepete.net/blog/2010/11/20/creating-and-publishing-your-first-ruby/
https://gist.github.com/jendiamond/6

Filed Under: Uncategorized

Food Journey: React Edition

August 19, 2017 Leave a Comment

Hey guys, this is another iteration of my food journaling app. I want to delve into my choices for Client file structure and organization.

Here is my Component Architecture. With this being my first React application, I eagerly started building based on this layout. As I went through the curriculum over at The Flatiron School, we used a common approach to file structure with something that looks like the following:

This is fine, it makes sense that we have folders based on Components, Containers, Reducers, and Actions. However, as I quickly realized, organization should come at the forefront of your application.

Two things that you absolutely want to avoid are:

  1. Folders too deeply nested aka over-organization
  2. Unruly organization, where it’s difficult to know what you’re looking for

To handle both of these, I decided to actually organize my project based on my component architecture. In that sense, it didn’t really matter what is considered a Container and what’s a Component. They live in a top level folder called ‘component-composition’, and then they are based on the routes in my app, Login, Dashboard, and Overview.

This is beneficial because I don’t have to hop between folders when working with data flow. Since my app is relatively simple I can leave them all in a single folder under the parent without having to deeply nest folders inside of that.

Here is what my structure looks like now:

When starting a React project, this should be your number one, because it needs to scale! A huge lesson learned when building this is that your project will quickly become messy and disorganized if you’re not cognizant of your direction from the start. Also, it’s a total pain to switch directions after you’ve already began. The imports quickly break the app and you need to check and double check paths just to get back up and running again.

So the moral of the story is that the organization is of the utmost importance! Good luck!

Filed Under: Uncategorized

How to make a CLI Ruby Gem

July 5, 2017 Leave a Comment

Whenever a synapse fires off in my brain, and an idea arises, I write it down and come back to it every so often to see if it still excites me enough to bring it to life. I think this is a very important first step to building something from scratch. Especially in programming, if frustration occurs, your passion for the project will get you through to the other side(hopefully).

Once the idea passes the first test, then I start thinking about how useful the tool will be to its users. Would I personally use this tool? Will it be easy to use? What will the user experience be like? If the idea of firing up the program and actually using it makes your skin crawl, then it’s time to drop the idea and move onto something else. Although, the pure joy of making something useless might be adequate. In this case however, my CLI Gem: ‘ra_events’ passed both of these tests. I wanted to make something that programmers can use to look up electronic music events(via resident advisor) in their state from within the command line. No need to go to the browser and navigate anywhere, just a couple keystrokes and you can list events in your state by month.

So, the research began. I needed to figure out how to actually build my Ruby Gem. I got to digging. The official docs are very useful in this regard.

Let me google that for you

Then I found this little ‘gem'(ha…)

$ bundle gem gem_name_here

Ok, so this gives you a skeleton or app structure to go off of. Since this isn’t a large application(Just a Scraper, Event, and CLI class), I needed to make some adjustments to the structure. Namely, the way in which bundler namespaced the classes by default.

Here is a side by side comparison of my current release(left) and a newly created gem(right).

As you can see, I added my classes in lib/ra_events. Inside lib/ra_events.rb, I required all of the necessary files for my program to run, and then I require_relative in my bin/ra-events. Your executable file should use caterpillar case(orKebab-case) This is convention for when you use your gem from terminal/bash(I would type in ra-events to start my program).

and here’s the executable:

Part 2, coming soon!

Other resources:

https://www.adrianprieto.com/building-a-ruby-cli-gem-from-scratch/

http://blog.thepete.net/blog/2010/11/20/creating-and-publishing-your-first-ruby/

https://gist.github.com/jendiamond/6128723

Filed Under: Uncategorized

A case for a white board

July 5, 2017 Leave a Comment

Now now, before you get bent out of shape, I mean the case for actually owning a whiteboard.

While we can dream of one day kicking the whiteboard interview to the curb, we should actually prepare for this inevitable part of the hiring process. I think a good start is getting a board, and hanging it up, or using it as a scratch pad while you code. I find it especially useful while I myself learn how to code.

Some benefits of owning your own whiteboard:

  • Practice for actual whiteboarding
  • Use it as a reminder for difficult concepts
  • Draw out your database relations
  • Vocabulary
  • Blog post ideas!

So this doesn’t seem groundbreaking, but let me tell you why I think it’s important to have something analog hanging around. I probably have like 30 tabs open on my browser at this very moment. I usually pull stuff up with the intention of reading it, but I have no desire to actually bookmark it for later. That would just get unruly trying to organize that many bookmarks. Inevitably, I forget why I even have the tabs up and end up skimming, closing a lot and repeating the process.

For me, this is usually because if it’s out of sight, out of mind. I need a visual reminder of important vocabulary, or DB relations etc. I can just take a glance up there and see what’s on my plate, what I need to work on, and draw up anything that comes to mind. In our digital world, especially with coding, I think we need an anchor to the analog world, and therefore a whiteboard seems to do the trick.

So go out there and get yourself a whiteboard!

I got this one from amazon: https://www.amazon.com/gp/product/B01DJJXYZG/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

It’s perfect for hanging up, but may be a little big for holding in your lap, but still doable.

Till next time!

Filed Under: Uncategorized

A ‘Fork’ In The Road

March 13, 2017 Leave a Comment

Github Fork

6 years ago I was fresh out of college, broke, and eager to start working in TV/Film production. Through a series of incidental connections through friends, I worked on an indie feature called “Rooftops”, which took place in NYC but also filmed on location in my home state of Michigan. Upon completing the film, I made a decision to pack up my car and head out east.

After 5 months of sleeping on floors, and the awful experience of bussing tables at a 450 top restaurant in Rockefeller Center, I finally landed my first gig at a production company made famous for producing “Mob Wives”(Oh yes. Whether it’s terrible or brilliant is really up to you). At that point I could have been working on “Amish Mafia” and I wouldn’t have cared. This was my ‘in’. I was finally able to get my start as a post-production professional.

To date, I’ve worked on tons of different shows for various networks. I had a 3-year stint working on “The First 48”, everyone’s favorite true crime show. During my years in post-production, I was able to really pinpoint what brought me joy and fulfillment when I went to work.

A few of the big ones for me are the following:

• Creativity: There is nothing more fulfilling than seeing your work really come to life. From concept, to execution and all of the ups and downs in between(aka network notes). Creativity gives me the fulfillment that I need from my career.
• Problem Solving: Stumbling upon this revelation was huge for me in that it really opened the door to new paths in life. I had the ‘aha’ moment that life would be satisfying if I could use my brain to solve problems. I am always more curious as to the approach to problem solving, rather than being content with just the result. If we wanted to simplify how the world’s greatest minds are recognized, I might say that it’s their insane ability to solve problems. This goes for artists, scientists, writers, programmers and explorers. It all boils down to their ability and passion to solve problems.
• Collaboration: In all aspects of production, collaboration is key. I love working together to come up with the best solution to a problem, or finding creativity in a spark between unsuspecting colleagues. Our entire experience in life is social, so it’s no surprise that working together towards a goal is much more fulfilling than doing it alone.

The Big Switch Begins

So, how does this tie in with my current trajectory?

Programming.

Programming is all 3 of the things I listed, and so much more. It’s the path that always poked its head out at me and said, “Are you ready yet?” I’m pleased to announce that, yes, I am finally ready. I’m ready to use my problem solving skills, my creativity, my ability to collaborate, and I’m ready for a life of continuous learning.

In my pursuit of becoming a Full Stack Web Developer, I want to learn exactly how to learn. I want to be able to teach myself new programming languages(and Japanese too!), cooking skills, or even how to live off the grid. Web Development is my goal but it will facilitate joy and fulfillment in other aspects of my life as well.

One of the main reasons I chose to go through Flatiron School’s Online Web Developer Program is because their love of code is infectious. When you visit campus or a beginner study session, their passion has a way of rubbing off on you. They know that learning how to code is POWERFUL.

Code can change the world. I definitely agree with that. It has undeniable effects on our everyday life and it has the ability to empower people. In that sense I hope to start small and look toward my community to give people tools with which to empower themselves. I want to solve issues that make people’s lives easier, to become more independent, and help people to find joy in their own way, in their own life.

I love the thought of an idea coming from some small synapse in your brain, to a real, working, breathing thing. Even though collaboration is key, a single person can have a profound impact, especially in the world of programming. That’s a huge motivator for me in my consideration to become a Web Developer.

So, how do I actualize my goals? Stay tuned to find out…

Books I picked up to facilitate my learning. Other suggestions are welcomed!

HTML & CSS/ Javascript & Jquery by Jon Duckett
Grokking Algorithms by Aditya Y. Bhargava
Clean Code by Robert C. Martin

Filed Under: Uncategorized

  • « Previous Page
  • 1
  • 2
  • 3

© 2018 Mike Etlinger
 · LinkedIn
 · Github