Treefort 2016 App Retrospective

In the past I have blogged about the Treefort 2015 Lineometer, well the Lineometer got such great reviews that I felt inspired, I felt like we could do more. So shortly after Treefort 2015, a group of friends and I reached out to the people who were working on the app last year and asked if they wanted some help. They graciously accepted and furthermore, gave us full control of the app!
Based on feedback from users and Treefort stakeholders, this years app (v.4.0.0 – v4.4.0 in the App Store and on Google Play) has been a great success! We haven’t been without our bugs (see What Went Poorly).

What Went Well?

From the get go all the people who helped with this project gave it their all, everyone brought their best skills to the table and we really made some great software.


Matt worked his ass off on the client portion of scheduling and I worked a bit on the back end storage/sync functionality. We ended up writing a NodeJS script that requests data from Google Drive (managed by Treefort HQ) and transforms it into what the app expects for an event stream. We run this update whenever data changes and it is still a manual process due to the sensitive nature of the event data.


Daniel was the lead for this feature and he really kicked it out of the park. We started out with a handful of static playlists that we hard coded into the client app and quickly realized the potential we had by moving the playlists into the back end. Daniel and I started by moving the same hard coded playlists we had on the client into the back end.
After we informed Treefort HQ of the potential we had here, they grabbed onto the idea and started supplying us with curated playlists! Long story short, they curate the playlists, we run a script, and push playlists to all our client apps whenever we want.
To top it all off, just a month before Treefort Daniel finished coding up an entire custom playlist feature! Now users can create and manage their very own Treefort playlists; so badass.

  • Audio Streaming
  • Lineometer/Lineomaster
  • Volunteerism/SCRUM/Trello
  • Favorites

What Went Poorly?

  • Push Notifications
  • Losing LocalStorage

Technology Stack


The previous version of the application (developed by Phil Merrell) was written with Ionic and PhoneGap if I remember correctly. Even though we were starting from scratch with version 4.x.x, we decided to use Apache Cordova and Ionic because of the distinct benefits writing code once and building to separate platforms offered us. For a small team, with limited time and plenty of web dev skill, Cordova and Ionic was definitely the way to go.
Special thanks to Blake for all his hard work getting us setup in a new framework and providing us with the technical guidance through this phase of our design.

  • Apache Cordova provides cross platform functionality allowing us to write code once and compile to different targets (iOS and Android currently)
  • Ionic Framework is the front end SDK we use to customize the look and feel of our app, Ionic also provides some of the advanced functionality through (e.g., User Management, Push Notifications)
  • AngularJS and ngCordova, to build our client side MVC code
  • GitHub + CircleCI to automate build/test/deploy cycles. Since a Cordova app is really just a static website, deploying with CircleCI to an AWS S3 bucket makes smoke testing new builds a breeze.


Early on in our process we found out that we would need more flexibility with our back end data provider than what was available from the Azure site that drives the main Treefort Music Fest website’s data. Near the end of 2015, Wade led the charge on setting up our Elastic Beanstalk and NodeJS solution and we have run with this infrastructure configuration ever since.
Splitting off our own back end solution and proxying certain calls back to Azure was easy and provided a clean way for us to valmorphorize our data. It also allowed us to write some custom functionality in our middle tier that isn’t required by the website (e.g., Lineometer, Playlists). Additionally, we can cache and scale at different rates than the website as our traffic patterns are different.

Next Year?

Shareable Schedule, Shareable Playlists, ideas?

Treefort 2015 Lineometer Retrospective

Well, we are now four days post-festival and we’re still basking in the awesomeness that was Treefort Music Fest 2015. After going over our numbers for the Treefort Lineometer, I gotta say I’m impressed. Every single person who contributed to this project is seriously a rockstar. We were featured as one of the best parts of the festival by David Greenwald at The Oregonian in his article 26 things we learned at the 2015 Treefort Music FestCheck it out:

3. Having a line-checking app to tell you about Thursday’s biggest line is the smartest festival technology ever.

That’s right folks, smartest festival technology ever.
We were also mentioned by Michael Deeds at the Idaho Statesman in Smile. Treefort has that effect on everyone.

Remember when Treefort debuted with what seemed like an insanely large number of bands? 130 or so? This year’s 430 makes that seem like a backyard keg party. And the waits outside certain venues were longer on opening night than they’ve been in past years. The Treefort app’s live “venue tracker” accurately reported the line at Neurolux as “entire population of Boise” on Wednesday night.

