Jobs/projects list?
[1/7] from: webmaster::siliconspecies::com at: 28-Aug-2000 17:17
Is there a jobs/projects needing help, talent available list for Rebols
(Rebol programmers)?
Jeff Rubin, CTO & Co-Founder
Audiopia
Shutup and Listen...
http://www.audiopia.com
also check out my personal site Brainbyte!
http://www.brainbyte.com
[2/7] from: ryanc:iesco-dms at: 28-Aug-2000 15:21
> Is there a jobs/projects needing help, talent available list for Rebols
> (Rebol programmers)?
No, not thats been announced. Why, do you want to start one up?
--Ryan
Ryan Cole
Programmer Analyst
www.iesco-dms.com
707-468-5400
[3/7] from: alfred_pang:inetco at: 28-Aug-2000 15:30
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01C0113F.9CB50136
Content-Type: text/plain;
charset="iso-8859-1"
> Is there a jobs/projects needing help, talent available list for Rebols
> (Rebol programmers)?
Why yes!
> The Third Annual ICFP Programming Contest
> http://www.cs.cornell.edu/icfp/
>
> 'On Saturday, August 26, 2000 at 5PM EST a challenge task will be
> posted on the Internet and mailed to all registered participants.'
>
> Anyone daring enought to take on the challenge with REBOL?
I have finished up a good chunk of the GML parsing (grammer.r)
and started work on the renderer (renderer.r and threed.r). However
RealLife and WeakMathSkills is preventing me from finishing it up.
'do %render.r' should create a tiny 'testing.ppm' file containing
a picture of a rendered plane.
---
Although I wasn't able to finish it, I had a lot of fun with the
parsing. REBOL parses like a hot knife through butter! My problem
is that I've never written any 3-d code in my life so that bit was
going to be out of my reach for a while.
If there are any enterprising programmers out there, feel free
(no strings attached) to use this code as you please. There are
still about 20 hours left till the deadline. Top prize is $1000US
and unlimited bragging rights!
------_=_NextPart_000_01C0113F.9CB50136
Content-Type: application/octet-stream;
name="grammer.r"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="grammer.r"
REBOL [=0A Title: "GML grammer"=0A Date: 25-Aug-2000=0A]=0A=0A;--------------------------------------------------------------------------=0A;parse
stuff=0A=0Adigit-char: charset "0123456789"=0Aalpha-char: charset abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_
=0Awhitesp-char: charset " ^(tab)^(line)"=0Aspacers-tok: [ some whitesp-char ]=0Aoperator-tok:
[=0A copy o=0A [=0A "acos" |=0A "addi" |=0A "addf" |=0A "apply" |=0A "asin" |=0A "clampf"
|=0A "cone" |=0A "cos" |=0A "cube" |=0A "cylinder" |=0A "difference" |=0A "divi" |=0A "divf"
|=0A "eqi" |=0A "eqf" |=0A "floor" |=0A "frac" |=0A "getx" |=0A "gety" |=0A "getz" |=0A "get"
|=0A "if" |=0A "intersect" |=0A "length" |=0A "lessi" |=0A "lessf" |=0A "light" |=0A "modi"
|=0A "muli" |=0A "mulf" |=0A "negi" |=0A "negf" |=0A "plane" |=0A "pointlight" |=0A "point"
|=0A "real" |=0A "render" |=0A "rotatex" |=0A "rotatey" |=0A "rotatez" |=0A "scale" |=0A "sin"
|=0A "sphere" |=0A "spotlight" |=0A "sqrt" |=0A "subi" |=0A "subf" |=0A "translate" |=0A "union"
|=0A "uscale" ]=0A (tgml join "[gml-op " [ o " ]" ] )=0A]=0A=0Aident-rul: [=0A alpha-char
0 128 [ digit-char | alpha-char ]=0A]=0A=0Aident-tok: [=0A copy i ident-rul (tgml join
"[gml-ident " [ i " ]" ] )=0A]=0Abinder-tok: [=0A "/" copy b ident-rul (tgml join "[gml-binder
" [ b " ]" ] )=0A]=0Aboolean-tok: [=0A copy b ["true" | "false"] (tgml join "[gml-boolean
" [ b " ]" ] )=0A]=0A=0Ainteger-tok: [ opt "-" 1 48 digit-char ]=0Aexponent-tok: [ [
"e" | "E" ] opt "-" 1 48 digit-char ]=0Areal-tok: [ opt "-" 1 48 digit-char "." 1 48
digit-char opt=0Aexponent-tok ]=0Anumber-tok: [=0A [=0A copy r real-tok=0A (tgml join
"[gml-real " [ r " ]" ] )=0A ] |=0A [=0A copy i integer-tok=0A (tgml join "[gml-integer
" [ i " ]" ] )=0A ]=0A]=0Astring-tok: [=0A copy s "^"" thru "^""=0A (tgml join "[gml-string
" [ s " ]" ] )=0A]=0A=0Acomment-rul: [ "%" [ to "^/" | to end ] ]=0A=0Atoken: [=0Aoperator-tok
( comment { print "operator" }) |=0Aboolean-tok ( comment { print "boolean" }) |=0Anumber-tok
|=0Astring-tok ( comment { print "string" }) |=0Aident-tok ( comment { print "ident"
}) |=0Abinder-tok ( comment { print "binder"}) |=0Acomment-rul ( comment { print "comment"
}) ]=0A=0Atoken-group: [=0A [=0A token |=0A [=0A "[" (tgml "[ gml-array ")=0A spacers-tok
any token-group "]"=0A (tgml " ]")=0A ] |=0A [=0A "{" (tgml "[ gml-fn [] [" )=0A spacers-tok
any token-group "}"=0A (tgml " ] ]")=0A ]=0A ]=0A [ spacers-tok | to end ]=0A]=0A=0Agml:
[ any whitesp-char any token-group ]=0A=0A=0A=0Acomment {=0Aprint "test1:"=0Aprint parse/case/all
test1 gml=0Aprint "^/test2:"=0Aprint parse/case/all test2 gml=0Aprint "^/test3:"=0Aprint
parse/case/all test3 gml=0A}=0A=0Atgml: func [ str [string!] ] [=0A append gml-program
str=0A append gml-program " "=0A]=0A=0Aparse-gml: func [ str /local parseok ] [=0A gml-program:
copy "["=0A parseok: parse/case/all str gml=0A if not parseok [ throw 'gml-error-parse-problems
]=0A tgml "]"=0A do gml-program=0A]=0A=0A;---------------------------------------------------------------------=0A=0Acomment
{=0A=0A[ gml-boolean true ] ; true/false=0A[ gml-integer 1 ] ; integer numbers=0A[
gml-real 1.2e10 ] ; real numbers=0A[ gml-string "alfred" ] ; strings=0A[ gml-op addi
] ; GML operators=0A[ gml-binder inc ] ; binder operation=0A[ gml-ident x ] ;
identifier=0A[ gml-point 1 2 3 ] ; point=0A=0A[ gml-fn ; function=0A [ x [ gml-integer
1 ] y [ gml-integer 2 ] ] ; environment=0A [ [ gml-ident x ] [ gml-op addi ] ] ;
code=0A]=0A; note that we don't have environment for the function at parse time=0A; so
we will get something like this=0A[ gml-fn ; function=0A [ ] ; what environment?=0A [
[ gml-ident x ] [ gml-op addi ] ] ; code=0A]=0A; when our interpreter hits gml-fn,
then we will duplicate the environment=0Afor the function=0A=0A[ gml-array [ gml-integer
1 ] [ gml-real 1.2e3 ] ] ; array=0A=0A[ gml-light [ 1 1 1 0 ] [ 1 1 1 ] ] ; direction
and color=0A=0A}=0A=0A;---------------------------------------------------------------------=0A=0Agml-env:
make object! [=0A env: copy []=0A get: func [ ident /local ret ] [=0A ret: select env
ident=0A if none? ret [ throw 'gml-error ]=0A ret=0A ]=0A set: func [ ident val /local
exist ] [=0A exist: find env ident=0A either none? exist [=0A append env ident=0A append/only
env val=0A ] [=0A exist: next exist=0A remove exist=0A insert/only exist val=0A ]=0A ]=0A]=0A=0Agml-stack!:
make object! [=0A=0A stack: copy []=0A push: func [o] [insert/only stack o]=0A pop: func
[ /local h] [=0A if len == 0 [ throw 'gml-error-empty-stack ]=0A h: copy first stack
remove stack h=0A ]=0A len: func [] [ length? stack ]=0A=0A return-real: func [ r ] [=0A gml-stack/push
reduce [ 'gml-real r ]=0A ]=0A return-integer: func [ i ] [=0A gml-stack/push reduce
[ 'gml-integer i ]=0A ]=0A return-boolean: func [ b ] [=0A gml-stack/push reduce [ 'gml-boolean
either b ['true]['false] ]=0A ]=0A return-point: func [ x y z ] [=0A gml-stack/push
reduce [ 'gml-point x y z ]=0A ]=0A pop-real: func [/local r] [=0A r: gml-stack/pop
=0A if r/1 <> 'gml-real [ throw 'gml-error-not-real ]=0A r/2=0A ]=0A pop-integer: func
[/local i] [=0A i: gml-stack/pop=0A if i/1 <> 'gml-integer [ throw 'gml-error-not-integer
]=0A i/2=0A ]=0A pop-boolean: func [/local b] [=0A b: gml-stack/pop=0A if b/1 <> 'gml-boolean
[ throw 'gml-error-not-boolean ]=0A b/2=0A ]=0A pop-array: func [/local a] [=0A a:
gml-stack/pop=0A if a/1 <> 'gml-array [ throw 'gml-error-not-array ]=0A next a=0A ]=0A pop-point:
func [/local p] [=0A p: gml-stack/pop=0A if p/1 <> 'gml-point [ throw 'gml-error-not-point
]=0A next p=0A ]=0A]=0A=0A=0Amake-gml-stack!: func [] [=0A make gml-stack! []=0A]=0A=0Agml-stack:
make-gml-stack!=0A=0A; note that this guy could be recursive=0Agml-eval: func [ env program
/local tk ] [=0A while [ 0 < length? program ] [=0A tk: first program=0A; foreach s
ss [ prin [ s/1 "," s/2 ] ]=0A; print ""=0A switch/default to-word tk/1 [=0A gml-boolean
[=0A gml-stack/push tk=0A ]=0A gml-integer [=0A gml-stack/push tk=0A ]=0A gml-real
[=0A gml-stack/push tk=0A ]=0A gml-string [=0A gml-stack/push tk=0A ]=0A gml-point
[=0A gml-stack/push tk=0A ]=0A gml-op [=0A use [ f o ] [=0A switch/default tk/2
[=0A apply [=0A f: gml-stack/pop=0A if f/1 <> 'gml-fn [ throw 'gml-error-cannot-apply
]=0A gml-eval f/2 f/3=0A ]=0A if [=0A use [ b f1 f2 ] [=0A f2:
gml-stack/pop=0A f1: gml-stack/pop=0A b: gml-stack/pop=0A either (b/2
== 'true) [=0A gml-eval f1/2 f1/3=0A ] [=0A gml-eval f2/2 f2/3=0A ]=0A ]=0A
]=0A ]=0A [=0A o: tk/2=0A gml-opeval/:o=0A ]=0A ]=0A ]=0A gml-binder
[=0A env/set tk/2 gml-stack/pop=0A ]=0A gml-ident [=0A gml-stack/push env/get tk/2=0A ]=0A gml-fn
[=0A tk/2: make env []=0A gml-stack/push tk=0A ]=0A gml-array [=0A gml-stack/push
tk=0A ]=0A ] [=0A print "don't know"=0A ]=0A=0A program: next program=0A ]=0A]=0A=0Agml-opeval:
make object! [=0A=0A addi: func [] [=0A gml-stack/return-integer (gml-stack/pop-integer
+ gml-stack/pop-integer)=0A ]=0A addf: func [] [=0A gml-stack/return-real (gml-stack/pop-real
+ gml-stack/pop-real)=0A ]=0A acos: func [ /local r1 ] [=0A r1: gml-stack/pop-real=0A if
any [ r1 < -1 r1 > 1 ] [ throw 'gml-error ]=0A gml-stack/return-real (arccosine r1)=0A ]=0A asin:
func [ /local r1 ] [=0A r1: gml-stack/pop-real=0A if any [ r1 < -1 r1 > 1 ] [ throw
'gml-error ]=0A gml-stack/return-real (arcsine r1)=0A ]=0A clampf: func [ /local r1
] [=0A r1: gml-stack/pop-real=0A if r1 < 0.0 [ gml-stack/return-real 0.0 return ]=0A if
r1 > 1.0 [ gml-stack/return-real 1.0 return ]=0A gml-stack/return-real r1=0A ]=0A cos:
func [] [=0A gml-stack/return-real (cosine gml-stack/pop-real)=0A ]=0A divi: func [
/local i1 i2 ] [=0A i2: gml-stack/pop-integer=0A i1: gml-stack/pop-integer=0A if i2
== 0 [ throw 'gml-error ]=0A gml-stack/return-integer to-integer ( i1 / i2 )=0A ]=0A divf:
func [ /local r1 r2 ] [=0A r2: gml-stack/pop-real=0A r1: gml-stack/pop-real=0A if
r2 == 0.0 [ throw 'gml-error ]=0A gml-stack/return-real ( r1 / r2 )=0A ]=0A eqi: func
[] [=0A gml-stack/return-boolean (gml-stack/pop-integer == gml-stack/pop-integer)=0A ]=0A eqf:
func [] [=0A gml-stack/return-boolean (gml-stack/pop-real == gml-stack/pop-real)=0A ]=0A floor:
func [] [=0A gml-stack/return-integer (to-integer gml-stack/pop-real)=0A ]=0A frac:
func [ /local r1 ] [=0A r1: gml-stack/pop-real=0A gml-stack/return-real ( r1 - to-integer
r1 )=0A ]=0A lessi: func [ /local i1 i2 ] [=0A i2: gml-stack/pop-integer=0A i1: gml-stack/pop-integer=0A gml-stack/return-boolean
(i1 < i2)=0A ]=0A lessf: func [ /local r1 r2 ] [=0A r2: gml-stack/pop-real=0A r1: gml-stack/pop-real=0A gml-stack/return-boolean
(r1 < r2)=0A ]=0A modi: func [ /local i1 i2 ] [=0A i2: gml-stack/pop-integer=0A i1:
gml-stack/pop-integer=0A gml-stack/return-integer (i1 // i2)=0A ]=0A muli: func [] [=0A gml-stack/return-integer
(gml-stack/pop-integer * gml-stack/pop-integer)=0A ]=0A mulf: func [] [=0A gml-stack/return-integer
(gml-stack/pop-real * gml-stack/pop-real)=0A ]=0A negi: func [] [=0A gml-stack/return-integer
( - gml-stack/pop-integer )=0A ]=0A negf: func [] [=0A gml-stack/return-real ( - gml-stack/pop-real
)=0A ]=0A real: func [] [=0A gml-stack/return-real ( gml-stack/pop-integer )=0A ]=0A sin:
func [] [=0A gml-stack/return-real ( sine gml-stack/pop-real )=0A ]=0A sqrt: func [
/local r1 ] [=0A r1: gml-stack/pop-real=0A if r1 < 0 [ throw 'gml-error ]=0A gml-stack/return-real
( square-root r1 )=0A ]=0A subi: func [ /local i1 i2 ] [=0A i2: gml-stack/pop-integer=0A i1:
gml-stack/pop-integer=0A gml-stack/return-integer ( i1 - i2 )=0A ]=0A subf: func [ /local
r1 r2 ] [=0A r2: gml-stack/pop-real=0A r1: gml-stack/pop-real=0A gml-stack/return-integer
( r1 - r2 )=0A ]=0A=0A getx: func [ /local p ] [=0A p: gml-stack/pop-point=0A gml-stack/return-real
p/1=0A ]=0A gety: func [ /local p ] [=0A p: gml-stack/pop-point=0A gml-stack/return-real
p/2=0A ]=0A getz: func [ /local p ] [=0A p: gml-stack/pop-point=0A gml-stack/return-real
p/3=0A ]=0A point: func [ /local x y z ] [=0A z: gml-stack/pop-real=0A y: gml-stack/pop-real=0A x:
gml-stack/pop-real=0A gml-stack/return-point x y z=0A ]=0A=0A get: func [ /local a i
] [=0A i: gml-stack/pop-integer + 1=0A a: gml-stack/pop-array=0A if i > (length? a)
[ throw 'gml-error-out-of-bounds ]=0A gml-stack/push (pick a i)=0A ]=0A length: func
[ /local a ] [=0A a: gml-stack/pop-array=0A gml-stack/return-integer (length? a)=0A ]=0A light:
func [ /local dir color ] [=0A color: gml-stack/pop-point=0A dir: gml-stack/pop-point=0A append
dir 0=0A gml-stack/push reduce [ 'gml-light dir color ]=0A ]=0A]=0A=0Atest1: {=0A1 2
addi % adding 1 and 2=0A2.0e10 1.0 addf % blah=0A}=0A=0Atest2: {=0A { 1 } /id % the
identity function=0A { } /id % the identity function=0A}=0A=0Atest3: {=0A ^{ 1 addi
^} /inc % the increment function=0A ^{ /x /y x y ^} /swap %swap the top two stack locations=0A}=0A=0Atest4:
{=0A1 /x=0A{ x } /f=0A2 /x=0Af apply x addi=0A}=0A=0Atest5: {=0A { /n /self=0A n
2 lessi=0A { 1 }=0A { self n 1 subi self apply n muli }=0A if=0A } /fact=0A
fact 4 fact apply=0A}=0A=0Atest6: {=0A ^{ 1 addi ^} /inc % the increment function=0A
^{ 5 inc apply ^} /bb=0A bb apply=0A}=0A=0Atest7: {=0A true { 1 } { 2 } if=0A false {
2 } { 1 } if=0A}=0A=0Ass: func [] [ gml-stack/stack ]=0A=0Agml-eval gml-env parse-gml
test7=0A=0Agmle: func [ str ] [ =0A gml-eval gml-env parse-gml str=0A]=0A=0Ard: func
[][do %grammer.r]=0A=0A
------_=_NextPart_000_01C0113F.9CB50136
Content-Type: application/octet-stream;
name="ppm.r"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="ppm.r"
REBOl [=0A Title: "PPM handling routine"=0A]=0A=0Acomment {=0A An object to create a
PPM file and write it to file.=0A}=0A=0Appm!: make object! [=0A filename: %test.ppm=0A width:
100=0A height: 100=0A image: array/initial ( 100 * 100 * 3 ) 0=0A getxy: func [ x y /local
i ] [ ; x and y from 0 to 99=0A i: (y * width * 3) + (x * 3)=0A return copy/part
(skip image i) 3=0A ]=0A setxy: func [ x y color /local p ] [=0A i: (y * width * 3)
+ (x * 3)=0A p: skip image i=0A p/1: to-integer (color/1 * 255)=0A p/2: to-integer
(color/2 * 255)=0A p/3: to-integer (color/3 * 255)=0A color=0A ]=0A writeppm: func
[] [=0A write filename join=0A "P6^/# Alfred Pang^/" reduce [ width " " height "^/255^/"
]=0A write/append filename to-binary image=0A write/append filename "^/"=0A ]=0A]=0A=0Amake-ppm!:
func [ w h f ] [=0A make ppm! [=0A filename: to-file f=0A width: w=0A height: h=0A image:
array/initial (w * h * 3) 0=0A ]=0A]=0A=0A
------_=_NextPart_000_01C0113F.9CB50136
Content-Type: application/octet-stream;
name="render.r"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="render.r"
REBOL [=0A Title: "Renderer"=0A]=0A=0Ado %grammer.r=0Ado %threed.r=0Ado %ppm.r=0A=0Asphere!:
make object! [=0A texture: parse-gml { { /v /u /face 0.8 0.8 0.2 point 1.0 0.0 1.0 }
apply }=0A]=0A=0Aray!: make object! [=0A vector: make-unit-vec [ 1 1 1 0 ]=0A point:
[ 0 0 0 1 ]=0A rayt: func [ t /local rt ] [=0A rt: copy point=0A rt/1: rt/1 + (t *
vector/1)=0A rt/2: rt/2 + (t * vector/2)=0A rt/3: rt/3 + (t * vector/3)=0A rt=0A ]=0A]=0A=0Amake-ray!:
func [ dir pt ] [=0A make ray! [=0A vector: dir=0A point: pt=0A ]=
[4/7] from: allen:rebolforces at: 29-Aug-2000 9:05
----- Original Message -----
From: <[webmaster--SILICONSPECIES--COM]>
To: <[list--rebol--com]>
Sent: Tuesday, August 29, 2000 8:17 AM
Subject: [REBOL] Jobs/projects list?
> Is there a jobs/projects needing help, talent available list for Rebols
> (Rebol programmers)?
<<quoted lines omitted: 4>>
> also check out my personal site Brainbyte!
> http://www.brainbyte.com
Hi Jeff,
A list of REBOLs for hire and job listings is on my list of things to do for
the REBOL Forces site.
Until I get the process automated, I will manually accept submissions
stating.
Name, Country/Region, prefered work/projects, contact details, and short
blurb to sell yourself.
send to [listing--rebolforces--com]
Cheers,
Allen K
Website
http://www.rebolforces.com
Rebsite
do http://www.rebolforces.com
[5/7] from: rchristiansen:pop:isdfa:sei-it at: 28-Aug-2000 18:09
OK. What kind of application can I use to view a .ppm (portable pixel map)
file?
[6/7] from: alfred_pang:inetco at: 28-Aug-2000 16:47
Practically all file viewers on UNIX/Linux can view .ppm.
I used to have a viewer for Windows but I can't find it anymore.
[7/7] from: bhandley:zip:au at: 29-Aug-2000 22:41
IfranView is a great little freeware (non-commercial use) viewer for Windows
that can handle more image formats "than you can poke a stick at" including
PPM.
Does batch conversions as well. Worth checking out.
http://www.irfanview.com/
Brett.
Notes
- Quoted lines have been omitted from some messages.
View the message alone to see the lines that have been omitted