Skip to content

Instantly share code, notes, and snippets.


timlevett/ Secret

Last active Feb 18, 2017
What would you like to do?
This is my blogs data, may be interesting, config.js is the main thing that needs to be valid json

This is just a placeholder so I can easily find the data.

Saying good bye to a car is like saying goodbye to an old friend. Yesterday I traded in my much loved 2008 Subaru WRX (WR blue) for a 2013 BMW 335i xDrive with m-sport package (Estoril blue). First the old car. When I got the Subi she was lightly used. A used no mod 2008 WRX which is pretty much unheard of. I drove it happily for 5 years. Pretty long time. It was now 8 years old, and creeping up on some serious repair bills (suspension, timing belt, paint work, etc...). I also was outgrowing the car. The car was fun, but as a daily it wasn't the most fun to drive. The clutch was really heavy, it was rough at slow speeds, and the gas milage was laughable. It was a great weekend ride, carving through country roads, it shined. She was a fun car, but it was time to move on.

Now for the best part, the search. I started perusing cars lightly last winter. When spring came I debated a while if I wanted a new car, or a "new to me" car. I decided to wait, as I didn't need a new car, but I still felt my car wasn't very me anymore. I loved the Subaru community, nothing else like it. However, I looked at the new WRX/STI and it seemed to be more of the same. Targeted at people in their twenties with some money. So turned else where. First I went to look at the Audi S3, however after looking at the back seat I quickly realized that this wouldn't do if we were to have children. It was actually super small, kind of dull, and wasn't as exciting as I first thought. I then went across the street to the BMW dealer. My buddy Ben got a BMW a couple years back and has really enjoyed it. I have always loved the look of them and heard they are a dream to drive. As we strolled the lot one of the dealers helped me out and then I test drove a 340i xDrive w/ the m-sport package. I liked it a lot, but really didn't like the $60k price tag. I walked away, and left it be for a bit.

A couple months past and I continued on with the Subi. Then out of no where I got the bug again. I considered the financials, and decided I wanted to get a car coming off of a lease. I found a 3 year old car with pretty low miles. She was blue, she was AWD, m-sport, tech package, leather, auto, etc... Perrrrfect. I went and test drove her. She purrred sweet but had some blemishes. I negotiated a discount that was very palatable and decide to go for it. Just like that, new car. I honestly couldn't be happier. The new ride is so fun to drive, and amazing for just cruising around, which I love. The day to day is fun, the weekend country carving is fantastic. I have some minor upgrades planed for now, but nothing to crazy. Its still under warranty so I don't want to do anything that would void that. Really going from 230HP to 302HP is good enough for now :).


On another note, happy fathers day Dad! Thanks for introducing me to sporty cars and showing me how to drive a stick. One of my greatest memories was him showing me how to drive my second car. He was so patient and was really helpful when we were just cruising around the parking lot figuring out that whole first gear thing. Another great memory that I have with dad is when we went to the Grand Rapids Grand Prix and watched some cars scream through the streets. That was really fun and gave me this racing bug that I have now. Love you Dad!

Happy fathers day to all the fathers out there.

So there I was, fresh off the boat, looking for adventure! A noob level 7 in the island of Ark. I was small time, just starting out. I found a nice little place down by the water, about 2 clicks from the giant thing in the middle of the island they called "The Ark". I think. I've only encountered one other on the island. He said hello, I looked at him not knowing how to chat, and then he said "okay... have a good one." So I built up a thatch hut, it wasn't much, but I could call it home. I built storage, a porch, and a fire pit out front. All was starting off well. I decided to call it a night in my hut. Door shut and locked. Good night.

The interesting thing about this survival game is its persistent. So when you leave the game your character is just sleeping wherever you were last. So keeping that in mind we jump back in the next day.

I woke up to find the worst case scenario. I'm not comfortably laying in my hut, I'm... in a cage... I quickly opened up my inventory, its empty, I'VE BEEN ROBBED, KIDNAPPED, HELP! I posted for help in the chat. Who is holding me?!? Why?!! I noticed my surroundings, I was about a stones throw (exact measurements) away from my hut. I even recall this fortress in my past wonderings. I tried to punch my way through the wooden cage, no luck. I began to starve, shiver, thirst, and finally... I died.

I respawned about a 3 minute run away. I got back to my hut to find the door had been broken down and the door frame was damaged. My case of inventory was missing, fire supply gone. Raged with anger I geared up for a day. Collecting the materials for spears, hatches, and torches. These suckers are going to pay! After a day of gathering and a night of crafting I was "ready" for war.

