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

Tuesday, 28 April 2020

Goldman backed ventures Jumia and Twiga partner on produce in Kenya

Pan-African e-commerce company Jumia and B2B agtech startup Twiga Foods are partnering to deliver produce in Kenya using adaptive measures during COVID-19.

In 2019, Jumia became the first VC funded tech company in Africa to list on a major exchange, the NYSE. Based in Nairobi, Twiga raised a $30 million Series B round in October and announced plans to expand its food supply-chain business to West Africa.

Both companies are backed by venture capital from U.S. investment bank Goldman Sachs.

Per the partnership, Jumia will sell bundles of Twiga’s fresh produce on its e-commerce website. Jumia’s delivery fleet will pick up orders from Twiga’s sorting and distribution centers and then complete last mile, contact free delivery. The transactions will be cash only using Jumia’s JumiaPay app, according to Jumia Kenya CEO Sam Chappatte.

Image Credits: Jumia Kenya’s website

The arrangement is meant to leverage the strengths of both companies, while providing a safer and more affordable way for households to obtain foodstuffs through the coronavirus crisis, which started to hit East Africa last month.

Co-founded in Nairobi in 2014 by Peter Njonjo and Grant Brooke, Twiga Foods is focused primarily on connecting the produce of Kenya’s farmers more efficiently to pricing and marketplaces. The company serves around 3,000 outlets a day with produce through a network of 17,000 farmers and 8,000 vendors.

Twiga will benefit from Jumia’s B2C e-commerce platform and Twiga from Jumia’s B2B produce network, according to Jumia’s Kenya CEO.

On the product offerings, “We pulled together the core basics that a family would need for a week or two weeks,” Chappatte told TechCrunch on a call from Nairobi.

“It’s 28 kilograms of fruit and vegetables. It’s delivered in an hour and a half and they save 50% versus supermarkets.”

Image Credits: Jumia

The partnership comes as the coronavirus has hit Africa and actors across the continent’s tech ecosystem have begun to develop practices to maintain operations and stem the spread.

By WHO stats Tuesday there were 21,388 COVID-19 cases in Africa and 877 confirmed virus related deaths, up from 345 cases and 7 deaths on March 18. Kenya ranks 13th in coronavirus cases on the continent.

Countries such as South Africa, Kenya  and Nigeria — which happen to be Africa’s top tech hubs — have imposed social distancing and lockdown practices.

Chappatte believes the virus in Kenya is likely under-counted. Jumia is approaching what could become a worsening COVID-19 scenario in Kenya from two angles.

“One of the ways in which we’re facing up to the crisis and trying be as useful as possible to our communities is to remain an everyday service,” he said.

“The second piece is around the right to operate…engaging the government on how home delivery can be cashless, contactless and safe and therefore a useful service over this period.”

Like many tech ventures in Africa, Jumia needs to adapt to the health and economic realities of the coronavirus to continue to generate revenues. Since going public in April 2019 —  and being required to report quarterly financial performance — the company has faced increased pressure to demonstrate profitability.

Continued losses, a short-sell assault and an employee fraud scandal in 2019 led Jumia’s share price to plummet more than 50% since its April IPO, from  $14.50 on listing to $4.43, as of Monday.

The company weathered these events and CEO Sacha Poignonnec highlighted a bright spot in the 2019 results. Jumia finally got into the black on one key indicator, reaching a gross profit of €1.0 million after deducting fulfillment expenses in Q4 of last year.

The online retailer’s next earnings call is scheduled for May 13. It could provide a unique window into the extent COVID-19 in Africa has impacted the performance of one of the continent’s most visible tech companies.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support