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

Monday, 3 February 2020

BlackBerry and TCL will end their handset partnership in August 2020

Big changes ahead for BlackBerry and TCL at a time when the smartphone market continues to see slowing growth. The two announced today that they would end their four-year brand licensing and tech support partnership in August 2020, with TCL ceasing to make new models of BlackBerry handsets after then, but continuing to support models that are already in the market for two years after, until August 31, 2022.

“We…regret to share… that as of August 31, 2020, TCL Communication will no longer be selling BlackBerry-branded mobile devices,” says the note, posted BlackBerry’s Twitter account. “TCL has no further rights to design, manufacturers or sell any new BlackBerry mobile devices.”

The company has yet to follow up with any more details about what this means for new BlackBerry handsets after that point. (We have asked directly but have not heard back. People asking on Twitter are also not getting any responses.)

The announcement caps off what has been a tough four years for the two companies.

BlackBerry, making devices using its own operating system, was once a market leader and trailblazer in the world of smartphones, with its small, full-qwerty keyboard gaining a loyal following among professional users, “prosumers” and other early adopters. That popularity lead to the Canada-founded company controlling some 50% of the smartphone market in the US and some 20% globally at its peak.

That was, however, before the rise of the touchscreen. After the launch of Apple’s iPhone and a slew of Android-powered handsets, Research In Motion (as the company was called then) gradually saw its share start to decline as it failed to produce compelling enough handsets to fit changing tastes.

RIM/BlackBerry appeared to be ready to leave the smartphone market altogether to focus instead on security, enterprise services and systems for other kinds of “hardware” like connected cars, until TCL came along.

TCL’s announcement in December of 2016 that it would take over making handsets, with BlackBerry to provide security and apps, but not the operating system, which would be Android — not unlike the partnership that another once-huge but now ageing handset brand, Nokia, struck up with HMD, just months before that, to make smartphones built on Android — looked like a new lease of life for BB.

But the change may have been too little, too late. The last few years have seen a general slowing down of smartphone growth, in large part due to market penetration in many countries: meaning, it’s much harder to shift devices than it used to be. And on top of that, there have been an army of new handset makers out of Asia, and also building on Android, that are dominating sales, led by Huawei but also including the likes of Xiaomi and Oppo, making the sales funnel even more challenging.

The end result has been that TCL and BlackBerry have struggled to break through with significant sales — falling instead into the large, and largely fragmented, “other” category in smartphone market share reports.

More recently, TCL has been wading into the market with its own-branded devices alongside its efforts with BlackBerry and Alcatel (another legacy mobile handset brand that TCL resuscitated), and so the writing was, perhaps, already on the touchscreen, so to speak.

We’ve reached out to BlackBerry to find out if it can tell us any more on its plans for handsets going forward, of if this is really it. BlackBerry has inked some licensing partnerships in specific markets, such as this handset deal in Indonesia, so there may be yet more to come.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support