From 3609278fd5104bdb8274f7939ad9f74800d139ab Mon Sep 17 00:00:00 2001 From: Gabriel Dunne Date: Wed, 11 Nov 2009 15:29:04 -0800 Subject: [PATCH] first commit --- .htaccess | 9 ++ index.php | 24 ++++ js/jquery-1.3.2.min.js | 19 ++++ lib/config | 4 + lib/data.php | 97 +++++++++++++++++ lib/init.php | 10 ++ lib/output.php | 230 +++++++++++++++++++++++++++++++++++++++ style.css | 94 ++++++++++++++++ templates/404.html | 29 +++++ templates/_mus.html | 28 +++++ templates/aggregate.html | 122 +++++++++++++++++++++ templates/archive.html | 58 ++++++++++ templates/bio.html | 38 +++++++ templates/code.html | 126 +++++++++++++++++++++ templates/contact.html | 61 +++++++++++ templates/cv.html | 191 ++++++++++++++++++++++++++++++++ templates/footer.html | 5 + templates/header.html | 1 + templates/index.html | 33 ++++++ templates/links.html | 67 ++++++++++++ templates/log.html | 129 ++++++++++++++++++++++ templates/mus.html | 70 ++++++++++++ templates/nav.html | 41 +++++++ templates/photo.html | 54 +++++++++ templates/photo_bk.html | 69 ++++++++++++ templates/projects.html | 106 ++++++++++++++++++ templates/text.html | 79 ++++++++++++++ 27 files changed, 1794 insertions(+) create mode 100644 .htaccess create mode 100644 index.php create mode 100644 js/jquery-1.3.2.min.js create mode 100644 lib/config create mode 100644 lib/data.php create mode 100644 lib/init.php create mode 100644 lib/output.php create mode 100644 style.css create mode 100644 templates/404.html create mode 100644 templates/_mus.html create mode 100644 templates/aggregate.html create mode 100644 templates/archive.html create mode 100644 templates/bio.html create mode 100644 templates/code.html create mode 100644 templates/contact.html create mode 100644 templates/cv.html create mode 100644 templates/footer.html create mode 100644 templates/header.html create mode 100644 templates/index.html create mode 100644 templates/links.html create mode 100644 templates/log.html create mode 100644 templates/mus.html create mode 100644 templates/nav.html create mode 100644 templates/photo.html create mode 100644 templates/photo_bk.html create mode 100644 templates/projects.html create mode 100644 templates/text.html diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..bef083f --- /dev/null +++ b/.htaccess @@ -0,0 +1,9 @@ + + + +RewriteEngine On +RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +#RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . index.php [L] + diff --git a/index.php b/index.php new file mode 100644 index 0000000..872da1d --- /dev/null +++ b/index.php @@ -0,0 +1,24 @@ + diff --git a/js/jquery-1.3.2.min.js b/js/jquery-1.3.2.min.js new file mode 100644 index 0000000..b1ae21d --- /dev/null +++ b/js/jquery-1.3.2.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/lib/config b/lib/config new file mode 100644 index 0000000..01a826b --- /dev/null +++ b/lib/config @@ -0,0 +1,4 @@ +LOCAL_ROOT = /home/quilime/gabrieldunne.com/ +CONTENT_DIR = content/ +TEMPLATE_DIR = templates/ +SITE_TITLE = Gabriel Dunne diff --git a/lib/data.php b/lib/data.php new file mode 100644 index 0000000..14cd16e --- /dev/null +++ b/lib/data.php @@ -0,0 +1,97 @@ +' . $l['title'] . ''; + } + + return join("\n", $ret); + } + + + + function get_content ($path, $args="") + { + parse_str($args, $args); + + $type = isset($args['type']) ? $args['type'] : 'folder'; + $config = $type == 'folder' ? $c . '/config' : $c; + + $content = array(); + $glob = glob( CONTENT_DIR . $path . '/*' ); + + foreach ($glob as $c) { + if (is_file($c . $config) || is_dir($c . $config)) { + $config_array = parse_config($c . $config); + if ($config_array['title'] && $config_array['hide'] != "true") { + $content[] = $config_array; + } + } + } + return array(array_reverse($content), count($content)); + } + + + function parse_config ($config_file) + { + $config = array(); + + $config_settings = explode("\n", file_get_contents( $config_file , FILE_USE_INCLUDE_PATH )); + + $break = false; + foreach ( $config_settings as $c ) + { + if ($c == '--') { + $break = true; + $config['inline_content'] = ""; + continue; + } + + if ($break) { + $config['inline_content'] .= $c; + } + else { + $conf = explode("=", $c); + $config[trim($conf[0])] = trim($conf[1]); + } + } + + $config['thumb'] = is_file( dirname($config_file) . '/' . $config['thumb'] ) ? + get_base_dir() . '/' . dirname($config_file) . '/' . $config['thumb'] : + get_base_dir() . '/' . dirname($config_file) . '/thumb.png'; + + $config['timestamp'] = strtotime($config['date']); + + $config['content'] = is_file( dirname($config_file) . '/' . $config['content'] ) ? + dirname($config_file) . '/' . $config['content'] : + dirname($config_file) . '/content.html'; + + $config['href'] = basename($config_file) == 'config' ? + get_base_dir() . '/' . str_replace(CONTENT_DIR, "", dirname($config_file)) : + get_base_dir() . '/' . str_replace(CONTENT_DIR, "", $config_file); + + $config['base_dir'] = get_base_dir() . '/' . CONTENT_DIR . $config['href']; + + return $config; + } + + + + function define_constants($constants = 'config') + { + $config = explode("\n", file_get_contents( $constants , FILE_USE_INCLUDE_PATH )); + foreach($config as $c) { + $var = explode("=", $c); + define(trim($var[0]), trim($var[1])); + } + } + + + + +?> \ No newline at end of file diff --git a/lib/init.php b/lib/init.php new file mode 100644 index 0000000..b7599d4 --- /dev/null +++ b/lib/init.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/lib/output.php b/lib/output.php new file mode 100644 index 0000000..2d82d83 --- /dev/null +++ b/lib/output.php @@ -0,0 +1,230 @@ + 'text/html', + 'text' => 'text/plain', + 'atom' => 'application/atom+xml', + 'json' => 'text/json', + 'js' => 'application/x-javascript', + 'xspf' => 'application/xspf+xml', + 'xml' => 'text/xml', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'm3u' => 'audio/x-mpegurl'); + $format = empty($format) ? $default : $format; + return array($format, $types[$format]); + } + + + function get_url_parts() + { + $parts = explode('/', substr($_SERVER['SCRIPT_URL'], strlen(get_base_dir() . '/'))); + return $parts[0] ? $parts : 0; + } + + + function get_url_string() + { + return substr($_SERVER['SCRIPT_URL'], strlen(get_base_dir() . '/')); + } + + + function get_domain_name() + { + if(php_sapi_name() == 'cli') return CLI_DOMAIN_NAME; + return $_SERVER['SERVER_NAME']; + } + + + function get_base_dir() + { + if(php_sapi_name() == 'cli') return CLI_BASE_DIRECTORY; + return rtrim(dirname($_SERVER['SCRIPT_NAME']), DIRECTORY_SEPARATOR); + } + + + function get_site_root() + { + return LOCAL_SITE_ROOT; + } + + + function get_base_href() + { + if(php_sapi_name() == 'cli') return ''; + $query_pos = strpos($_SERVER['REQUEST_URI'], '?'); + return ($query_pos === false) ? $_SERVER['REQUEST_URI'] + : substr($_SERVER['REQUEST_URI'], 0, $query_pos); + } + + function get_url_domain($url) + { + $parsed = parse_url($url); + return $parsed['host']; + } + + + function include_template($template) + { + include ( TEMPLATE_DIR . $template ); + } + + + function exec_php( $matches ) + { + try { + eval('ob_start();' . $matches[1] . '$inline_execute_output = ob_get_contents(); ob_end_clean();'); + } + catch (Exception $e) { } + return $inline_execute_output; + } + + function get_rss_feed( $url ) + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $feed = curl_exec($ch); + curl_close($ch); + $xml = new SimpleXMLElement($feed); + return $xml; + } + + + /** + * @param int $seconds Number of seconds to convert into a human-readable timestamp + * @return tring Human-readable approximate timestamp like "2 hours" + */ + function approximate_time($seconds) + { + switch(true) + { + case abs($seconds) <= 90: + return 'moments'; + + case abs($seconds) <= 90 * 60: + return round(abs($seconds) / 60).' minutes'; + + case abs($seconds) <= 36 * 60 * 60: + return round(abs($seconds) / (60 * 60)).' hours'; + + default: + return round(abs($seconds) / (24 * 60 * 60)).' days'; + } + } + + + /** + * @param int $time Unix timestamp + * @return string Relative time string like "2 hours earlier" + */ + function get_relative_time($time) + { + $diff = $time - time(); + return approximate_time($diff) . ($diff < 0 ? ' ago' : ' from now'); + } + + + /** + * Replace line breaks with
. I don't usr nl2br because it doesn't remove the line breaks, it just adds the
+ * @param string $str + * @return string + */ + function clean($str) + { + $str = str_replace("\r", "", $str); // Remove \r + $str = str_replace("\n", "
", $str); // Replace \n with
+ return $str; + } + + + /** + * This function cleans up a string and make it ready to be displayed in a textarea field. + * Replaces
with line breaks which is easier to read for the user. + * + * @param string $str + * @return string + */ + function clean_for_textarea($str) { + $str = clean($str); + $str = str_replace("
", "\n", $str); + return $str; + } + + + function die_with_code($code, $message) + { + header("HTTP/1.1 {$code}"); + die($message); + } + + + function print_pre($arr) + { + echo '
';
+        print_r($arr);
+        echo '
'; + } + + function generate_thumbs($src, $dest, $w, $h) + { + exec('ls -1 ' . $src, $files); + foreach ($files as $f) { + system("convert " . $src . $f . " -resize " . $w . "x" . $h . " " . $dest . $f); + } + } + + if(false) + generate_thumbs( + '/home/quilime/gabrieldunne.com/dev/projects/bay_area_transit/images/', + '/home/quilime/gabrieldunne.com/dev/projects/bay_area_transit/images/thumbs_lg/', + 900, + 800 + ); + + + function qt($args) + { + ?> + + + + + + + + + + + \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..2e985d3 --- /dev/null +++ b/style.css @@ -0,0 +1,94 @@ + +body { background:#121212; margin:10px 100px 50px 40px; } +html, body, table { font-family: verdana; font-size:11px; line-height:1.6em; color:#666; } + +/*selection*/ +::-moz-selection {background: #ff8; !important} +::selection {background: #ff8; !important} + +/*links*/ +a { color:#bbb; border:0; } +a img { border:0; } +a.mute { color:#555; text-decoration:none; } +a:hover, a.mute:hover { color:#ff8; text-decoration:none; } +.caption a { color:#888;} +.caption a:hover { color:#905;} + +/*headings*/ +h1, h2, h3, h4, h5, h6 { color:#444; font-size:1em; } +h1 { margin:0 0 3em 0; } +h2 { margin:4em 0 0.5em 0; } +h3 { font-size:1em; margin:0; } + +/*code*/ +pre, .code { font-family: Monaco, monospace; font-size:12px; line-height:1.4em; background:#0a0a0a; color:#ff8; padding:0.1em 0.5em; } +span.code { padding:0.1em 0.5em; } +iframe.code { border-color:#ddd; width:90%; height:400px; background:#000; padding:20px;} + +strong { color:#888; } + +.date { } +.medium { } +.desc { color:#757575; } + +blockquote { font-family:times; background:#000; color:#aaa; +margin:0; font-size:15px; line-height:1.4em; padding:2em 4em; font-style:italic; line-height:1.45em; max-width:600px;} + +p { max-width:720px; } + +ul { margin:0; padding:0; list-style-type:none; } +li { margin-bottom:1px; padding:1px; } +table { margin:0; padding:0; border:0; } +table .column { padding-right:50px; min-width:120px; max-width:275px; } +table .column h2 a { text-decoration:none; } +table h2, table h3 { border-bottom:1px dotted #aaa; } +table .video li, table .image li { margin-bottom:2em; } +table .reader li, table .bookmarks li { margin-bottom:1em; padding-bottom:1em; border-bottom:1px dotted #252525; } +.reader_links li, .bookmark_links li { padding-top:.75em; margin-bottom:.75em; } +.bookmark_links li a { display:block; } +.bookmark_links li span { font-style: italic; color:#444; } + +.c_pop { position:absolute; display:none; background:#141414; border:5px outset #d44; padding:1em 2em; left:380px; z-index:5; } + +#home_arrow { position: absolute; top:11px; left:23px; margin-left:250px; text-decoration:none; } + +#content { margin-left:250px; } + #content p { } + ul.inline_content { border-top:10px solid #161616; } + ul.inline_content li { margin:50px 0; padding-bottom:50px; border-bottom:10px solid #161616; } + ul.inline_content li div.content li { padding:0; border:0; margin:0; } + ul.thumbnails { } + ul.thumbnails li { display:inline-block; margin: 0px 60px 60px 0px; } + ul.thumbnails .thumbnail { width:160px; height:240px; text-align:center; background:#888; } + ul.thumbnails a:hover img { + filter:alpha(opacity=75); + -moz-opacity:0.75; + -khtml-opacity: 0.75; + opacity: 0.75; + } + ul.thumbnails a { text-decoration:none; } + ul.thumbnails .title { } + + .text { font-family:serif; font-size:15px; line-height:2.2em; margin-top:80px;} + .indent { text-indent:3em; } + +.nav { position:absolute; top:1em; left:1em; line-height:1.1em;} +.nav ul { margin-left:1em; } +.nav a { text-decoration:none; color:#555; } +.nav a:hover { color:#ff8; } +.nav h3 { margin-bottom:0.4em; } +.nav h3 a { font-weight:bold; } + +.caption { font-style:italic; margin-top:5px; color:#444; } +.more, .home { text-decoration:none; color:#666; } + +/*download link, function link*/ +ul.dl {} +ul.dl li, ul.func li { font-weight:bold; } +ul.dl li a , ul.func li a { } +ul.func { margin-bottom:3em; } +ul.dl li a { font-weight:bold; border-bottom:1px dotted #666; } + +#footer { margin-top:120px; } +#footer .copy a { text-decoration:none; } + diff --git a/templates/404.html b/templates/404.html new file mode 100644 index 0000000..5203044 --- /dev/null +++ b/templates/404.html @@ -0,0 +1,29 @@ + + + + + + + <?php echo SITE_TITLE; ?> - 404 + + + + + + + +
+ +

oops

+ +

+ 404 +

+ +
+ + + + + + \ No newline at end of file diff --git a/templates/_mus.html b/templates/_mus.html new file mode 100644 index 0000000..d95f98b --- /dev/null +++ b/templates/_mus.html @@ -0,0 +1,28 @@ + + + + + + + + <?php echo SITE_TITLE ?> - music + + + + + + + +
+ +

music

+ + borked, bbl + +
+ + + + + + \ No newline at end of file diff --git a/templates/aggregate.html b/templates/aggregate.html new file mode 100644 index 0000000..d13cf09 --- /dev/null +++ b/templates/aggregate.html @@ -0,0 +1,122 @@ + + + + + + + + <?php echo SITE_TITLE; ?> - aggregate + + + + + + + +
+ +

aggregate

+ + + + + + + + + + + + + + + + + + + + + + + +
+ +

image

+
    + channel->item as $item) : + if ($count-- == 0) break; + ?> +
  • + + + +
  • + +
+

+ more → +

+
+ +

video

+
    + channel->item as $tube) : + if ($count-- == 0) break; + ?> +
  • title); ?>"> + link; + $pattern = '/v=(.+?)&/'; + preg_match($pattern, $url, $matches); + $id = $matches[1]; + ?> + + + +
  • + +