I made my way down to the prison I was held captive to find no one awake. They were level 75s. I am level 7. I mean, come on people... I digress. So I started hacking away at there stone fortress with wood door with little to no luck. I didn't even make a dent and I went through two pick axes. Ugh... Turns out stone is built like a rock (see what I did there?). After 20 minutes of trying to find a weakness I gave up.

Ego bruised I went back to the hut, broken, sad, but mostly confused. I decided I needed to move away from these people. I prepared for my departure. When all of a sudden there were 4 people of the tribe Eclipse hovering over the prison. Who were they? Are they the kidnappers? A couple of them approached. Not knowing what to do I took out my spear in defense. I poked one of the pterodactyls. They laughed and killed me with something. They were level 74. Again, ugh. I realized I may have been in the wrong there. I immediately got defensive.

After waiting for a respawn, I ran back to the location. They were still there. I went up to them, said sorry. Had a bit of a chat with them. They were saving the prisoners. HA! Opps. They accepted my apologies, then said sorry about the hut. I looked, it was completely gone! They destroyed it because they thought I was with the slavers. They felt really bad, so they took me to a place where I would be safe away from the slavers, by the claws of a pterodactyl by the way. They had even set me up with a stone 2 x 2 house equip with big storage units and a bed! After a bit of chatter with the tribe they left me to it. I started rebuilding my collection of goods and then called it a night. I double checked 4 times before logging off to make sure I had locked the door. Who knows what will happen next time I log in...

Written with StackEdit.

Breakfast is my favorite time of the day. I always like trying to make new fun things, so here is a simple recipe for making breakfast tacos:

(yields : 2 breakfast tacos)


  • 2 soft corn tortillas
  • 2 eggs
  • 1 tbsp of milk
  • 4 slices of canadian bacon, about 2 inches in diameter
  • 1 handful of kale, chopped
  • salt + pepper
  • Salsa
  • Cheddar Cheese, shredded


