Google Photos vs Flickr

September 29th, 2017

I’ve been using flickr since it started in 2004. It’s been my number one place to store photos – i have over 50,000 at this point.  However, I need something else to be my main photo storage.   Why?  Mainly since now that mobile is taking over, the way I take and manage pictures is different.  For me, my phone is my primary camera and has wifi, so should be able to easily upload and manage photos from it.  However, I still need to do some advanced functions that are hard to do on a phone, so desktop UI should allow this.  Second reason is because yahoo got bought by Verizon, leading me to wonder about flickr’s future.

Enter Google Photos, which I’ve been using now with Android phone for almost 2 years.  I tried Google Picassa a while back, didn’t like it for some reasons (desktop focused), loved it for others (good for power users).  Picassa has been slowly been replaced by google photos, and most of key features have been ported over.

Comparison of the features I care about


Google Photos
Future uncertain Better and better, AI
Phone – upload easily to cloud so-so YES
Phone – syncing with cloud (edit and auto sync) so-so YES – best if use Google Photos as photo app on phone
PC – uploading so-so Yes
Organize – create albums Yes Yes
Organize – create collections Yes No (no grouping of albums)
Organize – advance finding of photos, managing  large amount of photos and albums Yes organize so-so
Share – Easily share albums for viewing Yes
Share – Easily share albums for collaborating so-so Yes
Share – auto-create albums, videos, etc No Yes – cool AI
Dynamic share – easy to group of photos not in album Yes
Update Dynamic share – easy to tag “Best of 2015” Yes No
Collaborate – others can add to albums, etc Yes so-so
Find – easily find pictures so-so – can find if labeled, but no AI
Yes – search is fast and covers words in Description as well as image
Find – easily find albums / collections so-so – easily via organize so-so – gets bad after large amounts of photos (thousands) or albums (hundreds)
share pics on chromecast (TV) so-so Yes

Reasons I love Flickr, in order

  1. Organize – Flickr has an advanced web interface to create and organize photos into albums and collections.
  2. Search – all my photos tagged with “Best of”
  3. Browse – Anyone can browse my collections of albums.  This used to be super easy, but UI changed recently and its not as easy.

Reasons I am leaving Flickr, in order

  1. Hard to upload photos quickly into album to share
  2. User Interface – Too much focus on individual “photos”.  That is, too hard to find meta info like album, collection

Reasons I use Google Photos

  1. Adding – Easy and fast to get photos from phone to an album I can share with people.
    1. Both phone and Desktop make it easy to select photos and add to album
    2. Albums by default are private, but just like google docs, you can share with anyone via a generated share link
  2. Finding / Search
    1. Just like google web search, any word I explicitly add to photo allows me to search and find that photo later.  Basically tags.
    2. google auto-organizes photos so you can browse for things
  3. Archive – You can download entire albums from
  4. Embed photo on blog
    1. Easy to get embed HTML with 3rd party tool like

Needs improvement on Google Photos

  1. Google – Organize albums into collections
  2. Adding Description when I take photo in Android.
    This one is a bit tricky – Right now, the Google Photos Android app will only show the Description field after the photo has been uploaded to the cloud.  This is only an issue when you do not have internet or have very slow internet.  With fast internet, you can solve this by force syncing, waiting for it to finish, then clicking Info icon and entering your personal meta details in Description field.


Google Photos

2021 Update

Google Photos got worse with Android 11 –

Apache virtual hosts, HTTPS, and JIRA Docker Containers

September 8th, 2017


The goal was to easily create and recreate docker instances protected via SSL and accessed by simple URL. Below I explain how to map and in apache (used as firewall, reverse proxy, content server) to a specified IP:port of Jira and Bitbucket (git) docker container.


Docker is awesome, can easily create a new web service in minimal time.  However, in my case, I want everything to be routed through one machine’s https (port 443).  Additionally I wanted to setup Jira and Bitbucket (and possibly more). Previously I had to use to view my private repositories from a web browser.  I show how to do this with apache 2.4 and docker on a single Ubuntu Linux machine.

  • Security – single apache instance serves as reverse proxy and can force all HTTP requests to use HTTPS.
  • HTTPS certificates – use certbot by Let’s Encrypt to easily install certificates for HTTPS to work for free.
  • DNS and Virtual hosts – Assuming multiple domains or subdomains all get routed to same apache instance.  Will configure apache conf files to map these requests to correct port and path on docker container.
  • Creating / Starting JIRA and Bitbucket (git) docker containers to listen on a specific port

Note that you should replace everywhere used in this doc with your domain name.




Goal is for several domains,,,,, and, to resolve to the machine where apache will run.  There are many ways to do this, I have one A record mapping to an IP, and  CNAME records mapping the subdomains to

Apache Setup

I use Apache as the reverse proxy because of its popularity and my experience with it.  If performance is an issue, nginx is probably better.  Below you’ll find the important bits from these apache conf files:

  • apache2.conf
  • sites-enabled/
  • sites-enabled/
  • sites-enabled/
  • sites-enabled/000-default.conf
  • conf-available/
  • conf-available/vhost.logging.conf
