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

Thursday, 30 May 2019

Two years after Essential’s launch, still no Home hub or second phone

This morning’s Moto Z4 news was good cause to go back and reassess the state of the modular phone. Three years after the line launched, the concept hasn’t exactly ignited the market — in fact there are really just a handful of scattered competitors to show for it. Essential is among the most prominent with the PH-1’s clever two pin connector.

By sheer coincidence, it turns out today is the two year anniversary of the company’s debut. Founder Andy Rubin took to the stage at Code 2017 with big ideas and two products. One, the Ph-1 has come and gone, launching a couple of months late in August 2017 before being discontinued late last year. The other, the Essential Home hub never appeared at all.

The day the products were announced, then COO Niccolo de Masi (who appears to have since moved on to Honeywell spinoff, Resideo), spoke of a the company’s ten-year plan. It was an acknowledgement that it had a tough road ahead, as it planned to take on big names like Apple and Samsung. But the company certainly had the money. A $300 million raise helped the startup achieve unicorn status not long after taking the stage at the conference

But the intervening two years have been plagued with bad news. In spite of positive reviews,  the company reportedly only shipped 88,000 phones in 2017. The PH-1 got a massive price drop and its first modular accessory, a 360 camera, was discounted to $19, down from $250.

Last May, rumors surfaced that the company had gone up for sale and its followup phone had been canceled. And in October, it laid off nearly a third of its staff. Founder Andy Rubin has been laying low in the meantime. That same month, The New York Times published an explosive story about a $90 Million Google pay off in the wake of sexual misconduct claims, causing him to take leave from Essential.

All the while, however, the company has firmly denied claims that it’s going away. I spoke to a rep and the company recently who said things are in the works, without revealing any specifics. There have been ton of patent filings that appear to point to some future handset. It announced a new mod for the PH-1 in June and even acquired a company in December. Hell, earlier this month, it issued a new security patch, holding to its promise of monthly updates — a hell of a lot more than many more successful smartphone makers have offered.

That’s part of what makes the Essential story so frustrating. The PH-1 was a novel device, among the first to go with a camera notch display. Its $699 price (later reduced to $499) also predated Samsung/Apple/Google’s move into budget flagships. But even with a unicorn valuation, hardware is hard. And Essential may have entered the market at the worst possible time, as smartphone sales were beginning to flag for the first time ever.

Two years after launch, it’s hard to shake the feeling that Essential’s time may have come and gone. For now, however, the company appears to simply be biding its time before announcing what comes next.



from TechCrunch https://tcrn.ch/2HLBnnS
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support