In a skillet melt some gee (or butter, or EVOO, something that makes the eggs not stick), over medium heat add in the canadian bacon. Heat until light brown on both sides, set aside. In the same pan (don't throw away the grease) add in the kale, cook until soft. While that is happening whisk together the eggs, milk, salt and pepper. Once the kale is soft, add in the egg mixture. Cook until almost solidified, then toss in an appropriate amount of cheese. Let the cheese melt, then set aside with bacon. In the same pan, heat up the corn tortillas. Heat until soft and flexible.

Finally assembly. I recommend getting some taco holders. Put tortilla in shell, then c-bacon, then the egg mix, then salsa.


Should look something like this.



Hey guys, this was kind of a new type of post for me. What did you think? Click the feedback form in the menu, Retweet, like, whatever, let me know if you would like to see more posts like this. Thanks!

Woh, what a weekend in Chicago. We drove in Saturday morning and went to the Shedd Aquarium right away. That place is so amazing. Took our time walking through every exibit. Even went to the shows and 4D experience. I think I enjoyed the Carribean Reef the most. It was so peaceful. I could literally just sit there for hours and watch the fish. It made me want to build another fish tank. Maybe this summer, what do you think Cassi?

After the amazing experience of the Shedd, we headed to our hotel. We decided to stay at The Drake Hotel. The only reason being it was the key clue in Mission: Impossible in discovering who the bad agent was. It was an amazing hotel. They goofed on us getting in our room when we checked in so they gave us access to the executive lounge. Super fancy.

The next day Cassi had an all day class so that left me to whatever I wanted to do. I planned on meeting up with some friends for lunch, but between that I had no plans. I headed out down Michigan Ave. Found an amazing church, went in to take some pictures, decided to stay for mass.

After that I wondered down to the Navy Pier. Its super touristy, but nice sites. After writing most of this out I decided to make a vlog about our trip with the GoPro Footage. So here ya go, enjoy!

<iframe width="400" height="225" src="" frameborder="0" allowfullscreen></iframe>

video link : photo link :

"id" : 15,
"title" : "Gists as posts",
"date" : "02-28-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["blog update", "gists","tech"]
"id" : 16,
"title" : "Breakfast Tacos",
"date" : "02-28-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["foodie", "recipe"]
"id" : 17,
"title" : "Maven Overlays Architecture",
"date" : "03-09-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["tech", "MyUW","maven","deployment"]
"id" : 18,
"title" : "Tribe of Tim, An Ark Adventure",
"date" : "03-20-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["gaming","ark","TimTim","Sundays"]
"id" : 19,
"title" : "The New F1 Qualifying is not as bad as you think",
"date" : "03-23-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["formula", "f1"]
"id" : 20,
"title" : "Happy Easter 2016",
"date" : "03-27-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["Sunday", "Holiday", "Family"]
"id" : 21,
"title" : "Sunday Funday Vlog",
"date" : "04-03-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["Sunday", "vlog", "first","adventure"]
"id" : 22,
"title" : "How To Make Hangouts OnAir",
"date" : "04-15-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["work","google","howto"]
"id" : 23,
"title" : "Trying Forks Over Knives",
"date" : "04-17-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["diet","foodie"]
"id" : 24,
"title" : "VR Might Die Again",
"date" : "04-18-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["nerd","VR","gaming"]
"id" : 25,
"title" : "Formula 1 Adventure",
"date" : "04-23-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["formula1", "racing","adventure","bucket list"]
"id" : 26,
"title" : "Chicago in May 2016",
"date" : "05-2-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["adventure","vacation","vlog"]
"id" : 27,
"title" : "Whole Foods to Paleo",
"date" : "05-24-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["foodie","diet","life"]
"id" : 28,
"title" : "Google Fi Saves Money",
"date" : "06-09-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["tech","phone","Google","Verizon","Google Fi"]
"id" : 29,
"title" : "I got a New Car",
"date" : "06-09-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["BMW","car","fathers day"]
"id" : 30,
"title" : "Reverting back to Blogger",
"date" : "07-03-2016",
"gistFileName" : "",
"draft" : false,
"tags" : ["deprecated"]
"id" : 31,
"title" : "What is a Docker File",
"date" : "02-13-2017",
"gistFileName" : "",
"draft" : false,
"tags" : ["tech", "docker"]

Happy Easter everyone! It has been a great year so far. Spring has sprung in Madison, maybe. Last week we had quite the cold front that went through that left our cars with a nice inch of ice to scrape off one morning, but other than that it has been pleasant. I recently picked up a long board off of Amazon, random I know. I went with a flexible bamboo deck, decent wheels + trucks and really smooth barrings. It came fully assembled from a skate shop in California. The ride is an interesting feeling. Really close to snowboarding when going down hill. I'm still working on pushing off. Its hard for the other foot to stay centered while kicking. I often found my board drifting one direction or another. Trip 1 I went about 4 miles, with a top speed of 18 MPH!

<script async defer src="//"></script>

Easter is always a fun holiday for me. It always reminds me of candy, church, getting a new pair of shoes, and ham. Not necessarily in that order. Not being able to go see family for all the holidays can be tough, but we are trying to save up a bit for some trips and one day a house. Can't have it all ya know? By the power of modern technology we are going to do a video hangout in a little bit, so we can still hangout. Also, Cassi is still sick and has little energy. We went for to the grocery store for the first time in a couple weeks together and I think she is couch bound for the remainder of the day. She is progressing though, yay! Speaking of the grocery story, there was 25% off candy, we got a bowl worth :) We are starting a new tradition today for Easter. Getting candy, making a nice ham dinner, and relaxing. I'm digging that!

Hope you all have a great day!

The new qualifying format created by the FIA is getting a ton of complaints from everyone. From team owners, drivers, to fans, and myself. At first glance the new format is ridiculous, removes cars from being on track for qualifying, and some cars that should be further up the grid are caught out toward the back. It makes qualifying less exciting, but that may be okay. Stay with me.

So the thing that really matters is the race, and I think we can all agree the race can be a bit of a bore. The new format puts faster cars toward the back. Interesting... So during the race there is more passing, more shuffle, more action. Perfect. In the end the FIA wants it to be entertaining above all else, and the Australian GP was exactly that. If Haas and McLaren were where they should have been we wouldn't have seen the clash we saw. We wouldn't have seen the massive climb of Romain from the back to 6th!

In conclusion, the qualifying is less exciting. Agreed. In other news the race is much more interesting. Lets see what the next race holds as they just announced the same qualifying will be taking place.

Changing a habit is a hard thing to do. They say it takes about 30 days of consistently doing something to start to form a new habit. Today I'm going to start something new. We are going to try the diet suggested by the documentary Forks Over Knives. This was a really well put together documentary and had a lot of good research done by medical doctors backing it up. Full disclosure, we tried to use up all our food that didn't match with the diet this past week but we didn't finish it all. We are not going to throw it away because that is silly. We will use it when we have guests and stuff like that.

We've been wanting to try something lately and this seems like a sustainable diet. I'm not going to go through everything of the diet, I highly recommend watching the show. This is our first week planning our meals with this in mind. So I thought I'd share what we were thinking for our first week.


  • Juice! We love juices and blended morning drinks. Great way to start off your day in a pinch.
  • Overnight oats! You can mix up these to add in any fruit you have. Super tasty.



  • Leftovers, because simplicity
  • Salads! The first farmers market was this week so we got a lot of good stuff for salads.


  • Nuts. Soaked almonds, or pistachios.
  • Dehydrated Banana chips. The perfect pick me up.

So there ya go. What do you all think? I'll probably do an update once we have been doing it for a while. Wish us luck!

Also, give the Forks Over Knives documentary a watch, it's on Netflix.

Written with StackEdit.

The sound of a car giving it everything it has is a magical thing every gearhead loves. What starts as a single engine rev, quickly turns into a roar of many, a brit yelling "lights out and away we go" which is quickly followed up by 44 tires ripping into the pavement, and they're off... Dashing down to the first corner, a tight bend, they wait until the last possible millisecond before slamming on the brakes. Inches at the start become miles down the road. Jumping and weaving they strive for position on the top step of the podium. The cars slither around the corner two or even three cars abreast, wheel to wheel on the edge of the illusion of control. This is the beginning of a Formula one race. Its intense, vicious, expensive as hell, and I love it.

For many years I have enjoyed watching racing of all forms, and about 8 years ago I was introduced to Formula 1. I'm not sure what it is, but it's special. Whether its because Formula one is the pinnacle of auto racing, a world class event, they have a lot of talent (driver, team, and mechanic), the amount of money that is poured into this from the teams, or the passion these people have for the sport. Probably more of a combination of these factors.

So when a good friend posted a link to a package deal to go to both the MotoGP and Formula 1 races in Austin, TX I responded with a "hell yes!". First up was MotoGP. General admission was a great way to explore the track. The first few days were just practice and qualifying, but I think we walked 5 miles each day. Taking it all in. The weather was meh, but that made it great. Since the weather wasn't perfect we had access to club level seats for majority of the weekend. It also made the race more lively.

<iframe width="300" height="169" src="" frameborder="0" allowfullscreen></iframe>

Wonderful weekend. We got to wonder the track a bit, watched the best moto riders in the world do there thing, just awesome.

The next weekend down in Austin was the big event. Formula 1. The town was lit up with Formula 1. Posters, fancy cars, race fans everywhere. I was with my people. We stopped by the downtown shop that had a display of a bunch of Senna's belongings. You could feel the presence of someone great.

It was a really neat experience.

We also got a chance to goto a charity event hosted by the commentators from the F1 broadcast. What a great night that was. Guest appearances from various F1 people. I even got to talk with some of them!

The track was in pristine condition, but the weather was horrible (noticing a pattern here?). The first 3 days (out of 4) were sopping wet at the track. most the events on track were cancelled or delayed. The FIA and the track organizers felt bad on day 3, so they let us loose on the pit lane. Yep, I got to walk a F1 pit lane with cars, drivers, and teams in it. It was a mad dash to see everything, get your selfy, etc...

<iframe width="300" height="169" src="" frameborder="0" allowfullscreen></iframe>

To be among the cars that I watch every race weekend was something else. By far one of the coolest experiences I've ever experienced.

Ferrari!!! #usgp #gridwalk

A photo posted by Tim Levett (@timtim192) on Oct 24, 2015 at 7:13pm PDT

<script async defer src="//"></script>

Super cool gridwalk today

A photo posted by Tim Levett (@timtim192) on Oct 24, 2015 at 7:04pm PDT

<script async defer src="//"></script>

I talked briefly with 2 F1 drivers, pretty epic. What an awesome weekend, and the race hasn't even begun yet.

They cancelled qualifying on Saturday, something that doesn't happen that often. Sunday rolls around and they are going to do qualifying first thing. It was wet, like really wet. Hydroplaning was a common thing, which isn't good. We watched from turn 11. Even saw a couple cars spin around!

<iframe width="300" height="169" src="" frameborder="0" allowfullscreen></iframe>

The race was fantastic! We had a jumbo tron right in front of us, which was critical for a 4 mile road course. Watching them come out of turn 10 full blast and then slam hard on the left petal just in time to get a good run down the back stretch. Was something special. Here are my photos from the trip.

What a fantastic weekend. I'm looking forward to another F1 weekend in my life. Thinking Monaco, Spa, Germany, or Canada next. Who's coming with me?

Warning, techy post.

I'm excited to announce today that this blog post is coming from Some of you may be thinking, but wait Tim, your website is on, that is a github page. Let me explain. Historically I have had to checkout my code from github, add an entry to posts.json and push that up to master. Then hit refresh until the new code was posted just to make sure it rendered properly. About 3 posts in I decided to implement angular marked which has been great. I'm about 15 posts in and finally I'm getting sick of having to push a commit for every post. Well today that changes. I now created a gist that holds all my information. So future posts will be tweaking the config.js file in the gist, adding a new file, and typing away. So basically I have an admin interface, and its a gist. I'm using the gist wrapper application gistBox which has a really nice interface for working with your gists.

Tech Details

I'm utilizing github's API v3, just calling The ?callback=JSON_CALLBACK is a critical part here. Github wisely added that flag so you can call there API using a JSONP rest call, and not configure CORS. This was critical because doesn't allow you to set CORS information. The call to get the gist information returns back a gist object, which contains an array of files. I hardcoded a file called config.js that is an array of meta data about the posts. During a promise success block I populate the content of the md file for each post. Merging the two methods together was cake, enter $q.all(). This awesome function allows you to run multiple promises, and when they all return, run the .then() callback.

SO this is the workflow:

  • I add a new entry in my gist. Updating both the config.js and a new md file.
  • Someone hits
  • calls
  • pulls information from the specific gist configured in an angular constant
  • user then sees new post that originated on

If you want to read more, checkout the PostService.getGists() for the implementation.

Happy Coding!

** Warning: Techy Work Post ** A few people have asked me how to create Hangouts On Air events, so I thought I'd do a quick post. This direction is not guaranteed in anyway (Google loves to change/deprecate services) or come with any support. On the MyUW team we have used Hangouts On Air to do a few presentations and sprint reviews, check that out here. Hangouts On Air is a way to stream and record a Google Hangout so that anyone can watch. Watchers can also ask questions, or give a thumbs up to a specific part of the presentation. It also creates a Google+ Event for a prescheduled On Air so people can add it to there calendar. This is a great tool to use if you want to publish your presentation. Its also free!

The Setup

How does one set these up? Easy...ish, go to and login with your Google account you want to share the video with. Click the hamburger menu (the 3 horizontal bars in the upper left), and select Hangouts On Air. From the new page generated click the big call to action button in the middle of the page that says "Create a Hangout On Air". This screen should pop up.

If you wish to create an event to broadcast now, keep the "starts" on "Now", otherwise select "Later" and provide when it will be held. Provide a Name and description. This will be used as part of the event page. Once you are set click the Share button. If you haven't accepted YouTube's service agreement or don't have a YouTube account you will be prompted to complete those things. After clicking share it has created your event and will redirect you to that page.

The Events Page

So this page has some stuff on it so lets just see what each of these do:

Start Button

This starts the google hangout that will be used to present your content to your users. Don't worry, it doesn't start the recording right away.


This gives you the option to have a trailer for your event. You have to upload another YouTube video, which you then point at.


This gives you the ability of your crowd watching the event live to ask questions. If you do enable this feature I highly recommend having a moderator that is not the presenter. They can feed the presenter questions from the crowd.


The showcase feature allows you to share links with your crowd while the presentation is taking place. The links can be setup before time to allow for an easy presentation.


The applause feature is handy for feedback. It adds a thumb up and thumb down to your presentation for the users so they can like or dislike a moment of your presentation. This is helpful for gauging peoples reactions.


This card provides you with links and a description of your event.


This shows who plans on attending and who is specifically invited.


After You Click Start

When you click the Start Button a new window will pop open and a google hangout will start. It will invite you to ... invite guests. After you do that its like a normal hangout except it has a new footer that shows a loading icon until the YouTube video is ready and then you will have a "Start broadcast" button. Click start when you are ready to present. The YouTube Stream starts and your crowd will see this:

but instead of my profile picture you will see your presentation.

You will see something like this:

The panel on the left gives you access to all the features you enabled during the setup. Remember to click stop broadcast when you are done. This finishes up the YouTube video and it publishes it to your channel. That's it? That's it.

A couple gotchas. 1) Whom ever is doing the broadcast is the screen that is projected to the YouTube video. So its important to click on the presenters screen to make that one sticky. 2) These events are pretty public, so don't use them for anything that is considered "sensitive" to your organization. 3) Remember to have the presenter in range of the microphone they are presenting with. 4) If you have a moderator, best to hide the video feed and audio feed for the moderator. 5) There is a delay (about 30 seconds) to the live stream.

