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, 1 August 2021

Unicorns are ready for a haircut

The digitization of your haircut may not have been on your 2020 bucket list, but 2021 has an even more surprising line item: Tech-powered barbershops are now a business proposition valued at nearly a billion dollars.

Squire is a back-end barbershop management tool for independent businesses. I first covered it in the early months of the COVID-19 pandemic. The startup raised millions of dollars days before its key clientele — barber shops — were shut down across the country. The company eventually went from defense to offense in its growth strategy, finding itself as a key partner for any barbershop that needed to start offering contactless payments, digital appointment booking and a more seamless customer experience built for a generation used to doing everything online.

This week, Squire tripled its valuation thanks to a Tiger-Global-led round. The company is now worth $750 million, after being valued at around $75 million when we first spoke to them.

When I spoke to co-founder Dave Salvant, who launched the company with Songe LaRon in 2016, he explained how the company is now in a spot to expand into other barbershop-specific value propositions — either through acquisitions or partnerships. This week, for example, Squire announced that it launched a payment processing arm with Bond, a venture-backed fintech infrastructure company. The company also partnered with Gusto to bring on HR services for its clientele. Salvant noted how the progress of tech, especially financial services, lets them offer up a strong product without needing to build everything in-house.

While these are partnerships for now, I wouldn’t be surprised if we see Squire begin to scoop up companies that can unlock value from its existing datasets of how barbershops function and what kind of capital comes in and out of those doors.

Behind the numbers:

It’s a company to watch that fits into the narrative of pandemic rocked, then proven startups looking to expand with fresh capitalization. Less common, though, is that Squire is now en route to becoming a historical and unfortunately still rare Black-led unicorn. More data points, the better.

In the rest of this newsletter, we’ll discuss Robinhood’s public debut and why a CEO thinks everyone needs to be them for a day. You can find me on Twitter @nmasc_.

Robinhood sells Robinhood

illustration of robinhood feather logo spraypainted on a brick wall

Image Credits: TechCrunch

The long-awaited Robinhood IPO is no longer long-awaited. After pricing at the lower end of its range, the consumer investing and trading app’s shares went down sharply, teetering between 8% to 10%.

Here’s what to know: IPO expert and fellow Equity co-host Alex Wilhelm gave us two reasons as to why Robinhood’s stock went down. After all, we’re used to pops in the consumer-facing tech company world.

Robinhood made a big chunk of its IPO available to its own users. Or, in practice, Robinhood curtailed early retail demand by offering its investors and traders shares at the same price and level of access that big investors were given. It’s a neat idea. But by doing so, Robinhood may have lowered unserved retail interest in its shares, perhaps reshaping its early supply/demand curve.

Or maybe the company’s warnings that its trading volumes could decline in Q2 2021 scared off some bulls.

You get to be a CEO, you get to be a CEO!

Burst balloons and party streamers on wooden floor

Image Credits: Richard Drury (opens in a new window) / Getty Images

Now that free beer is no longer a company perk, the next best one may have emerged: Let anyone in your company become CEO for a day. Vincit CEO Ville Houttu implemented this program at his company in 2018 and said that the initiative has paid off “tenfold.”

Here’s how it works, per the company:

The program gives our employee the reins for 24 hours with an unlimited budget. The only requirement? The CEO must make one lasting decision that will help improve the working experience of Vincit employees. Whatever the CEO of the Day decides, the company sticks with. They can purchase something for the company, change a policy, update a tool we use … Really, anything that they come up with can be done.

You can see the resulting policies in our story, but in my humble opinion, the end result is definitely better than free beer.

Around TC

  • The TechCrunch Disrupt Agenda just went live. It’s a must-read line up and a must-attend event. Some standouts:
    • Pot, Pottery and Beyond with Seth Rogen (Houseplant), Haneen Davies (Houseplant) and Michael Mohr (Houseplant)
    • Breaking the Bank with Brian Armstrong (Coinbase)
    • Speaking SPAC with Chamath Palihapitiya (Social Capital)
    • Dogmatic Design with Melanie Perkins (Canva)
  • Shout out to Amanda Silberling, a recent addition to the TechCrunch team who has been absolutely crushing her consumer tech beat. Follow her on Twitter if you don’t already!

Across the week

Seen on TechCrunch

For more public market news, subscribe to The Exchange by Alex Wilhelm and Anna Heim.  

Seen on Extra Crunch

Talk soon,

N



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support