Our @treefortlines twitter gained 85 followers in 5 days and will surely grow over time. Wade led the social media push throughout the festival and created a ton of engagement by doing so. Before I get into all the details and statistics, I just wanna say thanks again to all the people who worked on this project. None of this could have happened without them. If you don’t already, FOLLOW THESE GUYS. They are doing (and will continue to do) great things in their careers, and are major influencers in the software scene in Boise. Here are links to their twitter profiles:

Usage Report

I’ve linked the Google Analytics PDF reports below, but here is a brief summary. The official Treefort app (into which the venue tracker was embedded) was released on 03/20/15 and the festival ended on 03/29/15. This is our date range for all the metrics listed here and linked in the reports.

  • 10,602 Pageviews: Translates directly into the number of hits our web server got from managers and users.
  • 1,957 Users: Largely calculated via Google’s pre-cached user data and cookies on our user’s devices.
  • 5,937 Sessions: Translates into usage within a 30-minute window or before midnight (if you use at 11:45pm for example). Google does recommend using shorter sessions for sites with fewer pages (ours has three).
  • 1.79 Pages / Session: This is sort of interesting because it shows that quite a few of the people who were using the venue tracker found it useful enough to check again within 30 minutes. A hypothesis of mine is that these people were using the venue tracker to navigate around downtown. Twitter traffic around @treefortlines seems to suggest this as well.

Here is a chart of hourly pageviews. It is really cool to see the nightly usage!
Here is a bar chart of our users by browser. As you can see, most Treeforters use iPhones; but Android certainly made a good showing.
I also found this map of sessions by city kinda cool. Sorry foreign visitors—you only account for 1.03% of sessions.

PDF Report: Analytics All Web Site Data Overview 20150320-20150329

Last Minute Updates

Based on interviews with several venue managers and festival attendees on the first few nights, we decided that the addition of an “At Capacity” status would be useful. Before adding this feature, many venues that were packed inside would show a “Sea of Humanity” or “Entire Population of Boise” line status when their lines actually had only five or so people in them. Now, when the venue is “At Capacity,” the line will only shrink if people leave the venue, giving a more accurate reading and helping festival attendees make the right venue choice (and thus make the most of their night). After a quick mock-up, Wade came to the rescue and added this feature before Hackfort, which we all attended. On the left is the manager screen and next to it, the visitor. Props to Wade again for cranking this out and adding this last-minute value.

Next Year

I’m speaking for the team who built this app when I say that I know we would all love to do something like this again next year. I’m looking at you, Treefort! ;). This was one of the most rewarding software development experiences I personally have had and I’m incredibly grateful to the team. A message to everyone who used The Lineometer, built The Lineometer, and updated The Lineometer…

Treefort 2015 Lineometer

Well folks, I’m writing this year just before Treefort Music Fest ’15 to announce the project that some of my righteous coworkers and I helped create…the Treefort Lineometer! Because I didn’t have much to do with the technical side of the app this year, I’ll just give an overview of the features, the major technologies we used, and award some kudos to all the hardworking developers that helped out with this project.

Team Members

All of these guys worked their asses off for this feature; I was mostly a pencil pusher and project manager. But I DID check in code…once. 😉

  • Phil Merrell: Original Treefort app creator and our special liaison to Treefort people.
  • Daniel Ryan: Badass developer who made the most excellent loading icon (with D3), general client side development, manager app, and visitor app.
  • Alberto Ruis: Badass developer in charge of syncing Treefort schedules with our backend, general client side dev, manager app, and visitor app.
  • Wade Dorrell: Main venue tracker designer and code ninja. Special thanks to this guy for making usability #1.
  • Blake Dietz: Back-end ninja, front-end ninja, authentication and security ninja, and all around badass developer.

NOTE: They all did much more than what I’ve mentioned next to their names; this is just a brief summary. Special thanks to Drew Lorona and Eric Gilbert at Treefort Music Fest for facilitating this app!


