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, 3 January 2021

Human Capital: The biggest labor stories of 2020

Hellllooooo, 2021! Welcome back to Human Capital, a weekly newsletter that details the latest in the realms of labor, and diversity and inclusion.

Not a ton happened this week so I figured I’d use the time to look back on some of the more notable labor stories of 2020.

Sign up below to receive Human Capital in your inbox every Friday at 1 p.m. PT. 

Gig workers vs. Uber, Lyft, Instacart et al.

California’s Proposition 22, backed by gig companies like Uber, Lyft and DoorDash, passed to ensure gig workers are classified as independent contractors. It was an important proposition that resulted in the yes side contributing north of $200 million to its efforts. But the fight isn’t over, which you can read about here

Amazon’s stumbles

Amazon faced a number of labor disputes throughout the year — many of them involving its warehouse workers and surveillance

An example: Christian Smalls, a former Amazon warehouse worker, was fired from Amazon in March after organizing a walkout at one of the company’s fulfillment centers in Staten Island. As a result, New York’s attorney general is investigating if Amazon violated federal worker safety laws and New York state’s whistleblower protections laws by firing Smalls.

Smalls’ termination helped galvanize other warehouse workers who later formed an international organization to demand change inside Amazon’s warehouses. Organizers pointed to worker retaliation as one of the driving factors for the formation of Amazon Workers International. Meanwhile, Amazon executives reportedly discussed discrediting Smalls and making him the face of the organizing movement.

An Amazon spokesperson previously told TechCrunch the company did not fire Smalls for organizing a protest. Instead, Amazon said it fired him for “putting the health and safety of others at risk and violations of his terms of employment.”

In November, Smalls filed a lawsuit against Amazon alleging the company failed to provide PPE to its workers.

Tech workers unionize 

Kickstarter and Glitch became two of the first tech companies to unionize. Kickstarter workers voted to unionize in February. A month later, workers at Glitch voted to unionize.

In September, at least ten tech companies were actively looking to form unions, Grace Reckers, the lead northeast union organizer of OPEIU, told TechCrunch at the time.

“Employees are seeing that they don’t actually have control of how the products they make are being used,” she said. “Even though most of the messaging in Silicon Valley is about creating a better world for us, making our lives easier and innovating, it also moves under the philosophy of move fast and break things.”

Disclosure: My partner works at Glitch and serves on the union’s bargaining committee.

Pinterest finds itself under heavy scrutiny 

Two former Pinterest employees, Ifeoma Ozoma and Aerica Shimizu Banks, spoke out about racial and gender discrimination at the company. Shortly after, Pinterest’s former COO Francoise Brougher sued the company alleging gender discrimination. Pinterest settled the suit for $22.5 million.

But Ozoma and Banks described to me a double standard in their experiences compared to Brougher’s. While Brougher received a $20 million payout, Ozoma and Banks received less than one year’s worth of severance.

“This follows the time-honored tradition in America where Black women come forward, blazing a trail, revealing injustice and white women coming in and reaping all the benefits of that,” Banks told me.

Dr. Timnit Gebru’s departure from Google makes waves

SAN FRANCISCO, CA – SEPTEMBER 07: Google AI Research Scientist Timnit Gebru speaks onstage during Day 3 of TechCrunch Disrupt SF 2018 at Moscone Center on September 7, 2018 in San Francisco, California. (Photo by Kimberly White/Getty Images for TechCrunch)

Dr. Timnit Gebru, a top AI researcher, said she was fired from Google for sending an email to her direct reports discussing how she was disappointed in her organization’s approach to DEI as well as the approval process around her research paper. Gebru sent that email after Google did not grant her permission to attach her and her colleagues’ names to an AI ethics paper about language models. Gebru had previously sent her superiors an email, detailing that if they would not meet her specific conditions she would prepare to leave. Google proceeded to tell her it accepted her resignation and cut off her access to her work email. 

In December, Google CEO Sundar Pichai said it would review the events leading up to Gebru’s departure. In Pichai’s memo, he said the company needs to “accept responsibility for the fact that a prominent Black, female leader with immense talent left Google unhappily.” He also noted how it’s had a “ripple effect” through underrepresented communities at Google.

Alexis Ohanian makes room for Black people at the table

Reddit co-founder Alexis Ohanian stepped down from the company’s board of directors, insisting that Reddit replace him with a Black person. Reddit took Ohanian’s advice and appointed Y Combinator CEO Michael Seibel.

Troubles at coworking space The Wing

WASHINGTON,DC-APR9: Audrey Gelman, the founder of The Wing, a women’s only co-working space and organization, April 9, 2018 in Washington, DC. The Wing started in NYC and DC is their first location outside of New York. (Photo by Evelyn Hockstein/For The Washington Post via Getty Images)

The Wing blew up following allegations of racism and other forms of discrimination. Its CEO, Audrey Gelman, resigned as a result and later apologized for not taking any action

In a note sent to former employees, Gelman apologized for not taking action to combat mistreatment of women of color at The Wing. She also acknowledged that her drive for success and scaling quickly “came at the expense of a healthy and sustainable culture that matched our projected values, and workplace practices that made our team feel valued and respected.”

That meant, Gelman said, The Wing “had not subverted the historical oppression and racist roots of the hospitality industry; we had dressed it up as a kindler [sic], gentler version.”

TechCrunch Sessions: Justice is on the horizon

TC Sessions: Justice is hitting your virtual screens this March. You’ll be able to hear from folks like Backstage Capital’s Arlan Hamilton, Gig Workers Collective’s Vanessa Bain, Christian Smalls and others.

Tickets are available here for $5.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support