Morgan Murrah - Web Developer

a no frills bootstrap blog

2019 Update

I don’t blog often but a lot of life has been happening. I thought I would update with just a few notes.

  • I have been working remotely for 2.5 years as a web developer. I have worked on major features across the stack at EasyRx. EasyRx has been an amazing employer.

  • I live in Bellingham, Washington - an amazing small city near the border with Canada by the sea in the Pacific Northwest.

  • I am active in the local development community called Bellingham Codes, which I highly reccomend to anyone.

Whats Good: a full stack javascript place review app

Deployed app: whatsgood.site

  • A side project I worked on over weekends for about 3 months. You can see my progress on my GitHub.

  • Whats Good is a fullstack javascript app with MongoDB, Express, PassportJS.

  • Deployed app hosted via a Digital Ocean Ubuntu Droplet and served with an Nginx reverse proxy, daemonized with forever

  • Built significantly with the instruction of Wes Bos’s course Learn Node including 9.5 hours of video.

PHP\[Tek\] 2018

Happy to say I am on the list to volunteer at PHP[tek] 2018.

I have posted a few times about how great I think volunteering at conferences can be.

You get to meet people and make new connections in a good atmosphere. It feels better working together to make an event happen rather than just meeting people. It feels like a more kind of genuine kind of networking.

Learning to work with PHP has been one major milestone in my work as a developer for EasyRx.

Looking forward to it !

Also…

I recently passed my first year anniversary of working full time as a web developer. It is nice to reflect on how far I have come. Volunteering I believe has been one ingredient in my success.

phpatlanta-june

Atlanta PHP Talk 5/30/17: “How to be a better programmer”

The Atlanta PHP meetup took place at the offices of Shootproof which provides a variety of software products aimed at photographers on the perimeter of Atlanta around the intersection of I-75/I-285. The talk was given by a man named Micah who leads a team of 8 software engineers focusing on enterprise wordpress development.

The basic thrust of his talk was that there is a particular kind of learning curve that applies to ever new thing/area of knowledge that affects people of all skill levels. Micah believes this applies to most areas of life not just web development.

“The better understanding that these various stages exist helps us keep on track and avoid being distracted in too many directions. Being drawn in too many different directions results in not reaching levels of experience or mastery in particular things after we get through stages of over-confidence and doubt.”

Micah worked through particular stages with the help of a graph called the Competence-Confidence curve:

The most interesting thing I tookaway was the idea that this curve really does apply to every new area of knowledge of varying sizes. Some topics maybe can be mastered in 15 minutes and some many years but there is usually a period of over-confidence or miscalculation early on and some kind of doubt or period of adjustment where you really aren’t sure of your skills.

Micah had various reccomendations for getting througn these stages represented by the annotations with curly brackets at the top of the graph.

A lot of the things in the talk were those kind of classic pieces of advice that seem obvious but are worthwhile to re-affirm as simple as getting the right amount of sleep and time-boxing projects.

Micah emphasized the importance of feedback loops.In practical terms this includes a focus on keeping development as locally accesible as possible instead of developing remotely or manually pushing changes to a remote after each change.

Micah also had specific good advice about how to use Google and debug tools to keep the feedback loop alive in development (paraphrasing):

“Google is your friend - but if you cant find the answer in 10 minutes the feedback loop is lost. You are better off to get back to the console / dumping variables and do rough stabs at the problem to narrow it down than keep googling but focusing on your mastery of debug tools is the best option for this.

He made other points including:

  • Collaboration - working with people is the best cure to avoid comparing yourself to others.

  • Pair Programming - importance of remotely pair program when possible as it allows one person to “drive” even if they aren’t familiar with some particular code as it doesn’t hold another person up from coding who is familiar/ aids learning process.

  • Quoted the stat that we spend 90% time reading code, much more than writing, as most of the work is diagnosing the problem first.

  • Micah reccomended PHP Storm as an IDE he uses. (encouraging for Mike and that we appear to be in a good direction with adopting PHP Storm)

Progressive Web Apps

