POV-Ray : Newsgroups : povray.off-topic : Crazy ideas for Monday morning : Re: Crazy ideas for Monday morning Server Time
6 Sep 2024 01:24:21 EDT (-0400)
  Re: Crazy ideas for Monday morning  
From: Orchid XP v8
Date: 10 Jun 2009 16:56:42
Message: <4a301e0a$1@news.povray.org>
>     Probably all of these are good enough for the resume. Some may need 
> rephrasing or more details.

Really? They're all pretty tiny little things that took me a day or two. 
They specifically said "large projects".

>> - Built a recursive Turtle-style fractal plotter.
> 
>     What the heck is this? You mean similar to Logo? You may want to add 
> a line beneath it (indented a bit) that has a one line explanation of 
> what this is (but don't change the above description if it's accurate).

Imagine Logo, but with a command and re-executes the entire program, but 
with all the lengths scaled down. (And starting from the Turtle's 
current position. And restoring that position when the sub-program 
ends.) Makes it very easy to draw ferns, the Kock snowflake curve, etc.

It's more or less equivilent to an L-system. But I'd never heard of those.

>> - Built a Lambda calculus interpretter.
> 
>     Put this in. Specify what language you used, though (and spell it 
> properly!)

*cough* Haskell.

Actually, a Lambda calculus interpretter is fairly trivial. What I wrote 
was a CGI script which shows a complete reduction sequence, and can also 
"compile" an extended Lambda calculus expression into plain Lambda 
calculus, and then into SKI combinator calculus, and finally into Iota 
calculus. It accepts any of these 4 languages as input. Simultaneously.

This is not as trivial as it sounds. (!!)

>> - Built a mini-Mathematica engine.
> 
>     Give more details - perhaps as bullets beneath it. What were its 
> capabilities and in which language?

Borland TurboPascal 5.5 for DOS. And I basically implemented 
Mathematica's pattern-matching and expression transformation language. 
Of course, the thing that makes Mathematica so powerful is the 
stupendously *vast* library of transformation rules it comes with. It's 
the culmination of many man-centuries of R&D. Not something I could 
duplicate in a hurry - especially since I don't know, for example, what 
"hypergeometric functions" even *are*, never mind how to implement them.

>> - Built a modular software sound synthesizer.
> 
>     Good. Again, perhaps some bullets describing features.

TurboPascal again. Each "module" is an MS-DOS program that takes a bunch 
of CLI args and maybe some input files, and dumps some sound data into 
an output file. By writing batch files, you can design complex synthesis 
algorithms. I've got modules for generating envelopes of various kinds, 
an oscilator for generating any Fourier series, a variable amplifier, 
and an FM operator. Any questions?

(If only I'd known DSP back then... I could have added a digital filter!)

>> - Built a collection of data compression modules.
>     
>     What language and which data compression formats (you could just put 
> the latter in parentheses).

Haskell. Again.

It doesn't handle any well-known formats such as RAR or ZIP. Rather, the 
modules implement basic algorithms such as LZW, Huffman, BWT, etc.

>> - Built a Mandelbrot generator with multiple colouring options.
> 
>     Good enough. Language?

Originally BASIC. Then assembly. Then Pascal. Then Smalltalk. Then Java. 
Then PostScript. Then Eiffel. Then Haskell...

Special features include inversion of the complex plane, colouring by 
the final value of Z, or the weighted average of the whole orbit, the 
option of adding "orbit traps" (e.g., the well-known "epsilon cross" 
option of FractInt). Special mention goes to the built-in 
Floyd-Steinburg error distribution dithering built into the Pascal 
version to enable psuedo-truecolour display on a 16-colour VGA monitor. 
Also the special RLE file format for storing and retrieving the images.

>> - Built a mini-Prolog interpretter.
> 
>     Good enough. Language? You could give more details as above (what 
> features did you implement, etc).

Haskell. I believe I may even have posted the source code (or at least 
its derivation here). I *definitely* posted the Windows CLI binary. It's 
basically straight out of a book, with a few Andrewisms added. (E.g., 
VGA colour text!)

Give it a predicate involving some variables. It will attempt to assign 
values to the variables in such a way that the predicate is satisfied. 
There may be zero, one, or multiple ways this can be done...

>> - Built a simple ray tracer.
> 
>     Language? Remove "simple" and put something like "prototype". Maybe 
> list some basic features.

It traced spheres and planes. It had CSG though, so that means it 
basically traces any polyhedron. In fact, there was a nonlinear scaling 
operation which means you could turn a sphere into a cylinder, and then 
a cylinder into a cone, so you actually have quite a few options there. 
There's no particular reason for not adding other quadratics too; I just 
never got round to it. I was too busy playing with texturing.

It had a texturing system based on several different kinds of "maps". A 
scalar map assigns a value to each point in space. By using a [piecewise 
linear] colour map, you could then assign a colour to every point in 
space. You can also apply multilayer textures, where lower ones "show 
through" upper ones. And each element of a CSG operation can be textured 
seperately. (As you can see... it's basically a blatent rip of POV-Ray.)

But there were also "vector maps", which you could use to displace other 
map types. So you could assign a red/green Y-gradient to an object, and 
then sine-displace it in the Y direction, and then again at a different 
frequency in the Z direction. In this way, you could make some pretty 
complex textures. (Not to mention that you can checkerboard textures, or 
have "texture maps" by applying a texture blend to a scalar map... As 
you can see, I kinda went overboard on generality. It's probably 
Turing-complete!)

>> ...should I continue?
> 
>     Sure.

Numerical intergration for physical motion simulations?

CPU emulators?

That grainular synthesis thing I played with?

Fractal image compression? (Maybe not include that one; it ever actually 
worked!)

The graphing tool I never finished?

OK, I'm starting to run out now...

>     There's a danger of your resume becoming too long. In which case 
> you'll want a short version (2 pages) which have only the ones that you 
> think are really prominent or interesting to the job. Then, separately, 
> you can have a CV that has all of the above, with details on most as 
> bullets.

Well, this is specifically for Wolfram Alpha. Check out the application 
form. There's only space for, like, 300 words, and they specifically 
want one "large project". I have many, many, MANY tiny projects.

>> Every single one of these has been a small one-man project totalling
>> less than 1,000 lines of code, I would estimate.
> 
>     Doesn't matter. Most of these are non-trivial.

You think??

Sure, *I* was impressed that I wrote a raytracer and it worked. But from 
what I can gather, *everybody* writes raytracers. Hell, Warp wrote a 
raytracer *inside* a raytracer!! Using a damned macro language. :-P

>     Definitely put the recovery plan in there.

Done.

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.