Description:
PLOG is an CMS engine written for quick and minimal publishing.
+Use:
+Put markdown files in the content/ folder.
+At the top of each file, you can specify variables in ini format.
+
+i.e;
+
+`
+title = Post Title
+date = 2012 may 12, 7:33pm
+--
+
+## header
+Your post markdown content here.
+
+<span>HTML is enabled, <strong>too</strong></span>.
+`
TODO
+- work on README documentation
- pagination (View)
- canvas icons for list/thumb/tile views (js)
- static cache generation (wget? curl?)
- static rss, json, html
-- commenting system from india branch
+ static rss, json, html
- update content.sh to give back help if used incorrectly
-done
-- prev/next (View)
+command line usage (for generating static site)
+http://php.net/manual/en/features.commandline.php
\ No newline at end of file
-title = DualBoot Archlinux/Windows7 Installation
+title = "DualBoot Archlinux/Windows7 Installation"
date = 2012-01-02
tags = arch linux windows installation tutorial
--
-Documentation of the process of installing [archlinux](http://www.archlinux.org/) and Windows 7 in a dual-boot configuration.
+Documentation of the process of installing [archlinux](http://www.archlinux.org/) and Windows 7 in a dual-boot configuration.
## System Specs
## Installing Windows
-Windows was installed from a USB stick using Microsoft's [Windows 7 USB/DVD tool](http://www.microsoftstore.com/store/msstore/html/pbPage.Help_Win7_usbdvd_dwnTool). It's required to create this key from a Windows 7 system. Boot with the USB drive, then install Windows on the drive in a single partition. Windows also creates a System Reserved partition for itself. Once installed, via Start Menu > Administrative Tools > Computer Management > Disk Manamagent, select 'Shrink Partition' on the main Windows parition to create another partition for Arch. The default value for the shrink is 50%, so for my setup the value for the new disk size was ~50GB, which was ideal.
+Windows was installed from a USB stick using Microsoft's [Windows 7 USB/DVD tool](http://www.microsoftstore.com/store/msstore/html/pbPage.Help_Win7_usbdvd_dwnTool). It's required to create this key from a Windows 7 system. Boot with the USB drive, then install Windows on the drive in a single partition. Windows also creates a System Reserved partition for itself. Once installed, via Start Menu > Administrative Tools > Computer Management > Disk Manamagent, select 'Shrink Partition' on the main Windows parition to create another partition for Arch. The default value for the shrink is 50%, so for my setup the value for the new disk size was ~50GB, which was ideal.
Note about this install. I have an old Linksys (Cysco) WMP54G Wireless PCI Card. Drivers from Linksys/Cysco's website didn't work, but following this [blog post](http://www.phishthis.com/2009/01/16/how-to-install-wmp54g-drivers-on-windows-7-beta-64-bit-or-vista-64-bit/), the generic RALink drivers worked great.
It's pretty straight forward until the drive partitions. My 100GB drive can only support 4 logical partitions, so the rest have to be Logical. Note: The numbers are out of order, because I used Logical partitions for everything except for the Windows partitions and /home. Logical partitions end up being counted last in the partition table, but I made my /home folder LAST so I could use the up the remaining space on the drive. You'll also need to set the /boot partition's 'bootable' flag to `true`.
<pre>
-• sda1
+• sda1
Windows 7 System Reserved
-• sda2
- Windows 7
-• sda5
+• sda2
+ Windows 7
+• sda5
/boot - 100MB is enough
• sda6
/ - about 25GB is appropriate
-title = create bootable iso from unix/osx terminal
+title = "create bootable iso from unix/osx terminal"
date = july 7 2011
--
date = 2007-12-12
-title = "MEL Notepad"
+title = MEL Notepad
tags = mel maya
--
-title = command line audio on OSX
-date = Wed, Nov 9 2011 18:40:26, IST
+title = "command line audio on OSX"
+date = "Wed, Nov 9 2011 18:40:26, IST"
tags = audio osx cli
--
Since there is no equivilent to /dev/dsp or /dev/audio on OSX, you need to install an alternative like <a href="http://sox.sourceforge.net/">sox</a>.
-Install sox by either downloading the OSX binary from <a href="http://sox.sourceforge.net/">http://sox.sourceforge.net/</a>
-or
-install <a href="http://mxcl.github.com/homebrew/">homebrew</a>, and then install sox with <code class="prettyprint">brew install sox</code>
+Install sox by either downloading the OSX binary from <a href="http://sox.sourceforge.net/">http://sox.sourceforge.net/</a>
+or
+install <a href="http://mxcl.github.com/homebrew/">homebrew</a>, and then install sox with <code class="prettyprint">brew install sox</code>
##Examples
-title = show hidden files (OSX Finder)
+title = "show hidden files (OSX Finder)"
date = Tue May 10 21:03:45 PDT 2011
-tags = osx
+tags = osx
--
via Terminal
<pre class="prettyprint">
defaults write com.apple.finder AppleShowAllFiles FALSE
killall Finder
-</pre>
\ No newline at end of file
+</pre>
-title = Terminal Emulator on Windows via Cygwin
+title = "Terminal Emulator on Windows via Cygwin"
date = august 11 2011
--
How to install cygwin on windows:
- xinit (required, scripts for starting the X server: xinit, startx, startwin (and a shortcut on the Start Menu to run it), startxdmcp.bat )
- xorg-docs (optional, man pages)
- X-start-menu-icons (optional, adds shortcuts to X Clients and Server to the Start menu)
- - mintty (windows-feel terminal)
+ - mintty (windows-feel terminal)
<br />
3. **Optional Packages**
<!--more-->
-3. **~/.XDefaults**
+3. **~/.XDefaults**
dark theme:
<pre class="prettyprint">
! terminal colors ------------------------------------------------------------
*color7: #cccccc
*color15: #ffffff
</pre>
-Some more themes on the <a href="https://bbs.archlinux.org/viewtopic.php?pid=653473">Arch forums</a>.
+Some more themes on the <a href="https://bbs.archlinux.org/viewtopic.php?pid=653473">Arch forums</a>.
<br />
-4. **~/.bashrc**
+4. **~/.bashrc**
To enable color `ls` and human readable size format, add:
<pre class="prettyprint">
alias ls='ls -h --color=tty'
</pre>
-By default, the .bashrc in CygwinX has many options you can uncomment.
+By default, the .bashrc in CygwinX has many options you can uncomment.
<br />
5. **~/.emacs**
-Result:
+Result:
<img src="http://media.quilime.com/files/img/cygwin.PNG" />
-title = Combine Files (Windows)
+title = "Combine Files (Windows)"
date = Wed, april 27 2011
tags = windows cmd console
--
title = quilime
-#template = index
-
+template = index
title = mandala
date = 2009-12-13
-tags = art graphic design
+tags = art graphic design
--
-
\ No newline at end of file
+
title = cone
date = 2010-01-22
-tags = installation, projection
+tags = installation projection
--
<a href="http://www.flickr.com/photos/quilime/4272182477/">
<img src="http://farm3.static.flickr.com/2735/4272182477_19e3b10d8d.jpg">
<p>
test pattern
-</p>
\ No newline at end of file
+</p>
title = Water Is Life
date = Oct 23 2011 06:04:38 PM
-draft = true
+draft = 1
--
<a href="http://www.flickr.com/photos/quilime/6266458764/sizes/l/in/photostream/"><img src="http://farm7.staticflickr.com/6034/6266458764_6f71bd0a7e_z.jpg"></a>
title = boat
date = 2007-01-01
+thumb = http://portfolio.quilime.com/archive/boat/thumb.png
--
title = dots
date = 2007-05-02
+thumb = http://media.quilime.com/files/projects/dots/thumb.png
--
<img style="width:100%;" src="http://portfolio.quilime.com/new/content/01_Dots/images/out.0033.png">
<!--
-"Dots" is an interaction between human and computational order and chaos.
-Notes are generated in an circular ordered, repetitive pattern. Connection lines
-represent human-played audio tones, line length representing pitch.
-While notes are played by the human musician, the notes wander away from their original
-places, warping and distorting the connecting lines, resulting in a more chaotic
+"Dots" is an interaction between human and computational order and chaos.
+Notes are generated in an circular ordered, repetitive pattern. Connection lines
+represent human-played audio tones, line length representing pitch.
+While notes are played by the human musician, the notes wander away from their original
+places, warping and distorting the connecting lines, resulting in a more chaotic
and unusual soundscape as time passes.
-->
</p>
title = Jellyfish
date = 2008-05-01
+thumb = http://media.quilime.com/files/projects/jelly/thumb.png
--
<img style="width:100%;" src="http://portfolio.quilime.com/new/content/02_Jellyfish/images/jellies.0237.png">
Organic forms react to the user and each other. Their motions and position in space create and/or affect audio. A tenticles depth in space is correlated to volume, while its color is linked to a tone in the audio spectrum. Interaction with the tentacle instrument is smooth, undulating, jellyfish-like.
-<!--"Jellyfish" is an interactive soundscape that explores the interaction between
+<!--"Jellyfish" is an interactive soundscape that explores the interaction between
a life-like programmed intelligence, and a human user. Tentacles respond and modify audio or controller inputs, affecting the audio tones that each tenticle eminates. A tenticles depth in space is correlated to volume, while color is related to tone in the audio spectrum.-->
Particles are jostled and shaken as in a rattle. The sonic possibilities of their collisions and movement are given freedom and sonic depth via software.
Rattles and shakers can be embedded into one another, allowing for more sensitivity, sonic subtlety, and layers when making music. Interaction with the digital rattle is as intuitive as its physical counterpart.
-<img style="width:100%;" src="http://portfolio.quilime.com/new/content/03_Rattles/images/rattleFlowers.0077.png">
+<iframe src="http://player.vimeo.com/video/978557?title=0&byline=0&portrait=0" width="500" height="377" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<!--more-->
The interaction with "Rattles" is identicle to the traditional percussive instrument.
-The visual shape, texture, or size of each interior rattler represents a unique audio
-tone, either percussive or melodic. The resulting soundscape of the rattle instrument is
-therefore unique and rich with sonic subtlety and variation, transforming the traditional
-"rattle" into an instrument with a necesarry visual component.
-Rattles can be embedded into one another, allowing for more
+The visual shape, texture, or size of each interior rattler represents a unique audio
+tone, either percussive or melodic. The resulting soundscape of the rattle instrument is
+therefore unique and rich with sonic subtlety and variation, transforming the traditional
+"rattle" into an instrument with a necesarry visual component.
+Rattles can be embedded into one another, allowing for more
sensitivity, sonic subtlety, and layers.
title = Swimtank
date = 2007-05-01
+thumb = http://media.quilime.com/files/projects/swimtank/thumb.png
--
<img style="width:100%;" src="http://portfolio.quilime.com/new/content/05_Swim_Tank/images/fish_close.0261.png">
-A form follows an infinite path drawn by you,
+A form follows an infinite path drawn by you,
and then reacts to its own trail. You can control the form on two axis, while the depth of the path follows a sinusoidal rhythm that is affected by paths previously drawn.
<!--Exploratory, infinitely looping game.
body, table {
font-family: arial, monaco, monospace;
line-height:1.4em;
+ font-size:14px;
}
body {
color:#4fa;
line-height:1.4em;
font-size:14px;
- font-family:menlo, monaco, "Lucida Console", monospace;
+ font-family:menlo, monaco, "Lucida Console", monospace;
padding:1px 5px 2px;
background:#303030;
border-radius:4px;
#nav {
position:fixed;
- top:0;
- left:0;
+ top:0;
+ left:0;
padding:20px;
-background:rgba(25,25,25,0.3);
}
#nav a {
}
require 'lib/init.php';
-
-
-
$request = get_request();
-$v = new View ($request);
$m = new Model ($request);
-
-
-
-
+$v = new View();
if ($m->is_single())
else if ($m->is_multiple())
$v->assign('entries', $m->entries);
-
-
-
-
header("Content-Type: {$m->response_mime_type}; charset=UTF-8");
-$v->render( $m->template );
+$v->render( $m->template, $m->response_format );
exit;
--- /dev/null
+[settings]
+; general settings
+site_title = quilime
+clean_urls = 1
+limit = 15
+; http://php.net/manual/en/function.date.php
+date_format = M d Y, h:i:s A T
+
+[local]
+; server locations and file names
+web_root = "/"
+content = "content/"
+comments = "comments/"
+templates = "templates/"
+pages = "pages/"
+config_file = "config"
+
+[delimiters]
+; various delimiters
+config_delim = --
+more_delim = "<!--more-->"
+title_delim = " — "
+
+[ignores]
+; file ignore patterns
+file_ignores[] = config
+file_ignores[] = .DS_Store
+
+
+
+; define ('SITE_TITLE', 'quilime');
+
+; define ('LOCAL_ROOT', '/home/quilime/quilime.com/');
+; define ('WEB_ROOT', '/');
+; define ('CONTENT_DIR', 'content/');
+; define ('COMMENTS_DIR', 'comments/');
+; define ('TEMPLATE_DIR', 'templates/');
+; define ('PAGE_DIR', 'pages/');
+; define ('CONFIG_DELIMITER', '--');
+; define ('CONFIG_FILE', 'config');
+; define ('MORE_DELIM', '<!--more-->');
+; define ('TITLE_DELIMITER', ' — ');
+; define ('ENTRY_DATE_FORMAT', 'M d Y, h:i:s A T');
+
+; $_FILE_IGNORES = array(CONFIG_FILE, '.DS_Store');
$path = join(array( LOCAL_ROOT, CONTENT_DIR, $path ), DIRECTORY_SEPARATOR);
- if ($recursive) {
- $iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
- $dir_iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
- }
- else {
- $dir_iterator = new DirectoryIterator($path);
+ try {
+ if (!is_dir($path)) {
+ throw new Exception("no such file or directory", 1);
+ }
+ if ($recursive) {
+ $iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
+ $dir_iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
+ }
+ else {
+ $dir_iterator = new DirectoryIterator($path);
+ }
+ } catch (Exception $e) {
+ echo 'Caught exception: ', $e->getMessage(), "\n";
}
+
$entries = array();
foreach ($dir_iterator as $file => $info) {
{
$recursive = isset($args['recursive']) ? $args['recursive'] : 1;
- $local_content = LOCAL_ROOT . CONTENT_DIR;
+ $local_content = join(array(LOCAL_ROOT, CONTENT_DIR), DIRECTORY_SEPARATOR);
+
$path = $local_content . $path;
+ $path = str_replace("//", "/", $path);
- if ($recursive) {
- $iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
- $dir_iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
- }
- else {
- $dir_iterator = new DirectoryIterator($path);
+
+ try {
+ if (!is_dir($path)) {
+ throw new Exception("no such file or directory: $path", 1);
+ }
+ if ($recursive) {
+ $iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
+ $dir_iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
+ }
+ else {
+ $dir_iterator = new DirectoryIterator($path);
+ }
+ } catch (Exception $e) {
+ echo 'Caught exception: ', $e->getMessage(), "\n";
}
$dirs = array();
foreach ($dir_iterator as $dir => $info) {
}
$f = array();
- $f['config'] = parse_ini_string($config);
+ try {
+ $f['config'] = parse_ini_string($config);
+ if (!parse_ini_string($config)) {
+ echo $config;
+ throw new Exception('bad ini format');
+ }
+ }
+ catch (Exception $e) {
+ echo 'Caught exception: ', $e->getMessage(), "\n";
+ exit;
+ }
+
$f['title'] = isset($f['config']['title']) ? $f['config']['title'] : $fileInfo->getFilename() ;
$f['config']['date'] = isset($f['config']['date']) ? $f['config']['date'] : null;
$f['timestamp'] = $f['config']['date'] ? date('U', strtotime( $f['config']['date'])) : $fileInfo->getCTime();
$f['content'] = Markdown($content);
$f['comments_enabled'] = isset($f['config']['comments']) && $f['config']['comments'];
- $f['comments'] = new Comments($fileInfo);
+ $f['comments'] = new Comments($fileInfo);
if ($passed_more)
$f['content_short'] = Markdown($content_short);
$f['cat'] = $page ? null : array('name' => $clean_path, 'url' => $clean_path );
$f['path'] = $fileInfo->getRealPath();
- $f['url'] = ($page ? '' : $f['cat']['url'] . '/') . $fileInfo->getFilename();
+ $f['url'] = ($page ? '' : $f['cat']['url'] . '/' ) . $fileInfo->getFilename();
if (!CLEAN_URLS) {
$f['cat']['url'] = WEB_ROOT . '?p=' . $f['cat']['url'];
# include path
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . dirname(realpath(__FILE__)));
-
-
-
-
-
# settings
-define ('CLEAN_URLS', true);
-define ('LIMIT', 15);
-define ('SITE_TITLE', 'quilime');
-define ('LOCAL_ROOT', '/home/quilime/quilime.com/');
-define ('WEB_ROOT', '/');
-define ('CONTENT_DIR', 'content/');
-define ('COMMENTS_DIR', 'comments/');
-define ('TEMPLATE_DIR', 'templates/');
-define ('PAGE_DIR', 'pages/');
-define ('CONFIG_DELIMITER', '--');
-define ('CONFIG_FILE', 'config');
-define ('MORE_DELIM', '<!--more-->');
-define ('TITLE_DELIMITER', ' — ');
-define ('ENTRY_DATE_FORMAT', 'M d Y, h:i:s A T');
-
-$_FILE_IGNORES = array(CONFIG_FILE, '.DS_Store');
+define ('LOCAL_ROOT', '/home/quilime/quilime.com/');
+define ('WEB_ROOT', '/');
+
+
+
+/*
+
+Array
+(
+ [site_title] => quilime
+ [clean_urls] => 1
+ [limit] => 15
+ [date_format] => M d Y, h:i:s A T
+ [web_root] => /
+ [content] => content/
+ [comments] => comments/
+ [template] => templates/
+ [pages] => pages/
+ [config_file] => config
+ [config_delim] => --
+ [more_delim] =>
+ [title_delim] => —
+ [file_ignores] => Array
+ (
+ [0] => config
+ [1] => .DS_Store
+ )
+)
+*/
+$_cfg = parse_ini_file('lib/config.ini');
+define ('CLEAN_URLS', $_cfg['clean_urls']);
+define ('LIMIT', $_cfg['limit']);
+define ('SITE_TITLE', $_cfg['site_title']);
+define ('CONTENT_DIR', $_cfg['content']);
+define ('COMMENTS_DIR', $_cfg['comments']);
+define ('TEMPLATE_DIR', $_cfg['templates']);
+define ('PAGE_DIR', $_cfg['pages']);
+define ('CONFIG_DELIMITER', $_cfg['config_delim']);
+define ('CONFIG_FILE', $_cfg['config_file']);
+define ('MORE_DELIM', $_cfg['more_delim']);
+define ('TITLE_DELIMITER', $_cfg['title_delim']);
+define ('ENTRY_DATE_FORMAT', $_cfg['date_format']);
+$_FILE_IGNORES = $_cfg['file_ignores'];
+
# check if config file exists in dir
if ($this->has_config()) {
$this->config = parse_config( $this->content_request );
- if (isset($this->config['config']['template']))
+ if (isset($this->config['config']['template'])) {
$this->template = $this->config['config']['template'] . '.' . $this->response_format . '.tpl' ;
+ }
}
$this->entries = get_entries( $this->content_request );
$this->page_title = preg_replace('{^/|/$}', '', $this->request['path']);
* template object (view)
*/
class View
-{
+{
var $template_dir = 'templates';
// var $template_cache_dir = 'cache';
var $default_template = 'default';
function __construct()
{
$this->template_dir = join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', TEMPLATE_DIR));
- $this->template_cache_dir = join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', TEMPLATE_DIR, 'cache'));
+ $this->template_cache_dir = join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', TEMPLATE_DIR, 'cache'));
}
-
-
+
+
function assign($tpl_var, $value = null)
{
if (is_array($tpl_var)) {
$this->_tpl_vars = array_merge($this->_tpl_vars, $vars);
$this->render( $template );
}
-
- public function render( $template )
+
+ public function render( $template, $response_format = 'html' )
{
extract( $this->_tpl_vars );
if (!is_file($this->template_dir . DIRECTORY_SEPARATOR . $template))
- $template = $default_template . '.' . $response_format . '.tpl';
+ $template = $this->default_template . '.' . $response_format . '.tpl';
include( $this->template_dir . DIRECTORY_SEPARATOR . $template );
}
-
-
+
+
public function page_title($delim)
{
return isset($this->_tpl_vars['page_title']) ? $delim . $this->_tpl_vars['page_title'] : "";
#about
-quilime.com is a place for my experiments, process. My web portfolio.
+quilime is an archive of my experiments and process
this site is built with <a href="http://git.quilime.com/?p=plog.git;a=summary">plog</a>, a static-file `p`roject`log` engine written in PHP.
-
-<br />
<!--add <a href="http://quilime.com/.rss" class="rss">.rss</a>-->
-## contact
-gabriel dunne
-[www](http://gabrieldunne.com), [email](mailto:gdunne@quilime.com)
+@ 1999—2012 gabriel dunne
+[www](http://gabrieldunne.com), [email](mailto:gdunne@quilime.com)
<br />
-## related
-[aggregate](http://media.quilime.com/aggregate/) images
-[clmpr](http://clmpr.com/quilime/) links
+## also
+[aggregate](http://media.quilime.com/aggregate/)
+[clmpr](http://clmpr.com/quilime/)
<br />
## elsewhere
-[twitter (@quilime)](http://twitter.com/quilime/)
+[@quilime](http://twitter.com/quilime/)
[vimeo](http://vimeo.com/quilime/)
[github](http://github.com/quilime/)
[flickr](http://flickr.com/photos/quilime/)
+
+<br />
+
+## feeds
+[rss](http://quilime.com/.rss)
+[feedburner](http://feeds.feedburner.com/quilime)
<? echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<rss version="2.0">
-
+
<channel>
-
+
<atom:link rel="hub" href="<?=WEB_ROOT?>" xmlns:atom="http://www.w3.org/2005/Atom"/>
<title><?=SITE_TITLE?></title>
<description><?=htmlentities($entry['content']);?></description>
<link>http://<?=get_domain_name() . '/' . $entry['url']?></link>
<guid>http://<?=get_domain_name() . '/' . $entry['url']?></guid>
- <pubDate><?=date('r', $entry['timestamp'])?></pubDate>
+ <pubDate><?=date('r', $entry['timestamp'])?></pubDate>
</item>
- <? endforeach; ?>
+ <? endforeach; ?>
</channel>
-
-</rss>
+
+</rss>
\ No newline at end of file
</script>
======= -->
*/ ?>
-<link rel="alternate" type="application/rss+xml" title="RSS" href="<?=get_base_dir();?>/.rss" />
+<link rel="alternate" type="application/rss+xml" title="official quilime RSS Feed" href="<?=get_base_dir();?>/.rss" />
<link rel="stylesheet" href="<?=get_base_dir();?>/css/style.css" type="text/css">
<link rel="stylesheet" href="<?=get_base_dir();?>/css/comments.css" type="text/css">
<html>
<head>
-
+
<? $this->include_template('head-inc.html.tpl') ?>
-
+
<title><?=SITE_TITLE?><?=$this->page_title(TITLE_DELIMITER);?></title>
-
+
</head>
<body>
-
+
<div id="content">
<table cellspacing="0" cellpadding="0">
<ul class="projects">
<? $c = 0; ?>
<? foreach(get_entries('projects/') as $entry): $c++; ?>
- <li class="project">
+ <li class="project" title="<?=$entry['title']?>">
<a href="<?=$entry['url']?>">
<div class="thumb">
<? if (isset($entry['config']['thumb'])): ?>
ctx.moveTo(10, 10);
ctx.lineTo(90, 90);
ctx.moveTo(90, 10);
- ctx.lineTo(10, 90);
+ ctx.lineTo(10, 90);
ctx.closePath();
ctx.stroke();
ctx.fill();
</script>
<? endif; ?>
- </div>
- <?=$entry['title']?></a>
+ </div> </a>
</li>
- <? endforeach; ?>
+ <? endforeach; ?>
+ <a href="http://portfolio.quilime.com/">more...</a>
</ul>
- </td>
+ </td>
<td style="padding-right:100px;" valign="top">
<h1><a href="/log/">log</a></h1>
<ul class="archive">
<? $c=15; foreach(get_entries('log/') as $entry): if ($c--==0) break; ?>
<li>
- <a href="<?=$entry['url']?>" title="<?=date("m d Y", $entry['timestamp'])?>"><?=$entry['title']?></a>
+ <a href="<?=$entry['url']?>" title="<?=date("m d Y", $entry['timestamp'])?>"><?=date("Y m d ", $entry['timestamp'])?><?=$entry['title']?></a>
</li>
- <? endforeach; ?>
- </ul>
+ <? endforeach; ?>
+ </ul>
</td>
-
+
<td style="padding-right:100px;" valign="top">
<h1><a class="more" href="/code/">code</a></h1>
<ul class="archive">
<li>
<a href="<?=$entry['url']?>" title="<?=date("m d Y", $entry['timestamp'])?>"><?=$entry['title']?></a>
</li>
- <? endforeach; ?>
+ <? endforeach; ?>
</ul>
</td>
</tr>
- </table>
+ </table>
</body>
</html>
-
+
<ul id="nav">
<li><a href="/">home</a></li>
- <li><a href="/index">index</a></li>
<br />
<br />
<li><a href="/about">about</a></li>
-
+ <li><a href="/.rss">feed</a></li>
<br />
<br />