User:Lieven Van Speybroeck/Prototyping/9-Constellate me: Difference between revisions
mNo edit summary |
|||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
=Star Vector Graphics= | =Star Vector Graphics= | ||
Find out what your real constellation is... | Find out what your real constellation is... | ||
''' UPDATE (v0.2)''' | |||
The constellator has been turned into a [http://pzwart3.wdka.hro.nl/~lspeybroeck/constellations/constellation.html cgi-script].<br/> | |||
User-friendly and all! | |||
--- code --- | |||
'''constellation.html''' | |||
<source lang="html4strict"> | |||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> | |||
<html> | |||
<head> | |||
<title>Constellator</title> | |||
<link href="constellation.css" rel="stylesheet" type="text/css"> | |||
<script type="text/javascript"> | |||
function validate(){ | |||
var name=document.forms["constellation"]["name"].value; | |||
var date=document.forms["constellation"]["date"].value; | |||
if (name==null || name==""){ | |||
alert("The stars need a name"); | |||
return false; | |||
} | |||
else if (date==null || date=="") { | |||
alert("The stars need a date") | |||
return false; | |||
} | |||
if ((name.match(/[a-z]/))==null){ | |||
alert('The stars only understand an [a-z] name'); | |||
return false; | |||
} | |||
} | |||
function doDate(){ | |||
date = new Date(); | |||
day = date.getDate(); | |||
if (day < 10) { | |||
day = "0"+day; | |||
} | |||
if (month < 10) { | |||
month = "0"+month; | |||
} | |||
month = date.getMonth(); | |||
year = date.getFullYear(); | |||
document.forms["constellation"]["date"].value = year+"-"+month+"-"+day; | |||
} | |||
</script> | |||
</head> | |||
<body onload="doDate();"> | |||
<div class="container"> | |||
<form name="constellation" action="../cgi-bin/constellation.cgi" onsubmit="return validate()" method="get"> | |||
<ul> | |||
<li>name:<br/><input type="text" name="name" size="30" Value="Your name here"></li> | |||
<li>date of birth:<br/><input type="date" name="date" size="30"></li> | |||
<li><input type="submit" value="*~*:._constellat0rrr_.:*~*" class="button"></li> | |||
</ul> | |||
</form> | |||
</div> | |||
</body> | |||
</html> | |||
</source> | |||
'''constellation.cgi''' | |||
<source lang="python"> | |||
#!/usr/bin/python | |||
#-*- coding:utf-8 -*- | |||
import cgi, cgitb, random, string | |||
alphabet = string.lowercase | |||
form = cgi.FieldStorage() | |||
name = (form.getvalue('name')) | |||
date = (form.getvalue('date')).split("-") | |||
clean = name.replace(" ","") | |||
day = float(date[2]) | |||
month = float(date[1]) | |||
year = date[0] | |||
year = float(year[2:]) | |||
characters = list(clean.lower()); | |||
print "Content-type: image/svg+xml" | |||
print | |||
print """<?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="100%" | |||
height="100%" | |||
id="svg3040" | |||
version="1.1" | |||
inkscape:version="0.48.1 r9760" | |||
sodipodi:docname="New document 3"> | |||
<defs | |||
id="defs3042" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="335.42751" | |||
inkscape:cy="427.91605" | |||
inkscape:document-units="px" | |||
inkscape:current-layer="layer2" | |||
showgrid="false" | |||
inkscape:snap-global="false" | |||
inkscape:window-width="1918" | |||
inkscape:window-height="1177" | |||
inkscape:window-x="0" | |||
inkscape:window-y="21" | |||
inkscape:window-maximized="0" /> | |||
<metadata | |||
id="metadata3045"> | |||
<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="sky" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
sodipodi:insensitive="true"> | |||
<rect | |||
style="fill:#000000;fill-opacity:1;stroke:none" | |||
id="rect3048" | |||
width="100%" | |||
height="100%" /> | |||
</g> | |||
<g | |||
inkscape:groupmode="layer" | |||
id="layer2" | |||
inkscape:label="constellation">""" | |||
circle = """<circle cx="{0}%" cy="{1}%" r="{2}%" | |||
fill="{3}" stroke="none" style="opacity:{4};" />""" | |||
line = """<line x1="{0}%" y1="{1}%" x2="{2}%" y2="{3}%" stroke="#ff00ff" stroke-width="0.1%" />""" | |||
text = """<text x="{0}%" y="{1}%" fill="#FF00FF" font-family="Courier" | |||
font-size="13" text-anchor="middle">{2}</text>""" | |||
for x in range(0,800): | |||
print circle.format(random.random()*100, random.random()*100, random.random()/5, 'grey', random.random()) | |||
x = 0 | |||
for n in characters: | |||
pos = ((alphabet.index(n))+1) | |||
if 1 <= pos <= 4: | |||
y1 = day*2 | |||
x1 = (pos*10)+day*2 | |||
elif 5 <= pos <= 8: | |||
y1 = month*2 | |||
x1 = ((pos-4)*10)+day*2 | |||
elif 9 <= pos <= 12: | |||
y1 = day*3 | |||
x1 = ((pos-8)*10)+day*2 | |||
elif 13 <= pos <= 16: | |||
y1 = month*3 | |||
x1 = ((pos-12)*10)+month*2 | |||
elif 17 <= pos <= 20: | |||
y1 = year/2 | |||
x1 = ((pos-16)*10)+month*2 | |||
elif 21 <= pos <= 24: | |||
y1 = day+month*2 | |||
x1 = ((pos-20)*10)+month*2 | |||
elif 25 <= pos <= 26: | |||
y1 = 90 | |||
x1 = ((pos-24)*10)+day*2 | |||
if x != 0: | |||
print line.format(x2, y2, x1, y1) | |||
else: | |||
textx = x1 | |||
texty = y1-2 | |||
print circle.format(x1, y1, random.random()/3+0.05, 'white',1) | |||
x2 = x1 | |||
y2 = y1 | |||
x+=1 | |||
print text.format(textx, texty, name) | |||
print""" | |||
</g> | |||
</svg>""" | |||
</source> | |||
____DEPRECATED SECTION (v0.1)________ | |||
'''examples''' | '''examples''' | ||
Line 7: | Line 212: | ||
*[[Media:stars_inge.svg| For Inge]] | *[[Media:stars_inge.svg| For Inge]] | ||
*[[Media:stars_amy.svg| For Amy]] | *[[Media:stars_amy.svg| For Amy]] | ||
*[[Media:stars_sudo.svg | | *[[Media:stars_sudo.svg | sudo]] | ||
*[[Media:stars_simbaah.svg| re-enactment of the most touching starscene ever]] | *[[Media:stars_simbaah.svg| re-enactment of the most touching starscene ever]] | ||
Line 92: | Line 297: | ||
circle = """<circle cx="{0}%" cy="{1}%" r="{2}" fill="{3}" stroke="none" style="opacity:{4};" />""" | circle = """<circle cx="{0}%" cy="{1}%" r="{2}" fill="{3}" stroke="none" style="opacity:{4};" />""" | ||
line = """<line x1="{0}%" y1="{1}%" x2="{2}%" y2="{3}%" stroke="#ff00ff" stroke-width="0.1%" />""" | line = """<line x1="{0}%" y1="{1}%" x2="{2}%" y2="{3}%" stroke="#ff00ff" stroke-width="0.1%" />""" | ||
text = """<text x="{0}%" y="{1}%" fill="ff00ff" font-family="Courier" font-size="13" text-anchor="middle">{2}</text>""" | text = """<text x="{0}%" y="{1}%" fill="#ff00ff" font-family="Courier" font-size="13" text-anchor="middle">{2}</text>""" | ||
for x in range(0,800): | for x in range(0,800): | ||
f.write(circle.format(random.random()*100, random.random()*100, random.randint(2,5), 'grey', random.random())) | f.write(circle.format(random.random()*100, random.random()*100, random.randint(2,5), 'grey', random.random())) | ||
x = 0 | x = 0 | ||
for n in characters: | for n in characters: | ||
pos = ((alphabet.index(n))+1) | pos = ((alphabet.index(n))+1) | ||
Line 107: | Line 310: | ||
elif 5 <= pos <= 8: | elif 5 <= pos <= 8: | ||
y1 = 30 | y1 = 30 | ||
x1 = ((pos-4)*10)+ | x1 = ((pos-4)*10)+10 | ||
elif 9 <= pos <= 12: | elif 9 <= pos <= 12: | ||
y1 = | y1 = 35 | ||
x1 = ((pos-8)*10)+ | x1 = ((pos-8)*10)+27 | ||
elif 13 <= pos <= 16: | elif 13 <= pos <= 16: | ||
y1 = | y1 = 45 | ||
x1 = ((pos-12)*10)+ | x1 = ((pos-12)*10)+18 | ||
elif 17 <= pos <= 20: | elif 17 <= pos <= 20: | ||
y1 = | y1 = 53 | ||
x1 = ((pos-16)*10)+ | x1 = ((pos-16)*10)+12 | ||
elif 21 <= pos <= 24: | elif 21 <= pos <= 24: | ||
y1 = | y1 = 77 | ||
x1 = ((pos-20)*10)+ | x1 = ((pos-20)*10)+36 | ||
elif 25 <= pos <= 26: | elif 25 <= pos <= 26: | ||
y1 = | y1 = 84 | ||
x1 = ((pos-24)*10)+ | x1 = ((pos-24)*10)+23 | ||
f.write(circle.format(x1, y1, random.randint(2,6), 'white',1)) | f.write(circle.format(x1, y1, random.randint(2,6), 'white',1)) | ||
if x != 0: | if x != 0: | ||
Line 131: | Line 334: | ||
x2 = x1 | x2 = x1 | ||
y2 = y1 | y2 = y1 | ||
x | x=1 | ||
f.write(text.format(textx, texty, name)) | f.write(text.format(textx, texty, name)) | ||
f.write(""" | f.write(""" |
Latest revision as of 14:33, 5 November 2011
Star Vector Graphics
Find out what your real constellation is...
UPDATE (v0.2)
The constellator has been turned into a cgi-script.
User-friendly and all!
--- code ---
constellation.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Constellator</title>
<link href="constellation.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function validate(){
var name=document.forms["constellation"]["name"].value;
var date=document.forms["constellation"]["date"].value;
if (name==null || name==""){
alert("The stars need a name");
return false;
}
else if (date==null || date=="") {
alert("The stars need a date")
return false;
}
if ((name.match(/[a-z]/))==null){
alert('The stars only understand an [a-z] name');
return false;
}
}
function doDate(){
date = new Date();
day = date.getDate();
if (day < 10) {
day = "0"+day;
}
if (month < 10) {
month = "0"+month;
}
month = date.getMonth();
year = date.getFullYear();
document.forms["constellation"]["date"].value = year+"-"+month+"-"+day;
}
</script>
</head>
<body onload="doDate();">
<div class="container">
<form name="constellation" action="../cgi-bin/constellation.cgi" onsubmit="return validate()" method="get">
<ul>
<li>name:<br/><input type="text" name="name" size="30" Value="Your name here"></li>
<li>date of birth:<br/><input type="date" name="date" size="30"></li>
<li><input type="submit" value="*~*:._constellat0rrr_.:*~*" class="button"></li>
</ul>
</form>
</div>
</body>
</html>
constellation.cgi
#!/usr/bin/python
#-*- coding:utf-8 -*-
import cgi, cgitb, random, string
alphabet = string.lowercase
form = cgi.FieldStorage()
name = (form.getvalue('name'))
date = (form.getvalue('date')).split("-")
clean = name.replace(" ","")
day = float(date[2])
month = float(date[1])
year = date[0]
year = float(year[2:])
characters = list(clean.lower());
print "Content-type: image/svg+xml"
print
print """<?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="100%"
height="100%"
id="svg3040"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="New document 3">
<defs
id="defs3042" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="335.42751"
inkscape:cy="427.91605"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:snap-global="false"
inkscape:window-width="1918"
inkscape:window-height="1177"
inkscape:window-x="0"
inkscape:window-y="21"
inkscape:window-maximized="0" />
<metadata
id="metadata3045">
<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="sky"
inkscape:groupmode="layer"
id="layer1"
sodipodi:insensitive="true">
<rect
style="fill:#000000;fill-opacity:1;stroke:none"
id="rect3048"
width="100%"
height="100%" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="constellation">"""
circle = """<circle cx="{0}%" cy="{1}%" r="{2}%"
fill="{3}" stroke="none" style="opacity:{4};" />"""
line = """<line x1="{0}%" y1="{1}%" x2="{2}%" y2="{3}%" stroke="#ff00ff" stroke-width="0.1%" />"""
text = """<text x="{0}%" y="{1}%" fill="#FF00FF" font-family="Courier"
font-size="13" text-anchor="middle">{2}</text>"""
for x in range(0,800):
print circle.format(random.random()*100, random.random()*100, random.random()/5, 'grey', random.random())
x = 0
for n in characters:
pos = ((alphabet.index(n))+1)
if 1 <= pos <= 4:
y1 = day*2
x1 = (pos*10)+day*2
elif 5 <= pos <= 8:
y1 = month*2
x1 = ((pos-4)*10)+day*2
elif 9 <= pos <= 12:
y1 = day*3
x1 = ((pos-8)*10)+day*2
elif 13 <= pos <= 16:
y1 = month*3
x1 = ((pos-12)*10)+month*2
elif 17 <= pos <= 20:
y1 = year/2
x1 = ((pos-16)*10)+month*2
elif 21 <= pos <= 24:
y1 = day+month*2
x1 = ((pos-20)*10)+month*2
elif 25 <= pos <= 26:
y1 = 90
x1 = ((pos-24)*10)+day*2
if x != 0:
print line.format(x2, y2, x1, y1)
else:
textx = x1
texty = y1-2
print circle.format(x1, y1, random.random()/3+0.05, 'white',1)
x2 = x1
y2 = y1
x+=1
print text.format(textx, texty, name)
print"""
</g>
</svg>"""
____DEPRECATED SECTION (v0.1)________
examples
constellate(.py)
#!/usr/bin/python
import sys, string, random
alphabet = string.lowercase
name = sys.argv[1]
clean = sys.argv[1].replace(" ",'')
try:
characters = list(clean.lower());
length = len(sys.argv[1]);
f = open('constellations/'+name+'.svg', 'w')
f.write("""<?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="100%"
height="100%"
id="svg3040"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="New document 3">
<defs
id="defs3042" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="335.42751"
inkscape:cy="427.91605"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:snap-global="false"
inkscape:window-width="1918"
inkscape:window-height="1177"
inkscape:window-x="0"
inkscape:window-y="21"
inkscape:window-maximized="0" />
<metadata
id="metadata3045">
<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="sky"
inkscape:groupmode="layer"
id="layer1"
sodipodi:insensitive="true">
<rect
style="fill:#000000;fill-opacity:1;stroke:none"
id="rect3048"
width="100%"
height="100%" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="constellation">""")
circle = """<circle cx="{0}%" cy="{1}%" r="{2}" fill="{3}" stroke="none" style="opacity:{4};" />"""
line = """<line x1="{0}%" y1="{1}%" x2="{2}%" y2="{3}%" stroke="#ff00ff" stroke-width="0.1%" />"""
text = """<text x="{0}%" y="{1}%" fill="#ff00ff" font-family="Courier" font-size="13" text-anchor="middle">{2}</text>"""
for x in range(0,800):
f.write(circle.format(random.random()*100, random.random()*100, random.randint(2,5), 'grey', random.random()))
x = 0
for n in characters:
pos = ((alphabet.index(n))+1)
if 1 <= pos <= 4:
y1 = 20
x1 = (pos*10)+20
elif 5 <= pos <= 8:
y1 = 30
x1 = ((pos-4)*10)+10
elif 9 <= pos <= 12:
y1 = 35
x1 = ((pos-8)*10)+27
elif 13 <= pos <= 16:
y1 = 45
x1 = ((pos-12)*10)+18
elif 17 <= pos <= 20:
y1 = 53
x1 = ((pos-16)*10)+12
elif 21 <= pos <= 24:
y1 = 77
x1 = ((pos-20)*10)+36
elif 25 <= pos <= 26:
y1 = 84
x1 = ((pos-24)*10)+23
f.write(circle.format(x1, y1, random.randint(2,6), 'white',1))
if x != 0:
f.write(line.format(x2, y2, x1, y1))
else:
textx = x1
texty = y1-2
x2 = x1
y2 = y1
x=1
f.write(text.format(textx, texty, name))
f.write("""
</g>
</svg>""")
except:
print '\n!-------------------------------!\nOnly characters from a-z allowed\n!-------------------------------!\n'
run
- $ chmod +x constellate
- $ cp constellate /usr/local/bin
- $ constellate 'Whatever you want to write in the stars'