isn't quite ashamed enough to present

jr conlin's ink stained banana

:: How to do Vacation Right: Be Privileged

Because the web is a structure that leads to random, unexpected places, i wound up reading an article talking about “How to do Vacation Right“. It’s kinda long, but here, let me summarize it for you:

  1. Be an Orphan.
    This is surprisingly useful. In truth, what you really need are no discernible ties to any form of family. No elderly parents to visit, no nieces having significant life ceremonies, nothing that might result in you having to schedule any of your precious two weeks time off on a pull out sofa somewhere in South Dakota. Screw ’em all, you’re going to spend the total of your time in Bali.
  2. Work at a job that’s mundane.
    This is also critical. Otherwise, you’d realize that you’re part of a team working at a frantic pace just to keep up with competition or to deliver a product that has a massive dependency graph. i mean, yes, you had to schedule this time off six months ago because that’s when you found out your widowed Mom’s knee surgery date, but hey, “It’s a vacation”. It’s not like the project will rapidly change in the course of a week considering that there’s only 12 weeks to design, code, test, fix, document, package and release it. i mean, sure, while you’re at work you’re putting in 60 hour weeks to meet that goal, i’m sure the other two folks on your already tightly constrained team will carefully note and document everything for you, and give you the time to get “back up to speed” come Monday after your red-eye.
  3. Don’t be a useful asset
    Here’s a fun one! Send all your mail to the archive while you’re away! i’m sure that there’s nothing important from bosses, customers, employees or anyone who might be seriously blocked that might need your attention. They’ll be totally understanding when, after two weeks and things have gone from “being on fire” to “smoldering piles of ash”, they wonder why the <expletive> you didn’t answer their plea for help because “You needed to unwind”. Granted, the company lawyer may also disagree, but hey, i’m sure his mail is in your archive too.
  4. Be Unreachable
    Sometimes, being useless takes extra effort that puts you right into the “arrogant” category. By being completely “off-line” your also totally unreachable. You might be the only person who could fix a critical problem, but those Mai-Tai’s aren’t going to drink themselves. With any luck, most of your desk will still be in the box when the foreclosure folks pack it away.
  5. Be a white upper class guy.
    Let’s face it, if you’re packing up for a 7 week vacation from your position as a CEO for some tech startup where you plan on being “off-line” and completely unreachable from the company you supposedly oversee, you’re privileged, and have probably been privileged for quite some time. Good for you!

Granted, for the rest of us, the way we do vacations is probably “make the most of the three or so hours you get away from screaming family or crowds to grab a nap somewhere”. That or convince your sister’s family that you’ve got a business call you have to make two days before you go back to work, so you can have a day to do laundry and buy groceries for the week, and another to drink yourself at least one good night’s sleep.

:: iFiefdom

Who the hell thought this was a good idea?

Imagine you had one key. Just one. One key to open your house, run your car, store your bike, get money from your bank, everything. The key was fairly special, obviously, and tied to you. It would be super convenient, right? Now, you’d probably want to protect that key, too, since it’s the one thing that unlocks everything that belongs to you, but since you use that key for everything you have to keep entering in your password all the darn time and it’s so hard to get to the “special characters” on your phone’s screen and your password shows up as “***********f” anyway so you can’t remember if you typed in “☃” at the correct spot and…

So you use something like the street and zip code for where you were born.

Needless to say, a LOT of folks are very interested in having that key too. It could be folks looking to steal your stuff, folks looking to see if you’ve stolen stuff, folks who just want to look, and folks who want to pin their looking on you. All sorts of folks. They might demand that you give them that key at gun point, or check point, or they could steal the key from the main server, or one of the places you used it to buy stuff, or unlocked some of your stuff, or even just make a copy of it by taking a picture of it and spending the time to cut the grooves right.

Suddenly, someone who you said should have access to one thing, now has access to everything. Heck, it might not even be the fault of the person, it could be that they were attacked and got copies of lots and lots of keys, yours just being one of them.