+

+ more → +

+
+ +

links

+
    + channel->item as $item) : ?> +
  • + title?> +
    + description;?> +
  • + +
+

+ more → +

+
+ +

reader

+ +

+ more → +

+
+ +
+ + + + + + \ No newline at end of file diff --git a/templates/archive.html b/templates/archive.html new file mode 100644 index 0000000..76a5995 --- /dev/null +++ b/templates/archive.html @@ -0,0 +1,58 @@ + + + + + + + + + + <?php echo SITE_TITLE; ?> - content + + + + + + + +
+ + + + + + + + + + +
+

archive

+
    + +
  • + +
+ + + + +
+ + +
+ + + + + + \ No newline at end of file diff --git a/templates/bio.html b/templates/bio.html new file mode 100644 index 0000000..18df49a --- /dev/null +++ b/templates/bio.html @@ -0,0 +1,38 @@ + + + + + + + + <?php echo SITE_TITLE ?> - bio + + + + + + + +
+ +

bio

+ +

+ born 1981 in San Francisco +

+ currently lives/works in San Francisco +

+ +
+ +

+ c/v +

+ +
+ + + + + + \ No newline at end of file diff --git a/templates/code.html b/templates/code.html new file mode 100644 index 0000000..c8983c3 --- /dev/null +++ b/templates/code.html @@ -0,0 +1,126 @@ + + + + + + + <?php echo SITE_TITLE; ?> - code<?php if (sizeof($items) > 0 ) : ?>: <?echo strtolower($items['title']); ?> [<?php echo $items['medium']; ?>]<?php endif; ?> + + + + + + + +
+ + + +

