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, 4 May 2021

Tesla taps tiny startup’s tech to build cheaper, cleaner batteries

When Elon Musk stood on stage at Tesla’s Battery Day in September and promised to cut lithium-ion battery prices in half, he claimed some of the savings would come from reinventing the dirty and complex process of making their nickel metal cathodes.

“It’s insanely complicated, like digging a ditch, filling it in and digging the ditch again,” he said at the event. So we looked at the entire value chain and said how can we make this as simple as possible?”

The simplest route to appears to involve a small Canadian battery startup — or at least its patent applications.

Two weeks before Battery Day, Tesla purchased a number of patent applications from Springpower International, a small company based just outside Toronto, for a grand total of $3, according to public records.

One of those applications details an innovative process similar to one that Drew Baglino, Tesla’s senior vice-president of engineering, described on stage at Tesla’s factory in Fremont, California, on Battery Day. Buying the patent application means that when the patent itself was finally granted in January, it was issued to Tesla, with no mention of Springpower.

Manufacturing cathodes for electric vehicle batteries traditionally generates large quantities of contaminated water –  up to 4,000 gallons containing ammonia, metal particles and toxic chemicals for every ton of cathode material produced. Springpower’s process cleverly recirculates the chemical solution, removing the need for expensive water treatment.

Baglino’s presentation also depicted a method that also reuses water and produces no effluent. In addition to cutting operational costs by more than 75%, he said: “We can also use that same process to directly consume the metal powder coming out of recycled electric vehicle and grid storage batteries.”

It now seems likely that Tesla may have bought more than just Springpower’s intellectual property. A week before Battery Day, Springpower International’s website was replaced by a single holding page. And in the months since then, several Springpower researchers have altered their LinkedIn profiles to indicate that they are now working at Tesla. 

Springpower International CEO Michael Wang, whose own LinkedIn pagenow features dozens of updates from Tesla staffers (including Baglino), did not respond to a request for comment, and calls to the company’s switchboard went unanswered.

A senior Springpower International executive reached by phone would neither confirm nor deny Tesla’s purchase, and referred TechCrunch to Tesla’s public affairs team. (Tesla no longer has a press office, and emails to the company did not receive a reply).

Springpower International was founded in March 2010, in part by Chinese battery firm Highpower International, as a research arm for its Springpower subsidiary in Shenzen. But Highpower walked away from Springpower International within six months, writing off a $100,000 investment after deciding its technologies were too far from commercialization.

James Sbrolla, an “entrepreneur in residence” at a Canadian government-funded program, stepped in to mentor the young company. He helped it secure some small grants, and ultimately a $3.4 million (Canadian) sustainable technology award in 2018. However, he told TechCrunch that he has not talked to anyone at Springpower International since late 2020.

Sbrolla was not surprised to hear that the company might have been purchased.

“It’s a group of smart people, no question about it,” Sbrolla said. “Technology like Springpower’s gives tremendous upside with a reduced environmental footprint, and being attached to a larger organization makes scaling much quicker and easier.”

If, as seems likely, Springpower International has been acquired by Tesla, it would join only a dozen or so others, including another Canadian battery company, Hibar, bought in similar stealth in 2019.

Elon Musk has long looked north of the border for lithium-ion battery expertise. In 2015, Tesla signed a five-year exclusive partnership with Jeff Dahn, a leading battery researcher and professor at Dalhousie University in Nova Scotia. Dahn is named on a number of recent Tesla battery patents, and in January Tesla renewed Dahn’s contract for another five years.
Musk is on a years-long push to bring battery production in-house and scale back Tesla’s reliance on its current suppliers, Panasonic, LG Chem, and CATL. “Now that we have this process, we’re going to start building our own cathode facility in North America,” said Baglino on Battery Day.

Musk added that the combined benefits of Tesla’s new battery technologies could enable a $25,000 vehicle, but cautioned not to expect too much, too soon: “It will take us probably a year to 18 months to start realizing these advantages, and three years or thereabouts to fully realize them.”

Perhaps by that time, Springpower International’s role will be a little clearer.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support