(So says I….)

Keeping abreast of new developments is essential to web development. It can also be very draining, as many things come and go at an incredible pace particularly in the realm of JavaScript Frameworks. This can be exhausting and can bring about skepticism in adopting or event really having a look at new things. This is sometimes particularly called JavaScript Fatigue as the rate of change has been so dramatic in the last few years.

Many mentors and experienced people I have talked to have instilled this in me some as well as a virtue to hang back and only invest in the ‘proven’ technologies. However some new developments really do seem to pass muster and persuade me that they are going to be a huge part of the future of web development. (What follows, of course, is also the sometimes pained realization one must find time to learn this new shiny thing when one is already very busy…).

Most recently the emerging concepts of Progressive Web Apps and Offline-first design have caught me and a number of conference talks have persuaded me that I need to become familiar with this technology… for the right reasons.

The following article is excellent and essential introductory reading, with some great visuals:

“The Offline-first Cookbook” by Jake Archibald

I also watched some of the following videos:

Progressive Web Apps with Alex Russell

An Introduction to Service Workers - JS Monthly London

The ServiceWorker: The network layer is yours to own


What I believe I learned…

A Progressive Web App is…

Progressive Web Apps is the new Ajax - View Source Conference Sep 2016

My very junior summary…:

  1. Web Browsers are increasingly sophisticated and advanced to the point that is possible to have ‘offline-first’ applications that fill all of the UX needs of users currently met by native applications. The idea that the web was dead for mobile does not seem to be certain or bearing out with time

  2. The costs of developing native applications for iOS/Android platforms and others is prohibitive and has documented issues with adoption/attrition (See: Progressive Web Apps w/ Alex Russell). If anything, it is native applications which look ready for ‘disruption’ from progressive web apps.

  3. JavaScript is undoubtedly at the core of this paradigm shift and meeting users desires for consistent, engaging design.

Offline-first really means are web apps that only truly need to load once. From that point a service worker starts from the second load and the app should function gracefully even if you are offline or network connection is spotty. You should not get network unavailable/i.e. the “downasaur” even if you have no internet connection.


This dinosaur could be becoming extinct if service workers become as standard as they could be…

‘Service Workers’ as I understand them from the literature and my early experimenting act as a proxy between you and the network, and are capable in experimental stages of performing many features that native mobile apps provide i.e. push notifications, homescreen icons.

With offline-first applications at a minimum there is never a no internet connection available warning or a hanging spinning loading animation. There now exists a whole plane to “control the network” as Jake Archibald calls it to ensure there is a consistent, smooth experience throughout the app. The project to make a Offline Wikipedia to me is exciting and shows the real potential for offline-first to affect the many.

Pokedex.org is an example of an offline-capable website using a serviceworker and database within the browser.

I see a major driver for the future adoption of this offline-first, progressive web app approach is the fact that the resources needed to develop native mobile applications for Android and iOS is more than most organizations have or wish to expend. There are limitations to hybrid mobile app design like using PhoneGap.

WIP

Hello! This blog was recently migrated from a Ghost Blog hosted service at my old url to this new statically generated Hexo blog website.

Some things are missing/have been pruned

NZ ITP Associate Certification

"use NZ-UK strict spelling";

Recently I received my NZ ITP Associate certificate. An Atlantan may wonder ‘What on earth is an NZ In-The-Perimeter Associate’ !?

Well ITP actually stands for the Institute of IT Professionals in NZ. Associate membership is the most junior and entry level status one can gain, which is accurately my status as a new entrant into the field.

Associate membership is still no small deal- all members are bound by the mandatory code of ethics in their dealings with others to remain in good standing.

The organisation has a number of great courses and resources which will admittedly be not as easy to access from the United States and on US Eastern Standard time.

However, I know there are more Kiwi’s than I realize in the USA and even in Atlanta. For example, I had the pleasure of meeting the CEO of Motim Technologies which produces amazing work in AR and with other technologies for very large fortune 500 companies.

