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

Friday, 26 March 2021

One of Canada’s top investors, John Ruffolo, is back from the brink with a new $500 million fund

John Ruffolo isn’t as famous as some investors but he’s very well-known in Canadian business circles. The longtime head of Arthur Andersen’s tech, media, and telecommunications practice, he joined OMERS roughly a decade ago when a former colleague became CEO and brought him aboard the pension giant to create a venture fund.

The idea was to back the most promising Canadian companies, and Ruffolo steered the unit into investments like the social media management Hootsuite, the recently acquired storytelling platform Wattpad, and the e-commerce platform Shopify, among other deals. The last was particularly meaningful, given that OMERS owned around 6% of the company sailing into a 2015 IPO that valued it at roughly $1.3 billion at the time. Alas, owing to the pension fund’s rules, it also began steadily selling that entire stake, even as the company’s valued ticked upward. (Shopify’s market cap is currently $130 billion.)

Indeed, after helping OMERS subsequently get a growth equity unit off the ground, an antsy Ruffolo left to launch his own fund. Then came COVID, and as if the pandemic weren’t bad enough, Ruffolo further underwent a harrowing ordeal last summer. An avid cyclist, he last September set out to ride 60 miles one sunny morning on a country road, was knocked far off his bike by a Mack truck in an accident that shattered most of his bones and left him paralyzed from the waist down.

That kind of one-two punch might drive someone to the brink. Instead, six months and multiple surgeries later, Ruffolo, is undergoing training and therapy and intends to bike someday again. He is also very much back to work and just taking the wraps off his new Toronto-based firm, Maverix Private Equity, which has $500 million to invest in “traditional businesses” that already produce at least $100 million revenue and are using tech to grow but could use an outside investor for the first time to really hit the gas.

We talked with Ruffolo about the accident and his new fund this morning. You can hear that conversation here (it starts nearly seven minutes into things and it’s worth a listen). In the meantime, below are excerpts from that conversation.

TC: You’re surely tired of answering the question, but how are you doing?

JR: Well, when somebody says it’s great to be alive, it is. I actually never knew how close I was to death, to be honest, until about eight days after the accident. When I asked for my phone, just to kind of see what’s going on in the world, there was thousands of messages coming through. And I’m like, ‘What the hell?’

People were copying various articles. I picked off the first one, and it said, ‘John suffered a life threatening injury.’ And I’m kind of thinking, ‘Life threatening? Why are they saying that? And the doctors came in and said, ‘Because it was. We thought that you were going to die in the first 48 hours.’ I subsequently spoke to some of the top physicians [in Canada], and they don’t understand why I didn’t die on impact. That kind of scared me a little bit, but I’m so glad to be alive. And my recovery is far ahead of schedule. It was only within a couple of weeks where I started feeling my legs again.

TC: You were basically pulverized, yet a recent piece about your recovery in The Globe & Mail notes that within a month or so, you were back to thinking about your new fund. Do you think you might be . . . a workaholic?

JR: Some people call it stupid. [Laughs.] But for the two months, my first memory was worrying about my family and stuff [but] I have group of cycling friends — we’re called Les Domestiques — who have committed to cycling, and it’s a lot of folks who are investors, CEOs of big banks in Canada, we’re all close friends, [and] they all came to cocoon the family to make sure that nothing went wrong. So very quickly, all of these folks take over every element of the family, and the kids were fine, everybody was fine. I then had a lot of this time in hospital, and I do get antsy, and I started placing the calls to the investors who were committing to this fund pre COVID . . . I just really wanted to tell them, ‘Hey, I’m not dead. All my faculties are there. Are you still gonna be there when I get out of hospital?’

TC: Because they’re really investing in you and your track record.

JR: That’s exactly right. And I gotta tell you, it’s an interesting comparison. I’ve had American investors, and Canadian investors. American investors are very transactional. They’re very fast to come in if they see a great value proposition. Canada is not the same thing. In Canada, I’m extremely well-known as an investor and there, it’s actually relationship-driven, which is both good and bad. It’s tough in Canada because they’re more conservative, however, they stick with you in bad times. In my case, every single investor, everyone that had committed on pre- COVID, came in. Then one in particular doubled the size of the investment. They just felt bad for me, and I was like, ‘Hey, dude, I will take that sympathy card. Anytime.’

TC: You also see a real market for a Canadian-led firm to invest in Canadian companies versus taking money from American counterparts.

JR: So now this is going a little bit to the thesis, which is not a new thesis from a US perspective but is new from a Canadian perspective: the great firms in the U.S., like an Insight [Partners], like a Madison Dearborn, Bain Capital, General Atlantic, Summit — we don’t have any of those in Canada. We have great venture capital firms, and we have great buyout private equity firms. But what was really happening here is the entrepreneurs who are building great businesses are not really tech entrepreneurs; they’re just traditional industry entrepreneurs. And really, all I’m doing is planting a Canadian flag and saying, Hey, we have a Canadian firm that will lead or highly participate in these deals [to help you scale that business].

TC: You’re drawing a distinction between old-line industries and growth-stage tech companies, in other words, and you’re going after the former?

JR: [To me] a true technology company is one that actually builds the tool sets that are used by other businesses to make them bigger, faster, and stronger and I’ve been investing in those companies for 10 years with great success, but there’s a massive oversupply of capital in those spaces, particularly in the SaaS software space. It’s just not making mathematical sense on when it comes to a lot of these valuations. Meanwhile, when it comes to financial services, health care, travel, whatever, these are not tech entrepreneurs but they’re enlightened. We’re not introducing technology into the business, they already have it. But in one case, with a travel company we’re looking at closely, they want somebody who understands the travel space and also who understands technology and the impact as you scale globally.

The profile of the companies that I’m talking about have, on average, $100 million dollars of top line [growth], with flattish EBITDA, and that haven’t done any external financing with institutions. They’re growing at 20% to 50% a year, but they really want to become the next billion-dollar company.

TC: How much of these companies do you think you can own and for what size checks?

JR: We’re looking at 20% to 40% stakes in the business, so I’d say a significant minority, and we’re cutting checks of $50 to $75 million (U.S.)

TC: There aren’t a lot of massive companies in Canada, Shopify notwithstanding. How do you get the companies you plan to work with thinking on a different scale?

JR: Canadians might be a little bit more conservative, but the irony is, take a survey and [you’ll see] how many Canadians are running huge firms in the United States or in the Valley. It’s not inherent in Canadians [that they are risk averse].

Part of why I got into venture capital was I was so frustrated in the number of companies that were building products but couldn’t even generate revenues. Since then, I think we solved in Canada the zero to $10 million problem, then the $10 million to $100 million [challenge]. But starting around 2016 or so, I started to see companies that had $50 million, $60 million, $70 million in revenue starting to plateau, and the issue was global scalability.

In the U.S., so many companies can be a domestic company  and be a billion-dollar company. In Canada, our market is too small; you’re forced to sell on a global scale, and many Canadian companies struggle with that. So my focus now is that last part of the piece. How do we get these companies from $100 million businesses into $1 billion-plus?



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support