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 28 May 2021

Café helps hybrid organizations schedule in-office time

Meet Café, a new French startup founded by two brothers that wants to help companies switch to a hybrid remote-and-office workplace model. Café isn’t a traditional desk-booking tool. Instead, the company helps you see when people in your team are coming to the office so that you can plan when you should go to the office as well.

Instead of focusing on workspace, Café focuses on people first. “We decided that we wouldn’t let you book a desk directly,” co-founder and CTO Arthur Lorotte de Banes told me.

When you open the app, you get a simplified calendar view. For each day, you can see your team members divided by groups — people coming to the office, people working from home, etc.

In just a few taps, you can tell your other coworkers what you plan to do. This way, it becomes much easier to schedule meetings, have in-person conversation and more generally hang out with your coworkers. It also makes it easier to find a common day with a specific coworker if you’re working on the same project.

“We interviewed 150 companies and we realized companies faced the same issue after interviewing the first five companies. They all use spreadsheets,” co-founder and CEO Tom Nguyen told me.

Image Credits: Café

Using a tool like Café also gives you insights about your office. For instance, you can see the average number of persons in your office depending on the day of the week or the day of the month. Admins can configure a weekly reminder to make sure that everybody fills out information.

In addition to its mobile app and web app, Café integrates with your existing tools. For instance, you can connect your Café account with Slack so that your status on Slack reflects your status in Café. Teammates can hover over your name to know that you’re in the office or you’re at home.

The company is also working on integrations with human resource information systems, such as PayFit, so that your vacation is automatically synchronized with Café.

Image Credits: Café

As companies start hashing out a plan to return to the office, Café arrives on the market at the right time. Companies can create custom statuses to fit their specific needs. For instance, a Café customer has created a status so that they know who has the office keys to make sure that the office remains open.

The company raised a $1 million seed round from 122West, Kima Ventures, Jonathan Widawski, Guillaume Lestrade, Jacques-Edouard Sabatier and various business angels who work or have worked for WeWork, Dropbox, Github, Snapchat, Intercom, Stripe, Alan and PayFit.

Like Typeform, Doodle or Slido, Café has chosen a freemium strategy. Teams can sign up for free and start using the product with their immediate coworkers. You don’t need to enter card information to sign up.

If you want to roll it out across the organization with more users, you have to start paying. The startup believes employees will become product advocates for the entire organization. And it seems like the right strategy for a product that is supposed to make employees happier at work.



from TechCrunch https://ift.tt/34t5Lhg
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support