Okay just one more post (before the content switch-over)

Things have been…hectic. In a good way. The long promised switch-over will happen soon-ish.

In any case, several people have contacted me and detailed difficulty in getting in touch. I can be reached at dforbes@yafla.com.

As a disclaimer on the post about office space (and this is true regarding virtually any post on subjective things): I’m not presenting my current criteria as better, superior, etc. There was a time in my life where my favorite office was on a major highway on the edge of the city in an industrial park. The neighborhood was dreary. There was absolutely nothing to do, and the single food option was the office complex food court. It was right for that time in my life when I wanted to get in, do the work, and get out. I’m in a situation now where my criteria is a bit different — not better or worse, just different — and I look for different things. Detailing that was just casual conversation patter and not a judgment on workplaces. The world is an endless number of shades and needs.


Last Post Before the Switchover

A few final updates before I switch over the content of this site (a topic that I’ll detail later in this piece).

Life has kept me very busy so it has been delayed a bit.

The Office

Recently I’ve been spending some time looking for office space in the limited time between project work. Not only do some engagements and situations benefit from it, I’m seeking more frequent changes of scenery and dynamics, and an ability to handle growth.

Office space is a fascinating, deeply subjective area where the things that should be prioritized vary dramatically for the person. In this case I’m able to decide based upon my own priorities, while considering future peers.

Commute and accessibility. Dynamics of the area. View. Neighbours. Coffee shops. Restaurants. A bakery and maybe some grocery options to grab a couple of things before heading home.

Commute matters a lot to me. I once spent a few years commuting over an hour each way and it was a trying experience. This varies dramatically by the person, with some enjoying that part of their day. I do enjoy the peace and quiet of a drive or a trip on the GO, listening to select music or podcasts, etc. It can be a nice daily time out.

An hour each way is just way too much, however, leaving too little of the day remaining.

imageaday 2018 08 17 by Dennis Forbes on 500px.com

Dynamics…for a few years I worked in the core of Toronto, in the heart of Bay street. I spent lunches eating street food (miserable choices in Toronto) at Nathan Phillips Square, trying out restaurants, walking down to the waterfront, etc. I enjoyed it, but it quickly grew less novel. I learned that there’s a bandwidth beyond which additional options have a declining value. The same working in NYC. I love both cities, and if my life had me living there of course I’d love to work down there, but when it necessitates a grueling commute the payoff isn’t as worthwhile.

Given a giant plate of options and we winnow down to a tiny set of food options. A tiny set of coffee options. A tiny set of relaxation options.

For that reason I’m fine being in an exurb town. It has future growth potential problems given that it would require commuting from the broader area (though I am a big believer in telecommuting, with the office being an occasional converging point or option for others — the exception and not the norm), but that just isn’t as limiting as it once was.

But I want to be in a dynamic area, and am limiting my choices to those options. Where there are a number of lunch and coffee options. There are areas to run, or bike, or just sit at a park, and there are libraries and other public gathering places within walking distance (whether for hosting or participating in a workshop, volunteering, etc). Where there are layers of access options including buses.

I’m also limiting to an area with a view of something. Not a gray highway. Not an industrial wasteland. Some sort of interesting view.

There are a good number of options across the area, in the various nearby cores. It has made the choices more difficult than I imagined.

On How This Site Will Be Rebuilt

While the revised blog engine is still built in Go (with autocert, utilizing HTTP push, and a panoply of “cool shiny things”), I am going to abandon the blog format and its trappings.

No RSS. No feigned promise of regular updates.

No easy thought or opinion pieces that I too often resort to.

Instead just technical, “long form” pieces, each of which I’ve spent considerable time on.

I already have a number in various states of completion, each of which it felt like a waste intermixing with various facile passing pieces, or in the blog format where there is an implied time-sensitivity to the pieces.

Image A Day - 2018-08-14 by Dennis Forbes on 500px.com

I have a piece on height mapping a property precisely with smartphones. Another related one on 3D representation of OpenStreetMap data with public elevation data. Another on a greenfield deep learning implementation. Another is just an interpretive, and arguably artistic, expression on technology.

And I’m just going to wash away every prior entry. It is a new slate. An about, a page of opinions, and then an index of long-form technical pieces that I’m proud of.

That transition is coming soon.

I absolute adore the people who I have as readers, and hope you enjoy some of the new pieces.


The Go-based Web Server

Every now and then I begin a project with little practical reason: There are existing, better alternatives; it doesn’t have a rational return for the time spent; etc. But I do it just as a diversion from other projects, particularly if I’ve been drawn away from a realm for a bit.

In this case I’m switching the presentation server of this blog (among other web properties) to a Go-hosted, protocol-buffer-persisting, in-memory SQLite-using minimalist server. Still edited and published from WordPress, but wholly detached from WordPress on the authoring side (on a hidden private server, pushing to the minimalist server side). I’ve gone through a number of blog engines over the years, including several custom built, and in this case it is a fun diversion to play around with HTTP Push and a few other techniques I’ve been curious to build around. I’ve delayed a couple of technical pieces until I publish it through that, with the first iteration hitting in the next couple of days.

