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

"Everything in excess is opposed to nature"

Well interwebs, it has been quite a while since my last post. I’ve been busy, trying to keep my head straight and figure out what this post would be about. Through that thought process arose one winner, and one sort-of obligatory half winner. First I plan on talking about excess, and how I’ve been trying to reign in my excess. Don’t worry I’m not trying to get overly preachy or anything along those lines, I’ve just been doing a lot of thinking lately about what it means to consume and the implications it has on our society, health, and mental well-being. Secondly, I’ll sum up what I’ve been doing lately with work and life, this was the half winner so don’t expect it to be too informative. Credit to the quote in my title goes to Hippocrates.


Recently I read Born to Run which was recommended to me by a friend and co-worker of mine. To sum it up, the book is awesome. I enjoyed every part of it, and myself being not much of a runner (trying to get better) found it really inspirational. The kind of thing you want people close to you to read. I really feel that it changed my outlook on a lot of things. One of the main takeaways I found from the book was the thought of “less is more,” this is definitely not a new idea, but for me I’ve never really thought about how this could change me. I guess what it taught me was that you really don’t need what you think you need to do great things. You may think to be really good at math or that you have to have the best calculator money can buy, or before you decide to eat correctly and exercise more you go buy books and exercise equipment, and health videos, etc. I know I personally have done both those things.
I found myself trying to tie this advice into my life, and decided that the word “Excess” fit appropriately. According to Merriam Webster dictionary, “Excess” is defined as “The state or an instance of surpassing usual, proper, or specified limits.” This brings up all kinds of ideas of what is “proper” or “specified limits.” I have the internal struggle though, who am I to tell other people what they are doing wrong with their amount of excess? I mean, I have all sorts of unnecessary things in my life, electronics, alcohol, dining, personal indulgences, etc. Even while writing this post I found examples of things I currently do that I need to reign in the excess. I think the best way to illustrate my point is to give some concrete examples, and try to explain where I think the logic is flawed (from my perspective of course).


This is a hot example, because most people get offended when I talk shit about Costco. Growing up we shopped there quite a bit (Price Club back then), and I always was amazed by the aisles of large quantities of things, and of course the samples. What would anyone want to do with a mega pack of dish soap, or bathroom tissue, or 10lb brick of cheese, etc? I mean, I do dishes just like the next guy (probably not as often), eat cheese, use bathroom tissue. Granted I just live by myself and only have to take care of myself (and my cat). I still think though, whats the point of buying the excess soap? The bricks of cheese to get ready to freeze? To save a couple of pennies? I totally understand the urge to be frugal and spend money wisely, but I think that sometimes its unnecessary, and the costs to society and your own well-being outweigh the benefits to your pocket-book.
Now to be clear, I’m not talking about buying local, or organic, or any number of other issues, even though I agree with some of these, but that’s not the point. The point is that sometimes it is healthy to want, and not receive. I believe this gives you some discipline that you wouldn’t have otherwise. In our society, discipline is hard to come by, we get everything we want if we have the means to get it (most of middle class does). If we get everything we want then where are the surprises? Where is the discipline. All I’m trying to say here is that certain things are unnecessary. I’ll leave the decision on what that is in your life up to you. For me, I could drink less beer, I could use less electricity, I could get rid of about half my wardrobe, and I could get rid of most of my gadgets.


The thought of eating till I need to unbutton that top one (I know you know what I’m talking about), really got me thinking (as I was unbuttoning my top button). Why was I doing this? What is the purpose of this excess? Does eating till I explode really benefit me? To answer them, I drew from some advice from my doctor. About a year ago I asked him what the most effective way to lose weight and become healthy was, he told me (to no big surprise), diet and exercise. My initial thought were something along the lines of “Hey thanks asshole, I just want an easy solution.” So further pursuing the question with him I asked, “Well, what is the best diet,” and I was prepared for the worst (he’s a vegan after all) but all he said was that we as a society have forgotten what it is like to be hungry. I didn’t really think about this much until I found similar advice given by a running coach in the book Born to Run. His advice to people looking to train and get fit, “Eat like a poor person.” Now this really got me thinking, we live in one of the wealthiest nations, and we can feed our faces with such ease, that we have forgotten what it is like to be hungry. Like I said before, we have access to Costco, Wal-Mart, Amazon, just to name a few.
What will eating like a poor person do? Will it cause you to start buying more soda and less milk? Will it cause you to eat more processed foods and less healthier more expensive foods? Probably, but the point is not what your eating, its how much your eating. Stretching your meals out, eating slower, and not taking seconds in favor of eating leftovers another day are all ways to save money without eating less expensive and generally crappier food. Food should be a fully immersive experience whether you are at a restaurant, or just home cooking a meal with the ones you love. Taking your time will make you pause and take all this into account. “Eat like a poor person,” and “Sometimes I just need to be hungry,” seems like sound advice to me and I’m going to try to integrate these into my life.


All in all consuming less, eating less, and eliminating excess seems like sound advice to me. If you stuck with me till here then we’ve only broken the ice, I want to hear what YOU think. Am I totally off base about excess? Are there times in life where we can benefit from excess? Surely there are counter examples to what I’ve talked about, consider a Titanic with 20% more lifeboats than necessary. Obviously that kind of excess would indeed be a good thing, so now that I’ve got the low hanging fruit, it will be up to readers of this post to let me know how much shit I’m full of. Until then, enjoy eating less, consuming less, and trying to reduce your overall impact.
Like I said in the beginning, my last topic is my current life situation for those interested. I’m currently very happy with my new work, doing things that I feel make a difference has really re-ignited my passion that I found while still attending school last year. Working with people who have shared interests, and similar world views has been huge as well. I love where I’m at, love the people there, and most of all have the excitement I felt while still attending school and cracking that hard to solve homework puzzle. Boise has been beautiful, and my recent bout with almost leaving really made me reflect on what Boise has to offer. Not only does it contain some of my favorite people in the world, the weather is awesome, the city is clean, and the taps are always full. What is my next life goal? Who knows, maybe becoming a better person, trying to run more certainly, spending times with friends/family. These are all worthy goals, and I can’t wait for what the beautiful Spring and Summer will be like. I’ll hopefully be blogging more often, now that I have a sort of direction I want to take this blog. Stay tuned.

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 🙂