After Treefort 2014, I met with Phil Merrell and some other prospective developers for beers and to brainstorm about what technological improvements we could make for this year’s festival. We came up with some great ideas and let them simmer until I got back in touch with Phil this January. We immediately got the ball rolling on what we thought would add the most value for the least amount of work (borrowing from the 20/80 Pareto principle commonly referenced in SCRUM). That project would eventually become The Treefort Lineometer, and with Phil’s help, it would be embedded as a tab in the Sencha touch app he built for Treefort!


  • Real-time venue updates: When a manager changes the “currently playing” or line status, all the clients get updated in real-time. This is accomplished using Firebase and Angular Fire.
  • Security: Manager app authentication; only people with the code can update the venues. This is accomplished using NodeJS.
  • Last updated: When looking at the venue update, is the update even relevant? Intelligent text highlighting gives visual cues.
  • Lineometer!: How long is the line?! Should visitors even bother making the trek from their current party?
  • Free text + filtered lists of artists in the manager screen: Choose from the 20 artists who could be playing at this venue vs. a list of 300+. Impromptu show? Use the free text field and all the clients will get updated in the same way.
  • Intelligent wrist band visuals: Depending on the day of the festival and the venue being managed, the manager app will show the valid list of wrist bands.

Major Technologies

  • Firebase for our real-time venue tracking back-end
  • AngularJS and Angular Fire for our front end web app
  • Heroku for static file hosting
  • NodeJS for authentication logic
  • Github for collaboration, feature tracking, and workflow management


With help from Phil and the people at Treefort, we were lucky enough to get our Venue Tracker in the Treefort Music Fest iOS and Android apps. The Sencha touch framework that Phil used made integration relatively easy; more or less we get a web view inside the app to do what we want with!


For our team, some notable obstacles were:

  • Limited funding, and thus limited connections on our Firebase plan. Thanks to Treefort for coming up with some cash to help us!
  • Limited time. Since we are all full time developers at WhiteCloud Analytics, our day jobs and families had to take priority. This is why everyone who worked on this project is such a badass, donating their time and skills for this.
  • Limited understanding of users. This seems like it is always a problem with software projects, but we went through several iterations of a line visualization until we got one that we thought would make sense to the most people. After interviewing our significant others and coworkers, our current design (the one with badges) was the most easily understood.


Download the Treefort Music Fest app and use it at the festival! Get up-to-date information about which venues have the longest lines. If you are a venue manager, don’t hesitate to contact me personally or any of the members of the team. We will be monitoring and providing updates throughout the festival on our Treefortlines twitter account, so feel free to contact us there too!



If you liked this, consider reading the retrospective as well

Treefort Musician Map v2.0

First things first, go HERE to see what this post is about. If you are interested in how I did this … keep reading.
Note: Nobody from Treefort Music Fest knows I did this, I just did it for fun.
Last year I made a heatmap to show the geographical layout of all the artists that would be playing at Treefort Music Festival. You can see that post here and the original heatmap here. For v2.0 I had a couple of ideas that I wanted to implement.

  • Search
  • Thumbnail pictures of bands
  • Better layout
  • Auto scrolling to bands location on the map

Continue reading “Treefort Musician Map v2.0”

Increasing max upload size for self-hosted WordPress site

When you compose posts in WordPress and you click the “Add Media” button you are presented with a dialog to drag and drop or browse your file system for a file you want to add. You are presented with this lovely text “Maximum upload file size: 2MB.” WTF man, awesome.gif is 5.1MB, and I don’t want to shrink it to size (loss of awesomeness obvs.)
With help from this post I found out that WordPress uses the minimum of post_max_size and upload_max_filesize in php.ini to figure out this max size. Since I’m hosting my own blog now I couldn’t care less what the size is as long as my server can handle it relatively easily. I don’t want to be bound by these restrictions!
Long story short, I changed upload_max_filesize and post_max_size to be 8MB each. This allows a full resolution upload of awesome.gif.
Screen Shot 2014-01-25 at 10.32.01 AM
PS. I had to “Restart All Services” on my WAMP server, I suspect only apache would need to be restarted to reload php.ini. Maybe it would auto-reload after a while, IDK just restart it already.

Treefort Musician Map