The opportunities to do business between the two countries is only growing as the world becomes more connected. Still, it is nice to get snail mail and this will hang warmly on my wall. Onwards !

Group Project recap - 'FreeSpot' - TLDR: Woohoo!

Working in groups is an unavoidable aspect of life and work and it seems a truism issues commonly arise. For people experienced with group work a lot below may also seem like a truism but I am really happy to recap one particular thing I observed and learned from a recent group project using Ruby on Rails. You can see the ReadMe for this project on the GitHub at that link.

TLDR: Don’t take for granted having a simple system for dividing tasks (or ‘tickets’ as commonly described) and having it viewable for all to see. Trello Boards or whatever people decide to use can save some real headaches and misunderstanding.

If you have to clarify what each person is doing such as by asking or repeating yourself the potential for miscommunication increases greatly. Agreeing on a simple (even if it seems cheesy) system such as a Trello board that people can refer to really is an investment, even if it can seem tedious at times. This really came to my attention because one team member had previously worked in a group that didn’t do this well and the difference in stress levels was very evident.

One of my fellow developers in this project expressed the difference to us as we began using the Trello board. She described some miscommunication that had occurred in their previous project simply because they weren’t keeping a better track of who was doing what- one team member quickly began to feel like others were doing the work they had claimed, or that their proposed ‘tickets’ were not being acknowledged.

Other things that really stood out from this project was really reaping the benefits of dividing tasks. Early on one person took over the realm of designing the platform- as a result they were able to experiment and make decisions that resulted in a really consistent and quite polished look for a week sprint of a project.

I am really happy with the experience I had overall and look forward to being able to discuss this group experience as I seek new opportunities in web development.

UX Design Bootcamp blog

Recap of UX Design Bootcamp at General Assembly instructed by Jacklyn Cohen == @PlayfulPixel

On September 10th I attended a one-day User Experience Design Bootcamp at the General Assembly campus in Atlanta. I chose this course along with the Python Bootcamp as extra courses to take with my in-house credit with GA as a current WDI student. As a current student at GA looking for a new opportunity after graduating I am not really an independent observer of a GA course but will try to write something interesting!

As a summary:

I believe this class helped me understand more about the work done by UX professionals and how I could work with someone working in UX in a future development role.

Early on in the course we examined the dismissive stereotype that UX is really just visual design and how people feel about shiny exciting buttons (even as much as I like shiny and exciting buttons).

I would be lying if I hadn’t thought like that about UX occasionally before. However, I have started to see the increasing importance and professional specialization in UX in recent years.

Background

I remembered there was a conference in the city of Dunedin called UX Design day just before I left New Zealand which I was recommended to attend. I also became aware of a website called Dark Patterns that critically looks at unethical or exploitative applications of UX which actually I think really focused me to consider the potential power of the craft.

While UX does seem to be an increasingly relevant discipline it was recognized it is still not widely understood/recognized for the variety of work skills involved:

I now know that UX is indeed bigger than shiny buttons on a UI. For one example, this course made consider the role and scope of wireframes in development. In class in WDI we have typically created our own wireframes for our own APP idea’s to meet project specification.

In the course I thought more about how in developing a real world app of any particularly big size quality information would be wanted from the target market to make the wireframes the best fit possible. A wireframe fed from information purely from developers given a description would likely be ignorant of the customers needs/wants and could lead to costly redesigns.

Considering the wider range of work and information gathering such as interviews and focus groups that might go into making and testing a wireframe reminded me of the much larger business context development takes place within.

Instruction

I appreciated being taught by a working professional who was involved in the community. @Playfulpixel‘s style is a practiced teaching style that is also deliberately informal. UX seems to have emerging best practices and methodologies but like many aspects of development it has few traditional ‘constraints’ such as licensing or respected certifications.

Importance of primary sources, less-rigorous secondary processing?

In the class there was an emphasis on quality interviewing practices such as avoiding asking suggestive questions. These practices were stated to ultimately lower the quality of your UX work product which is itself a consideration of how users would experience some product.

