First commit.
|
@ -0,0 +1,9 @@
|
||||||
|
*~
|
||||||
|
*#*#
|
||||||
|
*.#*
|
||||||
|
/.old/
|
||||||
|
/.local/
|
||||||
|
/heavy/
|
||||||
|
/nohi/
|
||||||
|
subsites/roptoligs
|
||||||
|
subsites/suum
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://films.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://hvy.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://nohix.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://old.projects.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://pictures.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://projects.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://roptoligs.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
$addr = $_SERVER['REQUEST_URI'];
|
||||||
|
header('Location: http://suum.metanohi.name$addr');
|
||||||
|
?>
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ln -s ../../nohix .
|
||||||
|
ln -s ../../roptoligs .
|
||||||
|
ln -s ../../suum .
|
|
@ -0,0 +1,36 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
|
||||||
|
ServerName films.lcl
|
||||||
|
ServerAlias films.lcl
|
||||||
|
ServerAdmin ns@metanohi.org
|
||||||
|
|
||||||
|
DocumentRoot /home/niels/www/meta/subsites/films
|
||||||
|
|
||||||
|
Alias /robots.txt /home/niels/www/meta/subsites/films/robots.txt
|
||||||
|
Alias /favicon.ico /home/niels/www/meta/subsites/films/favicon.ico
|
||||||
|
Alias /favicon.png /home/niels/www/meta/subsites/films/favicon.png
|
||||||
|
Alias /static /home/niels/www/meta/subsites/films/static
|
||||||
|
Alias /previews /home/niels/www/meta/subsites/films/previews
|
||||||
|
Alias /films /home/niels/www/meta/heavy/films
|
||||||
|
Alias /films.wsgi /home/niels/www/meta/subsites/films/films.wsgi
|
||||||
|
Alias /apache-config-template /home/niels/www/meta/subsites/films/apache-config-template
|
||||||
|
|
||||||
|
<Directory /home/niels/www/meta/subsites/films>
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
WSGIDaemonProcess films.lcl processes=2 threads=15 display-name=%{GROUP}
|
||||||
|
WSGIProcessGroup films.lcl
|
||||||
|
|
||||||
|
WSGIScriptAlias / /home/niels/www/meta/subsites/films/films.wsgi
|
||||||
|
|
||||||
|
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||||
|
<Directory "/usr/lib/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
</VirtualHost>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<p>
|
||||||
|
This is nohifilms, Niels Serup's index of his short films. The earliest films
|
||||||
|
involved often revolve around
|
||||||
|
the <a href='http://en.wikipedia.org/wiki/Stopmotion'>stopmotion
|
||||||
|
technique</a>, while others don't.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href='http://playogg.org/'>
|
||||||
|
<img src='/static/playogg.png' alt='Play OGG' />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
nohifilms runs on a simple AGPLv3-licensed WSGI script which can downloaded
|
||||||
|
<a href='/films.wsgi'>here</a> using an Apache config file similar
|
||||||
|
to <a href='/apache-config-template'>this one</a>.
|
||||||
|
</p>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
|
||||||
|
ServerName films.example.org
|
||||||
|
ServerAlias films.example.org
|
||||||
|
ServerAdmin webmaster@example.org
|
||||||
|
|
||||||
|
DocumentRoot /path/to/dir/of/films
|
||||||
|
|
||||||
|
Alias /robots.txt /path/to/dir/of/films/robots.txt
|
||||||
|
Alias /favicon.ico /path/to/dir/of/films/favicon.ico
|
||||||
|
Alias /favicon.png /path/to/dir/of/films/favicon.png
|
||||||
|
Alias /static /path/to/dir/of/films/static
|
||||||
|
Alias /previews /path/to/dir/of/films/previews
|
||||||
|
Alias /films /path/to/dir/of/videos
|
||||||
|
Alias /films.wsgi /path/to/dir/of/films/films.wsgi
|
||||||
|
Alias /apache-config-template /path/to/dir/of/films/apache-config-template
|
||||||
|
|
||||||
|
<Directory /path/to/dir/of/films>
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
WSGIDaemonProcess films.example.org processes=2 threads=15 display-name=%{GROUP}
|
||||||
|
WSGIProcessGroup films.example.org
|
||||||
|
|
||||||
|
WSGIScriptAlias / /path/to/dir/of/films/films.wsgi
|
||||||
|
|
||||||
|
</VirtualHost>
|
|
@ -0,0 +1,175 @@
|
||||||
|
super-surveillance
|
||||||
|
SUPER SURVEILLANCE
|
||||||
|
2011
|
||||||
|
true
|
||||||
|
ab
|
||||||
|
true
|
||||||
|
|
||||||
|
Yes, it is true. Truedom.
|
||||||
|
|
||||||
|
|
||||||
|
creative-process
|
||||||
|
The Creative Process of an Artist
|
||||||
|
2010
|
||||||
|
false
|
||||||
|
ab
|
||||||
|
false
|
||||||
|
|
||||||
|
I was bored.
|
||||||
|
|
||||||
|
|
||||||
|
paranoia
|
||||||
|
Paranoia
|
||||||
|
2010
|
||||||
|
true
|
||||||
|
ab
|
||||||
|
false
|
||||||
|
|
||||||
|
Do <em>you</em> have paranoia?
|
||||||
|
|
||||||
|
|
||||||
|
box
|
||||||
|
Box
|
||||||
|
2010
|
||||||
|
true
|
||||||
|
ab
|
||||||
|
false
|
||||||
|
|
||||||
|
A box and a human.
|
||||||
|
|
||||||
|
|
||||||
|
cola
|
||||||
|
Cola
|
||||||
|
2008
|
||||||
|
true
|
||||||
|
bcd
|
||||||
|
false
|
||||||
|
|
||||||
|
The Coca Cola Company has created a monster: a can that moves by itself! Too
|
||||||
|
much caffeine, perhaps?
|
||||||
|
|
||||||
|
|
||||||
|
robo
|
||||||
|
Robo
|
||||||
|
2009
|
||||||
|
true
|
||||||
|
bcd
|
||||||
|
false
|
||||||
|
|
||||||
|
In the future, scientists will have to construct robots out of crap. For now,
|
||||||
|
simple boxes will do.<br /><br />Music credit goes to user RedChili at <a
|
||||||
|
href="http://jamendo.com/en/user/redchili">http://jamendo.com/en/user/redchili</a>. His
|
||||||
|
track is called "Sen Mandaryna" and is released under CC-BY-NC-SA 3.0, which is
|
||||||
|
why I have to license this works as a whole under the same license, thus
|
||||||
|
releasing this film under the <b>Creative Commons
|
||||||
|
Attribution-Noncommercial-ShareAlike 3.0</b>. Note that this film is available
|
||||||
|
under CC-BY-SA as well, just without the background music. So if you want to
|
||||||
|
use this for commercial purposes, use another soundtrack.
|
||||||
|
|
||||||
|
|
||||||
|
dice
|
||||||
|
Dice
|
||||||
|
2010
|
||||||
|
false
|
||||||
|
bcd
|
||||||
|
false
|
||||||
|
|
||||||
|
A die meets a die. No sound.
|
||||||
|
|
||||||
|
|
||||||
|
compufight
|
||||||
|
Compufight
|
||||||
|
2009
|
||||||
|
false
|
||||||
|
bcde
|
||||||
|
false
|
||||||
|
|
||||||
|
The kung fu of computing.
|
||||||
|
|
||||||
|
|
||||||
|
mobility
|
||||||
|
Mobility
|
||||||
|
2008
|
||||||
|
true
|
||||||
|
bcde
|
||||||
|
false
|
||||||
|
|
||||||
|
Is it a bird? Is it an airplane? No, it's a MOBILE PHONE!
|
||||||
|
|
||||||
|
|
||||||
|
legoshow
|
||||||
|
Lego SHOW
|
||||||
|
2006
|
||||||
|
false
|
||||||
|
none
|
||||||
|
false
|
||||||
|
|
||||||
|
Showoff.
|
||||||
|
|
||||||
|
|
||||||
|
easteregg
|
||||||
|
Beware of the Easter Egg
|
||||||
|
2007
|
||||||
|
false
|
||||||
|
none
|
||||||
|
false
|
||||||
|
|
||||||
|
It's dangerous, I tell you. Beware of other traditions, too.<br /><br />Music
|
||||||
|
credit goes to freesound contributor Richard Frohlich at <a
|
||||||
|
href="http://freesound.org/">freesound.org</a>. His piano track is released
|
||||||
|
under <a href="http://creativecommons.org/licenses/sampling+/1.0/">CC Sampling
|
||||||
|
Plus 1.0.</a>. When I originally applied this track to my film, I didn't
|
||||||
|
realize that its license was somewhat non-free and not compatible with
|
||||||
|
CC-BY-SA. So to get this film under CC-BY-SA, you'll have to take it without
|
||||||
|
sound.
|
||||||
|
|
||||||
|
|
||||||
|
compumotion
|
||||||
|
Compumotion
|
||||||
|
2008
|
||||||
|
false
|
||||||
|
bcd
|
||||||
|
false
|
||||||
|
|
||||||
|
Or maybe "Lapstop"?
|
||||||
|
|
||||||
|
|
||||||
|
crazychristmas
|
||||||
|
Crazy Christmas
|
||||||
|
2007
|
||||||
|
false
|
||||||
|
bcd
|
||||||
|
false
|
||||||
|
|
||||||
|
Celebrating Christmas also means celebrating the day these unfortunate lego
|
||||||
|
accesories went berserk.
|
||||||
|
|
||||||
|
|
||||||
|
testdraw
|
||||||
|
Test draw
|
||||||
|
2008
|
||||||
|
true
|
||||||
|
b
|
||||||
|
false
|
||||||
|
|
||||||
|
Just testing.
|
||||||
|
|
||||||
|
|
||||||
|
legoparty
|
||||||
|
Lego Party
|
||||||
|
2006
|
||||||
|
false
|
||||||
|
bc
|
||||||
|
false
|
||||||
|
|
||||||
|
They seem to be slightly.. drunk?
|
||||||
|
|
||||||
|
|
||||||
|
saltvspepper
|
||||||
|
Salt vs. pepper
|
||||||
|
2008
|
||||||
|
false
|
||||||
|
bcd
|
||||||
|
false
|
||||||
|
|
||||||
|
Who will win this battle of destiny?
|
|
@ -0,0 +1,3 @@
|
||||||
|
[films]
|
||||||
|
previews_dir = /previews
|
||||||
|
videos_dir = /films
|
|
@ -0,0 +1,185 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# films.wsgi: a WSGI script for showing films
|
||||||
|
# Copyright (C) 2011 Niels Serup
|
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public
|
||||||
|
# License along with this program. If not, see
|
||||||
|
# <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## Version:...... 0.1.0
|
||||||
|
## Maintainer:... Niels Serup <ns@metanohi.org>
|
||||||
|
## Website:...... http://films.metanohi.name/about/
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import bottle
|
||||||
|
from bottle import route, abort, error, request, redirect
|
||||||
|
import configparser
|
||||||
|
import locale
|
||||||
|
_preferred_encoding = 'utf-8' #locale.getpreferredencoding() # fail
|
||||||
|
|
||||||
|
_absfile = os.path.abspath(__file__)
|
||||||
|
_filedir = os.path.dirname(_absfile)
|
||||||
|
_configfile_name = 'films.config'
|
||||||
|
|
||||||
|
# Get settings
|
||||||
|
_settings = {'previews_dir': '/previews', 'videos_dir': '/videos'} # Defaults
|
||||||
|
|
||||||
|
_cfg = configparser.SafeConfigParser(_settings)
|
||||||
|
_cfg.add_section('films')
|
||||||
|
try:
|
||||||
|
_cfg.read(os.path.join(_filedir, _configfile_name))
|
||||||
|
except configparser.Error as e:
|
||||||
|
print('Python error: ' + repr(e), file=sys.stderr)
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
_settings = {name: value for name, value in _cfg.items('films')}
|
||||||
|
|
||||||
|
# Get templates
|
||||||
|
def _readfile(locpath):
|
||||||
|
with open(os.path.join(_filedir, locpath), 'rb') as f:
|
||||||
|
return f.read().decode(_preferred_encoding)
|
||||||
|
|
||||||
|
_template, _about, _frontpage = (_readfile(x + '.html') for x in
|
||||||
|
('template', 'about', 'frontpage'))
|
||||||
|
|
||||||
|
# Create more templates
|
||||||
|
_videosource = ''' <source src='{url}' type='{mime}' />\n'''
|
||||||
|
_videotemplate = '''
|
||||||
|
<video width='640' height='{height}' autoplay='autoplay'
|
||||||
|
controls='controls', style='width: 640px; height: {height}px;'>
|
||||||
|
{sources}
|
||||||
|
<applet code='com.fluendo.player.Cortado.class'
|
||||||
|
archive='http://theora.org/cortado.jar'
|
||||||
|
width='640' height='{height}'>
|
||||||
|
<param name='url' value='{url}' />
|
||||||
|
</applet>
|
||||||
|
</video>
|
||||||
|
|
||||||
|
<div id='description' style='height: {height}px'>
|
||||||
|
<p>{description}</p>
|
||||||
|
<p><span>Year:</span> {year}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id='dl'>
|
||||||
|
<p><span>Download:</span> {downloads}</p>
|
||||||
|
</div>
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Extract info
|
||||||
|
def _parse_filminfo(locpath):
|
||||||
|
with open(os.path.join(_filedir, locpath), 'U') as f:
|
||||||
|
sfilms = (line.split('\n', 7) for line in f.read().split('\n' * 3))
|
||||||
|
films, films_html = [], {}
|
||||||
|
i = 1
|
||||||
|
for x in sfilms:
|
||||||
|
kwds = {
|
||||||
|
'name': x[0],
|
||||||
|
'title': x[1],
|
||||||
|
'year': int(x[2]),
|
||||||
|
'16:9': x[3] == 'true',
|
||||||
|
'sizes': x[4],
|
||||||
|
'webm': x[5] == 'true',
|
||||||
|
'description': x[7]
|
||||||
|
}
|
||||||
|
|
||||||
|
if kwds['16:9']:
|
||||||
|
kwds['height'] = 360
|
||||||
|
sizes = (
|
||||||
|
'640x360',
|
||||||
|
'1024x576',
|
||||||
|
'1280x720',
|
||||||
|
'1920x1080'
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
kwds['height'] = 480
|
||||||
|
sizes = (
|
||||||
|
'640x480',
|
||||||
|
'768x576',
|
||||||
|
'960x720',
|
||||||
|
'1440x1080'
|
||||||
|
)
|
||||||
|
kwds['downloads'] = ''
|
||||||
|
linknames = {
|
||||||
|
'': (sizes[0], '640w'),
|
||||||
|
'b': (sizes[1], '576p'),
|
||||||
|
'c': (sizes[2], '720p'),
|
||||||
|
'd': (sizes[3], '1080p'),
|
||||||
|
'e': ('Behind', 'behind')
|
||||||
|
}
|
||||||
|
for x in filter(lambda x: x in kwds['sizes'], linknames.keys()):
|
||||||
|
linkname, sid = linknames[x]
|
||||||
|
if kwds['webm']:
|
||||||
|
kwds['downloads'] += "<a href='{dir}/{name}-{sid}.webm'>{linkname} WebM</a>".format(
|
||||||
|
dir=_settings['videos_dir'], sid=sid, name=kwds['name'], linkname=linkname)
|
||||||
|
kwds['downloads'] += "<a href='{dir}/{name}-{sid}.ogv'>{linkname} Theora</a>".format(
|
||||||
|
dir=_settings['videos_dir'], sid=sid, name=kwds['name'], linkname=linkname)
|
||||||
|
|
||||||
|
addr = _settings['videos_dir']
|
||||||
|
srcs = ''
|
||||||
|
kwds['url'] = '{}/{}-{}.ogv'.format(
|
||||||
|
addr, kwds['name'], linknames[''][1])
|
||||||
|
if kwds['webm']:
|
||||||
|
srcs += _videosource.format(url='{}/{}-{}.webm'.format(
|
||||||
|
addr, kwds['name'], linknames[''][1]), mime='video/webm')
|
||||||
|
srcs += _videosource.format(url=kwds['url'], mime='video/ogg')
|
||||||
|
kwds['sources'] = srcs
|
||||||
|
kwds['content'] = _videotemplate.format(**kwds)
|
||||||
|
kwds['leftclass'] = " class='left'" if i % 2 else ''
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
films.append(kwds)
|
||||||
|
films_html[kwds['name']] = _template.format(**kwds)
|
||||||
|
return films, films_html
|
||||||
|
|
||||||
|
_films, _films_html = _parse_filminfo('filminfo')
|
||||||
|
_settings['numberoffilms'] = len(_films)
|
||||||
|
|
||||||
|
# Improve templates
|
||||||
|
_frontpage_boxlink = '''
|
||||||
|
<a href='/{{name}}' style='background-image: url({previews_dir}/{{name}}.jpg);'{{leftclass}}>
|
||||||
|
<span>{{title}}</span>
|
||||||
|
</a>
|
||||||
|
'''.format(**_settings)
|
||||||
|
|
||||||
|
_settings['filmboxes'] = ''.join(_frontpage_boxlink.format(**kwds)
|
||||||
|
for kwds in _films)
|
||||||
|
|
||||||
|
_frontpage = _frontpage.format(**_settings)
|
||||||
|
|
||||||
|
_settings['content'], _settings['title'] = _frontpage, 'Start'
|
||||||
|
_frontpage = _template.format(**_settings)
|
||||||
|
_settings['content'], _settings['title'] = _about, 'About'
|
||||||
|
_about = _template.format(**_settings)
|
||||||
|
del _settings['content']
|
||||||
|
del _settings['title']
|
||||||
|
|
||||||
|
@route('/')
|
||||||
|
def frontpage():
|
||||||
|
if request.query_string:
|
||||||
|
# compatibility reasons, can be removed
|
||||||
|
redirect('/' + request.query_string)
|
||||||
|
return _frontpage
|
||||||
|
|
||||||
|
@route('/about')
|
||||||
|
@route('/!about') # compatibility reasons, can be removed
|
||||||
|
def about():
|
||||||
|
return _about
|
||||||
|
|
||||||
|
@route('/:name')
|
||||||
|
def film(name):
|
||||||
|
return _films_html[name]
|
||||||
|
|
||||||
|
application = bottle.default_app()
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<p>
|
||||||
|
This is my personal film index. Below is a list of the {numberoffilms} films
|
||||||
|
that I have so far produced. The films are both downloadable and directly
|
||||||
|
viewable in any fairly modern web browser. I'm releasing all of my films
|
||||||
|
under the <a href='http://creativecommons.org/licenses/by-sa/3.0/'>Creative
|
||||||
|
Commons Attribution-ShareAlike 3.0 license</a>, which permits everyone to
|
||||||
|
remix and share my videos as long as they attribute me and do not restrict
|
||||||
|
other remixers and sharers from altering and sharing new versions.
|
||||||
|
</p>
|
||||||
|
<p><a href='/about'>Read more.</a></p>
|
||||||
|
|
||||||
|
<div id='films'>
|
||||||
|
{filmboxes}
|
||||||
|
<div class='end'></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>That is all.</p>
|
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 237 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 36 KiB |
|
@ -0,0 +1,2 @@
|
||||||
|
User-agent: *
|
||||||
|
Disallow: /static
|
After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,111 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="300"
|
||||||
|
height="75"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.46"
|
||||||
|
version="1.0"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4627">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#b9b9b9;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4629" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#b13a3a;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4631" />
|
||||||
|
</linearGradient>
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
|
id="perspective10" />
|
||||||
|
<filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter3179"
|
||||||
|
x="-0.02068712"
|
||||||
|
width="1.0413742"
|
||||||
|
y="-0.1385752"
|
||||||
|
height="1.2771504">
|
||||||
|
<feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="2.3188809"
|
||||||
|
id="feGaussianBlur3181" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4627"
|
||||||
|
id="linearGradient4635"
|
||||||
|
x1="177.11351"
|
||||||
|
y1="196.21216"
|
||||||
|
x2="447.64648"
|
||||||
|
y2="196.21216"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-164.26057,-161.22003)" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
gridtolerance="10000"
|
||||||
|
guidetolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.9466667"
|
||||||
|
inkscape:cx="150"
|
||||||
|
inkscape:cy="37.5"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1280"
|
||||||
|
inkscape:window-height="938"
|
||||||
|
inkscape:window-x="-4"
|
||||||
|
inkscape:window-y="-4" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:73.6212616px;font-style:normal;font-weight:bold;line-height:125%;fill:url(#linearGradient4635);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3179);font-family:Bitstream Vera Sans;-inkscape-font-specification:DejaVu Sans Mono Bold"
|
||||||
|
x="8.5248137"
|
||||||
|
y="55.575882"
|
||||||
|
id="text2383"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2385"
|
||||||
|
x="8.5248137"
|
||||||
|
y="55.575882"
|
||||||
|
style="font-size:51.53488159px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4635);fill-opacity:1;fill-rule:nonzero;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono Bold">nohifilms</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 5.9 KiB |
|
@ -0,0 +1,135 @@
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #555;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: 'Dejavu Sans', 'Nimbus Sans', Helvetica, Arial, Verdana, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end {
|
||||||
|
clear: both;
|
||||||
|
float: none;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
width: 900px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
font-size: 30px;
|
||||||
|
height: 20px;
|
||||||
|
background: #000 url(logo.png) right top no-repeat;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
padding: 23px 6px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header a {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 198px;
|
||||||
|
height: 66px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
background: #222;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MAIN PAGE SPECIFIC */
|
||||||
|
#films {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#films a {
|
||||||
|
width: 435px;
|
||||||
|
height: 300px;
|
||||||
|
float: left;
|
||||||
|
background-color: #666;
|
||||||
|
background-position: center center;
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#films a.left {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#films a span {
|
||||||
|
width: 425px;
|
||||||
|
padding: 3px 5px;
|
||||||
|
background: rgba(0, 0, 0, .5);
|
||||||
|
font-size: 25px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#films a:hover div {
|
||||||
|
height: 294px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#film {
|
||||||
|
width: 640px;
|
||||||
|
background: #999;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#description {
|
||||||
|
padding: 5px;
|
||||||
|
width: 220px;
|
||||||
|
overflow: auto;
|
||||||
|
float: right;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dl {
|
||||||
|
clear: both;
|
||||||
|
padding: 3px;
|
||||||
|
background: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dl a {
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer {
|
||||||
|
margin-top: 6px;
|
||||||
|
background: #000;
|
||||||
|
padding: 3px;
|
||||||
|
font-size: 11px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
font-family: Inconsolata, 'Dejavu Sans Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link, a:visited {
|
||||||
|
color: #00aaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #00eeff;
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN'
|
||||||
|
'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>
|
||||||
|
<html version='-//W3C//DTD XHTML 1.1//EN'
|
||||||
|
xmlns='http://www.w3.org/1999/xhtml'
|
||||||
|
xml:lang='en'
|
||||||
|
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
||||||
|
xsi:schemaLocation='http://www.w3.org/1999/xhtml
|
||||||
|
http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd'>
|
||||||
|
<head>
|
||||||
|
<title>nohifilms :: {title}</title>
|
||||||
|
<meta name='author' content='Niels Serup' />
|
||||||
|
<meta name='description'
|
||||||
|
content='This site contains films by Niels Serup.' />
|
||||||
|
<meta name='keywords'
|
||||||
|
content='films' />
|
||||||
|
<link rel='stylesheet' type='text/css'
|
||||||
|
href='/static/screen.css' />
|
||||||
|
<link rel='schema.DCTERMS' href='http://purl.org/dc/terms/' />
|
||||||
|
<meta name='DCTERMS.title' content='nohifilms :: {title}' />
|
||||||
|
<meta name='DCTERMS.creator' content='Niels Serup' />
|
||||||
|
<meta name='DCTERMS.language' content='en' />
|
||||||
|
<meta name='DCTERMS.isPartOf' content='http://films.metanohi.name/' />
|
||||||
|
<link rel='copyright' href='http://creativecommons.org/licenses/by-sa/3.0/' />
|
||||||
|
<meta name='DCTERMS.license' content='http://creativecommons.org/licenses/by-sa/3.0/' />
|
||||||
|
<meta name='robots' content='ALL' />
|
||||||
|
<link rel='icon' type='image/png' href='/favicon.png' />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id='wrapper'>
|
||||||
|
|
||||||
|
<div id='header'>
|
||||||
|
<a href='/'></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id='content'>
|
||||||
|
{content}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id='footer'>
|
||||||
|
Videos and text are released under
|
||||||
|
the <a href='http://creativecommons.org/licenses/by-sa/3.0/'>Creative
|
||||||
|
Commons Attribution-ShareAlike 3.0 Unported license</a>. Copyleft ©
|
||||||
|
2006, 2007, 2008, 2009, 2010,
|
||||||
|
2011 <a href='http://metanohi.name/about/niels'>Niels Serup</a>.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName hvy.lcl
|
||||||
|
ServerAlias hvy.lcl
|
||||||
|
ServerAdmin ns@metanohi.org
|
||||||
|
|
||||||
|
DocumentRoot /home/niels/www/meta/heavy
|
||||||
|
<Directory />
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/niels/www/meta/heavy/>
|
||||||
|
Options Indexes Includes FollowSymLinks MultiViews
|
||||||
|
AllowOverride All
|
||||||
|
Order allow,deny
|
||||||
|
allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||||
|
<Directory "/usr/lib/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||||
|
|
||||||
|
# Possible values include: debug, info, notice, warn, error, crit,
|
||||||
|
# alert, emerg.
|
||||||
|
LogLevel warn
|
||||||
|
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||||
|
|
||||||
|
Alias /doc/ "/usr/share/doc/"
|
||||||
|
<Directory "/usr/share/doc/">
|
||||||
|
Options Indexes MultiViews FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.0/255.0.0.0 ::1/128
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
</VirtualHost>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName nohix.lcl
|
||||||
|
ServerAlias nohix.lcl
|
||||||
|
ServerAdmin ns@metanohi.org
|
||||||
|
|
||||||
|
DocumentRoot /home/niels/www/meta/subsites/nohix
|
||||||
|
<Directory />
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/niels/www/meta/subsites/nohix/>
|
||||||
|
Options Indexes Includes FollowSymLinks MultiViews
|
||||||
|
AllowOverride All
|
||||||
|
Order allow,deny
|
||||||
|
allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||||
|
<Directory "/usr/lib/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||||
|
|
||||||
|
# Possible values include: debug, info, notice, warn, error, crit,
|
||||||
|
# alert, emerg.
|
||||||
|
LogLevel warn
|
||||||
|
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||||
|
|
||||||
|
Alias /doc/ "/usr/share/doc/"
|
||||||
|
<Directory "/usr/share/doc/">
|
||||||
|
Options Indexes MultiViews FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.0/255.0.0.0 ::1/128
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
</VirtualHost>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Graphics {Canvas 2D with 3D (nothing yet, really)}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('data/genericstyle.css');
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="canvas2dw3d.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function() {
|
||||||
|
points = [
|
||||||
|
[-50, -50, -50],
|
||||||
|
[-50, -50, 50],
|
||||||
|
[50, -50, -50],
|
||||||
|
[50, -50, 50]
|
||||||
|
];
|
||||||
|
can3d = new Canvas2Dw3D(points, 640, 360);
|
||||||
|
|
||||||
|
canwrap = document.getElementById("canvasWrapper");
|
||||||
|
canwrap.appendCanvas2Dw3DChild(can3d);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="canvasWrapper"></div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
Canvas2Dw3D = function(object, width, height) {
|
||||||
|
this.object = object;
|
||||||
|
this.numberOfPoints = this.object.length;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.origo2D = [this.width / 2, this.height / 2];
|
||||||
|
|
||||||
|
this.element = document.createElement("canvas");
|
||||||
|
this.element.width = this.width;
|
||||||
|
this.element.height = this.height;
|
||||||
|
this.context = this.element.getContext("2d");
|
||||||
|
this.context.strokeStyle = "rgb(0, 255, 0)";
|
||||||
|
|
||||||
|
this.parentElement = null;
|
||||||
|
|
||||||
|
this.drawObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas2Dw3D.prototype.drawObject = function() {
|
||||||
|
var c, p, q;
|
||||||
|
for (c in this.object) {
|
||||||
|
p = this.object[c];
|
||||||
|
q = this.object[(c+1)%this.numberOfPoints];
|
||||||
|
this.drawLine([p[0], p[1]], [q[0], q[1]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas2Dw3D.prototype.drawLine = function(xy1, xy2) {
|
||||||
|
with (this.context) {
|
||||||
|
beginPath();
|
||||||
|
moveTo(-xy1[0]+this.origo2D[0], -xy1[1]+this.origo2D[1]);
|
||||||
|
lineTo(-xy2[0]+this.origo2D[0], -xy2[1]+this.origo2D[1]);
|
||||||
|
stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Canvas2Dw3D.prototype.setParentElement = function(obj) {
|
||||||
|
obj.appendChild(this.element);
|
||||||
|
this.parentElement = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
HTMLElement.prototype.appendCanvas2Dw3DChild = function(obj) {
|
||||||
|
obj.setParentElement(this);
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #666;
|
||||||
|
color: #ccc;
|
||||||
|
margin: 10px 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
float: left;
|
||||||
|
margin: 10px 0 0 10px;
|
||||||
|
padding: 5px;
|
||||||
|
border: 5px solid #333;
|
||||||
|
background-color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.simple {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.simple > * {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.clear {
|
||||||
|
clear: both;
|
||||||
|
float: none;
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 1px 3px;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link {
|
||||||
|
background-color: #bbeaf8;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
background-color: #d6bbf8;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
background-color: #a2b8ec;
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
Unknowingly the best website in the universe
|
||||||
|
Not to be confused with 42
|
||||||
|
It equals π!
|
||||||
|
Never has a website had this much content.
|
||||||
|
Hello Dave.
|
||||||
|
I do not possess artificial intelligence.. Oops.
|
||||||
|
Breaking the digitial barriers of tomorrow
|
||||||
|
This sentence has no punchline.
|
||||||
|
Making technical restrictions go away
|
||||||
|
Making it possible to travel 4 au in -4 seconds
|
||||||
|
Redefining the purpose of redefining
|
||||||
|
Producing code snippets faster than it takes to not produce them
|
|
@ -0,0 +1,157 @@
|
||||||
|
<?php //~Public domain
|
||||||
|
/*
|
||||||
|
// DEFAULTS
|
||||||
|
$USE_CACHE = false;
|
||||||
|
$CREATE_CACHE = false;
|
||||||
|
|
||||||
|
// GO AWAY FROM DEFAULTS?
|
||||||
|
|
||||||
|
|
||||||
|
// WHAT TO DO WITH PROGRAM DIRECTIONS
|
||||||
|
if ($CREATE_CACHE)
|
||||||
|
ob_start();
|
||||||
|
*/
|
||||||
|
// FUNCTIONS
|
||||||
|
function get_html_tag_content($html_string, $tag) {
|
||||||
|
/* Finds the content of the first tag if present */
|
||||||
|
$tag_s = "<$tag>";
|
||||||
|
$tag_e = "</$tag>";
|
||||||
|
$tag_s_pos = strpos($html_string, $tag_s);
|
||||||
|
$tag_e_pos = strpos($html_string, $tag_e);
|
||||||
|
if ($tag_s_pos === false || $tag_e_pos == false || $tag_e_pos < $tag_s_pos)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
$start = $tag_s_pos + strlen($tag_s);
|
||||||
|
$end = $tag_e_pos;
|
||||||
|
$title = substr($html_string, $start, $end - $start);
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
|
|
||||||
|
// THE ACTUAL WEBSITE CODE
|
||||||
|
$pages = array();
|
||||||
|
$grouped_pages = array();
|
||||||
|
|
||||||
|
$scanned_dir = scandir('.');
|
||||||
|
foreach ($scanned_dir as $filename) {
|
||||||
|
if (
|
||||||
|
is_file($filename) &&
|
||||||
|
!in_array($filename, array("index.php", ".", "..")) &&
|
||||||
|
preg_match("/^[^\.]+\.(htm|html|xhtml|php|py)$/", $filename) == 1
|
||||||
|
) {
|
||||||
|
$content = file_get_contents($filename);
|
||||||
|
$title = get_html_tag_content($content, "title");
|
||||||
|
array_push($pages, array($title, $filename));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($pages as $page) {
|
||||||
|
$title = $page[0];
|
||||||
|
$filename = $page[1];
|
||||||
|
|
||||||
|
$group = "General";
|
||||||
|
|
||||||
|
if ($title == "") {
|
||||||
|
$group = "Untitled";
|
||||||
|
$title = $filename;
|
||||||
|
}
|
||||||
|
else if (preg_match("/^[^\{\}]+\{.+\}\s*$/", $title) == 1) {
|
||||||
|
$spl = explode("{", $title);
|
||||||
|
$group = $spl[0];
|
||||||
|
$title = $spl[1];
|
||||||
|
$group = trim($group);
|
||||||
|
$title = trim(substr($title, 0, strlen($title) - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!array_key_exists($group, $grouped_pages))
|
||||||
|
$grouped_pages[$group] = array();
|
||||||
|
array_push($grouped_pages[$group], array($title, $filename));
|
||||||
|
}
|
||||||
|
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<head>
|
||||||
|
<title>nohiX {L@B}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
body {
|
||||||
|
margin: 10px;
|
||||||
|
font-family: 'dejavu serif', serif;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: normal;
|
||||||
|
color #000;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
width: 465px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<img src="media/nohix-logo.png" alt="nohiX {L@B}" />
|
||||||
|
<h1>nohiX</h1>
|
||||||
|
<?php
|
||||||
|
$slogans = file("data/slogans");
|
||||||
|
$num = mt_rand(0, sizeof($slogans)-1);
|
||||||
|
$slogan = $slogans[$num];
|
||||||
|
echo "<p style='font-style: italic; margin-left: 20px;'>$slogan</p>\n";
|
||||||
|
?>
|
||||||
|
|
||||||
|
<h2>Experiments</h2>
|
||||||
|
<ul>
|
||||||
|
<?php
|
||||||
|
foreach ($grouped_pages as $group=>$pages) {
|
||||||
|
echo "
|
||||||
|
<li>
|
||||||
|
<h3>$group</h3>
|
||||||
|
<ul>";
|
||||||
|
foreach ($pages as $page) {
|
||||||
|
$title = $page[0];
|
||||||
|
$filename = $page[1];
|
||||||
|
echo "
|
||||||
|
<li>
|
||||||
|
<p><a href='$filename'>$title</a></p>
|
||||||
|
</li>";
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>About</h2>
|
||||||
|
<ul>
|
||||||
|
<li><p>This website is <a href="http://metanohi.org/aboutme/"><em>Niels</em></a>' playground.</p></li>
|
||||||
|
<li><p>It contains mainly JavaScript tests.</p></li>
|
||||||
|
<li><p><em>Niels</em> is not that fond of JavaScript, but he can't help but play with it. He thinks it's a disease.</p></li>
|
||||||
|
<li><p>The logo (<a href="media/nohix-logo.svg">also available in SVG<a/>) is licensed under the <a href="http://creativecommons.org/licenses/by-sa/3.0/">Attribution-Share Alike 3.0 Unported license</a>. Niels is the author.</p></li>
|
||||||
|
<li><p>The PHP source code is available <a href="http://metanohi.org/:nohix/index.php">here<a/>.</p></li>
|
||||||
|
<li><p>You might not also want to check out <a href="http://metanohi.org/projects/x/">this<a/>, which was the inspiration for nohiX.</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
</body>
|
||||||
|
</html><?php
|
||||||
|
/* if ($CREATE_CACHE) {
|
||||||
|
$content = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
file_put_contents(".cache", $content);
|
||||||
|
echo $content;
|
||||||
|
}*/
|
||||||
|
?>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Keycode detection</title>
|
||||||
|
<script type="text/javascript" src="key.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
window.onload = function() {
|
||||||
|
UP = 38
|
||||||
|
RIGHT = 39
|
||||||
|
DOWN = 40
|
||||||
|
LEFT = 37
|
||||||
|
document.onkeydown = keydown
|
||||||
|
document.onkeyup = keyup
|
||||||
|
keys = []
|
||||||
|
}
|
||||||
|
|
||||||
|
function getkeycode(e) {
|
||||||
|
var keycode
|
||||||
|
if (window.event) keycode = window.event.keyCode
|
||||||
|
else if (e) keycode = e.which
|
||||||
|
else keycode = 0
|
||||||
|
return keycode
|
||||||
|
}
|
||||||
|
|
||||||
|
function keydown(e) {
|
||||||
|
var keycode = getkeycode(e)
|
||||||
|
keys[keycode] = true
|
||||||
|
document.title = keycode
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyup(e) {
|
||||||
|
var keycode = getkeycode(e)
|
||||||
|
keys[keycode] = true
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
window.onload = function() {
|
||||||
|
key_up=false
|
||||||
|
key_right=false
|
||||||
|
key_down=false
|
||||||
|
key_left=false
|
||||||
|
key_shift=false
|
||||||
|
key_control=false
|
||||||
|
|
||||||
|
key_order=new Array()
|
||||||
|
for (var i=0;i<4;i++) {
|
||||||
|
key_order[i]=0
|
||||||
|
}
|
||||||
|
|
||||||
|
document.onkeydown=keydown
|
||||||
|
document.onkeyup=keyup
|
||||||
|
}
|
||||||
|
|
||||||
|
function getkeycode(e) {
|
||||||
|
var keycode
|
||||||
|
if (window.event) keycode=window.event.keyCode
|
||||||
|
else if (e) keycode=e.which
|
||||||
|
else keycode=0
|
||||||
|
return keycode
|
||||||
|
}
|
||||||
|
|
||||||
|
function keydown(e) {
|
||||||
|
var keycode=getkeycode(e)
|
||||||
|
|
||||||
|
if (keycode==38 && !key_up) {
|
||||||
|
key_up=true
|
||||||
|
key_order.splice(0,0,1)
|
||||||
|
key_order.splice(3,1)
|
||||||
|
}
|
||||||
|
else if (keycode==39 && !key_right) {
|
||||||
|
key_right=true
|
||||||
|
key_order.splice(0,0,2)
|
||||||
|
key_order.splice(3,1)
|
||||||
|
}
|
||||||
|
else if (keycode==40 && !key_down) {
|
||||||
|
key_down=true
|
||||||
|
key_order.splice(0,0,3)
|
||||||
|
key_order.splice(3,1)
|
||||||
|
}
|
||||||
|
else if (keycode==37 && !key_left) {
|
||||||
|
key_left=true
|
||||||
|
key_order.splice(0,0,4)
|
||||||
|
key_order.splice(3,1)
|
||||||
|
}
|
||||||
|
else if (keycode==16) key_shift=true
|
||||||
|
else if (keycode==17) key_control=true
|
||||||
|
|
||||||
|
if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction()
|
||||||
|
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyup(e) {
|
||||||
|
var keycode=getkeycode(e)
|
||||||
|
|
||||||
|
if (keycode==38 && key_up) {
|
||||||
|
key_up=false
|
||||||
|
for (var i=0;i<4;i++) {
|
||||||
|
if (key_order[i]==1) key_order.splice(i,1)
|
||||||
|
}
|
||||||
|
key_order.splice(3,0,0)
|
||||||
|
}
|
||||||
|
else if (keycode==39 && key_right) {
|
||||||
|
key_right=false
|
||||||
|
for (var i=0;i<4;i++) {
|
||||||
|
if (key_order[i]==2) key_order.splice(i,1)
|
||||||
|
}
|
||||||
|
key_order.splice(3,0,0)
|
||||||
|
}
|
||||||
|
else if (keycode==40 && key_down) {
|
||||||
|
key_down=false
|
||||||
|
for (var i=0;i<4;i++) {
|
||||||
|
if (key_order[i]==3) key_order.splice(i,1)
|
||||||
|
}
|
||||||
|
key_order.splice(3,0,0)
|
||||||
|
}
|
||||||
|
else if (keycode==37 && key_left) {
|
||||||
|
key_left=false
|
||||||
|
for (var i=0;i<4;i++) {
|
||||||
|
if (key_order[i]==4) key_order.splice(i,1)
|
||||||
|
}
|
||||||
|
key_order.splice(3,0,0)
|
||||||
|
}
|
||||||
|
else if (keycode==16) key_shift=false
|
||||||
|
else if (keycode==17) key_control=false
|
||||||
|
|
||||||
|
if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction()
|
||||||
|
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
|
||||||
|
}
|
|
@ -0,0 +1,165 @@
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
|
0. Additional Definitions.
|
||||||
|
|
||||||
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
"The Library" refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
|
An "Application" is any work that makes use of an interface provided
|
||||||
|
by the Library, but which is not otherwise based on the Library.
|
||||||
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the "Linked
|
||||||
|
Version".
|
||||||
|
|
||||||
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
2. Conveying Modified Versions.
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
a) under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
4. Combined Works.
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser General Public License from time to time. Such new
|
||||||
|
versions will be similar in spirit to the present version, but may
|
||||||
|
differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
After Width: | Height: | Size: 206 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 22 KiB |
|
@ -0,0 +1,250 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="256"
|
||||||
|
height="256"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.47pre4 r22446"
|
||||||
|
sodipodi:docname="greek-letters.svg"
|
||||||
|
inkscape:export-filename="/home/niels/www/metanohi/nohix/media/greek-letters.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
|
id="perspective10" />
|
||||||
|
<filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter3702">
|
||||||
|
<feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="1.1200381"
|
||||||
|
id="feGaussianBlur3704" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.0507812"
|
||||||
|
inkscape:cx="128"
|
||||||
|
inkscape:cy="128"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1278"
|
||||||
|
inkscape:window-height="1022"
|
||||||
|
inkscape:window-x="1"
|
||||||
|
inkscape:window-y="1"
|
||||||
|
inkscape:window-maximized="0" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<g
|
||||||
|
style="fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3702)"
|
||||||
|
id="g3652">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="58.616554"
|
||||||
|
id="text3654"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="58.616554"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan3656">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text3658"
|
||||||
|
y="85.684509"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan3660"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="85.684509"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="112.75244"
|
||||||
|
id="text3662"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="112.75244"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan3664">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text3666"
|
||||||
|
y="139.8204"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan3668"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="139.8204"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="166.88837"
|
||||||
|
id="text3670"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="166.88837"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan3672">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text3674"
|
||||||
|
y="193.95633"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan3676"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="193.95633"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="221.02429"
|
||||||
|
id="text3678"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="221.02429"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan3680">ΣηκΨον</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2848"
|
||||||
|
style="fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none">
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text2816"
|
||||||
|
y="58.616554"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan2820"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="58.616554"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="85.684509"
|
||||||
|
id="text2824"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="85.684509"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan2826">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text2828"
|
||||||
|
y="112.75244"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan2830"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="112.75244"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="139.8204"
|
||||||
|
id="text2832"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="139.8204"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan2834">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text2836"
|
||||||
|
y="166.88837"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan2838"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="166.88837"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
x="15.398547"
|
||||||
|
y="193.95633"
|
||||||
|
id="text2840"
|
||||||
|
transform="scale(0.96671195,1.0344343)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="15.398547"
|
||||||
|
y="193.95633"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="tspan2842">ΣηκΨον</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(0.96671195,1.0344343)"
|
||||||
|
id="text2844"
|
||||||
|
y="221.02429"
|
||||||
|
x="15.398547"
|
||||||
|
style="font-size:58.70033646000000260px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:#666666;font-family:Chumbly BRK;-inkscape-font-specification:Chumbly BRK;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan2846"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;fill:#ffffff;stroke:#666666;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
y="221.02429"
|
||||||
|
x="15.398547"
|
||||||
|
sodipodi:role="line">ΣηκΨον</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 58 KiB |
|
@ -0,0 +1,160 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="230"
|
||||||
|
height="99"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.46"
|
||||||
|
version="1.0"
|
||||||
|
sodipodi:docname="nohix.svg"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3185">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ac0000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3187" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ff2323;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3189" />
|
||||||
|
</linearGradient>
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
|
id="perspective10" />
|
||||||
|
<filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter3181">
|
||||||
|
<feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.87758789"
|
||||||
|
id="feGaussianBlur3183" />
|
||||||
|
</filter>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3185"
|
||||||
|
id="radialGradient3191"
|
||||||
|
cx="142.39745"
|
||||||
|
cy="76.404472"
|
||||||
|
fx="142.39745"
|
||||||
|
fy="76.404472"
|
||||||
|
r="20.28125"
|
||||||
|
gradientTransform="matrix(1.534545,-6.998926e-8,4.9837417e-8,1.6125726,-36.136011,-96.16687)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter3225">
|
||||||
|
<feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="1.6494668"
|
||||||
|
id="feGaussianBlur3227" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
gridtolerance="10000"
|
||||||
|
guidetolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.2"
|
||||||
|
inkscape:cx="125"
|
||||||
|
inkscape:cy="62.5"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1255"
|
||||||
|
inkscape:window-height="750"
|
||||||
|
inkscape:window-x="25"
|
||||||
|
inkscape:window-y="24" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<rect
|
||||||
|
style="opacity:0.5381356;fill:#2aff3b;fill-opacity:1;stroke:none;stroke-width:0.40000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect3259"
|
||||||
|
width="219.50439"
|
||||||
|
height="58.260136"
|
||||||
|
x="7.1864362"
|
||||||
|
y="37.400726"
|
||||||
|
ry="8.8656721"
|
||||||
|
transform="matrix(0.9911551,-0.1327083,0,1,0,0)" />
|
||||||
|
<text
|
||||||
|
id="text3161"
|
||||||
|
y="64.162567"
|
||||||
|
x="18.06805"
|
||||||
|
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3181);font-family:Bitstream Vera Sans"
|
||||||
|
xml:space="preserve"
|
||||||
|
transform="matrix(1.5345439,0,0,1.5345439,-10.282161,-21.14633)"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
|
||||||
|
y="64.162567"
|
||||||
|
x="18.06805"
|
||||||
|
id="tspan3163"
|
||||||
|
sodipodi:role="line">nohi</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:61.38175583px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#550000;stroke-width:0.61381757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||||
|
x="14.374969"
|
||||||
|
y="80.383034"
|
||||||
|
id="text2383"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2385"
|
||||||
|
x="14.374969"
|
||||||
|
y="80.383034"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#008000;stroke:#550000;stroke-width:0.61381757;stroke-miterlimit:4;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif">nohi</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text3193"
|
||||||
|
y="98.534271"
|
||||||
|
x="114.92109"
|
||||||
|
style="font-size:45.32183075px;font-style:normal;font-weight:normal;fill:#2aff3b;fill-opacity:1;stroke:#ff00ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3225);font-family:Bitstream Vera Sans"
|
||||||
|
xml:space="preserve"
|
||||||
|
transform="matrix(1.5110772,0.1584418,0.2673403,1.5864067,-51.298466,-96.98487)"><tspan
|
||||||
|
style="font-size:72.51493073px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#2aff3b;fill-opacity:1;stroke:#ff00ff;font-family:Domestic Manners;-inkscape-font-specification:Domestic Manners"
|
||||||
|
y="98.534271"
|
||||||
|
x="114.92109"
|
||||||
|
id="tspan3195"
|
||||||
|
sodipodi:role="line">X</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:61.38179398px;font-style:normal;font-weight:normal;fill:url(#radialGradient3191);fill-opacity:1;stroke:#800000;stroke-width:0.61381751;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||||
|
x="145.16656"
|
||||||
|
y="57.012428"
|
||||||
|
id="text2387"
|
||||||
|
transform="matrix(0.9847077,0.1032501,0.1742148,1.0337969,0,0)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2389"
|
||||||
|
x="145.16656"
|
||||||
|
y="57.012428"
|
||||||
|
style="font-size:98.2108078px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:url(#radialGradient3191);fill-opacity:1;stroke:#800000;stroke-width:0.61381751;stroke-miterlimit:4;stroke-dasharray:none;font-family:Domestic Manners;-inkscape-font-specification:Domestic Manners">X</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
|
@ -0,0 +1 @@
|
||||||
|
/home/niels/Videos/Various/big_buck_bunny_cut.ogv
|
After Width: | Height: | Size: 94 KiB |
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
$num = $_GET['n'] + 0;
|
||||||
|
if ($num == 1) {
|
||||||
|
$img = '../media/greek-letters-stretched.png';
|
||||||
|
$settings = 'modernart';
|
||||||
|
}
|
||||||
|
elseif ($num == 2) {
|
||||||
|
$img = '../media/greek-letters.png';
|
||||||
|
$settings = 'modernart modernrect:15 modernline:1 moderncolor:flow modernflowpower:40 modernflowtype:continue';
|
||||||
|
}
|
||||||
|
elseif ($num == 3) {
|
||||||
|
$img = '../media/greek-letters-large.png';
|
||||||
|
$settings = 'modernart modernrect:20 modernline:0 moderncolor:individual';
|
||||||
|
}
|
||||||
|
elseif ($num == 4) {
|
||||||
|
$img = '../media/greek-letters-stretched.png';
|
||||||
|
$settings = 'modernart modernnumbers:10 moderncolor:flow';
|
||||||
|
}
|
||||||
|
elseif ($num == 5) {
|
||||||
|
$img = '../media/greek-letters-stretched.png';
|
||||||
|
$settings = 'modernart modernnumbers:10 modernnumbersrel:y moderncolor:flow';
|
||||||
|
}
|
||||||
|
elseif ($num == 6) {
|
||||||
|
$img = '../media/greek-letters-large.png';
|
||||||
|
$settings = 'modernart modernnumbers:10 moderncolor:individual modernopacity:0.25';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ($num < 1)
|
||||||
|
$num = 6;
|
||||||
|
else
|
||||||
|
$num = 1;
|
||||||
|
header("Location: ?n=$num");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Graphics {Modern art {Example <?=$num?>}}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('../data/genericstyle.css');
|
||||||
|
.modernart, img {
|
||||||
|
margin: 0 30px 0 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="../modernart.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function() {
|
||||||
|
modernart.applyEffectToImages();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>An Example of the Advent of Modern Art (<?=$num?>)</h1>
|
||||||
|
<div class='simple'>
|
||||||
|
<img src='<?=$img?>' alt='Greek letters' />
|
||||||
|
<img src='<?=$img?>' alt='Greek letters'
|
||||||
|
class='<?=$settings?>' />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p><a href="?n=<?=$num-1?>">Previous</a> | <a href="?n=<?=$num+1?>">Next</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p><a href="../modernart.htm">Back to top</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p><a href="..">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,62 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Graphics {Modern art}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('data/genericstyle.css');
|
||||||
|
.modernart, img {
|
||||||
|
margin: 0 30px 0 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="modernart.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function() {
|
||||||
|
var pauseOrResume = function(obj) {
|
||||||
|
var elem = obj.parent
|
||||||
|
elem.onclick = elem.toggle
|
||||||
|
}
|
||||||
|
modernart.applyEffectToImages(pauseOrResume);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>A few examples</h1>
|
||||||
|
<div class='simple'>
|
||||||
|
<img src='media/greek-letters.png' alt='Greek letters' />
|
||||||
|
<img src='media/greek-letters.png' alt='Greek letters'
|
||||||
|
class='modernart modernnumbers:5 moderncolor:individual'
|
||||||
|
/>
|
||||||
|
<img src='media/greek-letters.png' alt='Greek letters'
|
||||||
|
class='modernart modernnumbers:5 moderncolor:flow'
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="clear"></div>
|
||||||
|
|
||||||
|
<h3>Pause and resume</h3>
|
||||||
|
<p>Click on the masterpieces to pause and resume the animations.</p>
|
||||||
|
|
||||||
|
<h2>Other examples</h2>
|
||||||
|
<ul style='margin: 10px 0 20px 30px'>
|
||||||
|
<li><a href='modernart-examples/?n=1'>Another example</a></li>
|
||||||
|
<li><a href='modernart-examples/?n=2'>Another example</a></li>
|
||||||
|
<li><a href='modernart-examples/?n=3'>Another example</a></li>
|
||||||
|
<li><a href='modernart-examples/?n=4'>Another example</a></li>
|
||||||
|
<li><a href='modernart-examples/?n=5'>Another example</a></li>
|
||||||
|
<li><a href='modernart-examples/?n=6'>Another example</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Code</h2>
|
||||||
|
<p style='margin: 0 0 20px 30px'><a href='modernart.js'>Source code</a></p>
|
||||||
|
|
||||||
|
<h2>Picture</h2>
|
||||||
|
<p>The picture has been released under <a href='http://creativecommons.org/publicdomain/zero/1.0/'>CC 0</a>.</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,436 @@
|
||||||
|
/*
|
||||||
|
* modernart.js -- Transforming ordinary pictures into dynamic art
|
||||||
|
* Copyright (C) 2010 Niels Serup
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of the GNU Lesser General Public License is available at
|
||||||
|
* <http://www.gnu.org/licenses/lgpl-3.0.html>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Version 0.1.1
|
||||||
|
* Maintainer: Niels Serup <ns@metanohi.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There is no real documentation for this script. Look at
|
||||||
|
* <http://nohix.metanohi.org/modernart.htm> to get an idea on how to
|
||||||
|
* implement it. It's very easy.
|
||||||
|
* This has currently only been tested in Conkeror, IceCat (like
|
||||||
|
* Firefox) 3.67 and Chromium.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
*** CHANGELOG ***
|
||||||
|
0.1.1, September 25 2010 -- Now also works with images with absolute or
|
||||||
|
fixed positions.
|
||||||
|
|
||||||
|
0.1.0, August 5 2010 -- Initial release.
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
createCode = function(dict) {
|
||||||
|
for (x in dict) {
|
||||||
|
try {
|
||||||
|
dict[x].prototype.objectParent = dict;
|
||||||
|
} catch (e) {};
|
||||||
|
}
|
||||||
|
return dict;
|
||||||
|
};
|
||||||
|
|
||||||
|
var modernart = createCode({
|
||||||
|
ModernArtRunner: function(imgElem, boxElems, lineElems,
|
||||||
|
colorFunction) {
|
||||||
|
this.imgElem = imgElem;
|
||||||
|
this.boxElems = boxElems;
|
||||||
|
this.lineElems = lineElems;
|
||||||
|
this.colorFunctions = this.objectParent.colorFunctions;
|
||||||
|
this.colorFunction = this.colorFunctions[colorFunction];
|
||||||
|
this.parent = this.imgElem.parentNode;
|
||||||
|
this.timers = [];
|
||||||
|
|
||||||
|
for (var i in this.boxElems) {
|
||||||
|
for (var j in this.boxElems[i]) {
|
||||||
|
this.boxElems[i][j].objectParent = this;
|
||||||
|
this.parent.appendChild(this.boxElems[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i in this.lineElems)
|
||||||
|
this.parent.appendChild(this.lineElems[i]);
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
var timerPause = function() {
|
||||||
|
for (var i in self.timers)
|
||||||
|
self.timers[i].pause();
|
||||||
|
};
|
||||||
|
var timerResume = function() {
|
||||||
|
for (var i in self.timers)
|
||||||
|
self.timers[i].resume();
|
||||||
|
};
|
||||||
|
var timerToggle = function() {
|
||||||
|
for (var i in self.timers)
|
||||||
|
self.timers[i].toggle();
|
||||||
|
};
|
||||||
|
this.imgElem.pause = timerPause;
|
||||||
|
this.imgElem.resume = timerResume;
|
||||||
|
this.imgElem.toggle = timerToggle;
|
||||||
|
this.parent.pause = timerPause;
|
||||||
|
this.parent.resume = timerResume;
|
||||||
|
this.parent.toggle = timerToggle;
|
||||||
|
|
||||||
|
if (this.objectParent.customFunction)
|
||||||
|
this.objectParent.customFunction(this);
|
||||||
|
|
||||||
|
this.rgb = [0, 255, 0];
|
||||||
|
this.colorFunction();
|
||||||
|
},
|
||||||
|
|
||||||
|
Timer: function(func, delay) {
|
||||||
|
this.func = func;
|
||||||
|
this.delay = delay;
|
||||||
|
this.resume();
|
||||||
|
},
|
||||||
|
|
||||||
|
colorFunctions: {
|
||||||
|
flow: function() {
|
||||||
|
var power = parseInt(this.imgElem.getSetting(
|
||||||
|
'modernflowpower')) || 25;
|
||||||
|
var flowType = this.imgElem.getSetting(
|
||||||
|
'modernflowtype') || 'stop';
|
||||||
|
var flowIgnore = flowType == 'stop';
|
||||||
|
var xPower = parseInt(power / this.boxElems[0].length);
|
||||||
|
var yPower = parseInt(power / this.boxElems.length);
|
||||||
|
var flowRun = function() {
|
||||||
|
var r = this.rgb[0];
|
||||||
|
var g = this.rgb[1];
|
||||||
|
var b = this.rgb[2];
|
||||||
|
if (r < 255 && g <= 0 && b >= 255)
|
||||||
|
r += 10;
|
||||||
|
else if (r > 0 && g >= 255 && b <= 0)
|
||||||
|
r -= 10;
|
||||||
|
else if (r >= 255 && g < 255 && b <= 0)
|
||||||
|
g += 10;
|
||||||
|
else if (r <= 0 && g > 0 && b >= 255)
|
||||||
|
g -= 10;
|
||||||
|
else if (r <= 0 && g >= 255 & b < 255)
|
||||||
|
b += 10;
|
||||||
|
else if (r >= 255 && g <= 0 && b > 0)
|
||||||
|
b -= 10;
|
||||||
|
|
||||||
|
this.rgb[0] = r;
|
||||||
|
this.rgb[1] = g;
|
||||||
|
this.rgb[2] = b;
|
||||||
|
|
||||||
|
var tr, tg, tb;
|
||||||
|
for (var i in this.boxElems) {
|
||||||
|
for (var j in this.boxElems[i]) {
|
||||||
|
if (flowIgnore) {
|
||||||
|
if (r > 255) tr = 255;
|
||||||
|
else tr = r;
|
||||||
|
if (g > 255) tg = 255;
|
||||||
|
else tg = g;
|
||||||
|
if (b > 255) tb = 255;
|
||||||
|
else tb = b;
|
||||||
|
this.boxElems[i][j].style.setBackground(
|
||||||
|
tr, tg, tb);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this.boxElems[i][j].style.setBackground(
|
||||||
|
r % 256, g % 256, b % 256);
|
||||||
|
r += xPower;
|
||||||
|
g += xPower;
|
||||||
|
b += xPower;
|
||||||
|
}
|
||||||
|
r += yPower;
|
||||||
|
g += yPower;
|
||||||
|
b += yPower;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var self = this;
|
||||||
|
this.timers.push(new this.objectParent.Timer(
|
||||||
|
function() {flowRun.apply(self);}, 100));
|
||||||
|
},
|
||||||
|
|
||||||
|
individual: function() {
|
||||||
|
var IndividualBox = function(boxElem) {
|
||||||
|
this.elem = boxElem;
|
||||||
|
this.objectParent = this.elem.objectParent;
|
||||||
|
this.topParent = this.objectParent.objectParent;
|
||||||
|
this.rgb = [this.topParent.randInt(255),
|
||||||
|
this.topParent.randInt(255),
|
||||||
|
this.topParent.randInt(255)];
|
||||||
|
this.way = [this.topParent.randInt(1) || -1,
|
||||||
|
this.topParent.randInt(1) || -1,
|
||||||
|
this.topParent.randInt(1) || -1];
|
||||||
|
this.generateSpeed();
|
||||||
|
var self = this;
|
||||||
|
this.objectParent.timers.push(
|
||||||
|
new this.topParent.Timer(function() {self.run()}, 100));
|
||||||
|
};
|
||||||
|
|
||||||
|
IndividualBox.prototype.generateSpeed = function() {
|
||||||
|
this.spd = [this.topParent.randInt(5, 15),
|
||||||
|
this.topParent.randInt(5, 15),
|
||||||
|
this.topParent.randInt(5, 15)];
|
||||||
|
};
|
||||||
|
|
||||||
|
IndividualBox.prototype.run = function() {
|
||||||
|
var rgb = this.rgb;
|
||||||
|
var i;
|
||||||
|
this.elem.style.setBackground(rgb[0], rgb[1], rgb[2]);
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
rgb[i] += this.spd[i] * this.way[i];
|
||||||
|
if (this.rgb[i] >= 255) {
|
||||||
|
rgb[i] = 255 - (this.spd[i] - (rgb[i] - 255));
|
||||||
|
this.generateSpeed();
|
||||||
|
this.way[i] *= -1;
|
||||||
|
}
|
||||||
|
else if (this.rgb[i] <= 0) {
|
||||||
|
rgb[i] = this.rgb[i] + this.spd[i];
|
||||||
|
this.generateSpeed();
|
||||||
|
this.way[i] *= -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i in rgb)
|
||||||
|
this.rgb[i] = rgb[i];
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i in this.boxElems) {
|
||||||
|
for (var j in this.boxElems[i])
|
||||||
|
new IndividualBox(this.boxElems[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
applyEffectToImages: function() {
|
||||||
|
var candidates = document.getElementsByTagName('img');
|
||||||
|
for (var i = 0, node; node = candidates[i++];) {
|
||||||
|
if (node.className.indexOf('modernart') != -1) {
|
||||||
|
if (arguments.length > 0)
|
||||||
|
this.applyEffectToImage(node, arguments[0]);
|
||||||
|
else
|
||||||
|
this.applyEffectToImage(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
applyEffectToImage: function(imgElem) {
|
||||||
|
var i, j;
|
||||||
|
var size = [imgElem.offsetWidth, imgElem.offsetHeight];
|
||||||
|
var parent = imgElem.parentNode;
|
||||||
|
var colorFunction = imgElem.getSetting('moderncolor') || 'flow';
|
||||||
|
var rectSize = parseInt(imgElem.getSetting('modernrect')) || 20;
|
||||||
|
var lineWidth = parseInt(imgElem.getSetting('modernline'));
|
||||||
|
if (isNaN(lineWidth))
|
||||||
|
lineWidth = 5;
|
||||||
|
var opacity = parseFloat(imgElem.getSetting('modernopacity')) || 0.5;
|
||||||
|
var numbers = parseInt(imgElem.getSetting('modernnumbers'));
|
||||||
|
if (arguments.length > 1)
|
||||||
|
this.customFunction = arguments[1];
|
||||||
|
else
|
||||||
|
this.customFunction = null;
|
||||||
|
|
||||||
|
if (!numbers) {
|
||||||
|
numbers = [];
|
||||||
|
var f = rectSize + lineWidth;
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
numbers.push(parseInt((size[i] + lineWidth) / f));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var relativeTo = imgElem.getSetting(
|
||||||
|
'modernnumbersrel') || 'x';
|
||||||
|
if (relativeTo == 'x') {
|
||||||
|
numbers = [numbers,
|
||||||
|
parseInt(size[1] / (size[0] / numbers))];
|
||||||
|
rectSize = ((size[0] + lineWidth) /
|
||||||
|
numbers[0] - lineWidth);
|
||||||
|
}
|
||||||
|
else { // y
|
||||||
|
numbers = [parseInt(size[0] / (size[1] / numbers)),
|
||||||
|
numbers];
|
||||||
|
rectSize = ((size[1] + lineWidth) /
|
||||||
|
numbers[1] - lineWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineWidth == 0) {
|
||||||
|
rectSize = [];
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
rectSize.push(size[i] / numbers[i]);
|
||||||
|
|
||||||
|
lineWidth = [0, 0];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lineWidth = [];
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
lineWidth.push((size[i] - numbers[i] * rectSize) /
|
||||||
|
(numbers[i] - 1));
|
||||||
|
|
||||||
|
rectSize = [rectSize, rectSize];
|
||||||
|
}
|
||||||
|
|
||||||
|
var container = document.createElement('div');
|
||||||
|
container.className = imgElem.className;
|
||||||
|
container.style.set('width', size[0] + 'px');
|
||||||
|
container.style.set('height', size[1] + 'px');
|
||||||
|
container.style.set('padding', '0');
|
||||||
|
container.style.set('display', 'inline-block');
|
||||||
|
container.style.set('float', 'none');
|
||||||
|
found_pos = imgElem.style.getPropertyValue('position');
|
||||||
|
container.style.set('position', imgElem.getSetting('modernposition')
|
||||||
|
|| found_pos || 'relative');
|
||||||
|
|
||||||
|
try {
|
||||||
|
var property, value;
|
||||||
|
for (i in imgElem.style) {
|
||||||
|
property = imgElem.style[i];
|
||||||
|
value = imgElem.style.getPropertyValue(property);
|
||||||
|
if (value)
|
||||||
|
container.style.set(property, value);
|
||||||
|
}
|
||||||
|
} catch (e) {};
|
||||||
|
|
||||||
|
imgElem.style.set('border', 'none');
|
||||||
|
imgElem.style.set('margin', '0');
|
||||||
|
imgElem.style.set('left', '0');
|
||||||
|
imgElem.style.set('top', '0');
|
||||||
|
imgElem.style.set('background-color', '#000');
|
||||||
|
parent.insertBefore(container, imgElem);
|
||||||
|
parent.removeChild(imgElem);
|
||||||
|
container.appendChild(imgElem);
|
||||||
|
|
||||||
|
var elemPos = [0, 0];
|
||||||
|
var boxElems = [];
|
||||||
|
for (i = 0; i < numbers[1]; i++) {
|
||||||
|
boxes = [];
|
||||||
|
for (j = 0; j < numbers[0]; j++) {
|
||||||
|
elem = document.createElement('div');
|
||||||
|
elem.style.set('width', rectSize[0] + 'px');
|
||||||
|
elem.style.set('height', rectSize[1] + 'px');
|
||||||
|
elem.style.set('background-color', 'transparent');
|
||||||
|
elem.style.set('position', 'absolute');
|
||||||
|
elem.style.set('left', elemPos[0] + 'px');
|
||||||
|
elem.style.set('top', elemPos[1] + 'px');
|
||||||
|
elem.style.set('margin', '0');
|
||||||
|
elem.style.set('padding', '0');
|
||||||
|
elem.style.set('border', 'none');
|
||||||
|
elem.style.setOpacity(opacity);
|
||||||
|
boxes.push(elem);
|
||||||
|
elemPos[0] += rectSize[0] + lineWidth[0];
|
||||||
|
}
|
||||||
|
boxElems.push(boxes);
|
||||||
|
elemPos[1] += rectSize[1] + lineWidth[1];
|
||||||
|
elemPos[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var lineElems = [];
|
||||||
|
if (lineWidth[0] > 0) {
|
||||||
|
var tempWidth, tempHeight, tempTop, tempLeft;
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
elemPos = rectSize[i];
|
||||||
|
if (i == 0) {
|
||||||
|
tempWidth = lineWidth[0];
|
||||||
|
tempHeight = size[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tempWidth = size[0];
|
||||||
|
tempHeight = lineWidth[1];
|
||||||
|
}
|
||||||
|
for (j = 0; j < numbers[i] - 1; j++) {
|
||||||
|
if (i == 0) {
|
||||||
|
tempLeft = elemPos;
|
||||||
|
tempTop = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tempLeft = 0;
|
||||||
|
tempTop = elemPos;
|
||||||
|
}
|
||||||
|
elem = document.createElement('div');
|
||||||
|
elem.style.set('width', tempWidth + 'px');
|
||||||
|
elem.style.set('height', tempHeight + 'px');
|
||||||
|
elem.style.set('background-color', '#000');
|
||||||
|
elem.style.set('position', 'absolute');
|
||||||
|
elem.style.set('left', tempLeft + 'px');
|
||||||
|
elem.style.set('top', tempTop + 'px');
|
||||||
|
elem.style.set('margin', '0');
|
||||||
|
elem.style.set('padding', '0');
|
||||||
|
elem.style.set('border', 'none');
|
||||||
|
lineElems.push(elem);
|
||||||
|
elemPos += rectSize[i] + lineWidth[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new this.ModernArtRunner(imgElem, boxElems, lineElems, colorFunction);
|
||||||
|
},
|
||||||
|
|
||||||
|
randInt: function() { // function([min, ]max)
|
||||||
|
if (arguments.length == 0)
|
||||||
|
return 0;
|
||||||
|
var min, max;
|
||||||
|
if (arguments.length > 1) {
|
||||||
|
min = arguments[0];
|
||||||
|
max = arguments[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
min = 0;
|
||||||
|
max = arguments[0];
|
||||||
|
}
|
||||||
|
return Math.floor(Math.random() * (max + 1)) + min;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
delete createCode;
|
||||||
|
|
||||||
|
modernart.Timer.prototype.resume = function() {
|
||||||
|
this.interval = setInterval(this.func, this.delay);
|
||||||
|
this.running = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
modernart.Timer.prototype.pause = function() {
|
||||||
|
clearInterval(this.interval);
|
||||||
|
delete this.interval;
|
||||||
|
this.running = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
modernart.Timer.prototype.toggle = function() {
|
||||||
|
if (this.running)
|
||||||
|
this.pause();
|
||||||
|
else
|
||||||
|
this.resume();
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLElement.prototype.getSetting = function(property) {
|
||||||
|
var string = this.className;
|
||||||
|
var start, end;
|
||||||
|
start = string.indexOf(property + ':');
|
||||||
|
|
||||||
|
if (start != -1) {
|
||||||
|
end = string.indexOf(' ', start);
|
||||||
|
if (end == -1)
|
||||||
|
return string.substring(start + property.length + 1);
|
||||||
|
else
|
||||||
|
return string.substring(start + property.length + 1, end);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CSSStyleDeclaration.prototype.set = function(property, value) {
|
||||||
|
this.setProperty(property, value, null);
|
||||||
|
};
|
||||||
|
|
||||||
|
CSSStyleDeclaration.prototype.setOpacity = function(val) {
|
||||||
|
this.set('opacity', val);
|
||||||
|
this.set('-moz-opacity', val);
|
||||||
|
this.set('-khtml-opacity', val);
|
||||||
|
this.filter = 'alpha(opacity=' + val*100 + ')';
|
||||||
|
};
|
||||||
|
|
||||||
|
CSSStyleDeclaration.prototype.setBackground = function(r, g, b) {
|
||||||
|
this.set('background-color', 'rgb('+r+', '+g+', '+b+')');
|
||||||
|
};
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Fun with <video> and <canvas> {Flicker}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('data/genericstyle.css');
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 5px 0;
|
||||||
|
border-color: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="videocanvas1.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function() {processor.doLoad();}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<video id="video" src="media/video.ogv" controls="true" autoplay="true" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<canvas id="c2" width="160" height="96" />
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p>Video clip © copyright Blender Foundation | <a href="http://www.bigbuckbunny.org">www.bigbuckbunny.org</a></p>
|
||||||
|
<p>Licensed under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a></p>
|
||||||
|
<hr />
|
||||||
|
<p>Code and XHTML partly taken from <a href="http://www.mozbox.org/pub/green/index.xhtml">an example from mozbox</a>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
// Code layout taken from http://www.mozbox.org/pub/green/main.js
|
||||||
|
|
||||||
|
var processor = {
|
||||||
|
doLoad: function() {
|
||||||
|
this.video = document.getElementById("video");
|
||||||
|
|
||||||
|
this.c1 = document.createElement("canvas");
|
||||||
|
this.c1.width = "160"
|
||||||
|
this.c1.height = "96"
|
||||||
|
this.ctx1 = this.c1.getContext("2d");
|
||||||
|
|
||||||
|
this.c2 = document.getElementById("c2");
|
||||||
|
this.ctx2 = this.c2.getContext("2d");
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
this.video.addEventListener("play", function() {
|
||||||
|
self.width = self.video.videoWidth / 2;
|
||||||
|
self.height = self.video.videoHeight / 2;
|
||||||
|
self.len = self.width * self.height;
|
||||||
|
|
||||||
|
self.video.addEventListener('timeupdate', function(event) {
|
||||||
|
self.computeFrame()
|
||||||
|
}, true);
|
||||||
|
}, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
computeFrame: function() {
|
||||||
|
var frame, data, i, offset, rgba, mod
|
||||||
|
|
||||||
|
this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
|
||||||
|
frame = this.ctx1.getImageData(0, 0, this.width, this.height);
|
||||||
|
data = frame.data;
|
||||||
|
ndata = []
|
||||||
|
|
||||||
|
for (i = 0; i < this.len; i++) {
|
||||||
|
ndata.push(0);
|
||||||
|
ndata.push(0);
|
||||||
|
ndata.push(0);
|
||||||
|
ndata.push(255);
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = Math.floor(Math.random()*10) + 5
|
||||||
|
|
||||||
|
for (i = 0; i < this.len; i++) {
|
||||||
|
rgba = data.getPixel(i);
|
||||||
|
mod = i % this.width;
|
||||||
|
|
||||||
|
ndata.setPixel(i, 1, rgba[1]);
|
||||||
|
|
||||||
|
if (mod + offset < this.width)
|
||||||
|
ndata.setPixel(i + offset, 0, rgba[0]);
|
||||||
|
if (mod - offset > 0)
|
||||||
|
ndata.setPixel(i - offset, 2, rgba[2]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
frame.data = ndata
|
||||||
|
this.ctx2.putImageData(frame, 0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.getPixel = function(number) {
|
||||||
|
var real = number * 4;
|
||||||
|
return this.slice(real, real + 4);
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.setPixel = function(number, rgba, val) {
|
||||||
|
var real = number * 4 + rgba;
|
||||||
|
if (number < 0 || real > this.length)
|
||||||
|
return;
|
||||||
|
this[real] = val;
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Fun with <video> and <canvas> {Black and white lightning}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('data/genericstyle.css');
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 5px 0;
|
||||||
|
border-color: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="videocanvas2.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function() {processor.doLoad();}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<video id="video" src="media/video.ogv" controls="true" autoplay="true" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<canvas id="c2" width="160" height="96" />
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p>Video clip © copyright Blender Foundation | <a href="http://www.bigbuckbunny.org">www.bigbuckbunny.org</a></p>
|
||||||
|
<p>Licensed under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a></p>
|
||||||
|
<hr />
|
||||||
|
<p>Code and XHTML partly taken from <a href="http://www.mozbox.org/pub/green/index.xhtml">an example from mozbox</a>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
// Code layout taken from http://www.mozbox.org/pub/green/main.js
|
||||||
|
|
||||||
|
var processor = {
|
||||||
|
doLoad: function() {
|
||||||
|
this.video = document.getElementById("video");
|
||||||
|
|
||||||
|
this.c1 = document.createElement("canvas");
|
||||||
|
this.c1.width = "160"
|
||||||
|
this.c1.height = "96"
|
||||||
|
this.ctx1 = this.c1.getContext("2d");
|
||||||
|
|
||||||
|
this.c2 = document.getElementById("c2");
|
||||||
|
this.ctx2 = this.c2.getContext("2d");
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
this.video.addEventListener("play", function() {
|
||||||
|
self.width = self.video.videoWidth / 2;
|
||||||
|
self.height = self.video.videoHeight / 2;
|
||||||
|
self.len = self.width * self.height;
|
||||||
|
|
||||||
|
self.video.addEventListener('timeupdate', function(event) {
|
||||||
|
self.computeFrame()
|
||||||
|
}, true);
|
||||||
|
}, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
computeFrame: function() {
|
||||||
|
var frame, data, i, num, rgba
|
||||||
|
|
||||||
|
this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
|
||||||
|
frame = this.ctx1.getImageData(0, 0, this.width, this.height);
|
||||||
|
data = frame.data;
|
||||||
|
|
||||||
|
num = Math.floor(Math.random()*3)
|
||||||
|
|
||||||
|
for (i = 0; i < this.len; i++) {
|
||||||
|
rgba = data.getPixel(i);
|
||||||
|
|
||||||
|
data.setPixel(i, 0, rgba[num]);
|
||||||
|
data.setPixel(i, 1, rgba[num]);
|
||||||
|
data.setPixel(i, 2, rgba[num]);
|
||||||
|
}
|
||||||
|
this.ctx2.putImageData(frame, 0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.getPixel = function(number) {
|
||||||
|
var real = number * 4;
|
||||||
|
return this.slice(real, real + 4);
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.setPixel = function(number, rgba, val) {
|
||||||
|
var real = number * 4 + rgba;
|
||||||
|
if (number < 0 || real > this.length)
|
||||||
|
return;
|
||||||
|
this[real] = val;
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Fun with <video> and <canvas> {Color uncertainty}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('data/genericstyle.css');
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 5px 0;
|
||||||
|
border-color: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="videocanvas3.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.onload = function() {processor.doLoad();}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<video id="video" src="media/video.ogv" controls="true" autoplay="true" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<canvas id="c2" width="160" height="96" />
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p>Video clip © copyright Blender Foundation | <a href="http://www.bigbuckbunny.org">www.bigbuckbunny.org</a></p>
|
||||||
|
<p>Licensed under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a></p>
|
||||||
|
<hr />
|
||||||
|
<p>Code and XHTML partly taken from <a href="http://www.mozbox.org/pub/green/index.xhtml">an example from mozbox</a>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
// Code layout taken from http://www.mozbox.org/pub/green/main.js
|
||||||
|
|
||||||
|
var processor = {
|
||||||
|
doLoad: function() {
|
||||||
|
this.video = document.getElementById("video");
|
||||||
|
|
||||||
|
this.c1 = document.createElement("canvas");
|
||||||
|
this.c1.width = "160"
|
||||||
|
this.c1.height = "96"
|
||||||
|
this.ctx1 = this.c1.getContext("2d");
|
||||||
|
|
||||||
|
this.c2 = document.getElementById("c2");
|
||||||
|
this.ctx2 = this.c2.getContext("2d");
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
this.video.addEventListener("play", function() {
|
||||||
|
self.width = self.video.videoWidth / 2;
|
||||||
|
self.height = self.video.videoHeight / 2;
|
||||||
|
self.len = self.width * self.height;
|
||||||
|
|
||||||
|
self.video.addEventListener('timeupdate', function(event) {
|
||||||
|
self.computeFrame()
|
||||||
|
}, true);
|
||||||
|
}, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
computeFrame: function() {
|
||||||
|
var frame, data, i, j, rgba
|
||||||
|
|
||||||
|
this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
|
||||||
|
frame = this.ctx1.getImageData(0, 0, this.width, this.height);
|
||||||
|
data = frame.data;
|
||||||
|
|
||||||
|
for (i = 0; i < this.len; i++) {
|
||||||
|
rgba = data.getPixel(i);
|
||||||
|
|
||||||
|
for (j = 0; j < 3; j++) {
|
||||||
|
data.setPixel(i, j, rgba[Math.floor(Math.random()*3)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.ctx2.putImageData(frame, 0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.getPixel = function(number) {
|
||||||
|
var real = number * 4;
|
||||||
|
return this.slice(real, real + 4);
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.setPixel = function(number, rgba, val) {
|
||||||
|
var real = number * 4 + rgba;
|
||||||
|
if (number < 0 || real > this.length)
|
||||||
|
return;
|
||||||
|
this[real] = val;
|
||||||
|
};
|
||||||
|
|
After Width: | Height: | Size: 589 KiB |
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Graphics {Interactive SVG World map}</title>
|
||||||
|
<style type='text/css'>
|
||||||
|
@import url('data/genericstyle.css');
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>World map</h1>
|
||||||
|
<p>I have created an interactive world map in SVG. Check it
|
||||||
|
out <a href='wmap.svg'>here</a>. It is based
|
||||||
|
on <a href='http://commons.wikimedia.org/wiki/File:World_location_map_English.svg'>http://commons.wikimedia.org/wiki/File:World_location_map_English.svg</a>.</p>
|
||||||
|
<h2>Screenshot (for non-svg browsers)</h2>
|
||||||
|
<p><img src='media/wmap-screenshot.png' alt='Screenshot' /></p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p><a href=".">Back to index</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName old.projects.lcl
|
||||||
|
ServerAlias old.projects.lcl
|
||||||
|
ServerAdmin ns@metanohi.org
|
||||||
|
|
||||||
|
DocumentRoot /home/niels/www/meta/subsites/oldsites
|
||||||
|
<Directory />
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/niels/www/meta/subsites/oldsites/>
|
||||||
|
Options Indexes Includes FollowSymLinks MultiViews
|
||||||
|
AllowOverride All
|
||||||
|
Order allow,deny
|
||||||
|
allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||||
|
<Directory "/usr/lib/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||||
|
|
||||||
|
# Possible values include: debug, info, notice, warn, error, crit,
|
||||||
|
# alert, emerg.
|
||||||
|
LogLevel warn
|
||||||
|
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||||
|
|
||||||
|
Alias /doc/ "/usr/share/doc/"
|
||||||
|
<Directory "/usr/share/doc/">
|
||||||
|
Options Indexes MultiViews FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.0/255.0.0.0 ::1/128
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
</VirtualHost>
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /index.php
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?php
|
||||||
|
header('Location: http://metanohi.org/projects/#old');
|
||||||
|
?>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName pictures.lcl
|
||||||
|
ServerAlias pictures.lcl
|
||||||
|
ServerAdmin ns@metanohi.org
|
||||||
|
|
||||||
|
DocumentRoot /home/niels/www/meta/subsites/pictures
|
||||||
|
<Directory />
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/niels/www/meta/subsites/pictures/>
|
||||||
|
Options Indexes Includes FollowSymLinks MultiViews
|
||||||
|
AllowOverride All
|
||||||
|
Order allow,deny
|
||||||
|
allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||||
|
<Directory "/usr/lib/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||||
|
|
||||||
|
# Possible values include: debug, info, notice, warn, error, crit,
|
||||||
|
# alert, emerg.
|
||||||
|
LogLevel warn
|
||||||
|
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||||
|
|
||||||
|
Alias /doc/ "/usr/share/doc/"
|
||||||
|
<Directory "/usr/share/doc/">
|
||||||
|
Options Indexes MultiViews FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.0/255.0.0.0 ::1/128
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
</VirtualHost>
|
|
@ -0,0 +1 @@
|
||||||
|
img/
|
|
@ -0,0 +1 @@
|
||||||
|
ErrorDocument 404 /show.php
|
|
@ -0,0 +1,5 @@
|
||||||
|
...--' About '--...
|
||||||
|
|
||||||
|
I choose a copyleft license when I want to protect a picture from being
|
||||||
|
abused by people who do not want to allow sharing and editing. When a
|
||||||
|
picture isn't worth protecting, I just throw it in the public domain.
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
header('Content-type: text/plain; charset=UTF-8');
|
||||||
|
|
||||||
|
$img = $_POST['image'];
|
||||||
|
$info = $_POST['uptext'];
|
||||||
|
$pass = $_POST['uppass'];
|
||||||
|
$info_path = "../info/$img.info";
|
||||||
|
|
||||||
|
// Password check
|
||||||
|
include('../saved_crypt_pass.php');
|
||||||
|
$crypt_pass = crypt($pass, $saved_crypt_pass);
|
||||||
|
|
||||||
|
if ($crypt_pass != $saved_crypt_pass) {
|
||||||
|
echo "Password error";
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
$info = str_replace('\\\'', '\'', str_replace('\"', "\"", $info));
|
||||||
|
|
||||||
|
// Info file
|
||||||
|
$f = fopen($info_path, 'w');
|
||||||
|
fwrite($f, $info);
|
||||||
|
fclose($f);
|
||||||
|
|
||||||
|
header("Location: http://pictures.metanohi.org/$img");
|
||||||
|
?>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
header('Content-type: text/html; charset=UTF-8');
|
||||||
|
$img = $_GET['i'];
|
||||||
|
|
||||||
|
$info_path = "../info/$img.info";
|
||||||
|
|
||||||
|
// Info file
|
||||||
|
$f = fopen($info_path, 'r');
|
||||||
|
$c = fread($f, filesize($info_path));
|
||||||
|
fclose($f);
|
||||||
|
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<head>
|
||||||
|
<meta name='description' content='Edit the info text of a picture. Owner only.' />
|
||||||
|
<meta http-equiv='content-language' content='en' />
|
||||||
|
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
|
||||||
|
<title>Edit info text</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<form action='edit.php' method='post'>
|
||||||
|
<input type='hidden' name='image' value='<?php echo $img; ?>' />
|
||||||
|
<p><textarea name='uptext' rows='10' cols='80'><?php echo $c; ?></textarea></p>
|
||||||
|
<p><input name='uppass' type='password' /></p>
|
||||||
|
<p><input type='submit' value='Change text' /></p>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
[19-Oct-2009 05:02:21] PHP Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/metanohi/public_html/pictures/edit/edit.php on line 19
|
||||||
|
[19-Oct-2009 05:04:08] PHP Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/metanohi/public_html/pictures/edit/edit.php on line 20
|
||||||
|
[19-Oct-2009 05:33:58] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/metanohi/public_html/pictures/edit/edit.php on line 18
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
function get_info($img) {
|
||||||
|
$txt = @file_get_contents("info/$img.info");
|
||||||
|
if (!$txt || $txt == '')
|
||||||
|
return 'No information available.';
|
||||||
|
|
||||||
|
//return preg_replace(array('/<(.*)>/', '/[(.*)]/'), array("<<a href='$1'>$1</a>>", "[<a href='$1'>$1</a>]"), $txt);
|
||||||
|
//$txt = preg_replace('/<(.*)>/', "<<a href='$1'>$1</a>>", $txt);
|
||||||
|
//$txt = preg_replace('/\[(.*)\]/', "[<a href='$1'>$1</a>]", $txt);
|
||||||
|
return preg_replace(array('/<(.*)>/', '/\[([^]]*)\]/'), array("<<a href='$1'>$1</a>>", "[<a href='$1'>$1</a>]"), $txt);
|
||||||
|
return $txt;
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
header('Content-type: text/html; charset=UTF-8');
|
||||||
|
$imgs = scandir('img');
|
||||||
|
array_splice($imgs, 0, 2);
|
||||||
|
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns='http://www.w3.org/1999/xhtml'>
|
||||||
|
<head>
|
||||||
|
<meta name='description' content='Pictures.' />
|
||||||
|
<meta name='keywords' content='pictures of varying quality, stuff' />
|
||||||
|
<meta http-equiv='content-language' content='en' />
|
||||||
|
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
|
||||||
|
<title>Pictures</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li><a href='upload/'>New</a></p></li>
|
||||||
|
<li><a href='about'>About</a></p></li>
|
||||||
|
</ul>
|
||||||
|
<h1>Pictures</h1><?php
|
||||||
|
foreach ($imgs as $x) {
|
||||||
|
echo "<p><a href='$x'>$x</a></p>\n";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,6 @@
|
||||||
|
This picture is released under the Creative Commons Attribution-ShareAlike 3.0
|
||||||
|
Unported license. The author is Niels Serup, and it's based on the pictures
|
||||||
|
found at <http://commons.wikimedia.org/wiki/File:Akiba_denkigai.jpg> and at
|
||||||
|
<http://commons.wikimedia.org/wiki/File:Squirrel_in_Seurasaari_autumn.JPG>,
|
||||||
|
both also released under CC BY-SA 3.0.
|
||||||
|
See also [Akiba_squirrel.xcf] and [ssq.png].
|
|
@ -0,0 +1,7 @@
|
||||||
|
This picture is released under the Creative Commons Attribution-ShareAlike 3.0
|
||||||
|
Unported license. The author is Niels Serup, and it's based on the pictures
|
||||||
|
found at <http://commons.wikimedia.org/wiki/File:Akiba_denkigai.jpg> and at
|
||||||
|
<http://commons.wikimedia.org/wiki/File:Squirrel_in_Seurasaari_autumn.JPG>,
|
||||||
|
both also released under CC BY-SA 3.0.
|
||||||
|
This file can be opened in GIMP.
|
||||||
|
See also [Akiba_squirrel.jpg] and [ssq.png].
|
|
@ -0,0 +1,4 @@
|
||||||
|
Based on <http://commons.wikimedia.org/wiki/File:Gnou_Thoiry_19803.jpg> in PD.
|
||||||
|
This also in the public domain.
|
||||||
|
|
||||||
|
See also [Gnou_Thoiry_19803_modwb4.png]
|
|
@ -0,0 +1,4 @@
|
||||||
|
Based on <http://commons.wikimedia.org/wiki/File:Gnou_Thoiry_19803.jpg> in PD.
|
||||||
|
This also in the public domain.
|
||||||
|
|
||||||
|
See also [Gnou_Thoiry_19803_modbw4.png]
|
|
@ -0,0 +1 @@
|
||||||
|
It's a candle in the public domain.
|
|
@ -0,0 +1,3 @@
|
||||||
|
cc-by-sa Niels Serup
|
||||||
|
|
||||||
|
[catcool.xcf]
|
|
@ -0,0 +1,3 @@
|
||||||
|
CC BY-SA 3.0.
|
||||||
|
|
||||||
|
Also see [catcool.jpg].
|
|
@ -0,0 +1 @@
|
||||||
|
GIMP. Public domain. See also [coolcircle.xcf].
|
|
@ -0,0 +1 @@
|
||||||
|
GIMP. Public domain. See also [coolcircle.png].
|