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 May 2021

Hangry, an Indonesian cloud kitchen startup with plans to become a global F&B company, closes $13M Series A

Hangry, an Indonesian cloud kitchen startup that wants to become a global food and beverage company, has raised a $13 million Series A. The round was led by returning investor Alpha JWC Ventures, and included participation from Atlas Pacific Capital, Salt Ventures and Heyokha Brothers. It will be used to increase the number of Hangry’s outlets in Indonesia, including launching its first dine-in restaurants, over the next two years before it enters other countries.

Along with a previous round of $3 million from Alpha JWC and Sequoia Capital’s Surge program, Hangry’s Series A brings its total funding to $16 million. It currently operates about 40 cloud kitchens in Greater Jakarta and Bandung, 34 of which launched in 2020. Hangry plans to expand its total outlets to more than 120 this year, including dine-in restaurants.

Founded in 2019 by Abraham Viktor, Robin Tan and Andreas Resha, Hangry is part of Indonesia’s burgeoning cloud kitchen industry. Tech giants Grab and Gojek both operate networks of cloud kitchens that are integrated with their food delivery services, while other startups in the space include Everplate and Yummy.

One of the main ways Hangry sets itself apart is by focusing on its own brands, instead of providing kitchen facilities and services to restaurants and other third-party clients. Hangry currently has four brands, including Indonesian chicken dishes (Ayam Koplo) and Japanese food (San Gyu), that cost about 15,000 to 70,000 IDR per portion (or about $1 to $6 USD). Its food can be ordered through Hangry’s own app, plus GrabFood, GoFood and ShopeeFood.

“Given that Hangry has developed an extensive cloud kitchen network across Indonesia, we naturally would have interest from other brands to leverage our networks,” chief executive officer Viktor told TechCrunch. “However, our focus is to grow our brands since our brands are rapidly growing in popularity in Indonesia and require all kitchen resources that they need to realize their full potential.”

Providing food deliveries helped Hangry grow during COVID-19 lockdowns and social distancing, but in order to become a global brand within a decade, it needs to operate in multiple channels, he added.

“We knew that we will one day have to serve customers in all channels, including dine in,” said Viktor. “We started the hard way, doing delivery-first business, where we faced the challenges surrounding making sure our food still tastes good when it reaches customers’ homes. Now we feel ready to serve our customers in our restaurant premises. Our dine-in concept is an expansion of everything we’ve done in delivery channels.”

In a press statement, Alpha JWC Ventures partner Eko Kurniadi said, “In the span of 1.5 years, [Hangry] launched multiple brands across myriad tastes and categories, and almost all of them are amongst the best sellers list with superior ratings in multiple platforms, tangible examples of product-market fit. This is only the beginning and we can already foresee their growth to be a top local F&B brand in the country.”



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support