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();

Sunday, 30 June 2019

Week-in-Review: Auditing a dark age in Apple design

Hello, weekend readers. This is Week-in-Review where I give a heavy amount of analysis and/or rambling thoughts on one story while scouring the rest of the hundreds of stories that emerged on TechCrunch this week to surface my favorites for your reading pleasure.

Last week, I talked about how YouTube was letting its commenting system turn from a festering wasted opportunity into a liability.


Screen Shot 2019 06 28 at 8.37.42 PM

The big story

Plenty happened this week, though most of the news signified something larger looming on the horizon, more on that in a bit.

One undoubtedly meaty news item was that Jony Ive, Apple’s most iconic executive persona, announced that he was leaving the company this year.

Ive has undoubtedly been a powerhouse of industrial design who has helped craft some of the most iconic products from one of the most influential tech companies. The issue is perhaps what Apple’s vision of industrial design transformed into in his final years at the helm.

Jony Ive is leaving Apple to launch a new firm

Ive shifted away from managerial roles in 2015, but the Chief Design Officer’s influence has been evident it the past several years of very beautiful devices designed around the occasional flawed hypothesis.

Poor design is more than the oft-memed Apple Pencil jutting out of an iPad lightning port or the Mighty Mouse with a charger piercing its underbelly. The company’s aesthetic choices in how they curve their screens or shape their aluminum have stayed true but you don’t have to look too far to find a pattern of carelessness in a number of Apple’s device which occasionally have prioritized svelte profiles over actually even working.

Ive is design genius, but like all people we elevate with that title, he and his design ethos grew further disassociated with the public over time. All designers miss the mark occasionally, but an obsession with minimalism pushed the company in some troublesome directions that the company is only now coming to reckon with.

Apple’s design degradation is perhaps nowhere more visible than in the ill-fated AirPower. The device, which designed to charge your iPhone, AirPods and Apple Watch simultaneously, was beautiful, but Apple’s aggressive design left physics in the rearview mirror. Ambition is one thing but letting function drive form to the point that you publicly announce a product that wasn’t physically possible showcases where Apple’s marketing showmanship butt heads with actual device capabilities. Apple abruptly cancelled AirPower this year, more than a year after its expected release.

If AirPower was a pithy signifier, the degradation of the company’s Mac line has been Apple’s abasement opus.

The problematic keyboards, the useless TouchBar and the shrinking number of ports on its laptops have defined the past five years of the company’s laptop line. There isn’t much that needs to be said about the anti-consumer design decisions that took Apple’s best generation of the MacBook Pro in the 2011/2012 era and cursed it with an unneeded rethinking.

The about-face that the company took on its Mac Pro line shows just how misguided its thinking was and how Ive and company let innovative design poison the good will it had built up with customers. The company’s 2019 line is a total rejection of the 2013 trash can which showcased some major design hubris.

These missteps don’t fundamentally complicate the legacy of Ive or Apple. The past decade has also seen thoughtful designs take shape from the Apple Watch to the iPhone X to the iPad Pro, but industrial design is a means to an end and the manner in which Apple has determined where the customer fits into its design ethos could perhaps use some rethinking as the company enters a new design era.

Send me feedback
on Twitter @lucasmtny or email
lucas@techcrunch.com

On to the rest of the week’s news.

space starship 4

Trends of the week

Here are a few big news items from big companies, with green links to all the sweet, sweet added context.

  • SpaceX preps for a Starship payday
    Elon Musk is still trying to get SpaceX’s Starship off the ground, but the company’s leadership is already planning for the reusable rocket’s commercial heyday. Read more about the aggressive timeline here.
  • SF throws Juul the bird
    San Francisco doesn’t always operate on the right side of interacting with new technologies and startups, but the city government took final steps to be the first city to ban sales of electronic cigarettes, taking aim at Juul, which seems to be one of the more morally bankrupt SF startups out there. Read more on the ban here.
  • Reddit takes steps to isolate r/The_Donald
    Reddit has had a tough time growing up over the past several years, part of that has been a handful of problem communities on the site. This week, Reddit took the unique step of quarantining r/The_Donald after threats against public officials and members of the police. Read more about the quarantine here.
  • Tesla’s cell jealousy
    Tesla electric vehicles are awfully reliant on Panasonic’s battery cells and the company is investigating how it can reduce that dependency, though the company’s significant demands suggest that even if they succeed in the aggressive move, it would take an awful long time to scale to meet their needs. Read more on the report here.

GAFA Gaffes

How did the top tech companies screw up this week? This clearly needs its own section, in order of badness:

  1. Facebook’s head of spin makes a push:
    [Facebook makes another push to shape and define its own oversight]
  2. FB isn’t sure what to do:
    [Facebook’s content oversight board plan is raising more questions than it answers]

Extra Crunch

Our premium subscription service had another week of interesting deep dives. We had a story that should be interesting to a lot of younger founders that are scaling their entrepreneurial ambitions while they’re still in classes.

How to scale a startup in school

“…Once you have a job in an industry you want to be in, network like your life depends on it. Get to know the talented people around you and try to help them as much as you can…”

Here are some of our other top reads this week for premium subscribers. This week, we talked a bit about the future of marketplaces and you should think about naming your startup.

Want more TechCrunch newsletters? Sign up here.



from TechCrunch https://ift.tt/2LtFqHR
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support