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

Monday, 2 November 2020

Raspberry Pi Foundation announces the cute little Raspberry Pi 400

This is the Atari 400 Raspberry Pi 400. The Raspberry Pi Foundation is launching a new product today — and it’s a brand new device. As you can see on the photo, the Raspberry Pi 400 is a computer integrated in a compact keyboard that costs $70.

And it is the easiest way to get started with a Raspberry Pi. If you’re not familiar with the Raspberry Pi, it’s a single-board computer with a lot of connectors that is the size of a deck of cards.

You can give it to a kid so that they can play around with a terminal, you can use it for your weekend projects as the computing brain or you can give it to your grandparents to replace their slow Windows XP computer that they use to receive emails.

Last year, when the Raspberry Pi Foundation introduced the Raspberry Pi 4, the foundation also used this opportunity to release a cute mouse and a keyboard. Of course, you could use these accessories with a Raspberry Pi. And your basic setup would look something like this:

Image Credits: Romain Dillet / TechCrunch

Those are great goodies for Raspberry Pi fans. And yet, there are many, many keyboard and mouse manufacturers out there. Building their own mouse and keyboard didn’t really make sense.

It turns out that the Raspberry Pi Foundation had another idea in mind. The Raspberry Pi 400 is essentially the exact same keyboard — but with an integrated Raspberry Pi. Their next project has been sitting there right in front of us for the past year.

Raspberry Pi 400 (top) and Raspberry Pi keyboard (bottom). Image Credits: Romain Dillet / TechCrunch

The Raspberry Pi Foundation has already sent me a Raspberry Pi 400 to try it out. While many of my colleagues are excited about the PlayStation 5 and the Xbox Series X, I was also really excited about receiving this new device.

Because, yes, the Raspberry Pi 400 (or, as TechCrunch’s Brian Heater called it, the PiStation) looks really cute. You plug a couple of cables and you’re ready to go. As far as I can see, it’s a fanless device so it doesn’t make any sound when it’s on.

Image Credits: Romain Dillet / TechCrunch

Putting a computer inside a keyboard is nothing new. You could even say that personal computers started this way. Back in the 1980s, you could plug your computer-in-a-keyboard to your TV and get started right away.

At some point, computers became more complicated. You had to buy a computer tower, a display, a mouse, a keyboard, etc. Laptops reversed this trend by packing everything you need in one device. But laptops aren’t perfect either.

The Raspberry Pi 400 is a great device for kids. In many ways, it’s much more powerful than a Chromebook. You can learn a lot more about computers and you feel less restricted in what you can do.

I could see it in schools, at home in the play room or on a shelf waiting to be plugged to a display. This is a great way to get started playing around with computers.

Image Credits: Romain Dillet / TechCrunch

It gets more interesting when you think about older kids. Many people have said that closed schools have been particularly challenging this year, especially because you don’t necessarily have enough computers for everyone in your home.

If your kid is old enough to get a smartphone, that doesn’t mean they have a comfortable setup for remote classes. The Raspberry Pi 400 is a cheap device that could fill that gap. Moreover, the Raspberry Pi 400 could be a good way to separate school from leisure activities (and social networks).

Now let’s talk about specifications. The Raspberry Pi 400 is pretty similar to a Raspberry Pi 4, but not exactly. It has an ARM-based system on a chip (64-bit quad-core ARM Core-A72 at 1.8GHz for those who are curious). It comes with 4GB of RAM, Wi-Fi, Bluetooth 5.1, Bluetooth Low Energy and Gigabit Ethernet.

When it comes to ports, you get two micro-HDMI ports, which means that you can plug two 4K displays in case you really need a lot of screen real estate. There are two USB 3.0 ports, one USB 2.0 port and a USB-C port for the power brick.

Like other Raspberry Pi devices, it uses microSD cards for the operating system and to store your data. You can use Raspberry Pi Desktop, a Debian-based Linux operating system, or a third-party operating system, such as Ubuntu.

There are different models with UK, US, French, Italian, German and Spanish keyboard layouts. In addition to the $70 device, you can buy the Raspberry Pi 400 kit with a mouse, a power supply, a micro-HDMI to HDMI cable, a pre-formatted microSD card and the official beginner’s guide for $100. It should be available in the coming days.

Image Credits: Romain Dillet / TechCrunch



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support