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, 3 October 2019

Africa Roundup: CcHub’s iHub acquisition, Andela’s $50M run-rate and layoffs, Transsion’s IPO

Two of Africa’s powerhouse tech incubators joined forces in September. Nigerian innovation center and seed-fund CcHub acquired Nairobi based iHub.

The purchase amount was undisclosed, but CcHub will finance the deal out of its real-estate project to build a new 10-story HQ in Lagos, CcHub CEO Bosun Tijani told TechCrunch.

Details are emerging on how the two entities will operate together, but Tijani noted some degree of autonomy. The names — CcHub and iHub — will remain the same. Tijani is now co-CEO of both organizations.

Nekesa Were continues as iHub managing director. And iHub’s existing programs will remain, with CcHub extending to Kenya some of its existing activities in education, healthcare and governance.

CcHub will also use the iHub addition to expand the investment scope of its Growth Capital Fund.

The acquisition brings together two of Africa’s most powerful tech hubs by membership networks, volume of programs, startups incubated, and global visibility. CcHub and iHub visitors and partnerships span Zuckerberg, Mayer, Facebook, Google, and several African governments.

There’ll be a lot to cover on how this merger shapes up. At a high level, for now, the CcHub-iHub union creates a direct innovation link between two of Africa’s most active markets for VC and startup formation — Nigeria and Kenya.

Africa-focused tech talent accelerator Andela  announced cuts of 400 junior engineers across Kenya,  Uganda and Nigeria just as the startup released first-time earnings figures indicating it will surpass $50 million in revenues for 2019.

On the disjointed news, Andela CEO told TechCrunch the layoffs were due to a shift in market demand for the startup’s more senior developers.

Andela’s client base is comprised of more than 200 companies around the world that pay for the African developers Andela selects and trains to work on projects.

The Series D tech-venture is one of Africa’s most visible (by press volume) and best funded ― backed by $181 million in VC from investors that include the Chan Zuckerberg Initiative.

Johnson said the layoffs were not due to a lack of demand or financial woes. That’s probably why Andela released first-time figures of a $50 million run-rate for 2019, something of a rarity for a startup to reach in less than five years. That’s even more rare for ventures in Africa. Only one VC-backed digital company has revealed annual revenues between $50 and $100 million. That’s Jumia, the e-commerce startup that listed in an NYSE IPO earlier this year.

The departing Andela software engineers gained severance packages and are receiving placement assistance from partners including incubators CcHub and iHub.

Chinese mobile phone and device maker Transsion listed in an IPO on Shanghai’s new NASDAQ-like STAR Market, a Transsion spokesperson confirmed to TechCrunch.

Headquartered in Shenzhen, Transsion is a top seller of smartphones in Africa under its Tecno brand. The company has also started to support venture funding of African startups.

Transsion issued 80 million A shares at an opening price of 35.15 yuan (≈ $5.00) to raise 2.8 billion yuan (or ≈ $394 million).

Transsion plans to spend 1.6 billion yuan (or $227 million) of its STAR Market raise on building more phone assembly hubs, and around 430 million yuan ($62 million) on research and development, including a mobile phone R&D center in Shanghai.

Transsion has a manufacturing facility in Ethiopia and announced plans to build an R&D facility in India.

There are a couple things to watch with Transsion’s IPO. First, the public listing, and accompanying capital could mean more venture funding for African startups.

Transsion-funded Future Hub already teamed up with Kenya’s Wapi Capital in August to source and fund early-stage African fintech startups.

Transsion’s IPO and growing presence in Africa also accompanies TechCrunch coverage over the last year that signals China’s growing digital influence in Africa (see Extra Crunch analysis).

More Africa-related stories @TechCrunch

African tech around the ‘net

 

 

 

 

 

 



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support