That is all, happy presenting!

The Background

MyUW's environment currently works and quite well I might add. We have to make changes (more details below) so I thought I'd rehash what we are doing. Currently, for each app, for each environment, there exists an overlay project. An overlay takes the base environment agnostic war file (java terms for a deliverable artifact), unzips it (because a war is just a fancy zip file), adds in the overlay files (get it, overlay?), and zips it back up. Then, we ship that overlayed war file to the environment specific container to be consumed by the bigger product. There also is some decrypting of encrypted passwords in the overlay, but that is just sugar.

The Issues

The driving force behind this is the UW SVN repository service is being decommissioned this fall. We are asked to move to git by then. One issue is we need a repo for every overlay. We got around a lot of this because SVN can have repos inside of repos (yo dawg). If you remember the math from above (for each app, for each environment) that gives us about 100 repos to move. Yuck... It makes one have thoughts about its current implementation.

Proposed Solution 1

Solution : Create one git project for each overlay. We could create a group specific to the myuw-overlay to reduce the noise in the gitlab UI. That would also differenciate access from having access to the project vs the overlay. We could probably script the migration to a local collection of repos, then create all the gitlab stuff using there API (i think one exists), that could happen. Issues with that : It's like 100 repos we have to maintain that are really tiny.

Proposed Solution 2

