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

Thursday, 1 November 2018

Flickr revamps under SmugMug with new limits on free accounts, unlimited storage for Pros

Flickr is making some big changes, following its acquisition by SmugMug earlier this year. The company announced this week it’s addressing a series of issues on the site, including spam, customer support, and use of the Yahoo login, for example. But more notably, it’s also revamping its account structure to impose increased limits for free users, while rolling out unlimited storage for Pro subscribers.

Back in 2013, Flickr introduced a full terabyte of storage for free members – a move it hoped would bring more users to its service. But in the years since, consumers have shifted to services like Apple’s iCloud and Google Photos, which are integrated with iPhones and Android smartphones, as a way to backup their photos.

The free storage attracted the wrong kind of user to Flickr, says Andrew Stadlen, VP of Product at Flickr, in an announcement explaining the move.

“In 2013, Yahoo lost sight of what makes Flickr truly special and responded to a changing landscape in online photo sharing by giving every Flickr user a staggering terabyte of free storage. This, and numerous related changes to the Flickr product during that time, had strongly negative consequences,” Stadlen writes.

“First, and most crucially, the free terabyte largely attracted members who were drawn by the free storage, not by engagement with other lovers of photography. This caused a significant tonal shift in our platform, away from the community interaction and exploration of shared interests that makes Flickr the best shared home for photographers in the world,” he adds.

The other issue the new team has with the “free storage” giveaway is that it meant the Yahoo-owned Flickr was more beholden to advertisers. Shifting to a subscription model means Flickr’s new owners, SmugMug, can focus on building features for members, not advertisers.

Stadlen also says that giving away storage devalued Flickr in users’ eyes – they no longer saw it as product worth paying for.

Flickr now aims to change that by reducing free storage to 1,000 photos – a limit it came up with based on observations of how free and Pro members were already using the site. The vast majority of free users have fewer than 1,000 photos uploaded, so won’t be impacted, the company claims.

Pro members can now choose to upgrade to a paid plan for $5.99 per month, or they can save 30% and pay $50 per year, when they opt for annual billing. The Pro membership includes unlimited photo storage, an ad-free experience, advanced statistics, automatic backup through Auto-Uploader, and discounts from Adobe, Blurb, SmugMug, and Priime.

Alongside the news of the account changes, the company announced product changes to the site itself, which is rolling out support for photo resolutions up the 5K (5120 x 5120) – that’s 26 Megapixels, or up to 6X larger than Flickr’s current 4 Megapixel maximum, notes Don MacAskill, Co-Founder and CEO at SmugMug.

He says Flickr will also offer full support for embedded color profiles across all modern browsers, devices, and displays; and improvements to the photo ingestion process for faster uploads with fewer errors.

Customer support is getting a revamp, as well, with a dozen experts who will respond to members’ issues, an expanded self-help section, and a new Trust & Safety department.

The company says it’s now partnered with Sift to help fight spam, and with cybersecurity firm HackerOne to continually test its defense systems. The latter is particular helpful given the stain Flickr has on its name by being associated with Yahoo, whose data breaches impacted billions.

The new Flickr will also dump the Yahoo Login, with a new login rolled out to the site in early 2019 that will allow users to sign up with any email address, not just a Yahoo account.

The changes go to address a number of complaints users, and especially pro photographers, had with Flickr during its Yahoo years. The challenge, however, is to win back the disgruntled customers, and get them to pay for storage and features.

MacAskill believes SmugMug will be able to do so, by listening and working with Flickr’s community.

“We bought Flickr because it’s the largest photographer-focused community in the world. I’ve been a fan for 14 years. There’s nothing else like it. It’s the best place to explore, discover, and connect with amazing photographers and their beautiful photography,” he says. “Flickr is a priceless Internet treasure for everyone and we’re so excited to be investing in its future. Together, hand-in-hand with the the most amazing community on the planet, we can shape the future of photography.”

(Disclosure: Yahoo merged with AOL to become Oath, which also owns TechCrunch. Flickr is no longer owned by Yahoo or Oath as SmugMug bought it in April, 2018.) 



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support