Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
[1] http://en.wikipedia.org/wiki/Brainfuck
[2] As Pd's string handling sucks, you need to convert your .bf source code into decimal form before loading it. A simple C program "decdump.c" to do this is attached.
[3] Provided it can be computed within the memory available, which in this interpreter is 1,000,000 cells each being an integer from 0 to 255 inclusive.
http://claudiusmaximus.goto10.org
#N canvas 72 113 437 157 10; #N canvas 369 69 310 176 1008-bfi 0; #N canvas 154 456 884 419 1008-guts 0; #X obj 21 16 table $0-code; #X obj 21 36 table $0-data; #N canvas 0 0 631 385 1008-load 0; #N canvas 219 223 331 317 1008-wc-l 0; #X obj 20 18 inlet; #X text 70 18 <symbol filename>; #X obj 20 267 outlet; #X text 77 267 <float lines>; #X msg 58 91 read $1 cr , rewind; #X obj 58 141 textfile; #X obj 20 237 f; #X msg 103 172 0; #X obj 20 56 t b b a b; #X obj 39 112 until; #X obj 58 161 bang; #X obj 58 200 f; #X obj 102 200 + 1; #X connect 0 0 8 0; #X connect 4 0 5 0; #X connect 5 0 10 0; #X connect 5 1 9 1; #X connect 6 0 2 0; #X connect 7 0 6 1; #X connect 7 0 11 1; #X connect 8 0 6 0; #X connect 8 1 9 0; #X connect 8 2 4 0; #X connect 8 3 7 0; #X connect 9 0 5 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 11 1; #X connect 12 0 6 1; #X restore 97 178 pd $0-wc-l; #X obj 24 44 openpanel; #X obj 46 156 t a a; #X obj 97 199 t f f; #X obj 46 221 pack s f; #X obj 24 22 r $0-load-s; #X obj 46 270 s $0-code; #X obj 24 65 t b a b; #X obj 103 149 s $0-run-r; #X msg 46 246 const 0 , resize $2 , read $1; #X obj 24 355 s $0-data; #X msg 24 333 resize $1 , const 0; #X obj 24 292 f 1e+06; #X obj 24 312 t f f; #X obj 143 200 s $0-code-size; #X obj 70 312 s $0-data-size; #X obj 225 98 0; #X obj 183 149 s $0-pause; #X obj 262 149 s $0-cp; #X obj 319 149 s $0-dp; #X connect 0 0 3 0; #X connect 1 0 7 0; #X connect 2 0 4 0; #X connect 2 1 0 0; #X connect 3 0 4 1; #X connect 3 1 14 0; #X connect 4 0 9 0; #X connect 5 0 1 0; #X connect 7 0 12 0; #X connect 7 1 2 0; #X connect 7 2 16 0; #X connect 9 0 6 0; #X connect 11 0 10 0; #X connect 12 0 13 0; #X connect 13 0 11 0; #X connect 13 1 15 0; #X connect 16 0 8 0; #X connect 16 0 17 0; #X connect 16 0 18 0; #X connect 16 0 19 0; #X restore 21 67 pd $0-load; #N canvas 0 0 303 203 1008-inc 0; #X obj 15 17 inlet; #X obj 45 57 f; #X obj 15 37 t b b; #X obj 45 97 tabread $0-data; #X obj 45 117 + 1; #X obj 45 137 mod 256; #X obj 45 157 tabwrite $0-data; #X obj 45 77 t f f; #X obj 15 177 outlet; #X obj 61 37 r $0-dp; #X connect 0 0 2 0; #X connect 1 0 7 0; #X connect 2 0 8 0; #X connect 2 1 1 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 3 0; #X connect 7 1 6 1; #X connect 9 0 1 1; #X restore 211 220 pd $0-inc; #N canvas 0 0 303 203 1008-dec 0; #X obj 15 17 inlet; #X obj 45 57 f; #X obj 15 37 t b b; #X obj 45 97 tabread $0-data; #X obj 45 137 mod 256; #X obj 45 157 tabwrite $0-data; #X obj 45 77 t f f; #X obj 15 177 outlet; #X obj 45 117 - 1; #X obj 61 37 r $0-dp; #X connect 0 0 2 0; #X connect 1 0 6 0; #X connect 2 0 7 0; #X connect 2 1 1 0; #X connect 3 0 8 0; #X connect 4 0 5 0; #X connect 6 0 3 0; #X connect 6 1 5 1; #X connect 8 0 4 0; #X connect 9 0 1 1; #X restore 282 220 pd $0-dec; #N canvas 12 396 300 301 1008-next 0; #X obj 17 17 inlet; #X obj 17 97 + 1; #X obj 17 117 t f f; #X obj 17 77 f; #X obj 17 257 s $0-cp; #X obj 33 57 r $0-cp; #X obj 47 137 >=; #X obj 63 117 r $0-code-size; #X obj 47 157 select 1; #X obj 47 237 s $0-run-r; #X msg 47 217 0; #X obj 47 177 t b b; #X obj 77 217 print bfi; #X msg 77 197 STOP; #X obj 17 37 bang; #X connect 0 0 14 0; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 2 1 6 0; #X connect 3 0 1 0; #X connect 5 0 3 1; #X connect 6 0 8 0; #X connect 7 0 6 1; #X connect 8 0 11 0; #X connect 10 0 9 0; #X connect 11 0 10 0; #X connect 11 1 13 0; #X connect 13 0 12 0; #X connect 14 0 3 0; #X restore 397 328 pd $0-next; #N canvas 0 0 309 301 1008-left 0; #X obj 17 17 inlet; #X obj 17 77 f; #X obj 61 157 select 1; #X obj 61 237 s $0-run-r; #X msg 61 217 0; #X obj 61 177 t b b; #X obj 91 217 print bfi; #X obj 17 37 bang; #X obj 33 57 r $0-dp; #X obj 61 137 < 0; #X obj 39 257 s $0-dp; #X obj 17 117 t b f f; #X msg 91 197 data pointer underflow , ABORT; #X obj 17 277 outlet; #X obj 17 97 - 1; #X connect 0 0 7 0; #X connect 1 0 14 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 5 1 12 0; #X connect 7 0 1 0; #X connect 8 0 1 1; #X connect 9 0 2 0; #X connect 11 0 13 0; #X connect 11 1 10 0; #X connect 11 2 9 0; #X connect 12 0 6 0; #X connect 14 0 11 0; #X restore 42 219 pd $0-left; #N canvas 0 0 309 301 1008-right 0; #X obj 17 17 inlet; #X obj 17 97 + 1; #X obj 17 77 f; #X obj 61 157 select 1; #X obj 61 237 s $0-run-r; #X msg 61 217 0; #X obj 61 177 t b b; #X obj 91 217 print bfi; #X obj 17 37 bang; #X obj 33 57 r $0-dp; #X obj 39 257 s $0-dp; #X obj 17 117 t b f f; #X obj 17 277 outlet; #X obj 61 137 >=; #X obj 77 117 r $0-data-size; #X msg 91 197 data pointer overflow , ABORT; #X connect 0 0 8 0; #X connect 1 0 11 0; #X connect 2 0 1 0; #X connect 3 0 6 0; #X connect 5 0 4 0; #X connect 6 0 5 0; #X connect 6 1 15 0; #X connect 8 0 2 0; #X connect 9 0 2 1; #X connect 11 0 12 0; #X connect 11 1 10 0; #X connect 11 2 13 0; #X connect 13 0 3 0; #X connect 14 0 13 1; #X connect 15 0 7 0; #X restore 122 219 pd $0-right; #N canvas 0 0 341 700 1008-skip 0; #X obj 17 20 inlet; #X obj 39 181 until; #X obj 39 241 + 1; #X obj 39 221 f; #X obj 39 613 s $0-cp; #X obj 69 493 >=; #X obj 85 473 r $0-code-size; #X obj 69 513 select 1; #X obj 69 593 s $0-run-r; #X msg 69 573 0; #X obj 101 573 print bfi; #X msg 101 553 code pointer overflow , ABORT; #X obj 69 533 t b b b; #X obj 55 201 r $0-cp; #X obj 39 261 t f f; #X obj 39 473 t f f; #X obj 143 303 tabread $0-code; #X obj 61 81 s $0-skip-depth; #X obj 143 373 f; #X obj 198 343 r $0-skip-depth; #X obj 143 423 select 0; #X obj 182 373 f; #X obj 182 393 - 1; #X obj 143 393 + 1; #X obj 194 443 s $0-skip-depth; #X obj 39 121 f; #X obj 39 141 tabread $0-data; #X obj 39 161 select 0; #X obj 61 60 1; #X obj 55 101 r $0-dp; #X obj 143 323 select 91 93; #X obj 17 40 t b b b; #X obj 17 643 outlet; #X connect 0 0 31 0; #X connect 1 0 3 0; #X connect 2 0 14 0; #X connect 3 0 2 0; #X connect 5 0 7 0; #X connect 6 0 5 1; #X connect 7 0 12 0; #X connect 9 0 8 0; #X connect 11 0 10 0; #X connect 12 0 9 0; #X connect 12 1 11 0; #X connect 12 2 1 1; #X connect 13 0 3 1; #X connect 14 0 15 0; #X connect 14 1 16 0; #X connect 15 0 4 0; #X connect 15 1 5 0; #X connect 16 0 30 0; #X connect 18 0 23 0; #X connect 19 0 18 1; #X connect 19 0 21 1; #X connect 20 0 1 1; #X connect 20 1 24 0; #X connect 21 0 22 0; #X connect 22 0 20 0; #X connect 23 0 20 0; #X connect 25 0 26 0; #X connect 26 0 27 0; #X connect 27 0 1 0; #X connect 28 0 17 0; #X connect 29 0 25 1; #X connect 30 0 18 0; #X connect 30 1 21 0; #X connect 31 0 32 0; #X connect 31 1 25 0; #X connect 31 2 28 0; #X restore 360 220 pd $0-skip; #N canvas 0 0 341 700 1008-loop 0; #X obj 17 20 inlet; #X obj 39 211 until; #X obj 39 251 f; #X obj 39 613 s $0-cp; #X obj 69 513 select 1; #X obj 69 593 s $0-run-r; #X msg 69 573 0; #X obj 101 573 print bfi; #X obj 69 533 t b b b; #X obj 55 231 r $0-cp; #X obj 39 291 t f f; #X obj 39 473 t f f; #X obj 143 303 tabread $0-code; #X obj 143 373 f; #X obj 143 423 select 0; #X obj 182 373 f; #X obj 39 121 f; #X obj 39 141 tabread $0-data; #X obj 39 161 select 0; #X obj 61 60 1; #X obj 55 101 r $0-dp; #X obj 143 323 select 91 93; #X obj 17 40 t b b b; #X obj 17 643 outlet; #X obj 39 191 bang; #X obj 182 393 + 1; #X obj 143 393 - 1; #X obj 39 271 - 1; #X obj 69 493 < 0; #X msg 101 553 code pointer underflow , ABORT; #X obj 61 81 s $0-loop-depth; #X obj 198 343 r $0-loop-depth; #X obj 194 443 s $0-loop-depth; #X connect 0 0 22 0; #X connect 1 0 2 0; #X connect 2 0 27 0; #X connect 4 0 8 0; #X connect 6 0 5 0; #X connect 8 0 6 0; #X connect 8 1 29 0; #X connect 8 2 1 1; #X connect 9 0 2 1; #X connect 10 0 11 0; #X connect 10 1 12 0; #X connect 11 0 3 0; #X connect 11 1 28 0; #X connect 12 0 21 0; #X connect 13 0 26 0; #X connect 14 0 1 1; #X connect 14 1 32 0; #X connect 15 0 25 0; #X connect 16 0 17 0; #X connect 17 0 18 0; #X connect 18 1 24 0; #X connect 19 0 30 0; #X connect 20 0 16 1; #X connect 21 0 13 0; #X connect 21 1 15 0; #X connect 22 0 23 0; #X connect 22 1 16 0; #X connect 22 2 19 0; #X connect 24 0 1 0; #X connect 25 0 14 0; #X connect 26 0 14 0; #X connect 27 0 10 0; #X connect 28 0 4 0; #X connect 29 0 7 0; #X connect 31 0 13 1; #X connect 31 0 15 1; #X restore 440 220 pd $0-loop; #N canvas 0 0 343 291 1008-input 0; #X obj 55 18 inlet; #X obj 18 247 outlet; #X obj 55 42 t b b; #X obj 85 86 s $0-pause; #X obj 85 65 1; #X obj 18 108 spigot; #X obj 55 65 1; #X obj 18 83 key; #X obj 18 132 t b b f b; #X obj 129 111 0; #X obj 163 159 f; #X obj 179 136 r $0-dp; #X obj 37 221 s $0-pause; #X obj 37 200 0; #X obj 56 179 tabwrite $0-data; #X msg 180 64 color 15 22; #X obj 180 84 s $0-background-r; #X obj 134 242 s $0-background-r; #X msg 134 222 color 16 22; #X obj 141 200 loadbang; #X connect 0 0 2 0; #X connect 2 0 6 0; #X connect 2 1 4 0; #X connect 2 1 15 0; #X connect 4 0 3 0; #X connect 5 0 8 0; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 1 0; #X connect 8 1 13 0; #X connect 8 1 18 0; #X connect 8 2 14 0; #X connect 8 3 9 0; #X connect 8 3 10 0; #X connect 9 0 5 1; #X connect 10 0 14 1; #X connect 11 0 10 1; #X connect 13 0 12 0; #X connect 15 0 16 0; #X connect 18 0 17 0; #X connect 19 0 18 0; #X restore 520 220 pd $0-input; #N canvas 0 0 324 165 1008-output 0; #X obj 19 15 inlet; #X obj 19 135 outlet; #X obj 19 35 t b b; #X obj 49 115 print bfi; #X msg 49 95 output $1; #X obj 49 55 f; #X obj 65 35 r $0-dp; #X obj 49 75 tabread $0-data; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 2 1 5 0; #X connect 4 0 3 0; #X connect 5 0 7 0; #X connect 6 0 5 1; #X connect 7 0 4 0; #X restore 611 220 pd $0-output; #X obj 295 138 select 60 62 43 45 91 93 44 46 35; #N canvas 0 0 429 244 1008-debug 0; #X obj 13 13 inlet; #X obj 13 213 outlet; #X obj 35 73 f; #X obj 35 153 pack f f f; #X obj 70 93 f; #X obj 13 33 t b b b; #X obj 70 113 t f f; #X obj 100 133 tabread $0-data; #X obj 86 73 r $0-dp; #X obj 51 53 r $0-cp; #X msg 35 173 code pointer $1 , data pointer $2 , data contents $3; #X obj 35 193 print bfi; #X connect 0 0 5 0; #X connect 2 0 3 0; #X connect 3 0 10 0; #X connect 4 0 6 0; #X connect 5 0 1 0; #X connect 5 1 2 0; #X connect 5 2 4 0; #X connect 6 0 3 1; #X connect 6 1 7 0; #X connect 7 0 3 2; #X connect 8 0 4 1; #X connect 9 0 2 1; #X connect 10 0 11 0; #X restore 708 220 pd $0-debug; #N canvas 0 0 322 105 1008-nop 0; #X obj 13 9 inlet; #X obj 13 29 bang; #X obj 13 49 outlet; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 793 220 pd $0-nop; #X obj 295 118 tabread $0-code; #X obj 295 98 f; #X obj 311 78 r $0-cp; #N canvas 331 388 318 296 1008-clock 0; #X obj 39 225 outlet; #X obj 39 205 spigot; #X obj 76 166 r $0-pause; #X obj 76 185 == 0; #X obj 39 26 r $0-run-s; #X obj 97 46 r $0-speed-s; #X obj 97 126 pow; #X obj 97 106 swap 2; #X obj 97 86 -; #X obj 97 66 swap 7; #X obj 39 146 metro 128; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 1 1; #X connect 4 0 10 0; #X connect 5 0 9 0; #X connect 6 0 10 1; #X connect 7 0 6 0; #X connect 7 1 6 1; #X connect 8 0 7 0; #X connect 9 0 8 0; #X connect 9 1 8 1; #X connect 10 0 1 0; #X restore 295 58 pd $0-clock; #X connect 3 0 5 0; #X connect 4 0 5 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 0 5 0; #X connect 9 0 5 0; #X connect 10 0 5 0; #X connect 11 0 5 0; #X connect 12 0 6 0; #X connect 12 1 7 0; #X connect 12 2 3 0; #X connect 12 3 4 0; #X connect 12 4 8 0; #X connect 12 5 9 0; #X connect 12 6 10 0; #X connect 12 7 11 0; #X connect 12 8 13 0; #X connect 12 9 14 0; #X connect 13 0 5 0; #X connect 14 0 5 0; #X connect 15 0 12 0; #X connect 16 0 15 0; #X connect 17 0 16 1; #X connect 18 0 16 0; #X restore 53 146 pd $0-guts; #X obj 11 11 cnv 15 158 126 $0-background-s $0-background-r bfi::control 9 14 0 14 -24198 -1 0; #X obj 94 38 bng 64 250 50 0 $0-load-s $0-load-r load 10 14 0 12 -258699 -1 -1; #X obj 22 38 tgl 64 0 $0-run-s $0-run-r run 16 12 0 12 -258699 -1 -1 0 1; #X obj 22 110 hradio 17 1 0 8 $0-speed-s $0-speed-r speed 40 9 0 12 -258699 -1 -1 7; #X coords 0 -1 1 1 160 128 1 10 10; #X restore 11 10 pd $0-bfi; #X text 190 37 A brainf*ck interpreter in Pd.; #X text 190 57 (c) 2006 Claude Heiland-Allen; #X text 190 77 Licensed under GNU GPL v2+; #X text 190 117 Pd *is* a programming language!; #X text 190 17 bfi.pd version 0.0.1; #X text 190 97 Yellow means key-press expected.;
Whee-hee! Thank you Claude -- I've always wanted a constructive proof that Pd is Turing-complete!
marmosets, Bryan
On 2006-09-28 18:25:02, Claude Heiland-Allen claudiusmaximus@goto10.org appears to have written:
Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
[1] http://en.wikipedia.org/wiki/Brainfuck
[2] As Pd's string handling sucks, you need to convert your .bf source code into decimal form before loading it. A simple C program "decdump.c" to do this is attached.
[3] Provided it can be computed within the memory available, which in this interpreter is 1,000,000 cells each being an integer from 0 to 255 inclusive.
Claude
#N canvas 72 113 437 157 10; #N canvas 369 69 310 176 1008-bfi 0; #N canvas 154 456 884 419 1008-guts 0; #X obj 21 16 table $0-code; #X obj 21 36 table $0-data; #N canvas 0 0 631 385 1008-load 0; #N canvas 219 223 331 317 1008-wc-l 0; #X obj 20 18 inlet; #X text 70 18 <symbol filename>; #X obj 20 267 outlet; #X text 77 267 <float lines>; #X msg 58 91 read $1 cr , rewind; #X obj 58 141 textfile; #X obj 20 237 f; #X msg 103 172 0; #X obj 20 56 t b b a b; #X obj 39 112 until; #X obj 58 161 bang; #X obj 58 200 f; #X obj 102 200 + 1; #X connect 0 0 8 0; #X connect 4 0 5 0; #X connect 5 0 10 0; #X connect 5 1 9 1; #X connect 6 0 2 0; #X connect 7 0 6 1; #X connect 7 0 11 1; #X connect 8 0 6 0; #X connect 8 1 9 0; #X connect 8 2 4 0; #X connect 8 3 7 0; #X connect 9 0 5 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 11 1; #X connect 12 0 6 1; #X restore 97 178 pd $0-wc-l; #X obj 24 44 openpanel; #X obj 46 156 t a a; #X obj 97 199 t f f; #X obj 46 221 pack s f; #X obj 24 22 r $0-load-s; #X obj 46 270 s $0-code; #X obj 24 65 t b a b; #X obj 103 149 s $0-run-r; #X msg 46 246 const 0 , resize $2 , read $1; #X obj 24 355 s $0-data; #X msg 24 333 resize $1 , const 0; #X obj 24 292 f 1e+06; #X obj 24 312 t f f; #X obj 143 200 s $0-code-size; #X obj 70 312 s $0-data-size; #X obj 225 98 0; #X obj 183 149 s $0-pause; #X obj 262 149 s $0-cp; #X obj 319 149 s $0-dp; #X connect 0 0 3 0; #X connect 1 0 7 0; #X connect 2 0 4 0; #X connect 2 1 0 0; #X connect 3 0 4 1; #X connect 3 1 14 0; #X connect 4 0 9 0; #X connect 5 0 1 0; #X connect 7 0 12 0; #X connect 7 1 2 0; #X connect 7 2 16 0; #X connect 9 0 6 0; #X connect 11 0 10 0; #X connect 12 0 13 0; #X connect 13 0 11 0; #X connect 13 1 15 0; #X connect 16 0 8 0; #X connect 16 0 17 0; #X connect 16 0 18 0; #X connect 16 0 19 0; #X restore 21 67 pd $0-load; #N canvas 0 0 303 203 1008-inc 0; #X obj 15 17 inlet; #X obj 45 57 f; #X obj 15 37 t b b; #X obj 45 97 tabread $0-data; #X obj 45 117 + 1; #X obj 45 137 mod 256; #X obj 45 157 tabwrite $0-data; #X obj 45 77 t f f; #X obj 15 177 outlet; #X obj 61 37 r $0-dp; #X connect 0 0 2 0; #X connect 1 0 7 0; #X connect 2 0 8 0; #X connect 2 1 1 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 3 0; #X connect 7 1 6 1; #X connect 9 0 1 1; #X restore 211 220 pd $0-inc; #N canvas 0 0 303 203 1008-dec 0; #X obj 15 17 inlet; #X obj 45 57 f; #X obj 15 37 t b b; #X obj 45 97 tabread $0-data; #X obj 45 137 mod 256; #X obj 45 157 tabwrite $0-data; #X obj 45 77 t f f; #X obj 15 177 outlet; #X obj 45 117 - 1; #X obj 61 37 r $0-dp; #X connect 0 0 2 0; #X connect 1 0 6 0; #X connect 2 0 7 0; #X connect 2 1 1 0; #X connect 3 0 8 0; #X connect 4 0 5 0; #X connect 6 0 3 0; #X connect 6 1 5 1; #X connect 8 0 4 0; #X connect 9 0 1 1; #X restore 282 220 pd $0-dec; #N canvas 12 396 300 301 1008-next 0; #X obj 17 17 inlet; #X obj 17 97 + 1; #X obj 17 117 t f f; #X obj 17 77 f; #X obj 17 257 s $0-cp; #X obj 33 57 r $0-cp; #X obj 47 137 >=; #X obj 63 117 r $0-code-size; #X obj 47 157 select 1; #X obj 47 237 s $0-run-r; #X msg 47 217 0; #X obj 47 177 t b b; #X obj 77 217 print bfi; #X msg 77 197 STOP; #X obj 17 37 bang; #X connect 0 0 14 0; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 2 1 6 0; #X connect 3 0 1 0; #X connect 5 0 3 1; #X connect 6 0 8 0; #X connect 7 0 6 1; #X connect 8 0 11 0; #X connect 10 0 9 0; #X connect 11 0 10 0; #X connect 11 1 13 0; #X connect 13 0 12 0; #X connect 14 0 3 0; #X restore 397 328 pd $0-next; #N canvas 0 0 309 301 1008-left 0; #X obj 17 17 inlet; #X obj 17 77 f; #X obj 61 157 select 1; #X obj 61 237 s $0-run-r; #X msg 61 217 0; #X obj 61 177 t b b; #X obj 91 217 print bfi; #X obj 17 37 bang; #X obj 33 57 r $0-dp; #X obj 61 137 < 0; #X obj 39 257 s $0-dp; #X obj 17 117 t b f f; #X msg 91 197 data pointer underflow , ABORT; #X obj 17 277 outlet; #X obj 17 97 - 1; #X connect 0 0 7 0; #X connect 1 0 14 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 5 1 12 0; #X connect 7 0 1 0; #X connect 8 0 1 1; #X connect 9 0 2 0; #X connect 11 0 13 0; #X connect 11 1 10 0; #X connect 11 2 9 0; #X connect 12 0 6 0; #X connect 14 0 11 0; #X restore 42 219 pd $0-left; #N canvas 0 0 309 301 1008-right 0; #X obj 17 17 inlet; #X obj 17 97 + 1; #X obj 17 77 f; #X obj 61 157 select 1; #X obj 61 237 s $0-run-r; #X msg 61 217 0; #X obj 61 177 t b b; #X obj 91 217 print bfi; #X obj 17 37 bang; #X obj 33 57 r $0-dp; #X obj 39 257 s $0-dp; #X obj 17 117 t b f f; #X obj 17 277 outlet; #X obj 61 137 >=; #X obj 77 117 r $0-data-size; #X msg 91 197 data pointer overflow , ABORT; #X connect 0 0 8 0; #X connect 1 0 11 0; #X connect 2 0 1 0; #X connect 3 0 6 0; #X connect 5 0 4 0; #X connect 6 0 5 0; #X connect 6 1 15 0; #X connect 8 0 2 0; #X connect 9 0 2 1; #X connect 11 0 12 0; #X connect 11 1 10 0; #X connect 11 2 13 0; #X connect 13 0 3 0; #X connect 14 0 13 1; #X connect 15 0 7 0; #X restore 122 219 pd $0-right; #N canvas 0 0 341 700 1008-skip 0; #X obj 17 20 inlet; #X obj 39 181 until; #X obj 39 241 + 1; #X obj 39 221 f; #X obj 39 613 s $0-cp; #X obj 69 493 >=; #X obj 85 473 r $0-code-size; #X obj 69 513 select 1; #X obj 69 593 s $0-run-r; #X msg 69 573 0; #X obj 101 573 print bfi; #X msg 101 553 code pointer overflow , ABORT; #X obj 69 533 t b b b; #X obj 55 201 r $0-cp; #X obj 39 261 t f f; #X obj 39 473 t f f; #X obj 143 303 tabread $0-code; #X obj 61 81 s $0-skip-depth; #X obj 143 373 f; #X obj 198 343 r $0-skip-depth; #X obj 143 423 select 0; #X obj 182 373 f; #X obj 182 393 - 1; #X obj 143 393 + 1; #X obj 194 443 s $0-skip-depth; #X obj 39 121 f; #X obj 39 141 tabread $0-data; #X obj 39 161 select 0; #X obj 61 60 1; #X obj 55 101 r $0-dp; #X obj 143 323 select 91 93; #X obj 17 40 t b b b; #X obj 17 643 outlet; #X connect 0 0 31 0; #X connect 1 0 3 0; #X connect 2 0 14 0; #X connect 3 0 2 0; #X connect 5 0 7 0; #X connect 6 0 5 1; #X connect 7 0 12 0; #X connect 9 0 8 0; #X connect 11 0 10 0; #X connect 12 0 9 0; #X connect 12 1 11 0; #X connect 12 2 1 1; #X connect 13 0 3 1; #X connect 14 0 15 0; #X connect 14 1 16 0; #X connect 15 0 4 0; #X connect 15 1 5 0; #X connect 16 0 30 0; #X connect 18 0 23 0; #X connect 19 0 18 1; #X connect 19 0 21 1; #X connect 20 0 1 1; #X connect 20 1 24 0; #X connect 21 0 22 0; #X connect 22 0 20 0; #X connect 23 0 20 0; #X connect 25 0 26 0; #X connect 26 0 27 0; #X connect 27 0 1 0; #X connect 28 0 17 0; #X connect 29 0 25 1; #X connect 30 0 18 0; #X connect 30 1 21 0; #X connect 31 0 32 0; #X connect 31 1 25 0; #X connect 31 2 28 0; #X restore 360 220 pd $0-skip; #N canvas 0 0 341 700 1008-loop 0; #X obj 17 20 inlet; #X obj 39 211 until; #X obj 39 251 f; #X obj 39 613 s $0-cp; #X obj 69 513 select 1; #X obj 69 593 s $0-run-r; #X msg 69 573 0; #X obj 101 573 print bfi; #X obj 69 533 t b b b; #X obj 55 231 r $0-cp; #X obj 39 291 t f f; #X obj 39 473 t f f; #X obj 143 303 tabread $0-code; #X obj 143 373 f; #X obj 143 423 select 0; #X obj 182 373 f; #X obj 39 121 f; #X obj 39 141 tabread $0-data; #X obj 39 161 select 0; #X obj 61 60 1; #X obj 55 101 r $0-dp; #X obj 143 323 select 91 93; #X obj 17 40 t b b b; #X obj 17 643 outlet; #X obj 39 191 bang; #X obj 182 393 + 1; #X obj 143 393 - 1; #X obj 39 271 - 1; #X obj 69 493 < 0; #X msg 101 553 code pointer underflow , ABORT; #X obj 61 81 s $0-loop-depth; #X obj 198 343 r $0-loop-depth; #X obj 194 443 s $0-loop-depth; #X connect 0 0 22 0; #X connect 1 0 2 0; #X connect 2 0 27 0; #X connect 4 0 8 0; #X connect 6 0 5 0; #X connect 8 0 6 0; #X connect 8 1 29 0; #X connect 8 2 1 1; #X connect 9 0 2 1; #X connect 10 0 11 0; #X connect 10 1 12 0; #X connect 11 0 3 0; #X connect 11 1 28 0; #X connect 12 0 21 0; #X connect 13 0 26 0; #X connect 14 0 1 1; #X connect 14 1 32 0; #X connect 15 0 25 0; #X connect 16 0 17 0; #X connect 17 0 18 0; #X connect 18 1 24 0; #X connect 19 0 30 0; #X connect 20 0 16 1; #X connect 21 0 13 0; #X connect 21 1 15 0; #X connect 22 0 23 0; #X connect 22 1 16 0; #X connect 22 2 19 0; #X connect 24 0 1 0; #X connect 25 0 14 0; #X connect 26 0 14 0; #X connect 27 0 10 0; #X connect 28 0 4 0; #X connect 29 0 7 0; #X connect 31 0 13 1; #X connect 31 0 15 1; #X restore 440 220 pd $0-loop; #N canvas 0 0 343 291 1008-input 0; #X obj 55 18 inlet; #X obj 18 247 outlet; #X obj 55 42 t b b; #X obj 85 86 s $0-pause; #X obj 85 65 1; #X obj 18 108 spigot; #X obj 55 65 1; #X obj 18 83 key; #X obj 18 132 t b b f b; #X obj 129 111 0; #X obj 163 159 f; #X obj 179 136 r $0-dp; #X obj 37 221 s $0-pause; #X obj 37 200 0; #X obj 56 179 tabwrite $0-data; #X msg 180 64 color 15 22; #X obj 180 84 s $0-background-r; #X obj 134 242 s $0-background-r; #X msg 134 222 color 16 22; #X obj 141 200 loadbang; #X connect 0 0 2 0; #X connect 2 0 6 0; #X connect 2 1 4 0; #X connect 2 1 15 0; #X connect 4 0 3 0; #X connect 5 0 8 0; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 1 0; #X connect 8 1 13 0; #X connect 8 1 18 0; #X connect 8 2 14 0; #X connect 8 3 9 0; #X connect 8 3 10 0; #X connect 9 0 5 1; #X connect 10 0 14 1; #X connect 11 0 10 1; #X connect 13 0 12 0; #X connect 15 0 16 0; #X connect 18 0 17 0; #X connect 19 0 18 0; #X restore 520 220 pd $0-input; #N canvas 0 0 324 165 1008-output 0; #X obj 19 15 inlet; #X obj 19 135 outlet; #X obj 19 35 t b b; #X obj 49 115 print bfi; #X msg 49 95 output $1; #X obj 49 55 f; #X obj 65 35 r $0-dp; #X obj 49 75 tabread $0-data; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 2 1 5 0; #X connect 4 0 3 0; #X connect 5 0 7 0; #X connect 6 0 5 1; #X connect 7 0 4 0; #X restore 611 220 pd $0-output; #X obj 295 138 select 60 62 43 45 91 93 44 46 35; #N canvas 0 0 429 244 1008-debug 0; #X obj 13 13 inlet; #X obj 13 213 outlet; #X obj 35 73 f; #X obj 35 153 pack f f f; #X obj 70 93 f; #X obj 13 33 t b b b; #X obj 70 113 t f f; #X obj 100 133 tabread $0-data; #X obj 86 73 r $0-dp; #X obj 51 53 r $0-cp; #X msg 35 173 code pointer $1 , data pointer $2 , data contents $3; #X obj 35 193 print bfi; #X connect 0 0 5 0; #X connect 2 0 3 0; #X connect 3 0 10 0; #X connect 4 0 6 0; #X connect 5 0 1 0; #X connect 5 1 2 0; #X connect 5 2 4 0; #X connect 6 0 3 1; #X connect 6 1 7 0; #X connect 7 0 3 2; #X connect 8 0 4 1; #X connect 9 0 2 1; #X connect 10 0 11 0; #X restore 708 220 pd $0-debug; #N canvas 0 0 322 105 1008-nop 0; #X obj 13 9 inlet; #X obj 13 29 bang; #X obj 13 49 outlet; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 793 220 pd $0-nop; #X obj 295 118 tabread $0-code; #X obj 295 98 f; #X obj 311 78 r $0-cp; #N canvas 331 388 318 296 1008-clock 0; #X obj 39 225 outlet; #X obj 39 205 spigot; #X obj 76 166 r $0-pause; #X obj 76 185 == 0; #X obj 39 26 r $0-run-s; #X obj 97 46 r $0-speed-s; #X obj 97 126 pow; #X obj 97 106 swap 2; #X obj 97 86 -; #X obj 97 66 swap 7; #X obj 39 146 metro 128; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 1 1; #X connect 4 0 10 0; #X connect 5 0 9 0; #X connect 6 0 10 1; #X connect 7 0 6 0; #X connect 7 1 6 1; #X connect 8 0 7 0; #X connect 9 0 8 0; #X connect 9 1 8 1; #X connect 10 0 1 0; #X restore 295 58 pd $0-clock; #X connect 3 0 5 0; #X connect 4 0 5 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 0 5 0; #X connect 9 0 5 0; #X connect 10 0 5 0; #X connect 11 0 5 0; #X connect 12 0 6 0; #X connect 12 1 7 0; #X connect 12 2 3 0; #X connect 12 3 4 0; #X connect 12 4 8 0; #X connect 12 5 9 0; #X connect 12 6 10 0; #X connect 12 7 11 0; #X connect 12 8 13 0; #X connect 12 9 14 0; #X connect 13 0 5 0; #X connect 14 0 5 0; #X connect 15 0 12 0; #X connect 16 0 15 0; #X connect 17 0 16 1; #X connect 18 0 16 0; #X restore 53 146 pd $0-guts; #X obj 11 11 cnv 15 158 126 $0-background-s $0-background-r bfi::control 9 14 0 14 -24198 -1 0; #X obj 94 38 bng 64 250 50 0 $0-load-s $0-load-r load 10 14 0 12 -258699 -1 -1; #X obj 22 38 tgl 64 0 $0-run-s $0-run-r run 16 12 0 12 -258699 -1 -1 0 1; #X obj 22 110 hradio 17 1 0 8 $0-speed-s $0-speed-r speed 40 9 0 12 -258699 -1 -1 7; #X coords 0 -1 1 1 160 128 1 10 10; #X restore 11 10 pd $0-bfi; #X text 190 37 A brainf*ck interpreter in Pd.; #X text 190 57 (c) 2006 Claude Heiland-Allen; #X text 190 77 Licensed under GNU GPL v2+; #X text 190 117 Pd *is* a programming language!; #X text 190 17 bfi.pd version 0.0.1; #X text 190 97 Yellow means key-press expected.;
#include <stdio.h>
int main(void) { int c; while (EOF != (c = getchar())) { printf("%d\n", c); } return (0); }
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Thu, 28 Sep 2006, Bryan Jurish wrote:
Whee-hee! Thank you Claude -- I've always wanted a constructive proof that Pd is Turing-complete!
The reason why I didn't bother to come up with a proof that pd is equivalent to a Turing machine (or some other close relative of it) is that I have faith.
Well, the other reason is that I hardly do any pd without externals. I can't care about whether the base pd can do it - it's not important.
What would be a cool contest for people who care about computability: make the smallest possible proof that Pd is equivalent to a Turing machine (or to a Linear-Bounded-Automaton, whatever). I suspect that the smallest possible proof is damn small.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
Well, I guess you can't refute Turing Completeness! I just get bfi errors when running it on a windows machine with the included code though.
~Kyle
On 9/28/06, Claude Heiland-Allen claudiusmaximus@goto10.org wrote:
Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
[1] http://en.wikipedia.org/wiki/Brainfuck
[2] As Pd's string handling sucks, you need to convert your .bf source code into decimal form before loading it. A simple C program "decdump.c" to do this is attached.
[3] Provided it can be computed within the memory available, which in this interpreter is 1,000,000 cells each being an integer from 0 to 255 inclusive.
hi,
Am Donnerstag, 28. September 2006 18:25 schrieb Claude Heiland-Allen:
Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
this is just great! fantastic!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
uhm, hey ... think about it that way: it makes a perfect couple for brainfuck that way ;)
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
why not as decimal values as well, to match the output? ;-D
greets,
chris
Christian Klippel wrote:
As Pd's string handling sucks, output is a printout of the decimal value of each character.
uhm, hey ... think about it that way: it makes a perfect couple for brainfuck that way ;)
I wrote another short C program that humanizes the output, if you start Pd like this:
pd -stderr -open bfi.pd 2>&1 | grep "bfi: output " | sed "s/bfi: output //g" | ./undecdump
All the pipe buffers seem to delay the output somewhat, though (usually it appears in one go when I exit Pd), so no good for interactive stuff.
Excellent, you proved Pd Turing complete and improved its interface in one hack. j/k :)
On Thu, 28 Sep 2006 17:25:02 +0100 Claude Heiland-Allen claudiusmaximus@goto10.org wrote:
Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
[1] http://en.wikipedia.org/wiki/Brainfuck
[2] As Pd's string handling sucks, you need to convert your .bf source code into decimal form before loading it. A simple C program "decdump.c" to do this is attached.
[3] Provided it can be computed within the memory available, which in this interpreter is 1,000,000 cells each being an integer from 0 to 255 inclusive.
Claude
I read two Wikipedia articles, and I still have no idea what this means. One could conceivably run Linux under Pd? Or the internet? wild.
On 9/28/06, Claude Heiland-Allen claudiusmaximus@goto10.org wrote:
Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
[1] http://en.wikipedia.org/wiki/Brainfuck
[2] As Pd's string handling sucks, you need to convert your .bf source code into decimal form before loading it. A simple C program "decdump.c" to do this is attached.
[3] Provided it can be computed within the memory available, which in this interpreter is 1,000,000 cells each being an integer from 0 to 255 inclusive.
Claude
On Fri, 29 Sep 2006, Chuckk Hubbard wrote:
I read two Wikipedia articles, and I still have no idea what this means. One could conceivably run Linux under Pd? Or the internet? wild.
Computability doesn't usually count input/output. The internet and pd are two examples of things relying heavily on input/output... except that you can also use pd without input/output.
The concept is that for any solvable problem you can write a program for it and the data together in an array large enough and let the "Turing machine" (or other equivalent thing) process it. Then it will stop and the result will be what you wanted.
The input/output issue is another pair of socks. Most computability theoricians are so busy thinking about impossible situations, that they can't even think of input/output, of pd and the internet.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
morning Mathieu, morning all,
<warning>rant follows</warning>
On 2006-09-30 05:13:42, Mathieu Bouchard matju@artengine.ca appears to have written:
Computability doesn't usually count input/output. The internet and pd are two examples of things relying heavily on input/output... except that you can also use pd without input/output.
???
what's a Turing machine without a tape? I imagine that you're seeing the tape (or rather, that you're seeing computability theorists seeing the tape) in its machine-internal role of (basically) Just A Buffer, but there's got to be data on it at t=0 (ok, maybe just the empty string, but that's still information in the most formal sense), i.e. when the computation begins. I'll grant you that computability theorists (among whom I count myself in a very minor, inexperienced, and somewhat skeptical sort of way) tend to concern themselves with computability of a program (ruleset, delta function, whatever) for *arbitrary* input, which I will further grant is largely impractical; but hey, they're *theorists*, right?
As to how the data got on the tape in the first place, what restrictions may or may not justifiably be placed on it, and what the feeds into -- well, maybe that's a computable function as well, and maybe it isn't. Are you perhaps saying "input/output" to refer to the user interface, i.e. the existence and (assumedly) freely willed action [on the input tape] and (also assumedly) conscious perception [of the output tape] by an autonomous end-in-itself, i.e. a human being? Well, free will is an illusion anyways, so we can pretty much ignore that part of it (it may of course still be a non-computable illusion, but there's some pretty compelling data that it's pretty darned illusory). Similarly, "conscious perception" assumes a consciousness in which the perceptions arrive, and no one, but no one has yet been able to provide an argument which convinces me that such a thing must exist (whatever ephemeral form of existence it's supposed to have in the first place); and that includes the Churchlands, Dennet, Fodor, and even Grand Master Noam (uh, that's Chomsky, of course), for all of whom I have a great deal of respect...
That having been said, I find it extremely soothing to assume that there is in fact such a thing as a semi-independent consciousness, and that one of 'em somehow participates in my very own neural activities. Likewise, since it would otherwise be pretty damn lonely in here (cf. Hume), I like to imagine that there are in fact other folks on the planet also infused with such semi-independent ephemera; in fact, I blithely tend to assume this of everyone I meet. Then for purely practical (read: "normative", if you're so disposed) reasons, I've got to assume that there is such a thing as free will, but the only bit that I think might really represent a non-computable function is the "being forced to suppose" part, cf. Kant "I think that ...", Quine & abstract objects, etc., etc.
Apologies for the rant, just had to get that off my loosely connected and causally participating ephemera...
marmosets, Bryan
http://plato.stanford.edu/entries/church-turing/
The Church-Turing thesis is quite misunderstood actually. Issues of computability are fascinating and build on the work of Godel, Kleene, Russell, Hilbert, Church and Turing.
Daniel Dennet and Douglas Hoffstadter present some famously accesible laymans analysis of it.
Church used predicate calculus, and Turing a mechanical analogy. In a limited sense they are equivilent, but there are subtleties and several versions of the thesis which differ in strength. A universal computer and a universal Turing machine are not the same thing, that is to say anything that is Turing computable can be computed on any Turing machine (like a modern Von Neumann computer) but that isn't the same as saying it can compute "anything". Getting Godel helps with this - not all things are computable by a finite symbolic logic, that doesn't mean they are not computable at all.
In a modern context the thesis seems quite unremarkable since any pocket calculator is essentialy "Turing complete" and we are so used to computing machines we take it for granted that you can run BSD on a toaster. But it has profound philosophical implications. Contrast Penfield with Churchland if you want to grapple this issue vis determinism and computability. The contoversy is still powerful in AI research on the equivilence of neural and finite state computing.
Yes, you could implement Linux in Pd. And you could implement Linux running a VM running Pd implementing Linux... if you had the time and some peverse reason to try.
No you could not implement the "internet" in Pd because the internet is not a program, it is a distributed data store.
On Fri, 29 Sep 2006 15:06:51 -0400 "Chuckk Hubbard" badmuthahubbard@gmail.com wrote:
I read two Wikipedia articles, and I still have no idea what this means. One could conceivably run Linux under Pd? Or the internet? wild.
On 9/28/06, Claude Heiland-Allen claudiusmaximus@goto10.org wrote:
Hi everybody,
Remember those long discussions about whether Pd is a programming language or (an inferior) something else?
Well, to settle the matter, I made a brainf*ck[1] interpreter in vanilla Pd using no externals[2].
Now you can be sure that you can compute anything computable[3] using your favourite multimedia tool!
As Pd's string handling sucks, output is a printout of the decimal value of each character.
Keyboard input is through [key], so you enter characters fairly naturally (wait for the yellow signal before you type each character). There is no way to indicate end-of-file.
[1] http://en.wikipedia.org/wiki/Brainfuck
[2] As Pd's string handling sucks, you need to convert your .bf source code into decimal form before loading it. A simple C program "decdump.c" to do this is attached.
[3] Provided it can be computed within the memory available, which in this interpreter is 1,000,000 cells each being an integer from 0 to 255 inclusive.
Claude
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Sat, 30 Sep 2006, padawan12 wrote:
anything that is Turing computable can be computed on any Turing machine (like a modern Von Neumann computer) but that isn't the same as saying it can compute "anything".
In the real world, there is no machine that can compute as much as any theoretical Turing machine can, because there no such thing as infinite tape.
Beware of the discrepancy between the real world and mainstream mathematics, which is a kind of hall of mirrors, only worse (how many so-called "Real" numbers don't exist?).
Constructivist mathematics were invented in order to prevent problems due to fairy tales such as infinity being taken too seriously. I don't know whether that movement didn't catch because it was too difficult to think about or because it was too realistic; prolly both.
All this to say that I don't care what computability theorists believe it means to "be able to compute anything".
Penfield with Churchland if you want to grapple this issue vis determinism and computability. The contoversy is still powerful in AI research on the equivilence of neural and finite state computing.
What, do humans have an infinite number of neurons? does any neuron in there have an infinite degree of precision? let's forget about neurons: what's the computing power of a soul?
No you could not implement the "internet" in Pd because the internet is not a program, it is a distributed data store.
What? The internet is not a data store.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
On 9/29/06, Mathieu Bouchard matju@artengine.ca wrote:
What? The internet is not a data store.
It's the catalog for the store.
On Sat, 30 Sep 2006, chris clepper wrote:
On 9/29/06, Mathieu Bouchard matju@artengine.ca wrote:
What? The internet is not a data store.
It's the catalog for the store.
Neither.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
A catalog for a data store is itself a data store.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
In 1952, Turing was convicted of "acts of gross indecency" after admitting to a sexual relationship with a man in Manchester http://en.wikipedia.org/wiki/Manchester. He was placed on probation and required to undergo hormone therapy http://en.wikipedia.org/wiki/Hormone_therapy.
Turing died after eating an apple laced with cyanide http://en.wikipedia.org/wiki/Cyanide in 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide http://en.wikipedia.org/wiki/Suicide.
respect plants and animals, not machines!
ciao, sevy
Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
On 9/29/06, Mathieu Bouchard matju@artengine.ca wrote:
What? The internet is not a data store.
It's the catalog for the store.
Neither.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
A catalog for a data store is itself a data store.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Cana da
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Not quite sure where this is heading. Machines are the extensions of
man (think of robots as our next evolutionary stage) and as such
deserve respect in my opinion. As designers of software (the soft-
machines) or hardware we bear responsibility. Since PD in many cases
is used to send control messages to "machines" and the resulting
actions might appear to be autonomous (as products of neural logic
for example) ethical questions arise as to the final results or
consequences. So, respect for the object of our creation reflects or
manifests who we are.
respect-fully,
arturo
On Sep 30, 2006, at 10:23 PM, Yves Degoyon wrote:
In 1952, Turing was convicted of "acts of gross indecency" after
admitting to a sexual relationship with a man in Manchester. He was
placed on probation and required to undergo hormone therapy.Turing died after eating an apple laced with cyanide in 1954,
sixteen days short of his 42nd birthday. His death is regarded by
most as an act of suicide.respect plants and animals, not machines!
ciao, sevy
Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
On 9/29/06, Mathieu Bouchard matju@artengine.ca wrote:
What? The internet is not a data store.
It's the catalog for the store.
Neither.
It's not directly a data store, because any kinds of things lie
between the data stores of the internet, and the user... if there
is even a data store. Often the servers are used for computations
rather than storage.A catalog for a data store is itself a data store.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Cana da _______________________________________________ PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
haha,
what a joke, cyborg old-school, have pleasure with a machine, i hope you will
sevy
Arturo Sinclair wrote:
Not quite sure where this is heading. Machines are the extensions of man (think of robots as our next evolutionary stage) and as such deserve respect in my opinion. As designers of software (the soft-machines) or hardware we bear responsibility. Since PD in many cases is used to send control messages to "machines" and the resulting actions might appear to be autonomous (as products of neural logic for example) ethical questions arise as to the final results or consequences. So, respect for the object of our creation reflects or manifests who we are.
respect-fully,
arturo
On Sep 30, 2006, at 10:23 PM, Yves Degoyon wrote:
In 1952, Turing was convicted of "acts of gross indecency" after admitting to a sexual relationship with a man in Manchester http://en.wikipedia.org/wiki/Manchester. He was placed on probation and required to undergo hormone therapy http://en.wikipedia.org/wiki/Hormone_therapy.
Turing died after eating an apple laced with cyanide http://en.wikipedia.org/wiki/Cyanide in 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide http://en.wikipedia.org/wiki/Suicide.
respect plants and animals, not machines!
ciao, sevy
Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
On 9/29/06, Mathieu Bouchard matju@artengine.ca wrote:
What? The internet is not a data store.
It's the catalog for the store.
Neither.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
A catalog for a data store is itself a data store.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Cana da
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
PD-list@iem.at mailto:PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
This reminds me of Frank Zappa's "Joe's Garage".
On 10/1/06, Yves Degoyon ydegoyon@free.fr wrote:
haha,
what a joke, cyborg old-school, have pleasure with a machine, i hope you will
sevy
Arturo Sinclair wrote: Not quite sure where this is heading. Machines are the extensions of man (think of robots as our next evolutionary stage) and as such deserve respect in my opinion. As designers of software (the soft-machines) or hardware we bear responsibility. Since PD in many cases is used to send control messages to "machines" and the resulting actions might appear to be autonomous (as products of neural logic for example) ethical questions arise as to the final results or consequences. So, respect for the object of our creation reflects or manifests who we are.
respect-fully,
arturo
On Sep 30, 2006, at 10:23 PM, Yves Degoyon wrote:
In 1952, Turing was convicted of "acts of gross indecency" after admitting to a sexual relationship with a man in Manchester. He was placed on probation and required to undergo hormone therapy.
Turing died after eating an apple laced with cyanide in 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide.
respect plants and animals, not machines!
ciao, sevy Mathieu Bouchard wrote: On Sat, 30 Sep 2006, chris clepper wrote:
On 9/29/06, Mathieu Bouchard matju@artengine.ca wrote: What? The internet is not a data store. It's the catalog for the store.
Neither.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
A catalog for a data store is itself a data store.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Cana da ________________________________ _______________________________________________
PD-list@iem.at
mailing list
UNSUBSCRIBE and account-management ->
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list ________________________________
PD-list@iem.at
mailing list
UNSUBSCRIBE and account-management ->
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 9/30/06, Yves Degoyon ydegoyon@free.fr wrote:
In 1952, Turing was convicted of "acts of gross indecency" after admitting to a sexual relationship with a man in Madchesterhttp://en.wikipedia.org/wiki/Manchester. He was placed on probation and required to undergo ecstasy therapyhttp://en.wikipedia.org/wiki/Hormone_therapy .
Turing died after eating an apple laced with cyanidehttp://en.wikipedia.org/wiki/Cyanidein 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide http://en.wikipedia.org/wiki/Suicide.
I wrote for luck They sent me you I sent for juice You gave me poison I order a line You form a queue Try anything hard Is there anything else you can do Well not much I know, I've been trained I can sit and stand And beg and roll over I don't read I just guess There's more than one sign But it's getting less And you were wet But you had a dryer You used to speak the truth But now you're liar You used to speak the truth But now you're clever
Maybe it can potencially write protocols, handshake byte layers and fuck human brains...as proto-boards and a bunch of resistors can...
Maybe also there´s already a lot of objects and libs...
But I just wish a better documented code and modular (or even Object Oriented concepted) API.
And then I believe nobody will need to prove...
What do you think?
ooops :)
chris clepper wrote:
On 9/30/06, *Yves Degoyon* <ydegoyon@free.fr mailto:ydegoyon@free.fr> wrote:
In 1952, Turing was convicted of "acts of gross indecency" after admitting to a sexual relationship with a man in Madchester <http://en.wikipedia.org/wiki/Manchester>. He was placed on probation and required to undergo ecstasy therapy <http://en.wikipedia.org/wiki/Hormone_therapy>. Turing died after eating an apple laced with cyanide <http://en.wikipedia.org/wiki/Cyanide> in 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide <http://en.wikipedia.org/wiki/Suicide>.
I wrote for luck They sent me you I sent for juice You gave me poison I order a line You form a queue Try anything hard Is there anything else you can do Well not much I know, I've been trained I can sit and stand And beg and roll over I don't read I just guess There's more than one sign But it's getting less And you were wet But you had a dryer You used to speak the truth But now you're liar You used to speak the truth But now you're clever
stick to the facts man are you on dope ?
sevy
On Sep 30, 2006, at 11:32 PM, chris clepper wrote:
On 9/30/06, Yves Degoyon ydegoyon@free.fr wrote: In 1952, Turing was convicted of "acts of gross indecency" after
admitting to a sexual relationship with a man in Madchester. He was
placed on probation and required to undergo ecstasy therapy.Turing died after eating an apple laced with cyanide in 1954,
sixteen days short of his 42nd birthday. His death is regarded by
most as an act of suicide.I wrote for luck They sent me you
...at first I thought this was by suicide or wire, but then I googled
and found:
http://www.phespirit.info/music/notes/wrote_for_luck.htm
...which makes sense with the "madchester" thing ;-)
heheh, jamie
ola,
Turing died after eating an apple laced with cyanide http://en.wikipedia.org/wiki/Cyanide in 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide http://en.wikipedia.org/wiki/Suicide.
this was just to explain the logo some people have on their machines.
ok, it should have been [OT] from the start,
sevy
Turing died after eating an apple laced with cyanide in 1954, sixteen days short of his 42nd birthday. His death is regarded by most as an act of suicide.
working on computers makes me want to kill myself sometimes, too....Don't take that seriously. It's not a cry for help....If you want, help me with programming :)
Thanks for the entertaining discussion. Chuck
hi, tonite i've been trying to control a stepper motor via pd's
firmata, formerly known as pduino.
im using the arduino-test.pd patch included with in the Pduino-0.1
release, me under linux (gentoo:)
as soon as i choose the devicename port /dev/ttyUSB0 i get a full pd
window with:
error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list' error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list'
this doesn't happen when i open Gerda's and Georg Arduino-help.pd and
since it doesn't crash the process i can continue to check I/O's,
passing data from a potentiometer to pd via analog inputs on the
arduino works like charm.
but i got lost when trying to send control data to a step motor
connected in this way: http://img.photobucket.com/albums/v20/igortme/
Arduino/Ejemplos/ESQUEMA_MOTOR_PASO_A_PASO.jpg
I wonder how should one send the messages to make the motor move in
one direction or the other any precise amount of steps? has anyone
done this (surely yes). could you tell me how will this pd2stepper
sintax goes?
thanks, /alejo
p.s: im sending also to the newly opened arduino mailing list :P
ad wrote:
hi, tonite i've been trying to control a stepper motor via pd's firmata, formerly known as pduino.
im using the arduino-test.pd patch included with in the Pduino-0.1 release, me under linux (gentoo:)
as soon as i choose the devicename port /dev/ttyUSB0 i get a full pd window with:
error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list' error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list'
an object did not create properly (e.g. because the corresponding abstraction/external could not be loaded)
there should be some hint in the pd-console (before all this inlet-error stuff starts)
mfg.asdr IOhannes
PS: for some reason, your email appears to be a part of the thread "pd *is* a programming language". if this is by chance, ignore the following: it is considered bad style to randomly pick an email from the pd-list (or - in general - any mailing list) and "reply" to it with changing the subject and the body. read http://puredata.info/community/lists/netiquette (search for "threads") for more information on this.
Sounds like the [comport] probably didn't create properly. If you
have a recent auto-build or the most recent test release, then you
can send a [info( message to [comport] and get a list of the
available serial ports and their corresponding numbers. Then you
would do [comport 4] if /dev/ttyUSB0 is #4.
.hc
On Oct 1, 2006, at 7:45 PM, ad wrote:
hi, tonite i've been trying to control a stepper motor via pd's
firmata, formerly known as pduino.im using the arduino-test.pd patch included with in the Pduino-0.1
release, me under linux (gentoo:)as soon as i choose the devicename port /dev/ttyUSB0 i get a full
pd window with:error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list' error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list'
this doesn't happen when i open Gerda's and Georg Arduino-help.pd
and since it doesn't crash the process i can continue to check I/ O's, passing data from a potentiometer to pd via analog inputs on
the arduino works like charm.but i got lost when trying to send control data to a step motor
connected in this way: http://img.photobucket.com/albums/v20/ igortme/Arduino/Ejemplos/ESQUEMA_MOTOR_PASO_A_PASO.jpgI wonder how should one send the messages to make the motor move in
one direction or the other any precise amount of steps? has anyone
done this (surely yes). could you tell me how will this pd2stepper
sintax goes?thanks, /alejo
p.s: im sending also to the newly opened arduino mailing list :P
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
The arc of history bends towards justice. - Dr. Martin Luther
King, Jr.
Hans-Christoph Steiner wrote:
Sounds like the [comport] probably didn't create properly. If you have a recent auto-build or the most recent test release, then you can send a [info( message to [comport] and get a list of the available serial ports and their corresponding numbers. Then you would do [comport 4] if /dev/ttyUSB0 is #4.
I changed [comport] a bit recently in CVS so that the [info( message outputs the current state of the comport, and a [devices( message gives the list of devices. This is because the operating system can take a few seconds to get the device list, which only needs to be loaded once, and interferes with real-time updates of the input pin status. As far as steppers go it would be nice to have arduino commands for steppers. It looks like the existing pduino firmware code can only change one pin at a time, it would be nice to have a parallel digital pin command with a mask like set_digital_outs(int output_pattern, int mask) so the set bits in mask would be changed, at the same time, according to output_pattern and the zero bits would be unaffected. Martin
.hc
On Oct 1, 2006, at 7:45 PM, ad wrote:
hi, tonite i've been trying to control a stepper motor via pd's firmata, formerly known as pduino.
im using the arduino-test.pd patch included with in the Pduino-0.1 release, me under linux (gentoo:)
as soon as i choose the devicename port /dev/ttyUSB0 i get a full pd window with:
error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list' error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list'
this doesn't happen when i open Gerda's and Georg Arduino-help.pd and since it doesn't crash the process i can continue to check I/O's, passing data from a potentiometer to pd via analog inputs on the arduino works like charm.
but i got lost when trying to send control data to a step motor connected in this way:
http://img.photobucket.com/albums/v20/igortme/Arduino/Ejemplos/ESQUEMA_MOTOR...I wonder how should one send the messages to make the motor move in one direction or the other any precise amount of steps? has anyone done this (surely yes). could you tell me how will this pd2stepper sintax goes?
thanks, /alejo
p.s: im sending also to the newly opened arduino mailing list :P
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
The arc of history bends towards justice. - Dr. Martin Luther King, Jr.
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Hallo!
As far as steppers go it would be nice to have arduino commands for steppers. It looks like the existing pduino firmware code can only change one pin at a time, it would be nice to have a parallel digital pin command with a mask like set_digital_outs(int output_pattern, int mask) so the set bits in mask would be changed, at the same time, according to output_pattern and the zero bits would be unaffected.
AFAIR it is like this - only that the output bits are splitted in 2 halfs (7 lower and 7 higher bits) ...
LG Georg
Georg Holzmann wrote:
Hallo!
As far as steppers go it would be nice to have arduino commands for steppers. It looks like the existing pduino firmware code can only change one pin at a time, it would be nice to have a parallel digital pin command with a mask like set_digital_outs(int output_pattern, int mask) so the set bits in mask would be changed, at the same time, according to output_pattern and the zero bits would be unaffected.
AFAIR it is like this - only that the output bits are splitted in 2 halfs (7 lower and 7 higher bits) ...
In the Pd_firmware.pde code the pins are set on at a time even if the data is sent as two bytes:
for(i=0; i<7; ++i) {
mask = 1 << i;
if( (digitalPinStatus & mask) && !(pwmStatus & mask) ) {
digitalWrite(i, inputData & mask);
}
}
Martin
On Oct 6, 2006, at 9:53 AM, Martin Peach wrote:
Georg Holzmann wrote:
Hallo!
As far as steppers go it would be nice to have arduino commands
for steppers. It looks like the existing pduino firmware code can
only change one pin at a time, it would be nice to have a
parallel digital pin command with a mask like set_digital_outs (int output_pattern, int mask) so the set bits in mask would be
changed, at the same time, according to output_pattern and the
zero bits would be unaffected.AFAIR it is like this - only that the output bits are splitted in
2 halfs (7 lower and 7 higher bits) ...In the Pd_firmware.pde code the pins are set on at a time even if
the data is sent as two bytes:for(i=0; i<7; ++i) { mask = 1 << i; if( (digitalPinStatus & mask) && !(pwmStatus & mask) ) { digitalWrite(i, inputData & mask); } }
I am definitely open to suggestions as to how to make the code work
better. I've been focused on the protocol design, so little
optimization has happened. In this case, its not quite as simple as
just getting the byte from the serial port and writing it to the
ports. If a PWM is running, then you don't want to write to that
port, that's what pwmStatus is doing.
From what I read about the functions that write a byte at a time to
the digital pins, you have to have all of the pins set to OUTPUT in
order to use them. But I could be wrong.
.hc
Terrorism is not an enemy. It cannot be defeated. It's a tactic.
It's about as sensible to say we declare war on night attacks and
expect we're going to win that war. We're not going to win the war
on terrorism. - retired U.S. Army general, William Odom
Hans-Christoph Steiner wrote:
On Oct 6, 2006, at 9:53 AM, Martin Peach wrote:
...
In the Pd_firmware.pde code the pins are set on at a time even if the data is sent as two bytes:
for(i=0; i<7; ++i) { mask = 1 << i; if( (digitalPinStatus & mask) && !(pwmStatus & mask) ) { digitalWrite(i, inputData & mask); } }
I am definitely open to suggestions as to how to make the code work better. I've been focused on the protocol design, so little optimization has happened. In this case, its not quite as simple as just getting the byte from the serial port and writing it to the ports. If a PWM is running, then you don't want to write to that port, that's what pwmStatus is doing.
From what I read about the functions that write a byte at a time to the digital pins, you have to have all of the pins set to OUTPUT in order to use them. But I could be wrong.
In assembly you can definitely write bytes to the ports, the PWM pins and any other special-purpose pins just ignore the values. In the PIC version that's what I do, because the bit-write instructions don't work properly unless all the pins are outputs. I guess it's Wiring that needs looking at... Martin
On Nov 2, 2006, at 9:53 AM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
On Oct 6, 2006, at 9:53 AM, Martin Peach wrote:
...
In the Pd_firmware.pde code the pins are set on at a time even if
the data is sent as two bytes:for(i=0; i<7; ++i) { mask = 1 << i; if( (digitalPinStatus & mask) && !(pwmStatus & mask) ) { digitalWrite(i, inputData & mask); } }
I am definitely open to suggestions as to how to make the code
work better. I've been focused on the protocol design, so little
optimization has happened. In this case, its not quite as simple
as just getting the byte from the serial port and writing it to
the ports. If a PWM is running, then you don't want to write to
that port, that's what pwmStatus is doing.From what I read about the functions that write a byte at a time
to the digital pins, you have to have all of the pins set to
OUTPUT in order to use them. But I could be wrong.In assembly you can definitely write bytes to the ports, the PWM
pins and any other special-purpose pins just ignore the values. In
the PIC version that's what I do, because the bit-write
instructions don't work properly unless all the pins are outputs. I
guess it's Wiring that needs looking at...
There is not a Wiring/Arduino function for writing bytes, but in that
environment you can just use avr-libc and other libs as if you were
writing straight C/C++:
#include <blah.h>
blah_bytewrite(writeThisByte);
The Wiring/Arduino environment basically just does some
preprocessing, otherwise its straight C++ compiled by gcc.
.hc
http://at.or.at/hans/
On Oct 6, 2006, at 12:14 AM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
Sounds like the [comport] probably didn't create properly. If you
have a recent auto-build or the most recent test release, then you
can send a [info( message to [comport] and get a list of the
available serial ports and their corresponding numbers. Then you
would do [comport 4] if /dev/ttyUSB0 is #4.I changed [comport] a bit recently in CVS so that the [info ( message outputs the current state of the comport, and a [devices ( message gives the list of devices. This is because the operating
system can take a few seconds to get the device list, which only
needs to be loaded once, and interferes with real-time updates of
the input pin status.
Very nice. I just added open status to the [info( report too.
As far as steppers go it would be nice to have arduino commands for
steppers. It looks like the existing pduino firmware code can only
change one pin at a time, it would be nice to have a parallel
digital pin command with a mask like set_digital_outs(int
output_pattern, int mask) so the set bits in mask would be changed,
at the same time, according to output_pattern and the zero bits
would be unaffected.
Couldn't the stepper commands be written as Pd objects or is the
serial port too slow? Do you know the maximum speed you can send the
stepper control pulses?
Also, are there standardized patterns for steppers?
.hc
Martin
.hc
On Oct 1, 2006, at 7:45 PM, ad wrote:
hi, tonite i've been trying to control a stepper motor via pd's
firmata, formerly known as pduino.im using the arduino-test.pd patch included with in the
Pduino-0.1 release, me under linux (gentoo:)as soon as i choose the devicename port /dev/ttyUSB0 i get a full
pd window with:error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list' error: inlet: expected '' but got 'float' error: inlet: expected '' but got 'list'
this doesn't happen when i open Gerda's and Georg Arduino-help.pd
and since it doesn't crash the process i can continue to check I/ O's, passing data from a potentiometer to pd via analog inputs on
the arduino works like charm.but i got lost when trying to send control data to a step motor
connected in this way: http://img.photobucket.com/albums/v20/ igortme/Arduino/Ejemplos/ESQUEMA_MOTOR_PASO_A_PASO.jpgI wonder how should one send the messages to make the motor move
in one direction or the other any precise amount of steps? has
anyone done this (surely yes). could you tell me how will this
pd2stepper sintax goes?thanks, /alejo
p.s: im sending also to the newly opened arduino mailing list :P
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
The arc of history bends towards justice. - Dr. Martin Luther
King, Jr.
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
I have the audacity to believe that peoples everywhere can have three
meals a day for their bodies, education and culture for their minds,
and dignity, equality and freedom for their spirits. - Martin
Luther King, Jr.
Hans-Christoph Steiner wrote:
On Oct 6, 2006, at 12:14 AM, Martin Peach wrote:
...
As far as steppers go it would be nice to have arduino commands for steppers. It looks like the existing pduino firmware code can only change one pin at a time, it would be nice to have a parallel digital pin command with a mask like set_digital_outs(int output_pattern, int mask) so the set bits in mask would be changed, at the same time, according to output_pattern and the zero bits would be unaffected.
Couldn't the stepper commands be written as Pd objects or is the serial port too slow? Do you know the maximum speed you can send the stepper control pulses?
I just tried it yesterday with a bipolar (4-wire) stepper from an old 5 1/4" floppy drive and a dual h-bridge. It worked well if I sent the bit patterns in sequence. The metro was running at around 15ms at the smoothest rotation. Faster than about 10 it started missing steps. The patch is just a counter that bangs a sequence of four numbers into arduino.
Also, are there standardized patterns for steppers?
Here are some: http://www.appliedmotionproducts.com/support/wiring.php I don't know how standard they are. It usually doesn't take long to figure them out from scratch, you can't damage the motor. The coils can be found with an ohmmeter, the sequence by trial and error. Martin
.hc
On Sat, 30 Sep 2006, Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
It's the catalog for the store.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
I also wanted to recommend a good short story by Jorge Luis Borges. It's an absurd dystopia about information theory, permutations, catalogues, metacatalogues, lies, noise, typos, randomness, and meaning. Well, that's what I remember reading into it.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
hey, matthieu
borges is surely relevant, but which short story?
burroughs' 'electronic revolution' would be nice in the context too
sevy
Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
It's the catalog for the store.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
I also wanted to recommend a good short story by Jorge Luis Borges. It's an absurd dystopia about information theory, permutations, catalogues, metacatalogues, lies, noise, typos, randomness, and meaning. Well, that's what I remember reading into it.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Cana da
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Sun, 1 Oct 2006, Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
It's the catalog for the store.
It's not directly a data store, because any kinds of things lie between the data stores of the internet, and the user... if there is even a data store. Often the servers are used for computations rather than storage.
I also wanted to recommend a good short story by Jorge Luis Borges. It's an absurd dystopia about information theory, permutations, catalogues, metacatalogues, lies, noise, typos, randomness, and meaning. Well, that's what I remember reading into it.
oops, I sent the mail before finishing it. Here's the title:
"La Biblioteca de Babel"
http://en.wikipedia.org/wiki/The_Library_of_Babel
Here's the version that I remember reading:
http://jubal.westnet.com/hyperdiscordia/library_of_babel.html
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
Without a doubt my favorite writer. Although it is a recurring theme
in Borges you are probably referring to "The Library of Babel". You
can read a plot summary of this extraordinary story at http://
en.wikipedia.org/wiki/The_Library_of_Babel
On Oct 1, 2006, at 12:53 AM, Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, Mathieu Bouchard wrote:
On Sat, 30 Sep 2006, chris clepper wrote:
It's the catalog for the store.
It's not directly a data store, because any kinds of things lie
between the data stores of the internet, and the user... if there
is even a data store. Often the servers are used for computations
rather than storage.I also wanted to recommend a good short story by Jorge Luis Borges.
It's an absurd dystopia about information theory, permutations,
catalogues, metacatalogues, lies, noise, typos, randomness, and
meaning. Well, that's what I remember reading into it._ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC
Canada_______________________________________________ PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list
Arturo Sinclair Digital Worlds Institute University of Florida tel: 1(352) 294 2082