r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

BrianH
16-Nov-2010
[490]
** uses a decimal operation, so if it didn't return a decimal it 
would have conversion losses. For powers of 2 SHIFT is better.
GrahamC
17-Nov-2010
[491]
I was thinking of powers of integers so that makes sense
Sunanda
17-Nov-2010
[492]
Mean WHILE.....Thanks for debugging my example, Brian. I got confused 
and reported the wrong thing.


Yes -- on R3 if is possible to modify the cond-block and that modification 
will be respected. That''s how I hoped it would be.


It is not possible to _replace_ the cond-block by reassigning its 
word. But that's understandable and probably exactly what we'd all 
want:

   cb: [true cb: [n < 3] true]       ;; cond-block that overwrites itself
    n: 0

    while cb [n: n + 1 print [n cb]]   ;; WHILE that uses original cond-block
Ladislav
17-Nov-2010
[493x3]
Re: ";; cond-block that overwrites itself" I am having trouble with 
this formulation, since it is not true; the block (when evaluated), 
just changes what the CB variable refers to, but surely does not 
everwrite itself.
err: 'cb and overwrite
we need to make distinction between overwriting a variable, and overwriting 
a block
Anton
17-Nov-2010
[496x3]
Sunanda should know better.
Perhaps WHILE could also accept a word! for its condition parameter, 
and when it does, evaluates it to the block it is expected to reference 
before continuing to evaluate as usual.
Eg.
	while 'cb [...]
That functionality is pretty easy to by evaluating the word inside 
the condition block yourself.
eg.
	while [do cb] [...]

so I don't think it's really necessary.
BrianH
19-Nov-2010
[499]
What should this function be called, and what options does it need?

change-in: funct [key value] [
    either a: find block key [change next a :value][
        repend block [key :value]
    ]
]


It basically implements the a/key: value operation of maps, but for 
series.
Sunanda
19-Nov-2010
[500]
Andrew Martin chose ASSOCIATE for that sort of thing:
   http://www.rebol.org/view-script.r?script=associate.r
BrianH
19-Nov-2010
[501]
SQL calls it MERGE, because UPDATE was taken.
ChristianE
19-Nov-2010
[502]
I suppose you had FUNCT [BLOCK KEY VALUE] in mind for the above, 
Brian? If so, I think I like MERGE much, but every now and then someone 
has to suggest ALTER
Gregg
19-Nov-2010
[503]
I vote for UPDATE. It should be able to handle more than ports, even 
if the behavior isn't exactly the same.
ChristianE
19-Nov-2010
[504]
Yes, of course, Gregg, UPDATE only working on ports seems indeed 
too limited for such a nice word. 


BTW, Brian, is the above behaviour to return after the change for 
updates and at the insertion for inserts intended?

>> update: :change-in
>> attributes: []
== []
>> update attributes 'color red
== [color 255.0.0]
>> update attributes 'color blue
== [] ; or rather [color 0.0.255]
Maxim
19-Nov-2010
[505]
its the natural completement to SELECT, so UPDATE is quite natural.
ChristianE
19-Nov-2010
[506x2]
On the other side, to answer your question, it's related to SELECT 
and should probably support most, if not all, of SELECT's refinements, 
too. That's a bit of a stretch, because for ports UPDATE probably 
needs to be very fast and can't be thwarted by too complicated refinement 
handling?
Ah, Max, you're first ;-)
Maxim
19-Nov-2010
[508]
hehe
Andreas
19-Nov-2010
[509x2]
UPSERT
Widely used term (in database circles) for this operation.
BrianH
19-Nov-2010
[511x3]
I wasn't the original author, but I'm willing to bet that the return 
value wasn't considered. The best behavior would be to return the 
head.
Same for the [block yey value] thing :)
Andreas, the recent SQL standards call this operation MERGE, partly 
because UPSERT sounds terrible.
GrahamC
19-Nov-2010
[514x3]
Can anyone suggest a free tool that can be used to decrypt files 
that have been encrypted using Rebol's Rijndael using a 128 bit key?
And not Rebol!
ie. I want to be sure that if I send a file encrypted using AES, 
that someone can decrypt it.
PeterWood
19-Nov-2010
[517x2]
Try here: http://www.movable-type.co.uk/scripts/aes.html
or this http://people.eku.edu/styere/Encrypt/JS-AES.html
GrahamC
19-Nov-2010
[519]
those only encrypt/decrypt text .. looking for a file tool
PeterWood
20-Nov-2010
[520]
via Google http://www.aescrypt.com/
Gregg
20-Nov-2010
[521]
-1 for UPSERT.
GrahamC
20-Nov-2010
[522x3]
aescrypt looks good .. now to see if it can read a file encrypted 
by Rebol
Hmm ... http://www.rebol.org/view-script.r?script=crypt.r


I changed the strength to 256, and algorithm to rijndael .. and encrypted 
a file, but get an out of memory when I try to decrypt it :(
the other issue is that Carl uses checksum/secure to turn the passphrase 
into a binary encryption so tricky to get another tool to decrypt 
using that binary key
Sunanda
20-Nov-2010
[525]
checksum/secure is a SHA-1 hash.....Hashes are not decryptable, but 
you should find other tools that can produce a SHA-1 hash.
GrahamC
20-Nov-2010
[526x5]
the difficulty is pasting the binary as input to the fields used 
by programs such as aescrypt
I'm not even sure that the encryption needs a binary encryption key
encryption port needs ...
Well, I used the encryption key as a string instead and encrypted 
to 256 bits using Rijndael and successfully decrypted with Rebol. 
 But aescrypt was not able to decrypt the file :(
I had padding set to false
Oldes
21-Nov-2010
[531]
If you have counters block and want to increment it, is there some 
better solution than this one?
	b: ["a" 1 "b" 1]
	change f: find/tail b "a" f/1 + 1
	probe b
Cyphre
21-Nov-2010
[532]
don't know if any of these are better(and in which sense better):

change n: next find b "b" n/1 + 1

b/("a"): b/("a")  + 1
...
Sunanda
21-Nov-2010
[533]
This does it without using a temporary word....and it should work 
even if the counter name is not amenable to Cyphre's path notation 
(ie you are using something more exotic that strings for counter 
ids, or are using an older version of /Core).
   b:  next find/skip head b "a" 2 b b/1: b/1 + 1
Just remember to reset ....
   b: head b
....once in a while:)
Oldes
21-Nov-2010
[534x3]
b/("a"): b/("a")  + 1
is the winner as it's a little bit faster and shorter.
Isn't this a bug?

>> make-dir %tmp/
== %tmp/
>> write %tmp/test ""
>> exists? probe first reduce [join %.\tmp "\test"]
%./tmp\test
== true
>> delete probe first reduce [join %.\tmp "\test"]
%./tmp\test
** Access Error: Cannot delete ./tmp\test
** Near: delete probe first reduce [join %./tmp "\test"]
>> delete probe first [%.\tmp\test] ;this works
%./tmp/test
I expect that when it's possible to get true on exists?, the delete 
should work.
Izkata
21-Nov-2010
[537]
I get false on the exists? line (linux, 2.7.6)
Anton
22-Nov-2010
[538x2]
Oldes, what filesystem ?
EXISTS? creates a port from the file! argument, then queries that.
DELETE doesn't work with ports.

I guess it is the creation of a port or QUERY which is able to handle 
backslashes, and DELETE cannot.