Solution : Create one git project for each environment. This reduces our overlay projects to 4. Issue with that: You can't checkout a partial project for git, so if anything changed in the whole repo (for any project) it wouldn't know exactly what project changed so it would have to rebuild every app/portlet overlay in the overlay. This could take a lot of time. Granted we are on newish hardware so this might not be an issue.

Proposed Solution 3

Stop using maven to do the overlaying. Instead create a git project for each environment that mimic'd the webapps directory that you are deploying to. Then if you want a file overwritten, just add that file in the proper spot. We would then build the ear like we normally would (all exploded and stuff), then overlay the files in the overlay project manually. We can run tcrypt on the command line against the files we needed to to get encryption working. This also removes the barrier of having to be a war. Opens doors to other application stacks.

Proposed Solution 4

Do 1 project per application, with different branches for each environment. This reduces the amount of overall number of projects by 4. Sweeeet. Credit to Tim Vertein for that idea.

This is my brain dump.

Happy Coding.

This blog was a really fun experiment. My goal was simple. Use Angular, Material, and the GitHub API to create a blog that is fun and easy to use. I think I've accomplished that. The only downside is visibility to bots. Due to just serving up on I don't have a server, which makes this site very limiting. So that being said I think I'm done with this for now. I'm going to shift focus back to the content instead of building from scratch. If you want to continue reading, its back to blogger.

