Shakespeare’s melancholy Dane once said, “Conscience makes cowards of us all.” It’s a truism Richard learns the hard way in “Black Hat/White Hat,” this week’s episode of Silicon Valley. Content to walk the left-hand path last week, Richard is now consumed with guilt that Gilfoyle’s hack cost Endframe’s network-security guy, Seth Lee, his job. When Gilfoyle expresses utter joy at Seth’s firing, Richard gets the attack of do-gooder sentimentality usually reserved for Jared.
“We didn’t breach his security,” Richard correctly states. “He must be pulling out his hair trying to figure out what he did wrong.” “I wish I could see that,” Gilfoyle says, his voice a delectable purr of malice-laced satisfaction. Richard’s feelings of remorse are quickly squashed by Gilfoyle. “We’re black hat now!” he informs Richard, much to Mr. Hendricks’s chagrin.
If you were one of the five people who went to see Michael Mann’s Blackhat, you’d know the term is shorthand for the kind of hacking that earned Pied Piper a leg up on Endframe. Granted, Gilfoyle used a misplaced Post-it note instead of the malicious skills I’m sure he has, but he still used his ill-gotten information for personal gain. The term may come from the old Westerns, where the villain was identified by the black hat he wore. Regardless, for Richard, heavy hangs the head that wears the black hat. Richard’s emotional arc during this episode made Thomas Middleditch one of the episode’s two MVPs.
While Gilfoyle and Dinesh use math principles in a futile attempt to convince Richard not to care about Seth, one of Erlich’s other incubator-dwellers is about to make his move toward software-based independence. Jian Yang, the coder from “an undefined Chinese province,” has created an app Erlich can’t wait to pitch to Laurie over at Raviga. Monica gets him a pre-interview with one of Laurie’s underlings, but en route, Erlich and Jian Yang discover Monica’s dirty little secret: She’s a smoker in a town where Virginia Slims and Joe Camel would be burned at a menthol-infused stake.
When Jian Yang nonchalantly reveals Monica’s smoker status to one of her co-workers, Erlich scolds him. “This is Palo Alto,” he begins. “People are lunatics about smoking! We do not have the freedoms you have in China!” Sure enough, Laurie corners Monica at the end of the day to perform an “anti-smoking intervention” complete with stuffed animals and the now-immortal line, “No one ever died from secondhand heroin.”
The stuffed animals reminded me of my own anti-smoking intervention. I was 5 years old, and my aunt had left her cigarette in the ashtray. “Let’s smoke it,” my cousin told me, and since I was a follower back then, I picked up the cigarette and put it in my mouth. I didn’t know what I was doing; like Bill Clinton, I smoked but I did not inhale. “You gotta breathe in,” my cousin said. “Let me show you!” While he was showing me, my aunt caught us and beat our asses with a switch. Monica was far luckier; she temporarily escapes punishment because she’s a better liar than I was, and also because there are no switch bushes in Palo Alto. Trust me, I’ve looked.
Monica’s pain is Jian Yang’s gain. He and Erlich use the anti-smoking angle to pivot on their app. An app that once alerted parents to less-crowded playgrounds (unintentionally creating “the perfect program for pedophiles”) suddenly becomes a means to locate and avoid smokers. “It’s called Smocation,” Erlich says proudly before using Laurie’s secondhand heroin line to seal the deal. Laurie agrees to finance Jian Yang’s app — that is, until she catches him smoking a cigarette in the office.
“You brought cigarettes in here?” she asks angrily. “No, I got them from her purse,” says Jian Yang, pointing at Monica. If Gilfoyle had been present, he would have said, “outed by Benson & Hedges!”
While Jian Yang’s software dreams end abruptly, Gavin is still trapped in the Nucleus nightmare. After listening to the “gentlemen and one lady” of his board discuss advertising strategies for the still-broken compression engine, Gavin tries to cover his ass. “Let’s shroud it in mystery until January at CES,” he suggests. When the board won’t back down, Gavin realizes he needs a fall guy for Nucleus.
Enter Dr. Bannercheck, formerly of Hooli.xyz and currently moving back East to accept an MIT position. Gavin catches him, and as Jeff Cardoni’s music swells in the background, Gavin feeds Dr. B. the biggest load of bullshit he’s ever spun. As Gavin seduces Dr. B. into returning, I yelled, “Don’t do it!” at the TV. But the look on Dr. B.’s face spoke volumes. You could see him daydreaming about his newfound power and glory. A fall guy is born.
“You dumb jackass!” I yelled, a statement I had to retract when Dr. Bannercheck ran like a bat out of hell from Hooli 11 minutes after reporting on his first day as head of Nucleus. Gavin gets the news at a Habitat for Humanity–style house-building event when his group of yes men play up Dr. B.’s exit. “Now the world will know that you’re responsible for Nucleus,” they tell him. “You and you alone!” This is exactly what Gavin doesn’t want. Once again, Matt Ross does a hilarious Gavin Belson freak-out, this time with a hammer and a helpless piece of wood.
To recap tonight’s software statuses: Nucleus is hors de combat, Smocation is snuffed out, and Endframe is hopelessly overmatched. That leaves Pied Piper, which seems poised for victory until Richard inadvertently angers Seth Lee. Despite Gilfoyle’s warnings, Richard visits an anguished Seth, who, as predicted, has been pulling out his hair. Using a misguided theory about how “face-to-face meetings make things better,” Richard tells Seth the truth about the Endframe hack. This sends Seth into a profanity-laced tirade. Unfortunately, he’s at a playground I’m sure Jian Yang’s original app would have recommended.
Faced with the notion that “an unemployed, pissed-off hacker has vowed to skull-fuck Pied Piper’s system,” Richard becomes increasingly paranoid as the bake-off date nears. Gilfoyle is unfazed by Seth’s threats. “He’s a coder,” Gilfoyle says. “He won’t do shit!” “He’s right, we’re pussies,” agrees Dinesh. It’s no comfort to Richard, and making matters worse, he has to deal with the now-ubiquitous Russ. Russ keeps showing up at the house to offer Richard some “Tres Commas Tequila.” The bottle is a minor miracle of set design, with its comma-shaped top and unwieldy bottle shape, but judging from Richard’s slapstick-laced reaction to drinking it, the bottle may be the best thing about “Tres Commas Tequila.” The bottle is also a very clever means of foreshadowing in Dan Lyons’s script.
Lyons’s script counters Richard’s weak conscience by giving him a searing takedown of Russ. Chris Diamantopoulos plays the scene with such hurt that you feel sorry for him, and the music playing under his confession to Richard really sells the moment. Of course, Russ turns back into an asshole 30 seconds later. But for a brief moment, he was human.
With Richard’s paranoia at an all-time high on the day of the Intersite bake-off porn download, his crew has resorted to all sorts of old-fashioned devices to combat Seth’s potential hack. “Are we ‘90s?!” whines Dinesh as he surveys the equipment. Everything goes smoothly — that is, until hundreds of files start mysteriously disappearing from Intersite during the Pied Piper download.
“We’ve been hacked!” Richard yells as episode co-MVP Jeff Cardoni’s music plays wildly underneath the chaos. As a result, Intersite loses 9,000 hours of “quality content.” The deletions turn out not to be Seth Lee’s revenge, but Russ’s accidental placement of his tequila bottle on the delete key of the main laptop.
As suspenseful as this scene was, the programmer in me had to raise an objection: Didn’t Intersite have a backup? I mean, shit happens, but there’s usually a contingency plan. I once accidentally issued an update statement without a where clause on a 2 million row database (Richard’s panic made me have flashbacks to this event), but my client had a backup. The real villains here are Russ and whoever is in charge of Intersite’s infrastructure.
Of course, Intersite’s CEO doesn’t see it that way. “Get out!” she tells Richard, Erlich, and Monica when they visit her office to apologize. Once again, Pied Piper is at an impasse, but since Nucleus is far more hobbled, some glimmers of hope remain as we head into the final two episodes of season two.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]