Johnathan.org

June 9, 2016

Starbucks Coffeehouse Playlist

13413604_10206144656807181_2769894144566463025_nYou have to kind of care about Starbucks and coffee shop-type music but this morning I strolled into Starbucks and when I went to pay with my Starbucks card via the app, I was able to get the playlist for the music being played at that location.

Turns out, it’s a substantial one, too. Starbucks has a 559 song (at time of writing) playlist on Spotify. To get a better idea of the size, I marked the playlist to be available offline. Using a completely non-scientific measurement of free storage on my system, the playlist occupied just under 5GB at 320kbps quality (Extreme, as Spotify calls it).

As time passes, I’m finding my music tastes shifting in the casual sense. This might just push them over the edge. I’m also getting closer to 30. I wonder if they’re related…

June 5, 2016

That’s Not How this Works

Alternate Title: Grape Juice and Anuses.

For part three of my International Beverage Bonanza series (also check out parts one and two), we’re taking a trip to South Africa for one of the selections in the ’tiser series: Grapetiser.

Gracing it us with its presence is a 12oz can, also the size of the middle-sized Red Bull. It comes from Coca-Cola Shanduka Beverages, It’s tall and narrow compared to a typical 12 oz can that’s a bit more squatty. It’s not inherently a Coca-Cola product as Coca-Cola purchased TJC Holdings in 2006 and became CCSB. Grapetiser came about in 1981 in both red and white grape variations. I’m taking a look at the white grape version.

Presentation is subdued and lacking a bit of class. I can’t tell what market this is for: fancy or convenience store? That’s about it for the gentle stuff because what lies beyond is… well you be the judge.

I had super high hopes for this drink. I love grape juice and I love sparkling beverages, but this just wasn’t good. I’m not sure what they did to it, but the inital taste was sweet (good), transitioning into tart (also good), then a butthole (yeah…).

Not sure what their standards are in South Africa but if @$$ is on the menu, I’ll go ahead and skip it. I triple checked what I bought and it wasn’t expired. I even tried another can and got more of the same (yeah, I bought a six-pack of asswater).

If you’re reading this and thinking “oh he’s just an American that drinks HFCS all the time, he doesn’t know what he’s talking about.” My response is that before you kindly leave, note that I’m not a huge fan of HFCS. Just about everything I drink doesn’t contain it, anymore, unless I can’t avoid it. I bid you good day.

For those that stayed, please don’t waste your time on this one. In a future post, I’ll cover another -tiser, Appletiser, but being 0-1 on this line doesn’t give me high hopes.

Taste: 2/10 – I’d give it zero points but the inital taste was quite good… nowhere close enough to cancel out the sphincter tinge.

Presentation: 6/10 – The packaging is decent but for a drink that looks like it’s branded as a higher-class beverage, it could be a bit less muted.

Desire: 0/10 – If someone handed me a can of this, I’d throw it at them… hard.

May 29, 2016

Constantly Improving

While I cook my dinner this evening, I want to write to you very briefly about an experience. It doesn’t have anything to do with technology, but does have everything to do with learning.

I like to consider myself an amateur-1 golfer. I don’t know what my handicap is because we’d be there all day trying to figure it out. It basically comes down to the fact that I can hit a ball in a forward direction all the time, and where I want it to go some of the time.

Maybe amateur-1 is a bit gracious. You won’t see me on the Golf Channel any time soon.

So you’re probably wondering: “if you’re not very good, what does this have to do with learning?”

Everything. See, I used to not be able to hit the ball at all, as in zero out of ten times. In what’s amounted to roughly a total of 16 hours of practice overall, I’ve made great strides in my golf abilities and I think there’s a key to it, something I learned while reading The Talent Code by Daniel Coyle. I won’t give the book away but the key here isn’t any special regimen or long hours of greuling practice. It’s repetition. If you want to know why, you’ll just have to read the book.

