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

Saturday, 28 August 2021

The remote work argument has already been won by startups

Welcome back to The TechCrunch Exchange, a weekly startups-and-markets newsletter. It’s inspired by what the weekday Exchange column digs into, but free, and made for your weekend reading. Want it in your inbox every Saturday? Sign up here

The debate over remote work, office culture, how to manage teams of distributed staff and the like continues. With the delta variant of COVID-19 pushing back office return dates for many companies, there’s still a healthy argument over what the future of work will look like.

But while large companies hem and haw their way through the present, it’s my view that the debate is largely over and that startups have won it.

I’ve been on a huge number of calls with startup founders since the onset of COVID-19, and in the last few quarters, it seems that nearly every time I talk to an early-stage company they have a remote, distributed team. Some of these startups were literally founded during the COVID era, so it makes sense. But the trend is broader than just those firms.

Thinking only about the startup market for a moment, I think that in time it will be just as weird a concept for startups to raise equity capital to spend on rent as it would be for a startup today to raise equity capital to buy a rack of servers and pay co-location fees. We have AWS and Azure for that now. And regarding offices, we have remote work now. Why shell out shares for square footage?

We’re being simplistic to some degree, but spending seed or Series A money on rent makes early office space some of the most expensive real estate in the world. For successful startups, at least. The savvy will avoid the tax.

There’s more to this: The talent market is incredibly tight for many key roles today. Ask anyone trying to hire machine learning talent. Or senior dev roles. Or marketing team leads. The list goes on. The sort of talent that startups are on the hunt for is scarce, and ‘spensive.

Even worse for upstart tech companies, Big Tech companies have never been more wealthy. So what’s a young company to do? Offer what the big guns appear loath to offer, namely remote-friendly work. This will also help startups poach talent from the bigger tech companies. Talent that they don’t want to shed.

In time, I suspect that softer retention numbers for HR staffs will lead to more workplace flexibility everywhere. And many startups that are remote today will scale while sticking to the model, becoming the big companies of tomorrow with fully remote teams. So the conversation about remote work or returning to high-priced office space is still happening, but it feels more like doomed-cruiseliner deckchair-shuffling than real debate.

Are you going to go back to commuting by car, or a mixture of car and public transit, so that you can put on headphones and try to focus in the office? I doubt it. I’m not.

More on Boston

The Exchange is spending time digging into the various startup hubs of the world, with a focus on some U.S. markets that are worth giving more time to. We’ve looked at Chicago, for example, and most recently Boston.

After that Boston piece went live, a few more sets of comments came in. Let’s chew on their key bits.

Glasswing Ventures’ Rudina Seseri provided us with a look at what is ahead for Boston in the coming quarters, saying that “the number of companies coming to market and raising new rounds is high and they are operationally strong. So unless there is a market correction — which would extend far beyond Boston­­ — the funding appetite will remain.”

And if market conditions persist, startup venture activity could get even more heated in Boston. Seseri told The Exchange via email that “the number of pre-seed and seed-stage companies are increasing dramatically. In fact, we have seen 2x growth [year over year] in the number that are highly qualified for funding.”

In her view, the volume of neat startups that Boston is creating is “a testament to the entrepreneurial spirit in early tech and the market opportunities that COVID-19 has initiated and accelerated.”

Finally, Ari Glantz of the New England Venture Capital Association said that after “a slowdown in H1 2020, both founders and funders have seen a historic flow of capital as new needs and opportunities emerged due to pandemic-era shifts,” and that with “companies and their backers continuing to adapt, the prospects remain bright.”

I included that final quote as it applies to, well, nearly everywhere. Startups have never had it so good!

More next week.

Alex



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support