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

Wednesday, 27 May 2020

Dishcraft Robotics is using robots to save reopening restaurants from creating more waste

Dishcraft Robotics has a simple pitch to corporate kitchens and restaurants that could potentially save tons of single use plastic, non-compostable takeout containers, dishware and cutlery from ending up landfills.

Use its cleaning service that will drop off all the clean, reusable dishware and cutlery a restaurant or corporate kitchen could possibly need in the morning and pick up all the dirty dishes, cups and silverware that the foodservice location uses throughout the day.

“In this model we take care of the collection and cleaning of dishes,” said Linda Pouliot, the company’s founder and chief executive officer.

That’s the offer. Behind the scenes the company will use its compliment of robots that can clean up 10,000 pieces of dishware or cutlery to quickly and efficiently clean up the mess.

The restaurants, Pouliot says, have more inventory than they could possibly need — even as Dishcraft only runs one drop-off and pick up service throughout the day at corporate offices.

The company has just announced a $20 million round of funding that will expand its service beyond the corporate kitchen and into communities that are worried about the waste produced by the explosion in takeout that’s occurred as a result of the COVID-19 epidemic.

A green business model is at the heart of Dishcraft’s new pitch. The company launched in June of last year with a massive dishwashing robot that it was debating selling to kitchens around the country. Now it’s settled on a services approach that makes its robotic-powered dishwashers an easier sell to businesses. “We saw that cloud kitchens took off… we’re the same. We’re cloud dishwashing,” said Pouliot.  

The company has a collection system that works in a 25 mile radius and uses biodiesel to power its fleet of trucks that pickup and deliver the clean dishes, according to Pouliot.

The founder of an automated floor cleaning robotic service, Neato Robotics, Pouliot has a long history of applying high tech solutions to real world problems.

Along with co-founder Paul Birkmeyer, the company’s chief technology officer and a former employee of SRI International, Pouliot founded Dishcraft in 2015. The two discussed the opportunity for a robotics business cleaning dishes over lunch at a restaurant. The restaurant’s dishwasher had called out sick for the day and the head chef came over to spend a few minutes with the two entrepreneurs discussing the pains of the dishwashing business, Pouliot recalled.

The company’s technology involves the integration of sensors, computer vision, machine learning, UV lighting, and innovative mechanics to autonomously sort, scrub, inspect, and rack dishware, the company said. Plates are cleaned and inspected multiple times using sensors that can spot miniscule particles invisible to the human eye, the company said.

Current customers include Affirm and foodservice company Guckenheimer, and the company said it would announce others soon.

Image credit: Dishcraft Robotics

After an early investment from Lemnos Labs, the company moved from the garage where it had been prototyping its robotic designs and moved into Lemnos’ offices.

Pouliot is a 15 year robotics industry veteran, and after Neato Robotics knew that the cleaning industry represented a special niche for robotics that not many other companies were pursuing.

Dishcraft currently works out of a cleaning facility in San Carlos, Calif. and will use some of the capital it raised to expand the facility as it builds out its to-go solution for cleaning reusable containers. “Communities and cities are interested in more sustainable solutions,” said Pouliot, and that interest is driving demand for Dishcraft.

“For example… Alameda, Calif. has 300 restaurants and 100 have signed up for a zero waste initiative,” Pouliot said, which is creating interest at the city government level for Dishcraft’s services.

“With a cafeteria we have a collection system and every day we pick up the dishwares,” she said. “With cities there will be a specified drop off point and a system that will take all the wares back to our centralized hub and clean them and inspect them and deliver clean wares the following day.”

The new $20 million will be used to expand the number of hubs. Funding for the new round was led by new investor Grit Ventures. Returning investors First Round Capital, Baseline Ventures, Fuel Capital, and Lemnos also participated in the round, according to the company. As a result of the funding, Marc Randolph, co-founder and former CEO of Netflix, and Kelly Coyne, founder and partner at Grit Ventures, will join Dishcraft’s board of directors. 

So far, Dishcraft has raised $46 million in venture funding.

“Even pre-COVID, Dishcraft was on track to be a significant force of disruption in the world of food services,” said Kelly Coyne, founder and partner at Grit Ventures, in a statement. “In recent years, robotics has introduced major operational improvements in traditional industry. In particular, firms like Dishcraft that leverage RaaS (robotics-as-a-service) have been able to rapidly gain traction and sell effortlessly into long-stagnant industries.” 



from TechCrunch https://ift.tt/3esmuEA
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support