-
-
<IfModule mod_rewrite.c>
-RewriteEngine On
-RewriteBase /
-RewriteCond %{REQUEST_FILENAME} !-f
-#RewriteCond %{REQUEST_FILENAME} !-d
-RewriteRule . index.php [L]
+ RewriteEngine On
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]
</IfModule>
-Author:
+Author:
Gabriel Dunne <gdunne@quilime.com>
-Description:
+Description:
PLOG is an CMS engine written for quick and minimal publishing.
+++ /dev/null
-title = Cabspotting
---
-Cabspotting
\ No newline at end of file
+++ /dev/null
-title = Icarus & Deadalus
---
-Icarus & Deadalus
\ No newline at end of file
+++ /dev/null
-title = Monad
---
-Monadic visualization of the Universe
\ No newline at end of file
+title = index
+template = index
+--
+++ /dev/null
-title = Process [B]Log
-date = 2010-05-29
---
-First post.
\ No newline at end of file
+++ /dev/null
-title = Chapter and Verse
-date = 2010-06-01
---
-[Performing](http://www.biennialoftheamericas.org/artists/gabriel-dunne) a new audiovisual project **July 29th** in [Chapter and Verse](http://www.biennialoftheamericas.org/events/month/7/day/29) as part of "Nature of Things", for the Biennial of the Americas in Denver, CO.
\ No newline at end of file
+++ /dev/null
-title = ICOSI Performance at Gray Area w/ Jeff Lubow
-date = 2010-11-05
---
-
-<img src="http://farm5.static.flickr.com/4084/4847387746_7352d3a039_z.jpg" />
-
-Date/Time: 06 Nov 2010 from 7:00 PM to 11:00 PM
-Location: Gray Area Foundation for the Arts – 55 Taylor Street, San Francisco
-Performances by Gabriel Dunne & Jeff Lubow, and Gregory Zifcak
-
-
-Performances with audiovisual synthesis and projection mapped forms.
-
-[Event Link](http://www.gaffta.org/2010/11/03/takes-on-sound-space-symposium-performances-this-saturday/)
-
-
-
+++ /dev/null
-title = clmpr.com
-date = may 24 2011
---
-
-<h2><a href="http://clmpr.com">clmpr.com</a></h2>
-
-<a href="http://clmpr.com">
-<img src="<?=MEDIA_ROOT?>/img/clmpr.png" />
-</a>
-
-clmpr is a clean, minimal bookmarking site.
-
-soon:
-- tags
-- public data endpoints
-- group clmping
-
+++ /dev/null
-date = Tue May 24 22:00:58 2011
---
-
-<img src="<?=MEDIA_ROOT?>/img/perm.png" />
\ No newline at end of file
--- /dev/null
+title = Film/Code remix
+--
+Co-teaching a Youth Film/Code Remix class at BAVC, starting in October.
+[link](http://bavc.org)
--- /dev/null
+title = news
+template = news
+--
+
+<form class="newsform" style="display:inline; border-right:1px #aaa solid; margin-right:30px; padding-right:30px;">
+receive email updates: <input type="text">
+<input type="button" value="submit address">
+<input type="radio" name="sub" checked>add
+<input type="radio" name="sub">remove
+</form><a href="<?=WEB_ROOT?>/.rss">rss</a>
+(you will receive confirmation)
+
--- /dev/null
+title = ICOSI Performance at Gray Area Foundation for the Arts
+date = 2010-11-05
+tags = projection-mapping performance audiovisual
+--
+ICOSI Performance at Gray Area Foundation for the Arts
+Date/Time: 06 Nov 2010 from 7:00 PM to 11:00 PM
+Location: Gray Area Foundation for the Arts – 55 Taylor Street, San Francisco
+ICOSI by Gabriel Dunne in collaboration with Jeff Lubow (Audio)
+[link](http://www.gaffta.org/2010/11/03/takes-on-sound-space-symposium-performances-this-saturday/)
+
--- /dev/null
+title = clmpr.com
+date = may 24 2011
+tags = code www opensource
+--
+
+<a href="http://clmpr.com">
+<img src="<?=MEDIA_ROOT?>/img/clmpr.png" />
+</a>
+
+clmpr is a minimal open-source bookmarking engine.
--- /dev/null
+date = 2003-05-01
+--
+<img src="<?=MEDIA_ROOT?>/projects/egg/egg.jpg">
+<span class="caption">marker, wire. 4" x 2.5"</span>
-tags = fabrication, construction, icosi, installation, design
title = icosi fabrication
date = 2010-07-01
+tags = fabrication icosi design sculpture mapping
--
-Fabrication process for ICOSI projection surface. The form is a section of an icosidodecahedron (scaled on the z-axis by 0.5).
+Fabrication process for ICOSI projection surface. The form is a section of an icosidodecahedron (scaled on the z-axis by 0.5).
<a href="http://www.flickr.com/photos/quilime/4743498955/" title="view on flickr">
<img src="http://farm5.static.flickr.com/4077/4743498955_d8d524bd27.jpg" /></a>
-title = ICOSI
-tags = perf install projection vis aud
+title = ICOS Performance @ Biennial of the Americas, CO
+tags = performance installation projection visual audio
notes = this might need to be split up into a few posts
date = 2010-07-29
--
<img src="http://farm5.static.flickr.com/4110/4847387674_5419f0b672.jpg" />
-*ICOSI* is an audio/visual sculptural performance which was shown at the Biennial of the Americas, Denver CO, 2010.
+*ICOSI* is an audio/visual sculptural performance which was shown at the Biennial of the Americas, Denver CO, Jul 29 2010.
audio synthesis created with Ablton Live/Max/MSP, custom software (OPENGL, Processing). Custom surface fabrication
dimensions: 230cm x 230 cm (7.9' x 7.9')
-The software and audio toolset was developed over three weeks leading up to the performance. The performance dramatically split my focus into two places (music and visuals), which was a juggle that I didn't fully anticipate as I was developing the visual software on one split-screen before the performance. Inspired to continue pursuing interfaces and controllers to overcome the separation of creating audio and visuals simultaneously.
+The software and audio toolset was developed over three weeks leading up to the performance. The performance dramatically split my focus into two places (music and visuals), which was a juggle that I didn't fully anticipate as I was developing the visual software on one split-screen before the performance. Inspired to continue pursuing interfaces and controllers to overcome the separation of creating audio and visuals simultaneously.
The multiple mediums (sculpture, sound, visual media) of this particular project was fascinating. Each iteration represents a process of my own curiosities in technology, consciousness, spirituality, design, and fabrication.
-The piece represents my practice and experiences in regards to my own spiritual growth and experience. Geometrically, the form is inspired by sacred polyhedra that represent forms of transition. The choice of an [icosidodecahedron](http://en.wikipedia.org/wiki/Icosidodecahedron) represents transition of two frequencies, represented by an [icosahedron](http://en.wikipedia.org/wiki/Icosahedron) and its dual polyhedron, a [dodecahedron](http://en.wikipedia.org/wiki/Dodecahedron).
+The piece represents my practice and experiences in regards to my own spiritual growth and experience. Geometrically, the form is inspired by sacred polyhedra that represent forms of transition. The choice of an [icosidodecahedron](http://en.wikipedia.org/wiki/Icosidodecahedron) represents transition of two frequencies, represented by an [icosahedron](http://en.wikipedia.org/wiki/Icosahedron) and its dual polyhedron, a [dodecahedron](http://en.wikipedia.org/wiki/Dodecahedron).
The form is composed of 7 panels trimmed and scaled from a full icosidodecahedron. The visuals follow the structure of the form nearly explicitly, with the exception of textural elements.
The inclusion of the Merkaba/Star Tetrahedron represents an inspiration for the visuals. The Merkaba, a dual spinning pyramid, represents a spiritual light vehicle used by the ancients to transcend to and contact spiritual realms. "Mer" means Light. "Ka" means Spirit. "Ba" means Body. Mer-Ka-Ba means the spirit/body surrounded by counter-rotating fields of light, (wheels within wheels), spirals of energy as in DNA, which transports spirit/body from one dimension to another. [[1]](http://www.crystalinks.com/merkaba.html)
-[more photos via flickr →](http://www.flickr.com/photos/quilime/sets/72157624499344281/with/4847387648/)
+[more photos via flickr →](http://www.flickr.com/photos/quilime/sets/72157624499344281/with/4847387648/)
--
Tech rider developed for new project:
-[](/media/projects/icosi/rider_02.png)
+[](/media/projects/icosi/rider_02.png)
[](/media/projects/icosi/rider_01.png)
-[pdf](http://media.quilime.com/files/projects/icosi/gdunne_rider_diag.pdf)
\ No newline at end of file
+[pdf](http://media.quilime.com/files/projects/icosi/gdunne_rider_diag.pdf)
--- /dev/null
+date = Tue May 24 22:00:58 2011
+hide_title = true
+--
+
+<img src="<?=MEDIA_ROOT?>/img/perm.png" />
+++ /dev/null
-title = aero
-date = 1999
---
-
-<img src="<?=$data['media']?>/aero.jpg" />
-<em>6" x 3" x 3", ceramic</em>
-
-aerodynamic blob vehicle
+++ /dev/null
-title = icarus and deadalus
-date = nov 1 1999
---
-
-<img src="<?=$data['media']?>/icarus.jpg" />
-<em>16" x 16" x 4", balsa wood</em>
-
-The myth of Icarus depicted in a public-space courtyard design.
+++ /dev/null
-title = body negative
---
-
-<img src="<?=$data['media']?>/BODYNEG.jpg">
-<br />
-ink press, 5 wall-mounted panels. 8' x 4' x 2'
-<br />
-pont even school of art final exhibition, France
+++ /dev/null
-date = 2003
---
-<img src="<?=$data['media']?>/egg.jpg">
-<span class="caption">marker, wire. 4" x 2.5"</span>
\ No newline at end of file
+++ /dev/null
-title = obsession
-date = 2003
---
-<img src="<?=$data['media']?>/detail.jpg">
-<span class="caption">copper wire, masonite. 3.5' x 4.5'</span>
+++ /dev/null
-title = boat
-data = 2010
---
-
-<?php
-$w = 535;
-$h = 374;
-?>
-
-
-<object classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" id="qt_object" width="<?=$w?>" height="<?=$h?>" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0">
-<param name="type" value="video/quicktime">
-<param name="name" value="qt_object">
-<param name="nocache" value="true">
-<param name="autoplay" value="true">
-<param name="kioskmode" value="true">
-<param name="controller" value="true">
-<param name="loop" value="true">
-<param name="bgcolor" value="#000000">
-<param name="src" value="<?=$data['media']?>/boat.mov">
-<param name="pluginspage" value="http://www.apple.com/quicktime/download/indext.html">
-<embed name = "qt_object" width="<?=$w?>" height="<?=$h?>" controller="true" loop="true" autoplay="true" src="<?=$data['media']?>/boat.mov" kioskmode="true" nocache="true" type="video/quicktime" bgcolor="#000000" border="0" pluginspage="http://www.apple.com/quicktime/download/indext.html" enablejavascript="true">
-</embed>
-</object><br />
-<span class="caption">photo timelapse</span>
title = Bodyneg
date = 2002
-tags = print mixed media
+tags = print installation
thumb = /media/projects/bodyneg/thumb.png
--
<img src="/media/projects/bodyneg/BODYNEG.jpg" />
<br />
<em>ink press, 5 wall-mounted panels. 8' x 4' x 2'</em>
-
title = cabspotting
date = 2009
-tags = cabs stamen whatever blah blah
+tags = datavis software stamen
--
<?
$h = 516;
?>
-
<object classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" id="qt_object" width="<?=$w?>" height="<?=$h?>" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0">
<param name="type" value="video/quicktime">
<param name="name" value="qt_object">
<param name="loop" value="true">
<param name="bgcolor" value="#000000">
<param name="src" value="<?=$data['media']?>/cabspotting_web.mov">
-<param name="pluginspage" value="http://www.apple.com/quicktime/download/indext.html">
+<param name="pluginspage" value="http://www.apple.com/quicktime/download/indext.html">
<embed name = "qt_object" width="<?=$w?>" height="<?=$h?>" controller="true" loop="true" autoplay="false" src="<?=$data['media']?>/cabspotting_web.mov" kioskmode="true" nocache="true" type="video/quicktime" bgcolor="#000000" border="0" pluginspage="http://www.apple.com/quicktime/download/indext.html" enablejavascript="true">
</embed>
</object>
--- /dev/null
+title = obsession
+date = 2003
+thumb = /media/projects/obsession/thumb.png
+--
+<img src="<?=MEDIA_ROOT?>/projects/obsession/detail.jpg">
+<span class="caption">copper wire, masonite. 3.5' x 4.5'</span>
title = Seaquence
-tags = seaquence flash
+tags = code audio www
notes = this might need to be split up into a few posts
date = 2010-10-04
--
Alpha release of [Seaquence: A experimental web-based musical ecosystem](http://seaquence.org).
-[http://seaquence.org](http://seaquence.org)
\ No newline at end of file
+[http://seaquence.org](http://seaquence.org)
title = Stars
+date = 2009
--
<img src="<?=$data['media']?>/stars.jpg" />
<param name="loop" value="true">
<param name="bgcolor" value="#000000">
<param name="src" value="<?=$data['media']?>/stars.mov">
-<param name="pluginspage" value="http://www.apple.com/quicktime/download/indext.html">
+<param name="pluginspage" value="http://www.apple.com/quicktime/download/indext.html">
<embed name = "qt_object" width="640" height="496" controller="true" loop="true" autoplay="false" src="<?=$data['media']?>/stars.mov" kioskmode="true" nocache="true" type="video/quicktime" bgcolor="#000000" border="0" pluginspage="http://www.apple.com/quicktime/download/indext.html" enablejavascript="true">
</embed>
</object>
-
\ No newline at end of file
+
html, body, table {
- color: #555555;
- font-family: sans-serif;
- font-size: 12px;
- line-height: 1.5em;
-}
-
+ color: #555555;
+ font-family: sans-serif;
+ font-size: 12px;
+ line-height: 1.5em; }
body {
- margin: 20px auto;
-}
+ margin: 20px; }
a {
- border: 0pt none;
- color: #000000;
-}
-
-a img {
- border: 0pt none;
-}
-
-a.mute {
- text-decoration: none ! important;
-}
-
-a:hover, a.mute:hover {
- border: medium none;
- color: #0000FF;
-}
+ border: 0pt none;
+ color: #000000;
+ font-weight:bold;
+ text-decoration: none; }
+ a img {
+ border: 0pt none; }
+ a.mute {
+ text-decoration: none ! important; }
+ a:hover, a.mute:hover {
+ border: medium none;
+ color: #0000FF;
+ text-decoration: underline; }
p {
- margin: 20px auto;
- max-width: 600px;
- text-align: left;
-}
-
-p.center {
- max-width: none;
- text-align: center;
+ margin: 20px 0;
+ max-width: 800px;
+ text-align: left;
}
+ p.center {
+ max-width: none;
+ text-align: center;
+ }
.center {
- text-align: center;
+ text-align: center;
}
-strong {
-
-}
+strong { }
h1, h2, h3, h4, h5, h6 {
- color: #333;
- font-size: 16px;
- font-weight: normal;
- letter-spacing: 0.08em;
-}
+ color: #333;
+ font-size:1em; }
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
- line-height: 2em;
-}
+ line-height: 2em; }
h1 {
- margin: 0pt 0pt 3em;
-}
+ margin: 0pt 0pt 3em; }
h2 {
- margin: 0pt 0pt 0.5em;
-}
+ margin: 0pt 0pt 0.5em; }
h3 {
- margin: 0pt;
-}
+ margin: 0pt; }
ul, li {
- list-style-type: none;
- margin: 0pt;
- padding: 0pt;
-}
+ list-style-type: none;
+ margin: 0pt;
+ padding: 0pt; }
ol li {
- list-style-type: decimal;
-}
+ list-style-type: decimal; }
img {
- margin-bottom: 0.25em;
-}
+ margin-bottom: 0.25em; }
blockquote {
- background: none repeat scroll 0pt 0pt #000000;
- color: #AAAAAA;
- font-family: times;
- font-size: 15px;
- font-style: italic;
- line-height: 1.4em;
- margin: 0pt;
- max-width: 600px;
- padding: 2em 4em;
-}
+ background: none repeat scroll 0pt 0pt #000000;
+ color: #AAAAAA;
+ font-family: times;
+ font-size: 15px;
+ font-style: italic;
+ line-height: 1.4em;
+ margin: 0pt;
+ max-width: 600px;
+ padding: 2em 4em; }
+
+
+
+
+
#nav {
- font-style:italic;
- margin-bottom: 60px;
- margin-left: 20px;
- color:#999;
-}
+ color:#999;
+ margin-bottom:6em;
+ }
+ #nav ul {
+ margin:0;
+ padding:0; }
+ #nav a {
+ border: 0pt none;
+ font-style:normal;
+ border-radius:1px;
+ }
+ #nav a:hover {
+ text-decoration:none;
+ }
+ #nav li {
+ }
+ #nav .spacer {
+ width:1em;
+ }
+
-#nav .t {
- font-weight: bold;
-}
-#nav a {
- border: 0pt none;
- font-style:normal;
-}
-#nav li {
- margin-bottom: 0.2em;
-}
-#nav li.title {
-}
#content {
- left: 300px;
- padding: 0pt 20px;
- position: absolute;
- top: 20px;
- padding-bottom:50px;
-}
+ padding-bottom:50px; }
+ #content p:first-child {
+ margin-top: 0pt;}
+
+.news {
-#content p:first-child {
- margin-top: 0pt;
}
+.news .entry {
+ margin-bottom: 4em;
+}
+.news .entry .date {
+ position:relative;
+ left:-1.25em; }
.projects {
-
}
.projects li {
- display: inline-block;
- margin: 0pt 20px 40px;
+ display:inline-block;
+ margin:0 20px 30px 0;
+ margin-bottom:40px;
}
-.projects li {
-
-}
.projects li a.thumb {
- border: 0pt none;
- display: block;
- height: 120px;
- width: 200px;
+border: 0pt none;
+display: block;
+height: 120px;
+width: 200px;
}
.projects li img {
- height: 100%;
- width: 100%;
+height: 100%;
+width: 100%;
}
.projects li a {
- color: #999999;
- text-decoration: none;
+display:inline-block;
}
.entry {
- margin-bottom: 150px;
+margin-bottom: 150px;
+display:block;
}
.entry h2 {
-
+
}
.entry .title {
- margin-bottom: 20px;
+
+}
+
+.entry .metadata {
+color:#999;
+}
+.entry .metadata a {
+
+}
+.entry .metadata .tags li {
+display:inline !important;
+}
+.entry .metadata .tags a {
+text-decoration: none;
}
.footer {
- margin-top:50px;
+margin-top:50px;
}
.arrow {
- font-weight:bold;
+margin-top:1em;
+font-weight:bold;
+font-size:14px;
}
.arrow a {
- text-decoration:none;
+text-decoration:none;
}
.entry .date {
-
}
-.entry .tags {
- color: #444444;
- font-style: italic;
- margin-top: 10px;
-}
-.entry .tags li {
- display: inline-block;
-}
.caption {
- color: #444444;
- font-style: italic;
- margin-top: 5px;
+margin-top: 5px;
}
--- /dev/null
+{"tags":{"datavis":1,"software":1,"stamen":1,"print":1,"installation":2,"code":2,"www":2,"opensource":1,"audio":2,"performance":1,"projection":1,"visual":1,"icosi":2,"fabrication":2,"design":1,"sculpture":1,"mapping":1,"timelapse":1,"photography":1}}
\ No newline at end of file
--- /dev/null
+title = aero
+date = 1999
+tags = sculpture sketch
+--
+
+<img src="<?=MEDIA_ROOT?>/projects/aero/aero.jpg" />
+6" × 3" × 3", ceramic
--- /dev/null
+title = projects
+template = projects
\ No newline at end of file
title = Cymatic Organ
--
-Cymatic Organ
\ No newline at end of file
+Cymatic Organ
+
--- /dev/null
+title = icarus and deadalus
+date = nov 1 1999
+--
+
+<img src="<?=MEDIA_ROOT?>/projects/icarus-deadalus/icarus.jpg" />
+<em>16" x 16" x 4", balsa wood</em>
+
+The myth of Icarus depicted in a public-space courtyard design.
title = mask
+date = 2009
+tags = painting
--
-<img src="<?echo $data['media']?>/mask.jpg" />
+<img src="<?echo $data['media']?>/mask.jpg" />
<span class="caption">graphite on plywood. 12" x 12"</span>
--- /dev/null
+title = Monad
+--
+Visualization of the Universal timescale.
title = prism
+date = 2010
--
-<img src="<?echo $data['media']?>/3.jpg" />
+<img src="<?echo $data['media']?>/3.jpg" />
<span class="caption">oil on canvas. 4' x 3'</span>
title = SOS Postcard
+
--
Self Organizing Systems Postcard
<?php
- require_once 'lib/init.php';
-
- $url = get_url();
- list($response_format, $response_mime_type) = parse_format($url['extension'], 'html');
-
- # setup template
- $t = get_template_instance();
- $t->response_format = $response_format;
- $t->assign('view', isset($_GET['v']) ? $_GET['v'] : null);
-
- $content_request = LOCAL_ROOT . CONTENT_DIR . $url['dirname'] . '/' . $url['filename'];
- $page_request = LOCAL_ROOT . PAGE_DIR . DIRECTORY_SEPARATOR . $url['filename'];
- $total = 0;
-
- # content exists, and is a folder
- if (is_dir($content_request)) {
- # get config in folder, if exists
- if (is_file($content_request . '/' . CONFIG_FILE )) {
- $config = parse_entry(new SplFileInfo($content_request . '/' . CONFIG_FILE));
- $template = $config['config']['template'] . '.' . $response_format . '.tpl' ;
- }
- list($data, $total) = get_entries($url['dirname'] . '/' . $url['filename']);
- $t->assign('data', $data);
- $t->assign('page_title', preg_replace('{^/|/$}', '', $url['url']));
- }
+require_once 'lib/init.php';
- # content exists, and is a single entry
- else if (is_file($content_request)) {
- $t->assign('data', parse_entry(new SplFileInfo($content_request)));
- $t->assign('single', true);
- $template = 'single.'.$response_format.'.tpl';
- }
+$url = get_url();
+list($response_format, $response_mime_type) = parse_format($url['extension'], 'html');
+
+$content_req = LOCAL_ROOT . CONTENT_DIR . DIRECTORY_SEPARATOR . $url['url'];
+$page_req = LOCAL_ROOT . PAGE_DIR . DIRECTORY_SEPARATOR . $url['url'];
+$total = 0;
+
+
+# setup template
+$template = 'default.html.tpl';
+$t = get_template_instance();
+$t->assign('url', $url);
- # content exists, and is a page
- else if (is_file($page_request)) {
- $page = parse_entry(new SplFileInfo($page_request), 1);
- $t->assign('data', $page);
- $template = $page['config']['template'] ? $page['config']['template'] . '.' . $response_format . '.tpl' : 'page.' . $response_format . '.tpl';
+
+# special endpoints
+$dirs = explode('/', $url['url']);
+# tag
+if ($dirs[0] == 'tag') {
+ $page_req = LOCAL_ROOT . PAGE_DIR . DIRECTORY_SEPARATOR . $dirs[0];
+ if (isset($dirs[1])) {
+ $t->assign('tag', $dirs[1]);
}
+}
+
- # 404
- else {
- $template = '404.html.tpl';
+# content exists, and is a folder
+if (is_dir($content_req)) {
+ # get config in folder, if exists
+ if (is_file($content_req . '/' . CONFIG_FILE )) {
+ $config = parse_entry(new SplFileInfo($content_req . '/' . CONFIG_FILE));
+ $template = $config['config']['template'] . '.' . $response_format . '.tpl' ;
+ $t->assign('data', $config);
}
+ list($entries, $total) = get_entries($url['dirname'] . '/' . $url['filename']);
+ $t->assign('entries', $entries);
+ $t->assign('page_title', preg_replace('{^/|/$}', '', $url['url']));
+}
+
+# content exists, and is a single entry
+else if (is_file($content_req)) {
+ $t->assign('data', parse_entry(new SplFileInfo($content_req)));
+ $t->assign('single', true);
+ $template = 'single.'.$response_format.'.tpl';
+}
+
+# content exists, and is a page
+else if (is_file($page_req)) {
+ $page = parse_entry(new SplFileInfo($page_req), 1);
+ $t->assign('data', $page);
+ $template = isset($page['config']['template']) ? $page['config']['template'] .
+ '.' . $response_format . '.tpl' : 'page.' . $response_format . '.tpl';
+}
+
+# 404
+else {
+ $template = '404.html.tpl';
+}
- # render
- $t->assign('total', $total);
- header("Content-Type: {$response_mime_type}; charset=UTF-8");
- $t->render($template);
+# render
+$t->response_format = $response_format;
+$t->assign('view', isset($_GET['v']) ? $_GET['v'] : null);
+$t->assign('total', $total);
+header("Content-Type: {$response_mime_type}; charset=UTF-8");
+$t->render($template);
* @param path: the path to search. defaults to the CONTENT_DIR
* @param args array
*/
-function get_entries( $path = "", $args = array())
-{
+function get_entries( $path = "", $args = array() )
+{
$recursive = isset($args['recursive']) ? $args['recursive'] : 1;
$order_by = empty($args['order_by']) ? null : $args['order_by'];
$order = empty($args['order']) ? SORT_DESC : $args['order'];
- $path = LOCAL_ROOT . CONTENT_DIR . $path;
-
+ $tag = empty($args['tag']) ? null : $args['tag'];
+ $path = LOCAL_ROOT . CONTENT_DIR . DIRECTORY_SEPARATOR . $path;
+
if ($recursive) {
$iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
$dir_iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
$entries = array();
foreach ($dir_iterator as $file => $info) {
if (!$info->isDir() && $info->getFilename() != CONFIG_FILE) {
- $entries[] = parse_entry($info);
+ $entry = parse_entry($info);
+ if (!isset($tag)) {
+ $entries[] = $entry;
+ }
+ else if ($tag && in_array($tag, is_array($entry['tags']) ? $entry['tags'] : array())) {
+ $entries[] = $entry;
+ }
}
}
-
switch ($order_by)
{
default :
/**
+ * get tags
+ */
+function get_tags($path = "", $args = array() )
+{
+ $tags_json = DATA_DIR . '/tags.json';
+
+ if (DEV || !file_exists($tags_json)) {
+ $entries = get_entries($path, $args);
+ $tags = array();
+
+ foreach($entries[0] as $entry) {
+ $entry_tags = is_array($entry['tags']) ? $entry['tags'] : array();
+ $tags = array_merge($tags, $entry_tags);
+ }
+
+ $tags = array_count_values($tags);
+
+ try {
+ $fp = fopen( $tags_json, 'w');
+ fwrite($fp, json_encode(array( 'tags' => $tags )));
+ fclose($fp);
+ if (!file_exists( $tags_json)) {
+ throw new Exception('Error creating tags.json. Permissions?');
+ }
+ } catch (Exception $e) {
+ echo 'Caught exception: ', $e->getMessage(), "\n";
+ }
+ }
+
+ $json = json_decode(file_get_contents($tags_json));
+ return get_object_vars($json->tags);
+}
+
+
+/*
* returns directories of a folder
* @param path the path to search. defaults to the CONTENT_DIR
* @param args array
*/
-function get_dirs( $path = "", $args = array())
+function get_dirs( $path = "", $args = array() )
{
$recursive = isset($args['recursive']) ? $args['recursive'] : 1;
- $path = LOCAL_ROOT . CONTENT_DIR .'/'. $path;
-
-
+ $path = LOCAL_ROOT . CONTENT_DIR . '/' . $path;
if ($recursive) {
$iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
$file = array();
$file['config'] = parse_ini_string($config);
$file['title'] = isset($file['config']['title']) ? $file['config']['title'] : $fileInfo->getFilename();
+ $file['filename'] = $fileInfo->getFilename();
+ $file['path'] = $fileInfo->getPath();
$file['config']['date'] = isset($file['config']['date']) ? $file['config']['date'] : null;
$file['timestamp'] = $file['config']['date'] ? date('U', strtotime( $file['config']['date'])) : $fileInfo->getCTime();
$file['tags'] = isset($file['config']['tags']) ? explode(" ", $file['config']['tags']) : null;
$file['url'] = WEB_ROOT . ($page ? '' : substr($file['cat']['url'],1)) . $fileInfo->getFilename();
return $file;
-}
\ No newline at end of file
+}
<?php
- putenv("TZ=America/Los_Angeles");
+putenv("TZ=America/Los_Angeles");
- ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . dirname(realpath(__FILE__)));
+ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . dirname(realpath(__FILE__)));
- define ('SITE_TITLE', 'Gabriel Dunne');
- define ('LOCAL_ROOT', '/home/quilime/gabrieldunne-site/');
- define ('MEDIA_ROOT', 'http://'.$_SERVER['SERVER_NAME'].'/media');
- define ('WEB_ROOT', 'http://'.$_SERVER['SERVER_NAME'].'/');
+define ('SITE_TITLE', 'gabrieldunne.com');
+define ('LOCAL_ROOT', '/Users/gdunne/_portfolio/www/');
+define ('MEDIA_ROOT', 'http://'.$_SERVER['SERVER_NAME'].'/media');
+define ('WEB_ROOT', 'http://'.$_SERVER['SERVER_NAME'].'/');
- define ('CONTENT_DIR', 'content');
- define ('TEMPLATE_DIR', 'templates');
- define ('PAGE_DIR', 'pages');
- define ('CONFIG_DELIMITER', '--');
- define ('MORE_DELIM', '<!--more-->');
- define ('TITLE_DELIMITER', ': ');
- define ('CONFIG_FILE', 'config');
+define ('DATA_DIR', 'data');
+define ('CONTENT_DIR', 'content');
+define ('TEMPLATE_DIR', 'templates');
+define ('PAGE_DIR', 'pages');
+define ('CONFIG_DELIMITER', '--');
+define ('MORE_DELIM', '<!--more-->');
+define ('TITLE_DELIMITER', ': ');
+define ('CONFIG_FILE', 'config');
- require_once 'data.php';
- require_once 'output.php';
- require_once 'markdown.php';
- require_once 'template.php';
+define ('DEV', true);
-
- //error_reporting(E_ALL);
- //ini_set("display_errors", 1);
-
+if (DEV) {
+ error_reporting(E_ALL);
+ ini_set("display_errors", 1);
+}
+
+require_once 'data.php';
+require_once 'output.php';
+require_once 'markdown.php';
+require_once 'template.php';
return $t;
}
+
/**
* @param format
* @param default format
{
$types = array('html' => 'text/html',
'text' => 'text/plain',
- 'rss' => 'application/rss+xml',
+ 'rss' => 'application/rss+xml',
'atom' => 'application/atom+xml',
'json' => 'text/json',
'js' => 'application/x-javascript',
function paginate( $set )
{
-
}
return 'moments';
case abs($seconds) <= 90 * 60:
- return round(abs($seconds) / 60).' minutes';
+ return round(abs($seconds) / 60) . ' minutes';
case abs($seconds) <= 36 * 60 * 60:
- return round(abs($seconds) / (60 * 60)).' hours';
+ return round(abs($seconds) / (60 * 60)) . ' hours';
default:
- return round(abs($seconds) / (24 * 60 * 60)).' days';
+ return round(abs($seconds) / (24 * 60 * 60)) . ' days';
}
}
function get_url_parts()
{
- $parts = explode('/', substr($_SERVER['SCRIPT_URL'], strlen(get_base_dir() . '/')));
+ $parts = explode('/', substr($_SERVER['SCRIPT_NAME'], strlen(get_base_dir() . '/')));
return $parts[0] ? $parts : 0;
}
function get_url()
{
- $path_info = pathinfo($_SERVER['SCRIPT_URL']);
- $path_info['url'] = preg_match("/\.\.\//", $_SERVER['SCRIPT_URL']) ? '/' : $_SERVER['SCRIPT_URL'];
- $path_info['extension'] = null;
- return $path_info; //substr($_SERVER['SCRIPT_URL'], strlen(get_base_dir() . '/'));
+ $path = isset($_GET['path']) ? $_GET['path'] : '/';
+ $path_info = pathinfo($path);
+ $path_info['url'] = rtrim($path, "/");
+ $path_info['extension'] = isset($path_info['extension']) ? $path_info['extension'] : null;
+ return $path_info;
}
$parsed = parse_url($url);
return $parsed['host'];
}
+
+
<?php
class Template
-{
+{
var $template_dir = 'templates';
var $template_cache_dir = 'cache';
var $cachr_file = null;
var $response_format = 'html';
var $caching = 1;
-
+
var $_tpl_vars = array();
- function __construct()
- {
- }
-
-
- function assign($tpl_var, $value = null)
- {
+ function __construct() {}
+
+
+ function assign($tpl_var, $value = null) {
if (is_array($tpl_var)) {
foreach ($tpl_var as $key => $val)
if ($key != '')
}
- public function include_template ($template, $vars = array())
- {
+ function include_template ($template, $vars = array()) {
$this->_tpl_vars = array_merge($this->_tpl_vars, $vars);
$this->render($template);
}
-
- public function render( $template )
- {
- extract( $this->_tpl_vars );
+ function render( $template ) {
+ extract( $this->_tpl_vars );
if (is_file( $this->template_dir . DIRECTORY_SEPARATOR . $template ))
include( $this->template_dir . DIRECTORY_SEPARATOR . $template );
else
include( $this->template_dir . DIRECTORY_SEPARATOR . 'default.' . $this->response_format . '.tpl');
}
-
-
- public function page_title($delim)
- {
+
+
+ function page_title($delim) {
return isset($this->_tpl_vars['page_title']) ? $delim . $this->_tpl_vars['page_title'] : "";
}
}
-title = bio
+
--
-**gabriel labov dunne**
-(1981, San Francisco)
-<br />
-1242 Market Street, FL 2
-San Francisco, CA 94102
-+ 1 415 493 8496
-<a href="mailto:studio@gabrieldunne.com">email</a>
-<br />
-<br />
+
+Born and lives in the San Francisco Bay Area, works internationally.
<!--
Gabriel Dunne develops artistic and research focused projects based on space, time, perception. Some key elements of his work are the overlap of physical, visual, and sonic perception. The use of light, sound, projection, and structure are prime mediums for his work.
-->
-
-
-
-**residencies / collaborations**
-2011 Collaboration, Studio Vishal K. Dar
-2009—2010 Residency, Gray Area Foundation for the Arts
-<br />
-
-
-**exhibition / performance**
-2012 India Art Fair, Delhi, India. Collaboration with Vishal K Dar.
-2011 Sepalcure, Shigeto, Simple & Santa, GAFFTA, San Francisco. Live visuals. <a href="http://www.gaffta.org/2011/03/01/sepalcure-shigeto-simple-santa/">→</a>
-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.
-<br />
-
-
-**public collections**
-New York Museum of Modern Art, NY
-Jaquez Gallery Collection, Pont Aven, France
-<br />
-
-
-**edu**
-2003 B.A. Design | Media Arts, UCLA
-2001 Pont Aven School of Art, France
-1999 College of Marin, Architecture
-<br />
-
-
-
-**professional activity**
-2010— Bay Area Video Coalition, NextGen Youth Instructor
-2005— Tessellated Group: Designer
-2009—2010 Gray Area Foundation for the Arts: Studio Director
-2007—2008 Stamen Design: Designer, Programmer
-2007—2008 Google, Inc: Designer, Programmer
-2004—2006 Motion Theory: Designer, Programmer, Animator
-<br />
-<br />
-
-
-
-
-**talks / conferences**
-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
-<br />
-
-**courses / lectures / workshops**
-2011 Processing 101 Workshop(Certificate Program, Gray Area, San Francisco), 2 weeks
-2010 Open Source Coding (Youth Program, BAVC, San Francisco), school year
-2010 Creative Coding: An Introduction to Processing (Gray Area, San Francisco), 2 weeks
-2009 Creative Coding (Gray Area, San Francisco), 2 weeks
-2009 Introduction to Processing (Gray Area, San Francisco), weekend
-2007 Processing (Makers Faire, San Mateo), 2 hour
-2005 Programming and Design (UCLA student workshops, Los Angeles), quarter
-2004 Maya Workshop Series (UCLA, Los Angeles), 1 quarters
-2003 Typography Workshop Series (UCLA, Los Angeles), 1 day
-2003 Adobe Software Workshops, Photoshop/Illustrator/After Effects (UCLA, Los Angeles), 1 day each
-2002 Macromedia Design Student Workshops (UCLA, Los Angeles), 1 day
-<br />
-
-**websites**
-2011 Duran Duran "All You Need Is Now" http://now.gaffta.org
-2010 Seaquence http://seaquence.org
-2007 Motion Theory [link]
-<br />
-
-**commercials**
-Budwieser "Superbowl", Motion Theory
-Budwieser "The Game", Motion Theory
-Nike "One", Motion Theory
-<br />
-
-**shorts**
-RestFest 2003 Opener, Motion Theory
-The Mirror
-<br />
-
-
-**music videos**
-Beck "Girl", Motion Theory
-Papa Roach "Getting Away With Murder", Motion Theory
-<br />
-
-
-**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
-<br />
-
-**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
-<br />
-
-**academic honors**
-2002, 2003 UCLA Deans List
-2001 UCLA Merit Scholarship
-<br />
-
-**credentials**
-Adobe A.C.E. Certified in Photoshop, Illustrator
-<br />
--- /dev/null
+
+--
+
+
+<!--
+Gabriel Dunne develops artistic and research focused projects based on space, time, perception. Some key elements of his work are the overlap of physical, visual, and sonic perception. The use of light, sound, projection, and structure are prime mediums for his work.
+-->
+
+
+Gabriel Labov Dunne
+
+1242 Market Street, FL 2
+San Francisco, CA 94102
+
+studio@gabrieldunne.com
+www.gabrieldunne.com
+
++ 1 415 493 8496
+
+
+<br />
+
+<form>
+
+<p>
+<lable>name</label><br />
+<input type="text" name="name">
+</p>
+
+<p>
+<lable>email</label><br />
+<input type="text" name="email">
+</p>
+
+<p>
+<lable>message</label><br />
+<textarea style="width:250px;height:100px;"></textarea>
+</p>
+
+<p>
+<input type="submit" value="send">
+</p>
+
+</form>
--- /dev/null
+title = cv
+--
+
+**edu**
+2003 B.A. Design | Media Arts, UCLA
+2001 Pont Aven School of Art, France
+1999 College of Marin, Architecture
+<br />
+<br />
+
+
+**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. <a href="http://www.gaffta.org/2011/03/01/sepalcure-shigeto-simple-santa/">→</a>
+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.
+<br />
+<br />
+
+
+
+**residencies / collaborations**
+2011 Studio Collaboration w/ Studio Vishal K. Dar
+2009—2010 Residency, Gray Area Foundation for the Arts
+<br />
+<br />
+
+
+
+
+
+**public collections**
+New York Museum of Modern Art, NY
+Jaquez Gallery Collection, Pont Aven, France
+<br />
+<br />
+
+
+
+
+**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
+<br />
+<br />
+
+
+**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
+<br />
+<br />
+
+
+**websites**
+2011 Duran Duran "All You Need Is Now" http://now.gaffta.org
+2010 Seaquence http://seaquence.org
+2007 Motion Theory [link]
+<br />
+<br />
+
+**commercials**
+Budwieser "Superbowl", Motion Theory
+Budwieser "The Game", Motion Theory
+Nike "One", Motion Theory
+<br />
+<br />
+
+
+**shorts**
+RestFest 2003 Opener, Motion Theory
+The Mirror
+<br />
+<br />
+
+
+
+**music videos**
+Beck "Girl", Motion Theory
+Papa Roach "Getting Away With Murder", Motion Theory
+<br />
+<br />
+
+
+
+**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
+<br />
+<br />
+
+
+**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
+<br />
+<br />
+
+
+**academic honors**
+2002, 2003 UCLA Deans List
+2001 UCLA Merit Scholarship
+<br />
+<br />
+
+**credentials**
+Adobe A.C.E. Certified in Photoshop, Illustrator
+<br />
+<br />
+
+
+
+
+
+
+
+
+**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,
+<br />
+<br />
+
+**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
+<br />
+<br />
+++ /dev/null
-title = index
---
\ No newline at end of file
title = links
-type = page
--
-*elsewhere*
-+ [quilime.com](http://quilime.com)
-
-<br />
-*friends*
-
-+ stephanie sherriff [ssherriff.com](http://ssherriff.com)
-+ ryan alexander [onecm.com](http://onecm.com)
-+ adam roth [ripevessel.com](http://ripevessel.com)
-+ joshua nimoy [jtnimoy.net](http://jtnimoy.net)
-+ daniel massey [oddsympathy.com](http://oddsympathy.com)
-+ keith pasko [keithpasko.com](http://keithpasko.com)
-+ jeff lubow [dabkitsch.com/jml/](http://dabkitsch.com/jml/)
-+ michael chang [ghost-hack.com](http://ghost-hack.com)
-+ robert hodgin [flight404.com](http://flight404.com)
-+ carbon workshop (gustavo huber + shelly brown) [carbonworkshop.com](http://carbonworkshop.com)
-+ sascha pohflep [pohflepp.com](http://pohflepp.com)
-+ mylinh trieu [mylinhtrieu.com](http://mylinhtrieu.com)
-+ aaron meyers [universaloscillation.com](http://universaloscillation.com)
-+ tom carden [tom-carden.co.uk](http://tom-carden.co.uk)
-+ michal migurski [mike.teczno.co](http://mike.teczno.com)
-+ david rager [davidrager.org](http://davidrager.org)
-+ marc nimoy [digitanalog.net](http://digitanalog.net)
-+ matthew gale [makaga.com](http://makaga.com)
-+ frédéric eyl [fredericeyl.de](http://fredericeyl.de)
-+ the green eyl [thegreeneyl.com](http://thegreeneyl.com)
-
-
-<br />
-*respect*
-
-+ nervous system [http://n-e-r-v-o-u-s.com/](http://n-e-r-v-o-u-s.com/)
-
-
-
-<br />
-*places*
-
-+ gray area foundation for the arts [gaffta.org](http://gaffta.org)
-+ bay area video coalition [bavc.org](http://bavc.org)
\ No newline at end of file
++ [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)
--- /dev/null
+title = tags
+--
+
+
+<? if (isset($tag)): ?>
+
+<? list($entries, $total) = get_entries('/', $args = array('tag' => $tag)); ?>
+<? foreach($entries as $entry): ?>
+<?
+if (isset($entry['content_short']))
+$entry['content'] = $entry['content_short'] .
+'<br /><a class="more" href="' . $entry['url'] . '">more →</a><br /><br />';
+?>
+
+<div class="entry">
+<? $this->include_template('entry.html.tpl', array('entry' => $entry)); ?>
+</div>
+
+<? endforeach; ?>
+
+<? else: ?>
+
+
+<ul class="tags">
+<? $tags = get_tags('/'); ksort($tags); ?>
+<? foreach($tags as $tag => $count) : ?>
+<li><a href="/tag/<?=$tag?>"><?=$tag?></a> × <?=$count?></li>
+<? endforeach; ?>
+</ul>
+
+<? endif; ?>
<html>
<head>
-
+
<? $this->include_template('head-inc.html.tpl') ?>
-
+
<title><?=SITE_TITLE?><?=$this->page_title(TITLE_DELIMITER);?></title>
-
+
</head>
<body>
-
+
<? $this->include_template('nav.html.tpl') ?>
-
+
<div id="content">
-
- <? foreach($data as $entry): ?>
- <?
- if ($entry['content_short'])
+ <? foreach($entries as $entry): ?>
+ <div class="entry">
+ <?
+ if (isset($entry['content_short']))
$entry['content'] = $entry['content_short'] . '<br /><a class="more" href="'.$entry['url'].'">more →</a><br /><br />';
-
- $this->include_template('entry.html.tpl', array('data' => $entry));
-
+
+ $this->include_template('entry.html.tpl', array('entry' => $entry));
?>
- <? endforeach; ?>
-
+ </div>
+ <? endforeach; ?>
+
</div>
<? $this->include_template('footer.html.tpl') ?>
-<div class="entry">
- <div class="content">
- <? eval('?>' . $data['content']); ?>
- </div>
+<? if(!isset($entry['config']['hide_title'])) : ?>
+ <h2 class="title"><a href="<?=$entry['url']?>"><?=$entry['title']?></a></h2>
+<? endif; ?>
- <div class="arrow" title="<?=$data['title']?> - <?=date("Y-m-d", $data['timestamp'])?>">
- <a href="<?=$data['url']?>">→</a>
- </div>
-
- <!--
- <div class="metadata">
- <div class="date" title="<?=get_relative_time($data['timestamp']);?>"><?=date("Y-m-d", $data['timestamp'])?></div>
- <ul class="tags">
- <?php if ($data['tags'])
- echo '<li>' . implode($data['tags'], ' ') . '</li>';
- ?>
- </ul>
- </div>
- -->
+<div class="content">
+ <? eval('?>' . $entry['content']); ?>
+</div>
+<div class="metadata">
+ <div class="date" title="<?=get_relative_time($entry['timestamp']);?>"><?=date("Y/m/d", $entry['timestamp'])?></div>
+ <? if ($entry['tags']) : ?>
+ tagged <span class="tags">
+ <?
+ for($i = 0; $i < sizeof($entry['tags']); $i++) :
+ $tag = $entry['tags'][$i];
+ $li = '<a href="'.WEB_ROOT . 'tag/' . $tag . '">' . $tag . '</a>';
+ if ($i !== 0)
+ $li = ', ' . $li;
+ echo $li;
+ endfor;
+ ?>
+ </span>
+ <?
+ endif;
+ ?>
</div>
+
+<? if (isset($single) && $single) : ?>
+ <div class="arrow" title="<?=$entry['cat']['entry']?>">
+ <a href="<?=$entry['cat']['url']?>">←</a>
+ </div>
+<? else : ?>
+ <div class="arrow" title="<?=$entry['title']?> - <?=date("Y-m-d", $entry['timestamp'])?>">
+ <a href="<?=$entry['url']?>">→</a>
+ </div>
+<? endif; ?>
--- /dev/null
+
+<div class="metadata">
+ <div class="date" title="<?=get_relative_time($data['timestamp']);?>">— <?=date("Y / m / d", $data['timestamp'])?></div>
+</div>
+
+<div class="content">
+ <? eval('?>' . $data['content']); ?>
+</div>
<script>
$(document).ready(function() {
+ $("#content").hide().fadeIn(250);
prettyPrint();
});
-</script>
\ No newline at end of file
+</script>
<html>
<head>
-
+
<? $this->include_template('head-inc.html.tpl') ?>
-
+
<title><?=SITE_TITLE?></title>
-
+
</head>
<body>
-
+
<? $this->include_template('nav.html.tpl') ?>
-
-<div id="content"><pre>>>> Hello World</pre></div>
+
+<div id="content">
+
+</div>
<? $this->include_template('footer.html.tpl') ?>
<ul id="nav">
- <li><a href="/projects/">projects</a></li>
- <li><a href="/log/">log</a></li>
- <li><a href="/bio/">bio</a></li>
- <li><a href="/links/">links</a></li>
+ <li><a href="<?=WEB_ROOT?>">gabriel labov dunne</a></li>
+
+ <li class="spacer"> </li>
+
+ <? $dirs = get_dirs('', $args = array('recursive' => false) ); ?>
+ <? foreach($dirs as $dir) : ?>
+ <li><a href="<?=$dir['url']?>"><?=$dir['name']?></a></li>
+ <? endforeach; ?>
+ <? $pages = get_pages('', $args = array('recursive' => false) ); ?>
+ <? foreach($pages as $page) :
+ if (isset($page['config']['hidden']) && $page['config']['hidden'])
+ continue;
+ ?>
+ <li><a href="<?=$page['url']?>"><?=$page['title']?></a></li>
+ <? endforeach; ?>
+
+
+
+
+<!--
<br /><br />
-
+
<li><a href="/"><em>recent</em></a></li>
<br />
<li><a href="/archive/"><em>archive</em></a></li>
- <br />
+ <br />
<? $dirs = get_dirs('projects/'); ?>
<? foreach($dirs as $dir) : ?>
<li><a href="<?=$dir['url']?>"><?=$dir['name']?></a></li>
- <? endforeach; ?>
+ <? endforeach; ?>
+
-<!--
<br /><br/>
<li><a href="/projects/">projects</a></li>
-
+
<? list($entries, $total) = get_entries('/projects/'); ?>
<? foreach($entries as $p) : ?>
<li><a href="<?=$p['url']?>"><?=$p['title']?></a></li>
<br /><br/>
-->
-
-</ul>
\ No newline at end of file
+
+</ul>
--- /dev/null
+<html>
+<head>
+
+ <? $this->include_template('head-inc.html.tpl') ?>
+
+ <title><?=SITE_TITLE?><?=$this->page_title(TITLE_DELIMITER);?></title>
+
+</head>
+<body>
+
+ <? $this->include_template('nav.html.tpl') ?>
+
+<div id="content" class="news">
+
+ <? eval('?>' . $data['content']); ?>
+
+ <br />
+ <br />
+ <br />
+
+ <? foreach($entries as $entry): ?>
+ <div class="entry">
+ <?
+ if (isset($entry['content_short']))
+ $entry['content'] = $entry['content_short'] . '<br /><a class="more" href="'.$entry['url'].'">more →</a><br /><br />';
+ $this->include_template('entry.news.html.tpl', array('data' => $entry));
+ ?>
+ </div>
+ <? endforeach; ?>
+
+</div>
+
+ <? $this->include_template('footer.html.tpl') ?>
+
+</body>
+</html>
<html>
<head>
-
+
<? $this->include_template('head-inc.html.tpl') ?>
-
+
<title><?=SITE_TITLE?><?=TITLE_DELIMITER?> <?=$data['title']?></title>
-
+
</head>
<body>
-
+
<? $this->include_template('nav.html.tpl') ?>
-
+
<div id="content" class="page">
-
- <?=$data['content'];?>
-
+
+ <? eval('?>' . $data['content']); ?>
+
</div>
<? $this->include_template('footer.html.tpl') ?>
--- /dev/null
+<html>
+<head>
+
+ <? $this->include_template('head-inc.html.tpl') ?>
+
+ <title><?=SITE_TITLE?>: <?=$page_title?></title>
+
+</head>
+<body>
+
+ <? $this->include_template('nav.html.tpl') ?>
+
+<div id="content">
+
+ <ul class="thumbs">
+ <? foreach($data as $entry): ?>
+ <li>
+ <a href="<?=$entry['url']?>" class="thumb">
+ <img src="<?=$entry['thumb']?>" /><br/>
+ </a>
+ <a href="<?=$entry['url']?>"><?=$entry['title']?></a>
+ </li>
+ <? endforeach; ?>
+ </ul>
+
+</div>
+
+ <? $this->include_template('footer.html.tpl') ?>
+
+</body>
+</html>
<html>
<head>
-
+
<? $this->include_template('head-inc.html.tpl') ?>
-
+
<title><?=$data['title'];?></title>
-
+
</head>
<body>
-
- <? $this->include_template('nav.html.tpl') ?>
-
- <div id="content" class="single entry">
- <div class="content">
- <? eval('?>' . $data['content']); ?>
- </div>
-
- <div class="arrow">
- <a href="<?=$data['cat']['url'];?>" title="<?=$data['cat']['url'];?>">←</a>
- </div>
-
-<!--<div class="date" title="<?=get_relative_time($data['timestamp']);?>"><?=date("Y-m-d", $data['timestamp'])?></div>-->
-
- <!--
- <div class="metadata">
- <div class="date" title="<?=get_relative_time($data['timestamp']);?>"><?=date("Y-m-d", $data['timestamp'])?></div>
- <br />
- <a href="<?=$data['cat']['url'];?>">← <?=$data['cat']['name'];?></a>
- <ul class="tags">
- <? if ($data['tags']) foreach($data['tags'] as $tag) : ?>
- <li>#<?=$tag?></li>
- <? endforeach; ?>
- </ul>
- </div>
- -->
+ <? $this->include_template('nav.html.tpl') ?>
+ <div id="content" class="single entry">
+ <div class="entry">
+ <? $this->include_template('entry.html.tpl', array('data' => $data, 'single' => true)); ?>
+ </div>
</div>
<? $this->include_template('footer.html.tpl') ?>
--- /dev/null
+<html>
+<head>
+
+ <? $this->include_template('head-inc.html.tpl') ?>
+
+ <title><?=SITE_TITLE?><?=TITLE_DELIMITER?> <?=$data['title']?></title>
+
+</head>
+<body>
+
+ <? $this->include_template('nav.html.tpl') ?>
+
+<div id="content" class="page">
+
+ <? if (isset($tag)): ?>
+
+ <? list($entries, $total) = get_entries('/', $args = array('tag' => $tag)); ?>
+ <? foreach($entries as $entry): ?>
+ <?
+ if (isset($entry['content_short']))
+ $entry['content'] = $entry['content_short'] .
+ '<br /><a class="more" href="' . $entry['url'] . '">more →</a><br /><br />';
+ ?>
+
+ <div class="entry">
+ <? $this->include_template('entry.html.tpl', array('data' => $entry)); ?>
+ </div>
+
+ <? endforeach; ?>
+
+ <? else: ?>
+
+
+ <ul class="tags">
+ <? $tags = get_tags('/'); ksort($tags); ?>
+ <? foreach($tags as $tag => $count) : ?>
+ <li><a href="/tag/<?=$tag?>"><?=$tag?></a> × <?=$count?></li>
+ <? endforeach; ?>
+ </ul>
+
+ <? endif; ?>
+
+</div>
+
+ <? $this->include_template('footer.html.tpl') ?>
+
+</body>
+</html>