World: r3wp
[Core] Discuss core issues
older newer | first last |
Robert 30-Apr-2006 [4274x2] | Ok, thanks a lot. That's stuff I'm really going nuts by. I think I will collect all kind of examples and publish them. |
A BIND how-to, that not only explains what's going on but shows examples, examples, examples is what we need. | |
BrianH 30-Apr-2006 [4276] | Ladislav's Bindology article might help. I think it's on rebol.org... |
Robert 30-Apr-2006 [4277x2] | His article is good, but only for gurus to follow. |
Nothing for people getting into first touch with BIND. | |
BrianH 30-Apr-2006 [4279x3] | I actually think that your best bet here is to pass the context you will be saving to the saving function as a parameter, like your original example storage/save-record context-to-save or if you really want to delegate you can assign the function as a member of context-to-save and call it like context-to-save/save-record context-to-save , but then you are changing the context you are saving wih saving overhead. REBOL does direct delegation by default, rather than mixin delegation like Delphi, because REBOL doesn't pass the object reference as a hidden parameter like object-oriented languages do. Rebinding your function body every time would be time-consuming and either non-recursion-safe (bind) or consume a lot of memory (bind/copy) - just passing the context as a parameter would be quicker. |
Also, you could have some conflict with names in both the storage context and context-to-save that could cause the block you are rebinding to accidently lose its meaning in unexpected ways. | |
Not that learning about bind wouldn't be fun... | |
Robert 1-May-2006 [4282] | I might fall back to the parameter solution. My goal is, that with BIND the code becomes much more natural to read and maintain. Because teh storage context needs some knowledge about the context to save, as I'm using a dynamic field-mapping method. Hence I only need to alter the context-to-save (add / remove words) and the storage context can handle it automatically. I have to deal with scheme evolution and versioning. |
BrianH 1-May-2006 [4283x2] | In that case, try the stub functions to hide the parameter passing. It will use less space, be more efficient and safer. |
Logically though, you do have an object that is providing the storage infrastructure and is acting on other objects. The objects aren't storing themselves and their storage isn't their primary function. They are delegating that function to another object. So, other than the data that the storage engine needs, you don't really need to be distributing the code for storage throughout the data to be stored, unless these objects need per-object-specific serialization and versioning algorithms. All the dynamic context manipulations cal be done by your storage engine working on the objects to be stored as data - they really are anyways. | |
Robert 1-May-2006 [4285x2] | Ok, I have tested some ways. The bind solution is nice but has the disadvantage, that I can't handle more than one currenct storage-context. |
So, back to setting the storage-context and than all functions work on this context. | |
Ladislav 1-May-2006 [4287x2] | Anton: " >> ctx-A: context [a: 60] >> my-func: func [][a: 5] >> blk: [] append blk second :my-func == [a: 5] >> bind blk ctx-A == [a: 5] >> ?? ctx-A ctx-A: make object! [ a: 60 ] >> my-func == 5 >> ?? ctx-A ctx-A: make object! [ a: 60 ] - you would have to change it to: ctx-A: context [a: 60] my-func: func [][a: 5] blk: [] append/only blk second :my-func bind blk ctx-A ?? ctx-A my-func ; == 5 ?? ctx-A |
:-) | |
Anton 2-May-2006 [4289] | Ah yes, that would leave the block as is, instead of "unwrapping" it, which surprisingly unbinds the words. |
Gabriele 2-May-2006 [4290x2] | unwrapping does not unbind; unwrapping copies. |
that is, b: [] append b block and b: copy block are basically the same thing | |
Anton 2-May-2006 [4292] | Oh ok. So more specifically, the insert copies the words, but not their binding. |
Ladislav 2-May-2006 [4293x2] | insert copies words *and* their binding of course |
your problem is, that if you do bind copy block 'context the original BLOCK will stay unaffected | |
Anton 2-May-2006 [4295] | Ah of course! What am I thinking.! So yes, as Gabriele said, my confusion was in not understanding that the words were copied. |
Henrik 6-May-2006 [4296] | does make-dir/deep not work on FTP sites? |
Anton 7-May-2006 [4297x2] | No, and it caused me grief. But there is help at hand ! I patched make-dir to support FTP. |
Use the first definition, second one still has issues. http://home.wilddsl.net.au/anton/rebol/patch/make-dir-patch.r | |
Henrik 7-May-2006 [4299x2] | I think it works. Thanks. |
is this patch submitted to RAMBO? | |
Anton 7-May-2006 [4301] | No. I think I didn't think I still wanted to think about it, perhaps finding a better way as the second function is attempting to do. |
Gabriele 8-May-2006 [4302] | i think there are issues with ftp as a url path is not guaranteed to match the file system path |
Sunanda 8-May-2006 [4303] | A URL path is _supposed_ to map to the file system path _if_ the scheme is ftp:// / has no assumed hierachical meaning in other URL schemes. Hence the confusion at times. I think REBOL is playing safe in not assuming the mapping. And, given how badly many FTP clients are written, that is probably for the best. |
Louis 8-May-2006 [4304] | How can I change the smtp port to 26? |
Graham 8-May-2006 [4305] | install the protocol on port 26 |
Louis 8-May-2006 [4306] | How? :>) |
Graham 8-May-2006 [4307] | http://www.rebol.com/docs/core23/rebolcore-13.html- on how to use the port specification directly. |
Louis 8-May-2006 [4308x2] | I don't find what you are referring to. I've tried this: system/schemes/smtp/port-id: 26 But either that is incorrect or else something else is the problem. |
This doesn't work either: smtp: open/lines tcp://bible-way.org:26 | |
Graham 8-May-2006 [4310x3] | It should do. |
then you can query the smtp directly. Try insert smtp "HELO Louis-here" probe copy smtp and you should see a response | |
or not ... | |
Louis 8-May-2006 [4313] | >> smtp: open/lines tcp://bible-way.org:26 >> insert smtp "HELO Louis-here" >> probe copy smtp ** Access Error: Network timeout ** Near: probe copy smtp >> |
Graham 9-May-2006 [4314] | >> smtp: open/lines tcp://bible-way.org:26 >> insert smtp "HELO Louis.com" >> pick smtp 1 == {220-box61.bluehost.com ESMTP Exim 4.52 #1 Mon, 08 May 2006 22:02:46 -0600 } >> pick smtp 1 == {220-We do not authorize the use of this system to transport unsolicited, } >> pick smtp 1 == "220 and/or bulk e-mail." >> pick smtp 1 == {250 box61.bluehost.com Hello 203-79-92-225.cable.paradise.net.nz [203.79.92.225]} |
Louis 9-May-2006 [4315] | Hummmm. Thanks, Graham. There must be something else I am doing wrong. |
ScottT 9-May-2006 [4316] | I think I wish smtp just went away forever. so many different better ways to send messages already. |
Louis 9-May-2006 [4317x2] | What agravates me is that this script worked fine until we changed hosting service. Now this and other scripts are broken. |
Well, I can't find anything wrong with the script, and trace/net gives no error messages. | |
Izkata 9-May-2006 [4319] | copy waits for the port to close, then returns everything sent |
Louis 9-May-2006 [4320x2] | Now I am getting: Net-log: ["Opening" "tcp" "for" "esmtp"] Net-log: [none "220"] Net-log: {220-box61.bluehost.com ESMTP Exim 4.52 #1 Tue, 09 May 2006 05:01:25 -0600 } Net-log: {220-We do not authorize the use of this system to transport unsolicited, } Net-log: "220 and/or bulk e-mail." Net-log: [["HELO" system/network/host] "250"] Net-log: {250 box61.bluehost.com Hello ip68-97-225-211.ok.ok.cox.net [68.97.225.211]} Net-log: ["AUTH CRAM-MD5" "334"] Net-log: ["WARNING! Using plain authentication."] Net-log: [{AUTH PLAIN bGF0dXJrQGJpYmxlLXdheS5vcmcAbGF0dXJrQGJpYmxlLXdheS5vcmcAaXN0cmkx} "235" ] |
Izkata, I don't understand what you mean. | |
Oldes 9-May-2006 [4322x2] | system/schemes/smtp/port-id: 26 |
Hm, it was already mentioned. Your problem is, that your provider do not accept PLAIN authentication, It requires CRAM-MD5 authentication as you can see from the log | |
older newer | first last |