Having One Key is convenient, but also a HUGE LIABILITY.

Right now, you don’t have one key. You’ve got dozens. You have passwords for your bank, a key for your car, a PIN for your bank cards, a key for your house, etc. Granted, if each of those were a physical key, you’d fit in with any New York super, but someone stealing one of those keys isn’t going to ruin every aspect of your life.

So, again, who the hell thought that having one key is a good idea?

Apparently, Apple, Microsoft, Facebook and Google do.

Each of those companies are currently hell bent on getting you to put all your worldly possessions under their control. They want access to your banking, your car, your phone, your home, you name it. And all of this would be controlled by your account with your Digital Overlord of choice. And yeah, since you’ll be entering in that password in dozens of “interconnected” devices you’re going to use as crappy a password as you can tolerate entering.

Oh! And i nearly forgot! There’s one other fun fact about this upcoming future.

If, for whatever reason, you fall out of grace with your Digital Overlord for whatever reason (missed payments, said naughty things about them, used a competitor once while on vacation, tried to fix something, etc.) they can terminate your account, effectively freezing you out of all of your “stuff”. It’s their stuff now, they control it. They just granted you temporary access, you peasant.

Welcome to the future!

i’ll be hanging out with Blank Reg.

:: Corporate Tribes

Humans are tribal by nature. This goes back to when we picked fleas off each other, avoided growly things with big teeth and had to protect our scarce stash of berries from those bastards down the hill. It is something deeply ingrained into our psyche since it’s the product of millions of years of evolution.

So, it’s kinda natural for us to think little of the Server team or not be quite as inclined to go hang out with the Client guys as we ought to. This, of course, is horrible.

The reason why is that we have a new skill that didn’t exist 100,000 years ago, we have communication. It turns out that collaborative communication tends to get us a lot further than clubbing others over the head. You can establish trade with communication, share and improve ideas, offer insight and learning, and lots of other stuff that will get you a lot further than a scrawny bush full of berries.

Communication is so powerful and rich a medium that some seek to treat it like that crappy berry bush and tightly control it whenever possible. These people are backwards jerks, but again, they’re simply reacting to what’s hard wired into their genes. So, i won’t blame them for their actions so much as i will blame them for not getting past their primitive selves. You should try living in the future. The berries are better.

Ok, all that is a rather long way to go to point out that in companies, we still have tribes. Call them groups, or business units, or verticals, but essentially they are tribes. These are tribes within a tribe (providing how hard wired we all are). In some cases, tribalism is encoded into the company and Team X is commanded to never talk to any other team. This makes Team X feel they are special and superior to all the other Teams, which is like saying 8 is obviously better than 17 with no further context provided.

Granted, it doesn’t help that my industry is full of folks that tend to be more introverted than anything else. Many work from home, which makes them outliers in the tribe. Some work on different projects or feel that someone else’s contributions aren’t “the same quality” as their own. (Again, arguing that 5 is so much better than orange that i am obviously blind.)

So we divide ourselves up into tribes. This is normal. Heck, there’s a course i’m taking that is dividing people up into tribes.

The problem is that tribalism doesn’t always lead to cooperation. Tribalism re-enforces the inner ape’s competitive nature. That re-enforces our nature to see those that are not of our tribe as “the outsiders” or even “the enemy”.

So, how do we best avoid that sort of trap? We’re simply not going to be able to say “Ok, everyone, no sub-tribes! We’re all here as one tribe!” No matter how stirring a letter from the CEO, it’s not going to reprogram our DNA. Familiarity between tribes helps, though. If you can identify a given member and associate no threat, or possibly some other form of common allegiance, then you’ll have an easier time. Heck you could follow the old tribal mechanism of colors by giving members a t-shirt, or sticker they can slap on their laptop as a tribal insignia. A token like that can help indicate to members that “i’m one of you. i’m on your side.”