code / []

+ + +
+ +
+ + + + +

code

+ +

+ code notes +

+ + + +
    + +
  • + + [] +
    + +
    +
  • + +
+ + + + + + + + + +

code

+ + +

+ code notes +

+ + + + + + + + + + + +
+ [] + + + +
+ +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/templates/contact.html b/templates/contact.html new file mode 100644 index 0000000..6a53ed5 --- /dev/null +++ b/templates/contact.html @@ -0,0 +1,61 @@ + + + + + + + + <?php echo SITE_TITLE ?> - contact + + + + + + + + + +
+ +

contact

+ +

+ studio@gabrieldunne.com +

+ +
+ +

+

+ +
+ + +

+ +
+ + +

+ + + +


+ +
+ +

+ + +
+ + + + + + \ No newline at end of file diff --git a/templates/cv.html b/templates/cv.html new file mode 100644 index 0000000..f95e842 --- /dev/null +++ b/templates/cv.html @@ -0,0 +1,191 @@ + + + + + + + + <?php echo SITE_TITLE ?> - c/v + + + + + + + + + +
+ +

Gabriel Dunne

+

+ http://gabrieldunne.com
+

+ +

+ + + +

edu

+2004 B.A. Design | Media Arts, UCLA +
+2002 Pont Avent School of Art, France +
+1999 Architecture, Art Foundation, College of Marin + +