For those of you who know me, I enjoy a lot of things with computers, new technology, libraries, and fun projects. My initial idea for a heat map came to me while on a MTB ride and I thought it would be really cool to map the activity levels of different Strava athletes around the country to see who is more active (or logs on to Strava more regularly). I researched the API given to developers and it limited me to only people I follow, so I took a different route. I decided to map the concentration of musicians playing at a local music festival called Treefort. The data acquisition of this was way more manual than I expected, I pretty much just downloaded the HTML content of the Artists page and did some searching / regex replacements to find a list of musicians and the city they were based in. I made a set of the different cities they lived in and (unfortunately) looked up the Latitude and Longitude on Google. YES YES YES I realize I could have done this with a script, but in all it only took about an hour and I probably could have written a sufficient script in around the same amount of time. One thing to note is that two bands listed their city as “Earth” … so cosmic man [stoner voice], they are now located at Lat 0, Long 0 in the Gulf of Guinea. Nonetheless I did it manually, then I wrote the file treefort-markers.js with an Excel spreadsheet and the concat() function. Lastly wrote us the HTML, CSS, and JS (thanks to underscorejs, Google fonts api, and the Google maps api) to wire it together in the main file treefort.html. I opted out of linking all the bands in favor of time and proof of concept (you could always Google their names too). Anyways, check it out and let me know what you think about it in the comments! (ps. make sure you click the markers to get a list of musicians near that map node!)
This project was completed a few months ago but I finally got around to writing this summary. Hope you enjoy it!
Findings: high concentration in the NW, and spread out more globally than I thought 🙂
Screen Shot 2013-06-13 at 9.45.05 AM

A Remedy

So, in accordance with my last post I’m going to be trying to post more and more on here to fill people in on my happenings/thoughts/feelings etc. I would like to remind people that this is my PERSONAL blog, so things are bound to get personal. If this makes you queasy, then this is not the blog to be reading, maybe you should be reading Gizmodo or TechCrunch (some of my favorite tech blogs). With that in mind, I don’t intend on telling the internet my most innermost secrets, but I will talk about my personal life, personal satisfaction, personal goals, etc. So let the games begin!
My last post focused mainly on my dissatisfaction with my current situation and how I wished to contribute more to society. I felt a genuine lack of self fulfillment at my previous job and was trying to find a way to remedy, unfortunately most people who read that post thought I was a depressed, self-loathing piece of shit that was on the verge of suicide or something. I got comments that ranged from “I had no idea you were so depressed … is everything OK?” to “Why don’t you just join the Peace Corps.” despite my friends genuine concern (I truly appreciate my friends who read this and care about me), both responses were thoroughly unsatisfying to me. For gods sake, I don’t want to go join the Peace Corps. and I’m definitely not on the verge of depression. Relax people, sometimes a guys just gotta vent.
I’m glad to report that I have done something about this dissatisfaction. Over the last month I have been seeking employment elsewhere, I interviewed with Garmin Inc. in Olathe, KS and in Salem, OR. I also interviewed with a new start-up (WhiteCloud Analytics) in my current home town Boise, ID. (I say Boise is my home town since I have spent equal parts of my life here and my previous home town Escondido, CA) which would turn out to be the new job I took. I am glad to report that I am so very excited to start work there on Sept. 12th. The thing that really attracted me to the start-up over Garmin was everyone’s attitude, the engineers reminded me why I wanted to be a software engineer, they reminded me what I love so much about my discipline, and they seemed to empathize with my situation. The atmosphere was so remarkably different from what I’ve been working in for the last year and a half. There aren’t fellow engineers in the hall who don’t acknowledge you. There is no insistent complaining if an engineer doesn’t get their way (I swear engineers can be huge divas). They work hard, but they play hard. They take a genuine self-interest in the product they are working on. There is no disconnect, no us vs. them.
So I’m not really sure what I’m getting at with this post, but I just wanted to give a bit of a breather for those who thought I was depressed, and let you all know that I’m on the verge of finding a remedy. Maybe this start-up wont be all that I hope it will be, but maybe it will, and that’s the most exciting part. That I don’t know the future there, at my old job, predictability was key. As a 23-year-old software engineer and simpleton, predictability is the last thing on my list.