i’ll also note that this sort of thing is critically important for remote members of your team. They already feel excluded and isolated, so any form of membership you can provide (or that they can latch onto) is going to be far more precious than folks working “in house”. This is also one of the reasons that team changes (or change in tribal leadership) can be so damn disruptive. It may make sense for a new leader to “realign the synergies of the meta-org” or whatever before they drop the org chart in the blender, but your inner ape is going to be most sensitive to who your boss (and your boss’ boss) are.

But how do we address the tribe problem? It might be useful to not try to constantly re-enforce the negative elements of it. People will organize as tribes, but recognize and reward cooperation. Foster “trade” among the groups rather than highlighting just accomplishments. People are divisive enough. There’s no need to encourage it.

:: Why The Commenters on Hacker News Are Terrible Engineers

CNN published an article a bit ago talking about Silicon Valley’s Poor. It’s a look at the stark reality of where i live and how hard it is for folks who don’t happen to be fortunate enough to be working in the current, hot industry. The article is really well done, and while i don’t agree that rent subsidies are the right approach to the problem, the bulk of the article makes a stirring case.

So, it was no huge surprise that it showed up on Hacker News, and the comments are truly depressing. Not just because they’re full of the usual self centered, overly superior viewpoints that make reading comments there sad making (really, if you don’t want to get into the same sort of spittle fueled rage i’m in, don’t read the comments), but because they fail for one very simple spectacular reason.

They show how bad these guys are at even understanding complex systems.

First off, let’s run a few numbers, shall we? i mean, i’m an engineer, so before i start a conversation about a given problem, i want to make sure i understand the scope and scale. That’s what being an engineer is about.

