I've subscribe to a food delivery service called HelloFresh (referral link for free trial). They send recipes and ingredients every week for my wife and I to turn into meals. It's a great service because I come in contact with ingredients I typically wouldn't pick up and we eat fresh and healthy meals at least 3 times a week. Also on the rare occasion when some ingredients are missing or spoiled, we get to play Chopped like on Food Network!

Over the past few weeks, I have had some problems with deliveries. It is frustrating because it's not cheap and the grocery shopping for the week is done with 3 full meals from HelloFresh in the equation. The problem with deliveries has been that the food arrives late and in yesterday's delivery, it didn't even arrive until a day late.

This got me thinking. I know a few folks who personally emailed CEOs of companies that they've had grievances and suggestions for and had pretty decent responses. With that fresh in my head I thought it would be a perfect chance to reach out to the HelloFresh team with not only a complaint, but a suggestion that can help quality control. I originally wrote this long letter saying they have a guy write a script that can parse the pick up time and the delivery time and see if that data is useful. But after typing it all out, it looked simple enough and figured, I may as well brush up on my Python and show them what I mean.

HF_Stats.py was born as well as the first actual post on this blog in years.

import requests
import re
import urllib.request
import datetime
from datetime import datetime

### Hello Fresh has a u, id, and e strings in the URL from their emails. Removing for privacy.
hfu = 'REMOVED'
hfid = 'REMOVED'
hfe = 'REMOVED'

## Buld HF Tracking URL with the different strings
hf_url = 'http://hellofresh.us7.list-manage1.com/track/click?u='+hfu+'&id='+hfid+'&e='+hfe

req = urllib.request.Request(hf_url)
resp = urllib.request.urlopen(req)
respData = resp.read()

fullEx = '(Picked Up|Delivered).*?(\d{2}\/\d{2}\/\d{4}\s+(\d{1}|\d{2})\:\d{2}\s(A|P)M)'
paragraphs = re.findall(r''+fullEx,str(respData))

## Time Object Created
c_Event = paragraphs[0][0]
c_Time = paragraphs[0][1]
print ("Created", c_Time)

## Time Object Picked up by Shipping Company
p_Event = paragraphs[1][0]
p_Time = paragraphs[1][1]
print (p_Event, p_Time)

## Time Delivered
d_Event = paragraphs[2][0]
d_Time = paragraphs[2][1]
print (d_Event, d_Time)

## Converting strings to find total hours between creation,arrival and delivery
t_Format = '%m/%d/%Y  %I:%M %p'
cT = datetime.strptime(c_Time, t_Format)
pT = datetime.strptime(p_Time, t_Format)
dT = datetime.strptime(d_Time, t_Format)
t_Delta = dT - pT
h_Delta = (t_Delta.days * 24)+(t_Delta.seconds/60/60 )

## Final Print Statement
print ('Hours taken from pickup to delivery', h_Delta)

In my case I found the following:

Created 02/24/2017 2:50 PM
Picked Up 02/26/2017 9:07 PM
Delivered 02/28/2017 1:47 PM

Assuming that the delivery was not refrigerated from Pickup to Delivery the entire time, the box of food was not refrigerated for 40.67 hours.
Assuming that the delivery was not refrigerated from Creation on the shipping page to Delivery, the box of food was no refrigerated for 94.95 hours.

At the end of the day, my wife and I love HelloFresh. We hope that they look at this or already look at these numbers and work on delivery times to ensure fresh food is delivered.

Thanks for reading.


November 15, 2016

It's been a while but I'm going to try to post every few months. I've said this before but I've gotten busy in some cool cases at work and plan on sharing some of what I've learned here as well.

Some things to look forward to:

- Some home DIY/D-I-Why
- Homebrewing
- Home Automation
- Contact Center stuff
- Dallas Spurs
- Toshi

June 10, 2015

Cisco TAC in Richardson hosts competitions annually to raise money for March of Dimes. Each team(IPCC, CUCM, etc) hosts an event and holds an entry fee and participates.

One of my colleagues was very involved with scouting and had a Pinewood Derby track that he held for his troop and we decided it 0would be a great way for us to raise money for MoD and have some fun building cars at the same time.

I had never built a derby car before so I participated in the stock class and spent one Saturday morning at John's place working on my car, cutting and shaping it to look like an ethernet cable. After some sanding and a lackluster attempt at painting I had my entry.


My car placed 2nd in the stock class and our team of 3 cars won 1st place in the team class with our members placing 1st, 2nd, and 4th.

Everyone had a great time and we raised a decent amount for charity. I look forward to putting on this event again next year and will be building outlaw car next year too!


Our c

May 25, 2015

I purchased a car and am finally done with the process with time to think. I have thought about ways to improve this process and the lessons learned for buying my next car. I have a full write up of ~2,200 words but will share a few of my key take aways.

1. Have time. Be patient. There are two components to this, the actual date you need to drive away with the vehicle and the amount of time the negotiations take. If I had more time I would have walked out and waited for a better deal with a more honest salesman. Also make sure you have time to sit at the dealership. I came in after work but if I had to do this differently I would have come in on Saturday with the day free to sit (if necessary).

2. Expand the dealership search. I wish I had also looked into dealerships in Oklahoma and bordering cities. They may be a drive but if the deal is good enough it may be worth it.

3. Do your research. Understand if the vehicle is able to be configured in the manner you would like. Make sure you ask a few dealerships the same question instead of relying on one. I got burned wasted lots of time because of this.

4. Along with number 2 and 3, Ask multiple dealers the same question. If you ask your salesmen questions and a majority tell you one thing but one person tells you something different, there is something fishy going on. I should have taken that as a warning but didn’t and ended up without a built in navigation system.

5. Understand how much you're paying in interest over the life of the loan. Originally I had come in with a 1.79% from a credit union but with the 0.9% offered at the dealership. For me that meant approximately $350-400 saved over the life of the loan which I could afford to put into the warranty or other incentives dealers may provide to use their financing.


6. Due to the navigation system and the hybrid, I had a limit to what I would pay for the warranty. With the increased savings from the financing, I was able to increase that limit and still saved some additional money.

7. Lute Riley Honda lied to me and misled me multiple times. They also took more than 3 months to refund me and it seemed like their management didn't care too much past the sale. I will not shop at Lute Riley ever again.

If you have questions about the full process or detailed notes, I may provide those by request.