Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Wednesday 28 April 2021

An Oracle EVP took a brass-knuckled approach with a reporter today; now he’s suspended from Twitter

Companies and the reporters who cover them routinely find themselves at odds, particularly when the stories being chased are unflattering or bring unwanted attention to a business’s dealings, or, in the company’s estimation, simply inaccurate.

Many companies fight back, which is why crisis communications is a very big and lucrative business. Still, how a company fights back matters. And according to crisis communications pros who TechCrunch spoke with this afternoon, a new post on Oracle’s corporate blog misses the mark, as did the company’s related follow-up on social media.

In fact, the author of the post, an Oracle executive named Ken Glueck, a 25-year-long veteran of the company, has been temporarily suspended by Twitter, the company told Gizmodo this afternoon, after encouraging his followers to harass a female reporter.

The trouble ties to a series of pieces by the news site The Intercept about how a “network of local resellers helps funnel Oracle technology to the police and military in China,” and Oracle’s response to the pieces.

While it isn’t uncommon for companies to post responses to media stories on their own platforms (as well as to take out ads in mainstream media outlets), the crisis execs with whom we spoke — they asked not to be named as they work with companies like Oracle — had some observations that might be helpful to Oracle in the future.

Rule number one: don’t draw attention unnecessarily to work that you might prefer didn’t exist. Oracle’s newest post doesn’t link back to the new Intercept story that Glueck works to dismantle, but in an earlier post about the first Intercept story that ran in February, Glueck hyperlinks to the story on Oracle’s blog in the very first sentence of his response, even sharing its title: “How Oracle Sells Repression in China.”

“How many of Oracle’s customers or employees saw [The Intercept piece] and didn’t give a damn and now he’s drawing attention to it?” noted one exec we’d interviewed today.

Rule number two: Don’t attack reporters; attack (if you must) the outlet. In Glueck’s first diatribe against The Intercept over its February piece, he mentions the outlet 26 times and the author of the piece once. In Glueck’s newest salvo against The Intercept, he refers to its author, reporter Mara Hvistendahl, 22 times — mostly by her first name — and even invites readers of Oracle’s blog to reach out to him, writing in boldface: “If you have any information about Mara or her reporting, write me securely at kglueck AT protonmail.com.”

Though Glueck has since said the call-out was a tongue-in-cheek gesture, it was subsequently removed from the post, possibly owing to its “sinister tone” as observed by one of our experts. “No one likes a bully,” said this comms pro, adding that  “bullying conveys weakness.”

Before

After

 

Rule number three: Know your purpose. By lashing out in what is a plainly derisive tone to The Intercept’s piece, as well as continuing to doubling down on its attack against Hvistendahl on social media afterward, Glueck’s strategy became less and less clear, according to one of the crisis specialists we spoke with.

“You can do what Ken did and mock” the reporter, said this person, “but is that going to stop The Intercept from continuing to do stories about Oracle? And what is the reaction of other media? Are they scared off by [what happened today] or are they going to circle the wagons?” (Below: a note from an L.A. Times reporter to Glueck today in response to his call for information about Hvistendahl.)

Rule four: Keep it short. Two of the pros we spoke with today commended Glueck’s writing style, calling it both fluid and funny. Both also observed that his response was far too long. “I just couldn’t get through it,” said one.

Last rule: Find another way if possible. The crisis experts we spoke with said it’s ideal to first work with a reporter, then the reporter’s editor if necessary, and if it comes to it, involve lawyers, of which Oracle surely has plenty. “That’s the chain of appeal if a reporter has gotten a story blatantly wrong,” said one source.

Very possibly, Glueck decided to throw out this rulebook by design. Oracle tends to do things its own way, and Glueck is very much a product of that culture. Indeed, the WSJ wrote a 1,300-word profile about Glueck last year, calling him a “potent weapon” for Oracle.

As for Hvistendahl, she suggests there is another reason Oracle took the route that it did.

In a statement sent to us earlier, she writes that “Ken Glueck has published two lengthy blog posts attacking me and my editor, Ryan Tate. But Oracle has not refuted my central finding, which is that the company marketed its analytics software for use by police in China. Oracle also hasn’t refuted our reporting on Oracle’s sale and marketing of its analytics software to police elsewhere in the world. We found evidence of Oracle selling or marketing analytics software to police in Mexico, Pakistan, Turkey, and the UAE. In Brazil, my colleague Tatiana Dias uncovered police contracts between Oracle and Rio de Janeiro’s notoriously corrupt Civil Police.”



from TechCrunch https://ift.tt/3u4l8rA
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support