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, 30 April 2019

Grocery startup Honestbee makes layoffs and cuts costs as it prepares to raise more money

Asia Pacific grocery delivery startup Honestbee has confirmed it is suspending business in half of the eight markets it operates in and laying off 10 percent of its 1,000 staff. The cost-cutting appears to be part of belt-tightening ahead of a planned new injection of funding, TechCrunch has come to learn.

According to a statement shared today, Honestbee is “halting our services in Hong Kong and Indonesia” while its business in Japan and the Philippines — and some partnerships in other countries — will be “temporarily suspended” while an internal review is conducted. It also operates in Singapore, Taiwan, Thailand (where it has paused its food delivery service) and Malaysia.

One of the big concerns around Honestbee’s future is its lack of financing, as TechCrunch reported last week. The company has raised around $60 million in disclosed funding from investors, which does not match its currently monthly losses of around $6.5 million. A source told TechCrunch that Honestbee is expecting to win new financing by the middle May and that will give it a further year of runway. However, it is unclear what investor is providing the money and exactly how much it might be. The source suggested it may be Formation Group, which has backed the company since its $15 million Series A round was announced in October 2015.

An Honestbee spokesperson declined to comment on the company’s funding plans.

Beyond the cash burn, we reported that the company has unpaid bills owed to a range of suppliers and partners across its eight markets. Honestbee said last week that it would layoff six percent of staff but we reported at the time that more terminations were planned — today’s statement confirms that the number is indeed higher than first disclosed.

We also wrote that four-year-old Honestbee had told staff in Singapore, its HQ, that it would not make payroll on time this month. The company said today that is not true. Sources told TechCrunch that Honestbee told staff last week that management in Singapore would not be paid on time, but an update this week communicated that the payment would not, in fact, be delayed after all.

New funding may stave off the need to sell the business, but Honestbee’s ongoing talks with suitors — which we reported have included ride-hailing firms Go-Jek and Grab — are ongoing. Possible outcomes could include the company’s selling its local operations in some markets in Southeast Asia to streamline its costs. One thing we do know from today is that it will continue with its Habitat supermarket, which combines on- and offline retail and is likely to be capital intensive.

Here is the full statement from Honestbee:

In 2015, honestbee started in Singapore with the mission of providing positive social and financial impact on the lives and businesses that we touch. Today, we are a regional business committed to making great food experiences accessible to customers across Asia.

Over the past four years, we have demonstrated commitment to our staff, partners and customers, and continue to innovate and improve our business to stay relevant in today’s rapidly-changing business environment. The launch of habitat by honestbee in Singapore last October marks the next phase in our evolution as a food company.

As part of an ongoing strategic review of our business, we are halting our services in Hong Kong and Indonesia, as well as our food vertical in Thailand. Our services in Japan and the Philippines, along with specific partnerships in others markets are also temporarily suspended as part of this review. This is necessary to help us focus and align our regional business, and more importantly, to enable us to better meet our customers’ needs. The status of honestbee’s business in the remaining markets stands unchanged.

Some roles within the organisation will no longer be available. Approximately 10% of our global headcount in the organisation are affected.

There have been media reports regarding payroll delay for our employees. We would like to stress that this is untrue. We will ensure that all employees across all markets, including Singapore, are paid in a timely manner.

In addition, we are also committed to fulfilling our financial obligations to all Bees, partners and vendors.

For context, our original report is below:


If you have a tip about this story or others, you can contact TechCrunch reporter Jon Russell in the following ways:

  • DM to @jonrussell on Twitter
  • Email jr@techcrunch.com
  • For PGP use the public key listed on MIT’s keyserver (here) or jonrussell@protonmail.com
  • Contact directly for WhatsApp or Signal number


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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support