My technical life otherwise lately has been primarily in deep learning, having been pulled into it for professional reasons. It has been amazingly rewarding — my favorite tasks are those that expose me to a lot of things that I don’t know — but I do like to expand out on occasion. My first iOS app release (e.g. wholly my own work, and not a contribution to another project) is imminent as well, so that should be fun.

So that’s a lot of coming soons. Coming soon!

The Mysterious Redirected Web Request

I was sitting at the kitchen table working on a project a while back when a commercial came on advertising “quick-cook weekday eggs“.

It’s an ad campaign from the egg farmers of Canada (this country uses supply management for the primary staple type items — cheese, chicken, dairy, etc — which means each has fairly robust advocacy groups and has a healthy state without enormous agricultural subsidies like you see in the US), presumably to remind people that eggs are a speedy cook even when time is limited.

I was curious if they really sold egg cartons with this weekday branding on it, so I pulled up Google and typed in “weekday eggs”. It suggested the autocomplete of “weekday eggs real” and to satisfy my curiosity if people really wondered, I chose that.

The top link was to “Introducing the new Weekday Eggs – Cossette“, a non-TLS http result on the responsible ad agency’s website. I clicked it.

I was greeted with a “YOUR FIREFOX BROWSER IS EXPLOITED” etc page. The classic scam page with blinking text, bold colours, and alerts on navigation exhorting you to pay for a solution.


I kill the tab and go through the process again but this time I get the ad agency site. In many recreations of this process I’ve never gotten the scam page again.

Paranoia rises. What was the source of this misdirection? Was the call coming from inside the house?

I immediately began an audit every piece of software on the laptop (Firefox itself being the latest, with a very minimal set of add-ons including uBlock Origin), then evaluating anything that could possibly be intercepting HTTP traffic. I am very cautious with the software that comes into my life so it’s a fairly achievable audit.

The laptop is a Lenovo Yoga 720, from a company notorious for their Superfish debacle. Could some of the laptop software be responsible for periodically intercepting legitimate connections? A thorough analysis, including with targeted debug sessions to see the entire call stack from Firefox through the operating system, seemed to exclude this possibility.

Then I had to look at my Asus Router (VPNFilter is making the rounds and while my router is behind a router is behind a router, there is always a possibility), and then to the cable company provided router. Did either of those interfere with normal traffic? I set up web tests to load a variety of HTTP resources around the net, verifying it for adulteration, logging every redirection.


I have no answers. This mystery pervades.

And in the end it could be malicious software on the other side. The site seems to be hosted on a bank of IPs that feature a number of other basic static sites, and it could be a shady revenue scheme to redirect a low enough percentage of requests that it could always be attributed to other things and waved away. At this point that seems the most likely scenario. Either that or my internet provider, or someone in between, is interfering with traffic.

So this post has no payoff in the end. I just had to document a mystery that still bothers me, returning to my mind-space more often than it should. It reminds me why TLS everywhere is so critical.

Yet More Bits and Bytes

Again I must offer apologies for the lack of real content. It has been an exciting, busy period. Many of the pieces I’ve started over the past few months still sit in a draft state.

As one change, I recently updated my work laptop to a Lenovo Yoga 720. I don’t normally post about random hardware, and certainly have never mentioned the procession of laptops that preceded this one, but I simply love this laptop. I’ve always viewed my laptops as a poor alternative to my desktop when the situation absolutely demands, but this is the first laptop that I actually want to use (and the first that offers a battery life remotely approximating its claims). Outrageously fast 1TB SSD (1.5GB/s at times, and of course ridiculous random access times), i7, gorgeous 4K screen, and work-day long battery life. Most importantly, given a lot of recent work I’ve been engaged in, it has a GTX 1050, allowing me to pound out some convolution neural networks on it. 2GB of GPU ram limits the scope of the network, but still offers extraordinarily opportunities to hash out a lot of solutions that I can then move to the less portable Titan V. I don’t even use the convertible or pen functionality, and very seldom use the touch screen, though they came along for the ride.

The one real weakness of the 720 is that its Thunderbolt 3 port (e.g. through the USB C connector) only has 2 PCI-e lanes, or about 16 Gbps of bandwidth if my recall is correct. I contemplated putting the Titan V in an external enclosure and tasks that are heavily bandwidth bound could be limited by this. For gaming this restriction is unlikely to be relevant, but it could come into play for workloads that need to constantly move working data to and from the GPU. I do plan on benchmarking it at some point, as having the GPU external from my desktop is ideal for both flexibility and heat dissipation.

The Titan V is simply outrageously powerful, on that topic. Whether double, single, or half precision, it is incredible for classic networks and scientific or financial uses, but add in the Tensor cores and it reaches extraordinary heights. An incredible processing value.

To continue this diversion, it is astonishing how absolutely AMD has screwed up their opportunities in the deep learning and even scientific community. OpenCL is an afterthought, and everything, it seems, is built only for CUDA. They tried a final minute hail mary with HIP, but clearly gave it too little resources to really make it credible. It will be interesting to see how they try to recover — competition would be good for everyone — but as is it’s an nvidia world.

Other than that, I solemnly promise to get a couple of technical pieces published shortly. Swearsies. And they’ll be great.