+ +

selected exhibitions / conferences

+ +2008
+“Design and the Elastic Mind”, MoMA NYC (w/Stamen Design). Permanent Collection.
+2006
+Interferenze: Naturalis Electronica, Valle Caudina, Italy
+Japan Media Arts Festival, Tokyo, Japan (collab.)
+Festival Sonar, Barcelona, Spain
+SIGGRAPH, Boston
+2005
+New Wight Gallery MFA Show, UCLA, Los Angeles, CA (collab.)
+SIGGRAPH, Los Angeles
+2004
+:Output International Design Competition, Amsterdam, Netherlands
+CiberArt: International Festival of New Technologies, Bilbao, Spain
+Traffic, New Wight Gallery, UCLA, Los Angeles, CA (collab.)
+2003
+narr@tive: Digital Storytelling, Hammer Museum, Los Angeles
+Sur(Face), Design Media Arts EDA, Los Angeles, CA
+Eyberrations Digital Film Festival, Irvine, CA
+2002
+Text + Architecture & Writing in Architecture, SCIARC, Los Angeles, CA
+Melbourne International Film Festival, Melbourne, Australia
+Experimental Works On Paper, Paris, France
+Experimental Works On Paper, Rennes, France
+Jaquez Gallery Collection, Pont Aven, France. Permanent Collection.
+ + +



