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 January 2020

Shipamax scores $7M Series A to digitise the logistics back-office

Shipamax, the London-based startup and YC graduate that is helping freight forwarders and other logistics companies automate their back-office processes, has raised $7 million.

Leading the round is Mosaic Ventures, with participation from Crane Venture Partners, Y Combinator, and other existing investors. Shipamax says it will use the funding to double in size over the months ahead, investing both in engineering development and “customer success”.

Founded in 2016, Shipamax first set out to build an online broker for bulk shipping, before pivoting to a SaaS offering for bulk shippers. However, realising that the need for digitisation was real but that the market wasn’t large enough for a “VC scale business,” the startup pivoted one more time to develop a toolkit for back-office “process automation” for the global logistics industry.

“We’d got some traction selling the SaaS solution, but saw the market was not big enough,” Shipamax co-founder Jenna Brown tells me. “We went back to the core of why companies were buying Shipamax and what we delivered for them. It became clear that the underlying data extraction technology we’d built was driving the core value. After speaking to a number of people in adjacent segments of logistics, we saw companies there have the exact same problem – so it was clear we should really narrow the proposition down and widen out the segments we serve to the entire logistics market”.

The core Shipamax technology connects to any email inbox or unstructured data source and automatically extracts data from emails and attachments in real-time. It then outputs a clean, structured feed via the Shipamax API.

The startup says that’s very different to how logistics companies have previously tried to solve the digitisation problem, typically via optical character recognition (OCR) tools such as Abbyy. “The problem with OCR technology is that each company has to start from scratch – setting up hundreds of ‘templates’ to capture important fields and implementing ‘rules’ to interpret this data,” says Shipamax.

By using machine-learning, the company says there is no need to create templates or define rules within each organisation. Instead, Shipamax’s technology provides the “contextual understanding” layer.

Meanwhile, if you are wondering what product-market-fit looks like, once you actually find it, Shipamax says that in its current incarnation it has seen zero customer churn.

The company now processes over 18 million emails and documents per year, and says that performance is tracked by document type — such as orders, bills of lading, supplier invoices etc., with accuracy reaching 99% for the most advanced types.

“We then started to adapt the product for the new market, the large players and strong references from ‘in bulk’ [shipping] gave us credibility with the freight forwarding community to get access to their data to re-train some of the models,” explains Brown.

“Within a few months we’d proven that we could adapt this core tech quickly to the new training sets. A few months after launching this segment, it comprised of over 20% of our revenues and it’s been the fastest growing part of our business. We’re lucky that the core infrastructure we’d built for the initial market was built to handle extremely high volumes, which has made it easy to ramp up with large customers”.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support