However, at the same time there was an emphasis on getting quality primary source information the standard changes quickly when you get to secondary stages of processing the information, where UX specific processes and ideas are applied. You might say it is more of an art made from science.

One questionable concept - which the instructor was convincingly critical of - are “Personas“ that are prone to not being validated correctly. Personas are apparently commonly used and considered useful as they can more easily ‘interface’ with the discipline of marketing.

I can certainly see how concepts such as a ‘corporeal’ person or ‘spirit consumer’ or ‘spirit animal’ (maybe the product is for pets…) could take on a life of their own and not actually add much value to a UX process… as well as be open for lampooning.

Scope: Material on Slideshare

Our class had to work at pace to get through all of the material contained on by the end of the class which we did by skipping making a persona ourself. I can see that it would be difficult to plan content for a one day bootcamp and accurately depict how much work could go into an item of UX work which could span months or years and to study a potentially global market.

I can also see how this course could seem “breezy” who doesn’t see it against the bigger picture of UX. Elements of exercises such as using post-it notes to record points that come up from interviews could seem cheesy and relaxed as opposed to something more “hard” or “technical” like coding or measuring metrics from digital based user interviews/tests.

However, I can see this attitude misses the point that significant and valuable information is still derived from potential customers who have conflicting and sometimes irrational concerns and thoughts. A relaxed and cheesy environment arguably allows a focus on similar drives for food, drink, the restroom and to sleep among the many other lower common denominators that ultimately guide many of our experiences and purchasing decisions. UX seems to seek to really capture that value.

The instructor pointed out in some jobs the work that goes into UX projects including empathy maps, personas and wireframes can take months and years. That various businesses seem to consider these processes valuable enough to justify such investment could also seem to speak for itself.

Groceries….

Grocery shopping was chosen as an example of a more common denominator example applicable for a ‘all-comers’ classroom setting to try some UX Design for the bootcamp. My result wireframed an app based around notes from interviews the class conducted:

The ‘insights’ I took from notes following interviews conducted by our tables were very roughly:

  • Everyone has a level of frustration with grocery shopping (including traffic, parking, putting shopping carts away, lack of shopping carts, selection).
  • Majority of people still prefer in-store shopping for various reasons than moving to online grocery delivery
  • Consumers tend to be loyal to stores for a variety of reasons but do not seem to take much concern about particular loyalty schemes such as coupons or cards

My wireframe attempts to depict a “Shopping List 2.0” aimed at this type of user that still grocery shops in-store with loyalty to a particular store. This app will intend to reduce the frustration felt by this user by making planning a shopping trip more enjoyable to enhance this store-loyalty.

The wireframed app includes:

  • Dynamic shopping cart animations when items are added by swiping grocery items down from a scrolling drop-down menu using material design principles
  • Minimum three dynamically updated elements including:
    • A price sub total for items put into the cart
    • An indicator as to the actual size and weight of the basket of items
    • An updated ‘loyalty’ counter indicating the current and potential loyalty savings if this order of items is purchased.

The rationale behind this app is that it to an extent aims to glamorize (or gamify) the simple task of making a shopping list that in-store shoppers typically rely on. It allows the user to get more dynamically updated information in the process with live prices from the store (lets keep this hypothetical heh… my development knowledge is enough now I know this isn’t so easy as it sounds).

I envision potential for targeted loyalty scheme offers via the app, redeemable in person, but only triggered by certain targeted conditions such as composition of the shopping cart or location of the user.

Very Junior Developer thoughts:

On a first gut through, I would consider a lot of what I am describing above being very possible with Angular JS and access to a clean, easy to use API of grocery store data. Nothing stands out as infeasible.

The idea of a digitized, updated ‘shopping list meets shopping cart’ but that does not handle online orders or credit cards or other things makes things a whole lot simpler.

I would consider Materialize CSS or another material design based framework to the buttons and elements of the page to give a punch and pull feel to the animation of items being added and removed from the shopping cart.

Final thoughts

9/10 Good one day course, made me think/has some good general takeways, was still a little bit rushed

Link to copy of slides presented at Bootcamp