+ + +

teaching

+2009
+Creative Coding (series), Gray Area Foundation for the Arts, San Francisco
+2006 +
+Programming and Design, UCLA, Los Angeles
+Video, UCLA Summer Institute, Guest Lecturer, UCLA, Los Angeles
+2004
+Processing Workshop, Makers Faire, San Jose
+2005
+UCLA, Artist Symposium. Los Angeles
+2003
+Maya Workshop Series, UCLA, Los Angeles
+Typography Workshop Series, UCLA, Los Angeles
+2002
+Adobe Design Workshops, UCLA, Los Angeles
+2001
+Macromedia Design Student Workshops, UCLA, Los Angeles + + +



+ +

selected projects

+"Daschtein"
+The Daschtein Ice Cave Project facilitates a global dialogue about clean energy. The public interacts with the installation by sending messages via SMS, and can view real-time display of the public discourse projected on the inside of the Dachstein Ice Cave in Austria. Created with TheGreenEyl and Club of Pioneers in Berlin. Developed in Processing, C++, Max/MSP. + +

+"Celestial Mechanics""
+A planetarium dome artwork that visualizes statistics, data, and protocols of man-made aerial technologies animated with Processing, Java, Maya/MEL with 5 channel surround sound. Featured in numerous international exhibitions, including Interferense Festival, Italy, Japan Media Arts festival, SIGGRAPH, and :Output Design Competition in the Netherlands. + + +



