From 6b83172eabbc2c60b342515ec5984016f508912d Mon Sep 17 00:00:00 2001 From: Gabriel Dunne Date: Fri, 7 Sep 2012 18:55:22 -0700 Subject: [PATCH] Added editing. --- content/log/overlords | 16 +-- content/studio/config | 2 + css/style.css | 24 ++++- data/content/log/data.json | 2 +- index.php | 3 +- lib/config.ini | 2 + lib/data.php | 11 ++- lib/edit.php | 2 +- lib/init.php | 7 +- lib/model.php | 78 +++++++++------ lib/view.php | 7 +- pages/about | 32 +----- pages/bio | 10 ++ pages/contact | 32 ++++++ pages/cv | 191 ++++++++++++++++++++++++++++++++++++ pages/links1 | 29 ++++++ templates/edit.html.tpl | 24 +---- templates/entry.html.tpl | 8 +- templates/footer.html.tpl | 4 +- templates/head-inc.html.tpl | 11 +-- templates/single.html.tpl | 2 + 21 files changed, 379 insertions(+), 118 deletions(-) create mode 100644 content/studio/config create mode 100644 pages/bio create mode 100644 pages/contact create mode 100644 pages/cv create mode 100644 pages/links1 diff --git a/content/log/overlords b/content/log/overlords index e949c3d..5f5d998 100755 --- a/content/log/overlords +++ b/content/log/overlords @@ -1,8 +1,8 @@ -title = childhoods end -date = Oct 05 2011, 03:17:57 PM -tags = india quote --- - -> The case of India is particularly instructive. The main difference between us and the British in India was that they had no real motives for going there—no conscious objectives, that is, except such trivial and temporary ones as trade or hostility to other European powers. They found themselves possessors of an empire before they knew what to do with it, and were never really happy until they had got rid of it again. - -> —"The Inspector" Overlord. Childhoods End, Arthur C. Clark. p.161 +title = childhoods end +date = Oct 05 2011, 03:17:57 PM +tags = india quote +-- + +> The case of India is particularly instructive. The main difference between us and the British in India was that they had no real motives for going there—no conscious objectives, that is, except such trivial and temporary ones as trade or hostility to other European powers. They found themselves possessors of an empire before they knew what to do with it, and were never really happy until they had got rid of it again. + +> —"The Inspector" Overlord. Childhoods End, Arthur C. Clark. p.161 diff --git a/content/studio/config b/content/studio/config new file mode 100644 index 0000000..f33aa2d --- /dev/null +++ b/content/studio/config @@ -0,0 +1,2 @@ +-- +Studio diff --git a/css/style.css b/css/style.css index 3aae4aa..0203746 100644 --- a/css/style.css +++ b/css/style.css @@ -1,8 +1,8 @@ html, body, table { color: #555555; - font-family: sans-serif; - font-size:13px; - line-height: 1.5em; } + font-family: sans-serif, monaco, monospace; + font-size: 14px; + line-height: 1.6em; } body { margin: 2em; } @@ -88,6 +88,24 @@ table, td, tr { } +.edit { + margin-left: 160px; + padding:20px; + box-sizing: border-box; + background:#ccf; +} + +.edit textarea { + font-family: monaco, monospace; + padding:20px; + width:100%; + font-size:12px; + background:#005; + color:#eee; + height:400px; +} + + #nav { position:fixed; diff --git a/data/content/log/data.json b/data/content/log/data.json index dacb6fe..96ae72a 100644 --- a/data/content/log/data.json +++ b/data/content/log/data.json @@ -1 +1 @@ -{"entries":[{"config":{"date":"feb 20 2012","title":"temple","tags":"photo"},"title":"temple","filename":"temple","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/temple","fileInfo":{},"timestamp":"1329724800","tags":["photo"],"content":"

\n \n<\/a><\/p>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/temple\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/temple\/","thumb":"media\/\/log\/temple\/thumb.png","url":"\/log\/temple"},{"config":{"title":"Water Is Life","date":"Oct 23 2011 06:04:38 PM","tags":"water photo"},"title":"Water Is Life","filename":"water_is_life","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/water_is_life","fileInfo":{},"timestamp":"1319418278","tags":["water","photo"],"content":"

<\/a><\/p>\n\n

near Quotar Minar in Dadabari.<\/p>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/water_is_life\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/water_is_life\/","thumb":"media\/\/log\/water_is_life\/thumb.png","url":"\/log\/water_is_life"},{"config":{"title":"islands","date":"Oct 05 2011, 03:53:55 PM","tags":"writing quote"},"title":"islands","filename":"islands","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/islands","fileInfo":{},"timestamp":"1317855235","tags":["writing","quote"],"content":"

\n

Imagine that every man's mind is an island, surrounded by ocean. Each seems isolated, yet in reality all are linked by the bedrock from which they spring. If the ocean were to vanish, that would be the end of the islands. They would all be part of one continent, but their individuality would be gone.<\/p>\n \n

—\"The Inspector\" Overlord. Childhoods End<\/u>, Arthur C. Clark. p.176<\/p>\n<\/blockquote>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/islands\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/islands\/","thumb":"media\/\/log\/islands\/thumb.png","url":"\/log\/islands"},{"config":{"title":"childhoods end","date":"Oct 05 2011, 03:17:57 PM","tags":"india quote"},"title":"childhoods end","filename":"overlords","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/overlords","fileInfo":{},"timestamp":"1317853077","tags":["india","quote"],"content":"

\n

The case of India is particularly instructive. The main difference between us and the British in India was that they had no real motives for going there—no conscious objectives, that is, except such trivial and temporary ones as trade or hostility to other European powers. They found themselves possessors of an empire before they knew what to do with it, and were never really happy until they had got rid of it again.<\/p>\n \n

—\"The Inspector\" Overlord. Childhoods End<\/u>, Arthur C. Clark. p.161<\/p>\n<\/blockquote>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/overlords\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/overlords\/","thumb":"media\/\/log\/overlords\/thumb.png","url":"\/log\/overlords"}]} \ No newline at end of file +{"entries":[{"config":{"date":"feb 20 2012","title":"temple","tags":"photo"},"title":"temple","filename":"temple","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/temple","fileInfo":{},"timestamp":"1329724800","tags":["photo"],"content":"

\n \n<\/a><\/p>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/temple\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/temple\/","thumb":"media\/\/log\/temple\/thumb.png","url":"\/log\/temple"},{"config":{"title":"Water Is Life","date":"Oct 23 2011 06:04:38 PM","tags":"water photo"},"title":"Water Is Life","filename":"water_is_life","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/water_is_life","fileInfo":{},"timestamp":"1319418278","tags":["water","photo"],"content":"

<\/a><\/p>\n\n

near Quotar Minar in Dadabari.<\/p>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/water_is_life\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/water_is_life\/","thumb":"media\/\/log\/water_is_life\/thumb.png","url":"\/log\/water_is_life"},{"config":{"title":"islands","date":"Oct 05 2011, 03:53:55 PM","tags":"writing quote"},"title":"islands","filename":"islands","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/islands","fileInfo":{},"timestamp":"1317855235","tags":["writing","quote"],"content":"

\n

Imagine that every man's mind is an island, surrounded by ocean. Each seems isolated, yet in reality all are linked by the bedrock from which they spring. If the ocean were to vanish, that would be the end of the islands. They would all be part of one continent, but their individuality would be gone.<\/p>\n \n

—\"The Inspector\" Overlord. Childhoods End<\/u>, Arthur C. Clark. p.176<\/p>\n<\/blockquote>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/islands\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/islands\/","thumb":"media\/\/log\/islands\/thumb.png","url":"\/log\/islands"},{"config":{"title":"childhoods end","date":"Oct 05 2011, 03:17:57 PM","tags":"india quote"},"title":"childhoods end","filename":"overlords","path":"\/Users\/gdunne\/_code\/plog\/content\/log\/overlords","fileInfo":{},"timestamp":"1317853077","tags":["india","quote"],"content":"

\n

The case of India is particularly instructive. The main difference between us and the British in India was that they had no real motives for going there\u2014no conscious objectives, that is, except such trivial and temporary ones as trade or hostility to other European powers. They found themselves possessors of an empire before they knew what to do with it, and were never really happy until they had got rid of it again.<\/p>\n \n

\u2014\"The Inspector\" Overlord. Childhoods End<\/u>, Arthur C. Clark. p.161<\/p>\n<\/blockquote>\n","comments_enabled":false,"comments":{"comments":[],"comments_loc":"\/Users\/gdunne\/_code\/plogcomments\/\/Users\/gdunne\/_code\/plog\/content\/log\/overlords\/","fileInfo":{},"_recaptcha_resp":null,"_recaptcha_error":null,"_comment_error":null},"cat":{"name":"log","url":"\/log\/"},"media":"media\/\/log\/overlords\/","thumb":"media\/\/log\/overlords\/thumb.png","url":"\/log\/overlords"}]} \ No newline at end of file diff --git a/index.php b/index.php index 6c9cf6d..4325e40 100644 --- a/index.php +++ b/index.php @@ -1,6 +1,5 @@ is_multiple()) if ($m->is_single() || $m->is_page() || $m->is_multiple()) $v->assign('entry', $m->entry); +$v->assign('is_edit', $m->is_edit); header("Content-Type: {$m->response_mime_type}; charset=UTF-8"); $v->render( $m->template, $m->response_format ); exit; - diff --git a/lib/config.ini b/lib/config.ini index 885c226..fba828c 100644 --- a/lib/config.ini +++ b/lib/config.ini @@ -1,5 +1,7 @@ [development] dev = true +edit = true + [settings] ; general settings diff --git a/lib/data.php b/lib/data.php index 145dc7c..4d8a90d 100644 --- a/lib/data.php +++ b/lib/data.php @@ -41,7 +41,7 @@ function get_entries( $path = "", $args = array() ) if (isset($dir_iterator)) { foreach ($dir_iterator as $file => $info) { if (!$info->isDir() && $info->getFilename() != CONFIG_FILE) { - // dot files + // skip dot files if (substr($info->getFilename(), 0, 1) == '.') continue; $entry = parse_entry($info); @@ -116,6 +116,9 @@ function get_dirs( $path = "", $args = array()) $dirs = array(); foreach ($dir_iterator as $dir => $info) { if ($info->isDir() && $info->getFilename() != '.' && $info->getFilename() != '..') { + // skip dot files + if (substr($info->getFilename(), 0, 1) == '.') + continue; $d = array(); $d['url'] = WEB_ROOT . str_replace($path, "", $info->getRealPath()); if (!CLEAN_URLS) @@ -137,7 +140,11 @@ function get_pages() $dir_iterator = new DirectoryIterator($path); $pages = array(); foreach($dir_iterator as $page) { - if ($page->isDir()) continue; + + // skip folders and dotfiles + if ($page->isDir() || substr($page->getFilename(), 0, 1) == '.') + continue; + $e = parse_entry($page, 1); $e->is_page = 1; $pages[] = $e; diff --git a/lib/edit.php b/lib/edit.php index 761a8c5..a864506 100644 --- a/lib/edit.php +++ b/lib/edit.php @@ -19,7 +19,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST' && fclose($fp); } if (!file_exists( $_POST['edited_file'] )) { - throw new Exception('Error creating tags.json. Permissions?'); + throw new Exception('Error editing file. Permissions?'); } } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; diff --git a/lib/init.php b/lib/init.php index 74f228f..b071f3f 100644 --- a/lib/init.php +++ b/lib/init.php @@ -45,16 +45,17 @@ define ('MORE_DELIM', $_cfg['more_delim']); define ('TITLE_DELIMITER', $_cfg['title_delim']); define ('ENTRY_DATE_FORMAT', $_cfg['date_format']); define ('DEV', $_cfg['dev']); +define ('EDIT', $_cfg['edit']); $_FILE_IGNORES = $_cfg['file_ignores']; # recaptcha for comments -require_once 'recaptchalib.php'; +//require_once 'recaptchalib.php'; // Get a key from https://www.google.com/recaptcha/admin/create -$captcha_publickey = "6Lek-MkSAAAAAAZknQQGSx9DiCqm_wAiFGytc37d"; -$captcha_privatekey = "6Lek-MkSAAAAAK4FAaPKO0Cwp-iHa0OcUaqipee4"; +//$captcha_publickey = "6Lek-MkSAAAAAAZknQQGSx9DiCqm_wAiFGytc37d"; +//$captcha_privatekey = "6Lek-MkSAAAAAK4FAaPKO0Cwp-iHa0OcUaqipee4"; diff --git a/lib/model.php b/lib/model.php index ad5c215..a3c862a 100644 --- a/lib/model.php +++ b/lib/model.php @@ -14,10 +14,24 @@ class Model var $entry = null; var $config = null; + var $is_edit = false; - function __construct( $request ) + + function __construct( $req ) { - $this->request = $request; + $this->request = $req; + + // TODO: clean request to make sure there's no ../'s + + if (EDIT) { + $this->is_edit = strpos($this->request['path'], 'edit/') !== false ? true : false; + $this->request['dirname'] = str_replace('edit/', '', $this->request['dirname']); + $this->request['path'] = str_replace('edit/', '', $this->request['path']); + if ($_SERVER['REQUEST_METHOD'] == 'POST') + $this->process_edit_post_request(); + } + + list($this->response_format, $this->response_mime_type) = parse_format($this->request['extension']); $this->template = 'default.' . $this->response_format . '.tpl'; $this->parse_request( $this->request ); @@ -27,27 +41,6 @@ class Model function parse_request( $request ) { -/* - $dirs = explode('/', $request['path']); - switch($dirs[0]) { - # EDITING - case 'edit' : - include 'edit.php'; - break; - # TAG - case 'tag' : - echo 'tag time.'; - exit; - break; - } - - - # edit - if (DEV && isset($edit) && $edit) { - $this->template = 'edit.html.tpl'; - } - -*/ # if multiple (multiple files in CONTENT dir) if ($this->is_multiple()) { @@ -71,9 +64,11 @@ class Model // post request if ($_SERVER['REQUEST_METHOD'] == 'POST') - $this->process_post_request($this->entry); + $this->process_post_request( $this->entry ); + // prev/next + /* $entries = get_entries( $request['dirname'] ); for($i = count($entries)-1; $i>=0; $i--) { if ($this->entry->url == $entries[$i]->url) { @@ -82,6 +77,7 @@ class Model break; } } + */ $this->entry->is_single = true; $this->template = 'single.' . $this->response_format . '.tpl'; @@ -102,29 +98,55 @@ class Model } function process_post_request( &$entry ) { + if (isset($entry->comments)) $entry->comments->process_post_request(); } + function process_edit_post_request() { + if ($this->is_edit && isset($_POST['edited_file_contents'])) { + try { + if (!is_writable( $this->get_filename() )) { + throw new Exception('Error editing file. Permissions?'); + } + $fp = fopen( $this->get_filename(), 'w'); + if ($fp) { + fwrite($fp, $_POST['edited_file_contents']); + fclose($fp); + } + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + } + } + function has_config() { - $conf = join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'], CONFIG_FILE ), DIRECTORY_SEPARATOR ); + $conf = join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'], CONFIG_FILE ), '/' ); return is_file($conf) ? 1 : 0; } function is_multiple() { - return is_dir(join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'] ), DIRECTORY_SEPARATOR )) ? 1 : 0; + return is_dir(join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'] ), '/' )) ? 1 : 0; } function is_single() { - return is_file(join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'] ), DIRECTORY_SEPARATOR )) ? 1 : 0; + return is_file(join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'] ), '/' )) ? 1 : 0; } function is_page() { - $path = rtrim(join(array( LOCAL_ROOT, PAGE_DIR, $this->request['path'] ), DIRECTORY_SEPARATOR ), '/'); + $path = rtrim(join(array( LOCAL_ROOT, PAGE_DIR, $this->request['path'] ), '/' ), '/'); return is_file($path) ? 1 : 0; } + + function get_filename() + { + if ($this->is_page()) + return rtrim(join(array( LOCAL_ROOT, PAGE_DIR, $this->request['path'] ), '/' ), '/'); + else + return rtrim(join(array( LOCAL_ROOT, CONTENT_DIR, $this->request['path'] ), '/' ), '/'); + } } diff --git a/lib/view.php b/lib/view.php index 98d20ac..9de6c64 100644 --- a/lib/view.php +++ b/lib/view.php @@ -12,6 +12,7 @@ class View var $response_mime_type = 'text/html'; var $_tpl_vars = array(); + function __construct() { @@ -43,9 +44,9 @@ class View public function render( $template, $response_format = 'html' ) { extract( $this->_tpl_vars ); - if (!is_file($this->template_dir . DIRECTORY_SEPARATOR . $template)) - $template = $this->default_template . '.' . $response_format . '.tpl'; - include( $this->template_dir . DIRECTORY_SEPARATOR . $template ); + if (!is_file($this->template_dir.'/'.$template)) + $template = $this->default_template.'.'.$response_format.'.tpl'; + include( $this->template_dir.'/'.$template ); } diff --git a/pages/about b/pages/about index f821528..3999a3b 100644 --- a/pages/about +++ b/pages/about @@ -1,33 +1,3 @@ title = about -- - -#about - -quilime is an archive of my experiments and process - -this site is built with plog, a static-file `p`roject`log` engine written in PHP. - - - -@ 1999—2012 gabriel dunne -[www](http://gabrieldunne.com), [email](mailto:gdunne@quilime.com) - -
- -## also -[aggregate](http://media.quilime.com/aggregate/) -[clmpr](http://clmpr.com/quilime/) - -
- -## elsewhere -[@quilime](http://twitter.com/quilime/) -[vimeo](http://vimeo.com/quilime/) -[github](http://github.com/quilime/) -[flickr](http://flickr.com/photos/quilime/) - -
- -## feeds -[rss](http://quilime.com/.rss) -[feedburner](http://feeds.feedburner.com/quilime) +Born, lives, and works in the San Francisco Bay Area diff --git a/pages/bio b/pages/bio new file mode 100644 index 0000000..a0659e0 --- /dev/null +++ b/pages/bio @@ -0,0 +1,10 @@ + +-- + + +Born and lives in the San Francisco Bay Area, works internationally. + + + diff --git a/pages/contact b/pages/contact new file mode 100644 index 0000000..5b77e3c --- /dev/null +++ b/pages/contact @@ -0,0 +1,32 @@ +-- + + +1242 Market St, FL 2 +San Francisco, CA USA 94102 +studio@gabrieldunne.com +\+ 1 415 493 8496 + +
+ +

+ +

+name
+ +

+ +

+email
+ +

+ +

+message
+ +

+ +

+ +

+ + diff --git a/pages/cv b/pages/cv new file mode 100644 index 0000000..be097da --- /dev/null +++ b/pages/cv @@ -0,0 +1,191 @@ +title = cv +-- + +**edu** +2003 B.A. Design | Media Arts, UCLA +2001 Pont Aven School of Art, France +1999 College of Marin, Architecture +
+
+ + +**select exhibition + performance** +2012 CCRMA Show. Live Visuals. +2012 Creators Project SF, San Francisco. "Audio Shader Toy", Installation (collab). +2012 India Art Fair, Delhi, India. Collaboration with Vishal K Dar. +2011 Sepalcure, Shigeto, Simple & Santa, GAFFTA, San Francisco. Live visuals. +2010 Milieux Sonores: Sound and Imaginary Space, GAFFTA, San Francisco. Live A/V performance. +2010 Biennial of the Americas, Denver. Live A/V performance. +2010 Prototype, GAFFTA, San Francisco. Installation. +2010 Powers of Ten, GAFFTA. Installation. +2008 Design and the Elastic Mind, MoMA NYC Permanent Collection. Collab w/Stamen Design. +2006 Interferenze: Naturalis Electronica, Valle Caudina, Italy. +2006 Japan Media Arts Festival, Tokyo, Japan +2006 Festival Sonar, Barcelona, Spain +2006 SIGGRAPH, Boston +2005 New Wight Gallery MFA Show, UCLA, Los Angeles, CA (collab.) +2005 SIGGRAPH, Los Angeles +2005 :Output International Design Competition, Amsterdam, Netherlands +2005 CiberArt: International Festival of New Technologies, Bilbao, Spain +2004 Traffic, New Wight Gallery, UCLA, Los Angeles, CA. Collab w/Scott Hessels. +2003 Sur(Face), Design Media Arts EDA, Los Angeles, CA +2003 Eyberrations Digital Film Festival, Irvine, CA +2002 Melbourne International Film Festival", Melbourne, Australia +2002 Experimental Works On Paper, Paris, France +2002 Experimental Works On Paper, Rennes, France +2002 Jaquez Gallery Collection, Pont Aven, France. Permanent Collection. +
+
+ + + +**residencies / collaborations** +2011              Studio Collaboration w/ Studio Vishal K. Dar +2009—2010 Residency, Gray Area Foundation for the Arts +
+
+ + + + + +**public collections** +New York Museum of Modern Art, NY +Jaquez Gallery Collection, Pont Aven, France +
+
+ + + + +**talks** +2010 "Prototype" Resident Artist Symposium, Gray Area, San Francisco +2004 Text + Architecture & Writing in Architecture, SCIARC, Los Angeles +2003 narr@tive: Digital Storytelling, Hammer Museum, Los Angeles +
+
+ + +**teaching/advisory** +2012 Film/Code Remix (Youth Program, BAVC, San Francisco), co-teach with Jonathan McIntosh. 1 yr. +2011 Creative Code (Youth Program, BAVC, San Francisco), 1 yr. +2011 Processing 101 Workshop(Certificate Program, Gray Area, San Francisco), 2 wk +2010 Open Source (Youth Program, BAVC, San Francisco), 1 yr. +2010 Creative Coding: An Introduction to Processing (Gray Area, San Francisco), 2 wk +2009 Creative Coding (Gray Area, San Francisco), 2 wek +2009 Introduction to Processing (Gray Area, San Francisco), weekend +2007 Processing (Makers Faire, San Mateo), 2 hr +2005 Programming and Design (UCLA student workshops, Los Angeles), 1 semester +2004 Maya Workshop Series (UCLA, Los Angeles), 1 semester +2003 Typography Workshop Series (UCLA, Los Angeles), 1 day +2003 Adobe Software Workshops, Photoshop/Illustrator/After Effects (UCLA, Los Angeles), Lead Instructor, 1 day each +2002 Macromedia Design Student Workshops (UCLA, Los Angeles), 1 day +
+
+ + +**websites** +2011 Duran Duran "All You Need Is Now" http://now.gaffta.org +2010 Seaquence http://seaquence.org +2007 Motion Theory [link] +
+
+ +**commercials** +Budwieser "Superbowl", Motion Theory +Budwieser "The Game", Motion Theory +Nike "One", Motion Theory +
+
+ + +**shorts** +RestFest 2003 Opener, Motion Theory +The Mirror +
+
+ + + +**music videos** +Beck "Girl", Motion Theory +Papa Roach "Getting Away With Murder", Motion Theory +
+
+ + + +**print / tv / radio** +Art College Radio, San Francisco +MIT Aerospace Annual +A'minima #17 +FOCUS Italia, May Issue +Discover Magazine +Wired +Adult Swim, Cartoon Network +Contemporary Art of Science and Technology +AD: Architectural Digest +HDRI +
+
+ + +**awards** +Creative Review Best in Show 2005, Beck "Girl" +Type Directors Award, Nike "Golf" +AIGA, Hewlett Packard "It Consolidates" +AICP, Hewlett Packard "Hands" +Screen Network Australia Best in Show +Shorttakes Film Festival, Best Visual Effects +
+
+ + +**academic honors** +2002, 2003 UCLA Deans List +2001 UCLA Merit Scholarship +
+
+ +**credentials** +Adobe A.C.E. Certified in Photoshop, Illustrator +
+
+ + + + + + + + +**professional activity** +2012—cur      Obscura Digital, Consultant +2010—cur      Bay Area Video Coalition, Youth Instructor +2005—cur      Tessellated Group, Designer +1999—cur      Studio Gabriel Dunne, Owner +2009—2010 Gray Area Foundation for the Arts, Studio Director/Resident Artist +2007—2008 Stamen Design, Data Visualization Software Developer +2007—2008 Google, Inc, Data Visualization Software Developer +2004—2006 Motion Theory: Animator, Designer, Software, +
+
+ +**commercial & non/profit clients** +Ogilvy & Mather +Goodby, Silverstein & Partners +Mekanism +Hewlett Packard +Nike +Budweiser +Cadillac +Ogilvy & Mather +The Soup +Tessellated Group +Google +YouTube +Gray Area Foundation for the Arts +Bay Area Video Coalition +Duran Duran +
+
diff --git a/pages/links1 b/pages/links1 new file mode 100644 index 0000000..6914b61 --- /dev/null +++ b/pages/links1 @@ -0,0 +1,29 @@ +title = links +-- + ++ [quilime.com](http://quilime.com) process blog ++ [ssherriff.com](http://ssherriff.com) stephanie sherriff ++ [onecm.com](http://onecm.com) ryan alexander ++ [ripevessel.com](http://ripevessel.com) adam roth ++ [jtnimoy.net](http://jtnimoy.net) joshua nimoy ++ [oddsympathy.com](http://oddsympathy.com) daniel massey ++ [carbonworkshop.com](http://carbonworkshop.com) gustavo huber & shelly brown ++ [keithpasko.com](http://keithpasko.com) keith pasko ++ [dabkitsch.com/jml/](http://dabkitsch.com/jml/) jeff lubow ++ [ghost-hack.com](http://ghost-hack.com) michael chang ++ [flight404.com](http://flight404.com) robert hodgin ++ [pohflepp.com](http://pohflepp.com) sascha pohflep ++ [mylinhtrieu.com](http://mylinhtrieu.com) mylinh ttieu nguyen ++ [fredericeyl.de](http://fredericeyl.de) frédéric eyl ++ [thegreeneyl.com](http://thegreeneyl.com) the green eyl ++ [universaloscillation.com](http://universaloscillation.com) aaron meyers ++ [aaronkoblin.com](http://aaronkoblin.com) aaron koblin ++ [tom-carden.co.uk](http://tom-carden.co.uk) tom carden ++ [mike.teczno.co](http://mike.teczno.com) michal migurski ++ [davidrager.org](http://davidrager.org) david rager ++ [digitanalog.net](http://digitanalog.net) marc nimoy ++ [makaga.com](http://makaga.com) matthew gale ++ [reas.com](http://rea.com/) casey reas ++ [n-e-r-v-o-u-s.com](http://n-e-r-v-o-u-s.com/) nervous system ++ [gaffta.org](http://gaffta.org) gray area foundation for the arts (GAFFTA) ++ [bavc.org](http://bavc.org) bay area video coalition (BAVC) diff --git a/templates/edit.html.tpl b/templates/edit.html.tpl index e27c80f..0a53e14 100644 --- a/templates/edit.html.tpl +++ b/templates/edit.html.tpl @@ -1,32 +1,10 @@ - - - - include_template('head-inc.html.tpl') ?> - - <?=SITE_TITLE?><?=TITLE_DELIMITER?><?=$entry->title?> - - - - - include_template('nav.html.tpl') ?> - -
- +
fileInfo); ?> -
-
- -
- - include_template('footer.html.tpl') ?> - - - diff --git a/templates/entry.html.tpl b/templates/entry.html.tpl index 93876cd..af01d55 100644 --- a/templates/entry.html.tpl +++ b/templates/entry.html.tpl @@ -22,9 +22,7 @@ endfor; ?> - +
is_single) && $entry->is_single && $entry->comments_enabled) ?> - -edit + +edit diff --git a/templates/footer.html.tpl b/templates/footer.html.tpl index b7c1734..a57a655 100644 --- a/templates/footer.html.tpl +++ b/templates/footer.html.tpl @@ -1,5 +1,5 @@ - + diff --git a/templates/head-inc.html.tpl b/templates/head-inc.html.tpl index d25ffb1..63ebdfc 100644 --- a/templates/head-inc.html.tpl +++ b/templates/head-inc.html.tpl @@ -1,4 +1,3 @@ - - - - - + + + + diff --git a/templates/single.html.tpl b/templates/single.html.tpl index 1a175c2..e8f9dd8 100644 --- a/templates/single.html.tpl +++ b/templates/single.html.tpl @@ -10,6 +10,8 @@ include_template('nav.html.tpl') ?> + include_template('edit.html.tpl'); ?> +
include_template('entry.html.tpl', array('entry' => $entry, 'single' => true)); ?> -- 2.34.1