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

Tuesday, 27 October 2020

Uber’s ‘robo-firing’ of drivers targeted in latest European lawsuit

Uber is facing another legal challenge in Europe related to algorithmic decision making.

The App Drivers & Couriers Union (ADCU) filed a case, yesterday, with a court in the Netherlands seeking to challenge the ride hailing company’s practice of ‘robo-firing’ — aka the use of automated systems to identify fraudulent activity and terminate drivers based on that analysis.

Under EU law individuals subject to solely automated decisions have a right to request a human review. Article 22 of the General Data Protection Regulation (GDPR) gives data subjects the right not to be subject to a solely automated decision where there’s a significant legal or similar effect.

The ADCU case contends that Uber drivers in the UK and Portugal have been “wrongly accused of ‘fraudulent activity as detected by Uber systems before being fired without right of appeal”.

“In each of the cases the drivers were dismissed after Uber said its systems had detected fraudulent activity on the part of the individuals concerned. The drivers absolutely deny that they were in any way engaged in fraud and Uber has never made any such complaint to the police. Uber has never given the drivers access to any of the purported evidence against them nor allowed them the opportunity to challenge or appeal the decision to terminate,” it writes in a press release about the action.

A spokeswoman for Uber said the cases of the drivers in question had been manually reviewed by specialist staff prior to the terminations.

However the ADCU’s contention is that Uber is using an overly broad definition of ‘fraud’ to undercut its obligations to workers’ rights by concealing performance-related dismals — noting that the company’s ‘Community Guidelines’ define ‘fraud’ to include declining work offered and strategically logging out to await higher surge pricing.

A segment of Uber’s guidelines on fraud states that it is “constantly on the lookout for fraud by riders and drivers who are gaming our systems”. The text goes on to specify that some of the behaviours which may cause an Uber driver to have their account deactivated include: “deliberately increasing the time or distance of a trip; accepting trips without the intention to complete, including provoking riders to cancel; creating dummy rider or driver accounts for fraudulent purposes; claiming fraudulent fees or charges, like false cleaning fees; and intentionally accepting or completing fraudulent or falsified trips”.

The union says driver 1, who was based in London, was summarily dismissed after Uber said their systems had detected “irregular trips associated with fraudulent activities — and was never given an explanation nor a right of appeal.

Driver 2, also based in London, was summarily dismissed after Uber claimed its systems detected the installation of and use of software which has the intention and effect of manipulating the Driver App’. Again it says the driver was given no further explanation of the allegations and was denied the right of appeal.

Driver 3, based in Birmingham, was similarly terminated without right of appeal after Uber said their systems had detected “a continued pattern of improper use of the Uber application…..& this created a poor experience for all parties.”

A fourth driver, based in Lisbon, Portugal, had their account deactivated after Uber claimed its systems detected the recurrent practice of irregular activities during use of the Uber App.

Uber declined to go into specific detail on the cases of the individual drivers involved in the ADCU challenge but said it does not see any new allegations based on the press release — adding that it’s awaiting any new information from the courts.

“Uber provides requested personal data and information that individuals are entitled to. We will give explanations when we cannot provide certain data, such as when it doesn’t exist or disclosing it would infringe on the rights of another person under GDPR. As part of our regular processes, the drivers in this case were only deactivated after manual reviews by our specialist team,” the company said in a statement.

We also asked the company if it manually reviews all the cases of drivers whom its algorithm has identified as engaged in fraudulent activity — but at the time of writing it had not responded to the question.

The ADCU is inviting other former Uber drivers from the UK and throughout the European Economic Area who have been similarly dismissed over alleged ‘fraudulent activity’ to register on its website to join the collective action which they’re hoping to part-fund via a crowdjustice campaign.

In July the union backed another challenge to Uber’s algorithms — in that case focused on the use of profiling and data-fueled algorithms to manage drivers, looping in the GDPR’s data access rights.

Last month the union also lodged a similar challenge to India-based ride-hailing platform Ola.



from TechCrunch https://ift.tt/2Tt4Ec3
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support