+ + + + + + + + + + +

press

+2008
+MIT Aerospace Annual, featuring imagery from Celestial Mechanics
+2007
+a mínima #17, cover image
+Contemporary Art of Science and Technology, Zhang Yanxiang, ISBN# 978-7-03-020415-8
+2006
+AD: Architectural Digest, Featuring excerpts from Celestial Mechanic. Sep Issue
+FOCUS Italia, May Issue
+Discover Magazine, Imagery from Celestial Mechanics, Apr Issue
+Wired, Interview, March Issue
+HDRI, Interview, Feb Issue
+ +



+ + + +

professional / residencies

+ + +2008 - Current +
+Gray Area Foundation for the Arts, San Francisco CA (Residency, Studio Director) +
+ +2004 - Current +
+Tessellated Group, Napa CA (Partner, Designer) +
+Presentation, modeling, and display of material designs and machinery used in creating industrial +material formations for structure, aerospace, and packaging. Built a variety of tools, processes, and presentation with Maya, Rhino, CAD/CAM, AS3, Processing/Java, C++. + +
+ +2008 +
+Stamen Design, San Francisco CA (Designer, Programmer) +
+Worked on a variety of data visualization software design projects, ranging in scope from real-time interactive displays for digg.com to architectural media installations for SOM, written in AS3, Java, Processing. Re-engineered a version of Cabspotting: a visualization of GPS locations of taxi activity in San Francisco, acquired by MoMA NYC for the permanent collection.
+ +2007 +
+Google Inc, Mountain View CA (Designer, Developer) +
+Designed and engineered visualizations of Google’s information, such as search, activity, and real time statistics, displayed internally on an international network. Software developed in Python, AS3, Java, C++, PHP. + +
+ +2004 - 2006 +
+Motion Theory, Los Angeles CA (VFX Supervisor, Designer) +
+Animation, compositing, programmatic animation, R+D, concept development, and proposals for award winning commercials and music videos. Managed teams of designers, animators, and programmers for effects sequences, motion control sequences. Custom visual effects written in C++, Maya/MEL, Processing. + + + + +
+ + + + + + \ No newline at end of file diff --git a/templates/footer.html b/templates/footer.html new file mode 100644 index 0000000..1fbb7a6 --- /dev/null +++ b/templates/footer.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/templates/header.html b/templates/header.html new file mode 100644 index 0000000..4ac161f --- /dev/null +++ b/templates/header.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..4abc14b --- /dev/null +++ b/templates/index.html @@ -0,0 +1,33 @@ + + + + + + + + <?php echo SITE_TITLE; ?> + + + + + + + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/templates/links.html b/templates/links.html new file mode 100644 index 0000000..b52d31c --- /dev/null +++ b/templates/links.html @@ -0,0 +1,67 @@ + + + + + + + + <?php echo SITE_TITLE ?> - links + + + + + + + +
+ +

