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, 28 December 2020

Tappity raises $1.3M for its interactive and educational video library for kids

When kids today want to learn about a new topic they’re interested in, they’ll often turn to YouTube. But the quality of the educational content on the platform can be hit or miss, depending on what specific videos kids happen to come across. Tappity, a digital educational startup now backed by $1.3 million in seed funding, aims to offer an alternative. Its video library offers entertaining and interactive live-action videos kids enjoy, while also ensuring the content itself is aligned with current educational standards.

The two-year old startup was co-founded by CEO Chad Swenson, his brother and CTO Tanner Swenson, and CPO Lawrence Tran.

Image Credits: Tappity founders

As Chad explains, the idea for Tappity emerged from his interest in designing interactive learning experiences, which resulted in a senior project eight years ago where he created an interactive experience to help students learn about evolution. Over the years that followed, he began to experiment with different concepts in this area, but never planned for anything of venture scale.

However, Chad says he later realized there could be an opportunity to develop content based around the Next Generation Science Standards (NGSS) — the set of K-12 science content standards that were developed by a consortium of multiple U.S. states — whose adoption across the U.S. is now growing.

“A lot of parents were looking for healthier alternatives to YouTube,” Chad says. “And I really started to believe this is something that could be much bigger.”

He found also that the science-based topics kids are generally interested in are often those that are aligned with what the NGSS aims to teach — like space, dinosaurs, geology and others.

“A big inspiration was just looking at the most popular books on Amazon for kids,” Chad adds, noting that a large number of these books are focused on STEM-related subjects.

Chad met his co-founder Lawrence Tran when consulting for fintech startup Bill.com, and convinced him and his brother Tanner to work on the startup.

Over the course of a couple of years, Tappity has developed tools that make it easier and efficient to produce interactive, educational video content. Today, the library includes over 200 science lessons for kids ages 4 to 10, across thousands of videos.

While the video clips themselves are pre-recorded, they give the kids the feeling of having a one-on-one interaction with the character on the screen. For example, if the teacher is building something and needs a screwdriver, the kids can pass it to her in the app when she asks. But they’ll also have a lot of other fun options they can do instead, like passing her tape or even throwing pizza at her — and she’ll react. The teacher may also engage with kids in other ways, too, like responding to what they drew in the app, among other things.

Image Credits: Tappity

Currently, Tappity’s teacher Haley the Science Gal (Haley McHugh), a childhood entertainment expert with over 10 years of experience, is leading the lessons which span topics like space, life science, earth science and physical science.

In addition to the video lessons, kids are engaged with an in-app points system for completing activities. The app also offers follow-up emails for parents so they can track what kids are learning and further engage them.

Due to the COVID pandemic, and the resulting screen fatigue that comes from virtual schooling, Tappity adapted some lessons to include offline activities — like drawing with paper and pens, for instance. And on Sundays, Tappity offers more involved activities parents and kids can do together — like baking cookies that you turn into Pangea or making a volcano.

Tappity expects to have over 1,000 hours of video content by the end of next year, and over 4,000 hours by the year after, Chad notes.

When the team of three applied to startup accelerator Y Combinator, Tappity was small but profitable, thanks to its in-app subscription tiers that average around $9 per month. Today, the company has over 5,000 paying customers and over 20,000 weekly active users who have collectively completed 30 million lessons to date.

The company has now raised a seed round of $1.3 million from Y Combinator, Mystery Science founder Keith Schacht, Toca Boca founder Björn Jeffery, Brighter Capital (Yun-Fang Juan), former Spotify CTO Andreas Ehn, and others.

In the near-term, Tappity is working to expand its team and bring its lessons — that today are only available on iOS — to the web. Over time, the company’s goal is to create a large library of interactive educational content.

While the COVID pandemic has inspired VCs to invest in more edtech startups, the longevity of some of these businesses in the post-COVID world remains to be seen. Where Tappity is different from many of these remote learning startups or those designed for the classroom, is that its focus is not on selling into the school system.

“Teachers have picked it up organically — we give it away free to schools right now,” Chad explains. “But we’re not dedicating any resources to it because we’re focused on the parents’ and kids’ needs, which are quite a bit different,” he says.

Tappity’s app is available iOS, and includes some free content outside of the subscription.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support