So May happened, sorry for the long delay between posts. I have a goal this summer to be more consistant. Maybe once per week.

When I try something and discover I don't agree with it for whatever reason I stop doing that. Life is too short. In an earlier post I talked about trying the "plant based whole foods diet" (basically vegan with no processed food). It went well for the first couple weeks but then I went on a business trip and things kind of fell apart. I tried for the first day of the trip and I found myself super hungry and in a give up state. I don't blame the conference for this, I blame myself for not preparing. Cassi also decided she didn't like the diet during that week stating that it wasn't as substanable as we thought. Also she missed meat and some of the food we were preparing didn't agree with her. I agree with all of that. So we stopped following it.

Some people would see this as a failed attempt at a diet, but I see it as an interesting learning experience. We learned what our bodies like and what they don't like. There were some recipes that we will keep in the regular rotation, they were amazing! Some, like the 13 bean soup, never again! We found that, like any diet, preparation is the key to success.

Then it was graduation week. What a fun filled week full of family and celebrations! I'm so proud of Cassi, she has worked so hard at getting her Doctorate. Well deserved! Congratulations love! Thank you to all the family that could make it, and thank you for all the well wishes for those who could not.

So then we went on vacation (something I'll cover in another post, I'm working on another VLOG for that), we enjoyed ourselves. During vacation Cassi had suggested the Paleo diet as she has done it before successfully. Based on her results last time I'm excited. More energy, less grumpy stomach, stronger? Yes please. So here we go again, trying something new. I like the idea of Paleo, which I won't cover here. There is enough documentation about it, I won't bore you with the details. If you are interested in it, checkout this.