Well inter-webs, its been nearly a year. The site has undergone some updates to its look and feel, but the content remains the same, some outdated cancer posts, some random CS rants, etc.. This lack of content is one of the reasons for this post, to keep something new, to refresh this blog with a new invigorated sense of self. Much like myself, the blog needs some direction. Recently graduating from Boise State University has been an interesting journey, to say the least. Forgive the inner monologue of this post, I’ve been doing a lot of reflection lately.
The recent weeks have been a sort-of emotional roller coaster, do I stay safe, stay in my hometown (Boise, ID), do I choose the path to a nice house, nice yard, middle-class income, working 9-5 for the stockholders? Or do I devote my life to something more? Higher education? Social Good? Volunteer work? What can people with my degree (Computer Science) do that is socially good? This has really got me thinking about where I should take my career.
One of the great parts of Computer Science is ability to find a job most anywhere, in most any industry. Everyone needs a back-end software developer, everyone needs a website author, in this ever-increasing age of online “identity” people are struggling to make something of themselves in the real and digital worlds, creating a unified identity.
So enough with the boring stuff, there are a few recent projects which have peaked my attention through other blogs and social networks. Code For America has really peaked my interest and I am currently considering delving into these social good types of jobs. I just don’t know how long I can work for the stockholders? If I pursue a career for another Fortune 500 will this increase my overall happiness? What will make me happy? This lack of happiness has been prevalent over everything I do, I need to find my calling, what have I been chosen to do? How can I, individually, make the world a better place for each and every person? Do I educate myself more? Do I gain real-world experience and amass meaningless sums of cash? Clearly there has to be more to life, there has to be something that I can do that will fulfill my desires. So I’m reaching out to you online world, what should I do? What do I devote my life to? What can I do that is socially good?

Post 00 – Code Blog

Well I just turned in a 10 Micro-controller comparison report for my ECE 433 class and I decided to write a short little blog post here to start my Operating Systems blog. I will make a category for all my Operating Systems blog posts that way they will comprise a sort of diary for that class.
Today I got my grade back for the first easy project, a doubly linked list in C, but to no avail my program didn’t impress anyone, producing a dreaded segmentation fault with lists of size 1. This was a bit of a setback since the only thing I have left in my shell project is to integrate the list to keep track of jobs. That is ok though, its all a learning experience right…
Anyways, my classes are hammering me hard right now, no time for fun, no time for work. I feel like the only thing I can do right now is write code. Which…isn’t always top of my priority list.
It will all be worth it, it will be all worth it, it will be all worth it. This is going to be my mantra, because if anything the last 2-3 weeks have taught me is that no matter how clever or smart I am, there is always someone cleverer(sp?).
Another thing that I have noted is that it is so simple to write a computer program, but it is indeed something beautiful when you have a program so complex as an Operating System, or major project, that works flawlessly (or as close as possible), so that people who aren’t even the slightest bit concerned with what a bit or byte is can use it and take pleasure in it. Seeing my non-geek friends (as Dr. Jain says) enjoy their computers makes it seem so meaningless. At the same time so important. Someones gotta do it 🙂

Senior Year : First Impressions

Hello all faithful readers out there in cyberspace. I decided to update this little blog of mine since;

  1. It has been a while.
  2. I just finished my first two weeks of my Senior Year at BSU.
  3. I thought I would like to tell you all how my classes are going, and what kinds of topics you can expect I’ll be filling my mind with over the next few months.

As far as my Fall schedule goes, I’m currently taking 5 classes;

MATH 361 – Probability and Statistics, description from BSU Catalog

Calculus-based treatment of probability theory, random variables, distributions, conditional probability, central limit theorem, descriptive statistics, estimation, tests of hypotheses, and regression. Differs from MATH 360 by providing more thorough coverage of theoretical foundations and wider variety of applications drawn from natural and social sciences as well as engineering.

CS 354 – Programming Languages, description from BSU Catalog

Principles of programming languages: design, syntax, semantics, information binding, strings, arithmetic, input/output, recursion and extensibility.

CS 453 – Operating Systems, description from BSU Catalog

Process management, concurrency, inter-process communication, synchronization, scheduling, memory management, file systems and security. Case studies of multiple operating systems.

CS 497 – Embedded and Portable Computing, description from BSU Catalog

Comparison of commercially available microcontroller and their use in embedded communications and control applications. Power consumption, software development, interprocessor communication, and interfacing with sensors, actuators, and input/output devices. Use of microcontroller cores implemented in programmable logic devices as an alternative to hardwired microcontrollers. An embedded system project is designed and built.

CS 471 – Software Engineering, description from BSU Catalog

A formal study of the software development process. Topics include: life cycle models, requirements definition, specification, design, implementation, validation, verification, maintenance, and reuse. Students work in small teams on significant projects.

So this is about it, as far as classwork goes. I have been coding a bunch, working on understanding all the topics, reading, and trying to keep my head up. I will have much more informative and detailed analysis as I go further through this semester. So stay tuned!