> grep sites-enabled apache2.conf
IncludeOptional sites-enabled/*.conf
> cat /etc/apache2/sites-enabled/
<IfModule mod_ssl.c>
<VirtualHost *:443>


 DocumentRoot /var/www/

 Include conf-available/vhost.logging.conf
 Include conf-available/ 
> cat /etc/apache2/sites-enabled/
<IfModule mod_ssl.c>
<VirtualHost *:443>


 <Proxy *>
   Order allow,deny
   Allow from all
 ProxyRequests Off
 ProxyPreserveHost On
 # below must map to docker ip:port setup
 ProxyPass /
 ProxyPassReverse /

 Include conf-available/vhost.logging.conf
 Include conf-available/
> cat /etc/apache2/sites-enabled/
<IfModule mod_ssl.c>
<VirtualHost *:443>


 <Proxy *>
   Order allow,deny
   Allow from all
 ProxyRequests Off
 ProxyPreserveHost On
 # below must map to docker ip:port setup
 ProxyPass /
 ProxyPassReverse /

 Include conf-available/vhost.logging.conf
 Include conf-available/ 
> cat /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>

 DocumentRoot /var/www/html
 Include conf-available/vhost.logging.conf

 # Redirect http (port 80) to https (port 443)
 RewriteEngine on
 RewriteCond "%{SERVER_NAME}" ".*\$" [OR]
 RewriteCond %{SERVER_NAME}
 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

> cat /etc/apache2/conf-available/
# added by certbot-auto
SSLCertificateFile /etc/letsencrypt/live/
SSLCertificateKeyFile /etc/letsencrypt/live/
Include /etc/letsencrypt/options-ssl-apache.conf
> cat /etc/apache2/conf-available/vhost.logging.conf
LogFormat "%{Host}i:%p %h %l %u [%{%d/%b/%Y %T}t.%{msec_frac}t %{%z}t] %{us}T \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined2
CustomLog ${APACHE_LOG_DIR}/access.vhosts.log vhost_combined2
ErrorLog ${APACHE_LOG_DIR}/error.log


HTTPS Certificates

With, you can get free certificates from a Certificate Authority (CA). I used the cmd-line certbot to install them and update them. Initial setup can take up to 30 minutes, but every 3 months when you renew it should only take a few minutes. I do this on Ubuntu linux, but they have instructions for all the popular flavors of linux.  When done, you can verify your installed certificate using

One thing to note here is that its easiest to have a single certificate to cover domain and subdomains. In January 2018 wildcard certs will be supported, but till then you’ll need to start with something like this:

cd ssl-certs && ./certbot-auto --apache \
-d \
-d -d 

Docker Setup

Docker is the new cool kid on the block, and as such, it is constantly improving.  So what I write here may not be exactly what you need to do.  In any case, what I did is setup 3 docker containers – one for Jira, one for Bitbucket, and one for Postgres database.  If you don’t have experience setting up Jira or Bitbucket, it can be tricky, but Atlassian has pretty good documentation.

I have created a sample docker-compose.yml that covers whats needed on the docker side.  As previously mentioned, you will need to replace with your domain name.

OpticsPlanet Done

April 8th, 2017

After almost 4 years, I quit Opticsplanet (recently renamed Ecentria Labs). It was a good run – as I stated in my 2013 post, I loved the challenges but not the commute. The challenges for me mostly focused on management – I managed 2 teams and 12 direct reports at the time I left. This is the first job I was a full manager (done team lead) and I really enjoy helping/enabling people, making systems and processes more efficient, and being a force multiplier. But I also got to be scrum master and oversee the transition to agile methodologies which we started the year I joined. I am impressed by how more efficient it is for agile teams to collaborate with today’s tools when setup properly and how much easier it is for me to manage with those tools, specifically Atlassian suite (jira, confluence, bitbucket, bamboo), skype, and slack. I also enjoyed working with the people there – the most important thing for me in any job. I still needed to scratch my programming itch, and mostly got to do that enough via little projects here and there. However, my learning plateaued, the commute still sucked, I wanted to do other things.

So what next? First, I just got back from a 8-day solo vacation in the southwest. Much needed time to unwind, hike, snowboard, get some sun, and enjoy nature. I also plan to spend time to understand and help my wife’s growing letterpress business,, which Shayna successfully manages with very little help from me. I also want to spend some time figuring out what my next play will be – ideally I find something that inspires and motivates me because I believe in it. Yeah, I know, its kinda abstract and similar to what I did before – see Green Abort for quick summary. But with the politics these days I reminded how much I care and am influenced by things that I don’t have much control over, and want to change that. And maybe this will end as it did last time … back to a job in Tech since that is where my skills and experience are. Until then, a new chapter begins in 2017. Hooray for change.

2016 Done.

March 4th, 2017

2016 was one helluva year. I endured pain, worked a lot, but I still had my share fun and adventure. Outside of me, it was an election year in the US, which does not need any more mention – i think we’ve all had our fill of politics. We also lost some great musicians – David Bowie, Prince, and George Michael – and I’m grateful for their music and artistry. But you know about that. Let me fill you in on me.

The pain I referred to was due to a pinched nerve I got in early January – it was unlike anything I ever experienced, and taught me humility, patience, and how to really endure pain. The first few days were the worst, couldn’t sleep, crying every day, not knowing what to do. But after talking to some doctor friends, I ended up seeing a physiatrist, aka Physical Medicine and Rehabilitation (PM&R) physician, who eventually diagnosed me with a herniated disc and pinched nerve at C7 vertebrae. 3 ESI’s and a couple months later, I was almost back to normal, so then I focused on getting back in shape. I saw a physical therapist from May to July, with the goal of rehabilitation and preventative maintenance. Well, rehabilitation was quick, but preventative maintenance is a tricky one.  Sometime in august my shoulder was hurting and I stopped almost all the exercises I learned, since they all involved my shoulder. I still could do long runs, and that continues to be a nice stress reliever, but my back and shoulders still cause me trouble. Today my issues are manageable, I’ve learned the power of controlled breathing, and am thankful everytime I’m able to pick up a bag of groceries without pain.  I often think about what my grandparents used to always say when someone complained about this or that – “well, at least you got your health”.

In terms of our New house, things are pretty much settled – but not done, things are never done. It’s been 2.5 years since we bought it. The first year we spent lots of time fixing things up, but we ended up only doing essentials off our huge wishlist. Like most things, we prefer to spend our time and money on other priorities. Nonetheless, some of the essential house fixin’ included electrical work (3 different electricians), maintenance on boiler and radiators (main floor), maintenance on HVAC (upstairs forced air AC + Heat), tuckpointing ($7k to fix outside brick walls) and basement work. We are also lucky to have a handyman friend, B-Dub, work on a bunch of random things throughout the house. One of the most important things to me was getting the basement into a place I liked. When we bought the house, the wife and I agreed the basement would be mine to customize, she calls it my man cave. Like most basements, it doesn’t have nice wood floors, high ceilings, fancy wood trim. What it does have is my complete control. A place i can leave as a work-in-progress, pause and resume at will. Last year i set up the basics so i can do work – lighting, tables, shelves, desk – a place to put everything. This year i made it mine – got my leather chair, sofa, big tv, nice speakers, a subwoofer, and a mixer – a place I can unwind after work, let music wash over me, or binge-watch netflix, amazon, or plex.

Speaking of music, my life has been full of changes, but one thing that has not changed is my love for music. Don’t get me wrong, I love my family, friends, wife, my work, other hobbies .. but music is .. like my best friend. Listening to the right song when i feel a certain way is like home. And I strayed from music for a few years, not spending much time alone with it. I still enjoyed seeing shows, listening while commuting, at the gym, or just background music while doing other things. But spending time alone with music is special. Finding new music, carefully listening and appreciating it, forming opinions, making playlists, sharing with others. I still want to spend more time here (or hear, punny), finding new gems, getting to know my old favorites again, making playlists so i can easily listen wherever i go. This is the year I feel like music made a comeback for me. And for now, I give thanks.

Now to expand on the fun and adventure. The wife and I hit the beach in January, as we do most winters in chicago, but this year we did an all-inclusive in the Dominican Republic. We were lucky to be next door to a Pearl Beach Club, a brand new club on the beach with serious sound system – you know I love me some good loud house music. The wife and I also had one more getaway – a nice long weekend in Michigan in October – hot tubs and airbnb! In March, September, and NYE, I visited my family down south – really enjoyed camping on Cumberland Island. In early June I made it out to California to visit friends and get some mountain time – hiking in tahoe was very healing for me, as was seeing my old friends and honoring Jeffrey on bike and brew ride. Additionally, there was countless BYOB Supper club dinners, Freakeasy parties (DLC tribute to Prince!), and, like every year in Chicago, summer was a non-stop fun factory of concerts, street festivals, biking in shorts, and hanging out with old and new friends. Now that I think about it, I had had a lot of fun in 2016.

So to sum up, I will always think of 2016 as the year I had my herniated disc. And there were other things that were not so fun. But its important to “Count your blessings” (as Mama used to say), and after writing this I realize I am lucky and blessed to have time and ability to continue doing the fun things I’ve always enjoyed. 2016, I thank you. Good day, sir.

I said, Good Day.

New House

May 29th, 2014

Today we are moving. A few days ago, Memorial Day, Shayna and I boxed up the last 6 years of our life in the apartment. The movers are now moving everything to our new house. I am sooo excited for our new house. Since we closed May 7, I’ve spent most of my free time there. Cleaning, fixing things, ripping out the basement ceiling. Work is much more fun when its your own. We bought the house as-is, so there’s several things we were unsure of. For example, the basement ceiling needed to be demolished and fixed – work in progress (thanks Sean!), and the lawn mower was a question mark at first, but last weekend I plugged it in (surprise, its electric) and cut the grass with great pleasure. But the entire process has brought me more deep satisfaction than I anticipated – Looking for houses for months, finding this one, knowing it was what we wanted, getting our offer accepted, getting our ducks in a row for the loan and everything else for closing, then signing the papers and walking away with keys. We still have much more to do, but I am looking forward to coming home everyday to OUR VERY OWN HOME.

Patagona and Buenos Aires

March 22nd, 2014

Just got back from the biggest trip I’ve done since my Round The World in 2007. Shayna and I spent over 2 weeks in South America, mostly to hike the mountains in southern Patagonia, but also to see glaciers and check out Buenos Aires. As you may or may not know, Patagonia refers the southern part of South America – both Chile and Argentina, covering mountains, lakes, and desert regions. Patagonia means “Big feet” – Spanish settlers apparently thought the natives had big feet. Some may call our trip a vacation, but if your definition of a vacation includes relation, pampering, and time to do whatever you want – this was not a vacation. It definitely was an adventure – and we enjoyed it tremendously.

Actual Itinerary (planned itinerary had more days in El Calafate area)
2/14 Fri ORD-GRU, Chicago – Brasil
2/15 Sat – stuck in Sao Paulo Airport, Brasil
2/16 Sun – GRU-EZE, Sao Paulo to Buenos Aires
2/16 Sun – AEP-FTE, Buenos Aires to El Calafate
2/17 Mon – Eco Camp 7-Day W-Trek Begins
2/24 Sun – Eco Camp 7-Day W-Trek Ends
2/25 Mon – El Calafate, Moreno Glacier
2/26 Tue – FTE-AEP – El Calafate to Buenos Aires
3/2 Sun – EZE-GRU-ORD Bye Bye Buones Aires
3/3 Monday, 6am, arrive back at Chicago O’Hare 

Our trip began on Valentine’s Day, Friday Feb 14, at 9pm by flying from Chicago to Buenos Aires through Sao Paulo, Brasil. We were supposed to only be in Brasil for a few hours (from 11:40am to 3:40pm), then spend saturday night in BA, then fly from BA to El Calafate on Sunday, then leave El Calafate Monday to begin our 7 day hiking trek in Patagonia. However, we ran into problems in Brasil. TAM, the airline in Brasil, said there was no room on the flight we booked 6 months earlier to BA. Of course this made us happy. But they found a spot on another flight later that night. Then when we were actually boarding the flight, they asked where our print out was of the Argentina reciprocity fee payment … we didn’t have it. Snafu part two. Glad they didn’t bother to ask us in the previous 7 hours we were at the airport. But its not hard to get – just go online, pay, and print. Of course there is like one printer shared amongst all the gates and wifi is soo slow its unusable. TAM did work with us and said they would print it once we paid. We went back to the United VIP lounge to use the wifi there (thank god for the VIP lounge), but we still missed the flight. TAM claimed that United in Chicago should not have let us board without it. Luckily, the United agent at Sao Paulo was extremely understanding and worked with us on getting to BA, as well as tracking our bags down. Between 1 and 2am, over 12 hours after arriving their, we had located the location of our bags (in Buenoes Aires EZE airport), confirmed a new flight to BA, and found a new flight from BA to El Calafate (since we were going to miss our previously planned flight to El Calafate). Also, you can’t purchase one-way tickets to/from El Calafate, so we had to leave El Calafate 2 days earlier than planned – meaning we had to remove El Chalten and Fitz Roy from our trip. The good news is that buying a brand new round trip flight last-minute costs almost the same as buying one a half-year ahead of time. Gotta love “emerging markets”.

Once we arrived in El Calafate, I felt like the Patagonia trip began. We had booked a 7-day W-trek in Torres Del Paine with EcoCamp. I know I wanted to do the W-trek, which is like the most famous trek in Patagonia. Normally we love planning and doing everything ourselves, but we liked how Eco Camp was environmentally friendly, had good food, and would take care of all the details for us – neither Shayna nor I speak Spanish. The first and last day were just getting to/from the camp. So day 1, Monday, we left El Calafate, Argentina, at 7:30am, crossed the border into Chile around noon, and met the EcoCamp guide at the bus station in Puerto Natales, Chile. We signed things, had lunch, and headed north to Torres Del Paine. On the way we stopped at a park and learned about Milodon, an extinct native animal to southern Patagonia. We got to the camp, had happy hour, ate dinner, and slept in our luxiourious bed in a canvas dome. No, really, the bed actually was amazing, had plenty of comforters to keep us warm – no heat and got down to near freezing temps (still warm coming from Chicago where it had not been close to freezing in weeks).

Tuesday, Day 2 of the 7-day trek was our first real day of hiking, roughly 11km (7miles) heading mostly west from Eco Camp (base camp elevation was around 150meters, or 450 feet above sea level). There were 12 of us that paid for this 7-day W-trek, 14 if you include the 2 guides. Each guide had 6 people – but after the first day or two we were just one big group. It was an easy day of hiking in terms of distance and terrain, but was the only day with bad weather – just cloudy, windy and light rain. We spent the night at our first “Refugio”, Refugio Cuernos (78m). Similar to US, backpackers are only allowed to sleep at designated areas in the park, the refugios. You can sleep in a tent or in dorm-style bunk beds. Thats where we stayed. It was packed, and got the late dinner shift. But thats ok, cuz they sold cold-ish beer, and the sun didn’t set till 9pm (summer down by the south pole). We played cards and walked around outside with some of our new Canadian friends. Food was not bad, but definitely not as good as the food at Eco-Camp.

Day 3 was one of my favorites of the trip – 23km (14 miles) in and out of the French Valley. We had a late start (3rd shift for breakfast), but had good weather. It took about 2 hours to hike 5km to Campamento Italiano. From there took another 2 hours to go 5km mostly north straight up the valley to our destination, the Mirador Britanico, aka Britanico Lookout. We had lunch on the way, and the whole way up was amazing views. West of us was the Glaciar del Frances (thats the French Glacier to you and me), and we heard several mini avalanches happening, but i only saw one from start to finish (it was far enough away that by the time you heard it and looked up, it was mostly done). After arriving at Campamento Italiano (170m) for the second time, we headed 7.5km southwest to Refugio Paine Grande (50m). This one was way better than the previous – more like a hotel. We still had dorm-style bunk beds and communal bathrooms, but we had huge cafeteria with good food, good company, great views, and refreshing beer and wine.

By the end of Day 3 we had made friends with everyone in our group. First there was the 2 guides, Nico (our guide), and Roberto. In our 6-person group there was Shayna and I representing Chicago, Rob and Laurie from Toronto, and Kyong and Marlene from Seattle. In Roberto’s group there was Petros and Lukas from NYC, Carlos and Laura from Mexico City, and Sharon and David from near Boston. Shayna and I were the youngest “couple” there, and Shayna was the youngest one except for the guides. Everybody spoke great English except the couple from Mexico City, who spoke good enough English. Everyone brought their A-Game to this trip. If they were tired you wouldn’t know it from their spirit, and talking on the trails and sharing dinner with everyone was one of the highlights of the trip.

Thursday, Day 4, involved a half day of hiking to the “Grey Glacier” followed by a boat ride and drive back to Eco Camp. It was 10.5km from Refugio Paine Grande to Refugio Grey, where awaited our boat journey. We hiked mostly north along Grey Lake, seeing little blue icebergs floating before we laid eyes on the big real glacier. Even though the lake and glacier were named “Grey”, the glacial ice was blue like most glacial ice. It’s blue because the immense pressure made the ice so dense that only the blue part of the light spectrum can pass all the way through. Although if you take a piece of blue ice and put it in your hands, it does not look blue any more, looks like regular ice. We had lunch at the refugio while waiting for our boat. Inside they had nice couches, hot cocoa, and beer and wine, of course. There was no dock for the boat, had to board via raft. The boat was big, and got close to the “Grey” glacier before zooming back south to let everyone off. The glacier was amazing, but I like Moreno Glacier more (details in El Calafate below). We got off the boat, walked to parking lot, took the standard 15-person Eco-Camp minivan back to basecamp where cocktail hour and dinner awaited.

Friday, Day 5, was our last real day of hiking, but one of the best of the trips. We did 18km (11miles) total, to get to Base Las Torres (886m) to see Mirador Las Torres, or as I call it, the lake with a view of the three spires. We hiked 5km north up a valley to Refugio Chileno, which was similar to Refugio Cuernos in size. We didn’t stop long. The next stretch involved hiking right along the river as well as through forests and then at the end a bit of hopping boulder to boulder. But the end was definitely worth it – beautiful. We all took lots of pics, had lunch, and I got a quick nap in. Even though I was still low on sleep, I felt better than I had at any point on the trip. All that exercise and fresh air makes me come alive. On the way down Shayna and I stopped at Hotel Las Torres for wifi and a fresh beer. Beer always tastes best after hiking all day. And shayna needed to check her work emails. The hotel was much nicer than our eco camp, the dining room had giant windows facing north so guests can be in awe of the mountains. And they also had a releif map by the front desk that made it easy to visualize all the mountains and trails we covered the last few days. Glad we stopped in. Then we headed back to camp for shower before cocktails and dinner. Knowing we could finally sleep in the next day, i had a few after dinner drinks and hung out more with people in our group.

Days 6 and 7, the end of the trip, were less exciting, but still interesting. Saturday, Day 6, all 14 of us drove around and looked at the geology and animals. Chile protects the Guanaco, an animal native to patagonia similar to a deer. Well, Chile law forbids humans from killing the Guanaco, but not mountain lions, or Pumas as they prefer to call them. We saw several carcasses – apparently the mountain lion will kill, eat some, then take a few of the good bits back to the kids. They may come back in a day or so to get more. Vultures or other smaller animals might have a snack, too. We also got a little biking in – that was fun – but the bikes were a bit rusty and it was super windy – made it quite a challenge. The day ended early with the standard shower, cocktails, dinner. After dinner everyone had some drinks, told stories, and played Jenga. It was our last night and it was bittersweet. Ok, not really, but i always wanted to say an ending was bittersweet. We had gathered everyone’s emails and promised to share pictures. Day 7 was another early departure – had to leave at 6:30am to catch the bus back to El Calafate. There was a little concern that Marlene might not make it back into Argentina since she didn’t have the correct print out of her Reciprocity fee – but it all worked out.

We arrived in El Calafate around 1pm on Sunday. Our hostel room was not great, but it was sunny and grassy out front and I laid down for an hour. That was very nice. Shayna did some work emails (she would spend at least an hour on her laptop each day for the rest of the trip. We also booked our glacier adventure for the next day – we decided to do the mini-hike on the glacier, which includes boat ride and bus. Then we wandered around town looking for dinner, ended up at an Italian-pizza joint (80% of all restaurants in argentina serve pizza or italian). Patagonia Lamb is supposed to be the best meat in the region, and as an avid lover of lamb, I was anxious to try it (never had lamb option in Chile). I wanted the Lamb stew special, but they were out, so I had lamb on my pizza instead. And it was sooo good. I also had a great local weisse beer. El Calafate is approved.

Monday was another one of my favorite days of the trip – seeing Porito Moreno Glacier. This was not my first time on a glacier – i walked around Franz Josef Glacier in New Zealand in 2007. But this one was visually much more impressive. Right up there with mountains as one of the most beautiful awe inspiring things on this planet. We had to pick up lots of people in Calafate, then 60ish of us made a bee-line to the boat, leaving the dock around 11am. We split into 3 groups, one english, two spanish, put on our ice cramp-ons, and climbed around the glacier for about 2 hours. At the end we had some scotch on the rocks, where the rocks where made fresh from glacier ice. Then off the glacier, off with the crampons, ate some lunch, and waited for the boat. On the other side we drove around to the parks main viewing center, and we had an hour to wonder around and see the glacier head-on. It was just so amazing. We were hoping that we’d get to see a big chunk of ice fall in the water, but no dice. Then we took the bus back to Calafate, where we had dinner at El Cucharon. I finally got my Lamb stew and it was deeelicous. Altho I might have enjoyed the lamb on the pizza a bit more. After dinner we did a little shopping and I bought Shayna a ring made from a local artist. Awwww.

Tuesday we had a flight to Buenos Aires later in the afternoon, so we killed time by going to Glaciarium. It’s a glaciar museum with a Ice Bar. We did both. The museum part was very well done, we covered it in one hour. perfect. Then we had a drink in -13 Glacio Bar. Back in Calafate we did some more shopping and headed to Airport. Our flight was uneventful and we arrived at our friend TJ’s apartment in the Palermo district of Buenos Aires. I tried to go out exploring but couldn’t figure out how to leave. Luckily we already ate and didn’t need anything. The next day i figure out that you have to touch the key fob to the special part of this metal box by the gate. Ok, i didn’t figure it out, somebody showed me.

Wednesday through Saturday was mostly sightseeing in Buenos Aires. Highlights include the paid 1 hour tour of Teatro Colon, the Buenos Aires Opera House.   We didn’t make it to Mendoza, Argentina’s wine country, but enjoyed wine tasting with Anuva wines, followed by an amazing Italian dinner. We also got a free english guided tour of Recoleta Cemetery where Evita is buried, followed that with Lunch at La Biela, a famous outdoor cafe that comes with a clown playing an accordion.  We saw a professional Tango Show as well as Tango in the streets of  San Telmo.

We walked alot around down Buenos Aires – in awe of the grandeur and humbled by protestors, squeezed in some shopping, bought shoes for shayna, and pants and shirts for me.  And many delicious meals, including an amazing middle eastern joint called Sarkis, our favorite cafe, Sans, in Palermo Viejo, which was about 20 minute walk from TJ’s apt where we stayed.  Last but not least, we had to eat what Argentina’s famous for – great steaks.  We hit 2 parrillas – La Brigada and Don Julio.  We both like Don Julio better, probably because we had meat more like a filet mingon.

In conclusion I’d recommend Patagonia to everyone who likes the outdoors, loves  to travel, or wants something awe inspiring.  It’s up there with my favorite mountains in the world – others being Sierra Nevadas (Yosemite or Kings Canyon), Rocky Mountains (Glacier National Park), and Himalayas (Lamayuru Trek), and maybe the Swiss Alps.  However, if you are watching the wallet, skip the EcoCamp and plan the W-trek hike yourself.  Make sure you check out all my “Best of” pics, either on flickr or in my facebook album (assuming we’re connected). If you’re daring, you can check out all my pics on flickr (635 in patagonia, 143 in Buenos Aires). Note that we whittled those 800ish pics down from 2,000.   The next big trip is Alaska – shooting for summer 2015.

Chicago Roots Down

September 14th, 2013

Back in 2008 Shayna and I moved from SF to Chicago. I ended the longest stint living in one spot – 13 years in the San Francisco Bay Area. The second longest time living in one spot was 11 years in Atlanta where I grew up. So when I left SF it felt like I was leaving home. I was always thinking in the back of my mind I’d return one day. Well, here I am, 5 years later in Chicago, and I finally accepted Chicago as home. We’ve decided it’s time to put some roots down and buy a house.

I still love California. I think I will always consider it home. The Sierra Nevada mountains may be my favorite outdoor place in the world, whether I’m snowboarding in Lake Tahoe or Backpacking in Kings Canyon. I’m always in awe. Besides the mountains, there are tons of other amazing outdoor options – Camping along rivers at the foothills, driving along the windy coast, Pismo sand dunes, Sonoma and Napa wine country, etc. And as a techie, there’s no place better to work – its like LA for movies, NYC for finance, and Washington DC for politics. And of course the people I’ve met over the years are really what make it home. The biggest group of crazy, goofy, smart, hard working, creative, people I may ever know. I was lucky enough to make some great friends and had more good times than I can shake a stick at (can’t shake them old sayings). I miss you guys.

Chicago gets better every day. There’s so much to love about this city, as long as you look. Thanks to burningman, I immediately found lots of people in Chicago that liked to get goofy, get creative, and get down to good music. Then there’s the obvious stuff about Chicago like how beautiful the architecture is, how big a city it is (feels so much bigger than SF and LA, only NY seems bigger in the US), how many museums, parks, and festivals there are, and how great the summer is. The summer really is fantastic. Really. Sure the winters can seem long come march, april, and sometimes may. But that makes the summer that much more delicious. And the tech scene will never be better than SF, but its getting better all the time, its a huge city, and my current job shows me that there are still plenty of exciting and challenging tech opportunities in Chicago. It still doesn’t have mountains close by, that will always suck, but there are direct flights from O’Hare to the Rockies. Just got to make enuf green so I can fly to the mountains for the weekend, like the way we drove to Tahoe on the weekends.

More specifically, it’s house time. Shayna and I have been through alot over the years and decided it’s time. Time for more room so we can do more with our lives. Time to customize stuff to make our lives better. Time to have a place that we can control and is ours to mold for us. The only question is, which house will be lucky enough to have the Norwoods? The first question our friends ask is where are we looking. Right now we have few constraints – in the city of chicago, but basically anywhere from Bridgeport (just SW of downtown) heading north as far as Lincoln Square. But more likely it’ll be closer to Logan Square (our current residence, which we LOVE), Bucktown, Humboldt Park, or spots ’round there. More important to us than the location is the house itself. But we are still early in the process, and even though we’ve made a prioritized list of what we’re looking for, we expect it to change after we start going to see more houses.

Oh, and totally unrelated .. we are planning a 2 week trip to Patagonia, South America, in February 2014. Hurray! Stay tuned for more Norwood Adventures !!!


New Job – OpticsPlanet

September 14th, 2013

After a year of contract work, I returned to full-time employment in May. I really enjoyed contract work, it allowed me to focus more on the technical side, spending a vast majority of my time coding and catching up with the latest technologies. That is something I had not done in years – most of my time previously was spent in meetings, working with coworkers, managing, dealing with clients, etc. I also enjoyed the enoromous flexibility in my schedule to take as much vacation as I needed – I love to travel, as you probably know if you’ve read this blog. And my third favorite aspect was working from home, which allowed me to exercise any time of day, to take long lunches as needed, and to work in concentrated bursts for days followed by taking it easy. Despite all that, I really missed working with people, so I made the decision to go back to the full-time world.

After 4 months of OpticsPlanet (OP) I can safely say I’m siked to work here. At first I wasn’t sure if I should take this job, mainly because it was in Northbrook. I’m a city boy, and wasn’t excited to commute to the Chicago suburbs. However, after interviewing around I realized OP had alot going for it. The company itself is uniquely positioned to keep growing fast as it has done the last few years. The software department works on all kinds of projects, dealing with vendors, internal tools, warehouse and order systems, and of course, the websites (my area of expertise). OP is still small enough to adept quickly, using the latest tools and technologies, plus they have lots of perks like flexibility work hours.

My job was initially supposed to be a mix of managing a team and being a developer (php and javascript), but management took all my time. I’ve actually been surprised on how much I’ve enjoyed this new challenge, I attribute my enjoyment to the people I work with. It’s a place where the better idea wins, which is huge for me – many places don’t want change (even for the better). However, there’s not always time to do everything the right way, and there is constant pressure to for the team to perform better, but that’s not unusual. In fact, we are starting to adapt more agile principles and I will be doing more of an agile coach role soon, which will be a new challenge.

Looking forward to growing my career, with the team, department and company.  Cheers!

Fluent 2013

September 14th, 2013

The Fluent conference this year was just as good as Fluent 2012 last year, and bigger and better in some ways. I still loved how at then end you walkaway realizing how popular, important, diverse, and interesting javascript still is. I want to echo what I said in last year’s post, that I love seeing javascript used to solve real business problems, but the conference was much more than that.

Here are some of my highlights from the few talks I attended out of the 80-ish talks across 8 Topics: Doing Business on the Web Platform, The Server Side, Front End Frameworks and Libraries, HTML5 and Browser Technologies, Mobile, Pure Code and JavaScript, The Leading Edge, Tools, Platforms, and APIs

Noteworthy Speakers

  • Paul Irish – Google Chrome Advocate / Wiz [Wed 9:45a]
    • Insanely fast with chrome and sublime.
    • Talked about workflow, similar to 2012 (editor, browser, etc)
    • Chrome workspaces (in canary) – maps local files to what chrome gets over network
  • Sylvain Zimmer (french guy, scraping sites) [Wed 4:15p]
  • Eric Elliot – Adobe – [Wed 5:05p]
    • Classical Inheritance is Obsolete: How to Think in Prototypal OO
    • npm install stampit (stampit on github)
    • Classes deal with the idea of an object, Prototypes deal with the object itself.
  • Ariya Hidayat – Sencha – [Thu 11:50a]
    • Code quality tools are very important for good software dev
    • Feedback is important: tools <–> engineer
    • CI server, build tools, editors, code testing, code coverage (istanbul)
  • Sarah Mei – Pivotal – [ Thu 2:35p]
    • Emphasized importance of team communication ==> good code
    • One study said biggest predictor of good code was (in order)
      1. team communication, more so than
      2. tech qualifications
      3. experience with code base
    • Great book (for js, too): “Practical Object-Oriented Design in Ruby: An Agile Primer” by Sandi Metz
    • Loves pair programming.  good speaker
  • Brian Rinaldi (Adobe Systems)
    • NodeJS is more than just server js – offers lots of command line tools: UglifyJS, Grunt, GruntIcon, JSHint and HTTPster
  • Nick Zakas
    • Say Thank You.   author of 4 books.  Good speaker.

Other Takeaways

  • Websites need fast page load
    • About 250ms is google’s max page load time
    • 1000ms is max time users wait before mental context switch
    • 2000ms delay on bing/google SRP made 4.3% drop in revenue/user (HUGE)
  • Improving page load
    • Tie performance improvement goals with biz goals
    • Test your site with google’s pagespeed
    • Render Above The Fold (ATF) ASAP – inline critical css, logos, so browser can render at least part of page fast.
  • SPDY
    • HTTP 2 today, avail in chrome, ff, opera (no IE), apache, node, nginx
    • Requires TLS (HTTPS)
    • Many big sites adopted in 2012: some google, facebook, twitter, wordpress, cloudfare
    • Really only need 2 domains to serve images (google says 10 images is enuf)
  • Refactoring JS – lots of tips
  • Games
    • asm.js is da shit (runs C code in js)
    • Brendan Eich (Mozilla) demo’d game “Unreal”, ported to js/html5
  • Google Glass
    • Android, like TV. camera, geolocation
    • Simulator on github, mirror API
    • Avail in 2014, $200-$600


Heroku, Node.js, Performance and profile_time

I’ve been using Heroku for about 10 months now, mostly with node.js. Recently one of our apps was using more web dynos than we thought it needed, so I looked into analyzing performance. I ended up writing my first node packaged module (npm) to solve my problem.

We have one Heroku app that is our main http server, using node.js, express, jade, less, and connect-assets to serve primarily html pages. This talks to a second Heroku app that we call our API server. The API server is also a node.js http server, using mongo as its database, serving json in standard RESTful way. The API server is fast – when the html server is under such load to need 10 web dynos, the api server can easily keep up with only 1 or 2 web dynos. My gut was asking me, are 10 web dynos necessary? And even with 10 web dynos, there were times when requests would timeout or other errors would trigger. Maybe some error or timeout has a huge ripple effect, slowing down things.

So the problem is not to just figure out where time is spent on any one particular request, but where time is spent on average across all requests and all web dynos for the html server. How much time is spent while communicating with the api server? doing some internal processing? or something else in the heroku black box?

The first step was educating myself on existing tools that could help me. We already use New Relic, which is awesome and I highly recommend it to anyone who uses Heroku. At the time New Relic support for node.js was still in beta (still is as of this writing), and one the features supported in other languages (like ruby) is the ability to use a New Relic api to track custom metrics. I thought this would be a great way to track down how much time, on average, is spent in various sections of our code.  Too bad it doesn’t work with node.js.

I considered other tools (like these) but the only one worth mentioning was nodetime. For us, nodetime was somewhat useful in that it offered details at levels outside of the application, such as stats on cpu, memory, OS, and http routing. This did not appear to solve the problem (I admit i didn’t read all their docs), but did provide some insight and some validation that things are setup as they should be based on documentation from Heroku and Amazon (Heroku runs on Amazon EC2).

However, nothing gave me what i needed – a high level way to see where time is spent. So I built profile_time (code on github). Here’s a description from the docs:

A simple javascript profiler designed to work with node and express, especially helpful with cloud solutions like heroku.

In node + express environment, it simply tracks the start and end times of an express request, allowing additional triggers to be added in between. All triggers, start, and end times are logged when response is sent.

Where this shines is in the processing of these logs. By reading all logs generated over many hours or days (and from multiple sources), times can be summed up and total time spent between triggers can be known. This is useful when trying to ballpark where most of node app time is spent.

For example, if 2 triggers were added, one before and one after a chunk of code, the total time spent in that chunk of code can be known. And more importantly, that time as percent of the total time is known, so it is possible to know how much time is actually being spent by a chunk of code before it is optimized.

In conclusiion, jade rendering was the culprit. More specifically, compiling less to css in jade on each request was really time consuming (around 200ms per request, which is HUGE). To summarize the jade issue:

!= css('bureau')

link(rel='stylesheet', href='.../bureau.css', type='text/css' )

Overall I am impressed with Heroku and am quite pleased by how easy it is to creatie, deploy, and monitor apps. Most of my apps have been in node, but also have run php, ruby, and python on apps as well. Heroku is not perfect, I would not recommend for serious enterprise solutions (details on that in another post). It’s great for startups or small businesses where getting stuff up and running fast and cheap is key.