Quick plant update, our tomato plants and peppers have flowered (I see tomatoes in our future), and we have had 2 full trims of our 5 lettuce plants (so light and delightful). The weather here is outstanding, sunny and 80s. I very much enjoy the summers here.

Alright, time to prepare for work, happy Tuesday!

So, trying out a new thing. I've watched my fair number of vlogs and I realized it could be fun to carry around a GoPro every now and again and do a little documenting of my life. This may be a regular thing, or may be a once in a blue moon thing. Anyway, less blogging, more vlogging... enjoy.

<iframe width="400" height="225" src="" frameborder="0" allowfullscreen></iframe>

VR might die again unless someone develops a "cheap one". Look at the current market: Vive $800, Rift $600, Playstation VR $400 (but you need a PS4 $300 to run it). I guess you could include the phone thing that HTC came up with in that list, but I'm talking real VR experiences here.

So here are my thoughts. We need to develop a low end model that is not great. Maybe it uses cheap components. Maybe the resolution isn't wonderful. Maybe it doesn't track your head movements. The catch would be that you can use it on your current "meh" computer. Price it at a nice $150 and call it a day.

I'm thinking of the game developers here. There are not going to be many good VR games that are specifically branded as VR as we would like because people would have to make it work for the masses as well with the flat screen monitors and gamepads. That just doesn't make sense (or dollars, HA!). What we will get is games that are VR as an afterthought, a cheap trick if you will. Much like a lot of the 3D movies you see. There may be a few great games from big game companies with billions to burn on a "maybe the next hot thing". Nothing like Ready Player One, if you haven't read that book I really enjoyed it. What we need to do is bring the masses to VR like Tesla is doing with the Tesla 3.

Hopefully this first generation will generate enough income to make a less pricy model. So that's it, that is my rant about this generation of VR. No one wants it to go the way of the Nintendo Virtual Boy, but it might.

Good day.

Written with StackEdit.

What is Docker? What is a Dockerfile? Docker is a newish concept that is sweeping across the tech industry like a wildfire. It is a concept that was an evolution over the Virtual Machine (VM). Instead of rewriting what exactly the difference is, checkout what is docker?. In this post I'm going to focus on what a Dockerfile is. This file describes to the docker engine what kind of image to build. Here is an example:

FROM ubuntu:latest
MAINTAINER Tim Levett ""

CMD echo "hellooooo"

This looks pretty simple, and it is. This is your bare bones Dockerfile. The FROM says, what image would you like to start with? Here I selected the ubuntu image, latest is the bleeding edge. This is not recommended for real products. Please use tags. If you don't specify anything (e.g.: FROM ubuntu) then it will pull latest. MAINTAINER is a optional field, but I think its very very helpful to know who wrote the file. Then CMD, this command is what is executed when you startup your dockerfile. This dumb example is a simple echo.

There are many other docker file commands you can run. Checkout for details on them.

Building Docker Image

Building a docker image creates your executable. cd to your directory with your Dockerfile in it. Run docker build -t hello .. This tells it to name the image hello, and execute with the local working directory of pwd (or .). After running that you will see it download the latest ubuntu image, then run your dockerfile commands. Run a docker images hello to see your newly created image.

Tim-Levett:docker-example tlevett$ docker build -t hello .
Sending build context to Docker daemon 33.79 kB
Step 1/3 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
8aec416115fd: Pull complete 
695f074e24e3: Pull complete 
946d6c48c2a7: Pull complete 
bc7277e579f0: Pull complete 
2508cbcde94b: Pull complete 
Digest: sha256:71cd81252a3563a03ad8daee81047b62ab5d892ebbfbf71cf53415f29c130950
Status: Downloaded newer image for ubuntu:latest
 ---> f49eec89601e
Step 2/3 : MAINTAINER Tim Levett ""
 ---> Running in 512a5af306da
 ---> c875511a002d
Removing intermediate container 512a5af306da
Step 3/3 : CMD echo "hellooooo"
 ---> Running in bbb4e1d6c5fd
 ---> 384add24b2c3
Removing intermediate container bbb4e1d6c5fd
Successfully built 384add24b2c3