See, every time I go to the range, I practice maybe 30-45 minutes. I’m a computer guy, so my physical fitness right now wouldn’t allow for much more than that, anyway… that and my mild scoliosis always likes to make fun things involving slightly awkward back positions less fun.

The physical part is getting easier, and so is the consistency in my swing, without golf lessons. Granted lessons would definitely help me improve the finer motions, but I think it definitely goes to show that plain old practice works wonders.

I will have to work on the physical strength if I want distance, but I’m incredibly happy with how far I’ve come, on my own. If I ever had to leave the tech industry forever, I’d become a pro golfer. With enough quality practice, I might just be able to say that with real confidence.

May 28, 2016

Blogging, Statically Speaking

The concept of blogging using a staic site generator isn’t news. People have been doing such things for years, now. There are fantastic static site generators out there (Jekyll, Hugo, Pelican to name a few) and all have their unique features, quirks, and ugh moments.

I wrote a post a wrote a post a while back about moving over to Jekyll from WordPress. Within a couple weeks or so, I had moved back. I never posted why, but the reason boiled down to the generation time. It took Jekyll upwards of 90 seconds to two minutes to generate every time I wanted to updated something–anything, really. New to Jekyll 3, the --incremental argument didn’t do anything and I wasn’t comfortable leaving Jekyll running in --serve mode in the background.

Needless to say my views on running this blog with a static site generator are a little jaded. Recently the idea of using Hugo (written in Go) was suggested and I gave it a whirl. Go was wasy easier to set up and get running. I also found myself looking at several front-end UIs that can be bolted onto Hugo so I don’t have to edit .md files all over the place then work out some git magic to push changes and have them be re-deployed.

There was one component that I just couldn’t get into this potentially new workflow, though, and that was integrating any of my writing apps without having to also introduce manually saving an editing. I use Desk for writing my blog posts, including this one, and it does a killer job. Within a few clicks, my post is live and I didn’t have to git push a damn thing.

Really it seems as though I’m torn. I like the idea of speed and simplicity. I like the idea of not having to maintain a MySQL database and PHP. I don’t like the idea of trading that work (something I’m already super familiar with and have down pretty well for my needs) for a different kind of maintenance. I can deal with maintaining a server, but if it takes more than minimal effort to get a blog post up, I’m not sure I’d be interested in the alternative.

Did I mention the migration? Never have I ever had my 270 something (as I post this) posts all move over without at least moderate tweaking required. At this point, the amount of effort required to transition would negate any savings. And I’m kind of lazy.

I doubt I’m the only one that feels this way and I’m sure there are a ton of other ways to go about solving this problem. I might never go back to a static site generator, again, and I’m ok with that. If WordPress becomes faster, hooray! If it is no longer written in PHP, I’d feel even better about it. In the meantime, I’ll continue doing things the way I’ve done them since January 2015, almost 18 months ago.

The CDN Contemplation

About four weeks ago, I bolted a CDN to my blog. The goal: what kind of benefit would I, someone who receives a small but steady stream of traffic, get from such a technological underpinning?

This CDN is nothing fancy. Powered by MaxCDN, It takes my site assets (CSS, JavaScript, and images) and tosses them around the world to their edge servers. In exchange, I can load said assets from cdn.john.ly and an origin server shall provide.

What is a CDN, really?

