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, 25 September 2019

Duda nabs $25M to take on WordPress with a web development platform aimed at agencies

WordPress last week secured its position as a top dog in the world of web development when its parent company Automattic announced a $300 million raise at a $3 billion valuation, just weeks after it snapped up Tumblr from Verizon. But true competition never really ends, and today brings the latest development on that front: Duda, which provides a cloud-based website building platform for developers — in its case targeting potentially non-technical builders at digital agencies and SaaS platforms — is today announcing that it has raised $25 million from a single investor, Susquehanna Growth Equity.

The funding, which brings the Palo Alto-based startup to $50 million raised to date, comes as Duda hits some strong milestones. There have been more than 560,000 websites built on its platform to date from some 6,000 web professionals — a mark of the B2B2C channel that Duda uses to grow (on an average this would work out to around 93 sites per developer or agency).

Itai Sadan, Duda’s co-founder and CEO, said in an interview that the plan will be to use the funding to continue investing in its platform — it has a team of engineers in Israel — as well as in sales and marketing, and specifically in convincing customers to make the switch to its platform from bigger competitors.

To wit: if you do a quick Google search for Duda WordPress, you’ll see that the company has already put a lot of effort into creating tools to port sites from the latter to the former, and articulating the reasons why Duda is faster to use, better for pushing updates and preferable for publishing further websites and web pages at scale. (Duda claims that those making the switch achieve a 50% reduction in site build times.)

The company began life as a mobile-first web development company, at a time when many thought that mobile web would be a viable, and potentially larger, alternative to building native apps for mobile platforms. That, of course, never quite materialised as a big business, since apps did indeed continue to boom, and responsive web design meant that it was much easier to build once for the web and have it simply work on mobile, rather than invest in a separate mobile-web-only build.

That doesn’t mean, however, that all the platforms that are on the market today have been a perfect fit for agencies or SaaS platforms that might be working on bringing dozens or hundreds of sites, or pages of sites, online simultaneously.

“We are very familiar with the frustration many web professionals experience daily due to the lack of suitable web design platforms. Our team has developed a product that integrates all of the components needed for professional-grade web design to effectively serve digital agencies and SaaS platforms and allow them to scale their business,” said Itai Sadan, Co-Founder and CEO of Duda, in a statement.

Working with agencies and others that may not be hard-coding websites, the company has build a suite of tools to help those who are non-technical designers to be able to build and update sites with minimal fuss and bugs.

The idea here is to provide something much more advanced and customizable than what you might get on a platform like Wix, but without some of the hiccups that Duda claims you are likely to encounter on WordPress (or via a provider that works on WP), in part because, as Sadan described it to me, the open source foundation on which WordPress has been built can throw up a catalog of errors that are complicated to fix, even for engineers let alone non-technical staff.

The features, for example, include something Duda calls its Widget Builder, so that a tool or action that is repeated across multiple sites can be turned into a widget to be implemented more quickly and easily. These also come with APIs to integrate other data sources into Duda sites. It also has a tool to manage site comments — not commenting by site visitors, but a way for clients to better mark requests and changes for their agencies. Asset sharing is also possible on the platform.

The pitch is that this is what customers need today.

“While the Susquehanna team and I were initially impressed with the product, it wasn’t until we started speaking with customers that we realized just how powerful the platform is for the thousands of web professionals it serves. Time and again, customers told us that Duda catalyzed the growth of their agencies,” said Noa Wolfson, Investor at SGE, in a statement. “The ability to have all site building and client management needs on a centralized, and more importantly, secure, platform saves web professionals time and money.” Noa Wolfson has also joined the company’s board.

With tens of thousands of agencies globally still to tackle, the ambitions are high at the company. “We’re just scratching the surface,” said Sadan.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support