links

+ + + +
  • + + + + +
      + +
    + +
    + + + + + + \ No newline at end of file diff --git a/templates/log.html b/templates/log.html new file mode 100644 index 0000000..16ea6b0 --- /dev/null +++ b/templates/log.html @@ -0,0 +1,129 @@ + + + + + + + + + <?php echo SITE_TITLE; ?><?php if ($single) : ?> - <?php echo date("Y M d", strtotime($log['date']));?> - <?echo strtolower($log['title']); ?><? else: ?> - log<? endif; ?> + + + + + + + + + +
    + + + +

    log /

    + +
    + +
    + +

    + ← back to log +

    + + + +

    log

    + + + + + + + + + + + + + + +
    + + +
    + + + +
    + +
    +
    + + + + + + + + + + + +

    log

    + + + +
      + +
    • +

      + + + +

      +
      + +
    • + +
    + + + + + + + + +
    + + + + + + \ No newline at end of file diff --git a/templates/mus.html b/templates/mus.html new file mode 100644 index 0000000..61ce4d1 --- /dev/null +++ b/templates/mus.html @@ -0,0 +1,70 @@ + + + + + + + + + <?php echo SITE_TITLE; ?> - projects<?php if (sizeof($projects) > 0 ) : ?>: <?echo strtolower($project['title']); ?> [<?php echo $project['medium']; ?>]<?php endif; ?> + + + + + + + +
    + + + + + +

    projects /

    + + + + + + + +

    projects

    + + +
      + +
    • +
      +

      + +

      +
    • + +
    + + +
    + + + + + + \ No newline at end of file diff --git a/templates/nav.html b/templates/nav.html new file mode 100644 index 0000000..3285395 --- /dev/null +++ b/templates/nav.html @@ -0,0 +1,41 @@ + + + diff --git a/templates/photo.html b/templates/photo.html new file mode 100644 index 0000000..0fdb7fb --- /dev/null +++ b/templates/photo.html @@ -0,0 +1,54 @@ + + + + + + + + + + <?php echo SITE_TITLE; ?> :photo + + + + + + + + + +
    + +

    images

    + +
      + channel->item as $item) : ?> +
    • + description; + $pattern = '/
    + + more via flickr → + +
    + + + + + + \ No newline at end of file diff --git a/templates/photo_bk.html b/templates/photo_bk.html new file mode 100644 index 0000000..e0ad96a --- /dev/null +++ b/templates/photo_bk.html @@ -0,0 +1,69 @@ + + + + + + + + + <?php echo SITE_TITLE; ?> - photo<?php if (sizeof($photo) > 0 ) : ?>: <?echo strtolower($photo_single['title']); ?> [<?php echo $photo_single['medium']; ?>]<?php endif; ?> + + + + + + + +
    + + + + + +

    photo /

    + + + + + + + +

    photo

    + + + + + +
    + + + + + + \ No newline at end of file diff --git a/templates/projects.html b/templates/projects.html new file mode 100644 index 0000000..331b803 --- /dev/null +++ b/templates/projects.html @@ -0,0 +1,106 @@ + + + + + + + + + <?php echo SITE_TITLE; ?> - projects<?php if (sizeof($projects) > 0 ) : ?>: <?echo strtolower($project['title']); ?> [<?php echo $project['medium']; ?>]<?php endif; ?> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/text.html b/templates/text.html new file mode 100644 index 0000000..8ae7150 --- /dev/null +++ b/templates/text.html @@ -0,0 +1,79 @@ + + + + + + + + + <?php echo SITE_TITLE; ?><?php if ($single) : ?> - <?echo ($log['title']); ?><? else: ?> - text<? endif; ?> + + + + + + + + + +
    + + + +

    text /

    + + +
    + +
    + +

    + ← back to text +

    + + + +

    text

    + + + + + + + + +
    + +
    + + + + + + +
    + + + + + + \ No newline at end of file -- 2.34.1