A content delivery network or content distribution network (CDN) is a large distributed system of servers deployed in multiple data centers across the Internet. The goal of a CDN is to serve content to end-users with high availability and high performance. CDNs serve a large fraction of the Internet content today, including web objects (text, graphics and scripts), downloadable objects (media files, software, documents), applications (e-commerce, portals), live streaming media, on-demand streaming media, and social networks. (https://en.wikipedia.org/wiki/Content_delivery_network)

The short version of that is all the files that need to load fast are put on servers as close to as many people as possible. Example: This site runs on a server in San Franciso, CA. That’s great for people like me who live nearby. Also great for those who live within roughly the same country. This isn’t so great for a person in South Africa, Ireland, or Russia. The amount of time it takes to load all the fun bits is greatly increased as physical distance also increases.

Costs

I run this site with little to no overhead. I pay the price of four fancy cofffees from Starbucks every month to Digital Ocean for the virtual server. With static page generation in place, the site already uses little resources, so I don’t expect it to increase anytime soon. MaxCDN starts at $9/month for 100GB of transfer. For anyone running a blog on a small scale, you won’t hit 100GB a month. I promise. There’s no free plan but there is a free intro for a month.

Beyond that, if you want to add an SSL certificate, you have two options: SNI (free) or EdgeSSL ($99/month). For the small blogger, EdgeSSL (which comes with an IP and SSL certificate) is overkill. SNI is a feature of the TLS encryption protocol pretty much the entire secure Web runs with that allows a client (browser) to tell the server which hostname its trying to connect to and the server returns the right SSL certificate. From there, the whole rainmaking SSL handshake dance commences. Naturally, I opted to take the SNI route but in return needed to provide my own SSL certificate.

Why an SSL certificate? If your site is served over an HTTPS connection and you start loading a buch of assets that aren’t served over an HTTPS connection, some browsers are going to barf. Best case scenario it’s mildly annoying for the visitor and worst case, those assets never load. That fancy font you have is useless.

I picked up a year-long SSL certificate for ~$9 and change from Namecheap. I used to use them for my domains (and have since moved to Hover) but their SSL offerings are great for the little guy. Now we’re up to $9 out of pocket to start and $9/month.

Beyond those two costs, there wasn’t much else I needed to pay for. I spent a few hours poking at MaxCDN’s interface trying to get them to accept my SSL certificate, only to find out I was giving them part of the certificate for cdn.john.ly and part of the certificate for john.ly. A copy and paste mistake that their UI did a terrible job of alerting me to. All I got in return was a vauge Internal Error message and support wasn’t much help in decoding it. By the time they got back to me, I had figured it out.

Implementation

This is something that’s likely news to zero people. This site currently is run on WordPress. The quickest way to implement a CDN on WordPress is via a plugin like WP Super Cache. It takes two minutes and boom, you’re CDNing all over the place. When setting it up for the first time, there’s no cached resources on the CDN servers, and that’s fine. The most common type of CDN is referred to as pull. On first request (say to https://cdn.john.ly/stylesheet.css if that actually existed), the CDN figures out it doesn’t have that so it redirects to https://johnathan.org/stylesheet.css for the visitor and fetches a copy onto which it will hold until further notice. Usually this notice is once every X hours or days. After that period of time, the files it has “expire” and on the next request, the process restarts.

The downside to this is updating such resources locally while making changes to the site. If I were to, say, update the size of my post titles locally, and did nothing else, it wouldn’t be obvious until probably tomorrow. This is where force purging the CDN’s cache comes in. All CDN providers have this option and it’s super easy. Within a couple minutes everything is fresh, again.

So was it worth it?

That’s hard to say. Given I don’t serve a ton of images, I didn’t use much in the way of CDN resources (a bit over a GB). Even at $9 per month, I don’t think the benefit was great enough. That said, the service itself was pretty good. It was easy to set up (sans SSL, and if I was paying closer attention, that wouldn’t have been an issue, either). At this point, My traffic would need to at least quadruple before I think about re-introducing a CDN into the mix. Either that or a free tier that I can upgrade from easily (or pay as I go per GB like Amazon Cloudfront).

Should I go for it?

If you have a good amount of traffic and or are looking to decrease bandwidth usage on your primary server(s), it’s worth looking into, for sure, and MaxCDN is my favorite. If you’re at that point where you’re serving mid-double digit GBs per month, it’s hard to argue with $9/month and you’ll probably see an improvement. If you’re serving a lot of photos or videos, then I would definitely look into it. People have zero patience, these days.

Disclaimer: some of the links in this post are of the affiliate nature.

Johnathan Lyman
Kenmore, WA,
United States
 
blogging, design, technology, software, development, gaming, photography