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, 31 December 2018

Echo Wall Clock review

This was the year Amazon went all-in on the Alexa. September saw the announcement of a new Echo Dot, Show and Plus, a subwoofer, an audio input device, an auto dongle and an amplifier. That would have been plenty, but the company also started dipping its toes into the other side of things.

2018 also found Amazon experimenting in the connected device category — namely a microwave and wall clock (oh, and a singing fish, too). It’s a strange move on the face of it. After all, there are countless companies currently vying for a small slice of that mindshare.

But Amazon’s got a few key things going for it. For one, the company stands to gain from building products that exist solely to complement its Echo devices. For another, it’s able to sell products at — or close to — cost.

The Echo Wall Clock benefits quite a bit for both of these factors. It’s $30 device that’s essentially useless without an Alexa device. In fact, Alexa is required to set the time. That’s a downside in the off-chance you happen along one of these products without an Echo nearby. But it’s handy when it comes to set up.

Find a spot within 30 feet of a compatible device (Echo, Dot, Show, Plus, E Spot or Input.). Open the back. Pop in four AA batteries (included). Tell Alexa, “Set up my Echo Wall Clock.” Hold the little blue button on the back until the front light turns a kind of pulsating orange. Alexa will go to work, and when everything’s good to go, that light will turn blue.

I initially attempted to set up the device on my office Wi-Fi. Never a great idea with these sort of connected products. Large enterprise networks are a crapshoot, and the two devices were off again, on again. Assuming you’ve got a similar set-up, you’re going to want to keep the Wall Clock (and, for that matter, most Alexa devices) at home.

Once I switched to a personal network (via a MiFi), things went much more smoothly. Alexa will set the clock to your time zone. Bonus: It will automatically fall back and spring ahead when there’s a time change — certainly a leg up on most wall clocks.

There are a couple of things worth noting here, before we go any deeper. First: the Wall Clock is, for lack of a better term, cheap looking. It’s big and it’s plasticky. There’s no front glass. It is, honestly, the sort of design you’d expect from a wall clock made by Amazon. There’s no razzle dazzle here. It’s a simple-looking clock with a simple design. The upshot is it’s minimalist enough to fit in with most living rooms and kitchens.

That simplicity also extends to its feature set, which is currently mostly limited to timers. The 60 minute markers that line the edge are actually all individual LEDs. Tell Alexa to, say, “set a 10-minute timer” and 10 minute hands will light up and then individually go dark to count down the  time. Once the countdown is over, the full diameter will flash slowly until you tell Alexa to stop.

And that’s it, really. Timers and alarms. The Wall Clock is one of the first passive Alexa devices from Amazon. Your Echo is really doing all of the heavy lifting, including listening and talking. You can’t, say, ask the clock for the time or the weather, which is why you need an Echo close by. It also doesn’t emit a sound when the alarm goes off. Of course, that means a cheaper price — and much longer battery life.

The Echo Wall Clock isn’t a necessary device, but it could prove a handy one. If you cook a lot, for instance, it’s nice having a large visual reference in addition to the Echo’s built-in timers. Beyond that, however, I’m struggling to come up with too many scenarios in which it feels indispensable. And honestly, I’m not holding my breath in expectation that Amazon will be bringing more to the table here.

 

The device succeeds more as a proof of concept for the ways Alexa and compatible devices can push the boundaries of the smart home. There’s nothing particularly compelling here for most consumers — but at $30, perhaps it doesn’t have to be.



from TechCrunch https://tcrn.ch/2AnrSay
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support