*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE) (View: /home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php)"
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
}
*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE)"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
*
* For the full copyright and license information, please view the LICENSE.md
* file that was distributed with this source code.
*
* ------------------------------------------------------------------
*/
declare(strict_types=1);
namespace TOC;
use Cocur\Slugify\Slugify;
use Cocur\Slugify\SlugifyInterface;
/**
* UniqueSlugify creates slugs from text without repeating the same slug twice per instance
*
* @author Casey McLaughlin <caseyamcl@gmail.com>
*/
class UniqueSlugify implements SlugifyInterface
{
/**
* @var SlugifyInterface
*/
private $slugify;
/**
* @var array
*/
private $used;
/**
* Constructor
*
* @param SlugifyInterface|null $slugify
*/
public function __construct(?SlugifyInterface $slugify = null)
{
$this->used = array();
$this->slugify = $slugify ?: new Slugify();
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/vendor/caseyamcl/toc/src/UniqueSlugify.php"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
/**
* @var HTML5
*/
private $htmlParser;
/**
* @var SlugifyInterface
*/
private $slugifier;
/**
* Constructor
*
* @param HTML5|null $htmlParser
* @param SlugifyInterface|null $slugify
*/
public function __construct(?HTML5 $htmlParser = null, ?SlugifyInterface $slugify = null)
{
$this->htmlParser = $htmlParser ?? new HTML5();
$this->slugifier = $slugify ?? new UniqueSlugify();
}
/**
* Fix markup
*
* @param string $markup
* @param int $topLevel
* @param int $depth
* @return string Markup with added IDs
* @throws RuntimeException
*/
public function fix(string $markup, int $topLevel = 1, int $depth = 6): string
{
if (! $this->isFullHtmlDocument($markup)) {
$partialID = uniqid('toc_generator_');
$markup = sprintf("<body id='%s'>%s</body>", $partialID, $markup);
}
$domDocument = $this->htmlParser->loadHTML($markup);
$domDocument->preserveWhiteSpace = true; // do not clobber whitespace
<?php
namespace App\View\Composers;
use DOMDocument;
use Roots\Acorn\View\Composer;
class BlogPost extends Composer
{
protected static $views = [
'partials.content-single',
];
public function override()
{
$fields = get_fields();
$htmlContent = apply_filters( 'the_content', get_the_content() );
$markupFixer = new \TOC\MarkupFixer();
$tocGenerator = new \TOC\TocGenerator();
$htmlContent = $markupFixer->fix($htmlContent);
$fields['toc'] = $tocGenerator->getOrderedHtmlMenu($htmlContent);
$fields['the_content'] = $htmlContent;
$fields['the_category'] = $this->getCategory();
return $fields;
}
public function getCategory() {
$category = null;
if(get_the_terms(get_the_id(), 'category')) {
foreach(get_the_terms(get_the_id(), 'category') as $term) {
if($term->name !== "Blog" && $term->name !== "Events" && $term->name !== "News") {
$category = $term;
return $category;
}
}
}
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function with()
{
return [];
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function override()
{
return static::$views;
}
$view = array_slice(explode('\\', static::class), 3);
$view = array_map([Str::class, 'snake'], $view, array_fill(0, count($view), '-'));
return implode('/', $view);
}
/**
* Compose the view before rendering.
*
* @param \Illuminate\View\View $view
* @return void
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
return $callback;
}
/**
* Build a class based container callback Closure.
*
* @param string $class
* @param string $prefix
* @return \Closure
*/
protected function buildClassEventCallback($class, $prefix)
{
[$class, $method] = $this->parseClassEvent($class, $prefix);
// Once we have the class and method name, we can build the Closure to resolve
// the instance out of the IoC container and call the method on it with the
// given arguments that are passed to the Closure as the composer's data.
return function () use ($class, $method) {
return $this->container->make($class)->{$method}(...func_get_args());
};
}
/**
* Parse a class based composer name.
*
* @param string $class
* @param string $prefix
* @return array
*/
protected function parseClassEvent($class, $prefix)
{
return Str::parseCallback($class, $this->classEventMethodForPrefix($prefix));
}
/**
* Determine the class event method based on the given prefix.
*
* @param string $prefix
* @return string
* @param \Closure|string $listener
* @param bool $wildcard
* @return \Closure
*/
public function makeListener($listener, $wildcard = false)
{
if (is_string($listener)) {
return $this->createClassListener($listener, $wildcard);
}
if (is_array($listener) && isset($listener[0]) && is_string($listener[0])) {
return $this->createClassListener($listener, $wildcard);
}
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return $listener($event, $payload);
}
return $listener(...array_values($payload));
};
}
/**
* Create a class based listener using the IoC container.
*
* @param string $listener
* @param bool $wildcard
* @return \Closure
*/
public function createClassListener($listener, $wildcard = false)
{
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return call_user_func($this->createClassCallable($listener), $event, $payload);
}
$callable = $this->createClassCallable($listener);
return $callable(...array_values($payload));
* @param bool $halt
* @return array|null
*/
public function dispatch($event, $payload = [], $halt = false)
{
// When the given "event" is actually an object we will assume it is an event
// object and use the class as the event name and this event itself as the
// payload to the handler, which makes object based events quite simple.
[$event, $payload] = $this->parseEventAndPayload(
$event, $payload
);
if ($this->shouldBroadcast($payload)) {
$this->broadcastEvent($payload[0]);
}
$responses = [];
foreach ($this->getListeners($event) as $listener) {
$response = $listener($event, $payload);
// If a response is returned from the listener and event halting is enabled
// we will just return this response, and not call the rest of the event
// listeners. Otherwise we will add the response on the response list.
if ($halt && ! is_null($response)) {
return $response;
}
// If a boolean false is returned from a listener, we will stop propagating
// the event to any further listeners down in the chain, else we keep on
// looping through the listeners and firing every one in our sequence.
if ($response === false) {
break;
}
$responses[] = $response;
}
return $halt ? null : $responses;
}
protected function addEventListener($name, $callback)
{
if (Str::contains($name, '*')) {
$callback = function ($name, array $data) use ($callback) {
return $callback($data[0]);
};
}
$this->events->listen($name, $callback);
}
/**
* Call the composer for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callComposer(ViewContract $view)
{
$this->events->dispatch('composing: '.$view->name(), [$view]);
}
/**
* Call the creator for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callCreator(ViewContract $view)
{
$this->events->dispatch('creating: '.$view->name(), [$view]);
}
}
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<?php $__env->startSection('content'); ?>
<?php while(have_posts()): ?> <?php (the_post()); ?>
<?php echo $__env->first(['partials.content-single-' . get_post_type(), 'partials.content-single'], \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>
<?php endwhile; ?>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?><?php /**PATH /home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php ENDPATH**/ ?>
/**
* Get the evaluated contents of the view at the given path.
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/storage/framework/views/eb422c8beb3d93cfa2fe08ce3b438f23bc0fae21.php"
*
* @param string $path
* @param array $data
* @return string
*/
public function get($path, array $data = [])
{
$this->lastCompiled[] = $path;
// If this given view has expired, which means it has simply been edited since
// it was last compiled, we will re-compile the views so we can evaluate a
// fresh copy of the view. We'll pass the compiler the path of the view.
if ($this->compiler->isExpired($path)) {
$this->compiler->compile($path);
}
// Once we have the path to the compiled file, we will evaluate the paths with
// typical PHP just like any other templates. We also keep a stack of views
// which have been rendered for right exception messages to be generated.
$results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data);
array_pop($this->lastCompiled);
return $results;
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
$e = new ViewException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
parent::handleViewException($e, $obLevel);
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
* Get the data bound to the view instance.
*
* @return array
*/
public function gatherData()
{
$data = array_merge($this->factory->getShared(), $this->data);
foreach ($data as $key => $value) {
if ($value instanceof Renderable) {
$data[$key] = $value->render();
}
}
return $data;
}
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<!doctype html>
<html <?php language_attributes(); ?>>
<?php echo \Roots\view(\Roots\app('sage.view'), \Roots\app('sage.data'))->render(); ?>
</html>
}
break;
}
}
if ( ! $template ) {
$template = get_index_template();
}
/**
* Filters the path of the current template before including it.
*
* @since 3.0.0
*
* @param string $template The path of the template to include.
*/
$template = apply_filters( 'template_include', $template );
if ( $template ) {
include $template;
} elseif ( current_user_can( 'switch_themes' ) ) {
$theme = wp_get_theme();
if ( $theme->errors() ) {
wp_die( $theme->errors() );
}
}
return;
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/index.php"
<?php
/**
* Loads the WordPress environment and template.
*
* @package WordPress
*/
if ( ! isset( $wp_did_header ) ) {
$wp_did_header = true;
// Load the WordPress library.
require_once __DIR__ . '/wp-load.php';
// Set up the WordPress query.
wp();
// Load the theme template.
require_once ABSPATH . WPINC . '/template-loader.php';
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-includes/template-loader.php"
<?php
/**
* WordPress View Bootstrapper
*/
define('WP_USE_THEMES', true);
require __DIR__ . '/wp/wp-blog-header.php';
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-blog-header.php"
Key | Value |
query_vars | array:3 [ "page" => "" "name" => "how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man" "category_name" => "blog" ] |
query_string | "name=how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man&category_name=blog"
|
request | "blog/how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man" "category_name" => "blog" "error" => "" "m" => "" "p" => 0 "post_parent" => "" "subpost" => "" "subpost_id" => "" "attachment" => "" "attachment_id" => 0 "pagename" => "" "page_id" => 0 "second" => "" "minute" => "" "hour" => "" "day" => 0 "monthnum" => 0 "year" => 0 "w" => 0 "tag" => "" "cat" => "" "tag_id" => "" "author" => "" "author_name" => "" "feed" => "" "tb" => "" "paged" => 0 "meta_key" => "" "meta_value" => "" "preview" => "" "s" => "" "sentence" => "" "title" => "" "fields" => "" "menu_order" => "" "embed" => "" "category__in" => [] "category__not_in" => [] "category__and" => [] "post__in" => [] "post__not_in" => [] "post_name__in" => [] "tag__in" => [] "tag__not_in" => [] "tag__and" => [] "tag_slug__in" => [] "tag_slug__and" => [] "post_parent__in" => [] "post_parent__not_in" => [] "author__in" => [] "author__not_in" => [] "search_columns" => [] "ignore_sticky_posts" => false "suppress_filters" => false "cache_results" => true "update_post_term_cache" => true "update_menu_item_cache" => false "lazy_load_term_meta" => true "update_post_meta_cache" => true "post_type" => "" "posts_per_page" => 10 "nopaging" => false "comments_per_page" => "50" "no_found_rows" => false "order" => "DESC" ] |
meta_query | WP_Meta_Query {#2559} |
queried_object | WP_Post {#2560} |
queried_object_id | 22701
|
request | """ SELECT wp_posts.*\n \t\t\t\t\t FROM wp_posts \n \t\t\t\t\t WHERE 1=1 AND wp_posts.post_name = 'how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man' AND wp_posts.post_type = 'post'\n \t\t\t\t\t \n \t\t\t\t\t ORDER BY wp_posts.post_date DESC\n \t\t\t\t\t """ |
post_count | 1
|
in_the_loop | true
|
current_comment | -1
|
found_posts | 1
|
is_single | true
|
is_singular | true
|
Key | Value |
ID | 22701
|
post_author | "43"
|
post_date | "2021-04-22 21:07:15"
|
post_date_gmt | "2021-04-22 21:07:15"
|
post_content | """ From <em><a href="https://en.wikipedia.org/wiki/The_Big_Bang_Theory" target="_blank" rel="noopener noreferrer">Big Bang Theory</a></em> and <em><a href="https://www.cbc.ca/baroness/m_site/" target="_blank" rel="noopener noreferrer">Baroness von Sketch</a></em>, to <em><a href="https://www.imdb.com/title/tt3526078/?ref_=nm_flmg_wr_3" target="_blank" rel="noopener noreferrer">Schitt’s Creek</a> </em>and <a href="https://www.imdb.com/title/tt7221388/?ref_=nm_flmg_prd_4" target="_blank" rel="noopener noreferrer"><em>Cobra Kai</em></a> – Toronto Film School Online professor <a href="https://www.imdb.com/name/nm1410886/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Brandon Firla</a>’s new podcast takes an insider’s look into the writing rooms of some of the funniest shows on TV.\n \n \n \n Drawing from the extensive list of industry friends he’s amassed over his 20-year acting career, Firla’s nameless podcast is available exclusively to the <a href="https://online.torontofilmschool.ca/programs/writing-for-film-tv-associate-diploma/" target="_blank" rel="noopener noreferrer">Writing for Film & TV</a> students in his sitcom and comedy writing courses.\n \n \n \n “It’s all people I’ve done shows with in Toronto either on-camera or on-stage – mostly writers who’ve been in the writing rooms of the shows I was on camera for,” said Firla, who’s acting resume includes series regular roles on <a href="https://www.imdb.com/title/tt1632701/?ref_=nm_flmg_act_5" target="_blank" rel="noopener noreferrer"><em>Suits</em></a>, <a href="https://www.imdb.com/title/tt0923293/?ref_=nm_flmg_act_11" target="_blank" rel="noopener noreferrer"><em>Little Mosque</em></a>, and <em><a href="https://www.imdb.com/title/tt0488813/?ref_=nm_flmg_act_19" target="_blank" rel="noopener noreferrer">Billable Hours</a></em>, as well as guest spots on <a href="https://www.imdb.com/title/tt1442437/?ref_=nm_flmg_act_3" target="_blank" rel="noopener noreferrer"><em>Modern Family</em></a><em>, </em><a href="https://www.imdb.com/title/tt1578873/?ref_=nm_flmg_act_4" target="_blank" rel="noopener noreferrer"><em>Pretty Little Liars</em></a> and <em><a href="https://www.imdb.com/title/tt7083006/?ref_=nm_flmg_act_1" target="_blank" rel="noopener noreferrer">Carter</a></em>, among others.\n \n \n \n “I thought, for students, it could be really valuable to see into the creative worlds of some of people I know who are actively working on shows today.”\n \n \n \n Now up to six episodes, Firla’s podcast are specially catered to each of the four courses he’s currently teaching.\n \n \n \n <img class="alignnone size-medium wp-image-22651 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2021/04/TFSO_WFT_PodcastProf_0408.jpg" alt="" width="670" height="393" />\n \n \n \n For students in his 310 Comedy Writing class, which delves into late night and sketch shows, he’s recorded podcasts with <a href="https://www.imdb.com/name/nm1896620/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Allana Harkin</a>, a co-producer on <a href="https://www.imdb.com/title/tt5323988/?ref_=nm_ov_bio_lk1" target="_blank" rel="noopener noreferrer"><em>Full Frontal with Sam Bee</em></a>, and <a href="https://www.imdb.com/name/nm1430647/" target="_blank" rel="noopener noreferrer">Jennifer Whalen</a>, one of the co-creators, showrunners and stars of the <a href="https://www.imdb.com/title/tt4919930/?ref_=nm_flmg_wr_1" target="_blank" rel="noopener noreferrer"><em>Baroness Von Sketch Show</em></a>.\n \n \n \n For his 410 and 510 Sitcom Writing classes, Firla’s had conversations with writer/executive producer <a href="https://www.imdb.com/name/nm1108471/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Jason Belleville</a>, whose most recent credits include <a href="https://www.imdb.com/title/tt7221388/?ref_=nm_flmg_prd_4" target="_blank" rel="noopener noreferrer"><em>Cobra Kai</em></a>, <em><a href="https://www.imdb.com/title/tt5722190/?ref_=nm_flmg_wr_3" target="_blank" rel="noopener noreferrer">Brockmire</a></em> and <a href="https://www.imdb.com/title/tt10329028/?ref_=nm_flmg_prd_1" target="_blank" rel="noopener noreferrer"><em>The Unicorn</em></a><em>, </em>and Emmy-winning executive producer <a href="https://www.imdb.com/name/nm1197498/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Kurt Smeaton</a>, whose writing resume includes episodes of <em><a href="https://www.imdb.com/title/tt3526078/?ref_=nm_flmg_wr_3" target="_blank" rel="noopener noreferrer">Schitt’s Creek</a></em>, <a href="https://www.imdb.com/title/tt10738442/?ref_=nm_flmg_wr_1" target="_blank" rel="noopener noreferrer"><em>Children Ruin Everything</em></a> and <em><a href="https://www.imdb.com/title/tt5912064/?ref_=nm_flmg_wr_2" target="_blank" rel="noopener noreferrer">Kim’s Convenience</a></em>.\n \n \n \n Lastly, Firla has welcomed <a href="https://www.imdb.com/name/nm2324230/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Jennica Harper</a>, the showrunner, executive producer and co-creator of <a href="https://www.imdb.com/title/tt9080978/?ref_=nm_flmg_prd_1" target="_blank" rel="noopener noreferrer"><em>Jann</em></a> and <a href="https://www.imdb.com/name/nm1576709/?ref_=nv_sr_srsg_0" target="_blank" rel="noopener noreferrer">Tara Treacy</a>, a casting director who’s worked on many <a href="https://www.imdb.com/name/nm0521143/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Chuck Lorre</a> shows, including <a href="https://www.imdb.com/title/tt0898266/?ref_=nm_flmg_cldp_3" target="_blank" rel="noopener noreferrer"><em>Big Bang Theory</em></a>, <em><a href="https://www.imdb.com/title/tt0369179/?ref_=nm_flmg_cldp_13" target="_blank" rel="noopener noreferrer">Two and a Half Men </a></em> and <em><a href="https://www.imdb.com/title/tt5884792/?ref_=nm_flmg_cldp_1" target="_blank" rel="noopener noreferrer">Disjointed</a>,</em> for students in his 610 Sitcom Showrunning course.\n \n \n \n “The format I try to follow is that it always starts with how my guest got started, what their first gig was, and then I get into the process of what they’re working on now or how they develop stories,” Firla said of his interview formula, which includes questions submitted by his students.\n \n \n \n “I’m really happy that I just randomly decided to do these podcasts as kind of a supplemental, bonus materials for my classes. And I’m excited about keeping it as a teaching tool and not a public podcast, because then I can focus more on the details and the craft, as opposed to trying to be entertaining.”\n \n \n \n So far, Firla’s podcast has proven an enlightening exercise, not just for his screenwriting students, but for himself as well, he said, noting that his most recent interview with Treacy was an especially eye-opening one.\n \n \n \n <img class="alignnone size-medium wp-image-22653 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2021/04/TFS_WFT_BrandonFirla_0409.jpg" alt="" width="670" height="393" />\n \n \n \n “When I was talking to Tara about casting, it was the first time I’d thought about casting from the other side, as opposed to walking in as an actor auditioning,” he said about learning more details about casting directors’ complex dealings with producers and networks.\n \n \n \n “It was fascinating, because as an actor, you think it’s just about ‘Do you like me or not?’ You don’t consider all the other amount of work and involvement that goes into casting, which really is one of the most important parts in the entire creation of a show.”\n \n \n \n While Firla is probably most recognized for his acting accomplishments, he’s also an award-winning stage and screenwriter himself – a talent he didn’t begin to hone, he admits, until his early acting career failed to take off as quickly as he hoped.\n \n \n \n “I tell my students all the time, I started writing because I wasn’t getting hired as an actor,” he laughed. “I needed the creative outlet and that’s how I got my foot in the door.”\n \n \n \n Born and raised in Calgary, Firla said he caught the acting bug at a very young age – performing in all of his school plays growing up, then going on to study under British-Canadian improvisational theatre pioneer <a href="https://en.wikipedia.org/wiki/Keith_Johnstone" target="_blank" rel="noopener noreferrer">Keith Johnstone</a> at the University of Calgary.\n \n \n \n From there, Firla earned himself a scholarship to study musical theatre in New York, then finished his training in England, at the <a href="https://www.lamda.ac.uk/" target="_blank" rel="noopener noreferrer">London Academy of Music & Dramatic Art</a>, where he shared the stage with none other than <a href="https://www.imdb.com/title/tt4154796/characters/nm1212722?ref_=tt_cl_t9" target="_blank" rel="noopener noreferrer">Doctor Strange</a> himself.\n \n \n \n “I had the great misfortune of being classmates with <a href="https://en.wikipedia.org/wiki/Benedict_Cumberbatch" target="_blank" rel="noopener noreferrer">Benedict Cumberbatch</a>, who set the bar so high, it’s impossible to hit the heights he’s climbed,” Firla laughed.\n \n \n \n “Studying theatre in London was kind of Mt. Olympus – the apex mountain of actor training. Not just the school itself, but just the culture there and being able to see people performing at such a high level when you go to a west-end show or to the <a href="https://www.barbican.org.uk/" target="_blank" rel="noopener noreferrer">Barbican Centre</a> or the <a href="https://www.nationaltheatre.org.uk/" target="_blank" rel="noopener noreferrer">National Theatre</a>…It was humbling and the most amazing learning experience, just being in that environment.”\n \n \n \n It was upon his return to Canada, after two unsuccessful auditions for the <a href="https://www.shawfest.com/" target="_blank" rel="noopener noreferrer">Shaw Festival Theatre</a> and <a href="https://www.stratfordfestival.ca/" target="_blank" rel="noopener noreferrer">Stratford Festival</a>, that Firla banded together with his animator/stand-up comedian brother, <a href="http://kurtfirla.com/" target="_blank" rel="noopener noreferrer">Kurt Firla</a>, to write some of their own material.\n \n \n \n At Kurt’s urging, the duo formed a <a href="https://en.wikipedia.org/wiki/Martin_and_Lewis" target="_blank" rel="noopener noreferrer">Martin & Lewis</a>-like throwback double act called <a href="https://www.facebook.com/The-Rumoli-Bros-135152636688003/" target="_blank" rel="noopener noreferrer">The Rumoli Brothers</a>.\n \n \n \n “Our first play, called <em>Last Laugh</em>, was about a comedy act in the ’50s – kind of like a <a href="https://www.imdb.com/list/ls063633377/" target="_blank" rel="noopener noreferrer">Hope & Crosby</a> movie that told the story of this act’s succession through various night clubs and into Hollywood,” he explained.\n \n \n \n “From there, we wanted to do bigger projects – not necessarily be in them, but to write them and produce them and direct them.”\n \n \n \n <a href="https://nowtoronto.com/culture/comedy/skittish-sarsical" target="_blank" rel="noopener noreferrer"><em>SARSical</em></a> – a musical about the SARS outbreak in Toronto – was the pair’s first full-length play. It premiered at the <a href="https://fringetoronto.com/" target="_blank" rel="noopener noreferrer">Fringe Festival</a>, and was remounted at Toronto’s <a href="https://www.factorytheatre.ca/" target="_blank" rel="noopener noreferrer">Factory Theatre</a>, earning several local theatre accolades, including a 2007 Dora Award nomination for Best New Play or Musical in the Independent Theatre category.\n \n \n \n Their follow-up production, <a href="http://www.stage-door.com/Theatre/2008/Entries/2008/6/19_An_Inconvenient_Musical.html" target="_blank" rel="noopener noreferrer"><em>An Inconvenient Musical</em></a>, was similarly well received, and segued into opportunities for Firla and his brother to do a talk show for the Fringe Theatre Festival and form a partnership with Second City.\n \n \n \n <img class="alignnone size-full wp-image-22652 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2021/04/YU_BCA_BillableHours2_0121.jpg" alt="" width="324" height="492" />\n \n \n \n At about the same time, Firla also landed his first series regular role on <a href="https://en.wikipedia.org/wiki/Billable_Hours" target="_blank" rel="noopener noreferrer"><em>Billable Hours</em></a> – the brainchild of Toronto Film School’s <a href="https://www.torontofilmschool.ca/programs/writing-for-film-tv-diploma/" target="_blank" rel="noopener noreferrer">Writing for Film & TV</a> Program Coordinator, <a href="https://www.imdb.com/name/nm1733337/" target="_blank" rel="noopener noreferrer">Adam Till</a>.\n \n \n \n “From that point on, one role just kind of lead to another, and over the years, Adam and I began working together with (<em>Billable Hours</em> star) <a href="https://en.wikipedia.org/wiki/Fab_Filippo" target="_blank" rel="noopener noreferrer">Fabrizio Filippo</a> and we got several development deals and even sold a script to Fox,” he said.\n \n \n \n “Once I got my foot in the door, I was very lucky to be in a position where the head of development at CBC says, ‘Let’s have a meeting soon. Come up with two or three ideas for a show for yourself.’ I mean, there’s a massive gap between that and getting a show on the air, but the fact that I’m given the opportunity to think of ideas and pitch them and spin that wheel – that’s kind of where I’m at now.”\n \n \n \n That position is also one that, to Firla’s surprise, makes him uniquely qualified to teach screenwriting at Toronto Film School – a new role he just took up shortly before the COVID-19 pandemic struck last year.\n \n \n \n “Teaching is definitely not something I ever imagined I would be doing. But it’s funny, because in hindsight, I’m strangely prepared and qualified for this, because of the opportunities I’ve had developing my own stuff. So, I just took the leap, figured it out and had some laughs along the way,” he said.\n \n \n \n “I see my role more as a collaborator. I’m not really going to be able to teach you how to write, but I am going to show you the format and the structure, and from that point on, I’ll be a voice in your ear pitching ideas and making suggestions. It’s been fantastic.”\n \n \n \n """ |
post_title | "How I Made This | Video Game Animation Student Gives Behind-the-Scenes Look Into Creation of 'Lizard Man'"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "open"
|
ping_status | "open"
|
post_password | "" |
post_name | "how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:07:30"
|
post_modified_gmt | "2023-03-27 21:07:30"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/?p=22701"
|
menu_order | 0
|
post_type | "post"
|
post_mime_type | "" |
comment_count | "0"
|
filter | "raw"
|
Key | Value |
SERVER_SOFTWARE | "nginx/1.22.1"
|
REQUEST_URI | "/blog/how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/how-i-made-this-video-game-animation-student-gives-behind-the-scenes-look-into-creation-of-lizard-man"
|
HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
HTTP_ACCEPT | "*/*"
|
HTTP_HOST | "dev.tfs.staging.poundandgrain.ca"
|
REDIRECT_STATUS | "200"
|
HTTPS | "on"
|
SERVER_NAME | "dev.tfs.staging.poundandgrain.ca"
|
SERVER_PORT | "443"
|
SERVER_ADDR | "10.0.1.187"
|
REMOTE_PORT | "52057"
|
REMOTE_ADDR | "13.58.139.55"
|
GATEWAY_INTERFACE | "CGI/1.1"
|
SERVER_PROTOCOL | "HTTP/2.0"
|
DOCUMENT_ROOT | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web"
|
DOCUMENT_URI | "/index.php"
|
SCRIPT_NAME | "/index.php"
|
SCRIPT_FILENAME | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/index.php"
|
CONTENT_LENGTH | "" |
CONTENT_TYPE | "" |
REQUEST_METHOD | "GET"
|
QUERY_STRING | "" |
FCGI_ROLE | "RESPONDER"
|
PHP_SELF | "/index.php"
|
REQUEST_TIME_FLOAT | 1731846859.0507
|
REQUEST_TIME | 1731846859
|
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|
Key | Value |
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|