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

Sunday, 23 May 2021

Billboards? Nah, just buy a media company instead

Startups used to be obsessed with billboards. It was the first thing I noticed when I moved to San Francisco: venture-backed companies including Eaze, Airbnb, and notoriously, Brex, would post large billboard advertisements all over the city to grab attention and eyeballs. When I dug into it more, I learned this type of old school, outdoor advertising was a response to the increasingly crowded online channels, such as Facebook and Instagram advertisements.

Well, folks, years later, we have a new response to crowded marketing channels: Ditch the billboards and just buy a media company instead. There has been a recent push for startups and venture capital firms to acquire or create media companies, which I’d argue is them finding a creative way to position content marketing. This past week, Axios discovered that Coinbase is launching a media operation about cryptocurrency. At the same time, Clubhouse wants to hire freelance writers, while its biggest lead investor to-date, Andreessen Horowitz, has ambitions to open up an opinion desk. Other news bits like The Skimm exploring a potential sale and Hubspot acquiring the Hustle also add to the narrative of broader media ambitions across tech.

We got into the impact of a venture-backed media push on Equity, our award-winning (!) podcast, this week. My take, as you can tell by this introduction, is that it’s not a rush to compete with journalism. It’s a rush to compete with a noisy world, and rebrand advertisements to media operations.

I could talk about journalism and tech and media forever, but that is all on that topic today. In the rest of this newsletter, we’ll get into new IPOs, startups providing upfront revenue to other startups and tactical advice on building versus buying a tech stack. As always, you can find me podcasting @Equitypod and tweeting at @nmasc_.

IP(Oats)

Oatly went public this week, and there entirely weren’t enough jokes or puns about it. (Although I did appreciate this one). My complaint aside, it’s been a busy week for the public markets.

Here’s what to know: Marqueta, which is focused on card issuing and payments tech, has a fascinating S-1 filing — including what I’d say it’s a Peloton-Affirm relationship with Square. Alex dug into the numbers and told you what to think about its filing in The Exchange.

And a splash of oat milk please:

GettyImages 1141468846

Image Credits: Getty Images / Eugene Mymrin

Build or buy?

Telemedicine needs to prepare for a post-pandemic world, which comes with its own upfront costs, risks, and, as Marcela points out, opportunities. Around $3.1 billion in funding flowed into the sector in 2020 — about three times what we saw in 2019, according to her latest story. In order to get money and impact out, startups have some work to do.

Here’s what to know: It’s time for you to read a marketmap about telemedicine, from its current state, to different tensions, to affordability and the out-of-pocket dynamics that no one talks about.

And here’s some dessert to finish your healthy meal:

Close-up of spade shovel being used to dig a hole in soil

Image Credits: MoMorad / Getty Images

Pipe’s get burst

Everyone is paying attention to Pipe, which just raised $250 million at a $2 billion valuation. As Mary Ann puts it, the company is claiming to be the Nasdaq for revenue, and it gives SaaS companies a way to get their revenue upfront by “pairing them with investors on a marketplace who will pay a discounted rate for the annual value of those contracts.”

Here’s what to know: That wasn’t the only check that went into startups providing other startups with upfront revenue this week. Uncapped, which is the European equivalent of Pipe, raised $80 million in funding. Put differently, in less than 24 hours, TechCrunch reported that nearly $330 million went into backing the concept of startups providing other startups with upfront revenue.

Other dollar signs to pay attention to:

Image Credits: MirageC / Getty Images

Around TC

TechCrunch is looking for 20 early-stage companies to feature in Startup Battlefield at TC Disrupt 2021 this year. Startups receive a feature article on TechCrunch.com, intensive pitch training from the TC team, the chance to win $100,000 in equity free prize money, and the attention of thousands of global press and investors.

So, what are you waiting for? Apply by May 27!

Across the week

Seen on TechCrunch

Seen on Extra Crunch

Thanks for reading! Do something that requires zero technology this week. After, of course, you share this newsletter with at least two people.

Always,

N



from TechCrunch https://ift.tt/348I3Xu
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support