/* * This file is part of Psy Shell. * * (c) 2012-2023 Justin Hileman * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Psy; use Psy\ExecutionLoop\ProcessForker; use Psy\VersionUpdater\GitHubChecker; use Psy\VersionUpdater\Installer; use Psy\VersionUpdater\SelfUpdate; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputOption; if (!\function_exists('Psy\\sh')) { /** * Command to return the eval-able code to startup PsySH. * * eval(\Psy\sh()); */ function sh(): string { if (\version_compare(\PHP_VERSION, '8.0', '<')) { return '\extract(\Psy\debug(\get_defined_vars(), isset($this) ? $this : @\get_called_class()));'; } return <<<'EOS' if (isset($this)) { \extract(\Psy\debug(\get_defined_vars(), $this)); } else { try { static::class; \extract(\Psy\debug(\get_defined_vars(), static::class)); } catch (\Error $e) { \extract(\Psy\debug(\get_defined_vars())); } } EOS; } } if (!\function_exists('Psy\\debug')) { /** * Invoke a Psy Shell from the current context. * * For example: * * foreach ($items as $item) { * \Psy\debug(get_defined_vars()); * } * * If you would like your shell interaction to affect the state of the * current context, you can extract() the values returned from this call: * * foreach ($items as $item) { * extract(\Psy\debug(get_defined_vars())); * var_dump($item); // will be whatever you set $item to in Psy Shell * } * * Optionally, supply an object as the `$bindTo` parameter. This determines * the value `$this` will have in the shell, and sets up class scope so that * private and protected members are accessible: * * class Foo { * function bar() { * \Psy\debug(get_defined_vars(), $this); * } * } * * For the static equivalent, pass a class name as the `$bindTo` parameter. * This makes `self` work in the shell, and sets up static scope so that * private and protected static members are accessible: * * class Foo { * static function bar() { * \Psy\debug(get_defined_vars(), get_called_class()); * } * } * * @param array $vars Scope variables from the calling context (default: []) * @param object|string $bindTo Bound object ($this) or class (self) value for the shell * * @return array Scope variables from the debugger session */ function debug(array $vars = [], $bindTo = null): array { echo \PHP_EOL; $sh = new Shell(); $sh->setScopeVariables($vars); // Show a couple of lines of call context for the debug session. // // @todo come up with a better way of doing this which doesn't involve injecting input :-P if ($sh->has('whereami')) { $sh->addInput('whereami -n2', true); } if (\is_string($bindTo)) { $sh->setBoundClass($bindTo); } elseif ($bindTo !== null) { $sh->setBoundObject($bindTo); } $sh->run(); return $sh->getScopeVariables(false); } } if (!\function_exists('Psy\\info')) { /** * Get a bunch of debugging info about the current PsySH environment and * configuration. * * If a Configuration param is passed, that configuration is stored and * used for the current shell session, and no debugging info is returned. * * @param Configuration|null $config * * @return array|null */ function info(Configuration $config = null) { static $lastConfig; if ($config !== null) { $lastConfig = $config; return; } $prettyPath = function ($path) { return $path; }; $homeDir = (new ConfigPaths())->homeDir(); if ($homeDir && $homeDir = \rtrim($homeDir, '/')) { $homePattern = '#^'.\preg_quote($homeDir, '#').'/#'; $prettyPath = function ($path) use ($homePattern) { if (\is_string($path)) { return \preg_replace($homePattern, '~/', $path); } else { return $path; } }; } $config = $lastConfig ?: new Configuration(); $configEnv = (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) ? $_SERVER['PSYSH_CONFIG'] : false; if ($configEnv === false && \PHP_SAPI === 'cli-server') { $configEnv = \getenv('PSYSH_CONFIG'); } $shellInfo = [ 'PsySH version' => Shell::VERSION, ]; $core = [ 'PHP version' => \PHP_VERSION, 'OS' => \PHP_OS, 'default includes' => $config->getDefaultIncludes(), 'require semicolons' => $config->requireSemicolons(), 'strict types' => $config->strictTypes(), 'error logging level' => $config->errorLoggingLevel(), 'config file' => [ 'default config file' => $prettyPath($config->getConfigFile()), 'local config file' => $prettyPath($config->getLocalConfigFile()), 'PSYSH_CONFIG env' => $prettyPath($configEnv), ], // 'config dir' => $config->getConfigDir(), // 'data dir' => $config->getDataDir(), // 'runtime dir' => $config->getRuntimeDir(), ]; // Use an explicit, fresh update check here, rather than relying on whatever is in $config. $checker = new GitHubChecker(); $updateAvailable = null; $latest = null; try { $updateAvailable = !$checker->isLatest(); $latest = $checker->getLatest(); } catch (\Throwable $e) { } $updates = [ 'update available' => $updateAvailable, 'latest release version' => $latest, 'update check interval' => $config->getUpdateCheck(), 'update cache file' => $prettyPath($config->getUpdateCheckCacheFile()), ]; $input = [ 'interactive mode' => $config->interactiveMode(), 'input interactive' => $config->getInputInteractive(), 'yolo' => $config->yolo(), ]; if ($config->hasReadline()) { $info = \readline_info(); $readline = [ 'readline available' => true, 'readline enabled' => $config->useReadline(), 'readline service' => \get_class($config->getReadline()), ]; if (isset($info['library_version'])) { $readline['readline library'] = $info['library_version']; } if (isset($info['readline_name']) && $info['readline_name'] !== '') { $readline['readline name'] = $info['readline_name']; } } else { $readline = [ 'readline available' => false, ]; } $output = [ 'color mode' => $config->colorMode(), 'output decorated' => $config->getOutputDecorated(), 'output verbosity' => $config->verbosity(), 'output pager' => $config->getPager(), ]; $theme = $config->theme(); // TODO: show styles (but only if they're different than default?) $output['theme'] = [ 'compact' => $theme->compact(), 'prompt' => $theme->prompt(), 'bufferPrompt' => $theme->bufferPrompt(), 'replayPrompt' => $theme->replayPrompt(), 'returnValue' => $theme->returnValue(), ]; $pcntl = [ 'pcntl available' => ProcessForker::isPcntlSupported(), 'posix available' => ProcessForker::isPosixSupported(), ]; if ($disabledPcntl = ProcessForker::disabledPcntlFunctions()) { $pcntl['disabled pcntl functions'] = $disabledPcntl; } if ($disabledPosix = ProcessForker::disabledPosixFunctions()) { $pcntl['disabled posix functions'] = $disabledPosix; } $pcntl['use pcntl'] = $config->usePcntl(); $history = [ 'history file' => $prettyPath($config->getHistoryFile()), 'history size' => $config->getHistorySize(), 'erase duplicates' => $config->getEraseDuplicates(), ]; $docs = [ 'manual db file' => $prettyPath($config->getManualDbFile()), 'sqlite available' => true, ]; try { if ($db = $config->getManualDb()) { if ($q = $db->query('SELECT * FROM meta;')) { $q->setFetchMode(\PDO::FETCH_KEY_PAIR); $meta = $q->fetchAll(); foreach ($meta as $key => $val) { switch ($key) { case 'built_at': $d = new \DateTime('@'.$val); $val = $d->format(\DateTime::RFC2822); break; } $key = 'db '.\str_replace('_', ' ', $key); $docs[$key] = $val; } } else { $docs['db schema'] = '0.1.0'; } } } catch (Exception\RuntimeException $e) { if ($e->getMessage() === 'SQLite PDO driver not found') { $docs['sqlite available'] = false; } else { throw $e; } } $autocomplete = [ 'tab completion enabled' => $config->useTabCompletion(), 'bracketed paste' => $config->useBracketedPaste(), ]; // Shenanigans, but totally justified. try { if ($shell = Sudo::fetchProperty($config, 'shell')) { $shellClass = \get_class($shell); if ($shellClass !== 'Psy\\Shell') { $shellInfo = [ 'PsySH version' => $shell::VERSION, 'Shell class' => $shellClass, ]; } try { $core['loop listeners'] = \array_map('get_class', Sudo::fetchProperty($shell, 'loopListeners')); } catch (\ReflectionException $e) { // shrug } $core['commands'] = \array_map('get_class', $shell->all()); try { $autocomplete['custom matchers'] = \array_map('get_class', Sudo::fetchProperty($shell, 'matchers')); } catch (\ReflectionException $e) { // shrug } } } catch (\ReflectionException $e) { // shrug } // @todo Show Presenter / custom casters. return \array_merge($shellInfo, $core, \compact('updates', 'pcntl', 'input', 'readline', 'output', 'history', 'docs', 'autocomplete')); } } if (!\function_exists('Psy\\bin')) { /** * `psysh` command line executable. * * @return \Closure */ function bin(): \Closure { return function () { if (!isset($_SERVER['PSYSH_IGNORE_ENV']) || !$_SERVER['PSYSH_IGNORE_ENV']) { if (\defined('HHVM_VERSION_ID')) { \fwrite(\STDERR, 'PsySH v0.11 and higher does not support HHVM. Install an older version, or set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (\PHP_VERSION_ID < 70000) { \fwrite(\STDERR, 'PHP 7.0.0 or higher is required. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (\PHP_VERSION_ID > 89999) { \fwrite(\STDERR, 'PHP 9 or higher is not supported. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (!\function_exists('json_encode')) { \fwrite(\STDERR, 'The JSON extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (!\function_exists('token_get_all')) { \fwrite(\STDERR, 'The Tokenizer extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } } $usageException = null; $shellIsPhar = Shell::isPhar(); $input = new ArgvInput(); try { $input->bind(new InputDefinition(\array_merge(Configuration::getInputOptions(), [ new InputOption('help', 'h', InputOption::VALUE_NONE), new InputOption('version', 'V', InputOption::VALUE_NONE), new InputOption('self-update', 'u', InputOption::VALUE_NONE), new InputArgument('include', InputArgument::IS_ARRAY), ]))); } catch (\RuntimeException $e) { $usageException = $e; } try { $config = Configuration::fromInput($input); } catch (\InvalidArgumentException $e) { $usageException = $e; } // Handle --help if (!isset($config) || $usageException !== null || $input->getOption('help')) { if ($usageException !== null) { echo $usageException->getMessage().\PHP_EOL.\PHP_EOL; } $version = Shell::getVersionHeader(false); $argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : []; $name = $argv ? \basename(\reset($argv)) : 'psysh'; echo <<getOption('version')) { echo Shell::getVersionHeader($config->useUnicode()).\PHP_EOL; exit(0); } // Handle --self-update if ($input->getOption('self-update')) { if (!$shellIsPhar) { \fwrite(\STDERR, 'The --self-update option can only be used with with a phar based install.'.\PHP_EOL); exit(1); } $selfUpdate = new SelfUpdate(new GitHubChecker(), new Installer()); $result = $selfUpdate->run($input, $config->getOutput()); exit($result); } $shell = new Shell($config); // Pass additional arguments to Shell as 'includes' $shell->setIncludes($input->getArgument('include')); try { // And go! $shell->run(); } catch (\Throwable $e) { \fwrite(\STDERR, $e->getMessage().\PHP_EOL); // @todo this triggers the "exited unexpectedly" logic in the // ForkingLoop, so we can't exit(1) after starting the shell... // fix this :) // exit(1); } }; } } Something Lolly? Gen Z Is Actually Ditching Tinder For This Personal Dating Application – DLO Heights

DLO Heights

Something Lolly? Gen Z Is Actually Ditching Tinder For This Personal Dating Application

In June 2020, university senior Marc Baghadjian, 21, and Sacha Schermerhorn, 24, connected around monotony of dating apps and “swipe culture.” This means that, the two developed
Lolly, a brand new, short-form video clip dating app
. Pitched as “Tinder satisfies TikTok,” Lolly blurs the outlines between social media and dating programs, and it’s switching the way that Gen Z dates on line.

In 2018, Baghadjian in the beginning came up with
Skippit
, an internet dating application that allows customers video chat international (empowered by his own choice to FaceTime over text). Nevertheless when larger online dating programs like
Tinder and Hinge rolled away their very own in-app video phoning
features, Skippit petered on. But Baghadjian stayed disappointed because of the “yes” and “no” binary of a lot more popular applications and brainstormed with Schermerhorn to generate a very entertaining solution to digitally big date.

Just How Lolly Performs

“We got the inspiration of a video clip environment from TikTok,”
Angela Huang
, Lolly’s press connect, informs Bustle. “Short video content material provides consumers a whole lot important details to help make a lot more important associations. You can view someone’s dog, the way they communicate with their loved ones, their character, and quirks.”

Like TikTok, Lolly means showing, not telling. There is no place for bios or necessary questions to resolve — only space to produce content.

“We motivate men and women to upload up to they desire,” Huang says. “Until you develop a profile that showcases your own real-life individuality.”

Should you decide enjoy somebody’s movie (or imagine they’re hot), it is possible to “clap” straight back at it, which informs the originator. Assuming you have in mind talking, you can easily “crush” all of them, offering the creator the choice to accept or deny your demand. Even though videos themselves are only 15 mere seconds very long, Lolly wants that take your time. There isn’t any dash or necessity to choose if you are into someone. You are going to keep watching the same consumers on vertical feed website, even although you do not immediately “clap” or “crush.”

“it isn’t ‘i love you!’ or ‘I do not as you,'” Huang says. “It’s, ‘I’m not sure you, but i do want to familiarize yourself with you much better.'”

TikTok Is Changing The Dating Software Landscape

Regarding program and matter, TikTok had been a large determination for Lolly. Actually,
Jamie Lee
and
Margaux Weiner,
both 21, while the founder and head of marketing associated with the brand new personal software,
Flox
, inform Bustle that TikTok is actually affecting all round culture of Gen Z dating.

“TikTok benefits relatable material and genuine material,” Lee states. “oahu is the antithesis of your Facetune culture which is been around on social media marketing and internet dating apps for a long time. TikTok talks to Gen Z’s desire for authenticity and community building — as electronic natives, we have adult inside curated feed of room, and we’re actually in search of even more genuine connections. TikTok lets individuals tap into their particular niche and their very own individuality and really operate with that.”

Typical matchmaking programs are “transactional” and “formulaic,” and Lee and Weiner say Gen Z is seeking matchmaking apps with unrestricted connections. Schermerhorn and Baghadjian agree, adding that the generation can also be looking to interact with content which is a lot more dynamic than some photos and a bio.

“Swiping society is special,” Baghadjian claims. “We would like to consider multi-faceted elegance and personality.”

Dr. Carla Marie Manly
, a clinical psychologist, informs Bustle that TikTok has actually lured Gen Z to apps with additional entertaining interfaces on a neurobiological level. “The greater number of we provide our head with instantaneous, high-intensity, high-stimulus applications, the more we’re going to crave connections of this kind,” Dr. Manly claims. “in contrast, more static, traditional applications may suffer dull and less visually appealing.”

And larger applications tend to be using note:
Hinge included video clip uploads
with their profiles in 2017, and
in 2018, Tinder added “Loops,”
short, two-second video clips, to help make the software a lot more powerful. ”
More than half of our members
tend to be Gen Zers,” a representative from Tinder tells Bustle. “We establish item characteristics using their needs and interests planned.”

Dr. Manly says that fast, dynamic programs like TikTok are linked to reduced attention covers and higher distractability amounts. A heightened desire to have even more communication inside the app is positive. “The greater number of people decided to connect with other people, a lot more likely truly that bonding, social associations will develop,” she says. “utilizing small video clips to show off creativeness, abilities, and laughter is a wonderful method to engage others.”

The Rise of Personal Dating

For Gen Z, the divide between actual and online every day life is virtually non-existent. “revealing material, placing comments on every other peoples articles, observing one another through pages and pictures, this is how connections are generally being formed,” Baghadjian states. “Current dating applications don’t have the data transfer to battle the sorts of associations that effectively portray those presently going on among Gen Z.”

Dr. Manly elaborates that as a result of the normalization of technologies and existence on the internet, Gen Z’s understanding of “personal” differs from past generations. “Not only can sharing content spark new relationships — romantic and otherwise — but it assists build self-awareness and confidence,” she states. “By assisting consumers build a community which predicated on significantly more than superficial looks, more strong, they could much better develop enduring associations.”

Thus, is Lolly a social media system? Could it be a dating app? Baghadjian says it is both. Dubbing the application a new form of “personal Dating,” Lolly imitates social networking flirting for a “real existence” dating knowledge. Because, for Gen Z, social networking

is

real world.

“Gen Z has actually lived all of our social resides in a digital sense for our entire physical lives,” Weiner informs Bustle. “therefore’re beginning to outgrow the present types of meeting folks that exist today.”

Like Baghadjian and Schermerhorn, Lee and Weiner aspire to reduce and “socialize” ways Gen Z links. They don’t would like you to learn should you “like” somebody right-away. They really want you to get knowing folks, when you would in a classroom, before making a decision how you feel.

“Friendship is certainly not becoming prioritized within innovation,” Weiner informs Bustle. “We would like to celebrate all types of associations and restore the experience of satisfying people effortlessly which comes from friends setting.”

As for the T9 texting (and existence before social media marketing), Lee speculates the future of Gen Z matchmaking are using signs from the last. “Gen Z actually yearns for your pre-internet days. We are acutely nostalgic. We worship the 90s and very early 2000s,” Lee states. “That’s a trend to pick up on, exactly how we notice that we’re so addicted to all of our mobile phones, but fundamentally, we would like different things.”


Sources:


Angela Huang
, push connect of
Lolly


Marc Baghadjian
, Co-Founder and Chief Executive Officer of
Lolly


Jamie Lee
, creator of
Flox


Margaux Weiner
, Head of promotion of
Flox


Experts:


Dr. Carla Marie Manly
, clinical psychologist and writer of ‘
Pleasure from concern