First off, let’s look at the population. Silicon Valley comprises of the southern portions of the Bay Area. The counties are Santa Clara (from Palo Alto south to encompass Gilroy and east to cover Milpitas) and San Mateo (up the peninsula to San Francisco. i could easily argue that it includes portions of Santa Cruz (to the south toward the Ocean) & Almeda (which covers the eastern Bay Area), but those are partial at best. i could also argue that San Francisco is part of this as well, since a vast majority of folks live there and commute, but those numbers are immaterial to the conversation at this point.

The population of those two counties works out to be 2,699,483. While the total population is not employed, it’s fair to say that because of the high number of bachelors, it’s fair to factor out 30% of the population as being non-job holders (retired, children, infirm, etc.) It’s also fair to say that the Census is not fully accurate either, so there’s some fuzz here, for sanity, we’ll say the working population is two million.

Working off the number of employees for the top companies in Santa Clara (plus google and facebook because, really? they’re missing?) gives about 756,000. Mind you, that includes big hire numbers like HP, Intel and Lockheed Martin which do NOT have their entire workforce located here, but should cover the countless “startups” and smaller companies like SmugMug, Imgur & NetApp. So, figure 40% of the employed here work for high-tech. Figure another 200,000 folks work in equally high pay positions like patent attorneys, doctors, financials and you’ve got about 50% of the population working in “High Pay” fields.

Monthly rent in the two counties is about $2,650 a month, meaning $31,800 a year, just for housing expenses. If we say that weekly living expenses are $100 (for things like food, clothing, internet access, fuel, utilities, commuting, etc.) are a conservative $200 a week, that means that total cost of living is about $42,000. Now add tax to that (~30%) and you’ve got to earn a minimum of $55,000. That means that the minimum wage for the county has to be around $26.50 an hour. (Living Wage notes the number at $12.01 for Santa Clara, so i’m being VERY generous here.)

“No big deal”, you say. “i earn more than that.”

That’s because you’re special, but remember that you’re less than half the work force. There are more folks cleaning yards, checking your groceries, picking up your trash, teaching your kids, cooking and serving your meals at restaurants, driving trucks to supply businesses and all the myriad of things you need for a society to function. They’re not making $26.50 an hour. They’re making a lot less. i’ll remind you that minimum wage in Santa Clara is $8 an hour.

“So, they should move out of the county!”

Ok, sport. Let’s say they do. Well, San Benito County to the south has Hollister, where rent for a 2BR apartment is $1,200 a month, plus a 1+ hour commute. Tracy, out in the valley is also about $1,200 with a 1+ hour commute. (These commutes go up SIGNIFICANTLY during rush periods, so we’ll double the commute time to 2 hours one way.) That means that folks have to spend 4 hours a day in their car just getting to or from work. Mind you, a lot of folks are doing just that, so there’s not a lot of jobs out in those parts, so yeah, commuting isn’t really avoidable. So, your fuel costs just went up, as well as car maintenance costs. After all, car breaks down and can’t go to work? Well, you’re not getting paid that day, bucko.

Oh, yeah, and God forbid you have kids. It’s not like you can lock them in their cage for the day and call the neighbors to go feed them if you’re running late. (Granted, we’re talking about valley engineers here, so breeding is probably not going to be a major concern.)

So much for saving money, huh?

Granted, i’m not a social engineer either, so i have no clear answer to this. i will note that there are dozens of empty office parks in Sunnyvale with new ones going up all the damn time. Getting some of that zoned as Commercial/Residential would help increase available housing driving the rents down. Likewise, putting some of the acquired wealth in the Valley toward improved infrastructure and better mass transit would make the place a helluva lot better than putting another damn McLaren or Telsa on the roads around here. i also think it’s high time we up the minimum wage around here to $12 and put in rent caps. i’ve seen that apartment that’s “a deal” at $2,000 a month. You painted it last century. You’ve made enough friggin’ money you greedy bastard, and yeah, $12 an hour means your latte’s getting pricier. As you said before, you can afford it. If not, maybe you should move.

But, again, i’m not a civic engineer. Still, if this is the way that these apes approach a complex problem, no wonder they all fell in love with Mongo.

:: Bias Confirmation

Over the past few weeks, i’ve been working on creating “demo” apps for SimplePush integration into third party message transport systems. If i’ve lost you in the previous sentence’s word salad, feel free to bail on this post, because it’s going to get a wee bit cranky, and a whole lot geeky. Actually, strike that, reverse it.

Background Info

Wherein i talk about why i walked into the tarpit

Right, so let’s start from the beginning. Mozilla is rolling out a messaging system for programmers. There’s a lot of these sort of things out there, but mostly they’re like email was back in the bad ol’ days of Prodigy, AOL and Compuserve. Folks who used those systems couldn’t send email to folks who were on other systems, or at least, couldn’t do so easily. Then came some discussion, standards meetings, and the Simple Mail Transport Protocol (SMTP) was introduced. Now, various folks could send mail to other various folks, and after copious arm twisting, customer demands, and folks leaving to use The Internet (because that didn’t have weird restrictions like the older platforms did), the companies caved and converted to SMTP. Much joy was to be had. Well, for a little while at least.

Fast forward a few decades and we’re back in the same spot again, only this time, it’s with how servers can send messages to your devices. Turns out, that’s kinda tricky. Your laptop, phone, tablet, watch, belt buckle, shoelaces, and fridge can pretty easily connect up to sites like Facebook, Google, and RedTube (your belt, sadly, is REALLY into bondage for some reason). That’s because those sites pay money to be at well known locations on the internet. You, however, don’t. You move around. One minute you’re at home, then 30 minutes later you’re at work, or headed down the freeway. Turns out that you moving around so much makes it hard to get something to you. (Imagine that your cellphone number changed between locations, and a few times while you’re between locations. That’d make it a bit hard for folks to get in touch with you.) Turns out exactly that happens with your various gadgets. That means that if you wanted to get stuff like chat messages, or surf reports, or a lot of other things, that could lead to all sorts of problems.

Turns out there are a bunch of ways that folks have tried to solve this problem, and have been trying to solve it for a while. Apple, & Google are the big players in this area (much like Prodigy, AOL and CompuServe were with email in the very early days of the internet). Sadly, none of these play nice together. You can’t use the same system to talk to Google that you do for Apple. Heck, you can’t even send the same sort of data to Google that you can to Apple.

Thus, very smart folk have sat down and created a standard for all of this. This standard is still in the works, but there’s a prototype that i’ve been working with for a while. That’s SimplePush, and much like email, it tries to make things easier for sites you want to hear from to send you things you’re actually interested in getting. Now, because those big systems are big systems, and because those big systems are VERY TIGHTLY INTEGRATED into devices, it makes sense that we try to use those notification systems to carry some of the data we want to send.

For some systems, this can be interesting.

And then there’s Apple.


In which i note that i’m not a fan…

i’m not a fan of Apple. i’ve a long, and somewhat checkered history with the company, and while i appreciate that they have an excellent eye for product design that has lead to a good deal of improvement in tech, i’ll note that Disney has had an equally large impression on amusement park theme rides, but i’m rather happy with my car not following a rail and limited to 15mph.

Fortunately, i’ve had little need to deal with Apple products. i get my music from Amazon, watch movies on Netflix, generally work on Unix systems (i tend to run Windows as the UI client, but most of the apps i run there are Open Source.) i have no beef with other folks using Apple products and, frankly, the office here is pretty much filled with Apple laptop chargers because of the enormous number of Macs in the building.

Suffice to say that i’m a bit biased against the legacy of Steve, but still reasonably polite to the odd Apple recruiter that called.

The Procession of Ducks

In which we learn it is better to be eaten whole by alligators, than nibbled to death by ducks

Right, so first i needed to build a version of SimplePush that used Google Cloud Messaging as it’s carrier. i grabbed a copy of Android Studio, fired it up, and in about 6 days, used Java to write a simple demo app that let me connect to the server, and fire messages that were then echoed back to the app over GCM. i’m not going to claim that it’s a masterpiece of elegant code or anything, but it works well enough to test out if things on the server are working.

About the only really annoying thing is that the key bindings in Android Studio can’t be mapped to Vim, so i would occasionally write :w! in the code. i knew Java from a previous job, and it’s bloody java so it’s not like it’s hard to find things. If you like, you can play with the demo using the built in emulator or “side load” it to any device you’d like.

That done, i turned my attention to Apple Push Notification System (APNS). And there in lies my tale of woe.

Apparently, to build iOS apps of any sort, i need to get xCode (an compiler environment for Macs), an iOS device, and a $99 Apple iOS developmental license. i was able to borrow a mac from work, i had my wife’s old iPad2 as the device, but had to pony up the $99+tax fee out of pocket. If i were to go the cheapest possible route, i’d have to pay $500 for a mac mini + $250 for an ipad mini + the $100 iOS development license. Why do i need a real device? Because the APNS requires a real device. It doesn’t work in an emulator. So, close to a grand out of pocket vs what i would have had to spend for GCM, which was $0.

Receipts filed for next years tax season, i decided to dig in. And that’s when i encountered ObjectiveC.
[[intent alloc] withSarcasmAndSlightMalice: @Seriously];?
Granted, i could have used Swift, but in either case, this is a language specific to writing apps for a specific platform. That’s a bit like having to learn Esperanto to order a lunch. i won’t get into the oddities of ObjectiveC (and there are a lot of them), but i’ll note that you really do need to use xCode to write the app. This is because there are whole portions of the app that can only really be built by dragging connectors around like you’re running a 1920’s era switchboard.

Then there’s the certificates. God, the certificates. i get TLS. It’s wonderful for security because it’s using really large bits of math in order to prove you are you and i am i, and you get it for free with browsers. Granted, for this, i need a certificate saying who i am. i then need another certificate that is signed against the first certificate to indicate the app is my app (ok, that seems fair). i then need to export the certificate parts, convert them to a different format, so i can turn them into another format and store them on my server for the connection back to the APNS server which (obviously) needs to have the certificate it knows about me.

This is why OAuth is popular.

Oh, and in addition, i’ll need to get the long, complicated device id off of the iOS device using a completely program that tries to sell you Kanye West and Pitbull songs so that it can be one of the 1000 devices you’ve specifically blessed to run this app outside of the closely guarded and completely arbitrarily governed sanctum they’ve established. Because, obviously, why would anyone ever want to build testing or demo apps?

Anyway, back to the demo app. Once you’ve got the crux of things (hopefully) working, you then have to try sending the actual notification. This is done using a binary format. Well, actually, one of two. There’s the oldest format which consists of a “0” + the length of a token + the token + the length of the message + the message in JSON format. The message JSON needs to be constructed according to a reasonably simple structure, and after you feed the beast, you get a response back indicating if the message was accepted. Most examples will refer to this format.

Then there’s the new format, which has a 2 + the length of all the items combined + the items [ 1 + length of the token + token, 2 + length of the message + the message, 3 + length of an id + the id, 4 + length of the expiration time + expiration time, 5 + length of the priority flag + priority flag]. This information is bundled up and fed to the beast and you get a response back indicating if the message was rejected. You get nothing back if it was accepted. Mind you, it could take a second or two to process the data, so you ought to hang around a bit waiting, just in case. Oh, and after the third message or so, the server will drop your connection, so you’ll have to reconnect. Golly, and because i nearly forgot, you’ll also want to hang onto messages you’ve sent recently because there’s no ACK and you’ll need to resend them later if they’re requested. Because i’m a nice guy, here’s a PHP script built off the most common example that uses either v0 or v2 APNS.

Oh, and also? Even if the server accepts the message and says there’s no problem. There may be a problem and the service will just silently eat the message. So, if you do something silly and screw up the length of a field, or don’t specify the expiration with just enough buffer, or maybe have a typo in the JSON data, the message is helpfully shot into the void never to be heard from again. This makes debugging a bit of a challenge, but hey! It’s apple! It just works! Unless it doesn’t, in which case it’s your fault and you should fix it, you moron.

(Honestly, it would be lovely to have a service set up that would actually verify the data you’re sending in to it and see if it’s correct. i should write one.)

The Sorrow

In which the hero walks to the sunset behind La Brea

Much swearing and twiddling later, it is possible to use APNS to send data to apps. i’m still missing a few additional things, and will have to create them before this goes fully live, but it’s good enough for early prototyping.

So, in theory, i’m over the worst of it. i should be happy, right?

Well, no. You see, having built this, i recognize that this is more than a one or two week process. i’m going to need to have a stable mac environment to work in for a while. That means i’m going to have to swap the loaner macbook for a mini. i’m also going to have to get a mini for my home because there will be days i’ll want to work from home, and i’ve discovered that remote desktop services on macs (or at least on the loaner) is… problematic. Fortunately, i’ll be able to toss the little crapbox into the garage where it can spin it’s fans up and not keep the rest of the house awake. It also means that i’ll be hanging onto the wife’s old iPad for a while, mostly for the same reasons (hopefully, i won’t have to get a second one of those).

Apple, the craft glitter of computing.

Once that i am actually DONE with this crap, i might see if i can put Linux on the mini and use it as a NAS or something. Having hot plugged a USB 3.0 NTFS drive into the mac and not seeing it show up does not bode well, but that could well be a FUSE solvable problem.

All i can say is that this experience has not endeared me to apple at all. (Seriously? Damn near every platform out there has used Ctrl as the principal modifier key, but apple decides to use it’s own, and has the key sit right next to the spacebar? No wonder they want you to use the mouse for everything.) Frankly, sometimes it seems that Apple exists just to ebb joy out of my life.

But, people love them, and are happily effervescent about the Emperor’s wardrobe choices. Even if he’s standing on his thrown, gyrating his hips, and making helicopter noises.

Blogs of note
personal Christopher Conlin USMC memoirs of hydrogen guy Henriette's Herbal Blog
geek ultramookie

Powered by WordPress
Hosted on Dreamhost.