Tim-Levett:docker-example tlevett$ docker images hello
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello               latest              384add24b2c3        12 seconds ago      129 MB

Running Docker Image

Okay, we have a docker image, neat. To run an instance of your container, we do a docker run command.

Tim-Levett:docker-example tlevett$ docker run --name hello-1 hello

Tim-Levett:docker-example tlevett$ docker ps -a
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                      PORTS NAMES
924e459dd5ea        hello                                 "/bin/sh -c 'echo ..."   20 seconds ago      Exited (0) 19 seconds ago hello-1

As you can see from the output, we ran an instance of hello, and named it hello-1. Also see that it exited. This is because the echo returned, which means shutdown. In a typical container you would have a service running (like mysql, tomcat, jetty, etc...) which wouldn't return, so it would continue to run. The --name <name> is important. If not named it is challenging to script shutdown commands.

Uploading an Image to Docker Hub is the central location that we get images from. You can create a free account and upload your images to it. You can also pay if you want hidden images. By default the images are public. We are making a public one for this example. Naming your image says where it should go. If you try to run docker push hello:latest it will error saying you don't have access to hello.

Tim-Levett:docker-example tlevett$ docker push hello:latest
The push refers to a repository []
5eb5bd4c5014: Preparing 
d195a7a18c70: Preparing 
af605e724c5a: Preparing 
59f161c3069d: Preparing 
4f03495a4d7d: Preparing 
denied: requested access to the resource is denied

In order for you to publish it. You have to prefix your image with your username (e.g.: timlevett/hello). So lets rebuild the image with a new name

Tim-Levett:docker-example tlevett$ docker build -t timlevett/hello .
Sending build context to Docker daemon 33.79 kB
Step 1/3 : FROM ubuntu:latest
 ---> f49eec89601e
Step 2/3 : MAINTAINER Tim Levett ""
 ---> Using cache
 ---> c875511a002d
Step 3/3 : CMD echo "hellooooo"
 ---> Using cache
 ---> 384add24b2c3
Successfully built 384add24b2c3

Now if you go to you will see my image.

Layers are good

Docker recommends that each image layer does one thing. For example, if you wanted to create a tomcat container. You would have one Dockerfile that took a basic linux distro and installed tomcat. Then from your tomcat container you could add in files to create your product container. Apache has even released a tomcat image so the first step isn't even needed.

One thing that people talk a lot about is how much they pay for their cell phone bills. Getting locked into contracts makes it tough to leave, but yet when we get the opportunity to jump to something else because the contract is up we just re-up and take the new subsidized phone. What we don't realize that the cost of the phone is much less than a year of bills from the company.

Here's some Verizon math:

  • Hardware, iPhone 6s : Retail $650, but with 2 year contract 1/2 off at $325, not bad. Lets say you get the deal, so for 24 months its $13.55
  • Verizon 3GB plan : $45 (for 3gb data w/ unlimited voice/text) + $20 (for each phone on that plan) = $65
  • Verizon 3rd party Insurance (because water) : $11/month
  • Activation fee : $45 one time fee.

Grand total : One time $45 + $89.55 monthly (before all the monthly fees). That is $1119.60/year.

Notice some things here. 1) if you use under 3gb you don't get money back. 2) if your phone is damaged you pay a deductible, 3) You are tied to a 2 year contract.

But lately there has been talkings of this thing called Google Fi. If you haven't heard about it, here is the rundown. It's Google's cell service provider. Google has partnered with Sprint, T-mobile, and most recently US cellular to have a pretty awesome network. Here is their pricing:

  • Phone : Nexus 5x, $350 retail, $200 w/ activation. $8.29/month
  • Nexus protect (insurance) : $70 one time fee
  • Fi Service : $20 for unlimited text/voice + $10/GB charged by the MB.
  • Activation fee : $0

Total : 70 one time fee + $38.29/month for 1GB to $58.29 for 3GB. or $529.48/year.

Things to note: 1) No monthly fee for insurance, 2) if you use 1GB you only get charged $10, if you only use 1.5GB you get charged $15. They never charge more than what you use. 3) they connect to protected WIFI that they can trust and create a VPN tunnel through Google servers to reduce data. Think coffee shops. 4) Nexus phones get immediate updates from Google.

Takeaways, is $1119.60/year for the "best" network better than $529.48/year for 3 great networks working together? I'd vote for the latter, but I've been on Fi for 3 months and enjoying it so far. So that's the facts ladies and gents.

Have a great weekend!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment